<?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>134677</bug_id>
          
          <creation_ts>2014-07-06 22:44:08 -0700</creation_ts>
          <short_desc>[ftlopt] DFG should be able to do GCSE in SSA and this should be unified with the CSE in CPS, and both of these things should use abstract heaps for reasoning about effects</short_desc>
          <delta_ts>2014-07-15 08:49:42 -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>528+ (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>
          <dependson>134730</dependson>
    
    <dependson>134739</dependson>
    
    <dependson>134742</dependson>
    
    <dependson>134870</dependson>
          <blocked>134737</blocked>
    
    <blocked>134797</blocked>
    
    <blocked>134876</blocked>
    
    <blocked>134893</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1020773</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-06 22:44:08 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020775</commentid>
    <comment_count>1</comment_count>
      <attachid>234479</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-06 22:46:01 -0700</bug_when>
    <thetext>Created attachment 234479
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020942</commentid>
    <comment_count>2</comment_count>
      <attachid>234523</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-07 15:43:02 -0700</bug_when>
    <thetext>Created attachment 234523
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021017</commentid>
    <comment_count>3</comment_count>
      <attachid>234539</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-07 20:13:24 -0700</bug_when>
    <thetext>Created attachment 234539
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021192</commentid>
    <comment_count>4</comment_count>
      <attachid>234595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-08 14:14:52 -0700</bug_when>
    <thetext>Created attachment 234595
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021284</commentid>
    <comment_count>5</comment_count>
      <attachid>234619</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-08 21:34:07 -0700</bug_when>
    <thetext>Created attachment 234619
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021296</commentid>
    <comment_count>6</comment_count>
      <attachid>234621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-08 23:04:11 -0700</bug_when>
    <thetext>Created attachment 234621
it is written!

GCSE implemented with clobberizing functors.  How much more nerdy can you get?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021440</commentid>
    <comment_count>7</comment_count>
      <attachid>234656</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-09 14:22:53 -0700</bug_when>
    <thetext>Created attachment 234656
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021475</commentid>
    <comment_count>8</comment_count>
      <attachid>234668</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-09 16:37:11 -0700</bug_when>
    <thetext>Created attachment 234668
it gcsed some stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021561</commentid>
    <comment_count>9</comment_count>
      <attachid>234688</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-09 22:10:05 -0700</bug_when>
    <thetext>Created attachment 234688
it seems to work

Still doing a bunch of testing.  I may yet have to implement a faster HashMap-less LCSE mode for small basic blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021563</commentid>
    <comment_count>10</comment_count>
      <attachid>234689</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-09 22:12:09 -0700</bug_when>
    <thetext>Created attachment 234689
new DFGCSEPhase.cpp

Posting this because the svn diff is messed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021660</commentid>
    <comment_count>11</comment_count>
      <attachid>234710</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-10 11:08:13 -0700</bug_when>
    <thetext>Created attachment 234710
it passes tests

Passes tests; now on to performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021758</commentid>
    <comment_count>12</comment_count>
      <attachid>234737</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-10 18:52:48 -0700</bug_when>
    <thetext>Created attachment 234737
the patch

Note that when reviewing this, you can use the DFGCSEPhase.cpp file that I uploaded instead of trying to decypher that part of the diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021876</commentid>
    <comment_count>13</comment_count>
      <attachid>234773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-11 11:47:35 -0700</bug_when>
    <thetext>Created attachment 234773
the patch

Refined the CSEPhase to have a faster path for small blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021954</commentid>
    <comment_count>14</comment_count>
      <attachid>234773</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-07-11 20:56:57 -0700</bug_when>
    <thetext>Comment on attachment 234773
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:71
&gt; +    ClobberFilter filter(heap);
&gt; +    map.removeIf(filter);

Instead of using a functor, you could use a lambda:

map.removeIf([heap](const ImpureMap::KeyValuePairType&amp; pair) {  return heap.overlaps(pair.key.heap()); }); or some such jazz.

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:667
&gt; +    void getBlocksInPreOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; +    void getBlocksInPostOrder(Vector&lt;BasicBlock*&gt;&amp; result);

There isn&apos;t any reason I can see that these couldn&apos;t return a Vector, rather than taking one by reference.  RVO should kick in for them.

&gt; Source/WTF/wtf/HashTable.h:1037
&gt; +    template&lt;typename Functor&gt;
&gt; +    inline void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::removeIf(Functor&amp; functor)

I really like this, and was just telling Tim Horton we needed this the other day.  If you wanted to be awesome, you would land this separate (and in trunk).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021981</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-12 11:17:40 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 234773 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234773&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:71
&gt; &gt; +    ClobberFilter filter(heap);
&gt; &gt; +    map.removeIf(filter);
&gt; 
&gt; Instead of using a functor, you could use a lambda:
&gt; 
&gt; map.removeIf([heap](const ImpureMap::KeyValuePairType&amp; pair) {  return heap.overlaps(pair.key.heap()); }); or some such jazz.

Is this always guaranteed to have the same performance as a functor?

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.h:667
&gt; &gt; +    void getBlocksInPreOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; &gt; +    void getBlocksInPostOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; 
&gt; There isn&apos;t any reason I can see that these couldn&apos;t return a Vector, rather than taking one by reference.  RVO should kick in for them.

Eventually, we can change this.  Note that what I&apos;m doing is renaming DepthFirstOrder to PreOrder; that method already returned its result via the result argument.

&gt; 
&gt; &gt; Source/WTF/wtf/HashTable.h:1037
&gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; +    inline void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::removeIf(Functor&amp; functor)
&gt; 
&gt; I really like this, and was just telling Tim Horton we needed this the other day.  If you wanted to be awesome, you would land this separate (and in trunk).

I&apos;ll land it separately and on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021989</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-07-12 12:47:18 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 234773 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234773&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:71
&gt; &gt; &gt; +    ClobberFilter filter(heap);
&gt; &gt; &gt; +    map.removeIf(filter);
&gt; &gt; 
&gt; &gt; Instead of using a functor, you could use a lambda:
&gt; &gt; 
&gt; &gt; map.removeIf([heap](const ImpureMap::KeyValuePairType&amp; pair) {  return heap.overlaps(pair.key.heap()); }); or some such jazz.
&gt; 
&gt; Is this always guaranteed to have the same performance as a functor?

It is supposed to, though I have not verified this. (My recollection is that clang essentially implements lambdas as a sort of sugary-functor).

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.h:667
&gt; &gt; &gt; +    void getBlocksInPreOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; &gt; &gt; +    void getBlocksInPostOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; &gt; 
&gt; &gt; There isn&apos;t any reason I can see that these couldn&apos;t return a Vector, rather than taking one by reference.  RVO should kick in for them.
&gt; 
&gt; Eventually, we can change this.  Note that what I&apos;m doing is renaming DepthFirstOrder to PreOrder; that method already returned its result via the result argument.

Ok.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/HashTable.h:1037
&gt; &gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; &gt; +    inline void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::removeIf(Functor&amp; functor)
&gt; &gt; 
&gt; &gt; I really like this, and was just telling Tim Horton we needed this the other day.  If you wanted to be awesome, you would land this separate (and in trunk).
&gt; 
&gt; I&apos;ll land it separately and on trunk.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022084</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-12 22:18:37 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (From update of attachment 234773 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234773&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:71
&gt; &gt; &gt; &gt; +    ClobberFilter filter(heap);
&gt; &gt; &gt; &gt; +    map.removeIf(filter);
&gt; &gt; &gt; 
&gt; &gt; &gt; Instead of using a functor, you could use a lambda:
&gt; &gt; &gt; 
&gt; &gt; &gt; map.removeIf([heap](const ImpureMap::KeyValuePairType&amp; pair) {  return heap.overlaps(pair.key.heap()); }); or some such jazz.
&gt; &gt; 
&gt; &gt; Is this always guaranteed to have the same performance as a functor?
&gt; 
&gt; It is supposed to, though I have not verified this. (My recollection is that clang essentially implements lambdas as a sort of sugary-functor).

That makes sense.  However, my numbers indicate that there *is* a performance difference.  I&apos;ll keep the functor.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.h:667
&gt; &gt; &gt; &gt; +    void getBlocksInPreOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; &gt; &gt; &gt; +    void getBlocksInPostOrder(Vector&lt;BasicBlock*&gt;&amp; result);
&gt; &gt; &gt; 
&gt; &gt; &gt; There isn&apos;t any reason I can see that these couldn&apos;t return a Vector, rather than taking one by reference.  RVO should kick in for them.
&gt; &gt; 
&gt; &gt; Eventually, we can change this.  Note that what I&apos;m doing is renaming DepthFirstOrder to PreOrder; that method already returned its result via the result argument.
&gt; 
&gt; Ok.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/HashTable.h:1037
&gt; &gt; &gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; &gt; &gt; +    inline void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::removeIf(Functor&amp; functor)
&gt; &gt; &gt; 
&gt; &gt; &gt; I really like this, and was just telling Tim Horton we needed this the other day.  If you wanted to be awesome, you would land this separate (and in trunk).
&gt; &gt; 
&gt; &gt; I&apos;ll land it separately and on trunk.
&gt; 
&gt; Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022085</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-12 22:30:15 -0700</bug_when>
    <thetext>Right now I&apos;m fine-tuning how the CSE operates.  I&apos;ve got one version that always uses HashMaps and another that has LCSE use HashMaps for smallish blocks (what Sam reviewed).  It&apos;s not clear that the latter is a win; in fact it&apos;s sometimes a loss.

I&apos;m using large numbers of iterations on a very quiet machine to do these measurements. This is where my conclusion that the version that used a lambda instead of a traditional functor was slower came from.

I&apos;m going to do one more run to try to figure out which is better - dual-specialized LCSE versus always-HashMap LCSE - and then I&apos;ll land the winner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022143</commentid>
    <comment_count>19</comment_count>
      <attachid>234835</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-13 17:00:58 -0700</bug_when>
    <thetext>Created attachment 234835
almost ready to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022422</commentid>
    <comment_count>20</comment_count>
      <attachid>234907</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-14 23:48:03 -0700</bug_when>
    <thetext>Created attachment 234907
closer to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022486</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-15 08:49:42 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/171106</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234479</attachid>
            <date>2014-07-06 22:46:01 -0700</date>
            <delta_ts>2014-07-07 15:43:02 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTcwODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAjZGVmaW5lIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChtYWNybykg
XAogICAgIG1hY3JvKEludmFsaWRBYnN0cmFjdEhlYXApIFwKICAgICBtYWNybyhXb3JsZCkgXAot
ICAgIG1hY3JvKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpIFwKLSAgICBtYWNybyhBcmd1bWVudHNf
b3ZlcnJpZGVMZW5ndGgpIFwKKyAgICBtYWNybyhBcmd1bWVudHNfbGVuZ3RoKSBcCiAgICAgbWFj
cm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAogICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1l
bnRzKSBcCiAgICAgbWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDE3MDgzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTEsNiArMTUxLDM2IEBAIHB1YmxpYzoKICAgICAgICAgbV93b3Jkc1sxXS5tX2Vu
Y29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgaWYg
KCFjaGlsZDEoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAg
ICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChjaGlsZDEoKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJI
YXNoPE5vZGUqPjo6aGFzaChjaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNoaWxk
MygpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dCAqPSAzOworICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChjaGls
ZDMoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWRqYWNlbmN5TGlzdCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gY2hpbGQxKCkgPT0gb3RoZXIuY2hpbGQxKCkKKyAgICAgICAgICAg
ICYmIGNoaWxkMigpID09IG90aGVyLmNoaWxkMigpCisgICAgICAgICAgICAmJiBjaGlsZDMoKSA9
PSBvdGhlci5jaGlsZDMoKTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIEVkZ2UgbV93b3Jk
c1tTaXplXTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTcwODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDM1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIHsKKworLy8gSGVyZSdzIHRoZSBw
bGFuLiBSZWdhcmRsZXNzIG9mIGdyYXBoIGZvcm0sIHRoZXJlIHdpbGwgYmUgYW4gdGVtcGxhdGl6
ZWQgYWxnb3JpdGhtIG9mIHRoZSBmb3JtOgorLy8KKy8vICAgICBpZiAoaXNQdXJlKG5vZGUpKSB7
CisvLyAgICAgICAgIE5vZGUqIG1hdGNoID0gZmluZFB1cmVGdW5jdG9yKFB1cmVWYWx1ZTo6Y29t
cHV0ZUZvcihub2RlKSk7CisvLyAgICAgICAgIGlmIChtYXRjaCAmJiAhd2VpcmRTcGVjaWFsQ2Fz
ZXMobm9kZSwgbWF0Y2gpKQorLy8gICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQobWF0Y2gpOwor
Ly8gICAgIH0gZWxzZSB7CisvLyAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworLy8gICAg
ICAgICAuLi4gLy8gc3R1ZmYKKy8vICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogLy8gZm9yIGV4
YW1wbGUKKy8vICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gZmluZEhlYXBEZWZpbml0aW9uRnVu
Y3RvcihIZWFwTG9jYXRpb24oQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgLi4uKSwgbm9k
ZS0+Y2hpbGQxKCkpKTsKKy8vICAgICAgICAgICAgIGlmIChtYXRjaCkKKy8vICAgICAgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChtYXRjaCk7CisvLyAgICAgICAgICAgICBicmVhazsKKy8vICAg
ICAgICAgZGVmYXVsdDoKKy8vICAgICAgICAgICAgIGJyZWFrOworLy8gICAgICAgICB9CisvLyAg
ICAgfQorLy8KKy8vIEZvciBib3RoIENQUyBhbmQgU1NBLCB3ZSB3aWxsIG1hbmFnZSBIYXNoTWFw
cyBmb3IgYm90aCB0aGUgcHVyZSBhbmQgaW1wdXJlIGNhc2VzLiBUaGUgZGlmZmVyZW5jZQorLy8g
aXMgdGhhdCBmb3IgQ1BTLCB0aGUgbWFwcyBhcmUganVzdCBibG9jay1sb2NhbDsgd2hpbGUgZm9y
IFNTQSwgd2Ugd2lsbCBoYXZlIGEgZ2xvYmFsCisvLyBvbmUtdG8tbWFueSBtYXAgZm9yIHB1cmUg
dmFsdWVzLCBhbmQgYSBibG9jay1sb2NhbCBtYXAgZm9yIGhlYXAgbG9jYXRpb25zIGFsb25nIHdp
dGgKKy8vIGhlYXAtbG9jYXRpb25zLWF0LWVuZCBhbmQgY2xvYmJlciBzZXRzIGZvciBlYWNoIGJh
c2ljIGJsb2NrIHRoYXQgZmFjaWxpdGF0ZSBhIGJhY2t3YXJkcyBzZWFyY2guCisvLworLy8gSXQn
cyBub3QgY2xlYXIgdGhhdCB0aGUgd2VpcmRTcGVjaWFsQ2FzZXMoKSB0aGluZyBpcyBzbWFydCwg
YnV0IGF0IHRoZSBzYW1lIHRpbWUsIGl0J3Mgbm90IGNsZWFyCisvLyBpZiB0aGVyZSBpcyBhIGJl
dHRlciB3YXkuCisKIGNsYXNzIENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAg
ICBDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCkBAIC0xMTY3LDYgKzExOTYsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9jaGFuZ2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1
YnN0YW50aXZlIGVmZmVjdCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgogfTsKIAorfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKIGJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7CiAgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkocmV2aXNpb24gMTcw
ODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCitib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAg
Q2hlY2tDbG9iYmVyaXplIGFkZEFjY2VzczsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBh
ZGRBY2Nlc3MsIGFkZEFjY2Vzcyk7CisgICAgcmV0dXJuIGFkZEFjY2Vzcy5yZXN1bHQoKTsKK30K
KwogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBOb09w
Q2xvYmJlcml6ZSBhZGRSZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MDgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsMTEgKzUyMCwxMSBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAg
ICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOwotICAgICAgICAgICAgcmVhZChB
cmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX2xlbmd0
aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJh
eSk7CiAgICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5MCw2ICs2OTAsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9yZXN1bHQ7CiB9OwogCitib29sIGlzUHVyZShHcmFwaCosIE5vZGUqKTsgLy8gUHVy
ZSBtZWFucyBpdCBkb2VzIG5vIHJlYWRzIG9yIHdyaXRlcy4KKwogYm9vbCBkb2VzV3JpdGVzKEdy
YXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbGxlY3RIZWFwRGVmaW5pdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbGxlY3RIZWFwRGVmaW5pdGlv
bnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29sbGVj
dEhlYXBEZWZpbml0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29s
bGVjdEhlYXBEZWZpbml0aW9uc19oCisjZGVmaW5lIERGR0NvbGxlY3RIZWFwRGVmaW5pdGlvbnNf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIHRlbGxzIHlvdSB0aGUgaGVh
cCBsb2NhdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBj
b21wcmlzZXMgYW4KKy8vIGFic3RyYWN0IGhlYXAgYW5kIHNvbWUgbm9kZXMuIFRoZSBsb2NhdGlv
bnMgcmV0dXJuZWQgbXVzdCBvYmV5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKy8vCisvLyAt
IElmIHNvbWVvbmUgd2FudHMgdG8gQ1NFIGEgbG9hZCBmcm9tIHRoZSBoZWFwLCB0aGVuIGEgSGVh
cExvY2F0aW9uIG9iamVjdCBzaG91bGQgYmUgc3VmZmljaWVudAorLy8gICB0byBmaW5kIGEgc2lu
Z2xlIG1hdGNoaW5nIG5vZGUuCisvLworLy8gLSBUaGUgYWJzdHJhY3QgaGVhcCBpcyB0aGUgb25s
eSBhYnN0cmFjdCBoZWFwIHRoYXQgY291bGQgYmUgY2xvYmJlcmVkIHRvIGludmFsaWRhdGUgYW55
IHN1Y2ggQ1NFCisvLyAgIGF0dGVtcHQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIGNvbGxlY3RIZWFwRGVmaW50aW9ucyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEZ1bmN0
b3ImIGZ1bmN0b3IpCit7CisgICAgQVNTRVJUKCFpc1B1cmUoZ3JhcGgsIG5vZGUpKTsKKyAgICAK
KyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Cisg
ICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBmdW5jdG9yKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgZnVuY3RvcihI
ZWFwTG9jYXRpb24oQXJndW1lbnRzX2xlbmd0aCwgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlQobW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAg
ICAgZnVuY3RvcihIZWFwTG9jYXRpb24oSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoLCBub2RlLT5j
aGlsZDEoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICBjYXNlIFB1dEds
b2JhbFZhcjoKKyAgICAgICAgZnVuY3RvcihIZWFwTG9jYXRpb24oQWJzdHJhY3RIZWFwKEFic29s
dXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICAgICAgZnVuY3RvcihIZWFwTG9jYXRpb24o
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEo
KSkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgor
ICAgICAgICBmdW5jdG9yKEhlYXBMb2NhdGlvbihBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT52YXJOdW1iZXIoKSksIG5vZGUtPmNoaWxkMigpKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgLy8gV2UgdXNlIGEgZGVmYXVsdCBjYXNlIGZvciB0aGlzIGFuYWx5c2lzIGJl
Y2F1c2UgaXQncyBhbHdheXMgY29ycmVjdCB0byByZXBvcnQgbm8gaGVhcAorICAgICAgICAvLyBk
ZWZpbml0aW9ucy4gT3ZlcmFsbCB0aGVyZSBpcyB2ZXJ5IGxpdHRsZSBoYXJtIHRvIGV4Y2x1ZGlu
ZyBhIG5vZGUgZnJvbSB0aGlzIHN3aXRjaC4gSXQKKyAgICAgICAgLy8gaXMgYmV0dGVyIHRvIGV4
Y2x1ZGUgYSBub2RlIHRoYW4gaXQgaXMgdG8gaW5jbHVkZSBpdCBpbmNvcnJlY3RseS4KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NvbGxlY3RIZWFwRGVmaW5pdGlv
bnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRp
b24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBIZWFwTG9jYXRpb246OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9oZWFwKTsKKyAgICAK
KyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91dC5wcmludCgi
WyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91dC5wcmludCgiLCAiLCBt
X2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdIZWFwTG9jYXRpb25faAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNp
bmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBIZWFwTG9jYXRpb24oQWJzdHJhY3RI
ZWFwIGhlYXAgPSBBYnN0cmFjdEhlYXAoKSwgTm9kZSogYmFzZSA9IG51bGxwdHIsIE5vZGUqIGlu
ZGV4ID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAgICAgLCBtX2Jhc2Uo
YmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEh
bV9oZWFwIHx8ICFtX2Jhc2UpOworICAgICAgICBBU1NFUlQobV9iYXNlIHx8ICFtX2luZGV4KTsK
KyAgICB9CisgICAgCisgICAgSGVhcExvY2F0aW9uKEFic3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJh
c2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCisgICAgICAgIDogSGVhcExvY2F0aW9uKGhlYXAsIGJh
c2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBIZWFwTG9j
YXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1faGVhcChX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2Jhc2UobnVsbHB0cikKKyAg
ICAgICAgLCBtX2luZGV4KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYXA7IH0KKyAgICAKKyAgICBBYnN0cmFjdEhl
YXAgaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25z
dCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBOb2RlKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2hlYXAuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2luZGV4
KSArIG1fa2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBM
b2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9oZWFwID09IG90
aGVyLm1faGVhcAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAg
ICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KKyAgICAKKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2hlYXAuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBYnN0cmFj
dEhlYXBLaW5kIG1fa2luZDsKKyAgICBOb2RlKiBtX2Jhc2U7CisgICAgTm9kZSogbV9pbmRleDsK
K307CisKK3N0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IEhlYXBMb2NhdGlvbiYgYSwgY29uc3QgSGVhcExvY2F0aW9u
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6SGVhcExv
Y2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzpIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpERkc6SGVhcExvY2F0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdIZWFwTG9jYXRp
b25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHVyZVZhbHVlX2gKKyNkZWZpbmUgREZH
UHVyZVZhbHVlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFB1cmVWYWx1ZSB7
CitwdWJsaWM6CisgICAgUHVyZVZhbHVlKCkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkK
KyAgICAgICAgLCBtX2luZm8oMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShO
b2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIHVpbnRwdHJfdCBpbmZv
KQorICAgICAgICA6IG1fb3Aob3ApCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAg
ICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGRlZmF1bHRGbGFn
cyhvcCkgJiBOb2RlSGFzVmFyQXJncykpOworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBl
KQorICAgICAgICAsIG1faW5mbygxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiAhbV9pbmZvOyB9
CisgICAgCisgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9
CisgICAgdWludHB0cl90IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxp
bnQ+OjpoYXNoKHN0YXRpY19jYXN0PGludD4ob3ApKSArIG1fY2hpbGRyZW4uaGFzaCgpICsgbV9p
bmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVyZVZhbHVlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IG90aGVyLm1fb3AKKyAg
ICAgICAgICAgICYmIG1fY2hpbGRyZW4gPT0gb3RoZXIubV9jaGlsZHJlbgorICAgICAgICAgICAg
JiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcCA9PSBM
YXN0Tm9kZVR5cGUgJiYgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIFB1cmVWYWx1ZSBjb21wdXJlRm9y
KE5vZGUqIG5vZGUpOworCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1fb3A7CisgICAgQWRqYWNl
bmN5TGlzdCBtX2NoaWxkcmVuOworICAgIHVpbnRwdHJfdCBtX2luZm87Cit9OworCitjbGFzcyBQ
dXJlVmFsdWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQdXJlVmFsdWUm
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFB1cmVWYWx1ZSYgYSwgY29uc3QgUHVyZVZhbHVlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRG
Rzo6UHVyZVZhbHVlIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1
ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHUHVyZVZhbHVlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234523</attachid>
            <date>2014-07-07 15:43:02 -0700</date>
            <delta_ts>2014-07-07 20:13:24 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38744</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTcwODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjUgKzQyLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICNkZWZpbmUgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKG1hY3Jv
KSBcCiAgICAgbWFjcm8oSW52YWxpZEFic3RyYWN0SGVhcCkgXAogICAgIG1hY3JvKFdvcmxkKSBc
Ci0gICAgbWFjcm8oQXJndW1lbnRzX251bUFyZ3VtZW50cykgXAotICAgIG1hY3JvKEFyZ3VtZW50
c19vdmVycmlkZUxlbmd0aCkgXAorICAgIG1hY3JvKEFyZ3VtZW50c19sZW5ndGgpIFwKICAgICBt
YWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oQXJndW1lbnRzX3Nsb3dBcmd1
bWVudHMpIFwKLSAgICBtYWNybyhBcnJheUJ1ZmZlcl9kYXRhKSBcCi0gICAgbWFjcm8oQnV0dGVy
Zmx5X2FycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAog
ICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0
ZXJfZ2V0dGVyKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAotICAgIG1hY3Jv
KEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCkgXAotICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3
X21vZGUpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpIFwKICAgICBtYWNy
byhKU0NlbGxfc3RydWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlKSBc
CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwKICAgICBtYWNybyhKU0NlbGxfdHlw
ZUluZm9UeXBlKSBcCi0gICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlKSBcCi0gICAgbWFj
cm8oSlNGdW5jdGlvbl9zY29wZUNoYWluKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5
KSBcCiAgICAgbWFjcm8oSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpIFwKICAgICBtYWNybyhO
YW1lZFByb3BlcnRpZXMpIFwKQEAgLTc2LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIG1hY3JvKEFic29sdXRlKSBcCiAgICAgLyogVXNlIHRoaXMgZm9yIHdy
aXRlcyBvbmx5LCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgbWF5IGZpcmUgd2F0Y2hwb2ludHMuIFVz
dWFsbHkgdGhpcyBpcyBuZXZlciBkaXJlY3RseSB3cml0dGVuIGJ1dCBpbnN0ZWFkIHdlIHRlc3Qg
dG8gc2VlIGlmIGEgbm9kZSBjbG9iYmVycyB0aGlzOyBpdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB5
b3UgaGF2ZSB0byB3cml0ZSB3b3JsZCB0byBjbG9iYmVyIGl0LiAqL1wKICAgICBtYWNybyhXYXRj
aHBvaW50X2ZpcmUpIFwKLSAgICAvKiBVc2UgdGhpcyBmb3IgcmVhZHMgb25seSwganVzdCB0byBp
bmRpY2F0ZSB0aGF0IGlmIHRoZSB3b3JsZCBnb3QgY2xvYmJlcmVkLCB0aGVuIHRoaXMgb3BlcmF0
aW9uIHdpbGwgbm90IHdvcmsuICovXAorICAgIC8qIFVzZSB0aGVzZSBmb3IgcmVhZHMgb25seSwg
anVzdCB0byBpbmRpY2F0ZSB0aGF0IGlmIHRoZSB3b3JsZCBnb3QgY2xvYmJlcmVkLCB0aGVuIHRo
aXMgb3BlcmF0aW9uIHdpbGwgbm90IHdvcmsuICovXAogICAgIG1hY3JvKE1pc2NGaWVsZHMpIFwK
ICAgICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBo
b2lzdGluZyB0aGUgbm9kZSBpcyBpbnZhbGlkLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9uJ3Qg
aG9pc3QgYW55dGhpbmcgdGhhdCBoYXMgYW55IHNpZGUgZWZmZWN0cyBhdCBhbGwuICovXAogICAg
IG1hY3JvKFNpZGVTdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRq
YWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1MSwz
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IG51bUNoaWxk
cmVuOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGlmICghY2hpbGQxKCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRy
SGFzaDxOb2RlKj46Omhhc2goY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGls
ZDIoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1
bHQgKj0gMzsKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2goY2hp
bGQyKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAgcmVz
dWx0ICs9IFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2goY2hpbGQzKCkpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFkamFjZW5jeUxpc3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNo
aWxkMSgpID09IG90aGVyLmNoaWxkMSgpCisgICAgICAgICAgICAmJiBjaGlsZDIoKSA9PSBvdGhl
ci5jaGlsZDIoKQorICAgICAgICAgICAgJiYgY2hpbGQzKCkgPT0gb3RoZXIuY2hpbGQzKCk7Cisg
ICAgfQorICAgIAogcHJpdmF0ZToKICAgICBFZGdlIG1fd29yZHNbU2l6ZV07CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDgz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw2ICszOSw0MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKK25hbWVzcGFjZSB7CisKKy8vIEhlcmUncyB0aGUgcGxhbi4gUmVnYXJkbGVzcyBvZiBn
cmFwaCBmb3JtLCB0aGVyZSB3aWxsIGJlIGFuIHRlbXBsYXRpemVkIGFsZ29yaXRobSBvZiB0aGUg
Zm9ybToKKy8vCisvLyAgICAgaWYgKGlzUHVyZShub2RlKSkgeworLy8gICAgICAgICBOb2RlKiBt
YXRjaCA9IGZpbmRQdXJlRnVuY3RvcihQdXJlVmFsdWU6OmNvbXB1dGVGb3Iobm9kZSkpOworLy8g
ICAgICAgICBpZiAobWF0Y2ggJiYgIXdlaXJkU3BlY2lhbENhc2VzKG5vZGUsIG1hdGNoKSkKKy8v
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG1hdGNoKTsKKy8vICAgICB9IGVsc2UgeworLy8g
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKy8vICAgICAgICAgLi4uIC8vIHN0dWZmCisv
LyAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IC8vIGZvciBleGFtcGxlCisvLyAgICAgICAgICAg
ICBOb2RlKiBtYXRjaCA9IGZpbmRIZWFwRGVmaW5pdGlvbkZ1bmN0b3IoCisvLyAgICAgICAgICAg
ICAgICAgSGVhcExvY2F0aW9uKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIC4uLiksIG5v
ZGUtPmNoaWxkMSgpKSk7CisvLyAgICAgICAgICAgICBpZiAobWF0Y2gpCisvLyAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQobWF0Y2gpOworLy8gICAgICAgICAgICAgYnJlYWs7CisvLyAg
ICAgICAgIGRlZmF1bHQ6CisvLyAgICAgICAgICAgICBicmVhazsKKy8vICAgICAgICAgfQorLy8g
ICAgIH0KKy8vCisvLyBGb3IgYm90aCBDUFMgYW5kIFNTQSwgd2Ugd2lsbCBtYW5hZ2UgSGFzaE1h
cHMgZm9yIGJvdGggdGhlIHB1cmUgYW5kIGltcHVyZSBjYXNlcy4gVGhlIGRpZmZlcmVuY2UKKy8v
IGlzIHRoYXQgZm9yIENQUywgdGhlIG1hcHMgYXJlIGp1c3QgYmxvY2stbG9jYWw7IHdoaWxlIGZv
ciBTU0EsIHdlIHdpbGwgaGF2ZSBhIGdsb2JhbAorLy8gb25lLXRvLW1hbnkgbWFwIGZvciBwdXJl
IHZhbHVlcywgYW5kIGEgYmxvY2stbG9jYWwgbWFwIGZvciBoZWFwIGxvY2F0aW9ucyBhbG9uZyB3
aXRoCisvLyBoZWFwLWxvY2F0aW9ucy1hdC1lbmQgYW5kIGNsb2JiZXIgc2V0cyBmb3IgZWFjaCBi
YXNpYyBibG9jayB0aGF0IGZhY2lsaXRhdGUgYSBiYWNrd2FyZHMgc2VhcmNoLgorLy8KKy8vIEl0
J3Mgbm90IGNsZWFyIHRoYXQgdGhlIHdlaXJkU3BlY2lhbENhc2VzKCkgdGhpbmcgaXMgc21hcnQs
IGJ1dCBhdCB0aGUgc2FtZSB0aW1lLCBpdCdzIG5vdCBjbGVhcgorLy8gaWYgdGhlcmUgaXMgYSBi
ZXR0ZXIgd2F5LiBPbmUgb3B0aW9uIGlzIHRvIGp1c3QgYmFrZSB0aG9zZSBpbnRvIHRoZSBub3Rp
b24gb2YgUHVyZVZhbHVlLgorLy8KKy8vIFdoYXQgSSdkIHJlYWxseSBsaWtlLCB0aG91Z2gsIGlz
IGZvciBzbWFsbCBiYXNpYyBibG9ja3MgdG8gZG8gdGhlIGJhY2t3YXJkIHNlYXJjaCBhbGdvcml0
aG0gdGhhdAorLy8gd2UgaGF2ZSBjdXJyZW50bHksIGFzIHRoYXQgcmVxdWlyZXMgYSBsb3QgbGVz
cyBpbml0aWFsIG92ZXJoZWFkLiBJJ20gbm90IHN1cmUgeWV0IGhvdyB0byBkbworLy8gdGhpcy4g
UGVyaGFwcyB0aGVyZSB3aWxsIGJlIGEgbWlkZGxlIHdheSwgd2hlcmUgSSBqdXN0IHVzZSBhIHZl
Y3RvciBpbnN0ZWFkIG9mIGEgSGFzaE1hcC4gV2hvCisvLyBrbm93cy4gT3IsIG15IGN1cnJlbnQg
dGhpbmtpbmcgaXMgdG8gdXNlIFB1cmVWYWx1ZTo6bWF0Y2hlcygpLiBUaGF0IHdpbGwgaGF2ZSBz
b21lIHJlZHVuZGFuY3kKKy8vIHdpdGggUHVyZVZhbHVlOjpjb21wdXRlRm9yKCksIGJ1dCB0aGF0
J3MgcHJvYmFibHkgZmluZS4KKwogY2xhc3MgQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVi
bGljOgogICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKQEAgLTExNjcsNiArMTIwMyw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkgdHJhY2tzIGNoYW5nZXMgdGhhdCBo
YXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVyIG9wdGltaXphdGlvbnMuCiB9OwogCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJiBncmFwaCkK
IHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENTRSBQaGFzZSIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZp
c2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKK2Jvb2wgaXNQdXJlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
K3sKKyAgICBDaGVja0Nsb2JiZXJpemUgYWRkQWNjZXNzOworICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzKTsKKyAgICByZXR1cm4gYWRkQWNjZXNzLnJlc3Vs
dCgpOworfQorCiBib29sIGRvZXNXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewog
ICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcwODM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYg
d3JpdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5j
dG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1
bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC02OSw2ICs2OSwy
MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgLy8gICBw
cmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlm
IHdlIGRpZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAgIAorICAgIC8vIFdoaWxl
IHJlYWQoKSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRy
YWNrIHdoYXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUgbWF5IHJlYWQgb3Igd3Jp
dGUgLSB0aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQgdGVsbHMgeW91IHRoZSBo
ZWFwIGxvY2F0aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBoZWFwcykgdGhhdCBhcmUg
ZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlzZXMgYW4gYWJzdHJhY3QK
KyAgICAvLyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktpbmQuIEJyaWVmbHksIGEg
bG9jYXRpb24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgorICAgIC8vIHdob3NlIHZh
bHVlIGNhbiBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBs
b2NhdGlvbnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0
aWVzOgorICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRvIENTRSBhIGxvYWQgZnJv
bSB0aGUgaGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hvdWxkIGJlCisgICAgLy8g
ICBzdWZmaWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9kZS4KKyAgICAvLworICAg
IC8vIC0gVGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNv
dWxkIGJlIGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisgICAgLy8gICBDU0UgYXR0
ZW1wdC4gSS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0
d2VlbiBzb21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBkZWZpbmVzIGEgSGVhcExv
Y2F0aW9uIHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRlcyB0byBhbnkgYWJzdHJh
Y3QgaGVhcCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4g
d2UgaGF2ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNlbWFudGljcyBvZgorICAg
IC8vICAgd3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhl
bSB0byBiZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAgIC8vICAgaXMgQ1NFYWJs
ZS4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkpCiAgICAgICAgIHJl
YWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICs5MywyMyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAg
ICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBj
YXNlIEhhcmRQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAg
ICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAg
IGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICBjYXNlIFZhbHVlVG9J
bnQzMjoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBB
cml0aE5lZ2F0ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNhc2UgQXJpdGhJTXVsOgotICAg
IGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIEFyaXRoQWJzOgog
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTEwMCwyOCArMTE3LDQ3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFy
aXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKKyAgICBj
YXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgU2tpcFNjb3Bl
OgotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0g
ICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoK
ICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Cisg
ICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBj
YXNlIElzQm9vbGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAgIGNhc2UgSXNTdHJpbmc6CiAg
ICAgY2FzZSBMb2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAg
Y2FzZSBDaGVja0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICBjYXNl
IENoZWNrOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgY2Fz
ZSBJbnQ1MlJlcDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBjYXNlIEFy
aXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBj
YXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBEb3VibGVBc0ludDMy
OgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwg
bm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmZ1bmN0aW9uKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAg
ICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRhYmxlKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAg
ICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTE0Myw3ICsxNzksNiBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBj
YXNlIExvb3BIaW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBCcmVh
a3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CkBAIC0xNTIsNiArMTg3LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICB3cml0ZShTaWRlU3Rh
dGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50ZXJMb2MsIFdh
dGNocG9pbnRfZmlyZSkpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIFZhcmlhYmxlV2F0
Y2hwb2ludDoKICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICByZWFkKFdh
dGNocG9pbnRfZmlyZSk7CkBAIC0xODQsMTIgKzIyNCwyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoK
KyAgICAgICAgcmVhZChNaXNjRmllbGRzX0lzT2JqZWN0KTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihJc09iamVjdExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6
Ci0gICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkc19Jc0Z1
bmN0aW9uKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNh
c2UgVHlwZU9mOgorICAgICAgICByZWFkKE1pc2NGaWVsZHNfVHlwZU9mKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihUeXBlT2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSk7Cisg
ICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVz
aDoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0yMTIsMjcgKzI2NCwzMyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVy
OgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEdldEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRlciwgbm9kZS0+Y2hpbGQxKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFNldHRlcjoKICAgICAg
ICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihH
ZXRTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6
OkNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2Fs
OgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxl
TG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6
CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CkBAIC0yNjIsMTEgKzMyMCwxMyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQg
bm90aGluZyBiZWNhdXNlIGl0J3Mgb25seSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAg
ICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChB
cmd1bWVudHNfcmVnaXN0ZXJzKTsKICAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5v
ZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjc0LDYgKzMzNCw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9w
ZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmVhZChXb3JsZCk7CkBAIC0yODUsNiArMzQ2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoV29ybGQp
OwpAQCAtMjk2LDYgKzM1OCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAg
ICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAg
ICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtMzE5
LDggKzM4Miw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CiAgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKLSAgICAg
ICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgICAgIHJlYWQo
SlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVHlwZWRB
cnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0zNTUsNiArNDE4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKICAg
ICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVudHMpOwogICAgICAgICAgICAgd3Jp
dGUoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3Bl
cnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgpAQCAtMzY3LDYgKzQzMSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAg
ICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4
ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtMzc5LDYgKzQ0NCw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3Zl
Y3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsK
ICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKQEAgLTM5
MSw2ICs0NTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVh
ZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNDA5LDkgKzQ3Niw5IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVy
Vmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgp
OworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVk
QXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFBy
b3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxOSw3ICs0ODYsNiBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgICAgICByZXR1cm47CiAKQEAgLTQzMSwxMiArNDk3LDE0IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tI
YXNJbnN0YW5jZToKICAgICAgICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxh
Z3MsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tF
eGVjdXRhYmxlOgotICAgICAgICByZWFkKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2Fz
ZSBJbnN0YW5jZU9mOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5zdGFuY2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2Rl
LT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
KwogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJl
SUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ1NSw2ICs1MjMs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2V0QnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0
ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheWlmeToKQEAgLTQ2OCw0MiArNTM3LDU3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmll
d192ZWN0b3IpOworICAgICAgICB9CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxk
cywgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3
X3ZlY3Rvcik7Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7Ci0gICAgICAg
IHJlYWQoQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKLSAgICAgICAgcmVhZChBcnJheUJ1ZmZlcl9k
YXRhKTsKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICBjYXNlIEdldEdldHRl
clNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQor
ICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFw
KE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHJlYWQoaGVhcCk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+
Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
TmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJO
dW1iZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICByZWFk
KGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAs
IG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3Jp
dGUoaGVhcCk7CiAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRl
c1N0cnVjdHVyZXMoKSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKQogICAgICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7
CisgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICBBYnN0cmFjdEhl
YXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICB3cml0
ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFw
LCBub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCk7CkBAIC01MTQsNjggKzU5OCwxMDMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihH
ZXRBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgbm9kZS0+Y2hpbGQxKCkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVM
ZW5ndGgpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIHJlYWQoQXJndW1lbnRzX2xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEdldEFycmF5TGVuZ3RoTG9jLCBBcmd1bWVudHNfbGVuZ3RoLCBub2RlLT5jaGlsZDEoKSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICBB
U1NFUlQobW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2V0QXJy
YXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToK
ICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWlu
KSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgZ3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTa2lwVG9wU2NvcGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFj
dGl2YXRpb25SZWdpc3RlcigpKSwgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIHJlYWQoSlNW
YXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldENs
b3N1cmVSZWdpc3RlcnNMb2MsIEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzLCBub2RlLT5jaGls
ZDEoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZh
cjoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIo
KSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0
ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChBYnNv
bHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihHbG9iYWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3Rl
clBvaW50ZXIoKSkpKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBOZXdPYmplY3Q6CiAg
ICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAgY2FzZSBO
ZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3
cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3Bl
cnRpZXMsIG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMTF9ET1VC
TEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIG5vZGUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcywgbm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0
cmluZ09iamVjdDoKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0
ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
TmV3RnVuY3Rpb25Ob0NoZWNrOgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdG
dW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBncmVhdCB0
byBzaWduYWwgdGhhdCB0aGlzIGRlZmluZXMgdGhlIHB1cmUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0
aAorICAgICAgICAvLyBDaGVja0V4ZWN1dGFibGUgYW5kIEdldFNjb3BlLiBDdXJyZW50bHkgdGhl
cmUgaXMgbm8gd2F5IHRvIGRvIHRoaXMuIFdlIGNhbiBmaXggaXQKKyAgICAgICAgLy8gZXZlbnR1
YWxseS4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFw
T2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgY2FzZSBOZXdU
eXBlZEFycmF5OgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRl
KEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgogICAgICAgICAgICAg
cmVhZChXb3JsZCk7CkBAIC01OTgsNiArNzE3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUVxOgpAQCAtNjA1LDggKzcyNSwx
MCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBD
b21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2FzZSBDb21wYXJl
R3JlYXRlckVxOgotICAgICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNl
KSkKKyAgICAgICAgaWYgKCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAg
ICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTYxNSw2ICs3MzcsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CiAgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFN0cmluZ09y
U3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmIGEgcHVyZSB2
YWx1ZSwgdW5mb3J0dW5hdGVseS4gSSdsbCBhdm9pZCBsb2FkLWVsaW1pbmF0aW5nIHRoZXNlIGZv
cgorICAgICAgICAgICAgLy8gbm93LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKQEAgLTYzOSwxMCArNzYzLDEyIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVu
Z3RoOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmVhZChBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oR2V0TXlBcmd1bWVudHNMZW5ndGhMb2MsIFZhcmlhYmxlcykpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAg
ICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2V0TXlBcmd1
bWVudEJ5VmFsLCBWYXJpYWJsZXMpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKQEAgLTY5MCw2ICs4MTYsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9OwogCitib29sIGlzUHVyZShHcmFwaCosIE5vZGUqKTsg
Ly8gUHVyZSBtZWFucyBpdCBkb2VzIG5vIHJlYWRzIG9yIHdyaXRlcy4KKwogYm9vbCBkb2VzV3Jp
dGVzKEdyYXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdIZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiLCBtX2hlYXApOworICAg
IAorICAgIGlmICghbV9iYXNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnByaW50
KCJbIiwgbV9iYXNlKTsKKyAgICBpZiAobV9pbmRleCkKKyAgICAgICAgb3V0LnByaW50KCIsICIs
IG1faW5kZXgpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBIZWFwTG9jYXRpb25LaW5kIGtp
bmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9jYXRpb25LaW5k
OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgorICAgICAgICBv
dXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc09iamVjdExv
YyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5jdGlvbkxvYzoK
KyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlwZU9mTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRHZXR0ZXJMb2M6Cisg
ICAgICAgIG91dC5wcmludCgiR2V0R2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTZXRTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiU2V0U2V0dGVy
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoK
KyAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgR2V0QnlWYWxMb2M6CisgICAgICAgIG91dC5wcmludCgiR2V0QnlWYWxM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEFycmF5TGVuZ3Ro
TG9jOgorICAgICAgICBvdXQucHJpbnQoIkdldEFycmF5TGVuZ3RoTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0hlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERG
R0hlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitlbnVtIExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZExvY2F0aW9u
S2luZCwKKyAgICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc09iamVjdExvYywKKyAgICBJ
c0Z1bmN0aW9uTG9jLAorICAgIFR5cGVPZkxvYywKKyAgICBHZXRHZXR0ZXJMb2MsCisgICAgR2V0
U2V0dGVyTG9jLAorICAgIFZhcmlhYmxlTG9jLAorICAgIENsb3N1cmVWYXJpYWJsZUxvYywKKyAg
ICBHbG9iYWxWYXJpYWJsZUxvYywKKyAgICBJbmRleGVkUHJvcGVydHlMb2MsCisgICAgR2V0QXJy
YXlMZW5ndGhMb2MsCisgICAgQ2hlY2tIYXNJbnN0YW5jZUxvYywKKyAgICBJbnN0YW5jZU9mTG9j
LAorICAgIEdldEJ1dHRlcmZ5TG9jLAorICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Ms
CisgICAgTmFtZWRQcm9wZXJ0eUxvYywKKyAgICBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywK
KyAgICBTa2lwVG9wU2NvcGVMb2MsCisgICAgR2V0Q2xvc3VyZVJlZ2lzdGVyc0xvYywKKyAgICBH
ZXRNeUFyZ3VtZW50c0xlbmd0aExvYywKKyAgICBHZXRNeUFyZ3VtZW50QnlWYWxMb2MKK307CisK
K2NsYXNzIEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgSGVhcExvY2F0aW9uKAorICAgICAg
ICBMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRMb2NhdGlvbktpbmQsCisgICAgICAgIEFic3Ry
YWN0SGVhcCBoZWFwID0gQWJzdHJhY3RIZWFwKCksCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxs
cHRyLCBOb2RlKiBpbmRleCA9IG51bGxwdHIpCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAg
ICAgICwgbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoa2luZCA9PSBJbnZhbGlkTG9jYXRp
b25LaW5kKSA9PSAhaGVhcCk7CisgICAgICAgIEFTU0VSVCghIW1faGVhcCB8fCAhbV9iYXNlKTsK
KyAgICAgICAgQVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7CisgICAgfQorICAgIAorICAgIEhl
YXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhlYXAsIEVkZ2UgYmFz
ZSwgRWRnZSBpbmRleCA9IEVkZ2UoKSkKKyAgICAgICAgOiBIZWFwTG9jYXRpb24oa2luZCwgaGVh
cCwgYmFzZS5ub2RlKCksIGluZGV4Lm5vZGUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEhl
YXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWRMb2NhdGlvbktpbmQpCisgICAgICAgICwgbV9oZWFwKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fYmFzZShudWxscHRyKQorICAgICAgICAsIG1faW5k
ZXgobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1faGVhcDsgfQorICAgIAorICAgIExvY2F0aW9uS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25zdCB7IHJl
dHVybiBtX2hlYXA7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9
CisgICAgTm9kZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9o
ZWFwLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9pbmRleCkgKyBtX2tpbmQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRpb24mIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQK
KyAgICAgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXAKKyAgICAgICAgICAgICYmIG1f
YmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9oZWFwLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICBBYnN0cmFjdEhl
YXAgbV9oZWFwOworICAgIE5vZGUqIG1fYmFzZTsKKyAgICBOb2RlKiBtX2luZGV4OworfTsKKwor
c3RydWN0IEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgSGVhcExvY2F0aW9uJiBhLCBjb25zdCBIZWFwTG9jYXRpb24mIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
REZHOjpIZWFwTG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkhlYXBM
b2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6SGVhcExvY2F0aW9uSGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6REZHOkhlYXBMb2NhdGlvbj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSGVhcExvY2F0
aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1B1cmVWYWx1ZV9oCisjZGVmaW5lIERG
R1B1cmVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQdXJlVmFsdWUg
eworcHVibGljOgorICAgIFB1cmVWYWx1ZSgpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUp
CisgICAgICAgICwgbV9pbmZvKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUo
Tm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCB1aW50cHRyX3QgaW5m
bykKKyAgICAgICAgOiBtX29wKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisg
ICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgICAgICBBU1NFUlQoIShkZWZhdWx0Rmxh
Z3Mob3ApICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5v
ZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgY29uc3Qgdm9pZCogcHRy
KQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHB0cikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3As
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwg
Y2hpbGRyZW4sIDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9k
ZSwgdWludHB0cl90IGluZm8pCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUt
PmNoaWxkcmVuLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUq
IG5vZGUsIGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwg
bm9kZS0+Y2hpbGRyZW4sIHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShO
b2RlKiBub2RlKQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJl
bikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9p
bmZvKDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmICFtX2luZm87IH0KKyAgICAKKyAgICBOb2Rl
VHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0
JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB1aW50cHRyX3Qg
aW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2goc3RhdGlj
X2Nhc3Q8aW50PihvcCkpICsgbV9jaGlsZHJlbi5oYXNoKCkgKyBtX2luZm87CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXJlVmFsdWUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gb3RoZXIubV9vcAorICAgICAgICAgICAgJiYgbV9j
aGlsZHJlbiA9PSBvdGhlci5tX2NoaWxkcmVuCisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3Ro
ZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiBt
X2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKKyAgICAKKyAgICBzdGF0aWMgUHVyZVZhbHVlIGNvbXB1cmVGb3IoTm9kZSogbm9kZSk7Cisg
ICAgCisgICAgYm9vbCBtYXRjaGVzKE5vZGUqIG5vZGUpOworCitwcml2YXRlOgorICAgIE5vZGVU
eXBlIG1fb3A7CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworICAgIHVpbnRwdHJfdCBt
X2luZm87Cit9OworCitjbGFzcyBQdXJlVmFsdWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBQdXJlVmFsdWUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFB1cmVWYWx1ZSYgYSwgY29uc3QgUHVyZVZhbHVlJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7
CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHVyZVZhbHVlIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6
OlB1cmVWYWx1ZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHVyZVZhbHVlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234539</attachid>
            <date>2014-07-07 20:13:24 -0700</date>
            <delta_ts>2014-07-08 14:14:52 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53373</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA4MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA3LDYgKzI2MTEsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExMCw2ICs1MTE4LDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE4NCw2ICs1MTk0LDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTEsNiArNjEyMyw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ3LDYgKzY2NjAs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3MzMsMTEgKzc3NDcsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNDIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCituYW1lc3BhY2Ug
eworCisvLyBIZXJlJ3MgdGhlIHBsYW4uIFJlZ2FyZGxlc3Mgb2YgZ3JhcGggZm9ybSwgdGhlcmUg
d2lsbCBiZSBhbiB0ZW1wbGF0aXplZCBhbGdvcml0aG0gb2YgdGhlIGZvcm06CisvLworLy8gICAg
IGlmIChpc1B1cmUobm9kZSkpIHsKKy8vICAgICAgICAgTm9kZSogbWF0Y2ggPSBmaW5kUHVyZUZ1
bmN0b3IoUHVyZVZhbHVlOjpjb21wdXRlRm9yKG5vZGUpKTsKKy8vICAgICAgICAgaWYgKG1hdGNo
ICYmICF3ZWlyZFNwZWNpYWxDYXNlcyhub2RlLCBtYXRjaCkpCisvLyAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChtYXRjaCk7CisvLyAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisvLyAgICAgICAgIC4uLiAvLyBzdHVmZgorLy8gICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0OiAvLyBmb3IgZXhhbXBsZQorLy8gICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBm
aW5kSGVhcERlZmluaXRpb25GdW5jdG9yKAorLy8gICAgICAgICAgICAgICAgIEhlYXBMb2NhdGlv
bihBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCAuLi4pLCBub2RlLT5jaGlsZDEoKSkpOwor
Ly8gICAgICAgICAgICAgaWYgKG1hdGNoKQorLy8gICAgICAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KG1hdGNoKTsKKy8vICAgICAgICAgICAgIGJyZWFrOworLy8gICAgICAgICBkZWZhdWx0Ogor
Ly8gICAgICAgICAgICAgYnJlYWs7CisvLyAgICAgICAgIH0KKy8vICAgICB9CisvLworLy8gRm9y
IGJvdGggQ1BTIGFuZCBTU0EsIHdlIHdpbGwgbWFuYWdlIEhhc2hNYXBzIGZvciBib3RoIHRoZSBw
dXJlIGFuZCBpbXB1cmUgY2FzZXMuIFRoZSBkaWZmZXJlbmNlCisvLyBpcyB0aGF0IGZvciBDUFMs
IHRoZSBtYXBzIGFyZSBqdXN0IGJsb2NrLWxvY2FsOyB3aGlsZSBmb3IgU1NBLCB3ZSB3aWxsIGhh
dmUgYSBnbG9iYWwKKy8vIG9uZS10by1tYW55IG1hcCBmb3IgcHVyZSB2YWx1ZXMsIGFuZCBhIGJs
b2NrLWxvY2FsIG1hcCBmb3IgaGVhcCBsb2NhdGlvbnMgYWxvbmcgd2l0aAorLy8gaGVhcC1sb2Nh
dGlvbnMtYXQtZW5kIGFuZCBjbG9iYmVyIHNldHMgZm9yIGVhY2ggYmFzaWMgYmxvY2sgdGhhdCBm
YWNpbGl0YXRlIGEgYmFja3dhcmRzIHNlYXJjaC4KKy8vCisvLyBJdCdzIG5vdCBjbGVhciB0aGF0
IHRoZSB3ZWlyZFNwZWNpYWxDYXNlcygpIHRoaW5nIGlzIHNtYXJ0LCBidXQgYXQgdGhlIHNhbWUg
dGltZSwgaXQncyBub3QgY2xlYXIKKy8vIGlmIHRoZXJlIGlzIGEgYmV0dGVyIHdheS4gT25lIG9w
dGlvbiBpcyB0byBqdXN0IGJha2UgdGhvc2UgaW50byB0aGUgbm90aW9uIG9mIFB1cmVWYWx1ZS4K
Ky8vCisvLyBXaGF0IEknZCByZWFsbHkgbGlrZSwgdGhvdWdoLCBpcyBmb3Igc21hbGwgYmFzaWMg
YmxvY2tzIHRvIGRvIHRoZSBiYWNrd2FyZCBzZWFyY2ggYWxnb3JpdGhtIHRoYXQKKy8vIHdlIGhh
dmUgY3VycmVudGx5LCBhcyB0aGF0IHJlcXVpcmVzIGEgbG90IGxlc3MgaW5pdGlhbCBvdmVyaGVh
ZC4gSSdtIG5vdCBzdXJlIHlldCBob3cgdG8gZG8KKy8vIHRoaXMuIFBlcmhhcHMgdGhlcmUgd2ls
bCBiZSBhIG1pZGRsZSB3YXksIHdoZXJlIEkganVzdCB1c2UgYSB2ZWN0b3IgaW5zdGVhZCBvZiBh
IEhhc2hNYXAuIFdobworLy8ga25vd3MuIE9yLCBteSBjdXJyZW50IHRoaW5raW5nIGlzIHRvIHVz
ZSBQdXJlVmFsdWU6Om1hdGNoZXMoKS4gVGhhdCB3aWxsIGhhdmUgc29tZSByZWR1bmRhbmN5Cisv
LyB3aXRoIFB1cmVWYWx1ZTo6Y29tcHV0ZUZvcigpLCBidXQgdGhhdCdzIHByb2JhYmx5IGZpbmUu
CisKIGNsYXNzIENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBDU0VQaGFz
ZShHcmFwaCYgZ3JhcGgpCkBAIC0xMTY3LDYgKzEyMDMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9jaGFuZ2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZl
IGVmZmVjdCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgogfTsKIAorfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKIGJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7CiAgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24gMTcwODM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6OnNl
dE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQm
IHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwotICAgIE5v
T3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJl
YWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogfQogCiB2b2lkIGFkZFdyaXRlcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQogewotICAgIE5v
T3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBDbG9i
YmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwg
YWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRzQW5kV3JpdGVzKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJlclNldCYgd3JpdGVTZXQp
CiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwogICAgIENsb2JiZXJTZXRB
ZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJl
YWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09wKTsKIH0KIAogYm9vbCByZWFkc092
ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQogewog
ICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOwotICAgIE5vT3BDbG9iYmVy
aXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdy
aXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5v
ZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVybiBhZGRSZWFkLnJlc3VsdCgpOwog
fQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVy
U2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BD
bG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFdyaXRlKHdyaXRlU2V0
KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAg
Y2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogICAgIHJldHVy
biBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxOSArMzIs
MzUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitib29sIGlzUHVyZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZEFjY2Vz
czsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICByZXR1cm4gIWFkZEFjY2Vzcy5yZXN1
bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7
CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsK
KyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBub09wLCBhZGRQdXJlKTsKKyAgICBy
ZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BD
bG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2Ji
ZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJl
c3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBBYnN0cmFjdEhlYXAgaGVhcCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAg
IE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkV3JpdGUo
aGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICBy
ZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzA4MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMx
LDEzIEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiREZHRWRnZVVz
ZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0hlYXBM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0
b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3Rv
ciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQogewogICAgIC8v
IFNvbWUgbm90ZXM6CiAgICAgLy8KQEAgLTY5LDYgKzcxLDIzIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAvLyAgIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNl
IC0gdGhvdWdoIHRoZXkgcHJvYmFibHkgY291bGQgYmUgaWYgd2UgZGlkIHNvbWUKICAgICAvLyAg
IHNtYWxsIGhhY2tpbmcuCiAgICAgCisgICAgLy8gV2hpbGUgcmVhZCgpIGFuZCB3cml0ZSgpIGFy
ZSBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSAtIHRoZXkgdHJhY2sgd2hhdCBzb3J0cyBvZiB0aGlu
Z3MgdGhlCisgICAgLy8gbm9kZSBtYXkgcmVhZCBvciB3cml0ZSAtIHRoZSBkZWYoKSBmdW5jdG9y
IGlzIG1vcmUgdHJpY2t5LiBJdCB0ZWxscyB5b3UgdGhlIGhlYXAgbG9jYXRpb25zCisgICAgLy8g
KG5vdCBqdXN0IGFic3RyYWN0IGhlYXBzKSB0aGF0IGFyZSBkZWZpbmVkIGJ5IGEgbm9kZS4gQSBo
ZWFwIGxvY2F0aW9uIGNvbXByaXNlcyBhbiBhYnN0cmFjdAorICAgIC8vIGhlYXAsIHNvbWUgbm9k
ZXMsIGFuZCBhIExvY2F0aW9uS2luZC4gQnJpZWZseSwgYSBsb2NhdGlvbiBkZWZpbmVkIGJ5IGEg
bm9kZSBpcyBhIGxvY2F0aW9uCisgICAgLy8gd2hvc2UgdmFsdWUgY2FuIGJlIGRlZHVjZWQgZnJv
bSBsb29raW5nIGF0IHRoZSBub2RlIGl0c2VsZi4gVGhlIGxvY2F0aW9ucyByZXR1cm5lZCBtdXN0
IG9iZXkKKyAgICAvLyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgLy8KKyAgICAvLyAt
IElmIHNvbWVvbmUgd2FudHMgdG8gQ1NFIGEgbG9hZCBmcm9tIHRoZSBoZWFwLCB0aGVuIGEgSGVh
cExvY2F0aW9uIG9iamVjdCBzaG91bGQgYmUKKyAgICAvLyAgIHN1ZmZpY2llbnQgdG8gZmluZCBh
IHNpbmdsZSBtYXRjaGluZyBub2RlLgorICAgIC8vCisgICAgLy8gLSBUaGUgYWJzdHJhY3QgaGVh
cCBpcyB0aGUgb25seSBhYnN0cmFjdCBoZWFwIHRoYXQgY291bGQgYmUgY2xvYmJlcmVkIHRvIGlu
dmFsaWRhdGUgYW55IHN1Y2gKKyAgICAvLyAgIENTRSBhdHRlbXB0LiBJLmUuIGlmIGNsb2JiZXJp
emUoKSByZXBvcnRzIHRoYXQgb24gZXZlcnkgcGF0aCBiZXR3ZWVuIHNvbWUgbm9kZSBhbmQgYSBu
b2RlCisgICAgLy8gICB0aGF0IGRlZmluZXMgYSBIZWFwTG9jYXRpb24gdGhhdCBpdCB3YW50ZWQs
IHRoZXJlIHdlcmUgbm8gd3JpdGVzIHRvIGFueSBhYnN0cmFjdCBoZWFwIHRoYXQKKyAgICAvLyAg
IG92ZXJsYXAgdGhlIGxvY2F0aW9uJ3MgaGVhcCwgdGhlbiB3ZSBoYXZlIGEgc291bmQgbWF0Y2gu
IEVmZmVjdGl2ZWx5LCB0aGUgc2VtYW50aWNzIG9mCisgICAgLy8gICB3cml0ZSgpIGFuZCBkZWYo
KSBhcmUgaW50ZXJ0d2luZWQgc3VjaCB0aGF0IGZvciB0aGVtIHRvIGJlIHNvdW5kIHRoZXkgbXVz
dCBhZ3JlZSBvbiB3aGF0CisgICAgLy8gICBpcyBDU0VhYmxlLgorCiAgICAgaWYgKGVkZ2VzVXNl
U3RydWN0dXJlKGdyYXBoLCBub2RlKSkKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgIApAQCAtNzYsMjMgKzk1LDIzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFu
dDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwg
bm9kZS0+Y29uc3RhbnQoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
SWRlbnRpdHk6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CisgICAg
Y2FzZSBDaGVjazoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICByZXR1
cm47CisgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2Fz
ZSBCaXRYb3I6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAg
Y2FzZSBCaXRVUlNoaWZ0OgotICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgIGNhc2UgQXJpdGhB
ZGQ6Ci0gICAgY2FzZSBBcml0aFN1YjoKLSAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgIGNhc2Ug
QXJpdGhNdWw6CiAgICAgY2FzZSBBcml0aElNdWw6Ci0gICAgY2FzZSBBcml0aERpdjoKLSAgICBj
YXNlIEFyaXRoTW9kOgogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1pbjoKICAg
ICBjYXNlIEFyaXRoTWF4OgpAQCAtMTAwLDI4ICsxMTksNDcgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBB
cml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29zOgorICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAg
IGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAgY2FzZSBDaGVja0Z1bmN0
aW9uOgotICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICBjYXNlIFN0cmluZ0Zyb21DaGFy
Q29kZToKICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgogICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICBjYXNlIFN0cmluZ0Zyb21DaGFy
Q29kZToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgogICAgIGNh
c2UgSXNOdW1iZXI6CiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6Ci0g
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6Ci0g
ICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgotICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBEb3Vi
bGVSZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2Ug
TWFrZVJvcGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0
aE5lZ2F0ZToKKyAgICBjYXNlIEFyaXRoTXVsOgorICAgIGNhc2UgQXJpdGhEaXY6CisgICAgY2Fz
ZSBBcml0aE1vZDoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgY2FzZSBVSW50MzJUb051
bWJlcjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5hcml0aE1vZGUoKSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+ZnVuY3Rpb24oKSkpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUsIG5vZGUtPmV4ZWN1dGFibGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2Rl
LCBub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBNb3ZIaW50OgpAQCAtMTQzLDcgKzE4MSw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAg
Y2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2Fz
ZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9m
aWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKQEAgLTE1Miw2ICsxODksMTEg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgSW52YWxp
ZGF0aW9uUG9pbnQ6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9pbnRfZmlyZSkpOworICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNlIFR5cGVk
QXJyYXlXYXRjaHBvaW50OgogICAgICAgICByZWFkKFdhdGNocG9pbnRfZmlyZSk7CkBAIC0xODQs
MTIgKzIyNiwyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAK
ICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc09iamVjdExvYywgTWlzY0ZpZWxkcywgbm9k
ZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVu
Y3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hp
bGQxKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoKKyAg
ICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZM
b2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIHJldHVybjsKKwogICAg
IGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6
CkBAIC0yMTIsMjcgKzI2NiwzMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRl
clNldHRlcl9nZXR0ZXIpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0
dGVyU2V0dGVyX2dldHRlciwgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0
dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9z
ZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNT
dGFjazo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT5sb2NhbCgpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFs
OiB7CkBAIC0yNjIsMTEgKzMyMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25seSBy
ZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgpAQCAtMjc0LDYgKzMzNiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0yODUs
NiArMzQ4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKElu
ZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtMjk2LDYgKzM2MCw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1By
b3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3Bl
cnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtMzE5LDggKzM4NCw4IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICByZWFk
KFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZp
ZXdfdmVjdG9yKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsK
KyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNTIsOSArNDE3LDkgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQoQXJndW1lbnRz
X3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOwot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfc2xvd0FyZ3VtZW50cyk7CisgICAgICAgICAgICBy
ZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgd3JpdGUoVmFyaWFibGVzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMzY3LDYgKzQzMiw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlBy
b3BlcnRpZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZEludDMyUHJvcGVydGllcyk7Cisg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZElu
dDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpA
QCAtMzc5LDYgKzQ0NSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhl
ZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKQEAgLTM5MSw2ICs0NTgsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZs
eV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
RG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgpAQCAtNDA5LDkgKzQ3Nyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAg
ICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNj
RmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJv
cGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTQxOSw3ICs0ODcsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2Ug
SW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBy
ZXR1cm47CiAKQEAgLTQzMSwxMiArNDk4LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgcmVh
ZChKU0NlbGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tI
YXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSk7CiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICByZWFk
KEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICBy
ZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5zdGFu
Y2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0Nl
bGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ1NSw2ICs1MjQsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5Ogog
ICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheWlmeToKQEAgLTQ2OCw0MiAr
NTM4LDU5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7
CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICB9CisgICAg
ICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFBy
b3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAg
ICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgIHJlYWQoSlNBcnJh
eUJ1ZmZlclZpZXdfbW9kZSk7Ci0gICAgICAgIHJlYWQoQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsK
LSAgICAgICAgcmVhZChBcnJheUJ1ZmZlcl9kYXRhKTsKKyAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlz
Y0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0g
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIpKTsKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7Cisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJl
cik7CisgICAgICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQ
cm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICAgICAgCi0gICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
IHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFt
ZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1i
ZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICByZWFkKGhl
YXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5v
ZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGNh
c2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKICAgICAg
ICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRl
cmZseSk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikpOworICAgICAgICBBYnN0
cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBpZiAo
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCiAgICAgICAg
ICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdyaXRl
KEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9w
ZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAgICAgCi0gICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAg
ICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4
KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJv
cGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHdyaXRlKGhlYXApOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgp
KSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKQEAg
LTUxNCw2OCArNjAxLDEwMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19vdmVycmlkZUxlbmd0aCk7Ci0gICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmll
bGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NG
aWVsZHMsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdf
bGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90
VHlwZWRBcnJheSk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJs
ZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNraXBUb3BTY29wZUxvYywgQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgZ3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBub2RlLT5jaGlsZDEoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKICAgICAgICAgcmVhZChKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xvYywgSlNWYXJpYWJsZU9iamVjdF9yZWdp
c3RlcnMsIG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSksIG5v
ZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRD
bG9zdXJlVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52
YXJOdW1iZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGls
ZDEoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1
dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBj
YXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRo
U2l6ZToKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICByZWFkKEhlYXBPYmplY3RD
b3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9k
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBub2RlKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhw
OgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICByZWFkKEhlYXBPYmplY3RDb3Vu
dCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlv
bjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgLy8gRklYTUU6IEl0
IHdvdWxkIGJlIGdyZWF0IHRvIHNpZ25hbCB0aGF0IHRoaXMgZGVmaW5lcyB0aGUgcHVyZSB2YWx1
ZXMgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgIC8vIENoZWNrRXhlY3V0YWJsZSBhbmQgR2V0U2Nv
cGUuIEN1cnJlbnRseSB0aGVyZSBpcyBubyB3YXkgdG8gZG8gdGhpcy4gV2UgY2FuIGZpeCBpdAor
ICAgICAgICAvLyBldmVudHVhbGx5LgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAg
ICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAg
CisKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVy
dGllcywgbm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFVudHlwZWRV
c2U6CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTU5OCw2ICs3MjAsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICB3cml0ZShXb3Js
ZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlRXE6
CkBAIC02MDUsOCArNzI4LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoK
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFVudHlwZWRVc2UpKQorICAgICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdy
aXRlKFdvcmxkKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjE1LDYgKzc0MCw4IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAg
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAgICAgICAvLyBUaGVzZSBk
b24ndCBkZWYgYSBwdXJlIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LiBJJ2xsIGF2b2lkIGxvYWQtZWxp
bWluYXRpbmcgdGhlc2UgZm9yCisgICAgICAgICAgICAvLyBub3cuCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDZWxsVXNlOgpAQCAtNjM5LDEwICs3NjYs
MTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
R2V0TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwog
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihNeUFyZ3VtZW50c0xlbmd0aExvYywgVmFy
aWFibGVzKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWw6CiAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihNeUFyZ3VtZW50QnlWYWxMb2MsIFZhcmlhYmxlcykpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgpAQCAtNjcyLDcgKzgw
MSw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIGNsYXNzIE5v
T3BDbG9iYmVyaXplIHsKIHB1YmxpYzoKICAgICBOb09wQ2xvYmJlcml6ZSgpIHsgfQotICAgIHZv
aWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFQmKSB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xv
YmJlcml6ZSB7CkBAIC02ODIsNyArODEyLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyBtX3Jlc3VsdCA9IHRydWU7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBUJikg
eyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzdWx0OyB9CiAgICAgCkBAIC02OTAsNiArODIxLDkgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fcmVzdWx0OwogfTsKIAorYm9vbCBpc1B1cmUoR3JhcGgmLCBOb2RlKik7IC8vIFB1cmUg
bWVhbnMgaXQgZG9lcyBubyByZWFkcyBvciB3cml0ZXMuCitib29sIGhhc1B1cmVEZWZzKEdyYXBo
JiwgTm9kZSopOyAvLyBIYXZpbmcgcHVyZSBkZWZzIG1lYW5zIHRoYXQgcHVyZSBDU0UgaXMgcG9z
c2libGUuCisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAogY2xhc3MgQWJzdHJh
Y3RIZWFwT3ZlcmxhcHMgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEhlYXBMb2Nh
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQsICI6IiwgbV9oZWFwKTsKKyAgICAKKyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG91dC5wcmludCgiWyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisg
ICAgICAgIG91dC5wcmludCgiLCAiLCBtX2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJ
bnZhbGlkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktp
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBv
aW50TG9jOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0
LnByaW50KCJJc09iamVjdExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgSXNGdW5jdGlvbkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91
dC5wcmludCgiVHlwZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBHZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgi
U2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJs
ZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgi
QXJyYXlMZW5ndGhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEJ1
dHRlcmZseUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2VMb2M6CisgICAgICAg
IG91dC5wcmludCgiQ2hlY2tIYXNJbnN0YW5jZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgQ2xvc3VyZVJlZ2lzdGVyc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJD
bG9zdXJlUmVnaXN0ZXJzTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBDbG9zdXJlVmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxl
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJpYWJs
ZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYzoKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBJbnN0YW5jZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluc3RhbmNlT2ZM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRCeVZh
bExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNeUFyZ3VtZW50QnlWYWxMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRzTGVuZ3RoTG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk15QXJndW1lbnRzTGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5h
bWVkUHJvcGVydHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNr
aXBUb3BTY29wZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9j
OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0hlYXBMb2NhdGlvbl9oCisjZGVmaW5l
IERGR0hlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitlbnVtIExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZExvY2F0
aW9uS2luZCwKKyAgICAKKyAgICBBcnJheUxlbmd0aExvYywKKyAgICBCdXR0ZXJmbHlMb2MsCisg
ICAgQ2hlY2tIYXNJbnN0YW5jZUxvYywKKyAgICBDbG9zdXJlUmVnaXN0ZXJzTG9jLAorICAgIENs
b3N1cmVWYXJpYWJsZUxvYywKKyAgICBHZXR0ZXJMb2MsCisgICAgR2xvYmFsVmFyaWFibGVMb2Ms
CisgICAgSW5kZXhlZFByb3BlcnR5TG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Ms
CisgICAgSW5zdGFuY2VPZkxvYywKKyAgICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc0Z1
bmN0aW9uTG9jLAorICAgIElzT2JqZWN0TG9jLAorICAgIE15QXJndW1lbnRCeVZhbExvYywKKyAg
ICBNeUFyZ3VtZW50c0xlbmd0aExvYywKKyAgICBOYW1lZFByb3BlcnR5TG9jLAorICAgIFNldHRl
ckxvYywKKyAgICBTa2lwVG9wU2NvcGVMb2MsCisgICAgVHlwZU9mTG9jLAorICAgIFR5cGVkQXJy
YXlCeXRlT2Zmc2V0TG9jLAorICAgIFZhcmlhYmxlTG9jCit9OworCitjbGFzcyBIZWFwTG9jYXRp
b24geworcHVibGljOgorICAgIEhlYXBMb2NhdGlvbigKKyAgICAgICAgTG9jYXRpb25LaW5kIGtp
bmQgPSBJbnZhbGlkTG9jYXRpb25LaW5kLAorICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFi
c3RyYWN0SGVhcCgpLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXgg
PSBudWxscHRyKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faGVhcChoZWFw
KQorICAgICAgICAsIG1fYmFzZShiYXNlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgICAgICBBU1NFUlQoKGtpbmQgPT0gSW52YWxpZExvY2F0aW9uS2luZCkgPT0gIWhlYXAp
OworICAgICAgICBBU1NFUlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CisgICAgICAgIEFTU0VSVCht
X2Jhc2UgfHwgIW1faW5kZXgpOworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oTG9jYXRp
b25LaW5kIGtpbmQsIEFic3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBF
ZGdlKCkpCisgICAgICAgIDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBp
bmRleC5ub2RlKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkTG9jYXRp
b25LaW5kKQorICAgICAgICAsIG1faGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAg
ICAgICAgLCBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX2luZGV4KG51bGxwdHIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2hl
YXA7IH0KKyAgICAKKyAgICBMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIEFic3RyYWN0SGVhcCBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9Cisg
ICAgTm9kZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIE5vZGUqIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faGVhcC5oYXNoKCkgKyBXVEY6
OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1faW5kZXgpICsgbV9raW5kOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBt
X2hlYXAgPT0gb3RoZXIubV9oZWFwCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faGVhcC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKKyAgICBO
b2RlKiBtX2Jhc2U7CisgICAgTm9kZSogbV9pbmRleDsKK307CisKK3N0cnVjdCBIZWFwTG9jYXRp
b25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBIZWFwTG9jYXRpb24mIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEhl
YXBMb2NhdGlvbiYgYSwgY29uc3QgSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6TG9jYXRpb25LaW5k
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHR5cGVk
ZWYgSlNDOjpERkc6OkhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxK
U0M6OkRGRzo6SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6
SGVhcExvY2F0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUHVyZVZhbHVlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KEdyYXBoOjpvcE5hbWUob3AoKSkpOwor
ICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgIGlm
IChjaGlsZHJlbigpLmNoaWxkKGkpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBjaGls
ZHJlbigpLmNoaWxkKGkpKTsKKyAgICB9CisgICAgaWYgKG1faW5mbykKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBtX2luZm8pOworICAgIG91dC5wcmludCgiKSIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1B1cmVWYWx1ZV9oCisjZGVmaW5lIERGR1B1cmVWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQdXJlVmFsdWUgeworcHVibGljOgorICAgIFB1
cmVWYWx1ZSgpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZv
KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBtX29w
KG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgICAgICwgbV9pbmZvKGlu
Zm8pCisgICAgeworICAgICAgICBBU1NFUlQoIShkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZUhhc1Zh
ckFyZ3MpKTsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1cmVW
YWx1ZShvcCwgY2hpbGRyZW4sIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHB0cikpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxp
c3QmIGNoaWxkcmVuKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9k
ZSogbm9kZSwgdWludHB0cl90IGluZm8pCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCks
IG5vZGUtPmNoaWxkcmVuLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVl
KE5vZGUqIG5vZGUsIGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+
b3AoKSwgbm9kZS0+Y2hpbGRyZW4sIHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVW
YWx1ZShOb2RlKiBub2RlKQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5j
aGlsZHJlbikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAg
ICwgbV9pbmZvKDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmICFtX2luZm87IH0KKyAgICAKKyAg
ICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICBjb25zdCBBZGphY2Vu
Y3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB1aW50
cHRyX3QgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2go
c3RhdGljX2Nhc3Q8aW50PihtX29wKSkgKyBtX2NoaWxkcmVuLmhhc2goKSArIG1faW5mbzsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFB1cmVWYWx1ZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcCA9PSBvdGhlci5tX29wCisgICAgICAgICAg
ICAmJiBtX2NoaWxkcmVuID09IG90aGVyLm1fY2hpbGRyZW4KKyAgICAgICAgICAgICYmIG1faW5m
byA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVU
eXBlICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX29wOworICAgIEFkamFj
ZW5jeUxpc3QgbV9jaGlsZHJlbjsKKyAgICB1aW50cHRyX3QgbV9pbmZvOworfTsKKworY2xhc3Mg
UHVyZVZhbHVlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHVyZVZhbHVl
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBQdXJlVmFsdWUmIGEsIGNvbnN0IFB1cmVWYWx1ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHR5cGVkZWYgSlNDOjpE
Rkc6OlB1cmVWYWx1ZSBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFs
dWU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IHsgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1B1cmVWYWx1ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234595</attachid>
            <date>2014-07-08 14:14:52 -0700</date>
            <delta_ts>2014-07-08 21:34:07 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60793</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA4OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA3LDYgKzI2MTEsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExMCw2ICs1MTE4LDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE4NCw2ICs1MTk0LDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTEsNiArNjEyMyw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ3LDYgKzY2NjAs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3MzMsMTEgKzc3NDcsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksMTU1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNl
IHsKKworLy8gSGVyZSdzIHRoZSBwbGFuLiBSZWdhcmRsZXNzIG9mIGdyYXBoIGZvcm0sIHRoZXJl
IHdpbGwgYmUgYW4gdGVtcGxhdGl6ZWQgYWxnb3JpdGhtIG9mIHRoZSBmb3JtOgorLy8KKy8vICAg
ICBpZiAoaXNQdXJlKG5vZGUpKSB7CisvLyAgICAgICAgIE5vZGUqIG1hdGNoID0gZmluZFB1cmVG
dW5jdG9yKFB1cmVWYWx1ZTo6Y29tcHV0ZUZvcihub2RlKSk7CisvLyAgICAgICAgIGlmIChtYXRj
aCAmJiAhd2VpcmRTcGVjaWFsQ2FzZXMobm9kZSwgbWF0Y2gpKQorLy8gICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQobWF0Y2gpOworLy8gICAgIH0gZWxzZSB7CisvLyAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworLy8gICAgICAgICAuLi4gLy8gc3R1ZmYKKy8vICAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDogLy8gZm9yIGV4YW1wbGUKKy8vICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0g
ZmluZEhlYXBEZWZpbml0aW9uRnVuY3RvcigKKy8vICAgICAgICAgICAgICAgICBIZWFwTG9jYXRp
b24oQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgLi4uKSwgbm9kZS0+Y2hpbGQxKCkpKTsK
Ky8vICAgICAgICAgICAgIGlmIChtYXRjaCkKKy8vICAgICAgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChtYXRjaCk7CisvLyAgICAgICAgICAgICBicmVhazsKKy8vICAgICAgICAgZGVmYXVsdDoK
Ky8vICAgICAgICAgICAgIGJyZWFrOworLy8gICAgICAgICB9CisvLyAgICAgfQorLy8KKy8vIEZv
ciBib3RoIENQUyBhbmQgU1NBLCB3ZSB3aWxsIG1hbmFnZSBIYXNoTWFwcyBmb3IgYm90aCB0aGUg
cHVyZSBhbmQgaW1wdXJlIGNhc2VzLiBUaGUgZGlmZmVyZW5jZQorLy8gaXMgdGhhdCBmb3IgQ1BT
LCB0aGUgbWFwcyBhcmUganVzdCBibG9jay1sb2NhbDsgd2hpbGUgZm9yIFNTQSwgd2Ugd2lsbCBo
YXZlIGEgZ2xvYmFsCisvLyBvbmUtdG8tbWFueSBtYXAgZm9yIHB1cmUgdmFsdWVzLCBhbmQgYSBi
bG9jay1sb2NhbCBtYXAgZm9yIGhlYXAgbG9jYXRpb25zIGFsb25nIHdpdGgKKy8vIGhlYXAtbG9j
YXRpb25zLWF0LWVuZCBhbmQgY2xvYmJlciBzZXRzIGZvciBlYWNoIGJhc2ljIGJsb2NrIHRoYXQg
ZmFjaWxpdGF0ZSBhIGJhY2t3YXJkcyBzZWFyY2guCisvLworLy8gSXQncyBub3QgY2xlYXIgdGhh
dCB0aGUgd2VpcmRTcGVjaWFsQ2FzZXMoKSB0aGluZyBpcyBzbWFydCwgYnV0IGF0IHRoZSBzYW1l
IHRpbWUsIGl0J3Mgbm90IGNsZWFyCisvLyBpZiB0aGVyZSBpcyBhIGJldHRlciB3YXkuIE9uZSBv
cHRpb24gaXMgdG8ganVzdCBiYWtlIHRob3NlIGludG8gdGhlIG5vdGlvbiBvZiBQdXJlVmFsdWUu
CisvLworLy8gV2hhdCBJJ2QgcmVhbGx5IGxpa2UsIHRob3VnaCwgaXMgZm9yIHNtYWxsIGJhc2lj
IGJsb2NrcyB0byBkbyB0aGUgYmFja3dhcmQgc2VhcmNoIGFsZ29yaXRobSB0aGF0CisvLyB3ZSBo
YXZlIGN1cnJlbnRseSwgYXMgdGhhdCByZXF1aXJlcyBhIGxvdCBsZXNzIGluaXRpYWwgb3Zlcmhl
YWQuIEknbSBub3Qgc3VyZSB5ZXQgaG93IHRvIGRvCisvLyB0aGlzLiBQZXJoYXBzIHRoZXJlIHdp
bGwgYmUgYSBtaWRkbGUgd2F5LCB3aGVyZSBJIGp1c3QgdXNlIGEgdmVjdG9yIGluc3RlYWQgb2Yg
YSBIYXNoTWFwLiBXaG8KKy8vIGtub3dzLiBPciwgbXkgY3VycmVudCB0aGlua2luZyBpcyB0byB1
c2UgUHVyZVZhbHVlOjptYXRjaGVzKCkuIFRoYXQgd2lsbCBoYXZlIHNvbWUgcmVkdW5kYW5jeQor
Ly8gd2l0aCBQdXJlVmFsdWU6OmNvbXB1dGVGb3IoKSwgYnV0IHRoYXQncyBwcm9iYWJseSBmaW5l
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgQmxvY2tDU0VQcm9jZXNzb3Ig
eworcHVibGljOgorICAgIEJsb2NrQ1NFUHJvY2Vzc29yKEdyYXBoJiBncmFwaCwgQWRhcHRvciYg
YWRhcHRvciwgQmFzaWNCbG9jayAqYmxvY2spCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAg
ICAgICAgLCBtX2FkYXB0b3IoYWRhcHRvcikKKyAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQorICAg
ICAgICAsIG1fY2hhbmdlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgbV9ibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgbV9ub2RlID0g
bV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIHByb2Nlc3NOb2RlKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIAorICAgIHZvaWQgcHJvY2Vzc05vZGUo
KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7Cisg
ICAgICAgIGNsb2JiZXJpemUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyaXplKCkK
KyAgICB7CisgICAgICAgIG1faXNQdXJlID0gdHJ1ZTsKKyAgICAgICAgUmVhZE1ldGhvZENsb2Ji
ZXJpemU8QWRhcHRvcj4gcmVhZE1ldGhvZCgqdGhpcyk7CisgICAgICAgIFdyaXRlTWV0aG9kQ2xv
YmJlcml6ZTxBZGFwdG9yPiB3cml0ZU1ldGhvZCgqdGhpcyk7CisgICAgICAgIERlZk1ldGhvZENs
b2JiZXJpemU8QmxvY2tDU0VQcm9jZXNzb3I+IGRlZk1ldGhvZCgqdGhpcyk7CisgICAgICAgIERG
Rzo6Y2xvYmJlcml6ZShtX2dyYXBoLCBtX25vZGUsIHJlYWRNZXRob2QsIHdyaXRlTWV0aG9kLCBk
ZWZNZXRob2QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlYWQoQWJzdHJhY3RIZWFwKQorICAg
IHsKKyAgICAgICAgbV9pc1B1cmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0
ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fYWRhcHRvci53cml0ZShoZWFw
KTsKKyAgICAgICAgbV9pc1B1cmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYo
UHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGFwdG9yLmFk
ZFB1cmUodmFsdWUsIG1fbm9kZSk7CisgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBzZXRSZXBsYWNlbWVudChtYXRjaCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKKyAgICB7CisgICAgICAg
IGFkYXB0b3IuYWRkSW1wdXJlKGxvY2F0aW9uLCBtX25vZGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGltcHVyZUNTRSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICAgICAgCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgQWRhcHRvciYgbV9hZGFwdG9y
OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9ub2RlOworICAgIGJvb2wg
bV9pc1B1cmU7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitjbGFzcyBMQ1NFUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlv
biIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOwor
ICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CisgICAg
ICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAgICAgICAgcGVyZm9ybUJsb2NrTG9jYWxDU0UoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOgorICAg
ICAgICAgICAgcGVyZm9ybUdDU0UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgCisgICAgCisgICAgCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBOb2RlKiBt
X25vZGU7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCiBjbGFzcyBDU0VQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQpAQCAtMjk5LDcg
KzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNo
aWxkMikgCisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9PSBjaGlsZDIp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewpAQCAtMTE2Nyw2ICsxMzE2LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hhbmdlZDsg
Ly8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24g
b3RoZXIgb3B0aW1pemF0aW9ucy4KIH07CiAKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBi
b29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiwzNyAr
MTIyLDM4IEBAIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9iYmVyU2V0OjpzZXRPZigKIHZvaWQg
YWRkUmVhZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQog
ewogICAgIENsb2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRXcml0ZTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0
ZSk7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBub09wLCBub09wKTsKIH0KIAogdm9pZCBhZGRXcml0ZXMoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldEFkZCBh
ZGRXcml0ZSh3cml0ZVNldCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwg
YWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBu
b09wKTsKIH0KIAogdm9pZCBhZGRSZWFkc0FuZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQogewogICAgIENs
b2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRl
KHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0
ZSk7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBhZGRXcml0ZSwgbm9PcCk7CiB9CiAKIGJvb2wgcmVhZHNPdmVybGFwKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCkKIHsKICAgICBDbG9iYmVy
U2V0T3ZlcmxhcHMgYWRkUmVhZChyZWFkU2V0KTsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRXcml0
ZTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAg
Tm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFk
LCBub09wLCBub09wKTsKICAgICByZXR1cm4gYWRkUmVhZC5yZXN1bHQoKTsKIH0KIAogYm9vbCB3
cml0ZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVT
ZXQpCiB7Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOwogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRXcml0ZSh3cml0ZVNldCk7Ci0gICAgY2xv
YmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUu
cmVzdWx0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmNwcAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTkgKzMyLDM1IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorYm9vbCBpc1B1cmUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQoreworICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRBY2Nlc3M7CisgICAgTm9P
cENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3Ms
IGFkZEFjY2Vzcywgbm9PcCk7CisgICAgcmV0dXJuICFhZGRBY2Nlc3MucmVzdWx0KCk7Cit9CisK
K2Jvb2wgaGFzUHVyZURlZnMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIENoZWNr
Q2xvYmJlcml6ZSBhZGRQdXJlOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJl
cml6ZShncmFwaCwgbm9kZSwgbm9PcCwgbm9PcCwgYWRkUHVyZSk7CisgICAgcmV0dXJuIGFkZFB1
cmUucmVzdWx0KCk7Cit9CisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiB7Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOwogICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRXcml0ZTsKLSAgICBjbG9iYmVyaXplKGdyYXBo
LCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwg
bm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0K
IAogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RI
ZWFwIGhlYXApCiB7Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJl
cml6ZSBub09wOwogICAgIEFic3RyYWN0SGVhcE92ZXJsYXBzIGFkZFdyaXRlKGhlYXApOwotICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVy
aXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdy
aXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMyBAQAogI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5j
dG9yPgotdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0
b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVu
Y3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdy
aXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVz
OgogICAgIC8vCkBAIC02OSw2ICs3MSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgLy8gICBwcmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0
aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRpZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNr
aW5nLgogICAgIAorICAgIC8vIFdoaWxlIHJlYWQoKSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNl
bGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRyYWNrIHdoYXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAg
IC8vIG5vZGUgbWF5IHJlYWQgb3Igd3JpdGUgLSB0aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRy
aWNreS4gSXQgdGVsbHMgeW91IHRoZSBoZWFwIGxvY2F0aW9ucworICAgIC8vIChub3QganVzdCBh
YnN0cmFjdCBoZWFwcykgdGhhdCBhcmUgZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlv
biBjb21wcmlzZXMgYW4gYWJzdHJhY3QKKyAgICAvLyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBM
b2NhdGlvbktpbmQuIEJyaWVmbHksIGEgbG9jYXRpb24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBs
b2NhdGlvbgorICAgIC8vIHdob3NlIHZhbHVlIGNhbiBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBh
dCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBsb2NhdGlvbnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAg
Ly8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25l
IHdhbnRzIHRvIENTRSBhIGxvYWQgZnJvbSB0aGUgaGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBv
YmplY3Qgc2hvdWxkIGJlCisgICAgLy8gICBzdWZmaWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0
Y2hpbmcgbm9kZS4KKyAgICAvLworICAgIC8vIC0gVGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9u
bHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNvdWxkIGJlIGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFu
eSBzdWNoCisgICAgLy8gICBDU0UgYXR0ZW1wdC4gSS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0
cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0d2VlbiBzb21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8v
ICAgdGhhdCBkZWZpbmVzIGEgSGVhcExvY2F0aW9uIHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJl
IG5vIHdyaXRlcyB0byBhbnkgYWJzdHJhY3QgaGVhcCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRo
ZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4gd2UgaGF2ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVs
eSwgdGhlIHNlbWFudGljcyBvZgorICAgIC8vICAgd3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVy
dHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhlbSB0byBiZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24g
d2hhdAorICAgIC8vICAgaXMgQ1NFYWJsZS4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShn
cmFwaCwgbm9kZSkpCiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAg
LTc2LDIzICs5NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0
YW50KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElkZW50aXR5Ogog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6
CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgog
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0VVJT
aGlmdDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNh
c2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICBjYXNlIEFyaXRoTXVsOgog
ICAgIGNhc2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1v
ZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0
aE1heDoKQEAgLTEwMCwyOCArMTE5LDQ3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAg
ICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEdldFNj
b3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAg
Y2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKICAgICBjYXNlIElzTnVtYmVy
OgogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgotICAgIGNhc2UgQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2Ug
RG91YmxlQXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAg
IGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIE1ha2VSb3BlOgor
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6Cisg
ICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6
CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUsIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5l
eGVjdXRhYmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0
YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+c3Rv
cmFnZVBvaW50ZXIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92
SGludDoKQEAgLTE0Myw3ICsxODEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tU
aWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNhc2UgSW52YWxpZGF0
aW9uUG9pbnQ6CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxs
OgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0xNTIsNiArMTg5LDExIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoU2lkZVN0YXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50
OgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElu
dmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworCiAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5
V2F0Y2hwb2ludDoKICAgICAgICAgcmVhZChXYXRjaHBvaW50X2ZpcmUpOwpAQCAtMTg0LDEyICsy
MjYsMjQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAg
Y2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAogICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc0Z1
bmN0aW9uOgotICAgIGNhc2UgVHlwZU9mOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBUeXBl
T2Y6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
VHlwZU9mTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBy
ZXR1cm47CisKICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAg
Y2FzZSBQdXRCeUlkOgpAQCAtMjEyLDI3ICsyNjYsMzMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAgICAg
ICAgcmVhZChHZXR0ZXJTZXR0ZXJfZ2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihH
ZXR0ZXJMb2MsIEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJl
YWQoR2V0dGVyU2V0dGVyX3NldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU2V0dGVy
TG9jLCBHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpD
YWxsZWUpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRM
b2NhbDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldEJ5VmFsOiB7CkBAIC0yNjIsMTEgKzMyMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0
J3Mgb25seSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1
bWVudHNfcmVnaXN0ZXJzKTsKICAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjc0LDYgKzMzNiw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
ICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50
MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0yODUsNiArMzQ4LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0
dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJlYWQoV29ybGQpOwpAQCAtMjk2LDYgKzM2MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7
CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
Q29udGlndW91c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5v
ZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJlYWQoV29ybGQpOwpAQCAtMzE5LDggKzM4NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICByZWFkKFR5cGVkQXJy
YXlQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
KTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAg
ICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4
ZWRQcm9wZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMzEsNiArMzk2LDkgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHV0QnlWYWw6
CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIE5vZGUqIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApLm5vZGUoKTsKKyAgICAgICAgTm9kZSogaW5kZXggPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogdmFsdWUgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpLm5vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQdXQo
KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
ICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKQEAgLTM1Miw5ICs0MjAsOSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVn
aXN0ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICByZWFkKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQo
TWlzY0ZpZWxkcyk7CiAgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgYmFzZSwgaW5k
ZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CkBAIC0zNjcsNiArNDM1LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9y
TGVuZ3RoKTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CiAgICAg
ICAgICAgICB3cml0ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBi
YXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CkBAIC0zNzksNiArNDQ4LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRp
ZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtMzkxLDYgKzQ2
MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGln
dW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CkBAIC00MDksOSArNDgwLDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAg
ICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBkZWYoKSBhbnl0aGluZyBoZXJlIGJlY2F1
c2UgdGhlc2Ugb3BlcmF0aW9ucyB0cnVuY2F0ZSB0aGVpciBpbnB1dHMuCisgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTQxOSw3ICs0OTEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAg
IGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAg
ICAgICByZXR1cm47CiAKQEAgLTQzMSwxMiArNTAyLDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAg
ICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
Q2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgot
ICAgICAgICByZWFkKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2FzZSBJbnN0YW5jZU9m
OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oSW5zdGFuY2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwog
ICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ0NiwxNSArNTE5LDE4IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0
dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0
X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHJlYWQo
SlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZs
eSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlpZnk6CkBAIC00NjgsNDIgKzU0NCw1OSBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShu
b2RlLCBub2RlLT5hcnJheU1vZGUoKS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisgICAgICAgIH0KKyAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlTdG9yYWdlTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6
Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgcmVhZChK
U0FycmF5QnVmZmVyVmlld19tb2RlKTsKLSAgICAgICAgcmVhZChCdXR0ZXJmbHlfYXJyYXlCdWZm
ZXIpOwotICAgICAgICByZWFkKEFycmF5QnVmZmVyX2RhdGEpOworICAgICAgICByZWFkKE1pc2NG
aWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9j
LCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRl
bnRpZmllck51bWJlcikpOworICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlcjsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVu
dGlmaWVyTnVtYmVyKTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6
CisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVj
dHVyZUlEKTsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkuaWRlbnRpZmllck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFBy
b3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7
CisgICAgICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9w
ZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVs
dGlQdXRCeU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3Jp
dGUoaGVhcCk7CiAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRl
c1N0cnVjdHVyZXMoKSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKQogICAgICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFBy
b3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogewor
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlk
ZW50aWZpZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNo
aWxkMygpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKQEAgLTUxNCw3OCArNjA3LDg3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlM
ZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOwot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJl
YWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3Ro
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZWFkKEpT
QXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobW9kZS50eXBlZEFy
cmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVs
ZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
Z3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
a2lwVG9wU2NvcGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25S
ZWdpc3RlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIHJlYWQoSlNWYXJp
YWJsZU9iamVjdF9yZWdpc3RlcnMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVS
ZWdpc3RlcnNMb2MsIEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZh
cjoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIo
KSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoK
ICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkp
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0
SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2Rl
LT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0R2xvYmFsVmFyOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+
cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBB
YnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3T2JqZWN0Ogog
ICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgIGNhc2Ug
TmV3QXJyYXlCdWZmZXI6CisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhN
RTogRW5hYmxlIENTRSBmb3IgdGhlc2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93
IGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5CisgICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBp
bmRleCBub2RlIGFuZCBhIHZhbHVlIG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdl
IGxvd2VyZWQKKyAgICAgICAgLy8gdGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4
aWJsZSB3YXkgb2YgZGVmKCknaW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsK
KyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdP
YmplY3Q6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgY2FzZSBOZXdGdW5jdGlv
bjoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2Jq
ZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICBjYXNlIE5ld0Z1bmN0
aW9uTm9DaGVjazoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25F
eHByZXNzaW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRl
KEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIHJlYWQoV29ybGQpOwotICAgICAgICAg
ICAgd3JpdGUoV29ybGQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBS
ZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0
ZSk7CkBAIC01OTgsNiArNzAwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUVxOgpAQCAtNjA1LDggKzcwOCwxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb21wYXJlTGVz
c0VxOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OgotICAgICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKKyAgICAg
ICAgaWYgKCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAg
IGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAg
ICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTYxNSw2ICs3MjAsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2Jq
ZWN0VXNlOgorICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmIGEgcHVyZSB2YWx1ZSwgdW5m
b3J0dW5hdGVseS4gSSdsbCBhdm9pZCBsb2FkLWVsaW1pbmF0aW5nIHRoZXNlIGZvcgorICAgICAg
ICAgICAgLy8gbm93LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQ2VsbFVzZToKQEAgLTYzOSwxMCArNzQ2LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oTXlBcmd1bWVudHNMZW5ndGhMb2MsIFZhcmlhYmxlcyksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBy
ZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTXlBcmd1bWVudEJ5VmFs
TG9jLCBWYXJpYWJsZXMpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKQEAgLTY3Miw3ICs3ODEsOCBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7
CiBwdWJsaWM6CiAgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KLSAgICB2b2lkIG9wZXJhdG9yKCko
QWJzdHJhY3RIZWFwKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULi4uPgorICAgIHZvaWQg
b3BlcmF0b3IoKShULi4uKSB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xvYmJlcml6ZSB7CkBAIC02
ODIsNyArNzkyLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCkgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULi4uPgorICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0ID0gdHJ1
ZTsgfQogICAgIAogICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0K
ICAgICAKQEAgLTY5MCw2ICs4MDEsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9
OwogCitib29sIGlzUHVyZShHcmFwaCYsIE5vZGUqKTsgLy8gUHVyZSBtZWFucyBpdCBkb2VzIG5v
IHJlYWRzIG9yIHdyaXRlcy4KK2Jvb2wgaGFzUHVyZURlZnMoR3JhcGgmLCBOb2RlKik7IC8vIEhh
dmluZyBwdXJlIGRlZnMgbWVhbnMgdGhhdCBwdXJlIENTRSBpcyBwb3NzaWJsZS4KKwogYm9vbCBk
b2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7
CkBAIC03MTYsNiArODMwLDYzIEBAIHByaXZhdGU6CiAKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFw
aCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwogCisvLyBXZSB3b3VsZCBoYXZlIHVzZWQgYmluZCgp
IGZvciB0aGVzZSwgYnV0IGJlY2F1c2Ugb2YgdGhlIG92ZXJsYW9kaW5nIHRoYXQgd2UgYXJlIGRv
aW5nLAorLy8gaXQncyBxdWl0ZSBhIGJpdCBvZiBjbGVhcmVyIHRvIGp1c3Qgd3JpdGUgdGhpcyBv
dXQgdGhlIHRyYWRpdGlvbmFsIHdheS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFJl
YWRNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZShU
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92
YWx1ZS5yZWFkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBXcml0ZU1ldGhvZENsb2JiZXJpemUgeworcHVi
bGljOgorICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3Ry
YWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS53cml0ZShoZWFwKTsKKyAgICB9
Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgRGVmTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6CisgICAgRGVmTWV0aG9kQ2xvYmJl
cml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBvcGVyYXRvcigpKFB1cmVWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fdmFsdWUuZGVmKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUu
ZGVmKGxvY2F0aW9uLCBub2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsK
K307CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEhlYXBMb2NhdGlvbjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6IiwgbV9o
ZWFwKTsKKyAgICAKKyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG91dC5wcmludCgiWyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91dC5w
cmludCgiLCAiLCBtX2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jYXRpb25L
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9jYXRp
b25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgorICAg
ICAgICBvdXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc09i
amVjdExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5jdGlv
bkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlw
ZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXR0ZXJMb2M6
CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyTG9jIik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlMZW5ndGhM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZseUxvYzoK
KyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2VMb2M6CisgICAgICAgIG91dC5wcmludCgi
Q2hlY2tIYXNJbnN0YW5jZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgQ2xvc3VyZVJlZ2lzdGVyc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlUmVnaXN0
ZXJzTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlVmFy
aWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxlTG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJpYWJsZUxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkUHJv
cGVydHlTdG9yYWdlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJ
bnN0YW5jZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluc3RhbmNlT2ZMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRCeVZhbExvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJNeUFyZ3VtZW50QnlWYWxMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRzTGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJpbnQo
Ik15QXJndW1lbnRzTGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNraXBUb3BTY29wZUxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jOgorICAgICAgICBv
dXQucHJpbnQoIlR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0hlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR0hlYXBMb2Nh
dGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVh
cC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitlbnVtIExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZExvY2F0aW9uS2luZCwKKyAg
ICAKKyAgICBBcnJheUxlbmd0aExvYywKKyAgICBCdXR0ZXJmbHlMb2MsCisgICAgQ2hlY2tIYXNJ
bnN0YW5jZUxvYywKKyAgICBDbG9zdXJlUmVnaXN0ZXJzTG9jLAorICAgIENsb3N1cmVWYXJpYWJs
ZUxvYywKKyAgICBHZXR0ZXJMb2MsCisgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSW5kZXhl
ZFByb3BlcnR5TG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsCisgICAgSW5zdGFu
Y2VPZkxvYywKKyAgICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc0Z1bmN0aW9uTG9jLAor
ICAgIElzT2JqZWN0TG9jLAorICAgIE15QXJndW1lbnRCeVZhbExvYywKKyAgICBNeUFyZ3VtZW50
c0xlbmd0aExvYywKKyAgICBOYW1lZFByb3BlcnR5TG9jLAorICAgIFNldHRlckxvYywKKyAgICBT
a2lwVG9wU2NvcGVMb2MsCisgICAgVHlwZU9mTG9jLAorICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0
TG9jLAorICAgIFZhcmlhYmxlTG9jCit9OworCitjbGFzcyBIZWFwTG9jYXRpb24geworcHVibGlj
OgorICAgIEhlYXBMb2NhdGlvbigKKyAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlk
TG9jYXRpb25LaW5kLAorICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0SGVhcCgp
LAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxscHRyKQor
ICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faGVhcChoZWFwKQorICAgICAgICAs
IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoKGtpbmQgPT0gSW52YWxpZExvY2F0aW9uS2luZCkgPT0gIWhlYXApOworICAgICAgICBB
U1NFUlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CisgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwgIW1f
aW5kZXgpOworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQs
IEFic3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCisgICAg
ICAgIDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkTG9jYXRpb25LaW5kKQorICAg
ICAgICAsIG1faGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2Jh
c2UobnVsbHB0cikKKyAgICAgICAgLCBtX2luZGV4KG51bGxwdHIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYXA7IH0KKyAgICAK
KyAgICBMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIEFi
c3RyYWN0SGVhcCBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgTm9kZSogYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIE5vZGUqIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faGVhcC5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8Tm9k
ZSo+OjpoYXNoKG1faW5kZXgpICsgbV9raW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2hlYXAgPT0gb3Ro
ZXIubV9oZWFwCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAg
ICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
aGVhcC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIExvY2F0aW9u
S2luZCBtX2tpbmQ7CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKKyAgICBOb2RlKiBtX2Jhc2U7
CisgICAgTm9kZSogbV9pbmRleDsKK307CisKK3N0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEhlYXBMb2NhdGlvbiYg
YSwgY29uc3QgSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6TG9jYXRpb25LaW5kKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6
OkhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVh
cExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9u
PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgUHVyZVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KEdyYXBoOjpvcE5hbWUob3AoKSkpOworICAgIG91dC5wcmlu
dCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChjaGlsZHJlbigp
LmNoaWxkKGkpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBjaGlsZHJlbigpLmNoaWxk
KGkpKTsKKyAgICB9CisgICAgaWYgKG1faW5mbykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBt
X2luZm8pOworICAgIG91dC5wcmludCgiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1B1cmVWYWx1ZV9oCisjZGVmaW5lIERGR1B1cmVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBQdXJlVmFsdWUgeworcHVibGljOgorICAgIFB1cmVWYWx1ZSgpCisg
ICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDApCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxp
c3QmIGNoaWxkcmVuLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBtX29wKG9wKQorICAgICAg
ICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgewor
ICAgICAgICBBU1NFUlQoIShkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAg
ICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0
JiBjaGlsZHJlbiwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hp
bGRyZW4sIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHB0cikpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVu
KQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSwgdWlu
dHB0cl90IGluZm8pCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxk
cmVuLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUs
IGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+
Y2hpbGRyZW4sIHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBu
b2RlKQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDEp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
IG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmICFtX2luZm87IH0KKyAgICAKKyAgICBOb2RlVHlwZSBv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB1aW50cHRyX3QgaW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2goc3RhdGljX2Nhc3Q8
aW50PihtX29wKSkgKyBtX2NoaWxkcmVuLmhhc2goKSArIG1faW5mbzsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFB1cmVWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vcCA9PSBvdGhlci5tX29wCisgICAgICAgICAgICAmJiBtX2NoaWxk
cmVuID09IG90aGVyLm1fY2hpbGRyZW4KKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5t
X2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmIG1faW5m
bzsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX29wOworICAgIEFkamFjZW5jeUxpc3QgbV9j
aGlsZHJlbjsKKyAgICB1aW50cHRyX3QgbV9pbmZvOworfTsKKworY2xhc3MgUHVyZVZhbHVlSGFz
aCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHVyZVZhbHVlJiBrZXkpIHsgcmV0
dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQdXJlVmFsdWUm
IGEsIGNvbnN0IFB1cmVWYWx1ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlB1cmVWYWx1
ZSBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IDogU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1cmVW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKICAgICBib29sIHJlbW92ZShpdGVy
YXRvcik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHJlbW92ZUlm
KEZ1bmN0b3ImIGZ1bmN0b3IpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIE1hcHBlZFR5cGUg
dGFrZShjb25zdCBLZXlUeXBlJik7IC8vIGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBnZXQgd2l0
aCByZW1vdmUKQEAgLTM1NCw2ICszNTYsMTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6cmVtbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZUlmKEZ1bmN0b3Im
IGZ1bmN0b3IpCit7CisgICAgbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgogaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtl
eVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNo
VGFibGUuaAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRy
eUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJlbW92ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgICAgICB2b2lkIHJlbW92ZUlmKEZ1bmN0b3ImKTsKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlCdWNrZXQoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlU
cmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOyB9CkBAIC0xMDMxLDYgKzEwMzMsMjUg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlSWYoRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGFibGVTaXpl
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWZ1bmN0b3IobV90YWJsZVtpXSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlbGV0ZUJ1Y2tl
dChtX3RhYmxlW2ldKTsKKyAgICAgICAgICAgICsrbV9kZWxldGVkQ291bnQ7CisgICAgICAgICAg
ICAtLW1fa2V5Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRT
aHJpbmsoKSkKKyAgICAgICAgICAgIHNocmluaygpOworICAgICAgICAKKyAgICAgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGF1dG8g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKGludCBzaXplKSAtPiBWYWx1ZVR5cGUqCiAgICAgewog
ICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBs
aWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234619</attachid>
            <date>2014-07-08 21:34:07 -0700</date>
            <delta_ts>2014-07-08 23:04:11 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64920</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA4OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA3LDYgKzI2MTEsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExMCw2ICs1MTE4LDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE4NCw2ICs1MTk0LDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTEsNiArNjEyMyw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ3LDYgKzY2NjAs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3MzMsMTEgKzc3NDcsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDIwMSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIENsb2JiZXJGaWx0ZXIgeworcHVibGljOgorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RI
ZWFwIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgSW1wdXJlTWFwOjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWly
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtleS5oZWFwKCkp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKK307CisK
K2lubGluZSB2b2lkIGNsb2JiZXIoSW1wdXJlTWFwJiBtYXAsIEFic3RyYWN0SGVhcCBoZWFwKQor
eworICAgIENsb2JiZXJGaWx0ZXIgZmlsdGVyKGhlYXApOworICAgIG1hcC5yZW1vdmVJZihmaWx0
ZXIpOworfQorCitjbGFzcyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IExDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBj
b21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX3B1cmVWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1f
aW1wdXJlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obV9ub2RlKTsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG5vZGUsICp0aGlzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgcmVhZChBYnN0cmFjdEhlYXApIHsgfQorICAgIAor
ICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBjbG9iYmVy
KG1faW1wdXJlVmFsdWVzLCBoZWFwKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3B1cmVWYWx1ZXMuYWRk
KHZhbHVlLCBtX25vZGUpOworICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZVZhbHVlcy5hZGQobG9jYXRpb24sIHZh
bHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBtX2NoYW5nZWQ7CisgICAgTm9kZSogbV9ub2RlOworICAgIAorICAgIFB1cmVNYXAgbV9wdXJl
VmFsdWVzOworICAgIEltcHVyZU1hcCBtX2ltcHVyZVZhbHVlczsKK307CisKK2NsYXNzIEdDU0VQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgR0NTRVBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCAiZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVs
aW1pbmF0aW9uIik7CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252
ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAg
CisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRC
bG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIG1f
aW1wdXJlRGF0YS5yZXNpemUobV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGaXJzdCBlc3RhYmxpc2ggd2hhdCBibG9ja3MgY2xvYmJlciB3aGF0IHRoaW5nczsgd2Ug
ZGVmaW5pdGVseSBvbmx5IG5lZWQgdG8gZG8gdGhpcworICAgICAgICAvLyBvbmNlLiBXZSB1c2Ug
dGhlIGRlcHRoRmlyc3QgYXJyYXkgaGVyZSBvdXQgb2YgY29udmVuaWVuY2UuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAgICBJbXB1cmVCbG9j
a0RhdGEmIGRhdGEgPSBtX2ltcHVyZURhdGFbYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAg
ICAgICAgICAgICAgIGFkZFdyaXRlcyhtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4KSwgZGF0
YS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UgZG9pbmcgdGhp
cyBiZWZvcmUsIHdoYXQgZm9sbG93cyBtaWdodCBoYXZlIHRvIGJlIG1hZGUgaXRlcmF0aXZlLgor
ICAgICAgICAvLyBCdXQgaXQgZmVlbHMgbGlrZSwgcmlnaHQgbm93LCB0aGlzIHdvcmtzIGFzIGEg
c2luZ2xlIHBhc3MgYmVjYXVzZSB3ZSBvbmx5IGFkZCB0aGluZ3MKKyAgICAgICAgLy8gZnJvbSBh
IGJsb2NrIGFmdGVyIHdlIGhhdmUgZG9uZSBzdWJzdGl0dXRpb25zIG9uIHRoYXQgYmxvY2suCisg
ICAgICAgIAorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOworICAgICAg
ICAgICAgbV9pbXB1cmVWYWx1ZXMgPSAmbV9pbXB1cmVEYXRhW2Jsb2NrLT5pbmRleF0uYXZhaWxh
YmxlQXRUYWlsOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIG1f
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVy
Zm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9n
cmFwaCwgbm9kZSwgKnRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJl
YWQoQWJzdHJhY3RIZWFwKSB7IH0KKyAgICAKKyAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBo
ZWFwKQorICAgIHsKKyAgICAgICAgY2xvYmJlcigqbV9pbXB1cmVWYWx1ZXMsIGhlYXApOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBh
dXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQodmFsdWUsIFZlY3RvcjxOb2RlKj4oKSk7Cisg
ICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhbiBlbnRyeSB0aGF0IGRvbWluYXRlcyB1cy4K
KyAgICAgICAgCisgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCisgICAgeworICAgICAgICAv
LyBGaXJzdCBjaGVjayBpZiB0aGUgbG9jYWwgbWFwIGhhcyBpdDsgdGhlbiBjaGVjayBpZiB3ZSBj
YW4gZmluZCBpdCBnbG9iYWxseTsgYW5kIGZpbmFsbHkKKyAgICAgICAgLy8gaWYgYWxsIHRoYXQg
ZmFpbHMgdGhlbiBhZGQgaXQuCisgICAgICAgIAorICAgICAgICBOb2RlKiBtYXRjaCA9IG1faW1w
dXJlVmFsdWVzLT5nZXQobG9jYXRpb24pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
ICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
VmVjdG9yPEJhc2ljQmxvY2sqLCA4PiB3b3JrbGlzdDsKKyAgICAgICAgQml0VmVjdG9yIHNlZW47
CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZCgKKyAgICB9CisgICAgCisgICAgc3RydWN0IEltcHVy
ZUJsb2NrRGF0YSB7CisgICAgICAgIENsb2JiZXJTZXQgd3JpdGVzOworICAgICAgICBJbXB1cmVN
YXAgYXZhaWxhYmxlQXRUYWlsOworICAgIH07CisgICAgCisgICAgUHVyZU11bHRpTWFwIG1fcHVy
ZVZhbHVlczsKKyAgICBWZWN0b3I8SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZURhdGE7CisgICAg
CisgICAgTm9kZSogbV9ub2RlOworICAgIEltcHVyZU1hcCogbV9pbXB1cmVWYWx1ZXM7CisgICAg
CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCiBjbGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiBwdWJsaWM6CiAgICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQpAQCAtMjk5LDcgKzQ5NCw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNoaWxkMikg
CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9PSBjaGlsZDIpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpA
QCAtMTE2Nyw2ICsxMzYyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hhbmdlZDsgLy8gT25s
eSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIg
b3B0aW1pemF0aW9ucy4KIH07CiAKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBib29sIHBl
cmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgQ1NFIFBoYXNlIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlclNldC5jcHAJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiwzNyArMTIyLDM4
IEBAIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9iYmVyU2V0OjpzZXRPZigKIHZvaWQgYWRkUmVh
ZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQogewogICAg
IENsb2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRX
cml0ZTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cisg
ICAgTm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRS
ZWFkLCBub09wLCBub09wKTsKIH0KIAogdm9pZCBhZGRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRS
ZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRXcml0
ZSh3cml0ZVNldCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3Jp
dGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsK
IH0KIAogdm9pZCBhZGRSZWFkc0FuZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENs
b2JiZXJTZXQmIHJlYWRTZXQsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQogewogICAgIENsb2JiZXJT
ZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRl
U2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cisg
ICAgTm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRS
ZWFkLCBhZGRXcml0ZSwgbm9PcCk7CiB9CiAKIGJvb2wgcmVhZHNPdmVybGFwKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCkKIHsKICAgICBDbG9iYmVyU2V0T3Zl
cmxhcHMgYWRkUmVhZChyZWFkU2V0KTsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRXcml0ZTsKLSAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgTm9PcENs
b2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBub09w
LCBub09wKTsKICAgICByZXR1cm4gYWRkUmVhZC5yZXN1bHQoKTsKIH0KIAogYm9vbCB3cml0ZXNP
dmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCiB7
Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwog
ICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRXcml0ZSh3cml0ZVNldCk7Ci0gICAgY2xvYmJlcml6
ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmNwcAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTkgKzMyLDM1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorYm9vbCBpc1B1cmUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQoreworICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRBY2Nlc3M7CisgICAgTm9PcENsb2Ji
ZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFj
Y2Vzcywgbm9PcCk7CisgICAgcmV0dXJuICFhZGRBY2Nlc3MucmVzdWx0KCk7Cit9CisKK2Jvb2wg
aGFzUHVyZURlZnMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIENoZWNrQ2xvYmJl
cml6ZSBhZGRQdXJlOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShn
cmFwaCwgbm9kZSwgbm9PcCwgbm9PcCwgYWRkUHVyZSk7CisgICAgcmV0dXJuIGFkZFB1cmUucmVz
dWx0KCk7Cit9CisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7
Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwog
ICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRXcml0ZTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwg
YWRkV3JpdGUsIG5vT3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIAogYm9v
bCB3cml0ZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhl
YXApCiB7Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOwogICAgIEFic3RyYWN0SGVhcE92ZXJsYXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2Ji
ZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJl
c3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUg
IkRGR0Fic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNs
dWRlICJERkdQdXJlVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgot
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJl
YWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3Rvciwg
dHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVu
Y3RvciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAg
IC8vCkBAIC02OSw2ICs3MSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgLy8gICBwcmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHBy
b2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRpZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgog
ICAgIAorICAgIC8vIFdoaWxlIHJlYWQoKSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhw
bGFuYXRvcnkgLSB0aGV5IHRyYWNrIHdoYXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5v
ZGUgbWF5IHJlYWQgb3Igd3JpdGUgLSB0aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4g
SXQgdGVsbHMgeW91IHRoZSBoZWFwIGxvY2F0aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFj
dCBoZWFwcykgdGhhdCBhcmUgZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21w
cmlzZXMgYW4gYWJzdHJhY3QKKyAgICAvLyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlv
bktpbmQuIEJyaWVmbHksIGEgbG9jYXRpb24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlv
bgorICAgIC8vIHdob3NlIHZhbHVlIGNhbiBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUg
bm9kZSBpdHNlbGYuIFRoZSBsb2NhdGlvbnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhl
IGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRz
IHRvIENTRSBhIGxvYWQgZnJvbSB0aGUgaGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qg
c2hvdWxkIGJlCisgICAgLy8gICBzdWZmaWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcg
bm9kZS4KKyAgICAvLworICAgIC8vIC0gVGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJz
dHJhY3QgaGVhcCB0aGF0IGNvdWxkIGJlIGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNo
CisgICAgLy8gICBDU0UgYXR0ZW1wdC4gSS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0
IG9uIGV2ZXJ5IHBhdGggYmV0d2VlbiBzb21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhh
dCBkZWZpbmVzIGEgSGVhcExvY2F0aW9uIHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdy
aXRlcyB0byBhbnkgYWJzdHJhY3QgaGVhcCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2Nh
dGlvbidzIGhlYXAsIHRoZW4gd2UgaGF2ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhl
IHNlbWFudGljcyBvZgorICAgIC8vICAgd3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVk
IHN1Y2ggdGhhdCBmb3IgdGhlbSB0byBiZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAor
ICAgIC8vICAgaXMgQ1NFYWJsZS4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwg
bm9kZSkpCiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIz
ICs5NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1
MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNh
c2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAg
Y2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAg
ICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNh
c2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoK
LSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJp
dGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNh
c2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAg
ICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoK
QEAgLTEwMCwyOCArMTE5LDQ3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2Fz
ZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgog
ICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0
cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBD
b21wYXJlRXFDb25zdGFudDoKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0
cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJ
c1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAg
IGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRT
dG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91Ymxl
QXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2Ug
VmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAg
ICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0
aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2Fz
ZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAg
Y2FzZSBEb3VibGVBc0ludDMyOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRl
ZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5v
ZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENo
ZWNrRXhlY3V0YWJsZToKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRh
YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3Rv
cmFnZVBvaW50ZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBv
aW50ZXIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoK
QEAgLTE0Myw3ICsxODEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBB
bmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9p
bnQ6CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAg
IGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0xNTIsNiArMTg5LDExIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAg
ICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRh
dGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hw
b2ludDoKICAgICAgICAgcmVhZChXYXRjaHBvaW50X2ZpcmUpOwpAQCAtMTg0LDEyICsyMjYsMjQg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBW
YXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAogICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc0Z1bmN0aW9u
OgotICAgIGNhc2UgVHlwZU9mOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBUeXBlT2Y6Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVHlwZU9m
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICByZXR1cm47
CisKICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQ
dXRCeUlkOgpAQCAtMjEyLDI3ICsyNjYsMzMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAgICAgICAgcmVh
ZChHZXR0ZXJTZXR0ZXJfZ2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJM
b2MsIEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJlYWQoR2V0
dGVyU2V0dGVyX3NldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU2V0dGVyTG9jLCBH
ZXR0ZXJTZXR0ZXJfc2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpDYWxsZWUp
KSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2Fs
KCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9j
YWwoKSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5
VmFsOiB7CkBAIC0yNjIsMTEgKzMyMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25s
eSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2Rl
LCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNf
cmVnaXN0ZXJzKTsKICAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjc0LDYgKzMzNiw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0yODUsNiArMzQ4LDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZERvdWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
YWQoV29ybGQpOwpAQCAtMjk2LDYgKzM2MCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGln
dW91c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQo
V29ybGQpOwpAQCAtMzE5LDggKzM4NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlQcm9w
ZXJ0aWVzKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAg
ICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIHJl
YWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9w
ZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMzEsNiArMzk2LDkgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJy
YXlNb2RlKCk7CisgICAgICAgIE5vZGUqIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLm5vZGUoKTsKKyAgICAgICAgTm9kZSogaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogdmFsdWUgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpLm5vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQdXQoKS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAg
ICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKQEAgLTM1Miw5ICs0MjAsOSBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJz
KTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0Zp
ZWxkcyk7CiAgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgYmFzZSwgaW5kZXgpLCB2
YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CkBAIC0zNjcsNiArNDM1LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CiAgICAgICAgICAg
ICB3cml0ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBiYXNlLCBp
bmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CkBAIC0zNzksNiArNDQ4LDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwog
ICAgICAgICAgICAgd3JpdGUoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtMzkxLDYgKzQ2MSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGlndW91c1By
b3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlM
b2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CkBAIC00MDksOSArNDgwLDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAg
ICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNj
RmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBkZWYoKSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgdGhl
c2Ugb3BlcmF0aW9ucyB0cnVuY2F0ZSB0aGVpciBpbnB1dHMuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTQxOSw3ICs0OTEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2Ug
SW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBy
ZXR1cm47CiAKQEAgLTQzMSwxMiArNTAyLDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgcmVh
ZChKU0NlbGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tI
YXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAg
ICByZWFkKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAg
ICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
SW5zdGFuY2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+
Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAg
ICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ0NiwxNSArNTE5LDE4IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRl
cmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9k
ZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldEJ1dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
QXJyYXlpZnk6CkBAIC00NjgsNDIgKzU0NCw1OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkgPT0gQXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBu
b2RlLT5hcnJheU1vZGUoKS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlT
dG9yYWdlTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAg
ICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgcmVhZChKU0FycmF5
QnVmZmVyVmlld19tb2RlKTsKLSAgICAgICAgcmVhZChCdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwot
ICAgICAgICByZWFkKEFycmF5QnVmZmVyX2RhdGEpOworICAgICAgICByZWFkKE1pc2NGaWVsZHMp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLCBNaXNj
RmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlcikpOworICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJl
cjsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVudGlmaWVy
TnVtYmVyKTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihO
YW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlE
KTsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRl
bnRpZmllck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRp
ZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7CisgICAg
ICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxv
YywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAgICAgCi0gICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJl
YWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVk
UHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVy
KSk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3JpdGUoaGVh
cCk7CiAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVj
dHVyZXMoKSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
IGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKQog
ICAgICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGNh
c2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRp
ZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVt
YmVyOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZp
ZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygp
Lm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKQEAgLTUxNCw3OCArNjA3LDg3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhM
b2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1l
bnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOwotICAgICAg
ICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlC
dWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobW9kZS50eXBlZEFycmF5VHlw
ZSgpICE9IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBT
a2lwVG9wU2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3JhcGgu
YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTa2lwVG9w
U2NvcGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdpc3Rl
cigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIHJlYWQoSlNWYXJpYWJsZU9i
amVjdF9yZWdpc3RlcnMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVSZWdpc3Rl
cnNMb2MsIEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGls
ZDMoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpLCBub2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFj
dEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNh
c2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgIGNhc2UgTmV3QXJy
YXlCdWZmZXI6CisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogRW5h
YmxlIENTRSBmb3IgdGhlc2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1
c2UgdGhlcmUgaXMgbm8gd2F5CisgICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBu
b2RlIGFuZCBhIHZhbHVlIG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2Vy
ZWQKKyAgICAgICAgLy8gdGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3
YXkgb2YgZGVmKCknaW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM0NzM3CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAg
ICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBO
ZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
Ci0gICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKLSAg
ICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291
bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICBjYXNlIE5ld0Z1bmN0aW9uTm9D
aGVjazoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNz
aW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBP
YmplY3RDb3VudCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIHJlYWQoV29ybGQpOwotICAgICAgICAgICAgd3Jp
dGUoV29ybGQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkBA
IC01OTgsNiArNzAwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgQ29tcGFyZUVxOgpAQCAtNjA1LDggKzcwOCwxMCBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgog
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAg
ICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKKyAgICAgICAgaWYg
KCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAg
IHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTYxNSw2ICs3MjAsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNh
c2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNl
OgorICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmIGEgcHVyZSB2YWx1ZSwgdW5mb3J0dW5h
dGVseS4gSSdsbCBhdm9pZCBsb2FkLWVsaW1pbmF0aW5nIHRoZXNlIGZvcgorICAgICAgICAgICAg
Ly8gbm93LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Q2VsbFVzZToKQEAgLTYzOSwxMCArNzQ2LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
TXlBcmd1bWVudHNMZW5ndGhMb2MsIFZhcmlhYmxlcyksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICByZWFkKFZh
cmlhYmxlcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTXlBcmd1bWVudEJ5VmFsTG9jLCBW
YXJpYWJsZXMpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKQEAgLTY3Miw3ICs3ODEsOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7CiBwdWJs
aWM6CiAgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJh
Y3RIZWFwKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULi4uPgorICAgIHZvaWQgb3BlcmF0
b3IoKShULi4uKSB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xvYmJlcml6ZSB7CkBAIC02ODIsNyAr
NzkyLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigp
KEFic3RyYWN0SGVhcCkgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULi4uPgorICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQog
ICAgIAogICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KICAgICAK
QEAgLTY5MCw2ICs4MDEsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiti
b29sIGlzUHVyZShHcmFwaCYsIE5vZGUqKTsgLy8gUHVyZSBtZWFucyBpdCBkb2VzIG5vIHJlYWRz
IG9yIHdyaXRlcy4KK2Jvb2wgaGFzUHVyZURlZnMoR3JhcGgmLCBOb2RlKik7IC8vIEhhdmluZyBw
dXJlIGRlZnMgbWVhbnMgdGhhdCBwdXJlIENTRSBpcyBwb3NzaWJsZS4KKwogYm9vbCBkb2VzV3Jp
dGVzKEdyYXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVybGFwcyB7CkBAIC03
MTYsNiArODMwLDcyIEBAIHByaXZhdGU6CiAKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5v
ZGUqLCBBYnN0cmFjdEhlYXApOwogCisvLyBXZSB3b3VsZCBoYXZlIHVzZWQgYmluZCgpIGZvciB0
aGVzZSwgYnV0IGJlY2F1c2Ugb2YgdGhlIG92ZXJsYW9kaW5nIHRoYXQgd2UgYXJlIGRvaW5nLAor
Ly8gaXQncyBxdWl0ZSBhIGJpdCBvZiBjbGVhcmVyIHRvIGp1c3Qgd3JpdGUgdGhpcyBvdXQgdGhl
IHRyYWRpdGlvbmFsIHdheS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFJlYWRNZXRo
b2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1
ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5y
ZWFkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBXcml0ZU1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgor
ICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVh
cCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS53cml0ZShoZWFwKTsKKyAgICB9Citwcml2
YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
RGVmTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6CisgICAgRGVmTWV0aG9kQ2xvYmJlcml6ZShU
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvcGVyYXRvcigpKFB1cmVWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFs
dWUuZGVmKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZGVmKGxv
Y2F0aW9uLCBub2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBBZGFwdG9yJiBhZGFwdG9yKQoreworICAgIFJlYWRNZXRob2RDbG9iYmVy
aXplPEFkYXB0b3I+IHJlYWQoYWRhcHRvcik7CisgICAgV3JpdGVNZXRob2RDbG9iYmVyaXplPEFk
YXB0b3I+IHdyaXRlKGFkYXB0b3IpOworICAgIERlZk1ldGhvZENsb2JiZXJpemU8QWRhcHRvcj4g
ZGVmKGFkYXB0b3IpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRlLCBk
ZWYpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgZWRnZSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tVW5j
aGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEhlYXBMb2NhdGlvbjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6IiwgbV9oZWFw
KTsKKyAgICAKKyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91
dC5wcmludCgiWyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91dC5wcmlu
dCgiLCAiLCBtX2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jYXRpb25LaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9jYXRpb25L
aW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgorICAgICAg
ICBvdXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc09iamVj
dExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5jdGlvbkxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlwZU9m
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXR0ZXJMb2M6Cisg
ICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoKKyAgICAgICAg
b3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgQXJyYXlMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlMZW5ndGhMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZseUxvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2VMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2hl
Y2tIYXNJbnN0YW5jZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
Q2xvc3VyZVJlZ2lzdGVyc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlUmVnaXN0ZXJz
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlVmFyaWFi
bGVMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxlTG9jIik7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJpYWJsZUxvYzoKKyAgICAgICAg
b3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5k
ZXhlZFByb3BlcnR5U3RvcmFnZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbnN0
YW5jZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluc3RhbmNlT2ZMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRCeVZhbExvYzoKKyAgICAgICAg
b3V0LnByaW50KCJNeUFyZ3VtZW50QnlWYWxMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIE15QXJndW1lbnRzTGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJpbnQoIk15
QXJndW1lbnRzTGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNraXBUb3BTY29wZUxvYzoK
KyAgICAgICAgb3V0LnByaW50KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0hlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR0hlYXBMb2NhdGlv
bl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5o
IgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitlbnVtIExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZExvY2F0aW9uS2luZCwKKyAgICAK
KyAgICBBcnJheUxlbmd0aExvYywKKyAgICBCdXR0ZXJmbHlMb2MsCisgICAgQ2hlY2tIYXNJbnN0
YW5jZUxvYywKKyAgICBDbG9zdXJlUmVnaXN0ZXJzTG9jLAorICAgIENsb3N1cmVWYXJpYWJsZUxv
YywKKyAgICBHZXR0ZXJMb2MsCisgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSW5kZXhlZFBy
b3BlcnR5TG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsCisgICAgSW5zdGFuY2VP
ZkxvYywKKyAgICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc0Z1bmN0aW9uTG9jLAorICAg
IElzT2JqZWN0TG9jLAorICAgIE15QXJndW1lbnRCeVZhbExvYywKKyAgICBNeUFyZ3VtZW50c0xl
bmd0aExvYywKKyAgICBOYW1lZFByb3BlcnR5TG9jLAorICAgIFNldHRlckxvYywKKyAgICBTa2lw
VG9wU2NvcGVMb2MsCisgICAgVHlwZU9mTG9jLAorICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9j
LAorICAgIFZhcmlhYmxlTG9jCit9OworCitjbGFzcyBIZWFwTG9jYXRpb24geworcHVibGljOgor
ICAgIEhlYXBMb2NhdGlvbigKKyAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkTG9j
YXRpb25LaW5kLAorICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0SGVhcCgpLAor
ICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxscHRyKQorICAg
ICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faGVhcChoZWFwKQorICAgICAgICAsIG1f
YmFzZShiYXNlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlQoKGtpbmQgPT0gSW52YWxpZExvY2F0aW9uS2luZCkgPT0gIWhlYXApOworICAgICAgICBBU1NF
UlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CisgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwgIW1faW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQsIEFi
c3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCisgICAgICAg
IDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkTG9jYXRpb25LaW5kKQorICAgICAg
ICAsIG1faGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2Jhc2Uo
bnVsbHB0cikKKyAgICAgICAgLCBtX2luZGV4KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYXA7IH0KKyAgICAKKyAg
ICBMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIEFic3Ry
YWN0SGVhcCBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgTm9kZSogYmFzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIE5vZGUqIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZCArIG1faGVhcC5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8Tm9kZSo+
OjpoYXNoKG1faW5kZXgpICsgbV9raW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2hlYXAgPT0gb3RoZXIu
bV9oZWFwCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAg
ICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGVh
cC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIExvY2F0aW9uS2lu
ZCBtX2tpbmQ7CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKKyAgICBOb2RlKiBtX2Jhc2U7Cisg
ICAgTm9kZSogbV9pbmRleDsKK307CisKK3N0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5
Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEhlYXBMb2NhdGlvbiYgYSwg
Y29uc3QgSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6TG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6Okhl
YXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBI
YXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExv
Y2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiB7
IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3R5cGVkZWYgSGFzaE1hcDxIZWFwTG9jYXRpb24sIE5vZGUqPiBJbXB1cmVNYXA7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsMTAgKzM3MywxMSBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAg
ICB9Ci0KLSAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKQorICAgIAorICAgIHZv
aWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIpCiAgICAgewotICAgICAgICBzZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgY29udmVydFRvUGhhbnRvbSgpOworICAgICAgICBy
ZXBsYWNlbWVudCA9IG90aGVyOwogICAgIH0KIAogICAgIHZvaWQgY29udmVydFRvSWRlbnRpdHko
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
UHVyZVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQdXJlVmFsdWU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoR3JhcGg6Om9w
TmFtZShvcCgpKSk7CisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kp
IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuKCkuY2hpbGQoaSkpCisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGNoaWxkcmVuKCkuY2hpbGQoaSkpOworICAgIH0KKyAgICBpZiAobV9pbmZvKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1faW5mbyk7CisgICAgb3V0LnByaW50KCIpIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHVyZVZhbHVlX2gKKyNkZWZpbmUgREZHUHVy
ZVZhbHVlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFB1cmVWYWx1ZSB7Citw
dWJsaWM6CisgICAgUHVyZVZhbHVlKCkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkKKyAg
ICAgICAgLCBtX2luZm8oMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2Rl
VHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIHVpbnRwdHJfdCBpbmZvKQor
ICAgICAgICA6IG1fb3Aob3ApCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICAg
ICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGRlZmF1bHRGbGFncyhv
cCkgJiBOb2RlSGFzVmFyQXJncykpOworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5
cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCBjb25zdCB2b2lkKiBwdHIpCisg
ICAgICAgIDogUHVyZVZhbHVlKG9wLCBjaGlsZHJlbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
cHRyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogUHVyZVZhbHVlKG9wLCBjaGls
ZHJlbiwgc3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFB1cmVWYWx1ZShOb2RlKiBub2RlLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBQdXJlVmFs
dWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4sIGluZm8pCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1
cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbiwgcHRyKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUpCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUt
Pm9wKCksIG5vZGUtPmNoaWxkcmVuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVl
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29wKExhc3ROb2Rl
VHlwZSkKKyAgICAgICAgLCBtX2luZm8oMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vcCA9PSBMYXN0Tm9kZVR5cGUgJiYgIW1faW5m
bzsgfQorICAgIAorICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAg
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfQorICAgIHVpbnRwdHJfdCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OkludEhh
c2g8aW50Pjo6aGFzaChzdGF0aWNfY2FzdDxpbnQ+KG1fb3ApKSArIG1fY2hpbGRyZW4uaGFzaCgp
ICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVyZVZh
bHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IG90aGVyLm1f
b3AKKyAgICAgICAgICAgICYmIG1fY2hpbGRyZW4gPT0gb3RoZXIubV9jaGlsZHJlbgorICAgICAg
ICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
cCA9PSBMYXN0Tm9kZVR5cGUgJiYgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1f
b3A7CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworICAgIHVpbnRwdHJfdCBtX2luZm87
Cit9OworCitjbGFzcyBQdXJlVmFsdWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBQdXJlVmFsdWUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFB1cmVWYWx1ZSYgYSwgY29uc3QgUHVyZVZhbHVlJiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7CisgICAg
dHlwZWRlZiBKU0M6OkRGRzo6UHVyZVZhbHVlIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpERkc6OlB1cmVWYWx1ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVW
YWx1ZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gUHVyZU1hcDsK
K3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIFZlY3RvcjxOb2RlKj4+IFB1cmVNdWx0aU1hcDsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdQdXJlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA4
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNsZWFyKCk7CiAgICAgICAgICAgICBibG9jay0+dmFs
dWVzQXRIZWFkLmNsZWFyKCk7CiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFy
KCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6OlNT
QURhdGEoYmxvY2spKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5jbGVhcigpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFz
aE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkocmV2aXNpb24g
MTcwODkwKQorKysgU291cmNlL1dURi93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNiArMTIwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCByZW1vdmUoY29uc3QgS2V5VHlwZSYp
OwogICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgcmVtb3ZlSWYoRnVuY3RvciYgZnVuY3Rvcik7CiAgICAgdm9pZCBjbGVh
cigpOwogCiAgICAgTWFwcGVkVHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmKTsgLy8gZWZmaWNpZW50
IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQpAQCAtMzU0LDYgKzM1NiwxMyBAQCBpbmxp
bmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6cmVtb3ZlSWYoRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBtX2ltcGwucmVtb3ZlSWYo
ZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZChrZXkpKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAg
IHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvcik7CiAgICAg
ICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRv
cik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgICAgIHZvaWQgcmVt
b3ZlSWYoRnVuY3RvciYpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hh
c2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7
IH0KQEAgLTEwMzEsNiArMTAzMywyNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgaW5saW5lIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpyZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV90YWJsZVNpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZnVuY3Rv
cihtX3RhYmxlW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVsZXRlQnVja2V0KG1fdGFibGVbaV0pOworICAgICAgICAgICAgKyttX2Rl
bGV0ZWRDb3VudDsKKyAgICAgICAgICAgIC0tbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICAgICAgc2hyaW5rKCk7Cisg
ICAgICAgIAorICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUp
IC0+IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1l
bWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234621</attachid>
            <date>2014-07-08 23:04:11 -0700</date>
            <delta_ts>2014-07-09 14:22:53 -0700</delta_ts>
            <desc>it is written!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>113665</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA4OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA3LDYgKzI2MTEsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExMCw2ICs1MTE4LDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE4NCw2ICs1MTk0LDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTEsNiArNjEyMyw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ3LDYgKzY2NjAs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3MzMsMTEgKzc3NDcsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE2ICszOSw0MSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIENTRVBoYXNlIDog
cHVibGljIFBoYXNlIHsKK25hbWVzcGFjZSB7CisKK2NsYXNzIENsb2JiZXJGaWx0ZXIgewogcHVi
bGljOgotICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwg
ImNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKKyAgICBDbG9iYmVyRmlsdGVyKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFsdWVQYWlyVHlw
ZSYgcGFpcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hlYXAub3ZlcmxhcHMocGFpci5rZXku
aGVhcCgpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
Cit9OworCitpbmxpbmUgdm9pZCBjbG9iYmVyKEltcHVyZU1hcCYgbWFwLCBBYnN0cmFjdEhlYXAg
aGVhcCkKK3sKKyAgICBDbG9iYmVyRmlsdGVyIGZpbHRlcihoZWFwKTsKKyAgICBtYXAucmVtb3Zl
SWYoZmlsdGVyKTsKK30KKworY2xhc3MgTENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1Ymxp
YzoKKyAgICBMQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
bG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQogICAgIHsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlICE9IEJlZm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
aXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9y
ZSk7CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCkBAIC01
OSwxMTE4ICs4NCwyNDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWxsIFBo
aXMgbmVlZCB0byBhbHJlYWR5IGJlIG1hcmtlZCBhcyByZWxldmFudCB0byBPU1IuCi0gICAgICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJsb2NrLT5waGlzW2ldLT5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IC8vIEZJWE1FOiBUaGUgR2V0TG9jYWwgY2FzZSBpcyBvbmx5IG5l
Y2Vzc2FyeSB1bnRpbCB3ZSBkbyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA2NzA3LgotICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVSZWxl
dmFudFRvT1NSKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlUmVsZXZh
bnRUb09TUik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbV9wdXJlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX2ltcHVyZVZhbHVl
cy5jbGVhcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
bG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNvbnRhaW5zTW92SGludCgpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKLSAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1f
bm9kZSk7CisgICAgICAgICAgICAgICAgY2xvYmJlcml6ZShtX2dyYXBoLCBub2RlLCAqdGhpcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhG
aXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVw
dGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJz
dC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJz
dFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KQotICAgICAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAg
ICB9CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgcmVhZChBYnN0cmFjdEhlYXApIHsgfQogICAg
IAotICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgpCisgICAgdm9pZCB3cml0ZShBYnN0
cmFjdEhlYXAgaGVhcCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNl
ZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gVUlOVF9NQVgp
Ci0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1
bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9jayk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsK
LSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAg
ICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAg
ICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0gY2hpbGQyIHx8
IG90aGVyTm9kZSA9PSBjaGlsZDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IG90aGVyTm9kZS0+b3AoKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRWRnZSBvdGhlckNoaWxkID0gb3Ro
ZXJOb2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGls
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgIT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDIoKS5zYW5pdGl6
ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNo
aWxkID0gb3RoZXJOb2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICgh
b3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAg
ICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOworICAgICAgICBjbG9iYmVyKG1faW1wdXJlVmFsdWVzLCBoZWFwKTsK
ICAgICB9CiAgICAgCi0gICAgTm9kZSogY29uc3RhbnRDU0UoTm9kZSogbm9kZSkKKyAgICB2b2lk
IGRlZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
bmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSAhPSBub2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUtPmNvbnN0YW50
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIAotICAgIE5vZGUqIGNvbnN0YW50U3RvcmFnZVBvaW50ZXJDU0UoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IENvbnN0YW50U3RvcmFnZVBvaW50
ZXIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChvdGhlck5vZGUtPnN0b3JhZ2VQb2ludGVyKCkgIT0gbm9kZS0+c3RvcmFnZVBvaW50ZXIo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
cmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgCi0gICAgTm9kZSogZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIAotICAgIE5vZGUqIGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZSogYXJyYXkpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBn
bG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBv
aW50ZXIpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09
IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVy
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIHNjb3BlZFZhckxvYWRFbGltaW5hdGlv
bihOb2RlKiByZWdpc3RlcnMsIGludCB2YXJOdW1iZXIpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpID09IHJlZ2lzdGVycyAmJiBub2RlLT52YXJOdW1iZXIoKSA9PSB2
YXJOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZh
cjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSAhPSB2YXJOdW1iZXIp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSA9PSByZWdpc3RlcnMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5j
aGlsZDMoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkK
LSAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odmFyTnVtYmVyKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCB2YXJJbmplY3Rpb25XYXRjaHBvaW50RWxpbWluYXRpb24oKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBWYXJJbmplY3Rpb25XYXRjaHBvaW50KQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgbV9ub2RlKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsK
KyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIEFycmF5TW9kZSBh
cnJheU1vZGUpCisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxIHx8IG5vZGUgPT0gY2hpbGQyKSAKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZh
bElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLT5jaGlsZDIoKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAvLyBUeXBlZCBhcnJheXMgCi0gICAgICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpID09IGNoaWxkMgotICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gYXJyYXlNb2RlLnR5cGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgp
OwotICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1dEJ5VmFsIHdp
bGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGluZyBmcm9tLgotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQgdGhlIFB1dEJ5
VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCi0gICAgICAgICAgICAgICAgLy8gZGlmZmVy
ZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Uga25vdyB0aGF0IHRoZXkgd29uJ3Qg
Y2xvYmJlciBlYWNoIG90aGVyLgotICAgICAgICAgICAgICAgIC8vIC4uLiBleGNlcHQgb2YgY291
cnNlIGZvciB0eXBlZCBhcnJheXMsIHdoZXJlIGFsbCB0eXBlZCBhcnJheXMgY2xvYmJlciBhbGwg
b3RoZXIKLSAgICAgICAgICAgICAgICAvLyB0eXBlZCBhcnJheXMhICBBbiBJbnQzMkFycmF5IGNh
biBhbGlhcyBhIEZsb2F0NjRBcnJheSBmb3IgZXhhbXBsZSwgYW5kIHNvIG9uLgotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNr
RnVuY3Rpb25FbGltaW5hdGlvbihGcm96ZW5WYWx1ZSogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkK
LSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5j
aGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1ZXMuYWRkKGxvY2F0aW9uLCB2YWx1
ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIGJvb2wg
Y2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE5v
ZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9y
UHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0V4ZWN1dGFi
bGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmV4ZWN1dGFibGUoKSA9PSBl
eGVjdXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWlu
YXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGUqIGNoaWxkMSkKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAg
ICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1
cmVTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAg
ICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigp
LT5uZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAg
ICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3Ry
dWN0dXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdp
dGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGlt
cG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0
aW9uIGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQg
dGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBt
X2NoYW5nZWQ7CiAgICAgCi0gICAgYm9vbCBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVs
aW1pbmF0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlKiBjaGlsZDEpCi0gICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChu
b2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAg
ICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
ICE9IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIC8vIFNldHRp
bmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1
dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3Bl
Y3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRv
IGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlp
Znk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBv
dXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0
IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBtX2RpZFdyaXRlczsKKyAgICBO
b2RlKiBtX25vZGU7CiAgICAgCi0gICAgTm9kZSogZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24o
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0g
YmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBQdXJlTWFwIG1fcHVyZVZhbHVlczsK
KyAgICBJbXB1cmVNYXAgbV9pbXB1cmVWYWx1ZXM7Cit9OwogCi0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJl
cikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UpIC8vIE11
c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRl
bnRpZmllck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gYmFzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5u
b2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5i
eVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBz
cGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAg
ICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQg
dG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBn
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBOb2RlKiBiYXNlKQorY2xhc3MgR0NTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBHQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
ICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKTsKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5v
ZGUgPT0gYmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSBiYXNlCi0gICAgICAgICAg
ICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNz
aW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRl
eCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKE5vZGUqIGNoaWxkMSkKKyAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNo
aWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgY2FuIGNoZWFwbHkgcHJvdmUgdGhp
cyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0J3Mgc3RvcmFnZSwgd2UKLSAgICAgICAgICAgICAg
ICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBpdHMgcmVzdWx0LgotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgY3VycmVudGx5IGNhbid0IHBy
b3ZlIHRoYXQgdGhpcyBkb2Vzbid0IGNoYW5nZSBvdXIgb2JqZWN0J3MKLSAgICAgICAgICAgICAg
ICAvLyBzdG9yYWdlLCBzbyB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCBpdCBtYXkgY2hh
bmdlIHRoZSBzdG9yYWdlCi0gICAgICAgICAgICAgICAgLy8gcG9pbnRlciBvZiBhbnkgb2JqZWN0
LCBpbmNsdWRpbmcgb3Vycy4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJy
YXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0
J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNh
dGlvbiBjb3VsZCBhZmZlY3Qgb3VyIGJ1dHRlcmZseS4KLSAgICAgICAgICAgICAgICAvLyBCdXQg
dGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJl
YWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwor
ICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBt
X2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7CisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0
b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gcHJlT3JkZXI7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVP
cmRlcihwcmVPcmRlcik7CisgICAgICAgIAorICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXpl
KG1fZ3JhcGgubnVtQmxvY2tzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmlndXJl
IG91dCB3aGF0IGdldHMgY2xvYmJlcmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0
aGUgcHJlT3JkZXIgbGlzdAorICAgICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcHJlT3JkZXIuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9p
bXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gbV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAg
ICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1fYmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJlRGF0
YS53cml0ZXMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJh
eU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEg
JiYgbm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZp
Y2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJyYXkuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRo
YXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgICAgIC8vIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UgZG9pbmcgdGhpcyBiZWZvcmUsIHdoYXQg
Zm9sbG93cyBtaWdodCBoYXZlIHRvIGJlIG1hZGUgaXRlcmF0aXZlLgorICAgICAgICAvLyBCdXQg
aXQgZmVlbHMgbGlrZSwgcmlnaHQgbm93LCB0aGlzIHdvcmtzIGFzIGEgc2luZ2xlIHBhc3MgYmVj
YXVzZSB3ZSBvbmx5IGFkZCB0aGluZ3MKKyAgICAgICAgLy8gZnJvbSBhIGJsb2NrIGFmdGVyIHdl
IGhhdmUgZG9uZSBzdWJzdGl0dXRpb25zIG9uIHRoYXQgYmxvY2suCisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlT3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9
ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAgICAgbV93cml0ZXNT
b0Zhci5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBtX25vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAgICAg
ICAgICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+ZGlkVmlzaXQgPSB0cnVl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBtX2NoYW5nZWQ7CiAgICAgfQogCi0gICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAg
ICAgCi0gICAgTm9kZSogZ2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbihOb2RlVHlwZSBv
cCwgTm9kZSogY2hpbGQxKQorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IG9wICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2xvYmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJs
ZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1fd3JpdGVzU29GYXIuYWRkKGhlYXApOwogICAgIH0K
ICAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKCkKKyAgICB2b2lkIGRl
ZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGNh
dXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29wZS4KLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1
ZSwgVmVjdG9yPE5vZGUqPigpKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtX25vZGUpOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAK
LSAgICBOb2RlKiBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWws
IE5vZGUqJiByZWxldmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKLSAgICB7
Ci0gICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fs
T3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgp
ID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgY2FzZSBQdXRDbG9z
dXJlVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjYXJlQWJvdXRDbG9iYmVyaW5nICYmIG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaW52YWxpZGF0aW9uUG9pbnRFbGlt
aW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEludmFsaWRhdGlvblBvaW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKHdyaXRlc092ZXJsYXAo
bV9ncmFwaCwgbm9kZSwgV2F0Y2hwb2ludF9maXJlKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIE5vZGUq
IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAg
ICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9j
YWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9jYWwp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKLSAgICAg
ICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgotICAgICAgICAgICAg
Y2FzZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpID09IGxv
Y2FsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgotICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKLSAg
ICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykgPT0gbG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bFNhZmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYWNjZXNzaW5nIGFyZ3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxv
Y2Fscy4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpBcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6Ci0gICAgICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgotICAg
ICAgICAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIC8vIElmIGFu
IGFjdGl2YXRpb24gaXMgYmVpbmcgdG9ybiBvZmYgdGhlbiBpdCBtZWFucyB0aGF0IGNhcHR1cmVk
IHZhcmlhYmxlcwotICAgICAgICAgICAgICAgIC8vIGFyZSBsaXZlLiBXZSBjb3VsZCBiZSBjbGV2
ZXIgaGVyZSBhbmQgY2hlY2sgaWYgdGhlIGxvY2FsIHF1YWxpZmllcyBhcyBhbgotICAgICAgICAg
ICAgICAgIC8vIGFyZ3VtZW50IHJlZ2lzdGVyLiBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxk
IGJ1eSB1cyB2ZXJ5IGxpdHRsZSBzaW5jZQotICAgICAgICAgICAgICAgIC8vIGFueSBraW5kIG9m
IHRlYXIgb2ZmcyBhcmUgcmFyZSB0byBiZWdpbiB3aXRoLgotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVbaV07CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Rv
bWluYXRvcnMuZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIsIG1fYmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4o
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20p
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsK
LSAgICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBLZWVwIHRoZSB0eXBlIGNoZWNrLgotICAgICAgICAgICAgaWYgKGVkZ2Ut
PmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0p
OwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50KQotICAgIHsKLSAgICAg
ICAgaWYgKCFyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIG1fY3VycmVudE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgZWxp
bWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5j
ZXMgdG8gdGhpcyBub2RlLgotICAgICAgICBtX2N1cnJlbnROb2RlLT5yZXBsYWNlbWVudCA9IHJl
cGxhY2VtZW50OwotICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChtX25vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZSgpCisgICAgdm9p
ZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2N1cnJlbnROb2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG1fY3VycmVu
dE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBo
YW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYg
dGhlIGxvY2FsIG1hcCBoYXMgaXQ7IHRoZW4gY2hlY2sgaWYgd2UgY2FuIGZpbmQgaXQgZ2xvYmFs
bHk7IGFuZCBmaW5hbGx5CisgICAgICAgIC8vIGlmIGFsbCB0aGF0IGZhaWxzIHRoZW4gYWRkIGl0
LgogICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBlbGltaW5hdGUoTm9kZSogbm9kZSwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFudG9t
KQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQorICAgICAgICBOb2RlKiBtYXRjaCA9IG1faW1w
dXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmdldChsb2NhdGlvbik7CisgICAgICAgIGlmIChtYXRj
aCkgeworICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQo
bm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhwaGFudG9tVHlwZSk7Ci0gICAgICAgIGlmIChwaGFudG9tVHlwZSA9PSBQaGFudG9tKQotICAg
ICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcGVy
Zm9ybU5vZGVDU0UoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1
YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgIGlmIChtX3dyaXRlc1NvRmFyLm92ZXJsYXBzKGxvY2F0aW9u
LmhlYXAoKSkpIHsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmFk
ZChsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIC8vIEhhbmRsZSB0aGUgcHVyZSBub2Rlcy4gVGhlc2Ugbm9kZXMgbmV2ZXIgaGF2
ZSBhbnkgc2lkZS1lZmZlY3RzLgotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBC
aXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAg
ICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBj
YXNlIEFyaXRoQWJzOgotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRo
TWF4OgotICAgICAgICBjYXNlIEFyaXRoU3FydDoKLSAgICAgICAgY2FzZSBBcml0aEZSb3VuZDoK
LSAgICAgICAgY2FzZSBBcml0aFNpbjoKLSAgICAgICAgY2FzZSBBcml0aENvczoKLSAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAg
ICAgY2FzZSBJc1VuZGVmaW5lZDoKLSAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgIGNh
c2UgSXNOdW1iZXI6Ci0gICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgIGNhc2UgSXNPYmpl
Y3Q6Ci0gICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90Ogot
ICAgICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAg
ICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKLSAgICAgICAgY2FzZSBHZXRTY29wZToKLSAg
ICAgICAgY2FzZSBUeXBlT2Y6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6Ci0gICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICBjYXNlIE1ha2VSb3BlOgotICAgICAgICBj
YXNlIERvdWJsZVJlcDoKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDoKLSAgICAgICAgY2FzZSBJbnQ1
MlJlcDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAg
ICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgY2Fz
ZSBBcml0aE11bDoKLSAgICAgICAgY2FzZSBBcml0aERpdjoKLSAgICAgICAgY2FzZSBBcml0aE1v
ZDoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgY2FzZSBEb3VibGVBc0lu
dDMyOiB7Ci0gICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBwdXJlQ1NFKG5vZGUpOwotICAg
ICAgICAgICAgaWYgKCFjYW5kaWRhdGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBpZiAoIXN1YnN1bWVzKGNhbmRpZGF0ZS0+YXJpdGhNb2RlKCksIG5vZGUtPmFyaXRoTW9k
ZSgpKSkgewotICAgICAgICAgICAgICAgIGlmICghc3Vic3VtZXMobm9kZS0+YXJpdGhNb2RlKCks
IGNhbmRpZGF0ZS0+YXJpdGhNb2RlKCkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYW5kaWRhdGUtPnNldEFyaXRoTW9kZShub2RlLT5hcml0aE1vZGUoKSk7
CisgICAgICAgIC8vIFRoaXMgcGVyZm9tcyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5kIHNvbWUg
cG9zc2libGUgZGVmKCkgdGhhdCBtYXRjaGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9u
LiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgcG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMgdGhhdCB0
aGlzIG9uZSBtdXN0IGJlIHRoZQorICAgICAgICAvLyBtYXRjaCBhbmQgY29tcGxldGVzIHRoZSBz
ZWFyY2ggYnkgaGFsdGluZyBhdCB0aGlzIGJsb2NrLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgd3Jp
dGUoKQorICAgICAgICAvLyB0aGF0IG92ZXJsYXBzIHRoZSBsb2NhdGlvbidzIGhlYXAsIGl0IHN0
b3BzLCBhc3N1bWluZyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1hdGNoLgorICAgICAgICAK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA4PiB3b3JrbGlzdDsKKyAgICAgICAgQml0VmVj
dG9yIHNlZW47CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCB0
cnkgdG8gdmlzaXQgb3Vyc2VsdmVzLiBXZSBkb21pbmF0ZSBvdXJzZWx2ZXMgYnV0IHRoZXJlJ3Mg
bm8KKyAgICAgICAgLy8gd2F5IHRoYXQgd2UncmUgZ29pbmcgdG8gbWF0Y2hhZ2FpbnN0IGEgZGVm
KCkgdGhhdCBjb21lcyAqYWZ0ZXIqIHRoZSBvbmUgd2UncmUKKyAgICAgICAgLy8gaW5zcGVjdGlu
Zy4KKyAgICAgICAgc2Vlbi5zZXQobV9ibG9jay0+aW5kZXgpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBtX2Jsb2NrLT5wcmVkZWNlc3Nv
cnNbaV07CisgICAgICAgICAgICBpZiAoIXNlZW4uZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkpIHsK
KyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAg
ICAgICAgIHNlZW4uc2V0KHByZWRlY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChjYW5kaWRhdGUpOwotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Cisg
ICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZURhdGFNYXBbYmxvY2st
PmluZGV4XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0
b3JzLmRvbWluYXRlcyhibG9jaywgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtYXRjaCk7CisgICAgICAgICAgICAgICAgbWF0Y2gg
PSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlm
IChtYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBleGFtaW5lIHRoZSBwcmVk
ZWNlc3NvcnMgb2YgYSBtYXRjaC4gQXQgdGhpcyBwb2ludCB3ZSBqdXN0IHdhbnQgdG8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gZXN0YWJsaXNoIHRoYXQgb3RoZXIgYmxvY2tzIG9uIHRoZSBwYXRo
IGZyb20gaGVyZSB0byB0aGVyZSBkb24ndCBjbG9iYmVyCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBsb2NhdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRD
YWxsZWVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYg
KCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGUq
IHBvc3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpOwotICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9
IEdldExvY2FsVW5saW5rZWQKLSAgICAgICAgICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCisg
ICAgICAgICAgICBpZiAoIWRhdGEud3JpdGVzLmNvbnRhaW5zKGxvY2F0aW9uLmhlYXAoKSkpIHsK
KyAgICAgICAgICAgICAgICBtYXRjaCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRM
b2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQKLSAgICAgICAgICAg
IC8vIGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9w
KCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKLSAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3At
PmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKLQotICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICBO
b2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS0+dW5saW5rZWRMb2NhbCgpLCByZWxldmFudExv
Y2FsT3BJZ25vcmVkLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgLy8gVGhp
cyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9k
ZXMgdG8gY29uc3RhbnRzLAotICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBs
aWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRShub2RlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGltaW5h
dGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15U2Nv
cGVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJlOiB0aGVz
ZSBhcmUgcHVyZSwgYW5kIGNhbgotICAgICAgICAvLyBiZSBDU0UnZCwgc28gbG9uZyBhcyB0aGUg
cHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVF
cTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkp
IHsKLSAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1cmVDU0Uobm9kZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1l
cmljYWwocmVwbGFjZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChy
ZXBsYWNlbWVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMu
IFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAotICAgICAgICAvLyBv
cHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0
LgotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOiB7Ci0gICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChzY29wZWRWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT52YXJOdW1iZXIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAg
ICBpZiAodmFySW5qZWN0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIG5vZGUtPmFy
cmF5TW9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAg
ICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hpbGQx
Lm5vZGUoKSwgY2hpbGQyLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGlmICghcmVwbGFjZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKFB1dEJ5VmFsQWxpYXMpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgaWYgKCFzZWVuLmdldChwcmVkZWNlc3Nvci0+aW5kZXgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICAgICAgICAgIHNlZW4uc2V0KHByZWRlY2Vzc29yLT5pbmRleCk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNo
ZWNrU3RydWN0dXJlRWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlU2V0KCksIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAg
ICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFi
bGU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhl
Y3V0YWJsZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAg
ZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0
OgotICAgICAgICBjYXNlIEdldEdldHRlcjoKLSAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24o
bm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0
aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEdldHRlclNldHRlckJ5T2Zm
c2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRM
b2FkRWxpbWluYXRpb24obm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVt
YmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgICAgICBpZiAo
aW52YWxpZGF0aW9uUG9pbnRFbGltaW5hdGlvbigpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQaGFu
dG9tOgotICAgICAgICAgICAgLy8gRklYTUU6IHdlIG91Z2h0IHRvIHJlbW92ZSBQaGFudG9tJ3Mg
dGhhdCBoYXZlIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgLy8gTkIuIEl0IHdvdWxkIGJlIGlu
Y29ycmVjdCB0byBkbyB0aGlzIGZvciBIYXJkUGhhbnRvbS4gSW4gZmFjdCwgdGhlIHdob2xlIHBv
aW50Ci0gICAgICAgICAgICAvLyBvZiBIYXJkUGhhbnRvbSBpcyB0aGF0IHdlICpkb24ndCogZG8g
dGhpcyBmb3IgSGFyZFBoYW50b21zLCBzaW5jZSB0aGV5IHNpZ25pZnkKLSAgICAgICAgICAgIC8v
IGEgbW9yZSBzdHJpY3Qga2luZCBvZiBsaXZlbmVzcyB0aGFuIHRoZSBQaGFudG9tIGJ5dGVjb2Rl
IGxpdmVuZXNzLgotICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJl
bihub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
Rmx1c2g6Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgYXJndW1lbnRzIHNpbXBs
aWZpY2F0aW9uIHRvIHdvcmsuIFdlIG5lZWQgdG8gZWxpbWluYXRlIHRoZQotICAgICAgICAgICAg
Ly8gcmVkdW5kYW5jeSBiZXR3ZWVuIG9wX2VudGVyJ3MgdW5kZWZpbmVkLWFsbC10aGUtdGhpbmdz
IGFuZCB0aGUgc3Vic2VxdWVudAotICAgICAgICAgICAgLy8gb3BfaW5pdF9sYXp5X3JlZy4KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChOb2RlKiBzZXRMb2NhbCA9IHNldExvY2FsU3Rv
cmVFbGltaW5hdGlvbihub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBkYXRhTm9kZSA9IHNldExv
Y2FsLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5o
YXNSZXN1bHQoKSk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBkYXRhTm9kZS0+
ZGVmYXVsdEVkZ2UoKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBk
byBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBpZiAobWF0
Y2gpIHsKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOworICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOwor
ICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIHZhbHVl
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayogYmxv
Y2spCi0gICAgewotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKLSAgICAgICAgICAgIG1fbGFzdFNlZW5b
aV0gPSBVSU5UX01BWDsKLSAgICAgICAgCi0gICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAw
OyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwotICAg
ICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9jdXJyZW50Tm9kZSk7CisgICAgc3RydWN0IEltcHVy
ZUJsb2NrRGF0YSB7CisgICAgICAgIEltcHVyZUJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IGRp
ZFZpc2l0KGZhbHNlKQorICAgICAgICB7CiAgICAgICAgIH0KLSAgICB9CisgICAgICAgIAorICAg
ICAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFp
bDsKKyAgICAgICAgYm9vbCBkaWRWaXNpdDsKKyAgICB9OworICAgIAorICAgIFB1cmVNdWx0aU1h
cCBtX3B1cmVWYWx1ZXM7CisgICAgVmVjdG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVEYXRh
TWFwOwogICAgIAotICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwotICAgIE5vZGUqIG1f
Y3VycmVudE5vZGU7Ci0gICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7Ci0gICAgc3RkOjphcnJh
eTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwotICAgIGJvb2wgbV9jaGFuZ2Vk
OyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBv
biBvdGhlciBvcHRpbWl6YXRpb25zLgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgTm9k
ZSogbV9ub2RlOworICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRhOworICAgIENsb2Ji
ZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsKIH07CiAKLWJv
b2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
Ym9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBMQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExDU0VQ
aGFzZT4oZ3JhcGgpOworfQorCitib29sIHBlcmZvcm1HQ1NFKEdyYXBoJiBncmFwaCkKIHsKLSAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENTRSBQaGFzZSIpOwotICAgIHJl
dHVybiBydW5QaGFzZTxDU0VQaGFzZT4oZ3JhcGgpOworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgR0NTRSBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxHQ1NFUGhh
c2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTcwODkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3
ICszOCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJhdGhlciBwcm9maXRhYmxlLiBJdCBo
YXMgZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5kIHdpbGwgbWF0Y2gKIC8vIGEgd2lk
ZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9k
dWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBj
aGVhcCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUxDU0Uo
R3JhcGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NBLgorYm9v
bCBwZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNp
b24gMTcwODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFjdEhlYXA+
IENsb2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJl
YWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogfQogCiB2
b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRl
U2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUg
bm9PcDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVy
aXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFw
aCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRzQW5kV3Jp
dGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJl
clNldCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwog
ICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09wKTsKIH0K
IAogYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0
JiByZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOwot
ICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2Ji
ZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVybiBhZGRS
ZWFkLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRS
ZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFk
ZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBh
ZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5v
T3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA4OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwxOSArMzIsMzUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Citib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9i
YmVyaXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICByZXR1cm4g
IWFkZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAgTm9PcENs
b2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBub09wLCBh
ZGRQdXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBkb2VzV3Jp
dGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRS
ZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdy
aXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0
dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdEhlYXAgaGVhcCkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3Zl
cmxhcHMgYWRkV3JpdGUoaGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVh
ZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRl
LCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzA4OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTEgKzMxLDEzIEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCiAjaW5j
bHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlYWRG
dW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5
cGVuYW1lIERlZkZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYg
ZGVmKQogewogICAgIC8vIFNvbWUgbm90ZXM6CiAgICAgLy8KQEAgLTY5LDYgKzcxLDIzIEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAvLyAgIHByaW9yIHRv
IHR5cGUgaW5mZXJlbmNlIC0gdGhvdWdoIHRoZXkgcHJvYmFibHkgY291bGQgYmUgaWYgd2UgZGlk
IHNvbWUKICAgICAvLyAgIHNtYWxsIGhhY2tpbmcuCiAgICAgCisgICAgLy8gV2hpbGUgcmVhZCgp
IGFuZCB3cml0ZSgpIGFyZSBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSAtIHRoZXkgdHJhY2sgd2hh
dCBzb3J0cyBvZiB0aGluZ3MgdGhlCisgICAgLy8gbm9kZSBtYXkgcmVhZCBvciB3cml0ZSAtIHRo
ZSBkZWYoKSBmdW5jdG9yIGlzIG1vcmUgdHJpY2t5LiBJdCB0ZWxscyB5b3UgdGhlIGhlYXAgbG9j
YXRpb25zCisgICAgLy8gKG5vdCBqdXN0IGFic3RyYWN0IGhlYXBzKSB0aGF0IGFyZSBkZWZpbmVk
IGJ5IGEgbm9kZS4gQSBoZWFwIGxvY2F0aW9uIGNvbXByaXNlcyBhbiBhYnN0cmFjdAorICAgIC8v
IGhlYXAsIHNvbWUgbm9kZXMsIGFuZCBhIExvY2F0aW9uS2luZC4gQnJpZWZseSwgYSBsb2NhdGlv
biBkZWZpbmVkIGJ5IGEgbm9kZSBpcyBhIGxvY2F0aW9uCisgICAgLy8gd2hvc2UgdmFsdWUgY2Fu
IGJlIGRlZHVjZWQgZnJvbSBsb29raW5nIGF0IHRoZSBub2RlIGl0c2VsZi4gVGhlIGxvY2F0aW9u
cyByZXR1cm5lZCBtdXN0IG9iZXkKKyAgICAvLyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Cisg
ICAgLy8KKyAgICAvLyAtIElmIHNvbWVvbmUgd2FudHMgdG8gQ1NFIGEgbG9hZCBmcm9tIHRoZSBo
ZWFwLCB0aGVuIGEgSGVhcExvY2F0aW9uIG9iamVjdCBzaG91bGQgYmUKKyAgICAvLyAgIHN1ZmZp
Y2llbnQgdG8gZmluZCBhIHNpbmdsZSBtYXRjaGluZyBub2RlLgorICAgIC8vCisgICAgLy8gLSBU
aGUgYWJzdHJhY3QgaGVhcCBpcyB0aGUgb25seSBhYnN0cmFjdCBoZWFwIHRoYXQgY291bGQgYmUg
Y2xvYmJlcmVkIHRvIGludmFsaWRhdGUgYW55IHN1Y2gKKyAgICAvLyAgIENTRSBhdHRlbXB0LiBJ
LmUuIGlmIGNsb2JiZXJpemUoKSByZXBvcnRzIHRoYXQgb24gZXZlcnkgcGF0aCBiZXR3ZWVuIHNv
bWUgbm9kZSBhbmQgYSBub2RlCisgICAgLy8gICB0aGF0IGRlZmluZXMgYSBIZWFwTG9jYXRpb24g
dGhhdCBpdCB3YW50ZWQsIHRoZXJlIHdlcmUgbm8gd3JpdGVzIHRvIGFueSBhYnN0cmFjdCBoZWFw
IHRoYXQKKyAgICAvLyAgIG92ZXJsYXAgdGhlIGxvY2F0aW9uJ3MgaGVhcCwgdGhlbiB3ZSBoYXZl
IGEgc291bmQgbWF0Y2guIEVmZmVjdGl2ZWx5LCB0aGUgc2VtYW50aWNzIG9mCisgICAgLy8gICB3
cml0ZSgpIGFuZCBkZWYoKSBhcmUgaW50ZXJ0d2luZWQgc3VjaCB0aGF0IGZvciB0aGVtIHRvIGJl
IHNvdW5kIHRoZXkgbXVzdCBhZ3JlZSBvbiB3aGF0CisgICAgLy8gICBpcyBDU0VhYmxlLgorCiAg
ICAgaWYgKGVkZ2VzVXNlU3RydWN0dXJlKGdyYXBoLCBub2RlKSkKICAgICAgICAgcmVhZChKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgIApAQCAtNzYsMjMgKzk1LDIzIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+Y29uc3RhbnQoKSkpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFy
ZFBoYW50b206CisgICAgY2FzZSBDaGVjazoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2Ug
Qml0T3I6CiAgICAgY2FzZSBCaXRYb3I6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBC
aXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgIGNhc2UgVmFsdWVUb0ludDMyOgot
ICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgY2FzZSBBcml0aFN1YjoKLSAgICBjYXNlIEFyaXRoTmVn
YXRlOgotICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgY2FzZSBBcml0aElNdWw6Ci0gICAgY2FzZSBB
cml0aERpdjoKLSAgICBjYXNlIEFyaXRoTW9kOgogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2Fz
ZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgpAQCAtMTAwLDI4ICsxMTksNDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQXJpdGhGUm91
bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29zOgorICAgIGNhc2UgVmFs
dWVUb0ludDMyOgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAg
Y2FzZSBDaGVja0Z1bmN0aW9uOgotICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICBjYXNl
IFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgogICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOgorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICBjYXNl
IFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNC
b29sZWFuOgogICAgIGNhc2UgSXNOdW1iZXI6CiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNl
IExvZ2ljYWxOb3Q6Ci0gICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENo
ZWNrSW5Cb3VuZHM6Ci0gICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgotICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgotICAgIGNhc2UgQ2hlY2s6
CiAgICAgY2FzZSBEb3VibGVSZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKICAgICBjYXNlIEludDUy
UmVwOgogICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgIGNhc2UgQXJpdGhTdWI6
CisgICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICBjYXNlIEFyaXRoTXVsOgorICAgIGNhc2UgQXJp
dGhEaXY6CisgICAgY2FzZSBBcml0aE1vZDoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAg
Y2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5h
cml0aE1vZGUoKSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246
CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+ZnVuY3Rpb24oKSkpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICBk
ZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmV4ZWN1dGFibGUoKSkpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtMTQzLDcgKzE4MSw2IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9v
cEhpbnQ6Ci0gICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6
CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKQEAg
LTE1Miw2ICsxODksMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAor
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9pbnRf
ZmlyZSksIG5vZGUpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hw
b2ludDoKICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICByZWFkKFdhdGNo
cG9pbnRfZmlyZSk7CkBAIC0xODQsMTIgKzIyNiwyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CiAg
ICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlzY0Zp
ZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoKKyAg
ICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc09iamVj
dExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6CiAgICAg
ICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlv
bkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoKICAg
ICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0yMTIsMjcgKzI2Niwz
MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAog
ICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRlciwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6
Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0
SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5v
ZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExv
Y2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTI2MiwxMSArMzIyLDEz
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMg
dG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBvbmx5IHJlYWRpbmcgaW1tdXRhYmxlIGRhdGEu
CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwogICAgICAgICAgICAg
cmVhZChWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIFZhcmlhYmxlcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9k
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CkBAIC0yNzQsNiArMzM2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAg
LTI4NSw2ICszNDgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAg
ICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJl
YWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0yOTYsNiArMzYw
LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAg
ICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVh
ZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMTksOCArMzg0LDgg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
ICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVByb3BlcnRpZXMpOwotICAgICAgICAgICAgcmVh
ZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVm
ZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTMzMSw2ICszOTYsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAg
ICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgTm9kZSog
YmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpOworICAgICAgICBOb2Rl
KiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkubm9kZSgpOworICAgICAgICBO
b2RlKiB2YWx1ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgpOwogICAgICAg
ICBzd2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVk
OgpAQCAtMzUyLDkgKzQyMCw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAg
ICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChBcmd1
bWVudHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1
bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRl
KFZhcmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTM2Nyw2ICs0
MzUsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
ICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRl
eGVkSW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3Bl
cnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAg
LTM3OSw2ICs0NDgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAg
cmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVk
RG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CkBAIC0zOTEsNiArNDYxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKICAgICAg
ICAgICAgIHdyaXRlKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRp
ZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKQEAgLTQwOSw5ICs0ODAsMTAg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogog
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICByZWFkKEpTQXJy
YXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3
X2xlbmd0aCk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgd3Jp
dGUoVHlwZWRBcnJheVByb3BlcnRpZXMpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0
IGRlZigpIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB0aGVzZSBvcGVyYXRpb25zIHRydW5jYXRlIHRo
ZWlyIGlucHV0cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzQ3MzcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDE5LDcgKzQ5MSw2IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFk
KEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNDMxLDEyICs1MDIs
MTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2Fz
ZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICByZWFkKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDaGVja0hhc0luc3RhbmNlTG9jLCBKU0NlbGxfdHlw
ZUluZm9GbGFncywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIHJlYWQoSlNGdW5jdGlvbl9leGVjdXRh
YmxlKTsKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0YW5jZU9mTG9jLCBKU0NlbGxfc3Ry
dWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIHdy
aXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb1R5
cGUpOwpAQCAtNDQ2LDE1ICs1MTksMTggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgog
ICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICB3
cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRl
cmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICBy
ZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVy
Zmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheWlmeToKQEAgLTQ2OCw0MiArNTQ0
LDU5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0g
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7Cisg
ICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLmFzV29yZCgp
KSk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdf
dmVjdG9yKTsKKyAgICAgICAgfQorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsIE1pc2NGaWVsZHMsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmll
d192ZWN0b3IpOwotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwotICAgICAg
ICByZWFkKEJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7Ci0gICAgICAgIHJlYWQoQXJyYXlCdWZmZXJf
ZGF0YSk7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoK
LSAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICBBYnN0cmFjdEhlYXAg
aGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICByZWFkKGhl
YXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsK
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZWFkKEpTT2JqZWN0
X2J1dHRlcmZseSk7Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywg
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQo
SlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwot
ICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFw
IGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50
aWZpZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgaWYgKG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQogICAgICAgICAgICAgd3Jp
dGUoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCiAgICAgICAgICAgICB3cml0ZShKU09iamVj
dF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2Ms
IGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsK
KyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPQorICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHdyaXRl
KGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAs
IG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewogICAgICAgICBB
cnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwpAQCAtNTE0LDc4ICs2MDcsODcgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBkZWYoUHVyZVZh
bHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZWFkKEFy
Z3VtZW50c19vdmVycmlkZUxlbmd0aCk7Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19udW1B
cmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBH
ZXRNeVNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6
OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNraXBUb3BTY29wZUxvYywgQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgZ3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lz
dGVyczoKICAgICAgICAgcmVhZChKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xvYywgSlNWYXJpYWJsZU9iamVjdF9y
ZWdpc3RlcnMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
Q2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1i
ZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFy
aWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENs
b3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVy
KCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUs
IG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAo
QWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVn
aXN0ZXJQb2ludGVyKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5l
d0FycmF5V2l0aFNpemU6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIE5ld1R5
cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBFbmFibGUgQ1NFIGZvciB0aGVzZSBub2Rlcy4g
V2UgY2FuJ3QgZG8gdGhpcyByaWdodCBub3cgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkKKyAgICAg
ICAgLy8gZm9yIHVzIHRvIGNsYWltIGFuIGluZGV4IG5vZGUgYW5kIGEgdmFsdWUgbm9kZS4gV2Ug
Y291bGQgbWFrZSB0aGlzIHdvcmsgaWYgd2UgbG93ZXJlZAorICAgICAgICAvLyB0aGVzZSBub2Rl
cyBvciBpZiB3ZSBoYWQgYSBtb3JlIGZsZXhpYmxlIHdheSBvZiBkZWYoKSdpbmcuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3MzcKKyAgICAg
ICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1Jl
Z2V4cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uTm9D
aGVjazoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uOgotICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNz
aW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBP
YmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBOZXdUeXBl
ZEFycmF5OgorICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgIGNhc2UgTmV3RnVuY3Rp
b246CisgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9i
amVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAg
ICAgcmVhZChXb3JsZCk7Ci0gICAgICAgICAgICB3cml0ZShXb3JsZCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAorICAg
ICAgICByZXR1cm47CisKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0
OgogICAgICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKQEAgLTU5OCw2ICs3MDAsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICB3cml0ZShXb3Js
ZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlRXE6
CkBAIC02MDUsOCArNzA4LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoK
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFVudHlwZWRVc2UpKQorICAgICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdy
aXRlKFdvcmxkKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjE1LDYgKzcyMCw4IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAg
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAgICAgICAvLyBUaGVzZSBk
b24ndCBkZWYgYSBwdXJlIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LiBJJ2xsIGF2b2lkIGxvYWQtZWxp
bWluYXRpbmcgdGhlc2UgZm9yCisgICAgICAgICAgICAvLyBub3cuCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDZWxsVXNlOgpAQCAtNjM5LDEwICs3NDYs
MTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
R2V0TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwog
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihNeUFyZ3VtZW50c0xlbmd0aExvYywgVmFy
aWFibGVzKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihNeUFyZ3VtZW50QnlWYWxMb2MsIFZhcmlhYmxlcyksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgpA
QCAtNjcyLDcgKzc4MSw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKIHB1YmxpYzoKICAgICBOb09wQ2xvYmJlcml6ZSgp
IHsgfQotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQuLi4+CisgICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIHsgfQogfTsKIAogY2xh
c3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTY4Miw3ICs3OTIsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwKSB7IG1fcmVzdWx0
ID0gdHJ1ZTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQuLi4+CisgICAgdm9pZCBvcGVyYXRv
cigpKFQuLi4pIHsgbV9yZXN1bHQgPSB0cnVlOyB9CiAgICAgCiAgICAgYm9vbCByZXN1bHQoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogICAgIApAQCAtNjkwLDYgKzgwMSw5IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Jlc3VsdDsKIH07CiAKK2Jvb2wgaXNQdXJlKEdyYXBoJiwgTm9kZSop
OyAvLyBQdXJlIG1lYW5zIGl0IGRvZXMgbm8gcmVhZHMgb3Igd3JpdGVzLgorYm9vbCBoYXNQdXJl
RGVmcyhHcmFwaCYsIE5vZGUqKTsgLy8gSGF2aW5nIHB1cmUgZGVmcyBtZWFucyB0aGF0IHB1cmUg
Q1NFIGlzIHBvc3NpYmxlLgorCiBib29sIGRvZXNXcml0ZXMoR3JhcGgmLCBOb2RlKik7CiAKIGNs
YXNzIEFic3RyYWN0SGVhcE92ZXJsYXBzIHsKQEAgLTcxNiw2ICs4MzAsNzIgQEAgcHJpdmF0ZToK
IAogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIEFic3RyYWN0SGVhcCk7CiAKKy8v
IFdlIHdvdWxkIGhhdmUgdXNlZCBiaW5kKCkgZm9yIHRoZXNlLCBidXQgYmVjYXVzZSBvZiB0aGUg
b3Zlcmxhb2RpbmcgdGhhdCB3ZSBhcmUgZG9pbmcsCisvLyBpdCdzIHF1aXRlIGEgYml0IG9mIGNs
ZWFyZXIgdG8ganVzdCB3cml0ZSB0aGlzIG91dCB0aGUgdHJhZGl0aW9uYWwgd2F5LgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgUmVhZE1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgor
ICAgIFJlYWRNZXRob2RDbG9iYmVyaXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFw
IGhlYXApCisgICAgeworICAgICAgICBtX3ZhbHVlLnJlYWQoaGVhcCk7CisgICAgfQorcHJpdmF0
ZToKKyAgICBUJiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFdy
aXRlTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6CisgICAgV3JpdGVNZXRob2RDbG9iYmVyaXpl
KFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBt
X3ZhbHVlLndyaXRlKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZNZXRob2RDbG9iYmVyaXplIHsKK3B1
YmxpYzoKKyAgICBEZWZNZXRob2RDbG9iYmVyaXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5kZWYodmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5kZWYobG9jYXRpb24sIG5vZGUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFkYXB0b3ImIGFk
YXB0b3IpCit7CisgICAgUmVhZE1ldGhvZENsb2JiZXJpemU8QWRhcHRvcj4gcmVhZChhZGFwdG9y
KTsKKyAgICBXcml0ZU1ldGhvZENsb2JiZXJpemU8QWRhcHRvcj4gd3JpdGUoYWRhcHRvcik7Cisg
ICAgRGVmTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiBkZWYoYWRhcHRvcik7CisgICAgY2xvYmJl
cml6ZShncmFwaCwgbm9kZSwgcmVhZCwgd3JpdGUsIGRlZik7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gTmVlZCB0byBwcm9jZXNz
IHRoZSBncmFwaCBpbiByZXZlcnNlIERGUyBvcmRlciwgc28gdGhhdCB3ZSBnZXQgdG8gdGhlIHVz
ZXMKICAgICAgICAgICAgIC8vIG9mIGEgbm9kZSBiZWZvcmUgd2UgZ2V0IHRvIHRoZSBub2RlIGl0
c2VsZi4KICAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAg
ICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkZXB0aEZpcnN0LnNpemUoKTsgaS0tOykKICAgICAg
ICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRoRmlyc3RbaV0pOwogICAgICAgICB9IGVsc2UgewpA
QCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5v
ZGUtPm9yaWdpbiwgZWRnZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKCk7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291
bnQoMSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzksMjUgKzYzOSw3
NSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQog
Ci12b2lkIEdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Js
b2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQorLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFu
ZCBwb3N0LW9yZGVyIHRyYXZlcnNhbHMuCituYW1lc3BhY2UgeworCitpbmxpbmUgdm9pZCBhZGRG
b3JQcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsK
LSAgICBpZiAoc2Vlbi5jb250YWlucyhibG9jaykpCisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5p
bmRleCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsK
ICAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOwotICAgIHNlZW4uYWRkKGJsb2NrKTsKKyAgICBz
ZWVuLnNldChibG9jay0+aW5kZXgpOwogfQogCi12b2lkIEdyYXBoOjpnZXRCbG9ja3NJbkRlcHRo
Rmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCitlbnVtIFBvc3RPcmRlclRh
c2tLaW5kIHsKKyAgICBQb3N0T3JkZXJGaXJzdFZpc2l0LAorICAgIFBvc3RPcmRlckFkZFRvUmVz
dWx0Cit9OworCitzdHJ1Y3QgUG9zdE9yZGVyVGFzayB7CisgICAgUG9zdE9yZGVyVGFzayhCYXNp
Y0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIFBvc3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3Jk
ZXJGaXJzdFZpc2l0KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICwgbV9raW5k
KGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAg
IFBvc3RPcmRlclRhc2tLaW5kIG1fa2luZDsKK307CisKK2lubGluZSB2b2lkIGFkZEZvclBvc3RP
cmRlcihWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVu
LCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNr
KGJsb2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0KSk7CisgICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4
KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nr
c0luUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47
Ci0gICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2so
MCkpOworICAgIEJpdFZlY3RvciBzZWVuOworICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29y
a2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAg
ICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9j
ay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAgICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29y
a2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgIH0KK30KKwordm9pZCBHcmFw
aDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorewor
ICAgIFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAxNj4gd29ya2xpc3Q7CisgICAgQml0VmVjdG9yIHNl
ZW47CisgICAgYWRkRm9yUG9zdE9yZGVyKHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAg
d2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUG9zdE9yZGVyVGFzayB0YXNr
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgc3dpdGNoICh0YXNrLm1fa2luZCkgewor
ICAgICAgICBjYXNlIFBvc3RPcmRlckZpcnN0VmlzaXQ6CisgICAgICAgICAgICB3b3JrbGlzdC5h
cHBlbmQoUG9zdE9yZGVyVGFzayh0YXNrLm1fYmxvY2ssIFBvc3RPcmRlckFkZFRvUmVzdWx0KSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0YXNrLm1fYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNl
ZW4sIHRhc2subV9ibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFBvc3RPcmRlckFkZFRvUmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0YXNrLm1fYmxvY2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDg5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNjYzLDcgKzY2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVwbGFjZW1lbnRz
KCk7CiAgICAgdm9pZCBpbml0aWFsaXplTm9kZU93bmVycygpOwogICAgIAotICAgIHZvaWQgZ2V0
QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAg
ICB2b2lkIGdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsK
KyAgICB2b2lkIGdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3Vs
dCk7CiAgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0
dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIApAQCAtNzUxLDcgKzc1Miw2IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3Vj
Y2Vzc29yKTsKLSAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJh
c2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFy
aWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMiwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R0hlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kLCAiOiIsIG1faGVhcCk7CisgICAg
CisgICAgaWYgKCFtX2Jhc2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQo
IlsiLCBtX2Jhc2UpOworICAgIGlmIChtX2luZGV4KQorICAgICAgICBvdXQucHJpbnQoIiwgIiwg
bV9pbmRleCk7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExvY2F0aW9uS2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZExvY2F0aW9uS2luZDoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnZhbGlkTG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludExvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnZhbGlkYXRpb25Qb2ludExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgSXNPYmplY3RMb2M6CisgICAgICAgIG91dC5wcmludCgiSXNPYmplY3RMb2MiKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIElzRnVuY3Rpb25Mb2M6CisgICAg
ICAgIG91dC5wcmludCgiSXNGdW5jdGlvbkxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgVHlwZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVPZkxvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0dGVyTG9jOgorICAgICAgICBv
dXQucHJpbnQoIkdldHRlckxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgU2V0dGVyTG9jOgorICAgICAgICBvdXQucHJpbnQoIlNldHRlckxvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiVmFyaWFibGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5TGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3RoTG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBCdXR0ZXJmbHlMb2M6CisgICAgICAgIG91
dC5wcmludCgiQnV0dGVyZmx5TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBDaGVja0hhc0luc3RhbmNlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrSGFzSW5z
dGFuY2VMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVS
ZWdpc3RlcnNMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVJlZ2lzdGVyc0xvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2xvc3VyZVZhcmlhYmxlTG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgR2xvYmFsVmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiR2xvYmFsVmFyaWFibGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIEluZGV4ZWRQcm9wZXJ0eUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkUG9ycGVy
dHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2VMb2M6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFByb3BlcnR5U3RvcmFn
ZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZkxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJJbnN0YW5jZU9mTG9jIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBNeUFyZ3VtZW50QnlWYWxMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiTXlBcmd1bWVudEJ5VmFsTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBNeUFyZ3VtZW50c0xlbmd0aExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNeUFyZ3VtZW50
c0xlbmd0aExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQ
cm9wZXJ0eUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5TG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTa2lwVG9wU2NvcGVMb2M6CisgICAgICAg
IG91dC5wcmludCgiU2tpcFRvcFNjb3BlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdIZWFwTG9jYXRpb25faAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNs
dWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51
bSBMb2NhdGlvbktpbmQgeworICAgIEludmFsaWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgQXJy
YXlMZW5ndGhMb2MsCisgICAgQnV0dGVyZmx5TG9jLAorICAgIENoZWNrSGFzSW5zdGFuY2VMb2Ms
CisgICAgQ2xvc3VyZVJlZ2lzdGVyc0xvYywKKyAgICBDbG9zdXJlVmFyaWFibGVMb2MsCisgICAg
R2V0dGVyTG9jLAorICAgIEdsb2JhbFZhcmlhYmxlTG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eUxv
YywKKyAgICBJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9jLAorICAgIEluc3RhbmNlT2ZMb2MsCisg
ICAgSW52YWxpZGF0aW9uUG9pbnRMb2MsCisgICAgSXNGdW5jdGlvbkxvYywKKyAgICBJc09iamVj
dExvYywKKyAgICBNeUFyZ3VtZW50QnlWYWxMb2MsCisgICAgTXlBcmd1bWVudHNMZW5ndGhMb2Ms
CisgICAgTmFtZWRQcm9wZXJ0eUxvYywKKyAgICBTZXR0ZXJMb2MsCisgICAgU2tpcFRvcFNjb3Bl
TG9jLAorICAgIFR5cGVPZkxvYywKKyAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKKyAgICBW
YXJpYWJsZUxvYworfTsKKworY2xhc3MgSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBIZWFw
TG9jYXRpb24oCisgICAgICAgIExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZExvY2F0aW9uS2lu
ZCwKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAgPSBBYnN0cmFjdEhlYXAoKSwKKyAgICAgICAg
Tm9kZSogYmFzZSA9IG51bGxwdHIsIE5vZGUqIGluZGV4ID0gbnVsbHB0cikKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2hlYXAoaGVhcCkKKyAgICAgICAgLCBtX2Jhc2UoYmFz
ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChraW5k
ID09IEludmFsaWRMb2NhdGlvbktpbmQpID09ICFoZWFwKTsKKyAgICAgICAgQVNTRVJUKCEhbV9o
ZWFwIHx8ICFtX2Jhc2UpOworICAgICAgICBBU1NFUlQobV9iYXNlIHx8ICFtX2luZGV4KTsKKyAg
ICB9CisgICAgCisgICAgSGVhcExvY2F0aW9uKExvY2F0aW9uS2luZCBraW5kLCBBYnN0cmFjdEhl
YXAgaGVhcCwgRWRnZSBiYXNlLCBFZGdlIGluZGV4ID0gRWRnZSgpKQorICAgICAgICA6IEhlYXBM
b2NhdGlvbihraW5kLCBoZWFwLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZExvY2F0aW9uS2luZCkKKyAgICAgICAgLCBtX2hl
YXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgICAgICwgbV9iYXNlKG51bGxwdHIp
CisgICAgICAgICwgbV9pbmRleChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9oZWFwOyB9CisgICAgCisgICAgTG9jYXRp
b25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBBYnN0cmFjdEhlYXAg
aGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2U7IH0KKyAgICBOb2RlKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2tpbmQgKyBtX2hlYXAuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaCht
X2luZGV4KSArIG1fa2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcAor
ICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hlYXAuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBMb2NhdGlvbktpbmQgbV9raW5k
OworICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7CisgICAgTm9kZSogbV9iYXNlOworICAgIE5vZGUq
IG1faW5kZXg7Cit9OworCitzdHJ1Y3QgSGVhcExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBIZWFwTG9jYXRpb24mIGEsIGNvbnN0IEhl
YXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpERkc6OkxvY2F0aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpIZWFwTG9jYXRp
b25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0
eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBOb2RlKj4gSW1wdXJlTWFwOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0hlYXBMb2NhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2Nr
cyBpbiBERlMgb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CiAgICAgICAgIC8vIHRl
bmQgdG8gaG9pc3QgZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KICAgICAgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVw
dGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJl
T3JkZXIoZGVwdGhGaXJzdCk7CiAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxv
b3BTdGFjazsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcwODkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
MywxMCArMzczLDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVm
YXVsdEZsYWdzKFBoYW50b20pOwogICAgIH0KLQotICAgIHZvaWQgY29udmVydFRvUGhhbnRvbVVu
Y2hlY2tlZCgpCisgICAgCisgICAgdm9pZCByZXBsYWNlV2l0aChOb2RlKiBvdGhlcikKICAgICB7
Ci0gICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBjb252ZXJ0
VG9QaGFudG9tKCk7CisgICAgICAgIHJlcGxhY2VtZW50ID0gb3RoZXI7CiAgICAgfQogCiAgICAg
dm9pZCBjb252ZXJ0VG9JZGVudGl0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCShyZXZpc2lvbiAxNzA4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksMTQgKzI0OSwxNCBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7
CiAgICAgICAgIAogICAgIHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpOwotICAgIHBlcmZv
cm1DU0UoZGZnKTsKKyAgICBwZXJmb3JtTENTRShkZmcpOwogICAgIHBlcmZvcm1Bcmd1bWVudHNT
aW1wbGlmaWNhdGlvbihkZmcpOwogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAg
IHBlcmZvcm1DRkEoZGZnKTsKICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmlj
YXRpb24oZGZnKTsKLSAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnKTsKKyAgICBjaGFuZ2Vk
IHw9IHBlcmZvcm1MQ1NFKGRmZyk7CiAgICAgCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkp
CiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CkBAIC0zMTMsNyArMzEzLDcgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICAgICAgcGVyZm9ybVNTQUNvbnZlcnNpb24oZGZnKTsKICAgICAgICAgcGVy
Zm9ybVNTQUxvd2VyaW5nKGRmZyk7Ci0gICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAg
cGVyZm9ybUdDU0UoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KGRmZyk7CkBAIC0zMjUsNyArMzI1LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21iaW5pbmcoZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShk
ZmcpOworICAgICAgICBwZXJmb3JtR0NTRShkZmcpOwogICAgICAgICAKICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCB3ZSdyZSBub3QgYWxsb3dlZCB0byBkbyBhbnkgZnVydGhlciBjb2RlIG1vdGlv
biBiZWNhdXNlIG91ciByZWFzb25pbmcKICAgICAgICAgLy8gYWJvdXQgY29kZSBtb3Rpb24gYXNz
dW1lcyB0aGF0IGl0J3MgT0sgdG8gaW5zZXJ0IEdDIHBvaW50cyBpbiByYW5kb20gcGxhY2VzLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQdXJl
VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFB1cmVWYWx1ZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChHcmFwaDo6b3BOYW1l
KG9wKCkpKTsKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewor
ICAgICAgICBpZiAoY2hpbGRyZW4oKS5jaGlsZChpKSkKKyAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgY2hpbGRyZW4oKS5jaGlsZChpKSk7CisgICAgfQorICAgIGlmIChtX2luZm8pCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgbV9pbmZvKTsKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQdXJlVmFsdWVfaAorI2RlZmluZSBERkdQdXJlVmFs
dWVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHVyZVZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBQdXJlVmFsdWUoKQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBlKQorICAgICAg
ICAsIG1faW5mbygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBl
IG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgdWludHB0cl90IGluZm8pCisgICAg
ICAgIDogbV9vcChvcCkKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICAgICAs
IG1faW5mbyhpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoZGVmYXVsdEZsYWdzKG9wKSAm
IE5vZGVIYXNWYXJBcmdzKSk7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBv
cCwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIGNvbnN0IHZvaWQqIHB0cikKKyAgICAg
ICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVuLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwdHIp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVu
LCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVy
ZVZhbHVlKE5vZGUqIG5vZGUsIHVpbnRwdHJfdCBpbmZvKQorICAgICAgICA6IFB1cmVWYWx1ZShu
b2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbiwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAg
IFB1cmVWYWx1ZShOb2RlKiBub2RlLCBjb25zdCB2b2lkKiBwdHIpCisgICAgICAgIDogUHVyZVZh
bHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkcmVuLCBwdHIpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSkKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3Ao
KSwgbm9kZS0+Y2hpbGRyZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBl
KQorICAgICAgICAsIG1faW5mbygxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiAhbV9pbmZvOyB9
CisgICAgCisgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9
CisgICAgdWludHB0cl90IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxp
bnQ+OjpoYXNoKHN0YXRpY19jYXN0PGludD4obV9vcCkpICsgbV9jaGlsZHJlbi5oYXNoKCkgKyBt
X2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXJlVmFsdWUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gb3RoZXIubV9vcAor
ICAgICAgICAgICAgJiYgbV9jaGlsZHJlbiA9PSBvdGhlci5tX2NoaWxkcmVuCisgICAgICAgICAg
ICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09
IExhc3ROb2RlVHlwZSAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZVR5cGUgbV9vcDsK
KyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisgICAgdWludHB0cl90IG1faW5mbzsKK307
CisKK2NsYXNzIFB1cmVWYWx1ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFB1cmVWYWx1ZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUHVyZVZhbHVlJiBhLCBjb25zdCBQdXJlVmFsdWUmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQdXJlVmFsdWU+IHsKKyAgICB0eXBl
ZGVmIEpTQzo6REZHOjpQdXJlVmFsdWUgSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRG
Rzo6UHVyZVZhbHVlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHVyZVZhbHVl
PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIE5vZGUqPiBQdXJlTWFwOwordHlw
ZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgVmVjdG9yPE5vZGUqPj4gUHVyZU11bHRpTWFwOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR1B1cmVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MDg5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNB
dEhlYWQuY2xlYXIoKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsK
LSAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0
YShibG9jaykpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFz
aWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBt
X2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTcwODkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxl
cygpOwogCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAg
bV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAg
bV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwogCiAgICAgICAgIGludCBt
YXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5k
ZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxvY2tJbmRleC0tOyApIHsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0hhc2hNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJ
KHJldmlzaW9uIDE3MDg5MCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcmVtb3ZlKGNvbnN0
IEtleVR5cGUmKTsKICAgICBib29sIHJlbW92ZShpdGVyYXRvcik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHJlbW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpOwogICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgIE1hcHBlZFR5cGUgdGFrZShjb25zdCBLZXlUeXBlJik7IC8v
IGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBnZXQgd2l0aCByZW1vdmUKQEAgLTM1NCw2ICszNTYs
MTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtbwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2lubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnJlbW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9pbXBs
LnJlbW92ZUlmKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogaW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1
cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTcwODkw
KQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2
ICszOTMsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3Ip
OwogICAgICAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0
b3IpOwogICAgICAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29u
c3RfaXRlcmF0b3IpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgICAg
ICB2b2lkIHJlbW92ZUlmKEZ1bmN0b3ImKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAg
ICAgIHN0YXRpYyBib29sIGlzRW1wdHlCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyBy
ZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFj
dCh2YWx1ZSkpOyB9CkBAIC0xMDMxLDYgKzEwMzMsMjUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGlubGlu
ZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlSWYoRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGFibGVTaXplOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAoIWZ1bmN0b3IobV90YWJsZVtpXSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChtX3RhYmxlW2ldKTsKKyAgICAgICAg
ICAgICsrbV9kZWxldGVkQ291bnQ7CisgICAgICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRTaHJpbmsoKSkKKyAgICAgICAgICAgIHNo
cmluaygpOworICAgICAgICAKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxl
KGludCBzaXplKSAtPiBWYWx1ZVR5cGUqCiAgICAgewogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0
ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVy
ZSwgYnV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234656</attachid>
            <date>2014-07-09 14:22:53 -0700</date>
            <delta_ts>2014-07-09 16:37:11 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>108337</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExNCw2ICs1MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTcsNiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2Njcs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDk4MCArMzksMjkz
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgQ1NFUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworbmFtZXNwYWNlIHsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBw
dWJsaWM6Ci0gICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIo
QWJzdHJhY3RIZWFwIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0K
ICAgICAKLSAgICBib29sIHJ1bigpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1h
cDo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSAhPSBCZWZvcmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNl
bWVudHMoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAg
IHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVh
cC5vdmVybGFwcyhwYWlyLmtleS5oZWFwKCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
Ci0gICAgdW5zaWduZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlm
IChyZXN1bHQgPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2lu
ZGV4SW5CbG9jayk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgTm9kZSog
cHVyZUNTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5j
aGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIo
KS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5p
dGl6ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9y
UHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxkMSB8fCBv
dGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGlsZDMpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKK307CiAKLSAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpICE9IG90aGVyTm9kZS0+b3AoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRWRnZSBvdGhlckNoaWxkID0gb3RoZXJOb2Rl
LT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hp
bGQgIT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsK
LSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3Ro
ZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0g
b3RoZXJOb2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJD
aGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYg
KG90aGVyQ2hpbGQgIT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBjb25zdGFudENTRShOb2RlKiBub2Rl
KQoraW5saW5lIHZvaWQgY2xvYmJlcihJbXB1cmVNYXAmIG1hcCwgQWJzdHJhY3RIZWFwIGhlYXAp
Cit7CisgICAgQ2xvYmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7CisgICAgbWFwLnJlbW92ZUlmKGZp
bHRlcik7Cit9CisKK2NsYXNzIExDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgTENTRVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxvY2Fs
IGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLT5vcCgpICE9IG5vZGUtPm9wKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNvbnN0YW50KCkgIT0g
bm9kZS0+Y29uc3RhbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogY29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRShO
b2RlKiBub2RlKQorICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhl
ck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2Rl
LT5vcCgpICE9IENvbnN0YW50U3RvcmFnZVBvaW50ZXIpCisgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBMb2Fk
U3RvcmUpOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPnN0b3JhZ2VQ
b2ludGVyKCkgIT0gbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIG1fcHVyZVZhbHVlcy5jbGVhcigpOworICAgICAgICAgICAgbV9p
bXB1cmVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG90
aGVyTm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAg
Tm9kZSogZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAg
IE5vZGUqIGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZSogYXJyYXkpCi0gICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAg
ICAgICAgICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1fY2hhbmdlZDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KK3By
aXZhdGU6CisgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSog
c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgaW50IHZhck51bWJlcikK
KyAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBoZWFwKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS0+dmFyTnVtYmVyKCkgPT0g
dmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVyKCkgIT0gdmFyTnVtYmVy
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+
Y2hpbGQzKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
Ci0gICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNsb2Ji
ZXIobV9pbXB1cmVWYWx1ZXMsIGhlYXApOwogICAgIH0KICAgICAKLSAgICBib29sIHZhckluamVj
dGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYXJJbmplY3Rpb25XYXRjaHBvaW50KQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1
ZSwgbV9ub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0g
ICAgTm9kZSogZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGls
ZDIsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2Rl
ID09IGNoaWxkMikgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAg
ICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEK
LSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQyKCkgPT0gY2hpbGQyCi0gICAgICAg
ICAgICAgICAgICAgICYmIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBhcnJheU1vZGUudHlw
ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGly
ZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczogewotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgLy8gVHlw
ZWQgYXJyYXlzIAotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZWRBcnJheVR5cGUo
KSAhPSBOb3RUeXBlZEFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSA9PSBjaGls
ZDIKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IGFy
cmF5TW9kZS50eXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3Vt
ZSB0aGF0IHRoZSBQdXRCeVZhbCB3aWxsIGNsb2JiZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRp
bmcgZnJvbS4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYg
d2Uga25vdyB0aGF0IHRoZSBQdXRCeVZhbCBpcyBhY2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQotICAg
ICAgICAgICAgICAgIC8vIGRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdl
IGtub3cgdGhhdCB0aGV5IHdvbid0IGNsb2JiZXIgZWFjaCBvdGhlci4KLSAgICAgICAgICAgICAg
ICAvLyAuLi4gZXhjZXB0IG9mIGNvdXJzZSBmb3IgdHlwZWQgYXJyYXlzLCB3aGVyZSBhbGwgdHlw
ZWQgYXJyYXlzIGNsb2JiZXIgYWxsIG90aGVyCi0gICAgICAgICAgICAgICAgLy8gdHlwZWQgYXJy
YXlzISAgQW4gSW50MzJBcnJheSBjYW4gYWxpYXMgYSBGbG9hdDY0QXJyYXkgZm9yIGV4YW1wbGUs
IGFuZCBzbyBvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFsdWUqIGZ1
bmN0aW9uLCBOb2RlKiBjaGlsZDEpCisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9u
LCBOb2RlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4
Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5j
dGlvbiAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBm
dW5jdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1ZXMuYWRk
KGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgocmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQx
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDaGVja0V4ZWN1dGFibGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmV4
ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNr
U3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5v
ZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9
PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRP
Zihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90
IGNoYW5nZSB0aGUgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNz
aW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRl
eCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYg
dGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAg
ICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgYm9vbCBtX2NoYW5nZWQ7CiAgICAgCi0gICAgYm9vbCBzdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlKiBjaGls
ZDEpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQx
Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzICE9IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUu
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGgg
YW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9z
c2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6
Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9u
IGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhh
dCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBtX2Rp
ZFdyaXRlczsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgCi0gICAgTm9kZSogZ2V0QnlPZmZzZXRM
b2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gYmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBQdXJlTWFw
IG1fcHVyZVZhbHVlczsKKyAgICBJbXB1cmVNYXAgbV9pbXB1cmVWYWx1ZXM7Cit9OwogCi0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UKLSAgICAgICAg
ICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZQotICAgICAgICAgICAgICAg
ICAgICAmJiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0g
aWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlk
ZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigp
ID09IGJhc2UpIC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gYmFzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0
aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1w
b3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICAKLSAgICBOb2RlKiBnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQorY2xhc3MgR0NTRVBoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBHQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24i
KTsKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEdldHRl
clNldHRlckJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSBi
YXNlCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0
aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEg
c3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0UHJvcGVydHlT
dG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKKyAgICBib29sIHJ1bigpCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgY2FuIGNo
ZWFwbHkgcHJvdmUgdGhpcyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0J3Mgc3RvcmFnZSwgd2UK
LSAgICAgICAgICAgICAgICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBpdHMgcmVzdWx0LgotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgY3Vy
cmVudGx5IGNhbid0IHByb3ZlIHRoYXQgdGhpcyBkb2Vzbid0IGNoYW5nZSBvdXIgb2JqZWN0J3MK
LSAgICAgICAgICAgICAgICAvLyBzdG9yYWdlLCBzbyB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUg
dGhhdCBpdCBtYXkgY2hhbmdlIHRoZSBzdG9yYWdlCi0gICAgICAgICAgICAgICAgLy8gcG9pbnRl
ciBvZiBhbnkgb2JqZWN0LCBpbmNsdWRpbmcgb3Vycy4KLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBh
Y2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2Vy
IGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUK
LSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5OgotICAgICAgICAgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlm
IHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3VyIGJ1dHRlcmZseS4KLSAgICAgICAg
ICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRT
dGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50
cygpOworICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7CisgICAgICAgIG1f
Z3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcHJlT3JkZXI7CisgICAgICAgIG1fZ3JhcGgu
Z2V0QmxvY2tzSW5QcmVPcmRlcihwcmVPcmRlcik7CisgICAgICAgIAorICAgICAgICBtX2ltcHVy
ZURhdGFNYXAucmVzaXplKG1fZ3JhcGgubnVtQmxvY2tzKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gRmlyc3QgZmlndXJlIG91dCB3aGF0IGdldHMgY2xvYmJlcmVkIGJ5IGJsb2Nrcy4gTm9kZSB0
aGF0IHRoaXMgdXNlcyB0aGUgcHJlT3JkZXIgbGlzdAorICAgICAgICAvLyBmb3IgY29udmVuaWVu
Y2Ugb25seS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcHJlT3JkZXIuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAgICAgICAgICBtX2lt
cHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
CisgICAgICAgICAgICAgICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1fYmxvY2stPmF0KG5vZGVJbmRl
eCksIG1faW1wdXJlRGF0YS53cml0ZXMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEs
IEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sg
aWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJyYXkuCi0gICAgICAgICAg
ICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIC8vIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UgZG9pbmcgdGhp
cyBiZWZvcmUsIHdoYXQgZm9sbG93cyBtaWdodCBoYXZlIHRvIGJlIG1hZGUgaXRlcmF0aXZlLgor
ICAgICAgICAvLyBCdXQgaXQgZmVlbHMgbGlrZSwgcmlnaHQgbm93LCB0aGlzIHdvcmtzIGFzIGEg
c2luZ2xlIHBhc3MgYmVjYXVzZSB3ZSBvbmx5IHR1cm4gYSBub2RlCisgICAgICAgIC8vIGludG8g
YSB2YWx1ZSBvciBoZWFwIGxvY2F0aW9uIGFmdGVyIHdlIGhhdmUgcGVyZm9ybWVkIHN1YnN0aXR1
dGlvbnMgb24gdGhhdCBub2RlJ3MKKyAgICAgICAgLy8gY2hpbGRyZW4uCisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlT3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0
YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAgICAgbV93cml0
ZXNTb0Zhci5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAg
ICAgICAgICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+ZGlkVmlzaXQgPSB0
cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogCi0gICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9
CiAgICAgCi0gICAgTm9kZSogZ2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbihOb2RlVHlw
ZSBvcCwgTm9kZSogY2hpbGQxKQorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCiAg
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IG9wICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0TXlTY29wZUxv
YWRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNl
IHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29wZS4KLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNsb2JiZXIo
bV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwsIGhlYXApOworICAgICAgICBtX3dyaXRlc1Nv
RmFyLmFkZChoZWFwKTsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWlu
YXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29s
IGNhcmVBYm91dENsb2JiZXJpbmcpCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gMDsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X3B1cmVWYWx1ZXMuYWRkKHZhbHVlLCBWZWN0b3I8Tm9kZSo+KCkpOworICAgICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKG1fbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRM
b2NhbE9wID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6Ci0gICAgICAgICAg
ICBjYXNlIFB1dENsb3N1cmVWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENs
b2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIE5vZGUqIGNhbmRpZGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVbaV07CisgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIs
IG1fYmxvY2spKSB7CisgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChjYW5kaWRh
dGUpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICAKLSAgICBib29sIGludmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24oKQotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBJbnZhbGlkYXRpb25Qb2ludCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh3cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIFdh
dGNocG9pbnRfZmlyZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5v
ZGUqIHJlcGxhY2VtZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudE5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ug
d2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICBtX2N1
cnJlbnROb2RlLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OwotICAgICAgICAKLSAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtX25vZGUpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGVsaW1pbmF0ZSgpCisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBO
b2RlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5tdXN0R2Vu
ZXJhdGUoKSk7Ci0gICAgICAgIG1fY3VycmVudE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAg
ICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIGxvY2FsIG1hcCBoYXMgaXQ7IHRoZW4gY2hlY2sg
aWYgd2UgY2FuIGZpbmQgaXQgZ2xvYmFsbHk7IGFuZCBmaW5hbGx5CisgICAgICAgIC8vIGlmIGFs
bCB0aGF0IGZhaWxzIHRoZW4gYWRkIGl0LgogICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbGltaW5hdGUoTm9kZSogbm9kZSwgTm9kZVR5
cGUgcGhhbnRvbVR5cGUgPSBQaGFudG9tKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICBOb2RlKiBtYXRjaCA9IG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmdldChsb2Nh
dGlvbik7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNl
V2l0aChtYXRjaCk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7Ci0gICAgICAgIAotICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NF
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24o
bm9kZSk7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICBpZiAobV93cml0ZXNTb0Zhci5vdmVybGFwcyhsb2NhdGlvbi5oZWFwKCkpKSB7
CisgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24s
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAv
LyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUt
ZWZmZWN0cy4KLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAg
ICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBC
aXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0aEFi
czoKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAg
ICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNh
c2UgQXJpdGhTaW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2UgSXNV
bmRlZmluZWQ6Ci0gICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVy
OgotICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAg
ICBjYXNlIElzRnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2Fz
ZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNlIEdl
dENsb3N1cmVSZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2Ug
VHlwZU9mOgotICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNlIFZh
bHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3VibGVS
ZXA6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJp
dGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWw6
Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAg
ICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgIGlm
ICghY2FuZGlkYXRlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFz
dWJzdW1lcyhjYW5kaWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRhdGUt
PmFyaXRoTW9kZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FuZGlkYXRlLT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAgICAv
LyBUaGlzIHBlcmZvbXMgYSBiYWNrd2FyZCBzZWFyY2ggdG8gZmluZCBzb21lIHBvc3NpYmxlIGRl
ZigpIHRoYXQgbWF0Y2hlcyBvdXIgaGVhcAorICAgICAgICAvLyBsb2NhdGlvbi4gQXMgc29vbiBh
cyBpdCBmaW5kcyBhIHBvc3NpYmxlIGRlZigpLCBpdCBhc3N1bWVzIHRoYXQgdGhpcyBvbmUgbXVz
dCBiZSB0aGUKKyAgICAgICAgLy8gbWF0Y2ggYW5kIGNvbXBsZXRlcyB0aGUgc2VhcmNoIGJ5IGhh
bHRpbmcgYXQgdGhpcyBibG9jay4gQXMgc29vbiBhcyBpdCBmaW5kcyBhIHdyaXRlKCkKKyAgICAg
ICAgLy8gdGhhdCBvdmVybGFwcyB0aGUgbG9jYXRpb24ncyBoZWFwLCBpdCBzdG9wcywgYXNzdW1p
bmcgdGhhdCB0aGVyZSBpcyBubyBwb3NzaWJsZSBtYXRjaC4KKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgOD4gd29ya2xpc3Q7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOwor
ICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHZpc2l0
IG91cnNlbHZlcy4gV2UgZG9taW5hdGUgb3Vyc2VsdmVzIGJ1dCB0aGVyZSdzIG5vCisgICAgICAg
IC8vIHdheSB0aGF0IHdlJ3JlIGdvaW5nIHRvIG1hdGNoYWdhaW5zdCBhIGRlZigpIHRoYXQgY29t
ZXMgKmFmdGVyKiB0aGUgb25lIHdlJ3JlCisgICAgICAgIC8vIGluc3BlY3RpbmcuCisgICAgICAg
IHNlZW4uc2V0KG1fYmxvY2stPmluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gbV9ibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAg
ICAgICAgICAgaWYgKCFzZWVuLmdldChwcmVkZWNlc3Nvci0+aW5kZXgpKSB7CisgICAgICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBzZWVu
LnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAg
SW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoYmxvY2ssIG1fYmxvY2spKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCAhbWF0Y2gpOworICAgICAgICAgICAgICAgIG1hdGNoID0gZGF0YS5hdmFp
bGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXhhbWluZSB0aGUgcHJlZGVjZXNzb3JzIG9m
IGEgbWF0Y2guIEF0IHRoaXMgcG9pbnQgd2UganVzdCB3YW50IHRvCisgICAgICAgICAgICAgICAg
ICAgIC8vIGVzdGFibGlzaCB0aGF0IG90aGVyIGJsb2NrcyBvbiB0aGUgcGF0aCBmcm9tIGhlcmUg
dG8gdGhlcmUgZG9uJ3QgY2xvYmJlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9jYXRp
b24gd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVs
aW1pbmF0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRMb2Nh
bDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBOb2RlKiByZWxldmFudExvY2FsT3A7Ci0gICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJl
cGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpLCByZWxldmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KTsKLSAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbE9wKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbFVu
bGlua2VkCi0gICAgICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2NhbE9wLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQorICAgICAgICAgICAg
aWYgKCFkYXRhLndyaXRlcy5jb250YWlucyhsb2NhdGlvbi5oZWFwKCkpKSB7CisgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtl
ZCwgdGhlbiB0dXJuIHRoZSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAvLyBpbnRvIGEg
R2V0TG9jYWwuCi0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExv
Y2FsVW5saW5rZWQpCi0gICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0VG9H
ZXRMb2NhbCh2YXJpYWJsZUFjY2Vzc0RhdGEsIHBoaSk7Ci0KLSAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAgICAgTm9kZSogcmVsZXZh
bnRMb2NhbE9wSWdub3JlZDsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldExvY2FsTG9h
ZEVsaW1pbmF0aW9uKG5vZGUtPnVubGlua2VkTG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wSWdub3Jl
ZCwgdHJ1ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0g
ICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyYW5n
ZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0
YW50cywKLSAgICAgICAgICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGljYXRlZCBjb25z
dGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1cC4KLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGNvbnN0YW50U3RvcmFnZVBvaW50ZXJDU0Uobm9kZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24obm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdl
dE15U2NvcGU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNeVNjb3BlTG9hZEVsaW1p
bmF0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8g
SGFuZGxlIG5vZGVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsbHkgcHVyZTogdGhlc2UgYXJlIHB1cmUs
IGFuZCBjYW4KLSAgICAgICAgLy8gYmUgQ1NFJ2QsIHNvIGxvbmcgYXMgdGhlIHByZWRpY3Rpb24g
aXMgdGhlIG9uZSB3ZSB3YW50LgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAg
IGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudCAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKHJlcGxh
Y2VtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnQp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUg
bm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKLSAgICAgICAgLy8gb3B0aW1pemUgdGhl
bSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KLSAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJM
b2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgaWYgKHZhcklu
amVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRC
eVZhbDoKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgICAgIEVkZ2Ug
Y2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBOb2Rl
KiByZXBsYWNlbWVudCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5ub2RlKCksIGNo
aWxkMi5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
cGxhY2VtZW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAg
ICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAg
ICBzZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVy
ZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZVNldCgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNo
ZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLT5mdW5jdGlvbigpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAg
ICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwg
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIENoZWNrQXJy
YXk6Ci0gICAgICAgICAgICBpZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAg
Y2FzZSBHZXRHZXR0ZXI6Ci0gICAgICAgIGNhc2UgR2V0U2V0dGVyOiB7Ci0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRJbnRlcm5hbEZpZWxkTG9hZEVsaW1pbmF0aW9uKG5vZGUtPm9wKCks
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LQotICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVu
dGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0
aW9uKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlciwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgotICAgICAgICAgICAgaWYgKGludmFsaWRhdGlv
blBvaW50RWxpbWluYXRpb24oKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAvLyBkbyBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOworICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgpXSA9IG1faW5kZXhJbkJs
b2NrOworICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24s
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9j
ayogYmxvY2spCi0gICAgewotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKLSAgICAgICAgICAgIG1fbGFz
dFNlZW5baV0gPSBVSU5UX01BWDsKLSAgICAgICAgCi0gICAgICAgIGZvciAobV9pbmRleEluQmxv
Y2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2sp
OwotICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9jdXJyZW50Tm9kZSk7CisgICAgc3RydWN0
IEltcHVyZUJsb2NrRGF0YSB7CisgICAgICAgIEltcHVyZUJsb2NrRGF0YSgpCisgICAgICAgICAg
ICA6IGRpZFZpc2l0KGZhbHNlKQorICAgICAgICB7CiAgICAgICAgIH0KLSAgICB9CisgICAgICAg
IAorICAgICAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJs
ZUF0VGFpbDsKKyAgICAgICAgYm9vbCBkaWRWaXNpdDsKKyAgICB9OworICAgIAorICAgIFB1cmVN
dWx0aU1hcCBtX3B1cmVWYWx1ZXM7CisgICAgVmVjdG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1
cmVEYXRhTWFwOworICAgIAorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9u
b2RlOworICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRhOworICAgIENsb2JiZXJTZXQg
bV93cml0ZXNTb0ZhcjsKICAgICAKLSAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAg
ICBOb2RlKiBtX2N1cnJlbnROb2RlOwotICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAg
IHN0ZDo6YXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKLSAgICBib29s
IG1fY2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2
ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4KKyAgICBib29sIG1fY2hhbmdlZDsKIH07
CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworYm9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBMQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PExDU0VQaGFzZT4oZ3JhcGgpOworfQorCitib29sIHBlcmZvcm1HQ1NFKEdyYXBoJiBncmFwaCkK
IHsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENTRSBQaGFzZSIpOwot
ICAgIHJldHVybiBydW5QaGFzZTxDU0VQaGFzZT4oZ3JhcGgpOworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgR0NTRSBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxH
Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTcwOTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCw3ICszOCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJhdGhlciBwcm9maXRhYmxl
LiBJdCBoYXMgZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5kIHdpbGwgbWF0Y2gKIC8v
IGEgd2lkZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0
byBwcm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRp
dmVseSBjaGVhcCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9y
bUxDU0UoR3JhcGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NB
LgorYm9vbCBwZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAko
cmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFj
dEhlYXA+IENsb2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRS
ZWFkKHJlYWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwog
fQogCiB2b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQm
IHdyaXRlU2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2Ji
ZXJpemUgbm9PcDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBj
bG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6
ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRz
QW5kV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwg
Q2xvYmJlclNldCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRT
ZXQpOwogICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09w
KTsKIH0KIAogYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9i
YmVyU2V0JiByZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRT
ZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVy
biBhZGRSZWFkLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJs
YXBzIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRS
ZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3Jp
dGUsIG5vT3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA5
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCitib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hl
Y2tDbG9iYmVyaXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICBy
ZXR1cm4gIWFkZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAg
Tm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBu
b09wLCBhZGRQdXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBk
b2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXpl
IGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRl
KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAg
ICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFwKQogeworICAgIE5vT3BD
bG9iYmVyaWUgbm9PcDsKICAgICBBYnN0cmFjdEhlYXBPdmVybGFwcyBhZGRBY2Nlc3MoaGVhcCk7
Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkQWNjZXNzLCBhZGRBY2Nlc3MpOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKICAg
ICByZXR1cm4gYWRkQWNjZXNzLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdEhlYXAgaGVhcCkKIHsKLSAgICBOb09wQ2xv
YmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RI
ZWFwT3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwg
YWRkUmVhZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFk
ZFdyaXRlLCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzA5
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDEzIEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgi
CiAjaW5jbHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3
cml0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0
b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVu
Y3RvciYgZGVmKQogewogICAgIC8vIFNvbWUgbm90ZXM6CiAgICAgLy8KQEAgLTY5LDYgKzcxLDIz
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAvLyAgIHBy
aW9yIHRvIHR5cGUgaW5mZXJlbmNlIC0gdGhvdWdoIHRoZXkgcHJvYmFibHkgY291bGQgYmUgaWYg
d2UgZGlkIHNvbWUKICAgICAvLyAgIHNtYWxsIGhhY2tpbmcuCiAgICAgCisgICAgLy8gV2hpbGUg
cmVhZCgpIGFuZCB3cml0ZSgpIGFyZSBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSAtIHRoZXkgdHJh
Y2sgd2hhdCBzb3J0cyBvZiB0aGluZ3MgdGhlCisgICAgLy8gbm9kZSBtYXkgcmVhZCBvciB3cml0
ZSAtIHRoZSBkZWYoKSBmdW5jdG9yIGlzIG1vcmUgdHJpY2t5LiBJdCB0ZWxscyB5b3UgdGhlIGhl
YXAgbG9jYXRpb25zCisgICAgLy8gKG5vdCBqdXN0IGFic3RyYWN0IGhlYXBzKSB0aGF0IGFyZSBk
ZWZpbmVkIGJ5IGEgbm9kZS4gQSBoZWFwIGxvY2F0aW9uIGNvbXByaXNlcyBhbiBhYnN0cmFjdAor
ICAgIC8vIGhlYXAsIHNvbWUgbm9kZXMsIGFuZCBhIExvY2F0aW9uS2luZC4gQnJpZWZseSwgYSBs
b2NhdGlvbiBkZWZpbmVkIGJ5IGEgbm9kZSBpcyBhIGxvY2F0aW9uCisgICAgLy8gd2hvc2UgdmFs
dWUgY2FuIGJlIGRlZHVjZWQgZnJvbSBsb29raW5nIGF0IHRoZSBub2RlIGl0c2VsZi4gVGhlIGxv
Y2F0aW9ucyByZXR1cm5lZCBtdXN0IG9iZXkKKyAgICAvLyB0aGUgZm9sbG93aW5nIHByb3BlcnRp
ZXM6CisgICAgLy8KKyAgICAvLyAtIElmIHNvbWVvbmUgd2FudHMgdG8gQ1NFIGEgbG9hZCBmcm9t
IHRoZSBoZWFwLCB0aGVuIGEgSGVhcExvY2F0aW9uIG9iamVjdCBzaG91bGQgYmUKKyAgICAvLyAg
IHN1ZmZpY2llbnQgdG8gZmluZCBhIHNpbmdsZSBtYXRjaGluZyBub2RlLgorICAgIC8vCisgICAg
Ly8gLSBUaGUgYWJzdHJhY3QgaGVhcCBpcyB0aGUgb25seSBhYnN0cmFjdCBoZWFwIHRoYXQgY291
bGQgYmUgY2xvYmJlcmVkIHRvIGludmFsaWRhdGUgYW55IHN1Y2gKKyAgICAvLyAgIENTRSBhdHRl
bXB0LiBJLmUuIGlmIGNsb2JiZXJpemUoKSByZXBvcnRzIHRoYXQgb24gZXZlcnkgcGF0aCBiZXR3
ZWVuIHNvbWUgbm9kZSBhbmQgYSBub2RlCisgICAgLy8gICB0aGF0IGRlZmluZXMgYSBIZWFwTG9j
YXRpb24gdGhhdCBpdCB3YW50ZWQsIHRoZXJlIHdlcmUgbm8gd3JpdGVzIHRvIGFueSBhYnN0cmFj
dCBoZWFwIHRoYXQKKyAgICAvLyAgIG92ZXJsYXAgdGhlIGxvY2F0aW9uJ3MgaGVhcCwgdGhlbiB3
ZSBoYXZlIGEgc291bmQgbWF0Y2guIEVmZmVjdGl2ZWx5LCB0aGUgc2VtYW50aWNzIG9mCisgICAg
Ly8gICB3cml0ZSgpIGFuZCBkZWYoKSBhcmUgaW50ZXJ0d2luZWQgc3VjaCB0aGF0IGZvciB0aGVt
IHRvIGJlIHNvdW5kIHRoZXkgbXVzdCBhZ3JlZSBvbiB3aGF0CisgICAgLy8gICBpcyBDU0VhYmxl
LgorCiAgICAgaWYgKGVkZ2VzVXNlU3RydWN0dXJlKGdyYXBoLCBub2RlKSkKICAgICAgICAgcmVh
ZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgIApAQCAtNzYsMjMgKzk1LDIzIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgICAg
IGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+Y29uc3RhbnQoKSkpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNh
c2UgSGFyZFBoYW50b206CisgICAgY2FzZSBDaGVjazoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAg
IGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAg
Y2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgotICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgY2FzZSBBcml0aFN1YjoKLSAgICBjYXNlIEFy
aXRoTmVnYXRlOgotICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgY2FzZSBBcml0aElNdWw6Ci0gICAg
Y2FzZSBBcml0aERpdjoKLSAgICBjYXNlIEFyaXRoTW9kOgogICAgIGNhc2UgQXJpdGhBYnM6CiAg
ICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgpAQCAtMTAwLDI4ICsxMTksNDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQXJp
dGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29zOgorICAgIGNh
c2UgVmFsdWVUb0ludDMyOgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBTa2lwU2NvcGU6
Ci0gICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAg
ICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50Ogog
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAg
ICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNh
c2UgSXNCb29sZWFuOgogICAgIGNhc2UgSXNOdW1iZXI6CiAgICAgY2FzZSBJc1N0cmluZzoKICAg
ICBjYXNlIExvZ2ljYWxOb3Q6Ci0gICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBj
YXNlIENoZWNrSW5Cb3VuZHM6Ci0gICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgotICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgotICAgIGNhc2Ug
Q2hlY2s6CiAgICAgY2FzZSBEb3VibGVSZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKICAgICBjYXNl
IEludDUyUmVwOgogICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9k
ZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgIGNhc2UgQXJp
dGhTdWI6CisgICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICBjYXNlIEFyaXRoTXVsOgorICAgIGNh
c2UgQXJpdGhEaXY6CisgICAgY2FzZSBBcml0aE1vZDoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6
CisgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBu
b2RlLT5hcml0aE1vZGUoKSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIENoZWNrRnVu
Y3Rpb246CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+ZnVuY3Rpb24oKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAg
ICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmV4ZWN1dGFibGUoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAg
ICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtMTQyLDcgKzE4MCw2IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENoZWNr
VGllclVwQXRSZXR1cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNh
c2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIEJyZWFr
cG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2Fs
bDoKQEAgLTE1MSw2ICsxODgsMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNo
cG9pbnRfZmlyZSksIG5vZGUpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIEZsdXNoOgog
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKICAg
ICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKQEAgLTE5NSwxMiArMjM3LDI0IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0
Y2hwb2ludDoKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElz
T2JqZWN0OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKElzT2JqZWN0TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgSXNGdW5jdGlvbjoKLSAgICBjYXNlIFR5
cGVPZjoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgVHlwZU9mOgorICAgICAgICByZWFkKE1p
c2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVPZkxvYywgTWlzY0ZpZWxk
cywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBH
ZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZDoKQEAgLTIy
MywyNyArMjc3LDMzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAgICAgICAgIHJlYWQoR2V0dGVyU2V0dGVy
X2dldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2V0dGVyTG9jLCBHZXR0ZXJTZXR0
ZXJfZ2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0U2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9zZXR0
ZXIpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNldHRlckxvYywgR2V0dGVyU2V0dGVyX3Nl
dHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldENhbGxlZToKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBHZXRB
cmd1bWVudDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2Nh
bCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlh
YmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9j
LCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewpAQCAtMjcz
LDExICszMzMsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRo
aXMgYXBwZWFycyB0byByZWFkIG5vdGhpbmcgYmVjYXVzZSBpdCdzIG9ubHkgcmVhZGluZyBpbW11
dGFibGUgZGF0YS4KKyAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQo
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7CiAg
ICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hp
bGQyKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTI4NSw2ICszNDcsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5n
dGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAg
ICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJ
bnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQo
V29ybGQpOwpAQCAtMjk2LDYgKzM1OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAg
ICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAg
LTMwNyw2ICszNzEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAg
ICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJl
YWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVz
LCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTMz
MCw4ICszOTUsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQ2NEFycmF5OgogICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5UHJvcGVydGllcyk7Ci0gICAg
ICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICByZWFk
KEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMp
OworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFR5cGVk
QXJyYXlQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzQyLDYgKzQwNyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxB
bGlhczogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAg
ICAgICBOb2RlKiBiYXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS5ub2RlKCk7Cisg
ICAgICAgIE5vZGUqIGluZGV4ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCk7
CisgICAgICAgIE5vZGUqIHZhbHVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2Rl
KCk7CiAgICAgICAgIHN3aXRjaCAobW9kZS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CkBAIC0zNjMsOSArNDMxLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKICAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVu
dHNfc2xvd0FyZ3VtZW50cyk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAg
ICAgICAgd3JpdGUoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpA
QCAtMzc4LDYgKzQ0Niw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhl
ZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgpAQCAtMzkwLDYgKzQ1OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdy
aXRlKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgYmFzZSwgaW5k
ZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKQEAgLTQwMiw2ICs0NzIsNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92
ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMpOwogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91
YmxlUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNDIw
LDkgKzQ5MSwxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJh
eUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAg
ICAgICAgICB3cml0ZShUeXBlZEFycmF5UHJvcGVydGllcyk7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2UgY2FuJ3QgZGVmKCkgYW55dGhpbmcgaGVyZSBiZWNhdXNlIHRoZXNlIG9wZXJhdGlvbnMg
dHJ1bmNhdGUgdGhlaXIgaW5wdXRzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MzAsNyArNTAy
LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICBjYXNlIEluc3RhbmNlT2Y6CiAg
ICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC00
NDIsMTIgKzUxMywxNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIHJlYWQoSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENoZWNrSGFzSW5zdGFuY2VMb2Ms
IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgcmVhZChKU0Z1bmN0
aW9uX2V4ZWN1dGFibGUpOworICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAgICAgcmVhZChKU0Nl
bGxfc3RydWN0dXJlSUQpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluc3RhbmNlT2ZMb2Ms
IEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
ICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgd3JpdGUoSlNDZWxs
X3R5cGVJbmZvVHlwZSk7CkBAIC00NTcsMTUgKzUzMCwxOCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7
CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEFycmF5aWZ5OgpAQCAt
NDc5LDQyICs1NTUsNTkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKLSAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6
U3RyaW5nKQorICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpT
dHJpbmcpIHsKKyAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJyYXlNb2Rl
KCkuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVhZChKU0FycmF5
QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICB9CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlz
Y0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICByZWFkKEpTQXJy
YXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbW9k
ZSk7Ci0gICAgICAgIHJlYWQoQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKLSAgICAgICAgcmVhZChB
cnJheUJ1ZmZlcl9kYXRhKTsKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5T2Zmc2V0OgotICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAg
ICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAg
ICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxv
YywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAgICAgCi0gICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlHZXRC
eU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJl
YWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQ
cm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIp
KTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICByZWFkKGhlYXAp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKICAg
ICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZWFkKEpTT2JqZWN0X2J1
dHRlcmZseSk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikpOworICAgICAgICBB
YnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBp
ZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCiAgICAg
ICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdy
aXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQ
cm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
OwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlcikpOworICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAg
QWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVyKTsKKyAg
ICAgICAgd3JpdGUoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0
eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwogICAg
ICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7
CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CkBAIC01MjUsNzgg
KzYxOCw4NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlf
cHVibGljTGVuZ3RoLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAg
IGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAg
ICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKTsKLSAgICAgICAgICAgIHJlYWQoQXJn
dW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9k
ZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5n
dGgpOworICAgICAgICAgICAgQVNTRVJUKG1vZGUudHlwZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBl
ZEFycmF5KTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlh
YmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2tpcFRvcFNjb3BlOgog
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdp
c3RlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU2tpcFRvcFNjb3BlTG9jLCBBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
bG9zdXJlUmVnaXN0ZXJzOgogICAgICAgICByZWFkKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlUmVnaXN0ZXJzTG9jLCBKU1Zhcmlh
YmxlT2JqZWN0X3JlZ2lzdGVycywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5v
ZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT52YXJOdW1iZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSwgbm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRl
LCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICByZXR1cm47CiAKLSAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5Ogog
ICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAg
IGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBDU0UgZm9yIHRo
ZXNlIG5vZGVzLiBXZSBjYW4ndCBkbyB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5v
IHdheQorICAgICAgICAvLyBmb3IgdXMgdG8gY2xhaW0gYW4gaW5kZXggbm9kZSBhbmQgYSB2YWx1
ZSBub2RlLiBXZSBjb3VsZCBtYWtlIHRoaXMgd29yayBpZiB3ZSBsb3dlcmVkCisgICAgICAgIC8v
IHRoZXNlIG5vZGVzIG9yIGlmIHdlIGhhZCBhIG1vcmUgZmxleGlibGUgd2F5IG9mIGRlZigpJ2lu
Zy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDczNworICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBP
YmplY3RDb3VudCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTmV3T2JqZWN0OgogICAg
IGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgIGNhc2UgTmV3
RnVuY3Rpb25Ob0NoZWNrOgotICAgIGNhc2UgTmV3RnVuY3Rpb246Ci0gICAgY2FzZSBOZXdGdW5j
dGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAg
d3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBj
YXNlIE5ld1R5cGVkQXJyYXk6CisgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgY2Fz
ZSBOZXdGdW5jdGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNl
IEludDMyVXNlOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6
Ci0gICAgICAgICAgICByZWFkKFdvcmxkKTsKLSAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNl
IFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpAQCAtNjA5LDYgKzcxMSw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHdyaXRlKFdvcmxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBk
ZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IENvbXBhcmVFcToKQEAgLTYxNiw4ICs3MTksMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgaWYgKCFub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpCisgICAgICAgIGlmICghbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUp
KTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICByZWFkKFdvcmxkKTsK
ICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICByZXR1cm47CkBAIC02MjYsNiArNzMxLDgg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIFN0cmluZ09iamVj
dFVzZToKICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICAgICAgICAg
IC8vIFRoZXNlIGRvbid0IGRlZiBhIHB1cmUgdmFsdWUsIHVuZm9ydHVuYXRlbHkuIEknbGwgYXZv
aWQgbG9hZC1lbGltaW5hdGluZyB0aGVzZSBmb3IKKyAgICAgICAgICAgIC8vIG5vdy4KICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENlbGxVc2U6CkBAIC02
NTIsMTAgKzc1OSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSk7CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE15QXJndW1lbnRzTGVu
Z3RoTG9jLCBWYXJpYWJsZXMpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKE15QXJndW1lbnRCeVZhbExvYywgVmFyaWFibGVzKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQ6CkBAIC02ODUsNyArNzk0LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogY2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BD
bG9iYmVyaXplKCkgeyB9Ci0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVC4uLj4KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9
CiB9OwogCiBjbGFzcyBDaGVja0Nsb2JiZXJpemUgewpAQCAtNjk1LDcgKzgwNSw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAp
IHsgbV9yZXN1bHQgPSB0cnVlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVC4uLj4KKyAgICB2
b2lkIG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29s
IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCkBAIC03MDMsNiArODE0
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzdWx0OwogfTsKIAorYm9vbCBpc1B1cmUoR3Jh
cGgmLCBOb2RlKik7IC8vIFB1cmUgbWVhbnMgaXQgZG9lcyBubyByZWFkcyBvciB3cml0ZXMuCiti
b29sIGhhc1B1cmVEZWZzKEdyYXBoJiwgTm9kZSopOyAvLyBIYXZpbmcgcHVyZSBkZWZzIG1lYW5z
IHRoYXQgcHVyZSBDU0UgaXMgcG9zc2libGUuCisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5v
ZGUqKTsKIAogY2xhc3MgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgewpAQCAtNzMwLDYgKzg0NCw3MiBA
QCBwcml2YXRlOgogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RI
ZWFwKTsKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwog
CisvLyBXZSB3b3VsZCBoYXZlIHVzZWQgYmluZCgpIGZvciB0aGVzZSwgYnV0IGJlY2F1c2Ugb2Yg
dGhlIG92ZXJsYW9kaW5nIHRoYXQgd2UgYXJlIGRvaW5nLAorLy8gaXQncyBxdWl0ZSBhIGJpdCBv
ZiBjbGVhcmVyIHRvIGp1c3Qgd3JpdGUgdGhpcyBvdXQgdGhlIHRyYWRpdGlvbmFsIHdheS4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFJlYWRNZXRob2RDbG9iYmVyaXplIHsKK3B1Ymxp
YzoKKyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0
SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5yZWFkKGhlYXApOworICAgIH0KK3By
aXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBXcml0ZU1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgorICAgIFdyaXRlTWV0aG9kQ2xvYmJl
cml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAg
ICAgbV92YWx1ZS53cml0ZShoZWFwKTsKKyAgICB9Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmTWV0aG9kQ2xvYmJlcml6ZSB7
CitwdWJsaWM6CisgICAgRGVmTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKFB1
cmVWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZGVmKHZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBZGFwdG9y
JiBhZGFwdG9yKQoreworICAgIFJlYWRNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHJlYWQoYWRh
cHRvcik7CisgICAgV3JpdGVNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHdyaXRlKGFkYXB0b3Ip
OworICAgIERlZk1ldGhvZENsb2JiZXJpemU8QWRhcHRvcj4gZGVmKGFkYXB0b3IpOworICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRlLCBkZWYpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcHJv
Y2VzcyB0aGUgZ3JhcGggaW4gcmV2ZXJzZSBERlMgb3JkZXIsIHNvIHRoYXQgd2UgZ2V0IHRvIHRo
ZSB1c2VzCiAgICAgICAgICAgICAvLyBvZiBhIG5vZGUgYmVmb3JlIHdlIGdldCB0byB0aGUgbm9k
ZSBpdHNlbGYuCiAgICAgICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0g
ICAgICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3Qp
OworICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5zaXplKCk7IGktLTspCiAg
ICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9t
LCBub2RlLT5vcmlnaW4sIGVkZ2UpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJl
ZkNvdW50KDEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM5LDI1ICs2
MzksNzUgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwogICAgIH0K
IH0KIAotdm9pZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sq
PiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFz
aWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKKy8vIFV0aWxpdGllcyBmb3IgcHJl
LSBhbmQgcG9zdC1vcmRlciB0cmF2ZXJzYWxzLgorbmFtZXNwYWNlIHsKKworaW5saW5lIHZvaWQg
YWRkRm9yUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNC
bG9jayosIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2sp
CiB7Ci0gICAgaWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgIGlmIChzZWVuLmdldChibG9j
ay0+aW5kZXgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgcmVzdWx0LmFwcGVuZChibG9j
ayk7CiAgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBzZWVuLmFkZChibG9jayk7Cisg
ICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsKIH0KIAotdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5E
ZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorZW51bSBQb3N0T3Jk
ZXJUYXNrS2luZCB7CisgICAgUG9zdE9yZGVyRmlyc3RWaXNpdCwKKyAgICBQb3N0T3JkZXJBZGRU
b1Jlc3VsdAorfTsKKworc3RydWN0IFBvc3RPcmRlclRhc2sgeworICAgIFBvc3RPcmRlclRhc2so
QmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBQb3N0T3JkZXJUYXNrS2luZCBraW5kID0gUG9z
dE9yZGVyRmlyc3RWaXNpdCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1f
a2luZChraW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
KyAgICBQb3N0T3JkZXJUYXNrS2luZCBtX2tpbmQ7Cit9OworCitpbmxpbmUgdm9pZCBhZGRGb3JQ
b3N0T3JkZXIoVmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYg
c2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRl
eCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVy
VGFzayhibG9jaywgUG9zdE9yZGVyRmlyc3RWaXNpdCkpOworICAgIHNlZW4uc2V0KGJsb2NrLT5p
bmRleCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIEdyYXBoOjpnZXRC
bG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKLSAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBz
ZWVuOwotICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJs
b2NrKDApKTsKKyAgICBCaXRWZWN0b3Igc2VlbjsKKyAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQs
IHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CiAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5
KCkpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQot
ICAgICAgICAgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2Vlbiwg
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQs
IHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkK
K3sKKyAgICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OworICAgIEJpdFZlY3Rv
ciBzZWVuOworICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOwor
ICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFBvc3RPcmRlclRhc2sg
dGFzayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIHN3aXRjaCAodGFzay5tX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgorICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJBZGRUb1Jlc3Vs
dCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVyKHdvcmtsaXN0
LCBzZWVuLCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQb3N0T3JkZXJBZGRUb1Jlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQodGFzay5tX2Jsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2Myw3ICs2NjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclJlcGxhY2Vt
ZW50cygpOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKICAgICAKLSAgICB2b2lk
IGdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXRCbG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQpOwogICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7
IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKQEAgLTc1MSw3ICs3NTIs
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcik7Ci0gICAgdm9pZCBhZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNC
bG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNl
dDxCYXNpY0Jsb2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29s
IHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50MzIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdIZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiLCBtX2hlYXApOwor
ICAgIAorICAgIGlmICghbV9iYXNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnBy
aW50KCJbIiwgbV9iYXNlKTsKKyAgICBpZiAobV9pbmRleCkKKyAgICAgICAgb3V0LnByaW50KCIs
ICIsIG1faW5kZXgpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2NhdGlvbktpbmQga2lu
ZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludmFsaWRMb2NhdGlvbktpbmQ6
CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnRMb2M6CisgICAgICAgIG91
dC5wcmludCgiSW52YWxpZGF0aW9uUG9pbnRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIElzT2JqZWN0TG9jOgorICAgICAgICBvdXQucHJpbnQoIklzT2JqZWN0TG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc0Z1bmN0aW9uTG9jOgor
ICAgICAgICBvdXQucHJpbnQoIklzRnVuY3Rpb25Mb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFR5cGVPZkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlT2ZMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldHRlckxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJHZXR0ZXJMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFNldHRlckxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXJMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlZhcmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheUxlbmd0aExvYzoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxlbmd0aExvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQnV0dGVyZmx5TG9jOgorICAgICAg
ICBvdXQucHJpbnQoIkJ1dHRlcmZseUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja0hh
c0luc3RhbmNlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9z
dXJlUmVnaXN0ZXJzTG9jOgorICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVSZWdpc3RlcnNMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVWYXJpYWJsZUxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlVmFyaWFibGVMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEdsb2JhbFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIkdsb2JhbFZhcmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBJbmRleGVkUHJvcGVydHlMb2M6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFBv
cnBlcnR5TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbmRleGVk
UHJvcGVydHlTdG9yYWdlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2VMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNl
T2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiSW5zdGFuY2VPZkxvYyIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgTXlBcmd1bWVudEJ5VmFsTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIk15QXJndW1lbnRCeVZhbExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgTXlBcmd1bWVudHNMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiTXlBcmd1
bWVudHNMZW5ndGhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5h
bWVkUHJvcGVydHlMb2M6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eUxvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2tpcFRvcFNjb3BlTG9jOgorICAg
ICAgICBvdXQucHJpbnQoIlNraXBUb3BTY29wZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHSGVhcExvY2F0aW9uX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisj
aW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2VudW0gTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkTG9jYXRpb25LaW5kLAorICAgIAorICAg
IEFycmF5TGVuZ3RoTG9jLAorICAgIEJ1dHRlcmZseUxvYywKKyAgICBDaGVja0hhc0luc3RhbmNl
TG9jLAorICAgIENsb3N1cmVSZWdpc3RlcnNMb2MsCisgICAgQ2xvc3VyZVZhcmlhYmxlTG9jLAor
ICAgIEdldHRlckxvYywKKyAgICBHbG9iYWxWYXJpYWJsZUxvYywKKyAgICBJbmRleGVkUHJvcGVy
dHlMb2MsCisgICAgSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywKKyAgICBJbnN0YW5jZU9mTG9j
LAorICAgIEludmFsaWRhdGlvblBvaW50TG9jLAorICAgIElzRnVuY3Rpb25Mb2MsCisgICAgSXNP
YmplY3RMb2MsCisgICAgTXlBcmd1bWVudEJ5VmFsTG9jLAorICAgIE15QXJndW1lbnRzTGVuZ3Ro
TG9jLAorICAgIE5hbWVkUHJvcGVydHlMb2MsCisgICAgU2V0dGVyTG9jLAorICAgIFNraXBUb3BT
Y29wZUxvYywKKyAgICBUeXBlT2ZMb2MsCisgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCisg
ICAgVmFyaWFibGVMb2MKK307CisKK2NsYXNzIEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAg
SGVhcExvY2F0aW9uKAorICAgICAgICBMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRMb2NhdGlv
bktpbmQsCisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwID0gQWJzdHJhY3RIZWFwKCksCisgICAg
ICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCBOb2RlKiBpbmRleCA9IG51bGxwdHIpCisgICAgICAg
IDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9iYXNl
KGJhc2UpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
a2luZCA9PSBJbnZhbGlkTG9jYXRpb25LaW5kKSA9PSAhaGVhcCk7CisgICAgICAgIEFTU0VSVCgh
IW1faGVhcCB8fCAhbV9iYXNlKTsKKyAgICAgICAgQVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7
CisgICAgfQorICAgIAorICAgIEhlYXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJh
Y3RIZWFwIGhlYXAsIEVkZ2UgYmFzZSwgRWRnZSBpbmRleCA9IEVkZ2UoKSkKKyAgICAgICAgOiBI
ZWFwTG9jYXRpb24oa2luZCwgaGVhcCwgYmFzZS5ub2RlKCksIGluZGV4Lm5vZGUoKSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV9raW5kKEludmFsaWRMb2NhdGlvbktpbmQpCisgICAgICAgICwg
bV9oZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fYmFzZShudWxs
cHRyKQorICAgICAgICAsIG1faW5kZXgobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1faGVhcDsgfQorICAgIAorICAgIExv
Y2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgQWJzdHJhY3RI
ZWFwIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29u
c3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgTm9kZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9raW5kICsgbV9oZWFwLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhh
c2gobV9pbmRleCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hl
YXAKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYm
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9oZWFwLmlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jYXRpb25LaW5kIG1f
a2luZDsKKyAgICBBYnN0cmFjdEhlYXAgbV9oZWFwOworICAgIE5vZGUqIG1fYmFzZTsKKyAgICBO
b2RlKiBtX2luZGV4OworfTsKKworc3RydWN0IEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSGVhcExvY2F0aW9uJiBhLCBjb25z
dCBIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6SGVhcExv
Y2F0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRp
b24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IHsgfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KwordHlwZWRlZiBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTm9kZSo+IEltcHVyZU1hcDsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsx
NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEZvciBtYXhpbXVtIHByb2ZpdCwgd2Ugd2FsayBi
bG9ja3MgaW4gREZTIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseQogICAgICAgICAv
LyB0ZW5kIHRvIGhvaXN0IGRvbWluYXRvcnMgYmVmb3JlIGRvbWluYXRlZXMuCiAgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJ
bkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJ
blByZU9yZGVyKGRlcHRoRmlyc3QpOwogICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3Aq
PiBsb29wU3RhY2s7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBmb3Ig
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MDkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzMsMTAgKzM3MywxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICB9Ci0KLSAgICB2b2lkIGNvbnZlcnRUb1BoYW50
b21VbmNoZWNrZWQoKQorICAgIAorICAgIHZvaWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIpCiAg
ICAgewotICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgY29u
dmVydFRvUGhhbnRvbSgpOworICAgICAgICByZXBsYWNlbWVudCA9IG90aGVyOwogICAgIH0KIAog
ICAgIHZvaWQgY29udmVydFRvSWRlbnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDE0ICsyNTAsMTQgQEAgUGxh
bjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICB2YWxpZGF0ZShk
ZmcpOwogICAgICAgICAKICAgICBwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKTsKLSAgICBw
ZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVyZm9ybUxDU0UoZGZnKTsKICAgICBwZXJmb3JtQXJndW1l
bnRzU2ltcGxpZmljYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsK
ICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwog
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBs
aWZpY2F0aW9uKGRmZyk7Ci0gICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAgY2hh
bmdlZCB8PSBwZXJmb3JtTENTRShkZmcpOwogICAgIAogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxl
ZCgpKQogICAgICAgICB2YWxpZGF0ZShkZmcpOwpAQCAtMzE2LDcgKzMxNiw3IEBAIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNQU1JldGhy
ZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1TU0FMb3dlcmluZyhkZmcpOwotICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAg
ICAgIHBlcmZvcm1HQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyhkZmcpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9y
bVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21iaW5p
bmcoZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR0NTRShk
ZmcpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBub3QgYWxsb3dl
ZCB0byBkbyBhbnkgZnVydGhlciBjb2RlIG1vdGlvbiBiZWNhdXNlIG91ciByZWFzb25pbmcKICAg
ICAgICAgLy8gYWJvdXQgY29kZSBtb3Rpb24gYXNzdW1lcyB0aGF0IGl0J3MgT0sgdG8gaW5zZXJ0
IEdDIHBvaW50cyBpbiByYW5kb20gcGxhY2VzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQdXJlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCit2b2lkIFB1cmVWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChHcmFwaDo6b3BOYW1lKG9wKCkpKTsKKyAgICBvdXQucHJpbnQoIigi
KTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICBpZiAoY2hpbGRyZW4oKS5jaGls
ZChpKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgY2hpbGRyZW4oKS5jaGlsZChpKSk7
CisgICAgfQorICAgIGlmIChtX2luZm8pCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9pbmZv
KTsKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHVyZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQdXJlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHVyZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQ
dXJlVmFsdWVfaAorI2RlZmluZSBERkdQdXJlVmFsdWVfaAorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgUHVyZVZhbHVlIHsKK3B1YmxpYzoKKyAgICBQdXJlVmFsdWUoKQorICAgICAg
ICA6IG1fb3AoTGFzdE5vZGVUeXBlKQorICAgICAgICAsIG1faW5mbygwKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbiwgdWludHB0cl90IGluZm8pCisgICAgICAgIDogbV9vcChvcCkKKyAgICAgICAgLCBt
X2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgfQor
ICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hp
bGRyZW4sIGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVu
LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwdHIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
UHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAg
ICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVuLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDAp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIHVpbnRwdHJf
dCBpbmZvKQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbiwg
aW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2RlLCBjb25z
dCB2b2lkKiBwdHIpCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxk
cmVuLCBwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSkK
KyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4pCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBlKQorICAgICAgICAsIG1faW5mbygxKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX29w
ID09IExhc3ROb2RlVHlwZSAmJiAhbV9pbmZvOyB9CisgICAgCisgICAgTm9kZVR5cGUgb3AoKSBj
b25zdCB7IHJldHVybiBtX29wOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgdWludHB0cl90IGluZm8oKSBjb25z
dCB7IHJldHVybiBtX2luZm87IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKHN0YXRpY19jYXN0PGludD4o
bV9vcCkpICsgbV9jaGlsZHJlbi5oYXNoKCkgKyBtX2luZm87CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBQdXJlVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb3AgPT0gb3RoZXIubV9vcAorICAgICAgICAgICAgJiYgbV9jaGlsZHJlbiA9
PSBvdGhlci5tX2NoaWxkcmVuCisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZv
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiBtX2luZm87Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRy
ZW47CisgICAgdWludHB0cl90IG1faW5mbzsKK307CisKK2NsYXNzIFB1cmVWYWx1ZUhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFB1cmVWYWx1ZSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHVyZVZhbHVlJiBhLCBj
b25zdCBQdXJlVmFsdWUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6REZHOjpQdXJlVmFsdWU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQdXJlVmFsdWUgSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHVyZVZhbHVlPiA6IFNpbXBsZUNsYXNz
SGFzaFRyYWl0czxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxQ
dXJlVmFsdWUsIE5vZGUqPiBQdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgVmVj
dG9yPE5vZGUqPj4gUHVyZU11bHRpTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1cmVWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIo
KTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKICAgICAgICAgICAg
IGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBh
ZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAgICAgICAgYmxv
Y2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogCiAgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmly
c3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVy
KGRlcHRoRmlyc3QpOwogCiAgICAgICAgIGludCBtYXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxv
Y2tJbmRleC0tOyApIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKICAgICBib29sIHJlbW92
ZShpdGVyYXRvcik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHJl
bW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIE1hcHBl
ZFR5cGUgdGFrZShjb25zdCBLZXlUeXBlJik7IC8vIGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBn
ZXQgd2l0aCByZW1vdmUKQEAgLTM1NCw2ICszNTYsMTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6cmVtbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZUlmKEZ1
bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgogaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNv
bnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL1dURi93dGYvSGFzaFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJlbW92ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJlbW92ZVdp
dGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgICAgICB2b2lkIHJlbW92ZUlmKEZ1bmN0b3ImKTsK
ICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlCdWNr
ZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1
ZTxLZXlUcmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOyB9CkBAIC0xMDMxLDYgKzEw
MzMsMjUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlSWYo
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGFi
bGVTaXplOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWZ1bmN0b3IobV90YWJsZVtpXSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlbGV0
ZUJ1Y2tldChtX3RhYmxlW2ldKTsKKyAgICAgICAgICAgICsrbV9kZWxldGVkQ291bnQ7CisgICAg
ICAgICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChz
aG91bGRTaHJpbmsoKSkKKyAgICAgICAgICAgIHNocmluaygpOworICAgICAgICAKKyAgICAgICAg
aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKGludCBzaXplKSAtPiBWYWx1ZVR5cGUqCiAg
ICAgewogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0
aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234668</attachid>
            <date>2014-07-09 16:37:11 -0700</date>
            <delta_ts>2014-07-09 22:10:05 -0700</delta_ts>
            <desc>it gcsed some stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>111849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExNCw2ICs1MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTcsNiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2Njcs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5j
bHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgpAQCAt
MzksOTg0ICs0MCwzMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1j
bGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CituYW1lc3BhY2UgeworCitjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBwdWJsaWM6Ci0gICAg
Q1NFUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1
YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RIZWFw
IGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0KICAgICAKLSAgICBi
b29sIHJ1bigpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFsdWVQ
YWlyVHlwZSYgcGFpcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRT
dGF0ZSAhPSBCZWZvcmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0
QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAgIHBlcmZvcm1CbG9j
a0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhw
YWlyLmtleS5oZWFwKCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgCi0gICAgdW5zaWdu
ZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
VUlOVF9NQVgpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9jayk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgTm9kZSogcHVyZUNTRShOb2Rl
KiBub2RlKQotICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5p
dGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQo
KTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0g
Y2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGlsZDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKK307CiAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IG90aGVyTm9kZS0+b3AoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgRWRnZSBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5z
YW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQx
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBv
dGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAg
IGlmICghb3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5j
aGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQg
IT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICAKLSAgICBOb2RlKiBjb25zdGFudENTRShOb2RlKiBub2RlKQoraW5saW5lIHZv
aWQgY2xvYmJlcihJbXB1cmVNYXAmIG1hcCwgQWJzdHJhY3RIZWFwIGhlYXApCit7CisgICAgQ2xv
YmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7CisgICAgbWFwLnJlbW92ZUlmKGZpbHRlcik7Cit9CisK
K2NsYXNzIExDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTENTRVBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxvY2FsIGNvbW1vbiBzdWJl
eHByZXNzaW9uIGVsaW1pbmF0aW9uIikKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5v
cCgpICE9IG5vZGUtPm9wKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNvbnN0YW50KCkgIT0gbm9kZS0+Y29uc3Rh
bnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgCi0gICAgTm9kZSogY29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRShOb2RlKiBub2RlKQor
ICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4
Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IENv
bnN0YW50U3RvcmFnZVBvaW50ZXIpCisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRT
dGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpOworICAg
ICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2dy
YXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPnN0b3JhZ2VQb2ludGVyKCkgIT0g
bm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIG1fcHVyZVZhbHVlcy5jbGVhcigpOworICAgICAgICAgICAgbV9pbXB1cmVWYWx1ZXMu
Y2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0Q2Fs
bGVlTG9hZEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGdldEFy
cmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZSogYXJyYXkpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
bWF5U3RvcmVUb0hvbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAg
ICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAgICAgICAgICAgIGNs
b2JiZXJpemUobV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2Vk
OwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIHZvaWQgcmVh
ZChBYnN0cmFjdEhlYXApIHsgfQogICAgIAotICAgIE5vZGUqIHNjb3BlZFZhckxvYWRFbGltaW5h
dGlvbihOb2RlKiByZWdpc3RlcnMsIGludCB2YXJOdW1iZXIpCisgICAgdm9pZCB3cml0ZShBYnN0
cmFjdEhlYXAgaGVhcCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIEdldENsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gcmVnaXN0ZXJzICYmIG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9IAotICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnZhck51bWJlcigpICE9IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVy
cykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAg
ICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBjbG9iYmVyKG1faW1wdXJlVmFsdWVzLCBo
ZWFwKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCB2YXJJbmplY3Rpb25XYXRjaHBvaW50RWxpbWlu
YXRpb24oKQorICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVmFySW5qZWN0aW9uV2F0Y2hwb2ludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQodmFsdWUsIG1fbm9kZSk7CisgICAgICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGdldEJ5VmFsTG9h
ZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSwgTm9kZSogY2hpbGQyLCBBcnJheU1vZGUgYXJyYXlN
b2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9PSBjaGlsZDIpIAotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5
VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAg
ICYmIG5vZGUtPmNoaWxkMigpID09IGNoaWxkMgotICAgICAgICAgICAgICAgICAgICAmJiBub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gYXJyYXlNb2RlLnR5cGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIC8vIFR5cGVkIGFycmF5cyAKLSAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJheSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYm
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkgPT0gY2hpbGQyCi0gICAgICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBhcnJheU1vZGUudHlwZSgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2Rl
KCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwg
d2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCi0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0
QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKLSAgICAgICAgICAgICAgICAvLyBkaWZm
ZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24n
dCBjbG9iYmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgLy8gLi4uIGV4Y2VwdCBvZiBj
b3Vyc2UgZm9yIHR5cGVkIGFycmF5cywgd2hlcmUgYWxsIHR5cGVkIGFycmF5cyBjbG9iYmVyIGFs
bCBvdGhlcgotICAgICAgICAgICAgICAgIC8vIHR5cGVkIGFycmF5cyEgIEFuIEludDMyQXJyYXkg
Y2FuIGFsaWFzIGEgRmxvYXQ2NEFycmF5IGZvciBleGFtcGxlLCBhbmQgc28gb24uCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgY2hl
Y2tGdW5jdGlvbkVsaW1pbmF0aW9uKEZyb3plblZhbHVlKiBmdW5jdGlvbiwgTm9kZSogY2hpbGQx
KQorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9kZS0+Y2hpbGQx
KCkgPT0gY2hpbGQxICYmIG5vZGUtPmZ1bmN0aW9uKCkgPT0gZnVuY3Rpb24pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1faW1wdXJlVmFsdWVzLmFkZChsb2NhdGlvbiwgdmFsdWUpOwor
ICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIGNoZWNr
RXhlY3V0YWJsZUVsaW1pbmF0aW9uKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBOb2RlKiBj
aGlsZDEpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVD
U0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYm
IG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0
YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9u
KGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlKiBjaGlsZDEpCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlm
IChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAg
ICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAg
ICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4
dCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVy
ZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFu
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3Np
YmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBj
aGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEFycmF5aWZ5OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBj
b3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQg
c2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgbV9jaGFu
Z2VkOwogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5h
dGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZSogY2hpbGQxKQotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9
PSBjaGlsZDEpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
LSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cyAhPSBz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEg
cHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53
cml0ZXNTdHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0
ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVz
ZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5Ogot
ICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIC8v
IFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3VyIHN0
cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3Vs
ZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIE5vZGUqIG1fbm9kZTsKICAgICAKLSAgICBOb2Rl
KiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiBiYXNlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgIFB1cmVNYXAgbV9wdXJlVmFsdWVzOworICAgIEltcHVyZU1hcCBtX2ltcHVyZVZhbHVl
czsKK307CiAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0g
YmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50
aWZpZXJOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aUdl
dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlCi0g
ICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCkgPT0gYmFzZSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2Uu
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2lu
ZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgs
IHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVs
aW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGJhc2UpCitjbGFzcyBH
Q1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEdDU0VQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Np
b24gZWxpbWluYXRpb24iKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRl
eEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51
bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZh
bCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAg
ICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3Ig
aXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2Rl
KiBnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIGJv
b2wgcnVuKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hp
bGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3Qn
cyBzdG9yYWdlLCB3ZQotICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0
cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSBjdXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdl
IG91ciBvYmplY3QncwotICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZh
dGl2ZWx5IGFzc3VtZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAg
ICAgICAvLyBwb2ludGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0
ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVz
ZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
Y291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVy
Zmx5LgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFr
ZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNs
ZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMo
KTsKKyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3Jh
cGgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwcmVPcmRlcjsKKyAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKHByZU9yZGVyKTsKKyAgICAgICAgCisg
ICAgICAgIG1faW1wdXJlRGF0YU1hcC5yZXNpemUobV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVyZWQgYnkg
YmxvY2tzLiBOb2RlIHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CisgICAgICAgIC8v
IGZvciBjb252ZW5pZW5jZSBvbmx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmVPcmRl
ci5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAg
ICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhd
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7
IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9j
ay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlv
bihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNo
aWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBCYXNl
ZCBvbiBteSBleHBlcmllbmNlIGRvaW5nIHRoaXMgYmVmb3JlLCB3aGF0IGZvbGxvd3MgbWlnaHQg
aGF2ZSB0byBiZSBtYWRlIGl0ZXJhdGl2ZS4KKyAgICAgICAgLy8gQnV0IGl0IGZlZWxzIGxpa2Us
IHJpZ2h0IG5vdywgdGhpcyB3b3JrcyBhcyBhIHNpbmdsZSBwYXNzIGJlY2F1c2Ugd2Ugb25seSB0
dXJuIGEgbm9kZQorICAgICAgICAvLyBpbnRvIGEgdmFsdWUgb3IgaGVhcCBsb2NhdGlvbiBhZnRl
ciB3ZSBoYXZlIHBlcmZvcm1lZCBzdWJzdGl0dXRpb25zIG9uIHRoYXQgbm9kZSdzCisgICAgICAg
IC8vIGNoaWxkcmVuLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByZU9yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJb
aV07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2st
PmluZGV4XTsKKyAgICAgICAgICAgIG1fd3JpdGVzU29GYXIuY2xlYXIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJv
Y2Vzc2luZyBibG9jayAiLCAqbV9ibG9jaywgIjpcbiIpOwogCi0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09
IGFycmF5TW9kZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5
OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3Vy
IGFycmF5LgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQg
dGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBtX25vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTG9va2lu
ZyBhdCBub2RlICIsIG1fbm9kZSwgIjpcbiIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVy
Zm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9n
cmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW1wdXJlRGF0YS0+ZGlkVmlzaXQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAg
fQogCi0gICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihO
b2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxk
MSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJh
eU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICB2b2lk
IHJlYWQoQWJzdHJhY3RIZWFwKSB7IH0KICAgICAKLSAgICBOb2RlKiBnZXRJbnRlcm5hbEZpZWxk
TG9hZEVsaW1pbmF0aW9uKE5vZGVUeXBlIG9wLCBOb2RlKiBjaGlsZDEpCisgICAgdm9pZCB3cml0
ZShBYnN0cmFjdEhlYXAgaGVhcCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gb3AgJiYgbm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotCi0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAK
LSAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAg
ICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuIGEgZGlmZmVyZW50IHNjb3BlLgot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2xvYmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVh
cCk7CisgICAgICAgIG1fd3JpdGVzU29GYXIuYWRkKGhlYXApOwogICAgIH0KICAgICAKLSAgICBO
b2RlKiBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUq
JiByZWxldmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKKyAgICB2b2lkIGRl
ZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSAwOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQodmFsdWUsIFZlY3RvcjxOb2Rl
Kj4oKSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVu
bGlua2VkOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9j
YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICAgICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkg
PT0gbG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZVtpXTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21p
bmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX25v
ZGUtPnJlcGxhY2VXaXRoKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChtX25vZGUpOwogICAgIH0KICAgICAKLSAgICBib29sIGludmFsaWRhdGlvblBv
aW50RWxpbWluYXRpb24oKQorICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24g
bG9jYXRpb24pCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEludmFsaWRhdGlvblBvaW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKHdyaXRlc092ZXJsYXAo
bV9ncmFwaCwgbm9kZSwgV2F0Y2hwb2ludF9maXJlKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgTm9kZSogbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5nZXQo
bG9jYXRpb24pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEZvdW5kIGxvY2FsIG1hdGNo
OiAiLCBtYXRjaCwgIlxuIik7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIHNldFJlcGxhY2Vt
ZW50KE5vZGUqIHJlcGxhY2VtZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudE5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgaWYgKG1fd3JpdGVzU29GYXIub3Zlcmxh
cHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgTm90IGxvb2tpbmcgZ2xvYmFsbHkgYmVjYXVz
ZSBvZiBsb2NhbCBjbG9iYmVyOiAiLCBtX3dyaXRlc1NvRmFyLCAiXG4iKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KLSAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICAgICAg
Ly8gVGhpcyBwZXJmb21zIGEgYmFja3dhcmQgc2VhcmNoIHRvIGZpbmQgc29tZSBwb3NzaWJsZSBk
ZWYoKSB0aGF0IG1hdGNoZXMgb3VyIGhlYXAKKyAgICAgICAgLy8gbG9jYXRpb24uIEFzIHNvb24g
YXMgaXQgZmluZHMgYSBwb3NzaWJsZSBkZWYoKSwgaXQgYXNzdW1lcyB0aGF0IHRoaXMgb25lIG11
c3QgYmUgdGhlCisgICAgICAgIC8vIG1hdGNoIGFuZCBjb21wbGV0ZXMgdGhlIHNlYXJjaCBieSBo
YWx0aW5nIGF0IHRoaXMgYmxvY2suIEFzIHNvb24gYXMgaXQgZmluZHMgYSB3cml0ZSgpCisgICAg
ICAgIC8vIHRoYXQgb3ZlcmxhcHMgdGhlIGxvY2F0aW9uJ3MgaGVhcCwgaXQgc3RvcHMsIGFzc3Vt
aW5nIHRoYXQgdGhlcmUgaXMgbm8gcG9zc2libGUgbWF0Y2guCiAgICAgICAgIAotICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDg+IHdvcmtsaXN0
OworICAgICAgICBCaXRWZWN0b3Igc2VlbjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnROb2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBw
aGFudG9tVHlwZSA9IFBoYW50b20pCi0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKHBoYW50b21UeXBlKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcGVyZm9ybU5v
ZGVDU0UoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1
dGlvbihub2RlKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHZp
c2l0IG91cnNlbHZlcy4gV2UgZG9taW5hdGUgb3Vyc2VsdmVzIGJ1dCB0aGVyZSdzIG5vCisgICAg
ICAgIC8vIHdheSB0aGF0IHdlJ3JlIGdvaW5nIHRvIG1hdGNoYWdhaW5zdCBhIGRlZigpIHRoYXQg
Y29tZXMgKmFmdGVyKiB0aGUgb25lIHdlJ3JlCisgICAgICAgIC8vIGluc3BlY3RpbmcuCisgICAg
ICAgIHNlZW4uc2V0KG1fYmxvY2stPmluZGV4KTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT5wcmVkZWNl
c3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
ciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgIGlmICghc2Vlbi5nZXQo
cHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChw
cmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vlbi5zZXQocHJlZGVjZXNzb3ItPmluZGV4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2FzZSBJZGVu
dGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
ICAgICAgIFNlYXJjaGluZyBpbiBibG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAgICAg
SW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07CiAg
ICAgICAgICAgICAKLSAgICAgICAgLy8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2Rl
cyBuZXZlciBoYXZlIGFueSBzaWRlLWVmZmVjdHMuCi0gICAgICAgIGNhc2UgQml0QW5kOgotICAg
ICAgICBjYXNlIEJpdE9yOgotICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgY2FzZSBCaXRS
U2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6
Ci0gICAgICAgIGNhc2UgQXJpdGhBYnM6Ci0gICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAg
IGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICBjYXNlIEFy
aXRoRlJvdW5kOgotICAgICAgICBjYXNlIEFyaXRoU2luOgotICAgICAgICBjYXNlIEFyaXRoQ29z
OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgotICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgotICAgICAgICBjYXNlIElzQm9vbGVhbjoK
LSAgICAgICAgY2FzZSBJc051bWJlcjoKLSAgICAgICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAg
Y2FzZSBJc09iamVjdDoKLSAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgotICAgICAgICBjYXNlIExv
Z2ljYWxOb3Q6Ci0gICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICBjYXNlIFNraXBT
Y29wZToKLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgotICAgICAgICBjYXNlIEdl
dFNjb3BlOgotICAgICAgICBjYXNlIFR5cGVPZjoKLSAgICAgICAgY2FzZSBDb21wYXJlRXFDb25z
dGFudDoKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgIGNhc2UgTWFrZVJvcGU6
Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwOgotICAgICAgICBjYXNlIFZhbHVlUmVwOgotICAgICAg
ICBjYXNlIEludDUyUmVwOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2Rl
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRo
QWRkOgotICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgot
ICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICBj
YXNlIEFyaXRoTW9kOgotICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICBjYXNl
IERvdWJsZUFzSW50MzI6IHsKLSAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IHB1cmVDU0Uo
bm9kZSk7Ci0gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmICghc3Vic3VtZXMoY2FuZGlkYXRlLT5hcml0aE1vZGUoKSwgbm9k
ZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhub2RlLT5h
cml0aE1vZGUoKSwgY2FuZGlkYXRlLT5hcml0aE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS0+c2V0QXJpdGhNb2RlKG5vZGUtPmFy
aXRoTW9kZSgpKTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoYmxvY2ssIG1fYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgICAgICBJdCBkb21pbmF0ZXMuXG4i
KTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRW
aXNpdCk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtYXRj
aCk7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5nZXQobG9j
YXRpb24pOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5OiAiLCBtYXRjaCwgIlxuIik7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IGV4YW1pbmUgdGhlIHByZWRlY2Vzc29ycyBvZiBhIG1hdGNoLiBBdCB0aGlzIHBvaW50IHdl
IGp1c3Qgd2FudCB0bworICAgICAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2ggdGhhdCBvdGhl
ciBibG9ja3Mgb24gdGhlIHBhdGggZnJvbSBoZXJlIHRvIHRoZXJlIGRvbid0IGNsb2JiZXIKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGxvY2F0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVl
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlKiBy
ZWxldmFudExvY2FsT3A7Ci0gICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0g
Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxl
dmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKLSAgICAgICAg
ICAgIGlmICghcmVsZXZhbnRMb2NhbE9wKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCi0gICAg
ICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2
YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAgICBpZiAoZGF0YS53cml0ZXMuY29udGFpbnMo
bG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICAgICAgQ2xvYmJlcmVkOiAiLCBkYXRh
LndyaXRlcywgIlxuIik7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwotICAgICAgICAgICAgaWYgKCFzZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2Vt
ZW50KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3ZSBy
ZXBsYWNlIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUg
R2V0TG9jYWxVbmxpbmtlZAotICAgICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgotICAgICAg
ICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKQotICAg
ICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRvR2V0TG9jYWwodmFyaWFibGVB
Y2Nlc3NEYXRhLCBwaGkpOwotCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcElnbm9yZWQ7
Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExvYWRFbGltaW5hdGlvbihub2Rl
LT51bmxpbmtlZExvY2FsKCksIHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OgotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICBjYXNlIEludDUy
Q29uc3RhbnQ6Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3Nhcnku
IFNvbWUgcGhhc2VzIHdpbGwgY29udmVydCBub2RlcyB0byBjb25zdGFudHMsCi0gICAgICAgICAg
ICAvLyB3aGljaCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NF
IHRvIGNsZWFuIHRoaXMgdXAuCi0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENT
RShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IENvbnN0YW50U3RvcmFnZVBvaW50ZXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25z
dGFudFN0b3JhZ2VQb2ludGVyQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbigpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0
IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCi0gICAgICAg
IC8vIGJlIENTRSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2Fu
dC4KLSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0Vx
OgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGUqIHJl
cGxhY2VtZW50ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1l
bnQgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChyZXBsYWNlbWVudCkpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgLy8g
RmluYWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBi
dXQgd2UgY2FuIHN0aWxsCi0gICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBz
b21lIHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCi0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIEdldENsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZh
ckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgVmFySW5q
ZWN0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmICh2YXJJbmplY3Rpb25XYXRjaHBvaW50
RWxpbWluYXRpb24oKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAg
ICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
Y2FuQ1NFU3RvcmFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBn
ZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEubm9kZSgpLCBjaGlsZDIubm9kZSgpLCBub2Rl
LT5hcnJheU1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoUHV0QnlW
YWxBbGlhcyk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlZW4u
Z2V0KHByZWRlY2Vzc29yLT5pbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3Qu
YXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5zZXQocHJlZGVj
ZXNzb3ItPmluZGV4KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2Rl
LT5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAg
ICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWlu
YXRpb24obm9kZS0+ZnVuY3Rpb24oKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgICAgIGlmIChjaGVja0V4
ZWN1dGFibGVFbGltaW5hdGlvbihub2RlLT5leGVjdXRhYmxlKCksIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAg
aWYgKGNoZWNrQXJyYXlFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmFy
cmF5TW9kZSgpKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZTogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0R2V0dGVyOgot
ICAgICAgICBjYXNlIEdldFNldHRlcjogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbihub2RlLT5vcCgpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBH
ZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3Jh
Z2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoZ2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbnZhbGlk
YXRpb25Qb2ludDoKLSAgICAgICAgICAgIGlmIChpbnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0aW9u
KCkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gZG8gbm90aGluZy4K
LSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2xhc3RT
ZWVuW25vZGUtPm9wKCldID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIHJldHVybiBtYXRjaDsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgR290IGhlYXAgbG9jYXRpb24gZGVm
OiAiLCBsb2NhdGlvbiwgIiAtPiAiLCB2YWx1ZSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBO
b2RlKiBtYXRjaCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbik7CiAgICAgICAgIAotICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTGFzdE5vZGVUeXBlOyArK2kpCi0gICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9N
QVg7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAg
ICAgR290IG1hdGNoOiAiLCBtYXRjaCwgIlxuIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKG1f
aW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fY3VycmVudE5vZGUpOwor
ICAgICAgICBpZiAoIW1hdGNoKSB7CisgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJs
ZUF0VGFpbC5zZXQobG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG1fY3Vy
cmVudEJsb2NrOwotICAgIE5vZGUqIG1fY3VycmVudE5vZGU7Ci0gICAgdW5zaWduZWQgbV9pbmRl
eEluQmxvY2s7Ci0gICAgc3RkOjphcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RT
ZWVuOwotICAgIGJvb2wgbV9jaGFuZ2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2
ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgorICAgIHN0cnVj
dCBJbXB1cmVCbG9ja0RhdGEgeworICAgICAgICBJbXB1cmVCbG9ja0RhdGEoKQorICAgICAgICAg
ICAgOiBkaWRWaXNpdChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFp
bDsKKyAgICAgICAgYm9vbCBkaWRWaXNpdDsKKyAgICB9OworICAgIAorICAgIFB1cmVNdWx0aU1h
cCBtX3B1cmVWYWx1ZXM7CisgICAgVmVjdG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVEYXRh
TWFwOworICAgIAorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9ub2RlOwor
ICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRhOworICAgIENsb2JiZXJTZXQgbV93cml0
ZXNTb0ZhcjsKKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsKIH07CiAKLWJvb2wgcGVyZm9ybUNT
RShHcmFwaCYgZ3JhcGgpCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3Jt
TENTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBMQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExDU0VQaGFzZT4oZ3JhcGgp
OworfQorCitib29sIHBlcmZvcm1HQ1NFKEdyYXBoJiBncmFwaCkKIHsKLSAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENTRSBQaGFzZSIpOwotICAgIHJldHVybiBydW5QaGFz
ZTxDU0VQaGFzZT4oZ3JhcGgpOworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgR0NTRSBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxHQ1NFUGhhc2U+KGdyYXBoKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2
aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJh
dGhlciBwcm9maXRhYmxlLiBJdCBoYXMgZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5k
IHdpbGwgbWF0Y2gKIC8vIGEgd2lkZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGll
cy4gSXQncyBrbm93biB0byBwcm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtz
LCBhbmQgaXMgcmVsYXRpdmVseSBjaGVhcCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgm
KTsKK2Jvb2wgcGVyZm9ybUxDU0UoR3JhcGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25s
eSB3b3JrcyBmb3IgU1NBLgorYm9vbCBwZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyU2V0LmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAg
SGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xv
YmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRl
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBO
b09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQs
IG5vT3AsIG5vT3ApOwogfQogCiB2b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7
CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdy
aXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7
CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQog
CiB2b2lkIGFkZFJlYWRzQW5kV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJl
clNldCYgcmVhZFNldCwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFk
ZCBhZGRSZWFkKHJlYWRTZXQpOwogICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQp
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBO
b09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQs
IGFkZFdyaXRlLCBub09wKTsKIH0KIAogYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFw
cyBhZGRSZWFkKHJlYWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJl
cml6ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5v
T3ApOwogICAgIHJldHVybiBhZGRSZWFkLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJs
YXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAg
ICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAg
Q2xvYmJlclNldE92ZXJsYXBzIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9k
ZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3Bw
CShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCitib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6
ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNz
LCBub09wKTsKKyAgICByZXR1cm4gIWFkZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQ
dXJlRGVmcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXpl
IGFkZFB1cmU7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBo
LCBub2RlLCBub09wLCBub09wLCBhZGRQdXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQo
KTsKK30KKwogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAg
ICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAg
Q2hlY2tDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFk
ZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRX
cml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFj
Y2Vzc2VzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFw
KQogeworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMg
YWRkQWNjZXNzKGhlYXApOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2Vzcywg
YWRkQWNjZXNzKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFj
Y2Vzcywgbm9PcCk7CiAgICAgcmV0dXJuIGFkZEFjY2Vzcy5yZXN1bHQoKTsKIH0KIAogYm9vbCB3
cml0ZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXAp
CiB7Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09w
OwogICAgIEFic3RyYWN0SGVhcE92ZXJsYXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBo
LCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3Vs
dCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgIkRG
R0Fic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRl
ICJERkdQdXJlVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQs
IFdyaXRlRnVuY3RvciYgd3JpdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlw
ZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3Rv
ciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8v
CkBAIC02OSw2ICs3MSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgLy8gICBwcmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2Jh
Ymx5IGNvdWxkIGJlIGlmIHdlIGRpZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAg
IAorICAgIC8vIFdoaWxlIHJlYWQoKSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFu
YXRvcnkgLSB0aGV5IHRyYWNrIHdoYXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUg
bWF5IHJlYWQgb3Igd3JpdGUgLSB0aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQg
dGVsbHMgeW91IHRoZSBoZWFwIGxvY2F0aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBo
ZWFwcykgdGhhdCBhcmUgZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlz
ZXMgYW4gYWJzdHJhY3QKKyAgICAvLyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktp
bmQuIEJyaWVmbHksIGEgbG9jYXRpb24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgor
ICAgIC8vIHdob3NlIHZhbHVlIGNhbiBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9k
ZSBpdHNlbGYuIFRoZSBsb2NhdGlvbnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZv
bGxvd2luZyBwcm9wZXJ0aWVzOgorICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRv
IENTRSBhIGxvYWQgZnJvbSB0aGUgaGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hv
dWxkIGJlCisgICAgLy8gICBzdWZmaWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9k
ZS4KKyAgICAvLworICAgIC8vIC0gVGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJh
Y3QgaGVhcCB0aGF0IGNvdWxkIGJlIGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisg
ICAgLy8gICBDU0UgYXR0ZW1wdC4gSS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9u
IGV2ZXJ5IHBhdGggYmV0d2VlbiBzb21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBk
ZWZpbmVzIGEgSGVhcExvY2F0aW9uIHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRl
cyB0byBhbnkgYWJzdHJhY3QgaGVhcCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlv
bidzIGhlYXAsIHRoZW4gd2UgaGF2ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNl
bWFudGljcyBvZgorICAgIC8vICAgd3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1
Y2ggdGhhdCBmb3IgdGhlbSB0byBiZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAg
IC8vICAgaXMgQ1NFYWJsZS4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9k
ZSkpCiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICs5
NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNv
bnN0YW50OgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2Ug
UGhhbnRvbToKICAgICBjYXNlIEhhcmRQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAgY2Fz
ZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBj
YXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNhc2Ug
Qml0TFNoaWZ0OgogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAg
ICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhT
dWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNhc2Ug
QXJpdGhJTXVsOgotICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAgICBj
YXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAg
LTEwMCwyOCArMTE5LDQ3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICBjYXNlIEFyaXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBB
cml0aENvczoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgogICAg
IGNhc2UgU2tpcFNjb3BlOgotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBDb21w
YXJlRXFDb25zdGFudDoKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJc1Vu
ZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAgIGNh
c2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91YmxlQXNJ
bnQzMjoKLSAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgVmFs
dWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICBk
ZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0aEFk
ZDoKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBB
cml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2Fz
ZSBEb3VibGVBc0ludDMyOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUt
PmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNr
RXhlY3V0YWJsZToKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRhYmxl
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3RvcmFn
ZVBvaW50ZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBvaW50
ZXIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAg
LTE0Miw3ICsxODAsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6
CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNh
c2UgUHJvZmlsZURpZENhbGw6CkBAIC0xNTEsNiArMTg4LDExIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAg
ICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlv
blBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgY2FzZSBGbHVzaDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT5sb2NhbCgpKSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CkBAIC0xOTUsMTIgKzIzNywy
NCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNl
IFZhckluamVjdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNo
cG9pbnQ6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCiAgICAgY2FzZSBJc09iamVjdDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJc09iamVjdExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rp
b246Ci0gICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoK
KyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBl
T2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVy
bjsKKwogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IFB1dEJ5SWQ6CkBAIC0yMjMsMjcgKzI3NywzMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICBy
ZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRl
ckxvYywgR2V0dGVyU2V0dGVyX2dldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChH
ZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2Ms
IEdldHRlclNldHRlcl9zZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxl
ZSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2Fs
OgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxl
TG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9j
YWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRM
b2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
QnlWYWw6IHsKQEAgLTI3MywxMSArMzMzLDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBv
bmx5IHJlYWRpbmcgaW1tdXRhYmxlIGRhdGEuCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50
c19yZWdpc3RlcnMpOwogICAgICAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgbm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0yODUsNiArMzQ3LDcgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAg
IHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlBy
b3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3Bl
cnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hp
bGQyKCkpLCBub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTI5Niw2ICszNTksNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwor
ICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRl
eGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9k
ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmVhZChXb3JsZCk7CkBAIC0zMDcsNiArMzcxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CkBAIC0zMzAsOCArMzk1LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVBy
b3BlcnRpZXMpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwot
ICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFBy
b3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM0Miw2ICs0MDcsOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5h
cnJheU1vZGUoKTsKKyAgICAgICAgTm9kZSogYmFzZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLm5vZGUoKTsKKyAgICAgICAgTm9kZSogaW5kZXggPSBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIHZhbHVlID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikubm9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBj
YXNlIEFycmF5OjpVbnByb2ZpbGVkOgpAQCAtMzYzLDkgKzQzMSw5IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJl
YWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKICAgICAgICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKQEAgLTM3OCw2ICs0NDYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwog
ICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdy
aXRlKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4
KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKQEAgLTM5MCw2ICs0NTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CiAgICAg
ICAgICAgICB3cml0ZShJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMs
IGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CkBAIC00MDIsNiArNDcyLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3Vv
dXNQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKQEAgLTQyMCw5ICs0OTEsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0g
ICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICBy
ZWFkKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVs
ZHMpOwogICAgICAgICAgICAgd3JpdGUoVHlwZWRBcnJheVByb3BlcnRpZXMpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIGNhbid0IGRlZigpIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB0aGVzZSBv
cGVyYXRpb25zIHRydW5jYXRlIHRoZWlyIGlucHV0cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3MzcKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NDMwLDcgKzUwMiw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBJbnN0
YW5jZU9mOgogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDQyLDEyICs1MTMsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogCiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICByZWFkKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDaGVja0hhc0lu
c3RhbmNlTG9jLCBKU0NlbGxfdHlwZUluZm9GbGFncywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIHJl
YWQoSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAg
IHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0
YW5jZU9mTG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdy
aXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUpOwpAQCAtNDU3LDE1ICs1MzAsMTggQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9i
dXR0ZXJmbHkpOwogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5j
aGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eWlmeToKQEAgLTQ3OSw0MiArNTU1LDU5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OlN0cmluZykKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9
PSBBcnJheTo6U3RyaW5nKSB7CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUt
PmFycmF5TW9kZSgpLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJl
YWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKKyAgICAgICAgfQorICAgICAgICByZWFkKE1p
c2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2VMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAg
cmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICByZWFkKEpTQXJyYXlCdWZm
ZXJWaWV3X21vZGUpOwotICAgICAgICByZWFkKEJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7Ci0gICAg
ICAgIHJlYWQoQXJyYXlCdWZmZXJfZGF0YSk7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsIE1pc2NGaWVs
ZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogot
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOwor
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICByZWFkKGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVk
UHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNl
IE11bHRpR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwog
ICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlm
aWVyTnVtYmVyKSk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywg
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAg
cmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBo
ZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAg
ICAgICAKLSAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OiB7CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmVhZChK
U09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpKTsK
KyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsK
ICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJl
cygpKQogICAgICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgaWYg
KG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCiAgICAg
ICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQ
dXRCeU9mZnNldDoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywg
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7
CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51
bWJlcik7CisgICAgICAgIHdyaXRlKGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5h
bWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQzKCkubm9k
ZSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwpA
QCAtNTI1LDc4ICs2MTgsODcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywg
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Cisg
ICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19vdmVycmlkZUxlbmd0aCk7Ci0gICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmll
bGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NG
aWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZl
clZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkg
IT0gTm90VHlwZWRBcnJheSk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVD
aGFpbikpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNraXBU
b3BTY29wZToKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNraXBUb3BTY29w
ZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkp
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICAgICAgcmVhZChKU1ZhcmlhYmxlT2JqZWN0
X3JlZ2lzdGVycyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xv
YywgSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFy
aWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygp
Lm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBB
YnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBO
ZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAgY2FzZSBOZXdBcnJheUJ1
ZmZlcjoKKyAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBFbmFibGUg
Q1NFIGZvciB0aGVzZSBub2Rlcy4gV2UgY2FuJ3QgZG8gdGhpcyByaWdodCBub3cgYmVjYXVzZSB0
aGVyZSBpcyBubyB3YXkKKyAgICAgICAgLy8gZm9yIHVzIHRvIGNsYWltIGFuIGluZGV4IG5vZGUg
YW5kIGEgdmFsdWUgbm9kZS4gV2UgY291bGQgbWFrZSB0aGlzIHdvcmsgaWYgd2UgbG93ZXJlZAor
ICAgICAgICAvLyB0aGVzZSBub2RlcyBvciBpZiB3ZSBoYWQgYSBtb3JlIGZsZXhpYmxlIHdheSBv
ZiBkZWYoKSdpbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzQ3MzcKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3
cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09i
amVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAg
ICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uOgotICAgIGNh
c2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7
CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNr
OgorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246
CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVj
dENvdW50KTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOgotICAgICAgICAgICAgcmVhZChXb3JsZCk7Ci0gICAgICAgICAgICB3cml0ZShX
b3JsZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAorICAgICAgICByZXR1cm47CisKICAgICBjYXNlIFJlZ0V4cEV4ZWM6
CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKQEAgLTYw
OSw2ICs3MTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBDb21wYXJlRXE6CkBAIC02MTYsOCArNzE5LDEwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAg
IGlmICghbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKQorICAgICAgICBpZiAoIW5v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAgICAgICAgZGVmKFB1cmVW
YWx1ZShub2RlKSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgcmVh
ZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKFdvcmxkKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjI2
LDYgKzczMSw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBT
dHJpbmdPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6Cisg
ICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBkZWYgYSBwdXJlIHZhbHVlLCB1bmZvcnR1bmF0ZWx5
LiBJJ2xsIGF2b2lkIGxvYWQtZWxpbWluYXRpbmcgdGhlc2UgZm9yCisgICAgICAgICAgICAvLyBu
b3cuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDZWxs
VXNlOgpAQCAtNjUyLDEwICs3NTksMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihNeUFy
Z3VtZW50c0xlbmd0aExvYywgVmFyaWFibGVzKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIHJlYWQoVmFyaWFi
bGVzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihNeUFyZ3VtZW50QnlWYWxMb2MsIFZhcmlh
YmxlcyksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tB
cmd1bWVudHNOb3RDcmVhdGVkOgpAQCAtNjg1LDcgKzc5NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKIHB1YmxpYzoK
ICAgICBOb09wQ2xvYmJlcml6ZSgpIHsgfQotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhl
YXApIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+CisgICAgdm9pZCBvcGVyYXRvcigp
KFQuLi4pIHsgfQogfTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTY5NSw3ICs4MDUs
OCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJz
dHJhY3RIZWFwKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+CisgICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIHsgbV9yZXN1bHQgPSB0cnVlOyB9CiAgICAg
CiAgICAgYm9vbCByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogICAgIApAQCAt
NzAzLDYgKzgxNCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc3VsdDsKIH07CiAKK2Jvb2wg
aXNQdXJlKEdyYXBoJiwgTm9kZSopOyAvLyBQdXJlIG1lYW5zIGl0IGRvZXMgbm8gcmVhZHMgb3Ig
d3JpdGVzLgorYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYsIE5vZGUqKTsgLy8gSGF2aW5nIHB1cmUg
ZGVmcyBtZWFucyB0aGF0IHB1cmUgQ1NFIGlzIHBvc3NpYmxlLgorCiBib29sIGRvZXNXcml0ZXMo
R3JhcGgmLCBOb2RlKik7CiAKIGNsYXNzIEFic3RyYWN0SGVhcE92ZXJsYXBzIHsKQEAgLTczMCw2
ICs4NDQsNzIgQEAgcHJpdmF0ZToKIGJvb2wgYWNjZXNzZXNPdmVybGFwKEdyYXBoJiwgTm9kZSos
IEFic3RyYWN0SGVhcCk7CiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJh
Y3RIZWFwKTsKIAorLy8gV2Ugd291bGQgaGF2ZSB1c2VkIGJpbmQoKSBmb3IgdGhlc2UsIGJ1dCBi
ZWNhdXNlIG9mIHRoZSBvdmVybGFvZGluZyB0aGF0IHdlIGFyZSBkb2luZywKKy8vIGl0J3MgcXVp
dGUgYSBiaXQgb2YgY2xlYXJlciB0byBqdXN0IHdyaXRlIHRoaXMgb3V0IHRoZSB0cmFkaXRpb25h
bCB3YXkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBSZWFkTWV0aG9kQ2xvYmJlcml6
ZSB7CitwdWJsaWM6CisgICAgUmVhZE1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUucmVhZChoZWFwKTsK
KyAgICB9Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgV3JpdGVNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBXcml0ZU1l
dGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAg
ICB7CisgICAgICAgIG1fdmFsdWUud3JpdGUoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBU
JiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZk1ldGhvZENs
b2JiZXJpemUgeworcHVibGljOgorICAgIERlZk1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3Bl
cmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3ZhbHVlLmRlZih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRp
b24sIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX3ZhbHVlLmRlZihsb2NhdGlvbiwgbm9k
ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgQWRhcHRvciYgYWRhcHRvcikKK3sKKyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9y
PiByZWFkKGFkYXB0b3IpOworICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiB3cml0
ZShhZGFwdG9yKTsKKyAgICBEZWZNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IGRlZihhZGFwdG9y
KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCByZWFkLCB3cml0ZSwgZGVmKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24g
MTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBO
ZWVkIHRvIHByb2Nlc3MgdGhlIGdyYXBoIGluIHJldmVyc2UgREZTIG9yZGVyLCBzbyB0aGF0IHdl
IGdldCB0byB0aGUgdXNlcwogICAgICAgICAgICAgLy8gb2YgYSBub2RlIGJlZm9yZSB3ZSBnZXQg
dG8gdGhlIG5vZGUgaXRzZWxmLgogICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0
aEZpcnN0OwotICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihk
ZXB0aEZpcnN0KTsKKyAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0
aEZpcnN0KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6ZSgp
OyBpLS07KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2luLCBlZGdlKTsKICAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzOSwyNSArNjM5LDc1IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Js
b2MKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxC
YXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBI
YXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCisvLyBVdGlsaXRp
ZXMgZm9yIHByZS0gYW5kIHBvc3Qtb3JkZXIgdHJhdmVyc2Fscy4KK25hbWVzcGFjZSB7CisKK2lu
bGluZSB2b2lkIGFkZEZvclByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVj
dG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxv
Y2sqIGJsb2NrKQogewotICAgIGlmIChzZWVuLmNvbnRhaW5zKGJsb2NrKSkKKyAgICBpZiAoc2Vl
bi5nZXQoYmxvY2stPmluZGV4KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHJlc3VsdC5h
cHBlbmQoYmxvY2spOwogICAgIHdvcmtsaXN0LmFwcGVuZChibG9jayk7Ci0gICAgc2Vlbi5hZGQo
YmxvY2spOworICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6Omdl
dEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK2Vu
dW0gUG9zdE9yZGVyVGFza0tpbmQgeworICAgIFBvc3RPcmRlckZpcnN0VmlzaXQsCisgICAgUG9z
dE9yZGVyQWRkVG9SZXN1bHQKK307CisKK3N0cnVjdCBQb3N0T3JkZXJUYXNrIHsKKyAgICBQb3N0
T3JkZXJUYXNrKEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgUG9zdE9yZGVyVGFza0tpbmQg
a2luZCA9IFBvc3RPcmRlckZpcnN0VmlzaXQpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7CisgICAgUG9zdE9yZGVyVGFza0tpbmQgbV9raW5kOworfTsKKworaW5saW5lIHZv
aWQgYWRkRm9yUG9zdE9yZGVyKFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAxNj4mIHdvcmtsaXN0LCBC
aXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmdldChi
bG9jay0+aW5kZXgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd29ya2xpc3QuYXBwZW5k
KFBvc3RPcmRlclRhc2soYmxvY2ssIFBvc3RPcmRlckZpcnN0VmlzaXQpKTsKKyAgICBzZWVuLnNl
dChibG9jay0+aW5kZXgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBH
cmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7
CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgSGFzaFNldDxCYXNp
Y0Jsb2NrKj4gc2VlbjsKLSAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0
LCBzZWVuLCBibG9jaygwKSk7CisgICAgQml0VmVjdG9yIHNlZW47CisgICAgYWRkRm9yUHJlT3Jk
ZXIocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOwogICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgaS0tOykKLSAgICAgICAgICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xp
c3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAgICAgYWRkRm9yUHJlT3Jk
ZXIocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQor
fQorCit2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+
JiByZXN1bHQpCit7CisgICAgVmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2PiB3b3JrbGlzdDsKKyAg
ICBCaXRWZWN0b3Igc2VlbjsKKyAgICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIGJs
b2NrKDApKTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBQb3N0
T3JkZXJUYXNrIHRhc2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKHRh
c2subV9raW5kKSB7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyRmlyc3RWaXNpdDoKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKHRhc2subV9ibG9jaywgUG9zdE9yZGVy
QWRkVG9SZXN1bHQpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhc2subV9ibG9j
ay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIGFkZEZvclBvc3RPcmRl
cih3b3JrbGlzdCwgc2VlbiwgdGFzay5tX2Jsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NjMsNyArNjYzLDggQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJSZXBsYWNlbWVudHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7CiAgICAg
Ci0gICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+
JiByZXN1bHQpOworICAgIHZvaWQgZ2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcmVzdWx0KTsKICAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBp
bGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCkBAIC03
NTEsNyArNzUyLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IpOwotICAgIHZvaWQgYWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xp
c3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKik7CiAgICAgCiAgICAg
QWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKE5vZGUq
IGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBpbW1lZGlhdGUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEhlYXBMb2NhdGlvbjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6Iiwg
bV9oZWFwKTsKKyAgICAKKyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG91dC5wcmludCgiWyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91
dC5wcmludCgiLCAiLCBtX2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jYXRp
b25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9j
YXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJ
c09iamVjdExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5j
dGlvbkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgi
VHlwZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXR0ZXJM
b2M6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlMZW5n
dGhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZseUxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2VMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiQ2hlY2tIYXNJbnN0YW5jZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgQ2xvc3VyZVJlZ2lzdGVyc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlUmVn
aXN0ZXJzTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJl
VmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxlTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJpYWJsZUxvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQo
IkluZGV4ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
UHJvcGVydHlTdG9yYWdlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBJbnN0YW5jZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluc3RhbmNlT2ZMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRCeVZhbExvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJNeUFyZ3VtZW50QnlWYWxMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRzTGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJp
bnQoIk15QXJndW1lbnRzTGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVy
dHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNraXBUb3BTY29w
ZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jOgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0hlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR0hlYXBM
b2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0
SGVhcC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitlbnVtIExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZExvY2F0aW9uS2luZCwK
KyAgICAKKyAgICBBcnJheUxlbmd0aExvYywKKyAgICBCdXR0ZXJmbHlMb2MsCisgICAgQ2hlY2tI
YXNJbnN0YW5jZUxvYywKKyAgICBDbG9zdXJlUmVnaXN0ZXJzTG9jLAorICAgIENsb3N1cmVWYXJp
YWJsZUxvYywKKyAgICBHZXR0ZXJMb2MsCisgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSW5k
ZXhlZFByb3BlcnR5TG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsCisgICAgSW5z
dGFuY2VPZkxvYywKKyAgICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc0Z1bmN0aW9uTG9j
LAorICAgIElzT2JqZWN0TG9jLAorICAgIE15QXJndW1lbnRCeVZhbExvYywKKyAgICBNeUFyZ3Vt
ZW50c0xlbmd0aExvYywKKyAgICBOYW1lZFByb3BlcnR5TG9jLAorICAgIFNldHRlckxvYywKKyAg
ICBTa2lwVG9wU2NvcGVMb2MsCisgICAgVHlwZU9mTG9jLAorICAgIFR5cGVkQXJyYXlCeXRlT2Zm
c2V0TG9jLAorICAgIFZhcmlhYmxlTG9jCit9OworCitjbGFzcyBIZWFwTG9jYXRpb24geworcHVi
bGljOgorICAgIEhlYXBMb2NhdGlvbigKKyAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZh
bGlkTG9jYXRpb25LaW5kLAorICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0SGVh
cCgpLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxscHRy
KQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faGVhcChoZWFwKQorICAgICAg
ICAsIG1fYmFzZShiYXNlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGtpbmQgPT0gSW52YWxpZExvY2F0aW9uS2luZCkgPT0gIWhlYXApOworICAgICAg
ICBBU1NFUlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CisgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwg
IW1faW5kZXgpOworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtp
bmQsIEFic3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCisg
ICAgICAgIDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2Rl
KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkTG9jYXRpb25LaW5kKQor
ICAgICAgICAsIG1faGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBt
X2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX2luZGV4KG51bGxwdHIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYXA7IH0KKyAg
ICAKKyAgICBMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAg
IEFic3RyYWN0SGVhcCBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgTm9kZSog
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIE5vZGUqIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faGVhcC5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8
Tm9kZSo+OjpoYXNoKG1faW5kZXgpICsgbV9raW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2hlYXAgPT0g
b3RoZXIubV9oZWFwCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAg
ICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faGVhcC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIExvY2F0
aW9uS2luZCBtX2tpbmQ7CisgICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKKyAgICBOb2RlKiBtX2Jh
c2U7CisgICAgTm9kZSogbV9pbmRleDsKK307CisKK3N0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1
cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEhlYXBMb2NhdGlv
biYgYSwgY29uc3QgSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6TG9jYXRpb25LaW5kKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpE
Rkc6OkhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6
SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0
aW9uPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordHlwZWRlZiBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTm9kZSo+IEltcHVyZU1hcDsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3
ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEZvciBtYXhpbXVtIHByb2ZpdCwgd2Ugd2Fs
ayBibG9ja3MgaW4gREZTIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseQogICAgICAg
ICAvLyB0ZW5kIHRvIGhvaXN0IGRvbWluYXRvcnMgYmVmb3JlIGRvbWluYXRlZXMuCiAgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9j
a3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9j
a3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwogICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExv
b3AqPiBsb29wU3RhY2s7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBm
b3IgKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MDky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzMsMTAgKzM3MywxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICB9Ci0KLSAgICB2b2lkIGNvbnZlcnRUb1Bo
YW50b21VbmNoZWNrZWQoKQorICAgIAorICAgIHZvaWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIp
CiAgICAgewotICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAg
Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICByZXBsYWNlbWVudCA9IG90aGVyOwogICAgIH0K
IAogICAgIHZvaWQgY29udmVydFRvSWRlbnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDE0ICsyNTAsMTQgQEAg
UGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICB2YWxpZGF0
ZShkZmcpOwogICAgICAgICAKICAgICBwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKTsKLSAg
ICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVyZm9ybUxDU0UoZGZnKTsKICAgICBwZXJmb3JtQXJn
dW1lbnRzU2ltcGxpZmljYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZn
KTsKICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcp
OwogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1Np
bXBsaWZpY2F0aW9uKGRmZyk7Ci0gICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAg
Y2hhbmdlZCB8PSBwZXJmb3JtTENTRShkZmcpOwogICAgIAogICAgIGlmICh2YWxpZGF0aW9uRW5h
YmxlZCgpKQogICAgICAgICB2YWxpZGF0ZShkZmcpOwpAQCAtMzE2LDcgKzMxNiw3IEBAIFBsYW46
OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNQU1Jl
dGhyZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1TU0FMb3dlcmluZyhkZmcpOwotICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7Cisg
ICAgICAgIHBlcmZvcm1HQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhkZmcpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVy
Zm9ybVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21i
aW5pbmcoZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR0NT
RShkZmcpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBub3QgYWxs
b3dlZCB0byBkbyBhbnkgZnVydGhlciBjb2RlIG1vdGlvbiBiZWNhdXNlIG91ciByZWFzb25pbmcK
ICAgICAgICAgLy8gYWJvdXQgY29kZSBtb3Rpb24gYXNzdW1lcyB0aGF0IGl0J3MgT0sgdG8gaW5z
ZXJ0IEdDIHBvaW50cyBpbiByYW5kb20gcGxhY2VzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIFB1cmVWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChHcmFwaDo6b3BOYW1lKG9wKCkpKTsKKyAgICBvdXQucHJpbnQo
IigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICBpZiAoY2hpbGRyZW4oKS5j
aGlsZChpKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgY2hpbGRyZW4oKS5jaGlsZChp
KSk7CisgICAgfQorICAgIGlmIChtX2luZm8pCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9p
bmZvKTsKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdQdXJlVmFsdWVfaAorI2RlZmluZSBERkdQdXJlVmFsdWVfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgUHVyZVZhbHVlIHsKK3B1YmxpYzoKKyAgICBQdXJlVmFsdWUoKQorICAg
ICAgICA6IG1fb3AoTGFzdE5vZGVUeXBlKQorICAgICAgICAsIG1faW5mbygwKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0
JiBjaGlsZHJlbiwgdWludHB0cl90IGluZm8pCisgICAgICAgIDogbV9vcChvcCkKKyAgICAgICAg
LCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAg
fQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5TGlzdCYg
Y2hpbGRyZW4sIGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxk
cmVuLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwdHIpKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikK
KyAgICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVuLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDApKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIHVpbnRw
dHJfdCBpbmZvKQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJl
biwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2RlLCBj
b25zdCB2b2lkKiBwdHIpCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNo
aWxkcmVuLCBwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9k
ZSkKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4pCisgICAg
eworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBlKQorICAgICAgICAsIG1faW5mbygxKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBt
X29wID09IExhc3ROb2RlVHlwZSAmJiAhbV9pbmZvOyB9CisgICAgCisgICAgTm9kZVR5cGUgb3Ao
KSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgdWludHB0cl90IGluZm8oKSBj
b25zdCB7IHJldHVybiBtX2luZm87IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKHN0YXRpY19jYXN0PGlu
dD4obV9vcCkpICsgbV9jaGlsZHJlbi5oYXNoKCkgKyBtX2luZm87CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXJlVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3AgPT0gb3RoZXIubV9vcAorICAgICAgICAgICAgJiYgbV9jaGlsZHJl
biA9PSBvdGhlci5tX2NoaWxkcmVuCisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9p
bmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiBtX2luZm87
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hp
bGRyZW47CisgICAgdWludHB0cl90IG1faW5mbzsKK307CisKK3N0cnVjdCBQdXJlVmFsdWVIYXNo
IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQdXJlVmFsdWUmIGtleSkgeyByZXR1
cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFB1cmVWYWx1ZSYg
YSwgY29uc3QgUHVyZVZhbHVlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHVyZVZhbHVl
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IHsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hNYXA8
UHVyZVZhbHVlLCBOb2RlKj4gUHVyZU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIFZl
Y3RvcjxOb2RlKj4+IFB1cmVNdWx0aU1hcDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQdXJlVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICsz
OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNsZWFy
KCk7CiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CiAgICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhID0g
YWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6OlNTQURhdGEoYmxvY2spKTsKKyAgICAgICAgICAgIGJs
b2NrLT5zc2EgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5jbGVhcigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVi
bGljOgogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKIAogICAgICAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZp
cnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRl
cihkZXB0aEZpcnN0KTsKIAogICAgICAgICBpbnQgbWF4TnVtYmVyT2ZBcmd1bWVudHMgPSAtMTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZGVwdGhGaXJzdC5zaXplKCk7IGJs
b2NrSW5kZXgtLTsgKSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOCBAQCBw
dWJsaWM6CiAKICAgICBib29sIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CiAgICAgYm9vbCByZW1v
dmUoaXRlcmF0b3IpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBy
ZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBNYXBw
ZWRUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYpOyAvLyBlZmZpY2llbnQgY29tYmluYXRpb24gb2Yg
Z2V0IHdpdGggcmVtb3ZlCkBAIC0zNTQsNiArMzU2LDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnJlbW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihG
dW5jdG9yJiBmdW5jdG9yKQoreworICAgIG1faW1wbC5yZW1vdmVJZihmdW5jdG9yKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShj
b25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKGtleSkpOwpJbmRl
eDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKICAgICAgICAgdm9pZCByZW1vdmVXaXRo
b3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yKTsKICAgICAgICAgdm9pZCByZW1vdmVX
aXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICAgICAgdm9pZCByZW1vdmVJZihGdW5jdG9yJik7
CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVj
a2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFs
dWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsgfQpAQCAtMTAzMSw2ICsx
MDMzLDI4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUlm
KEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Rh
YmxlU2l6ZTsgaS0tOykgeworICAgICAgICAgICAgaWYgKGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQo
bV90YWJsZVtpXSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghZnVuY3RvcihtX3RhYmxlW2ldKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVsZXRlQnVja2V0KG1fdGFibGVbaV0p
OworICAgICAgICAgICAgKyttX2RlbGV0ZWRDb3VudDsKKyAgICAgICAgICAgIC0tbV9rZXlDb3Vu
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQorICAg
ICAgICAgICAgc2hyaW5rKCk7CisgICAgICAgIAorICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFs
bG9jYXRlVGFibGUoaW50IHNpemUpIC0+IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdv
dWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxp
emF0aW9ucyBoZXJlLCBidXQKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2djc2UK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nY3NlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2NzZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nY3NlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2djc2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
KyhmdW5jdGlvbigpeworICAgIHZhciBvID0ge2Y6NDJ9OworICAgIHZhciBwID0ge2Y6NDN9Owor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBp
ID0gMCA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIGEgPSBvLmY7CisgICAgICAgIHZhciBi
ID0gby5mOworICAgICAgICB2YXIgYyA9IG8uZjsKKyAgICAgICAgdmFyIGQgPSBvLmY7CisgICAg
ICAgIGlmIChkKSB7CisgICAgICAgICAgICB2YXIgZSA9IG8uZjsKKyAgICAgICAgICAgIHZhciBm
ID0gby5mOworICAgICAgICAgICAgdmFyIGcgPSBvLmY7CisgICAgICAgICAgICB2YXIgaCA9IG8u
ZjsKKyAgICAgICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICAgICAgdmFyIGogPSBvLmY7Cisg
ICAgICAgICAgICAgICAgdmFyIGsgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGwgPSBvLmY7
CisgICAgICAgICAgICAgICAgdmFyIG0gPSBvLmY7CisgICAgICAgICAgICAgICAgaWYgKG0pIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZh
ciByID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG8uZjsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHQgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIGlmICh0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsK
KyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAobiAvIDIpICogby5m
ICsgKG4gLyAyKSAqIHAuZikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234688</attachid>
            <date>2014-07-09 22:10:05 -0700</date>
            <delta_ts>2014-07-10 11:08:13 -0700</delta_ts>
            <desc>it seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116888</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExNCw2ICs1MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTcsNiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2Njcs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5j
bHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgpAQCAt
MzksOTg0ICs0MCwzMjggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1j
bGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CituYW1lc3BhY2UgeworCitjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBwdWJsaWM6Ci0gICAg
Q1NFUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1
YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RIZWFw
IGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0KICAgICAKLSAgICBi
b29sIHJ1bigpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFsdWVQ
YWlyVHlwZSYgcGFpcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRT
dGF0ZSAhPSBCZWZvcmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0
QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAgIHBlcmZvcm1CbG9j
a0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhw
YWlyLmtleS5oZWFwKCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgCi0gICAgdW5zaWdu
ZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
VUlOVF9NQVgpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9jayk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
Cit9OwogCi0gICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgRWRn
ZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGls
ZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBu
b2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBv
dGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJO
b2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGls
ZDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7CitpbmxpbmUgdm9pZCBjbG9iYmVyKEltcHVyZU1h
cCYgbWFwLCBBYnN0cmFjdEhlYXAgaGVhcCkKK3sKKyAgICBDbG9iYmVyRmlsdGVyIGZpbHRlciho
ZWFwKTsKKyAgICBtYXAucmVtb3ZlSWYoZmlsdGVyKTsKK30KIAotICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNo
aWxkMSgpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAg
ICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAh
PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMigpLnNhbml0aXplZCgpOwotICAg
ICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5v
ZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBvdGhl
ck5vZGUtPmNoaWxkMygpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxk
KQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3Ro
ZXJDaGlsZCAhPSBjaGlsZDMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGNvbnN0YW50Q1NFKE5vZGUqIG5vZGUpCitj
bGFzcyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExDU0VQaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24gc3ViZXhw
cmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
bmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSAhPSBub2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUtPmNvbnN0YW50
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIE5vZGUqIGNvbnN0YW50U3RvcmFnZVBvaW50ZXJDU0UoTm9kZSogbm9kZSkKKyAg
ICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZv
clB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBDb25z
dGFudFN0b3JhZ2VQb2ludGVyKQorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5zdG9yYWdlUG9pbnRlcigpICE9IG5v
ZGUtPnN0b3JhZ2VQb2ludGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBtX3B1cmVWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1faW1wdXJlVmFsdWVzLmNs
ZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGdldENhbGxl
ZUxvYWRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAg
ICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gSWRlbnRp
dHkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtX25vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9n
cmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAg
ICAKLSAgICBOb2RlKiBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKE5vZGUqIGFycmF5KQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZCByZWFkKEFic3Ry
YWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIHZvaWQgd3JpdGUoQWJz
dHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9p
bnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0
ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNsb2JiZXIobV9pbXB1cmVWYWx1ZXMsIGhlYXAp
OwogICAgIH0KICAgICAKLSAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSog
cmVnaXN0ZXJzLCBpbnQgdmFyTnVtYmVyKQorICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYm
IG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAgICAg
ICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
ck51bWJlcigpICE9IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVycykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1i
ZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAKLSAgICBib29sIHZhckluamVjdGlvbldhdGNocG9pbnRFbGlt
aW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhckluamVjdGlvbldhdGNocG9pbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIEFycmF5TW9kZSBhcnJheU1v
ZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNoaWxkMikgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2hpbGQyKCkgPT0gY2hpbGQyCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBhcnJheU1vZGUudHlwZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAg
ICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgLy8gVHlwZWQgYXJyYXlzIAotICAgICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBlZEFycmF5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLm5vZGUo
KTsKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZhbCB3
aWxsIGNsb2JiZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRpbmcgZnJvbS4KLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQdXRC
eVZhbCBpcyBhY2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQotICAgICAgICAgICAgICAgIC8vIGRpZmZl
cmVudCB0eXBlIHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdvbid0
IGNsb2JiZXIgZWFjaCBvdGhlci4KLSAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IG9mIGNv
dXJzZSBmb3IgdHlwZWQgYXJyYXlzLCB3aGVyZSBhbGwgdHlwZWQgYXJyYXlzIGNsb2JiZXIgYWxs
IG90aGVyCi0gICAgICAgICAgICAgICAgLy8gdHlwZWQgYXJyYXlzISAgQW4gSW50MzJBcnJheSBj
YW4gYWxpYXMgYSBGbG9hdDY0QXJyYXkgZm9yIGV4YW1wbGUsIGFuZCBzbyBvbi4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBjaGVj
a0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFsdWUqIGZ1bmN0aW9uLCBOb2RlKiBjaGlsZDEp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgbV9ub2RlKTsK
KyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0V4ZWN1dGFi
bGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQor
ICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlKiBjaGlsZDEpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxk
MSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0
cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3Ry
dWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQu
Y29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgLy8gU2V0
dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS53cml0ZXNTdHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFs
SXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1
bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBj
YXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5
OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3Vy
IHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3
b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1ZXMu
YWRkKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAg
ICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIHN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNo
aWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGls
ZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c3RydWN0dXJlU2V0KCkuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnRyYW5z
aXRpb24oKS0+cHJldmlvdXMgIT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVy
ZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0
aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1w
b3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVy
ZToKLSAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRp
b24gY291bGQgYWZmZWN0IG91ciBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0
aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIG1f
Y2hhbmdlZDsKICAgICAKLSAgICBOb2RlKiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UpIC8vIE11c3QgYmUgc2Ft
ZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUt
PmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVz
IHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAg
ICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2Ug
YSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBOb2RlKiBtX25vZGU7CiAgICAgCi0g
ICAgTm9kZSogZ2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKKyAgICBQdXJlTWFwIG1fcHVyZVZhbHVlczsK
KyAgICBJbXB1cmVNYXAgbV9pbXB1cmVWYWx1ZXM7Cit9OworCitjbGFzcyBHQ1NFUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEdDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRp
b24iKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09
IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
W25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVu
dGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVz
IHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAg
ICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2Ug
YSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIGJvb2wgcnVuKCkKICAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4g
Y2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3
ZQotICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBj
dXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3Qn
cwotICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3Vt
ZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgICAgICAvLyBwb2lu
dGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdz
IGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVn
ZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVy
ZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sg
aWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5LgotICAgICAg
ICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2lu
dFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1l
bnRzKCk7CisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKKyAgICAgICAg
bV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwcmVPcmRlcjsKKyAgICAgICAgbV9ncmFw
aC5nZXRCbG9ja3NJblByZU9yZGVyKHByZU9yZGVyKTsKKyAgICAgICAgCisgICAgICAgIG1faW1w
dXJlRGF0YU1hcC5yZXNpemUobV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVyZWQgYnkgYmxvY2tzLiBOb2Rl
IHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CisgICAgICAgIC8vIGZvciBjb252ZW5p
ZW5jZSBvbmx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmVPcmRlci5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1f
aW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykKKyAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUlu
ZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGls
ZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBCYXNlZCBvbiBteSBleHBl
cmllbmNlIGRvaW5nIHRoaXMgYmVmb3JlLCB3aGF0IGZvbGxvd3MgbWlnaHQgaGF2ZSB0byBiZSBt
YWRlIGl0ZXJhdGl2ZS4KKyAgICAgICAgLy8gQnV0IGl0IGZlZWxzIGxpa2UsIHJpZ2h0IG5vdywg
dGhpcyB3b3JrcyBhcyBhIHNpbmdsZSBwYXNzIGJlY2F1c2Ugd2Ugb25seSB0dXJuIGEgbm9kZQor
ICAgICAgICAvLyBpbnRvIGEgdmFsdWUgb3IgaGVhcCBsb2NhdGlvbiBhZnRlciB3ZSBoYXZlIHBl
cmZvcm1lZCBzdWJzdGl0dXRpb25zIG9uIHRoYXQgbm9kZSdzCisgICAgICAgIC8vIGNoaWxkcmVu
LgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZU9yZGVyLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAgICAg
ICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAg
ICAgICAgICAgIG1fd3JpdGVzU29GYXIuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBibG9j
ayAiLCAqbV9ibG9jaywgIjpcbiIpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1f
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBt
X2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIExvb2tpbmcgYXQgbm9kZSAiLCBtX25vZGUsICI6
XG4iKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
Y291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJyYXku
Ci0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVm
Zm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9n
cmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50aXR5
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3Jh
cGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
IAotICAgIE5vZGUqIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9k
ZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEp
IAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlN
b2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZCBy
ZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2V0SW50ZXJuYWxGaWVsZExv
YWRFbGltaW5hdGlvbihOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxKQorICAgIHZvaWQgd3JpdGUo
QWJzdHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IG9wICYmIG5vZGUt
PmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2xvYmJl
cihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1fd3JpdGVz
U29GYXIuYWRkKGhlYXApOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVs
aW1pbmF0aW9uKCkKKyAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29w
ZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlTY29w
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgVmVjdG9yPE5vZGUqPigpKTsKKyAgICAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChtX25vZGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRMb2NhbExvYWRFbGltaW5hdGlv
bihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUqJiByZWxldmFudExvY2FsT3AsIGJvb2wgY2Fy
ZUFib3V0Q2xvYmJlcmluZykKLSAgICB7Ci0gICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAg
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAg
ICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgot
ICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChj
YXJlQWJvdXRDbG9iYmVyaW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlW2ld
OworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhjYW5kaWRh
dGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdp
dGgoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpbnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAod3JpdGVzT3ZlcmxhcChtX2dyYXBo
LCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzZXRSZXBs
YWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghcmVwbGFjZW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KLSAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKICAgICAgICAg
Ci0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGUoKQorICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChI
ZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFu
dG9tKCk7CisgICAgICAgIE5vZGUqIG1hdGNoID0gbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRh
aWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBGb3VuZCBsb2NhbCBtYXRj
aDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20p
Ci0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKHBoYW50b21UeXBlKTsKKyAgICAgICAgaWYgKG1fd3JpdGVzU29GYXIub3Zlcmxh
cHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgTm90IGxvb2tpbmcgZ2xvYmFsbHkgYmVjYXVzZSBvZiBs
b2NhbCBjbG9iYmVyOiAiLCBtX3dyaXRlc1NvRmFyLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgIC8v
IFRoaXMgcGVyZm9tcyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5kIHNvbWUgcG9zc2libGUgZGVm
KCkgdGhhdCBtYXRjaGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9uLiBBcyBzb29uIGFz
IGl0IGZpbmRzIGEgcG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMgdGhhdCB0aGlzIG9uZSBtdXN0
IGJlIHRoZQorICAgICAgICAvLyBtYXRjaCBhbmQgY29tcGxldGVzIHRoZSBzZWFyY2ggYnkgaGFs
dGluZyBhdCB0aGlzIGJsb2NrLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgd3JpdGUoKQorICAgICAg
ICAvLyB0aGF0IG92ZXJsYXBzIHRoZSBsb2NhdGlvbidzIGhlYXAsIGl0IHN0b3BzLCBhc3N1bWlu
ZyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1hdGNoLgogICAgICAgICAKLSAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gd29ya2xp
c3Q7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOwogICAgICAgICAKLSAgICAgICAgY2FzZSBJZGVu
dGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgdGhl
IHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KLSAg
ICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0
WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0g
ICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAg
Y2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0
aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTaW46
Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgotICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0g
ICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICBj
YXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElzRnVu
Y3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdp
c3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2UgVHlwZU9mOgotICAg
ICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
LSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXA6Ci0gICAgICAg
IGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAg
ICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIGNh
c2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICAgICAgTm9k
ZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgIGlmICghY2FuZGlkYXRl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhjYW5k
aWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRhdGUtPmFyaXRoTW9kZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRl
LT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAg
ICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vlbi5z
ZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBpbiBi
bG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRh
ID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxsZWVMb2Fk
RWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdldExv
Y2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGUqIHBvc3NpYmxl
UmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpOwotICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9IEdldExvY2Fs
VW5saW5rZWQKLSAgICAgICAgICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAg
ICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2Fs
IHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQK
LSAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFu
dExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKLSAgICAgICAgICAgICAgICByZWxl
dmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsK
LQotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0g
ICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS0+dW5saW5rZWRMb2NhbCgp
LCByZWxldmFudExvY2FsT3BJZ25vcmVkLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxs
IGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRzLAotICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJl
c3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVw
LgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRTdG9yYWdlUG9pbnRl
ckNTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlM
ZW5ndGhFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxs
eSBwdXJlOiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgotICAgICAgICAvLyBiZSBDU0UnZCwgc28g
bG9uZyBhcyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBD
b21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBj
YXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1l
cmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1cmVD
U0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGguaXNQ
cmVkaWN0ZWROdW1lcmljYWwocmVwbGFjZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWlu
YXRvcnMuZG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOworICAgICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbWF0Y2gpOworICAgICAgICAgICAgICAgIG1h
dGNoID0gZGF0YS5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFp
bGFiaWxpdHk6ICIsIG1hdGNoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXhhbWluZSB0aGUgcHJlZGVjZXNzb3JzIG9m
IGEgbWF0Y2guIEF0IHRoaXMgcG9pbnQgd2UganVzdCB3YW50IHRvCisgICAgICAgICAgICAgICAg
ICAgIC8vIGVzdGFibGlzaCB0aGF0IG90aGVyIGJsb2NrcyBvbiB0aGUgcGF0aCBmcm9tIGhlcmUg
dG8gdGhlcmUgZG9uJ3QgY2xvYmJlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9jYXRp
b24gd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vz
c2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKLSAgICAgICAg
Ly8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJl
IG1ldC4KLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgaWYgKHZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpKQotICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1p
bmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBub2Rl
LT5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNo
aWxkMS5ub2RlKCksIGNoaWxkMi5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgRGVhbGluZyB3aXRo
IHdyaXRlIHNldCAiLCBkYXRhLndyaXRlcywgIlxuIik7CisgICAgICAgICAgICBpZiAoZGF0YS53
cml0ZXMub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJlZC5c
biIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24o
bm9kZS0+c3RydWN0dXJlU2V0KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAgICAg
ICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVs
aW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgICAgICBpZiAoY2hl
Y2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhlY3V0YWJsZSgpLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAg
ICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1v
ZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICBjYXNlIEdldEdldHRl
cjoKLSAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlT
dG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIs
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgICAgICBpZiAoaW52YWxpZGF0aW9uUG9pbnRFbGltaW5h
dGlvbigpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIGRvIG5vdGhp
bmcuCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAg
ICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBz
ZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgp
XSA9IG1faW5kZXhJbkJsb2NrOworICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgZGVm
KEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNo
YWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24gZGVmOiAiLCBsb2NhdGlvbiwgIiAt
PiAiLCB2YWx1ZSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBOb2RlKiBtYXRjaCA9IGZpbmRS
ZXBsYWNlbWVudChsb2NhdGlvbik7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyAr
K2kpCi0gICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBtYXRjaCwg
IlxuIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IHBlcmZvcm1Ob2RlQ1NFKG1fY3VycmVudE5vZGUpOworICAgICAgICBpZiAoIW1hdGNoKSB7Cisg
ICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5zZXQobG9jYXRpb24sIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwotICAgIE5vZGUqIG1f
Y3VycmVudE5vZGU7Ci0gICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7Ci0gICAgc3RkOjphcnJh
eTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwotICAgIGJvb2wgbV9jaGFuZ2Vk
OyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBv
biBvdGhlciBvcHRpbWl6YXRpb25zLgorICAgIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgeworICAg
ICAgICBJbXB1cmVCbG9ja0RhdGEoKQorICAgICAgICAgICAgOiBkaWRWaXNpdChmYWxzZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDbG9iYmVyU2V0IHdyaXRlczsK
KyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFpbDsKKyAgICAgICAgYm9vbCBkaWRWaXNp
dDsKKyAgICB9OworICAgIAorICAgIFB1cmVNdWx0aU1hcCBtX3B1cmVWYWx1ZXM7CisgICAgVmVj
dG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVEYXRhTWFwOworICAgIAorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9ub2RlOworICAgIEltcHVyZUJsb2NrRGF0YSogbV9p
bXB1cmVEYXRhOworICAgIENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICAKKyAgICBib29s
IG1fY2hhbmdlZDsKIH07CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3JhcGgpCiB7Ci0g
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKLSAgICBy
ZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIExDU0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TENTRVBo
YXNlPihncmFwaCk7Cit9CisKK2Jvb2wgcGVyZm9ybUdDU0UoR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgR0NTRSBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxHQ1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICsz
OCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJhdGhlciBwcm9maXRhYmxlLiBJdCBoYXMg
ZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5kIHdpbGwgbWF0Y2gKIC8vIGEgd2lkZSBy
YW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9kdWNl
IGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBjaGVh
cCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUxDU0UoR3Jh
cGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NBLgorYm9vbCBw
ZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24g
MTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IENs
b2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRT
ZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogfQogCiB2b2lk
IGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0
KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUgbm9P
cDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXpl
KGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwg
bm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRzQW5kV3JpdGVz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJlclNl
dCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwogICAg
IENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09wKTsKIH0KIAog
Ym9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiBy
ZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOwotICAg
IE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFk
ZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVybiBhZGRSZWFk
LnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFk
OworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFdy
aXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRX
cml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3Ap
OwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiti
b29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVy
aXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICByZXR1cm4gIWFk
ZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAgTm9PcENsb2Ji
ZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBub09wLCBhZGRQ
dXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFk
OworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdyaXRl
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBj
bG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJu
IGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFwKQogeworICAgIE5vT3BDbG9iYmVyaXpl
IG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkQWNjZXNzKGhlYXApOwotICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzKTsKKyAgICBjbG9iYmVy
aXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFjY2Vzcywgbm9PcCk7CiAgICAgcmV0dXJu
IGFkZEFjY2Vzcy5yZXN1bHQoKTsKIH0KIAogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7Ci0gICAgTm9PcENsb2JiZXJpemUg
YWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwogICAgIEFic3RyYWN0SGVhcE92ZXJs
YXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQs
IGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwg
bm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcwOTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgogI2luY2x1
ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVu
Y3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBl
bmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRl
ZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC02OSw2ICs3MSwyMyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgLy8gICBwcmlvciB0byB0
eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRpZCBz
b21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAgIAorICAgIC8vIFdoaWxlIHJlYWQoKSBh
bmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRyYWNrIHdoYXQg
c29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUgbWF5IHJlYWQgb3Igd3JpdGUgLSB0aGUg
ZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQgdGVsbHMgeW91IHRoZSBoZWFwIGxvY2F0
aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBoZWFwcykgdGhhdCBhcmUgZGVmaW5lZCBi
eSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlzZXMgYW4gYWJzdHJhY3QKKyAgICAvLyBo
ZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktpbmQuIEJyaWVmbHksIGEgbG9jYXRpb24g
ZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgorICAgIC8vIHdob3NlIHZhbHVlIGNhbiBi
ZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBsb2NhdGlvbnMg
cmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAg
IC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRvIENTRSBhIGxvYWQgZnJvbSB0aGUgaGVh
cCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hvdWxkIGJlCisgICAgLy8gICBzdWZmaWNp
ZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9kZS4KKyAgICAvLworICAgIC8vIC0gVGhl
IGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNvdWxkIGJlIGNs
b2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisgICAgLy8gICBDU0UgYXR0ZW1wdC4gSS5l
LiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0d2VlbiBzb21l
IG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBkZWZpbmVzIGEgSGVhcExvY2F0aW9uIHRo
YXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRlcyB0byBhbnkgYWJzdHJhY3QgaGVhcCB0
aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4gd2UgaGF2ZSBh
IHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNlbWFudGljcyBvZgorICAgIC8vICAgd3Jp
dGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhlbSB0byBiZSBz
b3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAgIC8vICAgaXMgQ1NFYWJsZS4KKwogICAg
IGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkpCiAgICAgICAgIHJlYWQoSlNDZWxs
X3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICs5NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQ
aGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJp
dE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0
UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAg
ICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0
ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNhc2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJp
dGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTEwMCwyOCArMTE5LDQ3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5k
OgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNh
c2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9v
bGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBM
b2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVj
a0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgog
ICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJl
cDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgor
ICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRo
RGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJp
dGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRhYmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTE0Miw3ICsxODAsNiBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0
UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBCcmVha3BvaW50Ogog
ICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0x
NTEsNiArMTg4LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAg
ICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2Zp
cmUpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CkBAIC0xOTUsMTIgKzIzNywyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoK
KyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc09i
amVjdExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6CiAg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5j
dGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0yMjMsMjcgKzI3
NywzMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRl
ciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFj
azo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6
CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywg
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxp
bmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTI3MywxMSArMzMz
LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGlzIGFwcGVh
cnMgdG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBvbmx5IHJlYWRpbmcgaW1tdXRhYmxlIGRh
dGEuCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwogICAgICAgICAg
ICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIFZhcmlhYmxlcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CkBAIC0yODUsNiArMzQ3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsK
QEAgLTI5Niw2ICszNTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMDcsNiAr
MzcxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAg
cmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMzAsOCArMzk1
LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVByb3BlcnRpZXMpOwotICAgICAgICAgICAg
cmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5
QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJv
cGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTM0Miw2ICs0MDcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgTm9k
ZSogYmFzZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogaW5kZXggPSBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCk7CisgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgpOwogICAgICAgICBz
d2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgpA
QCAtMzYzLDkgKzQzMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVu
dHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVu
dHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFZh
cmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTM3OCw2ICs0NDYs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRp
ZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIElu
ZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTM5
MCw2ICs0NTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVh
ZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9w
ZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CkBAIC00MDIsNiArNDcyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKICAgICAgICAg
ICAgIHdyaXRlKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMs
IGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKQEAgLTQyMCw5ICs0OTEsMTAgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlC
dWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X2xl
bmd0aCk7CisgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgd3JpdGUo
VHlwZWRBcnJheVByb3BlcnRpZXMpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IGRl
ZigpIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB0aGVzZSBvcGVyYXRpb25zIHRydW5jYXRlIHRoZWly
IGlucHV0cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzQ3MzcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDMwLDcgKzUwMiw2IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNDQyLDEyICs1MTMsMTQg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgICAgICByZWFkKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihDaGVja0hhc0luc3RhbmNlTG9jLCBKU0NlbGxfdHlwZUlu
Zm9GbGFncywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIHJlYWQoSlNGdW5jdGlvbl9leGVjdXRhYmxl
KTsKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlE
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0YW5jZU9mTG9jLCBKU0NlbGxfc3RydWN0
dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAorCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIHdyaXRl
KEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUp
OwpAQCAtNDU3LDE1ICs1MzAsMTggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICB3cml0
ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZs
eUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICByZWFk
KEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5
TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheWlmeToKQEAgLTQ3OSw0MiArNTU1LDU5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykKKyAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7CisgICAg
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLmFzV29yZCgpKSk7
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVj
dG9yKTsKKyAgICAgICAgfQorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192
ZWN0b3IpOwotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwotICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7Ci0gICAgICAgIHJlYWQoQXJyYXlCdWZmZXJfZGF0
YSk7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAg
ICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0K
KyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVh
cChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICByZWFkKGhlYXAp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAg
IGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKICAg
ICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZWFkKEpTT2JqZWN0X2J1
dHRlcmZseSk7Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgbm9k
ZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQoSlND
ZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZp
ZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgaWYgKG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQogICAgICAgICAgICAgd3JpdGUo
SlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCiAgICAgICAgICAgICB3cml0ZShKU09iamVjdF9i
dXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhl
YXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAg
ICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PQorICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHdyaXRlKGhl
YXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewogICAgICAgICBBcnJh
eU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwpAQCAtNTI1LDc4ICs2MTgsODcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVl
KG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZWFkKEFyZ3Vt
ZW50c19vdmVycmlkZUxlbmd0aCk7Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19udW1Bcmd1
bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJheSk7CisgICAg
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihB
cnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eVNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFNraXBUb3BTY29wZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlh
YmxlcywgZ3JhcGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKICAgICAgICAgcmVhZChKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xvYywgSlNWYXJpYWJsZU9iamVjdF9yZWdp
c3RlcnMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJp
YWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xv
c3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIo
KSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1
cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkp
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoQWJz
b2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0Fy
cmF5V2l0aFNpemU6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIE5ld1R5cGVk
QXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBFbmFibGUgQ1NFIGZvciB0aGVzZSBub2Rlcy4gV2Ug
Y2FuJ3QgZG8gdGhpcyByaWdodCBub3cgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkKKyAgICAgICAg
Ly8gZm9yIHVzIHRvIGNsYWltIGFuIGluZGV4IG5vZGUgYW5kIGEgdmFsdWUgbm9kZS4gV2UgY291
bGQgbWFrZSB0aGlzIHdvcmsgaWYgd2UgbG93ZXJlZAorICAgICAgICAvLyB0aGVzZSBub2RlcyBv
ciBpZiB3ZSBoYWQgYSBtb3JlIGZsZXhpYmxlIHdheSBvZiBkZWYoKSdpbmcuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3MzcKKyAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4
cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVj
azoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uOgotICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9u
OgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmpl
Y3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgIGNhc2UgTmV3RnVuY3Rpb246
CisgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVj
dENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAg
cmVhZChXb3JsZCk7Ci0gICAgICAgICAgICB3cml0ZShXb3JsZCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAorICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0Ogog
ICAgICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKQEAgLTYwOSw2ICs3MTEsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICB3cml0ZShXb3JsZCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgZGVmKFB1cmVWYWx1ZShu
b2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlRXE6CkBA
IC02MTYsOCArNzE5LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFVudHlwZWRVc2UpKQorICAgICAgICBpZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5
cGVkVXNlKSkgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRl
KFdvcmxkKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjI2LDYgKzczMSw4IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAgICAgICAvLyBUaGVzZSBkb24n
dCBkZWYgYSBwdXJlIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LiBJJ2xsIGF2b2lkIGxvYWQtZWxpbWlu
YXRpbmcgdGhlc2UgZm9yCisgICAgICAgICAgICAvLyBub3cuCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDZWxsVXNlOgpAQCAtNjUyLDEwICs3NTksMTIg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgR2V0
TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihNeUFyZ3VtZW50c0xlbmd0aExvYywgVmFyaWFi
bGVzKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50QnlWYWw6CiAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihNeUFyZ3VtZW50QnlWYWxMb2MsIFZhcmlhYmxlcyksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgpAQCAt
Njg1LDcgKzc5NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
IGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKIHB1YmxpYzoKICAgICBOb09wQ2xvYmJlcml6ZSgpIHsg
fQotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIFQ+CisgICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIHsgfQogfTsKIAogY2xhc3Mg
Q2hlY2tDbG9iYmVyaXplIHsKQEAgLTY5NSw3ICs4MDUsOCBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwKSB7IG1fcmVzdWx0ID0g
dHJ1ZTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+CisgICAgdm9pZCBvcGVyYXRvcigp
KFQuLi4pIHsgbV9yZXN1bHQgPSB0cnVlOyB9CiAgICAgCiAgICAgYm9vbCByZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3VsdDsgfQogICAgIApAQCAtNzAzLDYgKzgxNCw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3Jlc3VsdDsKIH07CiAKK2Jvb2wgaXNQdXJlKEdyYXBoJiwgTm9kZSopOyAv
LyBQdXJlIG1lYW5zIGl0IGRvZXMgbm8gcmVhZHMgb3Igd3JpdGVzLgorYm9vbCBoYXNQdXJlRGVm
cyhHcmFwaCYsIE5vZGUqKTsgLy8gSGF2aW5nIHB1cmUgZGVmcyBtZWFucyB0aGF0IHB1cmUgQ1NF
IGlzIHBvc3NpYmxlLgorCiBib29sIGRvZXNXcml0ZXMoR3JhcGgmLCBOb2RlKik7CiAKIGNsYXNz
IEFic3RyYWN0SGVhcE92ZXJsYXBzIHsKQEAgLTczMCw2ICs4NDQsNzIgQEAgcHJpdmF0ZToKIGJv
b2wgYWNjZXNzZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIEFic3RyYWN0SGVhcCk7CiBib29sIHdy
aXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKIAorLy8gV2Ugd291bGQg
aGF2ZSB1c2VkIGJpbmQoKSBmb3IgdGhlc2UsIGJ1dCBiZWNhdXNlIG9mIHRoZSBvdmVybGFvZGlu
ZyB0aGF0IHdlIGFyZSBkb2luZywKKy8vIGl0J3MgcXVpdGUgYSBiaXQgb2YgY2xlYXJlciB0byBq
dXN0IHdyaXRlIHRoaXMgb3V0IHRoZSB0cmFkaXRpb25hbCB3YXkuCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBSZWFkTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6CisgICAgUmVhZE1l
dGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAg
ICB7CisgICAgICAgIG1fdmFsdWUucmVhZChoZWFwKTsKKyAgICB9Citwcml2YXRlOgorICAgIFQm
IG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgV3JpdGVNZXRob2RD
bG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBXcml0ZU1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUp
CisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
b3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUud3Jp
dGUoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZk1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgorICAg
IERlZk1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBtX3ZhbHVlLmRlZihsb2NhdGlvbiwgbm9kZSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWRhcHRvciYgYWRhcHRvcikKK3sK
KyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiByZWFkKGFkYXB0b3IpOworICAgIFdy
aXRlTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiB3cml0ZShhZGFwdG9yKTsKKyAgICBEZWZNZXRo
b2RDbG9iYmVyaXplPEFkYXB0b3I+IGRlZihhZGFwdG9yKTsKKyAgICBjbG9iYmVyaXplKGdyYXBo
LCBub2RlLCByZWFkLCB3cml0ZSwgZGVmKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsx
MDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBOZWVkIHRvIHByb2Nlc3MgdGhlIGdyYXBo
IGluIHJldmVyc2UgREZTIG9yZGVyLCBzbyB0aGF0IHdlIGdldCB0byB0aGUgdXNlcwogICAgICAg
ICAgICAgLy8gb2YgYSBub2RlIGJlZm9yZSB3ZSBnZXQgdG8gdGhlIG5vZGUgaXRzZWxmLgogICAg
ICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICAgICAgbV9n
cmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAg
IGZpeHVwQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMjAsNyAr
MjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2lu
LCBlZGdlKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOSwyNSArNjM5LDc1IEBAIHZvaWQg
R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVj
dG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2Vl
biwgQmFzaWNCbG9jayogYmxvY2spCisvLyBVdGlsaXRpZXMgZm9yIHByZS0gYW5kIHBvc3Qtb3Jk
ZXIgdHJhdmVyc2Fscy4KK25hbWVzcGFjZSB7CisKK2lubGluZSB2b2lkIGFkZEZvclByZU9yZGVy
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdv
cmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQogewotICAgIGlmIChz
ZWVuLmNvbnRhaW5zKGJsb2NrKSkKKyAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOwogICAgIHdvcmts
aXN0LmFwcGVuZChibG9jayk7Ci0gICAgc2Vlbi5hZGQoYmxvY2spOworICAgIHNlZW4uc2V0KGJs
b2NrLT5pbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVy
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK2VudW0gUG9zdE9yZGVyVGFza0tpbmQgewor
ICAgIFBvc3RPcmRlckZpcnN0VmlzaXQsCisgICAgUG9zdE9yZGVyQWRkVG9SZXN1bHQKK307CisK
K3N0cnVjdCBQb3N0T3JkZXJUYXNrIHsKKyAgICBQb3N0T3JkZXJUYXNrKEJhc2ljQmxvY2sqIGJs
b2NrID0gbnVsbHB0ciwgUG9zdE9yZGVyVGFza0tpbmQga2luZCA9IFBvc3RPcmRlckZpcnN0Vmlz
aXQpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgUG9zdE9yZGVy
VGFza0tpbmQgbV9raW5kOworfTsKKworaW5saW5lIHZvaWQgYWRkRm9yUG9zdE9yZGVyKFZlY3Rv
cjxQb3N0T3JkZXJUYXNrLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2soYmxvY2ssIFBv
c3RPcmRlckZpcnN0VmlzaXQpKTsKKyAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOworfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRl
cihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
LCAxNj4gd29ya2xpc3Q7Ci0gICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gc2VlbjsKLSAgICBhZGRG
b3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAg
Qml0VmVjdG9yIHNlZW47CisgICAgYWRkRm9yUHJlT3JkZXIocmVzdWx0LCB3b3JrbGlzdCwgc2Vl
biwgYmxvY2soMCkpOwogICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgIGFk
ZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNz
b3IoaSkpOworICAgICAgICAgICAgYWRkRm9yUHJlT3JkZXIocmVzdWx0LCB3b3JrbGlzdCwgc2Vl
biwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQorfQorCit2b2lkIEdyYXBoOjpnZXRCbG9j
a3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCit7CisgICAgVmVjdG9y
PFBvc3RPcmRlclRhc2ssIDE2PiB3b3JrbGlzdDsKKyAgICBCaXRWZWN0b3Igc2VlbjsKKyAgICBh
ZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBQb3N0T3JkZXJUYXNrIHRhc2sgPSB3b3JrbGlz
dC50YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKHRhc2subV9raW5kKSB7CisgICAgICAgIGNh
c2UgUG9zdE9yZGVyRmlyc3RWaXNpdDoKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0
T3JkZXJUYXNrKHRhc2subV9ibG9jaywgUG9zdE9yZGVyQWRkVG9SZXN1bHQpKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRhc2subV9ibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07
KQorICAgICAgICAgICAgICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgdGFzay5t
X2Jsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UG9zdE9yZGVyQWRkVG9SZXN1bHQ6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRhc2subV9i
bG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTcwOTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjMs
NyArNjYzLDggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICB2
b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7CiAgICAgCi0gICAgdm9pZCBnZXRCbG9ja3NJbkRl
cHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0
QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIHZvaWQg
Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKICAgICAK
ICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFu
LmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCkBAIC03NTEsNyArNzUyLDYgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9j
ayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOwot
ICAgIHZvaWQgYWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0
LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+
JiBzZWVuLCBCYXNpY0Jsb2NrKik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3Vs
ZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSGVhcExvY2F0
aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCit2b2lkIEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6IiwgbV9oZWFwKTsKKyAgICAKKyAgICBpZiAo
IW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91dC5wcmludCgiWyIsIG1fYmFz
ZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91dC5wcmludCgiLCAiLCBtX2luZGV4KTsK
KyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQu
cHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgorICAgICAgICBvdXQucHJpbnQoIkludmFs
aWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJ
c09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc09iamVjdExvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5jdGlvbkxvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlwZU9mTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgi
R2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXJM
b2M6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJWYXJpYWJs
ZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlMZW5ndGhM
b2M6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlMZW5ndGhMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZseUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJC
dXR0ZXJmbHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNr
SGFzSW5zdGFuY2VMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tIYXNJbnN0YW5jZUxvYyIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2xvc3VyZVJlZ2lzdGVyc0xv
YzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlUmVnaXN0ZXJzTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlVmFyaWFibGVMb2M6CisgICAgICAgIG91
dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBHbG9iYWxWYXJpYWJsZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJHbG9iYWxW
YXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5kZXhl
ZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRQb3JwZXJ0eUxvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5U3RvcmFn
ZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbnN0YW5jZU9mTG9jOgorICAgICAg
ICBvdXQucHJpbnQoIkluc3RhbmNlT2ZMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIE15QXJndW1lbnRCeVZhbExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNeUFyZ3Vt
ZW50QnlWYWxMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJn
dW1lbnRzTGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJpbnQoIk15QXJndW1lbnRzTGVuZ3RoTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5TG9j
OgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFNraXBUb3BTY29wZUxvYzoKKyAgICAgICAgb3V0LnByaW50
KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVkQXJyYXlC
eXRlT2Zmc2V0TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0hlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR0hlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIExvY2F0aW9u
S2luZCB7CisgICAgSW52YWxpZExvY2F0aW9uS2luZCwKKyAgICAKKyAgICBBcnJheUxlbmd0aExv
YywKKyAgICBCdXR0ZXJmbHlMb2MsCisgICAgQ2hlY2tIYXNJbnN0YW5jZUxvYywKKyAgICBDbG9z
dXJlUmVnaXN0ZXJzTG9jLAorICAgIENsb3N1cmVWYXJpYWJsZUxvYywKKyAgICBHZXR0ZXJMb2Ms
CisgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSW5kZXhlZFByb3BlcnR5TG9jLAorICAgIElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsCisgICAgSW5zdGFuY2VPZkxvYywKKyAgICBJbnZhbGlk
YXRpb25Qb2ludExvYywKKyAgICBJc0Z1bmN0aW9uTG9jLAorICAgIElzT2JqZWN0TG9jLAorICAg
IE15QXJndW1lbnRCeVZhbExvYywKKyAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKKyAgICBOYW1l
ZFByb3BlcnR5TG9jLAorICAgIFNldHRlckxvYywKKyAgICBTa2lwVG9wU2NvcGVMb2MsCisgICAg
VHlwZU9mTG9jLAorICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAorICAgIFZhcmlhYmxlTG9j
Cit9OworCitjbGFzcyBIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIEhlYXBMb2NhdGlvbigK
KyAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkTG9jYXRpb25LaW5kLAorICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0SGVhcCgpLAorICAgICAgICBOb2RlKiBiYXNl
ID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxscHRyKQorICAgICAgICA6IG1fa2luZChraW5k
KQorICAgICAgICAsIG1faGVhcChoZWFwKQorICAgICAgICAsIG1fYmFzZShiYXNlKQorICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoKGtpbmQgPT0gSW52YWxp
ZExvY2F0aW9uS2luZCkgPT0gIWhlYXApOworICAgICAgICBBU1NFUlQoISFtX2hlYXAgfHwgIW1f
YmFzZSk7CisgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwgIW1faW5kZXgpOworICAgIH0KKyAgICAK
KyAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQsIEFic3RyYWN0SGVhcCBoZWFwLCBF
ZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCisgICAgICAgIDogSGVhcExvY2F0aW9uKGtp
bmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fa2luZChJbnZhbGlkTG9jYXRpb25LaW5kKQorICAgICAgICAsIG1faGVhcChXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAg
LCBtX2luZGV4KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX2hlYXA7IH0KKyAgICAKKyAgICBMb2NhdGlvbktpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIEFic3RyYWN0SGVhcCBoZWFwKCkgY29u
c3QgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgTm9kZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFzZTsgfQorICAgIE5vZGUqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAg
IAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCArIG1faGVhcC5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1faW5kZXgpICsg
bV9raW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVhcExvY2F0
aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIu
bV9raW5kCisgICAgICAgICAgICAmJiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwCisgICAgICAgICAg
ICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5pc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgQWJz
dHJhY3RIZWFwIG1faGVhcDsKKyAgICBOb2RlKiBtX2Jhc2U7CisgICAgTm9kZSogbV9pbmRleDsK
K307CisKK3N0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IEhlYXBMb2NhdGlvbiYgYSwgY29uc3QgSGVhcExvY2F0aW9u
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkRGRzo6TG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Okhl
YXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkhlYXBMb2NhdGlvbkhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiB7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBIYXNoTWFwPEhl
YXBMb2NhdGlvbiwgTm9kZSo+IEltcHVyZU1hcDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdIZWFwTG9jYXRp
b25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIEZvciBtYXhpbXVtIHByb2ZpdCwgd2Ugd2FsayBibG9ja3MgaW4gREZTIG9yZGVyIHRv
IGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseQogICAgICAgICAvLyB0ZW5kIHRvIGhvaXN0IGRvbWlu
YXRvcnMgYmVmb3JlIGRvbWluYXRlZXMuCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVw
dGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0
aEZpcnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3Qp
OwogICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wU3RhY2s7CiAgICAgICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBmb3IgKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsMTAgKzM3MywxMSBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
KTsKICAgICB9Ci0KLSAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKQorICAgIAor
ICAgIHZvaWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIpCiAgICAgewotICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgY29udmVydFRvUGhhbnRvbSgpOworICAg
ICAgICByZXBsYWNlbWVudCA9IG90aGVyOwogICAgIH0KIAogICAgIHZvaWQgY29udmVydFRvSWRl
bnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUwLDE0ICsyNTAsMTQgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgICAgICB2YWxpZGF0ZShkZmcpOwogICAgICAgICAKICAgICBw
ZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKTsKLSAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAg
cGVyZm9ybUxDU0UoZGZnKTsKICAgICBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oZGZn
KTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtQ0ZBKGRmZyk7
CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7Ci0gICAg
Y2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAgY2hhbmdlZCB8PSBwZXJmb3JtTENTRShk
ZmcpOwogICAgIAogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICB2YWxpZGF0
ZShkZmcpOwpAQCAtMzE2LDcgKzMxNiw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TU0FMb3dlcmluZyhk
ZmcpOwotICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgICAgIHBlcmZvcm1HQ1NFKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1D
RkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwpAQCAtMzI5LDcg
KzMyOSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAg
ICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21SZW1vdmFsKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21iaW5pbmcoZGZnKTsKLSAgICAgICAgcGVy
Zm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR0NTRShkZmcpOwogICAgICAgICAKICAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBub3QgYWxsb3dlZCB0byBkbyBhbnkgZnVydGhlciBj
b2RlIG1vdGlvbiBiZWNhdXNlIG91ciByZWFzb25pbmcKICAgICAgICAgLy8gYWJvdXQgY29kZSBt
b3Rpb24gYXNzdW1lcyB0aGF0IGl0J3MgT0sgdG8gaW5zZXJ0IEdDIHBvaW50cyBpbiByYW5kb20g
cGxhY2VzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdQdXJlVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFB1cmVW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChHcmFw
aDo6b3BOYW1lKG9wKCkpKTsKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIg
Y29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7
ICsraSkgeworICAgICAgICBpZiAoY2hpbGRyZW4oKS5jaGlsZChpKSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgY2hpbGRyZW4oKS5jaGlsZChpKSk7CisgICAgfQorICAgIGlmIChtX2lu
Zm8pCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9pbmZvKTsKKyAgICBvdXQucHJpbnQoIiki
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQdXJlVmFsdWVfaAorI2RlZmluZSBE
RkdQdXJlVmFsdWVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHVyZVZhbHVl
IHsKK3B1YmxpYzoKKyAgICBQdXJlVmFsdWUoKQorICAgICAgICA6IG1fb3AoTGFzdE5vZGVUeXBl
KQorICAgICAgICAsIG1faW5mbygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVl
KE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgdWludHB0cl90IGlu
Zm8pCisgICAgICAgIDogbV9vcChvcCkKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQor
ICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoZGVmYXVsdEZs
YWdzKG9wKSAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShO
b2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIGNvbnN0IHZvaWQqIHB0
cikKKyAgICAgICAgOiBQdXJlVmFsdWUob3AsIGNoaWxkcmVuLCBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihwdHIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9w
LCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBQdXJlVmFsdWUob3As
IGNoaWxkcmVuLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIHVpbnRwdHJfdCBpbmZvKQorICAgICAgICA6IFB1
cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbiwgaW5mbykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2RlLCBjb25zdCB2b2lkKiBwdHIpCisgICAgICAg
IDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkcmVuLCBwdHIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSkKKyAgICAgICAgOiBQdXJlVmFsdWUo
bm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJl
VmFsdWUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb3AoTGFz
dE5vZGVUeXBlKQorICAgICAgICAsIG1faW5mbygxKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX29wID09IExhc3ROb2RlVHlwZSAmJiAh
bV9pbmZvOyB9CisgICAgCisgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9
CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2No
aWxkcmVuOyB9CisgICAgdWludHB0cl90IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0K
KworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
SW50SGFzaDxpbnQ+OjpoYXNoKHN0YXRpY19jYXN0PGludD4obV9vcCkpICsgbV9jaGlsZHJlbi5o
YXNoKCkgKyBtX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQ
dXJlVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gb3Ro
ZXIubV9vcAorICAgICAgICAgICAgJiYgbV9jaGlsZHJlbiA9PSBvdGhlci5tX2NoaWxkcmVuCisg
ICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX29wID09IExhc3ROb2RlVHlwZSAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZVR5
cGUgbV9vcDsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisgICAgdWludHB0cl90IG1f
aW5mbzsKK307CisKK3N0cnVjdCBQdXJlVmFsdWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBQdXJlVmFsdWUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFB1cmVWYWx1ZSYgYSwgY29uc3QgUHVyZVZhbHVlJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7
CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHVyZVZhbHVlSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6REZHOjpQdXJlVmFsdWU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
REZHOjpQdXJlVmFsdWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJv
ID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gUHVyZU1h
cDsKK3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIFZlY3RvcjxOb2RlKj4+IFB1cmVNdWx0aU1h
cDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdQdXJlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNsZWFyKCk7CiAgICAgICAgICAgICBibG9jay0+
dmFsdWVzQXRIZWFkLmNsZWFyKCk7CiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNs
ZWFyKCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6
OlNTQURhdGEoYmxvY2spKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1ha2VfdW5p
cXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MDkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICBjcmVhdGVQaGlW
YXJpYWJsZXMoKTsKIAogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0g
ICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Cisg
ICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKIAogICAgICAg
ICBpbnQgbWF4TnVtYmVyT2ZBcmd1bWVudHMgPSAtMTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBi
bG9ja0luZGV4ID0gZGVwdGhGaXJzdC5zaXplKCk7IGJsb2NrSW5kZXgtLTsgKSB7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFz
aE1hcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHJlbW92
ZShjb25zdCBLZXlUeXBlJik7CiAgICAgYm9vbCByZW1vdmUoaXRlcmF0b3IpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCByZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9y
KTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBNYXBwZWRUeXBlIHRha2UoY29uc3QgS2V5VHlw
ZSYpOyAvLyBlZmZpY2llbnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCkBAIC0zNTQs
NiArMzU2LDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW8KIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKQoreworICAg
IG1faW1wbC5yZW1vdmVJZihmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KIGlubGluZSBib29s
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAg
ICAgcmV0dXJuIHJlbW92ZShmaW5kKGtleSkpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9u
IDE3MDkyOSkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTMsNiArMzkzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0
ZXJhdG9yKTsKICAgICAgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNr
KGl0ZXJhdG9yKTsKICAgICAgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNo
ZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICAgICAgdm9pZCByZW1vdmVJZihGdW5jdG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsK
IAogICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIHsgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6
OmV4dHJhY3QodmFsdWUpKTsgfQpAQCAtMTAzMSw2ICsxMDMzLDI4IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RhYmxlU2l6ZTsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQobV90YWJsZVtpXSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZnVuY3Rvciht
X3RhYmxlW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVsZXRlQnVja2V0KG1fdGFibGVbaV0pOworICAgICAgICAgICAgKyttX2RlbGV0
ZWRDb3VudDsKKyAgICAgICAgICAgIC0tbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICAgICAgc2hyaW5rKCk7CisgICAg
ICAgIAorICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUpIC0+
IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJl
ciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2djc2UKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZ2NzZS1wb2x5LWdldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2djc2UtcG9seS1nZXQKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNz
LW9idmlvdXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3Vz
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxl
c3Mtb2J2aW91cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
Y3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dj
c2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dj
c2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdl
dC1sZXNzLW9idmlvdXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM1IEBACisoZnVuY3Rpb24obywgcCkgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBuOyArK2kp
IHsKKyAgICAgICAgdmFyIGEgPSBvLmY7CisgICAgICAgIHZhciBiID0gby5mOworICAgICAgICB2
YXIgYyA9IG8uZjsKKyAgICAgICAgdmFyIGQgPSBvLmY7CisgICAgICAgIGlmIChkKSB7CisgICAg
ICAgICAgICB2YXIgZSA9IG8uZjsKKyAgICAgICAgICAgIHZhciBmID0gby5mOworICAgICAgICAg
ICAgdmFyIGcgPSBvLmY7CisgICAgICAgICAgICB2YXIgaCA9IG8uZjsKKyAgICAgICAgICAgIGlm
IChoKSB7CisgICAgICAgICAgICAgICAgdmFyIGogPSBvLmY7CisgICAgICAgICAgICAgICAgdmFy
IGsgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGwgPSBvLmY7CisgICAgICAgICAgICAgICAg
dmFyIG0gPSBvLmY7CisgICAgICAgICAgICAgICAgaWYgKG0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHEgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gby5mOworICAgICAg
ICAgICAgICAgICAgICB2YXIgcyA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBv
LmY7CisgICAgICAgICAgICAgICAgICAgIGlmICh0KQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsK
KyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAobiAvIDIpICogby5mICsgKG4gLyAyKSAqIHAuZikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoe2Y6NDIs
IGc6MH0sIHtnOjAsIGY6NDN9KTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2djc2UtcG9seS1nZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNyBAQAorKGZ1bmN0aW9uKCl7CisgICAgdmFyIG8gPSB7Zjo0Miwg
ZzowfTsKKyAgICB2YXIgcCA9IHtnOjAsIGY6NDN9OworICAgIHZhciByZXN1bHQgPSAwOworICAg
IHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgdmFyIGEgPSBvLmY7CisgICAgICAgIHZhciBiID0gby5mOworICAgICAgICB2YXIgYyA9
IG8uZjsKKyAgICAgICAgdmFyIGQgPSBvLmY7CisgICAgICAgIGlmIChkKSB7CisgICAgICAgICAg
ICB2YXIgZSA9IG8uZjsKKyAgICAgICAgICAgIHZhciBmID0gby5mOworICAgICAgICAgICAgdmFy
IGcgPSBvLmY7CisgICAgICAgICAgICB2YXIgaCA9IG8uZjsKKyAgICAgICAgICAgIGlmIChoKSB7
CisgICAgICAgICAgICAgICAgdmFyIGogPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGsgPSBv
LmY7CisgICAgICAgICAgICAgICAgdmFyIGwgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIG0g
PSBvLmY7CisgICAgICAgICAgICAgICAgaWYgKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHEgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gby5mOworICAgICAgICAgICAg
ICAgICAgICB2YXIgcyA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBvLmY7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9
CisgICAgaWYgKHJlc3VsdCAhPSAobiAvIDIpICogby5mICsgKG4gLyAyKSAqIHAuZikKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNyBAQAorKGZ1bmN0aW9uKCl7CisgICAgdmFyIG8gPSB7Zjo0Mn07
CisgICAgdmFyIHAgPSB7Zjo0M307CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAx
MDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIg
YSA9IG8uZjsKKyAgICAgICAgdmFyIGIgPSBvLmY7CisgICAgICAgIHZhciBjID0gby5mOworICAg
ICAgICB2YXIgZCA9IG8uZjsKKyAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgIHZhciBlID0g
by5mOworICAgICAgICAgICAgdmFyIGYgPSBvLmY7CisgICAgICAgICAgICB2YXIgZyA9IG8uZjsK
KyAgICAgICAgICAgIHZhciBoID0gby5mOworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaiA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgayA9IG8uZjsKKyAgICAg
ICAgICAgICAgICB2YXIgbCA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgbSA9IG8uZjsKKyAg
ICAgICAgICAgICAgICBpZiAobSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IG8uZjsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBzID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IG8uZjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRt
cCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAo
cmVzdWx0ICE9IChuIC8gMikgKiBvLmYgKyAobiAvIDIpICogcC5mKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>234689</attachid>
            <date>2014-07-09 22:12:09 -0700</date>
            <delta_ts>2014-07-11 11:47:35 -0700</delta_ts>
            <desc>new DFGCSEPhase.cpp</desc>
            <filename>DFGCSEPhase.cpp</filename>
            <type>text/plain</type>
            <size>11511</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0
OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpbmNsdWRlICJjb25maWcu
aCIKI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCgojaWYgRU5BQkxFKERGR19KSVQpCgojaW5jbHVk
ZSAiREZHQWJzdHJhY3RIZWFwLmgiCiNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiNpbmNsdWRl
ICJERkdDbG9iYmVyaXplLmgiCiNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgojaW5j
bHVkZSAiREZHR3JhcGguaCIKI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiNpbmNsdWRlIDxhcnJheT4KI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+Cgpu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CgpuYW1lc3BhY2UgewoKY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CgpjbGFzcyBDbG9iYmVyRmlsdGVyIHsKcHVibGljOgogICAgQ2xvYmJl
ckZpbHRlcihBYnN0cmFjdEhlYXAgaGVhcCkKICAgICAgICA6IG1faGVhcChoZWFwKQogICAgewog
ICAgfQogICAgCiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgSW1wdXJlTWFwOjpLZXlWYWx1ZVBh
aXJUeXBlJiBwYWlyKQogICAgewogICAgICAgIHJldHVybiBtX2hlYXAub3ZlcmxhcHMocGFpci5r
ZXkuaGVhcCgpKTsKICAgIH0KICAgIApwcml2YXRlOgogICAgQWJzdHJhY3RIZWFwIG1faGVhcDsK
fTsKCmlubGluZSB2b2lkIGNsb2JiZXIoSW1wdXJlTWFwJiBtYXAsIEFic3RyYWN0SGVhcCBoZWFw
KQp7CiAgICBDbG9iYmVyRmlsdGVyIGZpbHRlcihoZWFwKTsKICAgIG1hcC5yZW1vdmVJZihmaWx0
ZXIpOwp9CgpjbGFzcyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewpwdWJsaWM6CiAgICBMQ1NF
UGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24g
c3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICB7CiAgICB9CiAgICAKICAgIGJvb2wgcnVu
KCkKICAgIHsKICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpOwogICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpOwogICAgICAgIAogICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOwogICAgICAgIAogICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVu
dHMoKTsKICAgICAgICAKICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIAogICAgICAgICAgICBtX3B1
cmVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgICAgbV9pbXB1cmVWYWx1ZXMuY2xlYXIoKTsKICAg
ICAgICAgICAgCiAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgIG1fbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3Jt
U3Vic3RpdHV0aW9uKG1fbm9kZSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPm9wKCkgPT0gSWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICBtX25vZGUt
PnJlcGxhY2VXaXRoKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgY2xvYmJlcml6ZShtX2dyYXBoLCBtX25vZGUsICp0aGlzKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgfQogICAgCiAg
ICB2b2lkIHJlYWQoQWJzdHJhY3RIZWFwKSB7IH0KICAgIAogICAgdm9pZCB3cml0ZShBYnN0cmFj
dEhlYXAgaGVhcCkKICAgIHsKICAgICAgICBjbG9iYmVyKG1faW1wdXJlVmFsdWVzLCBoZWFwKTsK
ICAgIH0KICAgIAogICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQogICAgewogICAgICAgIGF1
dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgbV9ub2RlKTsKICAgICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgbV9ub2RlLT5y
ZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwogICAgfQogICAgCiAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUq
IHZhbHVlKQogICAgewogICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1ZXMuYWRkKGxv
Y2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkK
ICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgIAogICAgICAgIG1fbm9kZS0+
cmVwbGFjZVdpdGgocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgIH0KICAgIAogICAgYm9vbCBtX2NoYW5nZWQ7CiAgICAKICAgIE5vZGUqIG1fbm9k
ZTsKICAgIAogICAgUHVyZU1hcCBtX3B1cmVWYWx1ZXM7CiAgICBJbXB1cmVNYXAgbV9pbXB1cmVW
YWx1ZXM7Cn07CgpjbGFzcyBHQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewpwdWJsaWM6CiAgICBH
Q1NFUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29t
bW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQogICAgewogICAgfQogICAgCiAgICBib29s
IHJ1bigpCiAgICB7CiAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZp
eHBvaW50Tm90Q29udmVyZ2VkKTsKICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KTsKICAgICAgICAKICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgICAg
bV9ncmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOwogICAgICAgIG1fZ3JhcGgubV9kb21pbmF0
b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKICAgICAgICAKICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IHByZU9yZGVyOwogICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRl
cihwcmVPcmRlcik7CiAgICAgICAgCiAgICAgICAgbV9pbXB1cmVEYXRhTWFwLnJlc2l6ZShtX2dy
YXBoLm51bUJsb2NrcygpKTsKICAgICAgICAKICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdo
YXQgZ2V0cyBjbG9iYmVyZWQgYnkgYmxvY2tzLiBOb2RlIHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVP
cmRlciBsaXN0CiAgICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCiAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gcHJlT3JkZXIuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgIG1fYmxvY2sg
PSBwcmVPcmRlcltpXTsKICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1h
cFttX2Jsb2NrLT5pbmRleF07CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
bV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCiAgICAgICAgICAgICAgICBhZGRXcml0ZXMo
bV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwog
ICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBCYXNlZCBvbiBteSBleHBlcmllbmNlIGRvaW5n
IHRoaXMgYmVmb3JlLCB3aGF0IGZvbGxvd3MgbWlnaHQgaGF2ZSB0byBiZSBtYWRlIGl0ZXJhdGl2
ZS4KICAgICAgICAvLyBCdXQgaXQgZmVlbHMgbGlrZSwgcmlnaHQgbm93LCB0aGlzIHdvcmtzIGFz
IGEgc2luZ2xlIHBhc3MgYmVjYXVzZSB3ZSBvbmx5IHR1cm4gYSBub2RlCiAgICAgICAgLy8gaW50
byBhIHZhbHVlIG9yIGhlYXAgbG9jYXRpb24gYWZ0ZXIgd2UgaGF2ZSBwZXJmb3JtZWQgc3Vic3Rp
dHV0aW9ucyBvbiB0aGF0IG5vZGUncwogICAgICAgIC8vIGNoaWxkcmVuLgogICAgICAgIAogICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVPcmRlci5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CiAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9
ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOwogICAgICAgICAgICBtX3dyaXRlc1Nv
RmFyLmNsZWFyKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4iKTsK
CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgbV9i
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgbV9ub2RlID0gbV9i
bG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgTG9va2luZyBhdCBub2RlICIsIG1fbm9kZSwgIjpcbiIp
OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0
dXRpb24obV9ub2RlKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+b3AoKSA9PSBJZGVudGl0eSkgewogICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFj
ZVdpdGgobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIAogICAgICAgICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICB9
CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgIH0KCiAgICB2b2lkIHJlYWQo
QWJzdHJhY3RIZWFwKSB7IH0KICAgIAogICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkK
ICAgIHsKICAgICAgICBjbG9iYmVyKG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLCBoZWFw
KTsKICAgICAgICBtX3dyaXRlc1NvRmFyLmFkZChoZWFwKTsKICAgIH0KICAgIAogICAgdm9pZCBk
ZWYoUHVyZVZhbHVlIHZhbHVlKQogICAgewogICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFs
dWVzLmFkZCh2YWx1ZSwgVmVjdG9yPE5vZGUqPigpKTsKICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2Rl
KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAg
ICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlW2ldOwogICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIs
IG1fYmxvY2spKSB7CiAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKGNhbmRpZGF0
ZSk7CiAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG1fbm9kZSk7CiAgICB9CiAgICAKICAgIE5vZGUqIGZpbmRSZXBs
YWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICB7CiAgICAgICAgTm9kZSogbWF0Y2gg
PSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwogICAgICAgIGlm
IChtYXRjaCkgewogICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgIEZvdW5kIGxvY2FsIG1hdGNoOiAiLCBtYXRjaCwgIlxuIik7CiAgICAgICAgICAg
IHJldHVybiBtYXRjaDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKG1fd3JpdGVzU29G
YXIub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgewogICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIE5vdCBsb29raW5nIGdsb2JhbGx5IGJlY2F1
c2Ugb2YgbG9jYWwgY2xvYmJlcjogIiwgbV93cml0ZXNTb0ZhciwgIlxuIik7CiAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBUaGlzIHBlcmZv
bXMgYSBiYWNrd2FyZCBzZWFyY2ggdG8gZmluZCBzb21lIHBvc3NpYmxlIGRlZigpIHRoYXQgbWF0
Y2hlcyBvdXIgaGVhcAogICAgICAgIC8vIGxvY2F0aW9uLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEg
cG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMgdGhhdCB0aGlzIG9uZSBtdXN0IGJlIHRoZQogICAg
ICAgIC8vIG1hdGNoIGFuZCBjb21wbGV0ZXMgdGhlIHNlYXJjaCBieSBoYWx0aW5nIGF0IHRoaXMg
YmxvY2suIEFzIHNvb24gYXMgaXQgZmluZHMgYSB3cml0ZSgpCiAgICAgICAgLy8gdGhhdCBvdmVy
bGFwcyB0aGUgbG9jYXRpb24ncyBoZWFwLCBpdCBzdG9wcywgYXNzdW1pbmcgdGhhdCB0aGVyZSBp
cyBubyBwb3NzaWJsZSBtYXRjaC4KICAgICAgICAKICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDg+IHdvcmtsaXN0OwogICAgICAgIEJpdFZlY3RvciBzZWVuOwogICAgICAgIAogICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnNb
aV07CiAgICAgICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgewogICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAg
IHNlZW4uc2V0KHByZWRlY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgCiAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBpbiBibG9j
ayAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBt
X2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4XTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2ssIG1fYmxvY2spICYmIGJsb2Nr
ICE9IG1fYmxvY2spIHsKICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CiAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1hdGNoKTsKICAgICAg
ICAgICAgICAgIG1hdGNoID0gZGF0YS5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgQXZhaWxhYmlsaXR5OiAiLCBtYXRjaCwgIlxuIik7CiAgICAgICAgICAgICAgICBpZiAo
bWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBleGFtaW5lIHRoZSBwcmVkZWNl
c3NvcnMgb2YgYSBtYXRjaC4gQXQgdGhpcyBwb2ludCB3ZSBqdXN0IHdhbnQgdG8KICAgICAgICAg
ICAgICAgICAgICAvLyBlc3RhYmxpc2ggdGhhdCBvdGhlciBibG9ja3Mgb24gdGhlIHBhdGggZnJv
bSBoZXJlIHRvIHRoZXJlIGRvbid0IGNsb2JiZXIKICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
bG9jYXRpb24gd2UncmUgaW50ZXJlc3RlZCBpbi4KICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIERlYWxpbmcg
d2l0aCB3cml0ZSBzZXQgIiwgZGF0YS53cml0ZXMsICJcbiIpOwogICAgICAgICAgICBpZiAoZGF0
YS53cml0ZXMub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgewogICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBDbG9iYmVyZWQu
XG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIAogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Ig
PSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOwogICAgICAgICAgICAgICAgaWYgKCFzZWVuLmdldChw
cmVkZWNlc3Nvci0+aW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KHByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICAgICBzZWVuLnNldChwcmVkZWNlc3Nvci0+
aW5kZXgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IAogICAgICAgIHJldHVybiBtYXRjaDsKICAgIH0KICAgIAogICAgdm9pZCBkZWYoSGVhcExvY2F0
aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEdvdCBoZWFwIGxvY2F0aW9uIGRlZjogIiwgbG9jYXRpb24s
ICIgLT4gIiwgdmFsdWUsICJcbiIpOwogICAgICAgIAogICAgICAgIE5vZGUqIG1hdGNoID0gZmlu
ZFJlcGxhY2VtZW50KGxvY2F0aW9uKTsKICAgICAgICAKICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBtYXRjaCwgIlxuIik7CiAgICAg
ICAgCiAgICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWls
YWJsZUF0VGFpbC5zZXQobG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KICAgICAgICAKICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKG1hdGNoKTsKICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgfQogICAgCiAgICBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRh
IHsKICAgICAgICBJbXB1cmVCbG9ja0RhdGEoKQogICAgICAgICAgICA6IGRpZFZpc2l0KGZhbHNl
KQogICAgICAgIHsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQ2xvYmJlclNldCB3cml0ZXM7
CiAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFpbDsKICAgICAgICBib29sIGRpZFZpc2l0
OwogICAgfTsKICAgIAogICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsKICAgIFZlY3RvcjxJ
bXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlRGF0YU1hcDsKICAgIAogICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgIE5vZGUqIG1fbm9kZTsKICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRh
OwogICAgQ2xvYmJlclNldCBtX3dyaXRlc1NvRmFyOwogICAgCiAgICBib29sIG1fY2hhbmdlZDsK
fTsKCn0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQoKYm9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3Jh
cGgpCnsKICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTENTRSBQaGFzZSIp
OwogICAgcmV0dXJuIHJ1blBoYXNlPExDU0VQaGFzZT4oZ3JhcGgpOwp9Cgpib29sIHBlcmZvcm1H
Q1NFKEdyYXBoJiBncmFwaCkKewogICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBHQ1NFIFBoYXNlIik7CiAgICByZXR1cm4gcnVuUGhhc2U8R0NTRVBoYXNlPihncmFwaCk7Cn0K
Cn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKCiNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234710</attachid>
            <date>2014-07-10 11:08:13 -0700</date>
            <delta_ts>2014-07-10 18:52:48 -0700</delta_ts>
            <desc>it passes tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117441</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAv
KiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIx
NEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2
NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87
IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAg
QEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5
NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZH
UHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVj
dHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1
cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5o
OyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTExNCw2ICs1MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZH
R3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAK
IAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyog
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNC
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAq
LywKQEAgLTYxMTcsNiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyog
REZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2Njcs
NyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3
QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlF
MDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZF
NzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYx
RDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIy
OEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAg
ICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRz
X3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAg
bWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZl
cikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAog
ICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAg
bWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVj
dHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpT
Q2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAot
ICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
c2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3Jv
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVz
KSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8g
aW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMg
bmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5v
ZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3Jp
dGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBc
Ci0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBp
ZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3
b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNh
dGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3
aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRo
aXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5v
ZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5n
IHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3Rh
dGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgog
ICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQy
KCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
cmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5j
aGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAg
ICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDgg
KzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAg
ICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAg
ICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNz
YTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5j
bHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgpAQCAt
MzksOTg0ICs0MCwzMjggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1j
bGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CituYW1lc3BhY2UgeworCitjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBwdWJsaWM6Ci0gICAg
Q1NFUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1
YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RIZWFw
IGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0KICAgICAKLSAgICBi
b29sIHJ1bigpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFsdWVQ
YWlyVHlwZSYgcGFpcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRT
dGF0ZSAhPSBCZWZvcmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0
QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAgIHBlcmZvcm1CbG9j
a0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhw
YWlyLmtleS5oZWFwKCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgCi0gICAgdW5zaWdu
ZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
VUlOVF9NQVgpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9jayk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
Cit9OwogCi0gICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgRWRn
ZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGls
ZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBu
b2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBv
dGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJO
b2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGls
ZDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7CitpbmxpbmUgdm9pZCBjbG9iYmVyKEltcHVyZU1h
cCYgbWFwLCBBYnN0cmFjdEhlYXAgaGVhcCkKK3sKKyAgICBDbG9iYmVyRmlsdGVyIGZpbHRlciho
ZWFwKTsKKyAgICBtYXAucmVtb3ZlSWYoZmlsdGVyKTsKK30KIAotICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNo
aWxkMSgpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAg
ICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAh
PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMigpLnNhbml0aXplZCgpOwotICAg
ICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5v
ZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBvdGhl
ck5vZGUtPmNoaWxkMygpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxk
KQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3Ro
ZXJDaGlsZCAhPSBjaGlsZDMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGNvbnN0YW50Q1NFKE5vZGUqIG5vZGUpCitj
bGFzcyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExDU0VQaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24gc3ViZXhw
cmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
bmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSAhPSBub2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUtPmNvbnN0YW50
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIE5vZGUqIGNvbnN0YW50U3RvcmFnZVBvaW50ZXJDU0UoTm9kZSogbm9kZSkKKyAg
ICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZv
clB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBDb25z
dGFudFN0b3JhZ2VQb2ludGVyKQorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5zdG9yYWdlUG9pbnRlcigpICE9IG5v
ZGUtPnN0b3JhZ2VQb2ludGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBtX3B1cmVWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1faW1wdXJlVmFsdWVzLmNs
ZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGdldENhbGxl
ZUxvYWRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAg
ICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gSWRlbnRp
dHkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtX25vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9n
cmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAg
ICAKLSAgICBOb2RlKiBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKE5vZGUqIGFycmF5KQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZCByZWFkKEFic3Ry
YWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIHZvaWQgd3JpdGUoQWJz
dHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9p
bnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0
ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNsb2JiZXIobV9pbXB1cmVWYWx1ZXMsIGhlYXAp
OwogICAgIH0KICAgICAKLSAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSog
cmVnaXN0ZXJzLCBpbnQgdmFyTnVtYmVyKQorICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYm
IG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAgICAg
ICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
ck51bWJlcigpICE9IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVycykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1i
ZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAKLSAgICBib29sIHZhckluamVjdGlvbldhdGNocG9pbnRFbGlt
aW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhckluamVjdGlvbldhdGNocG9pbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIEFycmF5TW9kZSBhcnJheU1v
ZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNoaWxkMikgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2hpbGQyKCkgPT0gY2hpbGQyCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBhcnJheU1vZGUudHlwZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAg
ICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgLy8gVHlwZWQgYXJyYXlzIAotICAgICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBlZEFycmF5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLm5vZGUo
KTsKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZhbCB3
aWxsIGNsb2JiZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRpbmcgZnJvbS4KLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQdXRC
eVZhbCBpcyBhY2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQotICAgICAgICAgICAgICAgIC8vIGRpZmZl
cmVudCB0eXBlIHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdvbid0
IGNsb2JiZXIgZWFjaCBvdGhlci4KLSAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IG9mIGNv
dXJzZSBmb3IgdHlwZWQgYXJyYXlzLCB3aGVyZSBhbGwgdHlwZWQgYXJyYXlzIGNsb2JiZXIgYWxs
IG90aGVyCi0gICAgICAgICAgICAgICAgLy8gdHlwZWQgYXJyYXlzISAgQW4gSW50MzJBcnJheSBj
YW4gYWxpYXMgYSBGbG9hdDY0QXJyYXkgZm9yIGV4YW1wbGUsIGFuZCBzbyBvbi4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBjaGVj
a0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFsdWUqIGZ1bmN0aW9uLCBOb2RlKiBjaGlsZDEp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgbV9ub2RlKTsK
KyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0V4ZWN1dGFi
bGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQor
ICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlKiBjaGlsZDEpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxk
MSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0
cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3Ry
dWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQu
Y29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgLy8gU2V0
dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS53cml0ZXNTdHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFs
SXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1
bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBj
YXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5
OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3Vy
IHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3
b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1ZXMu
YWRkKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAg
ICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIHN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNo
aWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGls
ZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c3RydWN0dXJlU2V0KCkuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnRyYW5z
aXRpb24oKS0+cHJldmlvdXMgIT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVy
ZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0
aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1w
b3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVy
ZToKLSAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRp
b24gY291bGQgYWZmZWN0IG91ciBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0
aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIG1f
Y2hhbmdlZDsKICAgICAKLSAgICBOb2RlKiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UpIC8vIE11c3QgYmUgc2Ft
ZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUt
PmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVz
IHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAg
ICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2Ug
YSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBOb2RlKiBtX25vZGU7CiAgICAgCi0g
ICAgTm9kZSogZ2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKKyAgICBQdXJlTWFwIG1fcHVyZVZhbHVlczsK
KyAgICBJbXB1cmVNYXAgbV9pbXB1cmVWYWx1ZXM7Cit9OworCitjbGFzcyBHQ1NFUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEdDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRp
b24iKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09
IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
W25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVu
dGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVz
IHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAg
ICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2Ug
YSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIGJvb2wgcnVuKCkKICAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4g
Y2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3
ZQotICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBj
dXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3Qn
cwotICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3Vt
ZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgICAgICAvLyBwb2lu
dGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdz
IGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVn
ZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVy
ZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sg
aWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5LgotICAgICAg
ICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2lu
dFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1l
bnRzKCk7CisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKKyAgICAgICAg
bV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwcmVPcmRlcjsKKyAgICAgICAgbV9ncmFw
aC5nZXRCbG9ja3NJblByZU9yZGVyKHByZU9yZGVyKTsKKyAgICAgICAgCisgICAgICAgIG1faW1w
dXJlRGF0YU1hcC5yZXNpemUobV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVyZWQgYnkgYmxvY2tzLiBOb2Rl
IHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CisgICAgICAgIC8vIGZvciBjb252ZW5p
ZW5jZSBvbmx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmVPcmRlci5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1f
aW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykKKyAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUlu
ZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGls
ZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBCYXNlZCBvbiBteSBleHBl
cmllbmNlIGRvaW5nIHRoaXMgYmVmb3JlLCB3aGF0IGZvbGxvd3MgbWlnaHQgaGF2ZSB0byBiZSBt
YWRlIGl0ZXJhdGl2ZS4KKyAgICAgICAgLy8gQnV0IGl0IGZlZWxzIGxpa2UsIHJpZ2h0IG5vdywg
dGhpcyB3b3JrcyBhcyBhIHNpbmdsZSBwYXNzIGJlY2F1c2Ugd2Ugb25seSB0dXJuIGEgbm9kZQor
ICAgICAgICAvLyBpbnRvIGEgdmFsdWUgb3IgaGVhcCBsb2NhdGlvbiBhZnRlciB3ZSBoYXZlIHBl
cmZvcm1lZCBzdWJzdGl0dXRpb25zIG9uIHRoYXQgbm9kZSdzCisgICAgICAgIC8vIGNoaWxkcmVu
LgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZU9yZGVyLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAgICAg
ICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAg
ICAgICAgICAgIG1fd3JpdGVzU29GYXIuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBibG9j
ayAiLCAqbV9ibG9jaywgIjpcbiIpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1f
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBt
X2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIExvb2tpbmcgYXQgbm9kZSAiLCBtX25vZGUsICI6
XG4iKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
Y291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJyYXku
Ci0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVm
Zm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9n
cmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50aXR5
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3Jh
cGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
IAotICAgIE5vZGUqIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9k
ZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEp
IAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlN
b2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZCBy
ZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2V0SW50ZXJuYWxGaWVsZExv
YWRFbGltaW5hdGlvbihOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxKQorICAgIHZvaWQgd3JpdGUo
QWJzdHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IG9wICYmIG5vZGUt
PmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2xvYmJl
cihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1fd3JpdGVz
U29GYXIuYWRkKGhlYXApOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVs
aW1pbmF0aW9uKCkKKyAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29w
ZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlTY29w
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgVmVjdG9yPE5vZGUqPigpKTsKKyAgICAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChtX25vZGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRMb2NhbExvYWRFbGltaW5hdGlv
bihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUqJiByZWxldmFudExvY2FsT3AsIGJvb2wgY2Fy
ZUFib3V0Q2xvYmJlcmluZykKLSAgICB7Ci0gICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAg
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAg
ICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgot
ICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChj
YXJlQWJvdXRDbG9iYmVyaW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlW2ld
OworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhjYW5kaWRh
dGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdp
dGgoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpbnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAod3JpdGVzT3ZlcmxhcChtX2dyYXBo
LCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzZXRSZXBs
YWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghcmVwbGFjZW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KLSAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKICAgICAgICAg
Ci0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGUoKQorICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChI
ZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFu
dG9tKCk7CisgICAgICAgIE5vZGUqIG1hdGNoID0gbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRh
aWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBGb3VuZCBsb2NhbCBtYXRj
aDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20p
Ci0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKHBoYW50b21UeXBlKTsKKyAgICAgICAgaWYgKG1fd3JpdGVzU29GYXIub3Zlcmxh
cHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgTm90IGxvb2tpbmcgZ2xvYmFsbHkgYmVjYXVzZSBvZiBs
b2NhbCBjbG9iYmVyOiAiLCBtX3dyaXRlc1NvRmFyLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgIC8v
IFRoaXMgcGVyZm9tcyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5kIHNvbWUgcG9zc2libGUgZGVm
KCkgdGhhdCBtYXRjaGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9uLiBBcyBzb29uIGFz
IGl0IGZpbmRzIGEgcG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMgdGhhdCB0aGlzIG9uZSBtdXN0
IGJlIHRoZQorICAgICAgICAvLyBtYXRjaCBhbmQgY29tcGxldGVzIHRoZSBzZWFyY2ggYnkgaGFs
dGluZyBhdCB0aGlzIGJsb2NrLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgd3JpdGUoKQorICAgICAg
ICAvLyB0aGF0IG92ZXJsYXBzIHRoZSBsb2NhdGlvbidzIGhlYXAsIGl0IHN0b3BzLCBhc3N1bWlu
ZyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1hdGNoLgogICAgICAgICAKLSAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gd29ya2xp
c3Q7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOwogICAgICAgICAKLSAgICAgICAgY2FzZSBJZGVu
dGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgdGhl
IHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KLSAg
ICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0
WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0g
ICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAg
Y2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0
aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTaW46
Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgotICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0g
ICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICBj
YXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElzRnVu
Y3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdp
c3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2UgVHlwZU9mOgotICAg
ICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
LSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXA6Ci0gICAgICAg
IGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAg
ICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIGNh
c2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICAgICAgTm9k
ZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgIGlmICghY2FuZGlkYXRl
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhjYW5k
aWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRhdGUtPmFyaXRoTW9kZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRl
LT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAg
ICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vlbi5z
ZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBpbiBi
bG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRh
ID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxsZWVMb2Fk
RWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdldExv
Y2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGUqIHBvc3NpYmxl
UmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpOwotICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9IEdldExvY2Fs
VW5saW5rZWQKLSAgICAgICAgICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAg
ICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2Fs
IHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQK
LSAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFu
dExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKLSAgICAgICAgICAgICAgICByZWxl
dmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsK
LQotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0g
ICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS0+dW5saW5rZWRMb2NhbCgp
LCByZWxldmFudExvY2FsT3BJZ25vcmVkLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxs
IGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRzLAotICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJl
c3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVw
LgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRTdG9yYWdlUG9pbnRl
ckNTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlM
ZW5ndGhFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxs
eSBwdXJlOiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgotICAgICAgICAvLyBiZSBDU0UnZCwgc28g
bG9uZyBhcyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBD
b21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBj
YXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1l
cmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1cmVD
U0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGguaXNQ
cmVkaWN0ZWROdW1lcmljYWwocmVwbGFjZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWlu
YXRvcnMuZG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOworICAgICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbWF0Y2gpOworICAgICAgICAgICAgICAgIG1h
dGNoID0gZGF0YS5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFp
bGFiaWxpdHk6ICIsIG1hdGNoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXhhbWluZSB0aGUgcHJlZGVjZXNzb3JzIG9m
IGEgbWF0Y2guIEF0IHRoaXMgcG9pbnQgd2UganVzdCB3YW50IHRvCisgICAgICAgICAgICAgICAg
ICAgIC8vIGVzdGFibGlzaCB0aGF0IG90aGVyIGJsb2NrcyBvbiB0aGUgcGF0aCBmcm9tIGhlcmUg
dG8gdGhlcmUgZG9uJ3QgY2xvYmJlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9jYXRp
b24gd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vz
c2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKLSAgICAgICAg
Ly8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJl
IG1ldC4KLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgaWYgKHZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpKQotICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1p
bmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBub2Rl
LT5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNo
aWxkMS5ub2RlKCksIGNoaWxkMi5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgRGVhbGluZyB3aXRo
IHdyaXRlIHNldCAiLCBkYXRhLndyaXRlcywgIlxuIik7CisgICAgICAgICAgICBpZiAoZGF0YS53
cml0ZXMub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJlZC5c
biIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24o
bm9kZS0+c3RydWN0dXJlU2V0KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAgICAg
ICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVs
aW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgICAgICBpZiAoY2hl
Y2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhlY3V0YWJsZSgpLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAg
ICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1v
ZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICBjYXNlIEdldEdldHRl
cjoKLSAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlT
dG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIs
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgICAgICBpZiAoaW52YWxpZGF0aW9uUG9pbnRFbGltaW5h
dGlvbigpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIGRvIG5vdGhp
bmcuCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAg
ICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBz
ZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgp
XSA9IG1faW5kZXhJbkJsb2NrOworICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgZGVm
KEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNo
YWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24gZGVmOiAiLCBsb2NhdGlvbiwgIiAt
PiAiLCB2YWx1ZSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBOb2RlKiBtYXRjaCA9IGZpbmRS
ZXBsYWNlbWVudChsb2NhdGlvbik7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyAr
K2kpCi0gICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBtYXRjaCwg
IlxuIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IHBlcmZvcm1Ob2RlQ1NFKG1fY3VycmVudE5vZGUpOworICAgICAgICBpZiAoIW1hdGNoKSB7Cisg
ICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5zZXQobG9jYXRpb24sIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwotICAgIE5vZGUqIG1f
Y3VycmVudE5vZGU7Ci0gICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7Ci0gICAgc3RkOjphcnJh
eTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwotICAgIGJvb2wgbV9jaGFuZ2Vk
OyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBv
biBvdGhlciBvcHRpbWl6YXRpb25zLgorICAgIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgeworICAg
ICAgICBJbXB1cmVCbG9ja0RhdGEoKQorICAgICAgICAgICAgOiBkaWRWaXNpdChmYWxzZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDbG9iYmVyU2V0IHdyaXRlczsK
KyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFpbDsKKyAgICAgICAgYm9vbCBkaWRWaXNp
dDsKKyAgICB9OworICAgIAorICAgIFB1cmVNdWx0aU1hcCBtX3B1cmVWYWx1ZXM7CisgICAgVmVj
dG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVEYXRhTWFwOworICAgIAorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9ub2RlOworICAgIEltcHVyZUJsb2NrRGF0YSogbV9p
bXB1cmVEYXRhOworICAgIENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICAKKyAgICBib29s
IG1fY2hhbmdlZDsKIH07CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3JhcGgpCiB7Ci0g
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKLSAgICBy
ZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIExDU0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TENTRVBo
YXNlPihncmFwaCk7Cit9CisKK2Jvb2wgcGVyZm9ybUdDU0UoR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgR0NTRSBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxHQ1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICsz
OCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJhdGhlciBwcm9maXRhYmxlLiBJdCBoYXMg
ZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5kIHdpbGwgbWF0Y2gKIC8vIGEgd2lkZSBy
YW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9kdWNl
IGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBjaGVh
cCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUxDU0UoR3Jh
cGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NBLgorYm9vbCBw
ZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24g
MTcwOTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IENs
b2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRT
ZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogfQogCiB2b2lk
IGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0
KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUgbm9P
cDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXpl
KGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwg
bm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRzQW5kV3JpdGVz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJlclNl
dCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwogICAg
IENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09wKTsKIH0KIAog
Ym9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiBy
ZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOwotICAg
IE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFk
ZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVybiBhZGRSZWFk
LnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFk
OworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFdy
aXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRX
cml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3Ap
OwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiti
b29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVy
aXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICByZXR1cm4gIWFk
ZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAgTm9PcENsb2Ji
ZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBub09wLCBhZGRQ
dXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFk
OworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdyaXRl
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBj
bG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJu
IGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFwKQogeworICAgIE5vT3BDbG9iYmVyaXpl
IG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkQWNjZXNzKGhlYXApOwotICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzKTsKKyAgICBjbG9iYmVy
aXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFjY2Vzcywgbm9PcCk7CiAgICAgcmV0dXJu
IGFkZEFjY2Vzcy5yZXN1bHQoKTsKIH0KIAogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7Ci0gICAgTm9PcENsb2JiZXJpemUg
YWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwogICAgIEFic3RyYWN0SGVhcE92ZXJs
YXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQs
IGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwg
bm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcwOTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgogI2luY2x1
ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVu
Y3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBl
bmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRl
ZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC02OSw2ICs3MSwyMyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgLy8gICBwcmlvciB0byB0
eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRpZCBz
b21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAgIAorICAgIC8vIFdoaWxlIHJlYWQoKSBh
bmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRyYWNrIHdoYXQg
c29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUgbWF5IHJlYWQgb3Igd3JpdGUgLSB0aGUg
ZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQgdGVsbHMgeW91IHRoZSBoZWFwIGxvY2F0
aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBoZWFwcykgdGhhdCBhcmUgZGVmaW5lZCBi
eSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlzZXMgYW4gYWJzdHJhY3QKKyAgICAvLyBo
ZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktpbmQuIEJyaWVmbHksIGEgbG9jYXRpb24g
ZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgorICAgIC8vIHdob3NlIHZhbHVlIGNhbiBi
ZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBsb2NhdGlvbnMg
cmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAg
IC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRvIENTRSBhIGxvYWQgZnJvbSB0aGUgaGVh
cCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hvdWxkIGJlCisgICAgLy8gICBzdWZmaWNp
ZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9kZS4KKyAgICAvLworICAgIC8vIC0gVGhl
IGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNvdWxkIGJlIGNs
b2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisgICAgLy8gICBDU0UgYXR0ZW1wdC4gSS5l
LiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0d2VlbiBzb21l
IG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBkZWZpbmVzIGEgSGVhcExvY2F0aW9uIHRo
YXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRlcyB0byBhbnkgYWJzdHJhY3QgaGVhcCB0
aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4gd2UgaGF2ZSBh
IHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNlbWFudGljcyBvZgorICAgIC8vICAgd3Jp
dGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhlbSB0byBiZSBz
b3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAgIC8vICAgaXMgQ1NFYWJsZS4KKwogICAg
IGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkpCiAgICAgICAgIHJlYWQoSlNDZWxs
X3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICs5NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQ
aGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJp
dE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0
UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAg
ICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0
ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNhc2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJp
dGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTEwMCwyOCArMTE5LDQ3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5k
OgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNh
c2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9v
bGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBM
b2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVj
a0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgog
ICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJl
cDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgor
ICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRo
RGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJp
dGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRhYmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTE0Miw3ICsxODAsNiBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0
UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBCcmVha3BvaW50Ogog
ICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0x
NTEsNiArMTg4LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAg
ICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2Zp
cmUpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CkBAIC0xOTUsMTIgKzIzNywyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoK
KyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc09i
amVjdExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6CiAg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5j
dGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0yMjMsMjcgKzI3
NywzMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRl
ciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFj
azo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6
CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywg
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxp
bmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTI3MywxMSArMzMz
LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGlzIGFwcGVh
cnMgdG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBvbmx5IHJlYWRpbmcgaW1tdXRhYmxlIGRh
dGEuCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwogICAgICAgICAg
ICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIFZhcmlhYmxlcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CkBAIC0yODUsNiArMzQ3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsK
QEAgLTI5Niw2ICszNTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMDcsNiAr
MzcxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAg
cmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMzAsOCArMzk1
LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVByb3BlcnRpZXMpOwotICAgICAgICAgICAg
cmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5
QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJv
cGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTM0Miw2ICs0MDcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgTm9k
ZSogYmFzZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogaW5kZXggPSBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCk7CisgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgpOwogICAgICAgICBz
d2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgpA
QCAtMzYzLDkgKzQzMSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVu
dHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVu
dHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFZh
cmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTM3OCw2ICs0NDYs
OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRp
ZXMpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkp
CisgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJv
cGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtMzkwLDYgKzQ2MSw5IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQor
ICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtNDAyLDYgKzQ3Niw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGlndW91
c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCkpCisgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CkBAIC00MjAsOSArNDk3LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAg
ICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVh
ZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4ndCBkZWYoKSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgdGhlc2Ugb3Bl
cmF0aW9ucyB0cnVuY2F0ZSB0aGVpciBpbnB1dHMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQz
MCw3ICs1MDgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgSW5zdGFu
Y2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZXR1cm47
CiAKQEAgLTQ0MiwxMiArNTE5LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgcmVhZChKU0Nl
bGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0
YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICByZWFk
KEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICBy
ZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5zdGFu
Y2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0
ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ1NywxNSArNTM2LDE4IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0
dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1
dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGls
ZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlp
Znk6CkBAIC00NzksNDIgKzU2MSw1OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpTdHJpbmcpCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0g
QXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5h
cnJheU1vZGUoKS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZWFk
KEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgcmVhZChNaXNj
RmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlTdG9yYWdl
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgIHJl
YWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVy
Vmlld19tb2RlKTsKLSAgICAgICAgcmVhZChCdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwotICAgICAg
ICByZWFkKEFycmF5QnVmZmVyX2RhdGEpOworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLCBNaXNjRmllbGRz
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJl
cikpOworICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVy
KTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFBy
b3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmll
ck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHJl
YWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVh
cCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAg
ICAgCi0gICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJlYWQoSlNP
YmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVy
dGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKSk7Cisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3JpdGUoaGVhcCk7CiAg
ICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMo
KSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmIChu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKQogICAgICAg
ICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5p
ZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOwor
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1l
ZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKQEAg
LTUyNSw3OCArNjI0LDg3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOwotICAgICAgICAgICAg
cmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxk
cyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJW
aWV3X2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobW9kZS50eXBlZEFycmF5VHlwZSgpICE9
IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTa2lwVG9w
U2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3JhcGguYWN0aXZh
dGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTa2lwVG9wU2NvcGVM
b2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdpc3RlcigpKSwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIHJlYWQoSlNWYXJpYWJsZU9iamVjdF9y
ZWdpc3RlcnMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVSZWdpc3RlcnNMb2Ms
IEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDMoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpLCBub2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAo
QWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3
QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgIGNhc2UgTmV3QXJyYXlCdWZm
ZXI6CisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogRW5hYmxlIENT
RSBmb3IgdGhlc2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1c2UgdGhl
cmUgaXMgbm8gd2F5CisgICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBub2RlIGFu
ZCBhIHZhbHVlIG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2VyZWQKKyAg
ICAgICAgLy8gdGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3YXkgb2Yg
ZGVmKCknaW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzM3CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3Jp
dGUoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6Ci0gICAg
Y2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKLSAgICBjYXNl
IE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoK
KyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgog
ICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RD
b3VudCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgVW50
eXBlZFVzZToKLSAgICAgICAgICAgIHJlYWQoV29ybGQpOwotICAgICAgICAgICAgd3JpdGUoV29y
bGQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgog
ICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkBAIC02MDks
NiArNzE3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cisg
ICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgQ29tcGFyZUVxOgpAQCAtNjE2LDggKzcyNSwxMCBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBp
ZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHJlYWQo
V29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYyNiw2
ICs3MzcsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgU3Ry
aW5nT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAg
ICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmIGEgcHVyZSB2YWx1ZSwgdW5mb3J0dW5hdGVseS4g
SSdsbCBhdm9pZCBsb2FkLWVsaW1pbmF0aW5nIHRoZXNlIGZvcgorICAgICAgICAgICAgLy8gbm93
LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2VsbFVz
ZToKQEAgLTY1MiwxMCArNzY1LDE2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkZWYo
KSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEga2luZCBvZiBtX2luZm8s
IGxpa2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIHJlYWQo
VmFyaWFibGVzKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRlZigpIHRoaXMgYnkgc3Bl
Y2lmeWluZyB0aGUgY29kZSBvcmlnaW4gYXMgYSBraW5kIG9mIG1faW5mbywgbGlrZSB3ZQorICAg
ICAgICAvLyBoYXZlIGZvciBQdXJlVmFsdWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3OTcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKQEAgLTY4NSw3ICs4MDQsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiBjbGFzcyBOb09wQ2xvYmJl
cml6ZSB7CiBwdWJsaWM6CiAgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KLSAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgorICAg
IHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xvYmJlcml6ZSB7
CkBAIC02OTUsNyArODE1LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUPgorICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0
ID0gdHJ1ZTsgfQogICAgIAogICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1
bHQ7IH0KICAgICAKQEAgLTcwMyw2ICs4MjQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1
bHQ7CiB9OwogCitib29sIGlzUHVyZShHcmFwaCYsIE5vZGUqKTsgLy8gUHVyZSBtZWFucyBpdCBk
b2VzIG5vIHJlYWRzIG9yIHdyaXRlcy4KK2Jvb2wgaGFzUHVyZURlZnMoR3JhcGgmLCBOb2RlKik7
IC8vIEhhdmluZyBwdXJlIGRlZnMgbWVhbnMgdGhhdCBwdXJlIENTRSBpcyBwb3NzaWJsZS4KKwog
Ym9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVy
bGFwcyB7CkBAIC03MzAsNiArODU0LDcyIEBAIHByaXZhdGU6CiBib29sIGFjY2Vzc2VzT3Zlcmxh
cChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBo
JiwgTm9kZSosIEFic3RyYWN0SGVhcCk7CiAKKy8vIFdlIHdvdWxkIGhhdmUgdXNlZCBiaW5kKCkg
Zm9yIHRoZXNlLCBidXQgYmVjYXVzZSBvZiB0aGUgb3Zlcmxhb2RpbmcgdGhhdCB3ZSBhcmUgZG9p
bmcsCisvLyBpdCdzIHF1aXRlIGEgYml0IG9mIGNsZWFyZXIgdG8ganVzdCB3cml0ZSB0aGlzIG91
dCB0aGUgdHJhZGl0aW9uYWwgd2F5LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgUmVh
ZE1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgorICAgIFJlYWRNZXRob2RDbG9iYmVyaXplKFQm
IHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBtX3Zh
bHVlLnJlYWQoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJs
aWM6CisgICAgV3JpdGVNZXRob2RDbG9iYmVyaXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJh
Y3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBtX3ZhbHVlLndyaXRlKGhlYXApOworICAgIH0K
K3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBEZWZNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBEZWZNZXRob2RDbG9iYmVy
aXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
bV92YWx1ZS5kZWYodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoSGVh
cExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5k
ZWYobG9jYXRpb24sIG5vZGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIEFkYXB0b3ImIGFkYXB0b3IpCit7CisgICAgUmVhZE1ldGhvZENs
b2JiZXJpemU8QWRhcHRvcj4gcmVhZChhZGFwdG9yKTsKKyAgICBXcml0ZU1ldGhvZENsb2JiZXJp
emU8QWRhcHRvcj4gd3JpdGUoYWRhcHRvcik7CisgICAgRGVmTWV0aG9kQ2xvYmJlcml6ZTxBZGFw
dG9yPiBkZWYoYWRhcHRvcik7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgcmVhZCwgd3Jp
dGUsIGRlZik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgLy8gTmVlZCB0byBwcm9jZXNzIHRoZSBncmFwaCBpbiByZXZlcnNlIERGUyBv
cmRlciwgc28gdGhhdCB3ZSBnZXQgdG8gdGhlIHVzZXMKICAgICAgICAgICAgIC8vIG9mIGEgbm9k
ZSBiZWZvcmUgd2UgZ2V0IHRvIHRoZSBub2RlIGl0c2VsZi4KICAgICAgICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5E
ZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgICAgICBtX2dyYXBoLmdldEJsb2Nr
c0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
ZXB0aEZpcnN0LnNpemUoKTsgaS0tOykKICAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRo
Rmlyc3RbaV0pOwogICAgICAgICB9IGVsc2UgewpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgZWRnZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tVW5jaGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MzksMjUgKzYzOSw3NSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRl
R2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjphZGRGb3JEZXB0aEZp
cnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwg
MTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqIGJs
b2NrKQorLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFuZCBwb3N0LW9yZGVyIHRyYXZlcnNhbHMuCitu
YW1lc3BhY2UgeworCitpbmxpbmUgdm9pZCBhZGRGb3JQcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9y
JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICBpZiAoc2Vlbi5jb250YWlucyhibG9j
aykpCisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2sp
OwotICAgIHNlZW4uYWRkKGJsb2NrKTsKKyAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwogfQog
Ci12b2lkIEdyYXBoOjpnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQpCitlbnVtIFBvc3RPcmRlclRhc2tLaW5kIHsKKyAgICBQb3N0T3JkZXJGaXJz
dFZpc2l0LAorICAgIFBvc3RPcmRlckFkZFRvUmVzdWx0Cit9OworCitzdHJ1Y3QgUG9zdE9yZGVy
VGFzayB7CisgICAgUG9zdE9yZGVyVGFzayhCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIFBv
c3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3JkZXJGaXJzdFZpc2l0KQorICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIFBvc3RPcmRlclRhc2tLaW5kIG1fa2luZDsK
K307CisKK2lubGluZSB2b2lkIGFkZEZvclBvc3RPcmRlcihWZWN0b3I8UG9zdE9yZGVyVGFzaywg
MTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKGJsb2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0
KSk7CisgICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0Owot
ICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47Ci0gICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIEJpdFZlY3RvciBzZWVuOwor
ICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKICAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29y
dChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAg
ICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNz
b3IoaSkpOworICAgIH0KK30KKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAx
Nj4gd29ya2xpc3Q7CisgICAgQml0VmVjdG9yIHNlZW47CisgICAgYWRkRm9yUG9zdE9yZGVyKHdv
cmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUG9zdE9yZGVyVGFzayB0YXNrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAg
ICAgICAgc3dpdGNoICh0YXNrLm1fa2luZCkgeworICAgICAgICBjYXNlIFBvc3RPcmRlckZpcnN0
VmlzaXQ6CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayh0YXNrLm1f
YmxvY2ssIFBvc3RPcmRlckFkZFRvUmVzdWx0KSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0YXNrLm1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIHRhc2subV9ibG9jay0+c3VjY2Vzc29y
KGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvc3RPcmRlckFkZFRvUmVz
dWx0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0YXNrLm1fYmxvY2spOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjYzLDcgKzY2Myw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgdm9pZCBpbml0aWFsaXplTm9k
ZU93bmVycygpOwogICAgIAotICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJsb2Nrc0luUHJlT3JkZXIo
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJsb2Nrc0luUG9zdE9y
ZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CiAgICAgCiAgICAgUHJvZmlsZXI6OkNv
bXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQo
KTsgfQogICAgIApAQCAtNzUxLDcgKzc1Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0
LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKLSAgICB2b2lkIGFkZEZvckRl
cHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9j
ayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMiwg
Tm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBI
ZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9raW5kLCAiOiIsIG1faGVhcCk7CisgICAgCisgICAgaWYgKCFtX2Jhc2UpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIlsiLCBtX2Jhc2UpOworICAgIGlmIChtX2lu
ZGV4KQorICAgICAgICBvdXQucHJpbnQoIiwgIiwgbV9pbmRleCk7CisgICAgb3V0LnByaW50KCJd
Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgSW52YWxpZExvY2F0aW9uS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkTG9j
YXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlk
YXRpb25Qb2ludExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkYXRpb25Qb2ludExvYyIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNPYmplY3RMb2M6CisgICAg
ICAgIG91dC5wcmludCgiSXNPYmplY3RMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIElzRnVuY3Rpb25Mb2M6CisgICAgICAgIG91dC5wcmludCgiSXNGdW5jdGlvbkxv
YyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHlwZU9mTG9jOgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVPZkxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgR2V0dGVyTG9jOgorICAgICAgICBvdXQucHJpbnQoIkdldHRlckxvYyIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlNldHRlckxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
VmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5TGVuZ3RoTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIkFycmF5TGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBCdXR0ZXJmbHlMb2M6CisgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5TG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlTG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkNoZWNrSGFzSW5zdGFuY2VMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVSZWdpc3RlcnNMb2M6CisgICAgICAgIG91dC5w
cmludCgiQ2xvc3VyZVJlZ2lzdGVyc0xvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQ2xvc3VyZVZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVW
YXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2xvYmFs
VmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiR2xvYmFsVmFyaWFibGVMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluZGV4ZWRQcm9wZXJ0eUxvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkUG9ycGVydHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2M6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYyIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbnN0
YW5jZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBNeUFyZ3Vt
ZW50QnlWYWxMb2M6CisgICAgICAgIG91dC5wcmludCgiTXlBcmd1bWVudEJ5VmFsTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBNeUFyZ3VtZW50c0xlbmd0aExvYzoK
KyAgICAgICAgb3V0LnByaW50KCJNeUFyZ3VtZW50c0xlbmd0aExvYyIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0eUxvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJOYW1lZFByb3BlcnR5TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTa2lwVG9wU2NvcGVMb2M6CisgICAgICAgIG91dC5wcmludCgiU2tpcFRvcFNjb3BlTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlZEFycmF5Qnl0ZU9m
ZnNldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlZEFycmF5Qnl0ZU9mZnNldExvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdIZWFwTG9jYXRpb25faAor
I2RlZmluZSBERkdIZWFwTG9jYXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBMb2NhdGlvbktpbmQgeworICAgIEludmFs
aWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgQXJyYXlMZW5ndGhMb2MsCisgICAgQnV0dGVyZmx5
TG9jLAorICAgIENoZWNrSGFzSW5zdGFuY2VMb2MsCisgICAgQ2xvc3VyZVJlZ2lzdGVyc0xvYywK
KyAgICBDbG9zdXJlVmFyaWFibGVMb2MsCisgICAgR2V0dGVyTG9jLAorICAgIEdsb2JhbFZhcmlh
YmxlTG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eUxvYywKKyAgICBJbmRleGVkUHJvcGVydHlTdG9y
YWdlTG9jLAorICAgIEluc3RhbmNlT2ZMb2MsCisgICAgSW52YWxpZGF0aW9uUG9pbnRMb2MsCisg
ICAgSXNGdW5jdGlvbkxvYywKKyAgICBJc09iamVjdExvYywKKyAgICBNeUFyZ3VtZW50QnlWYWxM
b2MsCisgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCisgICAgTmFtZWRQcm9wZXJ0eUxvYywKKyAg
ICBTZXR0ZXJMb2MsCisgICAgU2tpcFRvcFNjb3BlTG9jLAorICAgIFR5cGVPZkxvYywKKyAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKKyAgICBWYXJpYWJsZUxvYworfTsKKworY2xhc3MgSGVh
cExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBIZWFwTG9jYXRpb24oCisgICAgICAgIExvY2F0aW9u
S2luZCBraW5kID0gSW52YWxpZExvY2F0aW9uS2luZCwKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhl
YXAgPSBBYnN0cmFjdEhlYXAoKSwKKyAgICAgICAgTm9kZSogYmFzZSA9IG51bGxwdHIsIE5vZGUq
IGluZGV4ID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2hl
YXAoaGVhcCkKKyAgICAgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChraW5kID09IEludmFsaWRMb2NhdGlvbktpbmQpID09
ICFoZWFwKTsKKyAgICAgICAgQVNTRVJUKCEhbV9oZWFwIHx8ICFtX2Jhc2UpOworICAgICAgICBB
U1NFUlQobV9iYXNlIHx8ICFtX2luZGV4KTsKKyAgICB9CisgICAgCisgICAgSGVhcExvY2F0aW9u
KExvY2F0aW9uS2luZCBraW5kLCBBYnN0cmFjdEhlYXAgaGVhcCwgRWRnZSBiYXNlLCBFZGdlIGlu
ZGV4ID0gRWRnZSgpKQorICAgICAgICA6IEhlYXBMb2NhdGlvbihraW5kLCBoZWFwLCBiYXNlLm5v
ZGUoKSwgaW5kZXgubm9kZSgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSGVhcExvY2F0aW9u
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxp
ZExvY2F0aW9uS2luZCkKKyAgICAgICAgLCBtX2hlYXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpCisgICAgICAgICwgbV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9pbmRleChudWxscHRy
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhbV9oZWFwOyB9CisgICAgCisgICAgTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICBBYnN0cmFjdEhlYXAgaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cDsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBOb2Rl
KiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2hlYXAuaGFzaCgp
ICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2luZGV4KSArIG1fa2luZDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAg
ICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90
aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
IH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2hlYXAuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICBMb2NhdGlvbktpbmQgbV9raW5kOworICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
CisgICAgTm9kZSogbV9iYXNlOworICAgIE5vZGUqIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgSGVh
cExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSGVhcExvY2F0
aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBIZWFwTG9jYXRpb24mIGEsIGNvbnN0IEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkxvY2F0
aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3Rl
bXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAg
ICB0eXBlZGVmIEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlND
OjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJ
c1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxIZWFwTG9jYXRpb24sIE5vZGUq
PiBJbXB1cmVNYXA7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyBGb3IgbWF4aW11
bSBwcm9maXQsIHdlIHdhbGsgYmxvY2tzIGluIERGUyBvcmRlciB0byBlbnN1cmUgdGhhdCB3ZSBn
ZW5lcmFsbHkKICAgICAgICAgLy8gdGVuZCB0byBob2lzdCBkb21pbmF0b3JzIGJlZm9yZSBkb21p
bmF0ZWVzLgogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOwogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKICAgICAgICAgZm9yICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzczLDEwICszNzMsMTEgQEAgc3RydWN0IE5vZGUgewogICAg
IHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgfQotCi0gICAg
dm9pZCBjb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKCkKKyAgICAKKyAgICB2b2lkIHJlcGxhY2VX
aXRoKE5vZGUqIG90aGVyKQogICAgIHsKLSAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgIGNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgcmVwbGFjZW1lbnQg
PSBvdGhlcjsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0lkZW50aXR5KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MDkyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MCwxNCArMjUwLDE0IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAgICAgCiAgICAgcGVyZm9ybVN0cmVuZ3RoUmVk
dWN0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybUNTRShkZmcpOworICAgIHBlcmZvcm1MQ1NFKGRmZyk7
CiAgICAgcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7CiAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgIHBlcmZvcm1Db25z
dGFudEZvbGRpbmcoZGZnKTsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBjaGFuZ2Vk
IHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwotICAgIGNoYW5nZWQgfD0gcGVyZm9y
bUNTRShkZmcpOworICAgIGNoYW5nZWQgfD0gcGVyZm9ybUxDU0UoZGZnKTsKICAgICAKICAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKQEAgLTMxNiw3
ICszMTYsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
ICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29udmVy
c2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmcoZGZnKTsKLSAgICAgICAgcGVy
Zm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR0NTRShkZmcpOwogICAgICAgICBwZXJmb3Jt
TGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKQEAgLTMyOSw3ICszMjksNyBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MSUNNKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1QaGFudG9tUmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3Jt
SW50ZWdlckNoZWNrQ29tYmluaW5nKGRmZyk7Ci0gICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAg
ICAgICAgcGVyZm9ybUdDU0UoZGZnKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UncmUgbm90IGFsbG93ZWQgdG8gZG8gYW55IGZ1cnRoZXIgY29kZSBtb3Rpb24gYmVjYXVz
ZSBvdXIgcmVhc29uaW5nCiAgICAgICAgIC8vIGFib3V0IGNvZGUgbW90aW9uIGFzc3VtZXMgdGhh
dCBpdCdzIE9LIHRvIGluc2VydCBHQyBwb2ludHMgaW4gcmFuZG9tIHBsYWNlcy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHVyZVZhbHVlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQdXJlVmFsdWU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoR3JhcGg6Om9wTmFtZShvcCgpKSk7
CisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAg
aWYgKGNoaWxkcmVuKCkuY2hpbGQoaSkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGNo
aWxkcmVuKCkuY2hpbGQoaSkpOworICAgIH0KKyAgICBpZiAobV9pbmZvKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG1faW5mbyk7CisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUHVyZVZhbHVlX2gKKyNkZWZpbmUgREZHUHVyZVZhbHVlX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFB1cmVWYWx1ZSB7CitwdWJsaWM6CisgICAg
UHVyZVZhbHVlKCkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkKKyAgICAgICAgLCBtX2lu
Zm8oMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIHVpbnRwdHJfdCBpbmZvKQorICAgICAgICA6IG1f
b3Aob3ApCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICAgICAgLCBtX2luZm8o
aW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlSGFz
VmFyQXJncykpOworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCBjb25zdCB2b2lkKiBwdHIpCisgICAgICAgIDogUHVy
ZVZhbHVlKG9wLCBjaGlsZHJlbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocHRyKSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5
TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogUHVyZVZhbHVlKG9wLCBjaGlsZHJlbiwgc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigwKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShO
b2RlKiBub2RlLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3Ao
KSwgbm9kZS0+Y2hpbGRyZW4sIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFs
dWUoTm9kZSogbm9kZSwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1cmVWYWx1ZShub2Rl
LT5vcCgpLCBub2RlLT5jaGlsZHJlbiwgcHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVy
ZVZhbHVlKE5vZGUqIG5vZGUpCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUt
PmNoaWxkcmVuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkKKyAgICAg
ICAgLCBtX2luZm8oMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gbV9vcCA9PSBMYXN0Tm9kZVR5cGUgJiYgIW1faW5mbzsgfQorICAgIAor
ICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAgIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAgIHVp
bnRwdHJfdCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFz
aChzdGF0aWNfY2FzdDxpbnQ+KG1fb3ApKSArIG1fY2hpbGRyZW4uaGFzaCgpICsgbV9pbmZvOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVyZVZhbHVlJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IG90aGVyLm1fb3AKKyAgICAgICAg
ICAgICYmIG1fY2hpbGRyZW4gPT0gb3RoZXIubV9jaGlsZHJlbgorICAgICAgICAgICAgJiYgbV9p
bmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcCA9PSBMYXN0Tm9k
ZVR5cGUgJiYgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1fb3A7CisgICAgQWRq
YWNlbmN5TGlzdCBtX2NoaWxkcmVuOworICAgIHVpbnRwdHJfdCBtX2luZm87Cit9OworCitzdHJ1
Y3QgUHVyZVZhbHVlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHVyZVZh
bHVlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQdXJlVmFsdWUmIGEsIGNvbnN0IFB1cmVWYWx1ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHR5cGVkZWYgSlND
OjpERkc6OlB1cmVWYWx1ZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6
UHVyZVZhbHVlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgTm9kZSo+IFB1cmVNYXA7Cit0eXBlZGVmIEhhc2hN
YXA8UHVyZVZhbHVlLCBWZWN0b3I8Tm9kZSo+PiBQdXJlTXVsdGlNYXA7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUHVyZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVh
cigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwotICAgICAgICAg
ICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7
CisgICAgICAgICAgICBibG9jay0+c3NhID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrOjpT
U0FEYXRhPihibG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9h
cmd1bWVudHMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAg
ICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdl
dEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBtX2dyYXBoLmdl
dEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAKICAgICAgICAgaW50IG1heE51bWJlck9m
QXJndW1lbnRzID0gLTE7CiAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGRlcHRo
Rmlyc3Quc2l6ZSgpOyBibG9ja0luZGV4LS07ICkgewpJbmRleDogU291cmNlL1dURi93dGYvSGFz
aE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkocmV2aXNpb24g
MTcwOTI5KQorKysgU291cmNlL1dURi93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNiArMTIwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCByZW1vdmUoY29uc3QgS2V5VHlwZSYp
OwogICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgcmVtb3ZlSWYoRnVuY3RvciYgZnVuY3Rvcik7CiAgICAgdm9pZCBjbGVh
cigpOwogCiAgICAgTWFwcGVkVHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmKTsgLy8gZWZmaWNpZW50
IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQpAQCAtMzU0LDYgKzM1NiwxMyBAQCBpbmxp
bmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6cmVtb3ZlSWYoRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBtX2ltcGwucmVtb3ZlSWYo
ZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZChrZXkpKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxNzA5MjkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAg
IHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvcik7CiAgICAg
ICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRv
cik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgICAgIHZvaWQgcmVt
b3ZlSWYoRnVuY3RvciYpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hh
c2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7
IH0KQEAgLTEwMzEsNiArMTAzMywyOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgaW5saW5lIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpyZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV90YWJsZVNpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChpc0VtcHR5
T3JEZWxldGVkQnVja2V0KG1fdGFibGVbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZ1bmN0b3IobV90YWJsZVtpXSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlbGV0ZUJ1
Y2tldChtX3RhYmxlW2ldKTsKKyAgICAgICAgICAgICsrbV9kZWxldGVkQ291bnQ7CisgICAgICAg
ICAgICAtLW1fa2V5Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaG91
bGRTaHJpbmsoKSkKKyAgICAgICAgICAgIHNocmluaygpOworICAgICAgICAKKyAgICAgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGF1
dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKGludCBzaXplKSAtPiBWYWx1ZVR5cGUqCiAgICAg
ewogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBl
eHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2NzZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9nY3NlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1w
b2x5LWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9nY3NlLXBvbHktZ2V0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdl
dC1sZXNzLW9idmlvdXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cworCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNz
LW9idmlvdXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mt
b2J2aW91cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L2djc2UtcG9seS1nZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nY3NlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2djc2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3NlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2Nz
ZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBA
QAorKGZ1bmN0aW9uKG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEw
MDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBh
ID0gby5mOworICAgICAgICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBvLmY7CisgICAg
ICAgIHZhciBkID0gby5mOworICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgdmFyIGUgPSBv
LmY7CisgICAgICAgICAgICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBnID0gby5mOwor
ICAgICAgICAgICAgdmFyIGggPSBvLmY7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAg
ICAgICAgIHZhciBqID0gby5mOworICAgICAgICAgICAgICAgIHZhciBrID0gby5mOworICAgICAg
ICAgICAgICAgIHZhciBsID0gby5mOworICAgICAgICAgICAgICAgIHZhciBtID0gby5mOworICAg
ICAgICAgICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gby5mOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHMgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gby5mOworICAgICAgICAgICAg
ICAgICAgICBpZiAodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSByOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdG1w
ID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChy
ZXN1bHQgIT0gKG4gLyAyKSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKHtmOjQyLCBnOjB9LCB7ZzowLCBmOjQz
fSk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHkt
Z2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2djc2UtcG9seS1nZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzcgQEAKKyhmdW5jdGlvbigpeworICAgIHZhciBvID0ge2Y6NDIsIGc6MH07CisgICAgdmFyIHAg
PSB7ZzowLCBmOjQzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7
CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBhID0gby5m
OworICAgICAgICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBvLmY7CisgICAgICAgIHZh
ciBkID0gby5mOworICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgdmFyIGUgPSBvLmY7Cisg
ICAgICAgICAgICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBnID0gby5mOworICAgICAg
ICAgICAgdmFyIGggPSBvLmY7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgICAg
IHZhciBqID0gby5mOworICAgICAgICAgICAgICAgIHZhciBrID0gby5mOworICAgICAgICAgICAg
ICAgIHZhciBsID0gby5mOworICAgICAgICAgICAgICAgIHZhciBtID0gby5mOworICAgICAgICAg
ICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gby5mOworICAgICAg
ICAgICAgICAgICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBv
LmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gby5mOworICAgICAgICAgICAgICAgICAg
ICBpZiAodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSByOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdG1wID0gbzsK
KyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQg
IT0gKG4gLyAyKSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzcgQEAKKyhmdW5jdGlvbigpeworICAgIHZhciBvID0ge2Y6NDJ9OworICAgIHZhciBwID0ge2Y6
NDN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3Ig
KHZhciBpID0gMCA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIGEgPSBvLmY7CisgICAgICAg
IHZhciBiID0gby5mOworICAgICAgICB2YXIgYyA9IG8uZjsKKyAgICAgICAgdmFyIGQgPSBvLmY7
CisgICAgICAgIGlmIChkKSB7CisgICAgICAgICAgICB2YXIgZSA9IG8uZjsKKyAgICAgICAgICAg
IHZhciBmID0gby5mOworICAgICAgICAgICAgdmFyIGcgPSBvLmY7CisgICAgICAgICAgICB2YXIg
aCA9IG8uZjsKKyAgICAgICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICAgICAgdmFyIGogPSBv
LmY7CisgICAgICAgICAgICAgICAgdmFyIGsgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGwg
PSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIG0gPSBvLmY7CisgICAgICAgICAgICAgICAgaWYg
KG0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBvLmY7CisgICAgICAgICAgICAgICAg
ICAgIHZhciByID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG8uZjsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHQgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIGlmICh0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBv
ID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAobiAvIDIp
ICogby5mICsgKG4gLyAyKSAqIHAuZikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234737</attachid>
            <date>2014-07-10 18:52:48 -0700</date>
            <delta_ts>2014-07-11 11:47:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>131863</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MiBA
QAorMjAxNC0wNy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBzaG91bGQgYmUgYWJsZSB0byBkbyBHQ1NFIGluIFNTQSBhbmQgdGhpcyBz
aG91bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBDU0UgaW4gQ1BTLCBhbmQgYm90aCBvZiB0aGVzZSB0
aGluZ3Mgc2hvdWxkIHVzZSBhYnN0cmFjdCBoZWFwcyBmb3IgcmVhc29uaW5nIGFib3V0IGVmZmVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyByZW1vdmVzIHRoZSBvbGQgQ1NFIHBoYXNlLCB3aGljaCB3YXMgYmFzZWQgb24gbWFu
dWFsbHkgd3JpdHRlbiBiYWNrd2FyZC1zZWFyY2ggcnVsZXMKKyAgICAgICAgZm9yIGFsbCBvZiB0
aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRoaW5ncyB3ZSBjYXJlZCBhYm91dCwgYW5kIGFkZHMgYSBu
ZXcgbG9jYWwvZ2xvYmFsIENTRQorICAgICAgICAobG9jYWwgZm9yIENQUyBhbmQgZ2xvYmFsIGZv
ciBTU0EpIHRoYXQgbGVhdmVzIHRoZSBub2RlIHNlbWFudGljcyBhbG1vc3QgZW50aXJlbHkgdXAg
dG8KKyAgICAgICAgY2xvYmJlcml6ZSgpLiBUaHVzLCB0aGUgQ1NFIHBoYXNlIGl0c2VsZiBqdXN0
IHdvcnJpZXMgYWJvdXQgdGhlIGFsZ29yaXRobXMgYW5kIGRhdGEKKyAgICAgICAgc3RydWN0dXJl
cyB1c2VkIGZvciBzdG9yaW5nIHNldHMgb2YgYXZhaWxhYmxlIHZhbHVlcy4gVGhpcyByZXN1bHRz
IGluIG1vcmUgdGhhbiBhIDJ4CisgICAgICAgIHJlZHVjdGlvbiBpbiBjb2RlIGluIENTRVBoYXNl
LmNwcCB3aGlsZSBncmVhdGx5IGluY3JlYXNpbmcgdGhlIHBoYXNlJ3MgcG93ZXIgKHNpbmNlIGl0
IG5vdworICAgICAgICBkb2VzIGdsb2JhbCBDU0UpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBhY2NvbXBsaXNoZWQgYnkgYWRkaW5nIHRoZSBjb25jZXB0IG9mICJkZWYiIHRvIGNsb2JiZXJp
emUoKS4gSWYgY2xvYmJlcml6ZSgpIGNhbGxzCisgICAgICAgIGRlZigpLCBpdCBtZWFucyB0aGF0
IHRoZSBub2RlIGJlaW5nIGFuYWx5emVkIG1ha2VzIGF2YWlsYWJsZSBzb21lIHZhbHVlIGluIHNv
bWUgREZHIG5vZGUsCisgICAgICAgIGFuZCB0aGF0IGZ1dHVyZSBhdHRlbXB0cyB0byBjb21wdXRl
IHRoYXQgdmFsdWUgY2FuIHNpbXBseSB1c2UgdGhhdCBub2RlLiBUaGVyZSBhcmUgdHdvCisgICAg
ICAgIGtpbmRzIG9mIHRoaW5ncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gZGVmKCk6CisgICAgICAg
IAorICAgICAgICBQdXJlVmFsdWUuIFRoaXMgY2FwdHVyZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHB1cmUgbm9kZXMgLSBub2RlcyB0aGF0CisgICAgICAgICAg
ICBuZWl0aGVyIHJlYWQgbm9yIHdyaXRlLCBhbmQgcHJvZHVjZSBhIHZhbHVlIHRoYXQgaXMgYSBD
U0UgY2FuZGlkYXRlIC0gYXJlIGlkZW50aWNhbC4gSXQKKyAgICAgICAgICAgIGNhcnJpZXMgdGhl
IE5vZGVUeXBlLCBhbiBBZGphY2VuY3lMaXN0LCBhbmQgb25lIHdvcmQgb2YgbWV0YS1kYXRhLiBU
aGUgbWV0YS1kYXRhIGlzCisgICAgICAgICAgICB1c3VhbGx5IHVzZWQgZm9yIHRoaW5ncyBsaWtl
IHRoZSBhcml0aG1ldGljIG1vZGUgb3IgY29uc3RhbnQgcG9pbnRlci4gUGFzc2luZyBhCisgICAg
ICAgICAgICBQdXJlVmFsdWUgdG8gZGVmKCkgbWVhbnMgdGhhdCB0aGUgbm9kZSBwcm9kdWNlcyBh
IHZhbHVlIHRoYXQgaXMgdmFsaWQgYW55d2hlcmUgdGhhdCB0aGUKKyAgICAgICAgICAgIG5vZGUg
ZG9taW5hdGVzLgorICAgICAgICAKKyAgICAgICAgSGVhcExvY2F0aW9uLiBUaGlzIGRlc2NyaWJl
cyBhIGxvY2F0aW9uIGluIHRoZSBoZWFwIHRoYXQgY291bGQgYmUgd3JpdHRlbiB0byBvciByZWFk
IGZyb20uCisgICAgICAgICAgICBCb3RoIHN0b3JlcyBhbmQgbG9hZHMgY2FuIGRlZigpIGEgSGVh
cExvY2F0aW9uLiBIZWFwTG9jYXRpb24gY2FycmllcyBhcm91bmQgYW4gYWJzdHJhY3QKKyAgICAg
ICAgICAgIGhlYXAgdGhhdCBib3RoIHNlcnZlcyBhcyBwYXJ0IG9mIHRoZSAibmFtZSIgb2YgdGhl
IGhlYXAgbG9jYXRpb24gKHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgICBvdGhlciBmaWVs
ZHMgb2YgSGVhcExvY2F0aW9uKSBhbmQgYWxzbyB0ZWxscyB1cyB3aGF0IHdyaXRlKCkncyB0byB3
YXRjaCBmb3IuIElmIHNvbWVvbmUKKyAgICAgICAgICAgIHdyaXRlKCkncyB0byBhbiBhYnN0cmFj
dCBoZWFwIHRoYXQgb3ZlcmxhcHMgdGhlIGhlYXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBIZWFwTG9j
YXRpb24sCisgICAgICAgICAgICB0aGVuIGl0IG1lYW5zIHRoYXQgdGhlIHZhbHVlcyBmb3IgdGhh
dCBsb2NhdGlvbiBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgYXBwcm9hY2ggaXMgc3VmaWNpZW50bHkgY2xldmVyIHRoYXQgdGhlIENTRVBoYXNlIGl0c2Vs
ZiBjYW4gZm9jdXMgb24gdGhlIG1lY2hhbmlzbSBvZgorICAgICAgICB0cmFja2luZyB0aGUgUHVy
ZVZhbHVlPT5ub2RlIGFuZCBIZWFwTG9jYXRpb249Pm5vZGUgbWFwcywgd2l0aG91dCBoYXZpbmcg
dG8gd29ycnkgYWJvdXQKKyAgICAgICAgaW50ZXJwcmV0aW5nIHRoZSBzZW1hbnRpY3Mgb2YgZGlm
ZmVyZW50IERGRyBub2RlIHR5cGVzIC0gdGhhdCBpcyBub3cgYWxtb3N0IGVudGlyZWx5IGluCisg
ICAgICAgIGNsb2JiZXJpemUoKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzbGlnaHQg
T2N0YW5lIGFuZCBMb25nU3BpZGVyIHNwZWVkLXVwLiBJbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRo
aW5ncywgaXQncyBub3QgYQorICAgICAgICBiaWcgd2luIGJlY2F1c2UgTExWTSB3YXMgYWxyZWFk
eSBnaXZpbmcgdXMgbW9zdCBvZiB3aGF0IHdlIG5lZWRlZCBpbiBpdHMgR1ZOLiBTdGlsbCwgdGhp
cworICAgICAgICBpcyBhIGdvb2QgdGhpbmcgLSBpdCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgTExW
TSBJUiB3ZSBnZW5lcmF0ZSwgaXQgcmVtb3ZlcyB0aGUgb2xkIENTRSdzCisgICAgICAgIGhlYXAg
bW9kZWxpbmcgKHdoaWNoIHdhcyBhIGNvbnN0YW50IHNvdXJjZSBvZiBidWdzKSwgYW5kIGl0IGRv
ZXMgaW1wcm92ZSB0aGUgY29kZSB3ZQorICAgICAgICBnZW5lcmF0ZSBhICp0aW55KiBiaXQuIEFs
c28sIGFueSBmdXR1cmUgb3B0aW1pemF0aW9ucyB0aGF0IGRlcGVuZCBvbiBHQ1NFIHdpbGwgbm93
IGJlCisgICAgICAgIGVhc2llciB0byBpbXBsZW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAgICAgICogZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpoYXNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUxDU0UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1HQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Q1NFUGhhc2UpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpydW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjplbmRJbmRleEZvclB1cmVDU0UpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwdXJlQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Y29uc3RhbnRDU0UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpjb25zdGFudFN0b3JhZ2VQb2ludGVyQ1NFKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6Omdsb2JhbFZhckxvYWRFbGlt
aW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNjb3BlZFZh
ckxvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OnZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tFeGVjdXRhYmxlRWxpbWlu
YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja1N0cnVj
dHVyZUVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXRMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNl
OjpnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja0FycmF5RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVs
aW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW50
ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OmdldE15U2NvcGVMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmludmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlclNldC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6YWRkUmVhZHMpOgorICAgICAgICAoSlNDOjpERkc6OmFkZFdyaXRlcyk6
CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHNBbmRXcml0ZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OnJlYWRzT3ZlcmxhcCk6CisgICAgICAgIChKU0M6OkRGRzo6d3JpdGVzT3ZlcmxhcCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmlzUHVy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6aGFzUHVyZURlZnMpOgorICAgICAgICAoSlNDOjpERkc6
OmRvZXNXcml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFjY2Vzc2VzT3ZlcmxhcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6d3JpdGVzT3ZlcmxhcCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb09wQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6Q2hlY2tD
bG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWFkTWV0aG9kQ2xv
YmJlcml6ZTo6UmVhZE1ldGhvZENsb2JiZXJpemUpOgorICAgICAgICAoSlNDOjpERkc6OlJlYWRN
ZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpXcml0ZU1l
dGhvZENsb2JiZXJpemU6OldyaXRlTWV0aG9kQ2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6V3JpdGVNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZWZNZXRob2RDbG9iYmVyaXplOjpEZWZNZXRob2RDbG9iYmVyaXplKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBkZmcv
REZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRCbG9ja3NJblByZU9yZGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExv
Y2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0hlYXBM
b2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OkhlYXBM
b2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpvcGVyYXRvciEpOgor
ICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6a2luZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SGVhcExvY2F0aW9uOjpoZWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246
OmJhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVh
cExvY2F0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRp
b25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoOjplcXVh
bCk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6cmVwbGFjZVdpdGgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1BoYW50b21VbmNoZWNrZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAg
ICAgKiBkZmcvREZHUHVyZVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHVy
ZVZhbHVlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHUHVyZVZhbHVlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6UHVyZVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZH
OjpQdXJlVmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjpv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkRGRzo6UHVyZVZhbHVlOjppbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6
Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6
UHVyZVZhbHVlSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpsb3dlcik6CisKIDIwMTQtMDctMDggIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBNb3ZlIEZsdXNoKFNldExvY2FsKSBzdG9y
ZSBlbGltaW5hdGlvbiB0byBTdHJlbmd0aFJlZHVjdGlvblBoYXNlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdGdW5jdGlvbldoaXRlbGlz
dC5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNw
cAorICAgIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAogICAgIGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAg
ICBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKQEAgLTE4Niw2ICsx
ODcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFuLmNwcAog
ICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdQdXJlVmFsdWUuY3BwCiAgICAg
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzA5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGguY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CkBAIC00MzcsNiArNDM4LDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Fm
ZXBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxh
dGl2ZUpJVC5jcHAiIC8+CkBAIC05NzUsNiArOTc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdHUFJJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHR3JhcGguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFw
aFNhZmVwb2ludC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBM
b2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5z
ZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuaCIgLz4KQEAgLTEwMTUsNiArMTAxOCw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIg
Lz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4
MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0
RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBw
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkIxNEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIx
ODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4
RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZH
SGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVy
ZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJD
OSAvKiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAg
Ki87IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1
QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4
OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMs
MTAgQEAKIAkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIw
MDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5l
Q2FjaGVXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgx
MzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsg
cGF0aCA9IGRmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0
aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBw
YXRoID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcv
REZHUHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYx
OTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1
Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNB
OTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZH
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRv
ci5oOyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTExNCw2ICs1MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyog
REZHR3JhcGguaCAqLywKIAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhT
YWZlcG9pbnQuY3BwICovLAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFw
aFNhZmVwb2ludC5oICovLAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwICovLAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5l
Q2FjaGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lu
bGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1
NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDgg
QEAKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIg
LyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdG
MSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2
RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
aCAqLywKQEAgLTYxMTcsNiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVC
IC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBC
OTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5p
ZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIg
LyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2
NjcsNyBAQAogCQkJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAw
NUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4
RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2
MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4Qjky
QzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
OEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3
NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3
NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8q
IERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkx
MDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlF
eGl0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNU
UkFDVF9IRUFQX0tJTkQobWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBc
CiAgICAgbWFjcm8oV29ybGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBc
Ci0gICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1l
bnRzX3JlZ2lzdGVycykgXAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0g
ICAgbWFjcm8oQXJyYXlCdWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1
ZmZlcikgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhC
dXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikg
XAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVm
ZmVyVmlld19sZW5ndGgpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0g
ICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlEKSBcCiAgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3Jv
KEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkg
XAotICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rp
b25fc2NvcGVDaGFpbikgXAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1h
Y3JvKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0
aWVzKSBcCkBAIC03Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhBYnNvbHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwg
dG8gaW5kaWNhdGUgdGhhdCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMg
aXMgbmV2ZXIgZGlyZWN0bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBh
IG5vZGUgY2xvYmJlcnMgdGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8g
d3JpdGUgd29ybGQgdG8gY2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJl
KSBcCi0gICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhh
dCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5v
dCB3b3JrLiAqL1wKKyAgICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5k
aWNhdGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlv
biB3aWxsIG5vdCB3b3JrLiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNl
IHRoaXMgZm9yIHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhl
IG5vZGUgaXMgaW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRo
aW5nIHRoYXQgaGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRl
U3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxp
c3QuaAkocmV2aXNpb24gMTcwOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGlj
OgogICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9
CiAgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSAwOworICAgICAgICBpZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWNoaWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hp
bGQyKCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAg
ICAgcmVzdWx0ICs9IGNoaWxkMygpLmhhc2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lM
aXN0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhl
ci5jaGlsZDEoKQorICAgICAgICAgICAgJiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAg
ICAgICAgICAgICYmIGNoaWxkMygpID09IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHBy
aXZhdGU6CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcx
LDggKzE3MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICAgICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsK
LSAgICBPd25QdHI8U1NBRGF0YT4gc3NhOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+
IHNzYTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAg
ICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgor
I2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAj
aW5jbHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgpA
QCAtMzksOTg0ICs0MCwzMjggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1jbGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CituYW1lc3BhY2UgeworCitjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBwdWJsaWM6Ci0g
ICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9u
IHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RI
ZWFwIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0KICAgICAKLSAg
ICBib29sIHJ1bigpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFs
dWVQYWlyVHlwZSYgcGFpcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSAhPSBCZWZvcmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGgu
Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
ICAgICBwZXJmb3JtQmxvY2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAgIHBlcmZvcm1C
bG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFw
cyhwYWlyLmtleS5oZWFwKCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgCi0gICAgdW5z
aWduZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gVUlOVF9NQVgpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9j
ayk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIEFic3RyYWN0SGVhcCBtX2hl
YXA7Cit9OwogCi0gICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAg
RWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBj
aGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMg
PSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
KiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3Ro
ZXJOb2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBj
aGlsZDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7CitpbmxpbmUgdm9pZCBjbG9iYmVyKEltcHVy
ZU1hcCYgbWFwLCBBYnN0cmFjdEhlYXAgaGVhcCkKK3sKKyAgICBDbG9iYmVyRmlsdGVyIGZpbHRl
cihoZWFwKTsKKyAgICBtYXAucmVtb3ZlSWYoZmlsdGVyKTsKK30KIAotICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUt
PmNoaWxkMSgpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAg
ICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGls
ZCAhPSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMigpLnNhbml0aXplZCgpOwot
ICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhl
ck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBv
dGhlck5vZGUtPmNoaWxkMygpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNo
aWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJDaGlsZCAhPSBjaGlsZDMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGNvbnN0YW50Q1NFKE5vZGUqIG5vZGUp
CitjbGFzcyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExDU0VQaGFz
ZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24gc3Vi
ZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJO
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+
b3AoKSAhPSBub2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUtPmNvbnN0
YW50KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAotICAgIE5vZGUqIGNvbnN0YW50U3RvcmFnZVBvaW50ZXJDU0UoTm9kZSogbm9kZSkK
KyAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBD
b25zdGFudFN0b3JhZ2VQb2ludGVyKQorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50
U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKyAg
ICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9n
cmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5zdG9yYWdlUG9pbnRlcigpICE9
IG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBtX3B1cmVWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1faW1wdXJlVmFsdWVz
LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGdldENh
bGxlZUxvYWRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAg
ICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihtX25vZGUpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gSWRl
bnRpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtX25vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUo
bV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0K
ICAgICAKLSAgICBOb2RlKiBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKE5vZGUqIGFycmF5KQot
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9pZCByZWFkKEFi
c3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9u
KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIHZvaWQgd3JpdGUo
QWJzdHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFB1dEdsb2Jh
bFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVn
aXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNsb2JiZXIobV9pbXB1cmVWYWx1ZXMsIGhl
YXApOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9k
ZSogcmVnaXN0ZXJzLCBpbnQgdmFyTnVtYmVyKQorICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldENsb3N1
cmVWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gcmVnaXN0ZXJz
ICYmIG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAg
ICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnZhck51bWJlcigpICE9IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVycykKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
LSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJO
dW1iZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBib29sIHZhckluamVjdGlvbldhdGNocG9pbnRF
bGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhckluamVjdGlvbldhdGNocG9p
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIEFycmF5TW9kZSBhcnJh
eU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNoaWxkMikgCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewot
ICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2hpbGQyKCkgPT0gY2hpbGQyCi0gICAgICAgICAgICAgICAgICAgICYmIG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBhcnJheU1vZGUudHlwZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgLy8gVHlwZWQgYXJyYXlzIAotICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBlZEFycmF5
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAg
JiYgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZh
bCB3aWxsIGNsb2JiZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRpbmcgZnJvbS4KLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQ
dXRCeVZhbCBpcyBhY2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQotICAgICAgICAgICAgICAgIC8vIGRp
ZmZlcmVudCB0eXBlIHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdv
bid0IGNsb2JiZXIgZWFjaCBvdGhlci4KLSAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IG9m
IGNvdXJzZSBmb3IgdHlwZWQgYXJyYXlzLCB3aGVyZSBhbGwgdHlwZWQgYXJyYXlzIGNsb2JiZXIg
YWxsIG90aGVyCi0gICAgICAgICAgICAgICAgLy8gdHlwZWQgYXJyYXlzISAgQW4gSW50MzJBcnJh
eSBjYW4gYWxpYXMgYSBGbG9hdDY0QXJyYXkgZm9yIGV4YW1wbGUsIGFuZCBzbyBvbi4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBj
aGVja0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFsdWUqIGZ1bmN0aW9uLCBOb2RlKiBjaGls
ZDEpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0Uo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgbV9ub2Rl
KTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUtPmNo
aWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0V4ZWN1
dGFibGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQx
KQorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlKiBjaGlsZDEpCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNo
aWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYm
IHN0cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYg
c3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVT
ZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgLy8g
U2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5
VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNw
ZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0
byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5
aWZ5OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAg
ICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qg
b3VyIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBp
dCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVWYWx1
ZXMuYWRkKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpCisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAor
ICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIHN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUq
IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBj
aGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c3RydWN0dXJlU2V0KCkuaXNTdWJz
ZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXMgIT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAg
ICAgICAgICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVj
dHVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkg
d2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3Mg
aW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVj
dHVyZToKLSAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmlj
YXRpb24gY291bGQgYWZmZWN0IG91ciBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgIC8vIEJ1
dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29s
IG1fY2hhbmdlZDsKICAgICAKLSAgICBOb2RlKiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBi
YXNlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRl
bnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UpIC8vIE11c3QgYmUg
c2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmll
ck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFz
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5ub2RlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBOb2RlKiBtX25vZGU7CiAgICAg
Ci0gICAgTm9kZSogZ2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKKyAgICBQdXJlTWFwIG1fcHVyZVZhbHVl
czsKKyAgICBJbXB1cmVNYXAgbV9pbXB1cmVWYWx1ZXM7Cit9OworCitjbGFzcyBHQ1NFUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEdDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWlu
YXRpb24iKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigp
ID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBp
ZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBj
YW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdl
LCB3ZQotICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQu
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3
ZSBjdXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmpl
Y3QncwotICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFz
c3VtZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgICAgICAvLyBw
b2ludGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBp
dCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGlu
dGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVj
dHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hl
Y2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5LgotICAg
ICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFj
ZW1lbnRzKCk7CisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKKyAgICAg
ICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAg
ICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwcmVPcmRlcjsKKyAgICAgICAgbV9n
cmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKHByZU9yZGVyKTsKKyAgICAgICAgCisgICAgICAgIG1f
aW1wdXJlRGF0YU1hcC5yZXNpemUobV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAgICAgIAorICAg
ICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVyZWQgYnkgYmxvY2tzLiBO
b2RlIHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CisgICAgICAgIC8vIGZvciBjb252
ZW5pZW5jZSBvbmx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmVPcmRlci5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBwcmVPcmRlcltpXTsKKyAgICAgICAgICAg
IG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRl
eC0tOykKKyAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9jay0+YXQobm9k
ZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBj
aGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBCYXNlZCBvbiBteSBl
eHBlcmllbmNlIGRvaW5nIHRoaXMgYmVmb3JlLCB3aGF0IGZvbGxvd3MgbWlnaHQgaGF2ZSB0byBi
ZSBtYWRlIGl0ZXJhdGl2ZS4KKyAgICAgICAgLy8gQnV0IGl0IGZlZWxzIGxpa2UsIHJpZ2h0IG5v
dywgdGhpcyB3b3JrcyBhcyBhIHNpbmdsZSBwYXNzIGJlY2F1c2Ugd2Ugb25seSB0dXJuIGEgbm9k
ZQorICAgICAgICAvLyBpbnRvIGEgdmFsdWUgb3IgaGVhcCBsb2NhdGlvbiBhZnRlciB3ZSBoYXZl
IHBlcmZvcm1lZCBzdWJzdGl0dXRpb25zIG9uIHRoYXQgbm9kZSdzCisgICAgICAgIC8vIGNoaWxk
cmVuLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZU9yZGVy
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAg
ICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsK
KyAgICAgICAgICAgIG1fd3JpdGVzU29GYXIuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBi
bG9jayAiLCAqbV9ibG9jaywgIjpcbiIpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUg
PSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIExvb2tpbmcgYXQgbm9kZSAiLCBtX25vZGUs
ICI6XG4iKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8g
V2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJy
YXkuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtl
IEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
bV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50
aXR5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1f
Z3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAg
IH0KIAotICAgIE5vZGUqIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24o
Tm9kZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGls
ZDEpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJy
YXlNb2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgdm9p
ZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgTm9kZSogZ2V0SW50ZXJuYWxGaWVs
ZExvYWRFbGltaW5hdGlvbihOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxKQorICAgIHZvaWQgd3Jp
dGUoQWJzdHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IG9wICYmIG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2xv
YmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1fd3Jp
dGVzU29GYXIuYWRkKGhlYXApOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3BlTG9h
ZEVsaW1pbmF0aW9uKCkKKyAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBz
Y29wZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlT
Y29wZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9wdXJlVmFsdWVzLmFkZCh2YWx1ZSwgVmVjdG9yPE5vZGUqPigpKTsKKyAgICAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChtX25vZGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRMb2NhbExvYWRFbGltaW5h
dGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUqJiByZWxldmFudExvY2FsT3AsIGJvb2wg
Y2FyZUFib3V0Q2xvYmJlcmluZykKLSAgICB7Ci0gICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7
CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAg
ICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFy
OgotICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlm
IChjYXJlQWJvdXRDbG9iYmVyaW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
W2ldOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhjYW5k
aWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFj
ZVdpdGgoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpbnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAod3JpdGVzT3ZlcmxhcChtX2dy
YXBoLCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzZXRS
ZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghcmVwbGFj
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2N1
cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4K
LSAgICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKICAgICAg
ICAgCi0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGUoKQorICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVu
dChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50
Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9Q
aGFudG9tKCk7CisgICAgICAgIE5vZGUqIG1hdGNoID0gbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVB
dFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBGb3VuZCBsb2NhbCBt
YXRjaDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50
b20pCi0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKHBoYW50b21UeXBlKTsKKyAgICAgICAgaWYgKG1fd3JpdGVzU29GYXIub3Zl
cmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTm90IGxvb2tpbmcgZ2xvYmFsbHkgYmVjYXVzZSBv
ZiBsb2NhbCBjbG9iYmVyOiAiLCBtX3dyaXRlc1NvRmFyLCAiXG4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCi0g
ICAgewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAg
IC8vIFRoaXMgcGVyZm9tcyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5kIHNvbWUgcG9zc2libGUg
ZGVmKCkgdGhhdCBtYXRjaGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9uLiBBcyBzb29u
IGFzIGl0IGZpbmRzIGEgcG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMgdGhhdCB0aGlzIG9uZSBt
dXN0IGJlIHRoZQorICAgICAgICAvLyBtYXRjaCBhbmQgY29tcGxldGVzIHRoZSBzZWFyY2ggYnkg
aGFsdGluZyBhdCB0aGlzIGJsb2NrLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgd3JpdGUoKQorICAg
ICAgICAvLyB0aGF0IG92ZXJsYXBzIHRoZSBsb2NhdGlvbidzIGhlYXAsIGl0IHN0b3BzLCBhc3N1
bWluZyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1hdGNoLgogICAgICAgICAKLSAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gd29y
a2xpc3Q7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOwogICAgICAgICAKLSAgICAgICAgY2FzZSBJ
ZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUg
dGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4K
LSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2Ug
Qml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6
Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAg
ICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBB
cml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhT
aW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogot
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAg
ICBjYXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElz
RnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBTa2lwVG9w
U2NvcGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNlIEdldENsb3N1cmVS
ZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2UgVHlwZU9mOgot
ICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXA6Ci0gICAg
ICAgIGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0g
ICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAg
IGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICAgICAg
Tm9kZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgIGlmICghY2FuZGlk
YXRlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhj
YW5kaWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRhdGUtPmFyaXRoTW9k
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FuZGlk
YXRlLT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAg
ICAgICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vl
bi5zZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBp
biBibG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBk
YXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxsZWVM
b2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdl
dExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGUqIHBvc3Np
YmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpOwotICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9IEdldExv
Y2FsVW5saW5rZWQKLSAgICAgICAgICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAg
ICAgICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJl
YWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExv
Y2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5r
ZWQKLSAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxl
dmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKLSAgICAgICAgICAgICAgICBy
ZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhp
KTsKLQotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7
Ci0gICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS0+dW5saW5rZWRMb2Nh
bCgpLCByZWxldmFudExvY2FsT3BJZ25vcmVkLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAg
ICAgY2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3
aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRzLAotICAgICAgICAgICAgLy8gd2hpY2ggbWF5
IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlz
IHVwLgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3Jh
Z2VQb2ludGVyOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRTdG9yYWdlUG9p
bnRlckNTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJy
YXlMZW5ndGhFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9u
YWxseSBwdXJlOiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgotICAgICAgICAvLyBiZSBDU0UnZCwg
c28gbG9uZyBhcyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNh
c2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAg
ICBjYXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWRO
dW1lcmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1
cmVDU0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGgu
aXNQcmVkaWN0ZWROdW1lcmljYWwocmVwbGFjZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Rv
bWluYXRvcnMuZG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CisgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOworICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbWF0Y2gpOworICAgICAgICAgICAgICAg
IG1hdGNoID0gZGF0YS5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBB
dmFpbGFiaWxpdHk6ICIsIG1hdGNoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXhhbWluZSB0aGUgcHJlZGVjZXNzb3Jz
IG9mIGEgbWF0Y2guIEF0IHRoaXMgcG9pbnQgd2UganVzdCB3YW50IHRvCisgICAgICAgICAgICAg
ICAgICAgIC8vIGVzdGFibGlzaCB0aGF0IG90aGVyIGJsb2NrcyBvbiB0aGUgcGF0aCBmcm9tIGhl
cmUgdG8gdGhlcmUgZG9uJ3QgY2xvYmJlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9j
YXRpb24gd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFj
Y2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKLSAgICAg
ICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMg
YXJlIG1ldC4KLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgotICAg
ICAgICAgICAgaWYgKHZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpKQotICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVs
aW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBu
b2RlLT5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsK
LSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KGNoaWxkMS5ub2RlKCksIGNoaWxkMi5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgRGVhbGluZyB3
aXRoIHdyaXRlIHNldCAiLCBkYXRhLndyaXRlcywgIlxuIik7CisgICAgICAgICAgICBpZiAoZGF0
YS53cml0ZXMub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJl
ZC5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRp
b24obm9kZS0+c3RydWN0dXJlU2V0KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAg
ICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlv
bkVsaW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0g
ICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgICAgICBpZiAo
Y2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhlY3V0YWJsZSgpLCBub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAg
ICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlLT5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJh
eU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICBjYXNlIEdldEdl
dHRlcjoKLSAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KGdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
SW52YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgICAgICBpZiAoaW52YWxpZGF0aW9uUG9pbnRFbGlt
aW5hdGlvbigpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIGRvIG5v
dGhpbmcuCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAg
ICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAg
ICBzZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5v
cCgpXSA9IG1faW5kZXhJbkJsb2NrOworICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQg
ZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCiAgICAgewotICAgICAgICBp
ZiAoIWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1Jl
YWNoYWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24gZGVmOiAiLCBsb2NhdGlvbiwg
IiAtPiAiLCB2YWx1ZSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBOb2RlKiBtYXRjaCA9IGZp
bmRSZXBsYWNlbWVudChsb2NhdGlvbik7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IGJsb2NrOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBl
OyArK2kpCi0gICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBtYXRj
aCwgIlxuIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9p
bmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAg
ICAgIHBlcmZvcm1Ob2RlQ1NFKG1fY3VycmVudE5vZGUpOworICAgICAgICBpZiAoIW1hdGNoKSB7
CisgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5zZXQobG9jYXRpb24s
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwotICAgIE5vZGUq
IG1fY3VycmVudE5vZGU7Ci0gICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7Ci0gICAgc3RkOjph
cnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwotICAgIGJvb2wgbV9jaGFu
Z2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVj
dCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgorICAgIHN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewor
ICAgICAgICBJbXB1cmVCbG9ja0RhdGEoKQorICAgICAgICAgICAgOiBkaWRWaXNpdChmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDbG9iYmVyU2V0IHdyaXRl
czsKKyAgICAgICAgSW1wdXJlTWFwIGF2YWlsYWJsZUF0VGFpbDsKKyAgICAgICAgYm9vbCBkaWRW
aXNpdDsKKyAgICB9OworICAgIAorICAgIFB1cmVNdWx0aU1hcCBtX3B1cmVWYWx1ZXM7CisgICAg
VmVjdG9yPEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVEYXRhTWFwOworICAgIAorICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgTm9kZSogbV9ub2RlOworICAgIEltcHVyZUJsb2NrRGF0YSog
bV9pbXB1cmVEYXRhOworICAgIENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICAKKyAgICBi
b29sIG1fY2hhbmdlZDsKIH07CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtTENTRShHcmFwaCYgZ3JhcGgpCiB7
Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKLSAg
ICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIExDU0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TENT
RVBoYXNlPihncmFwaCk7Cit9CisKK2Jvb2wgcGVyZm9ybUdDU0UoR3JhcGgmIGdyYXBoKQorewor
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgR0NTRSBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxHQ1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTcwOTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3
ICszOCwxMCBAQCBjbGFzcyBHcmFwaDsKIC8vIGl0IGlzIHJhdGhlciBwcm9maXRhYmxlLiBJdCBo
YXMgZmFpcmx5IGFjY3VyYXRlIGhlYXAgbW9kZWxpbmcgYW5kIHdpbGwgbWF0Y2gKIC8vIGEgd2lk
ZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9k
dWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBj
aGVhcCB0byBydW4uCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUxDU0Uo
R3JhcGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NBLgorYm9v
bCBwZXJmb3JtR0NTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNp
b24gMTcwOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFjdEhlYXA+
IENsb2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJl
YWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogfQogCiB2
b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRl
U2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUg
bm9PcDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVy
aXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFw
aCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRzQW5kV3Jp
dGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJl
clNldCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOwog
ICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09wKTsKIH0K
IAogYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0
JiByZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOwot
ICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2Ji
ZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVybiBhZGRS
ZWFkLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRS
ZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFk
ZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBh
ZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5v
T3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzA5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Citib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9i
YmVyaXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICByZXR1cm4g
IWFkZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAgTm9PcENs
b2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBub09wLCBh
ZGRQdXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBkb2VzV3Jp
dGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRS
ZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdy
aXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0
dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFwKQogeworICAgIE5vT3BDbG9iYmVy
aXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkQWNjZXNzKGhlYXApOwotICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzKTsKKyAgICBjbG9i
YmVyaXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFjY2Vzcywgbm9PcCk7CiAgICAgcmV0
dXJuIGFkZEFjY2Vzcy5yZXN1bHQoKTsKIH0KIAogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7Ci0gICAgTm9PcENsb2JiZXJp
emUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwogICAgIEFic3RyYWN0SGVhcE92
ZXJsYXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJl
YWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0
ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcwOTc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgogI2lu
Y2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFk
RnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1bmN0b3Im
IGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC02OSw2ICs3MSwyOSBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgLy8gICBwcmlvciB0
byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRp
ZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAgIAorICAgIC8vIFdoaWxlIHJlYWQo
KSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRyYWNrIHdo
YXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUgbWF5IHJlYWQgb3Igd3JpdGUgLSB0
aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQgdGVsbHMgeW91IHRoZSBoZWFwIGxv
Y2F0aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBoZWFwcykgdGhhdCBhcmUgZGVmaW5l
ZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlzZXMgYW4gYWJzdHJhY3QKKyAgICAv
LyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktpbmQuIEJyaWVmbHksIGEgbG9jYXRp
b24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgorICAgIC8vIHdob3NlIHZhbHVlIGNh
biBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBsb2NhdGlv
bnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgor
ICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRvIENTRSBhIGxvYWQgZnJvbSB0aGUg
aGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hvdWxkIGJlCisgICAgLy8gICBzdWZm
aWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9kZS4KKyAgICAvLworICAgIC8vIC0g
VGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNvdWxkIGJl
IGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisgICAgLy8gICBDU0UgYXR0ZW1wdC4g
SS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0d2VlbiBz
b21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBkZWZpbmVzIGEgSGVhcExvY2F0aW9u
IHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRlcyB0byBhbnkgYWJzdHJhY3QgaGVh
cCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4gd2UgaGF2
ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNlbWFudGljcyBvZgorICAgIC8vICAg
d3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhlbSB0byBi
ZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAgIC8vICAgaXMgQ1NFYWJsZS4KKyAg
ICAvLworICAgIC8vIHJlYWQoKSwgd3JpdGUoKSwgYW5kIGRlZigpIGZvciBoZWFwIGxvY2F0aW9u
cyBpcyBlbm91Z2ggdG8gZG8gR0NTRSBvbiBlZmZlY3RmdWwgdGhpbmdzLiBUbworICAgIC8vIGtl
ZXAgdGhpbmdzIHNpbXBsZSwgdGhpcyBjb2RlIHdpbGwgYWxzbyBkZWYoKSBwdXJlIHRoaW5ncy4g
ZGVmKCkgbXVzdCBiZSBvdmVybG9hZGVkIHRvIGFsc28KKyAgICAvLyBhY2NlcHQgUHVyZVZhbHVl
LiBUaGlzIHdheSwgYSBjbGllbnQgb2YgY2xvYmJlcml6ZSgpIGNhbiBpbXBsZW1lbnQgR0NTRSBl
bnRpcmVseSB1c2luZyB0aGUKKyAgICAvLyBpbmZvcm1hdGlvbiB0aGF0IGNsb2JiZXJpemUoKSBw
YXNzZXMgdG8gd3JpdGUoKSBhbmQgZGVmKCkuIE90aGVyIGNsaWVudHMgb2YgY2xvYmJlcml6ZSgp
IGNhbgorICAgIC8vIGp1c3QgaWdub3JlIGRlZigpIGJ5IHVzaW5nIGEgTm9PcENsb2JiZXJpemUg
ZnVuY3Rvci4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkpCiAgICAg
ICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICsxMDEsMjMgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgSlNDb25z
dGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoK
KyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5jb25zdGFudCgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFBoYW50b206
CiAgICAgY2FzZSBIYXJkUGhhbnRvbToKKyAgICBjYXNlIENoZWNrOgorICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBCaXRB
bmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKICAgICBjYXNlIEJpdExTaGlm
dDoKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgY2FzZSBW
YWx1ZVRvSW50MzI6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICBjYXNlIEFyaXRoU3ViOgotICAg
IGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgY2FzZSBBcml0aE11bDoKICAgICBjYXNlIEFyaXRoSU11
bDoKLSAgICBjYXNlIEFyaXRoRGl2OgotICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgY2FzZSBBcml0
aEFiczoKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CkBAIC0xMDAsMjgg
KzEyNSw0NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgogICAgIGNhc2UgQXJpdGhDb3M6
CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBHZXRTY29wZToKICAgICBjYXNlIFNr
aXBTY29wZToKLSAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgotICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAgIGNhc2UgQ29tcGFyZUVxQ29u
c3RhbnQ6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgorICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAgIGNhc2UgSXNVbmRlZmluZWQ6
CiAgICAgY2FzZSBJc0Jvb2xlYW46CiAgICAgY2FzZSBJc051bWJlcjoKICAgICBjYXNlIElzU3Ry
aW5nOgogICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKLSAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50
ZXI6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIERvdWJsZUFzSW50MzI6Ci0g
ICAgY2FzZSBDaGVjazoKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBjYXNlIFZhbHVlUmVwOgog
ICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAgICAgZGVmKFB1cmVW
YWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQXJpdGhBZGQ6CisgICAg
Y2FzZSBBcml0aFN1YjoKKyAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgIGNhc2UgQXJpdGhNdWw6
CisgICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTW9kOgorICAgIGNhc2UgRG91Ymxl
QXNJbnQzMjoKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBkZWYoUHVyZVZhbHVl
KG5vZGUsIG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
Q2hlY2tGdW5jdGlvbjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5mdW5jdGlv
bigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDaGVja0V4ZWN1dGFi
bGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+ZXhlY3V0YWJsZSgpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVy
OgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC0xNDIsNyAr
MTg2LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNh
c2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6
CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNh
c2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2Zp
bGVEaWRDYWxsOgpAQCAtMTUxLDYgKzE5NCwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgd3JpdGUo
U2lkZVN0YXRlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExv
YywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2Ug
Rmx1c2g6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwo
KSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwpAQCAtMTk1LDEyICsyNDMsMjQgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBWYXJJbmpl
Y3Rpb25XYXRjaHBvaW50OgogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50Ogor
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAg
IGNhc2UgSXNPYmplY3Q6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSXNPYmplY3RMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc0Z1bmN0aW9uOgotICAg
IGNhc2UgVHlwZU9mOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBUeXBlT2Y6CisgICAgICAg
IHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVHlwZU9mTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICByZXR1cm47CisKICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlk
OgpAQCAtMjIzLDI3ICsyODMsMzMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAgICAgICAgcmVhZChHZXR0
ZXJTZXR0ZXJfZ2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJMb2MsIEdl
dHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJlYWQoR2V0dGVyU2V0
dGVyX3NldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU2V0dGVyTG9jLCBHZXR0ZXJT
ZXR0ZXJfc2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpDYWxsZWUpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBj
YXNlIEdldEFyZ3VtZW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5v
ZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwg
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFy
aWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7
CkBAIC0yNzMsMTEgKzMzOSwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25seSByZWFk
aW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2Rl
LmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0
ZXJzKTsKICAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjg1LDYgKzM1Myw3IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3Zl
Y3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
bm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmVhZChXb3JsZCk7CkBAIC0yOTYsNiArMzY1LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJs
ZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoV29y
bGQpOwpAQCAtMzA3LDYgKzM3Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwog
ICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1By
b3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoV29ybGQp
OwpAQCAtMzMwLDggKzQwMSw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlQcm9wZXJ0aWVz
KTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAg
ICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNDIsNiArNDEzLDkgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CisgICAgICAgIE5vZGUqIGJhc2UgPSBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS5ub2Rl
KCk7CisgICAgICAgIE5vZGUqIGluZGV4ID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkubm9k
ZSgpOworICAgICAgICBOb2RlKiB2YWx1ZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLm5v
ZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJh
eTo6VW5wcm9maWxlZDoKQEAgLTM2Myw5ICs0MzcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAg
ICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICByZWFkKEFyZ3Vt
ZW50c19zbG93QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAg
ICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CkBAIC0zNzgsNiArNDUyLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAg
ICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRl
eGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5t
YXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAg
LTM5MCw2ICs0NjcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAg
cmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVk
RG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5
U3RvcmVUb0hvbGUoKSkKKyAgICAgICAgICAgICAgICB3cml0ZShCdXR0ZXJmbHlfcHVibGljTGVu
Z3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJ
bmRleGVkRG91YmxlUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
QEAgLTQwMiw2ICs0ODIsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAg
ICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOwogICAgICAgICAgICAgd3JpdGUo
SW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOgpAQCAtNDIwLDkgKzUwMywxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogog
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsK
LSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAg
IHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAgICAgICAgICB3cml0ZShUeXBlZEFycmF5UHJvcGVydGll
cyk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3QgZGVmKCkgYW55dGhpbmcgaGVyZSBi
ZWNhdXNlIHRoZXNlIG9wZXJhdGlvbnMgdHJ1bmNhdGUgdGhlaXIgaW5wdXRzLgorICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC00MzAsNyArNTE0LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
LSAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsK
ICAgICAgICAgcmV0dXJuOwogCkBAIC00NDIsMTIgKzUyNSwxNCBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAg
ICAgICAgIHJlYWQoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKENoZWNrSGFzSW5zdGFuY2VMb2MsIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBub2RlLT5jaGls
ZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIENoZWNrRXhlY3V0YWJs
ZToKLSAgICAgICAgcmVhZChKU0Z1bmN0aW9uX2V4ZWN1dGFibGUpOworICAgIGNhc2UgSW5zdGFu
Y2VPZjoKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKEluc3RhbmNlT2ZMb2MsIEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQx
KCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisK
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVyZUlE
KTsKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvVHlwZSk7CkBAIC00NTcsMTUgKzU0Miwx
OCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAog
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09i
amVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBy
ZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZs
eSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0
ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRl
cmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5aWZ5OgpAQCAtNDc5LDQyICs1NjcsNTkgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpIHsKKyAgICAgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICB9Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhl
ZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0OgotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgIHJl
YWQoSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7Ci0gICAgICAgIHJlYWQoQnV0dGVyZmx5X2FycmF5
QnVmZmVyKTsKLSAgICAgICAgcmVhZChBcnJheUJ1ZmZlcl9kYXRhKTsKKyAgICAgICAgcmVhZChN
aXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNl
dExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgIGNhc2UgR2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywg
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7
CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50
aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywg
aWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgorICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFt
ZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICByZWFkKGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVk
UHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICBjYXNl
IE11bHRpUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwog
ICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRp
Zmllck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMs
IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7CisgICAgICAg
IHdyaXRlKGhlYXApOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53
cml0ZXNTdHJ1Y3R1cmVzKCkpCiAgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5yZWFsbG9jYXRlc1N0
b3JhZ2UoKSkKICAgICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFt
ZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgIGNhc2UgUHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVz
LCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3JpdGUoaGVhcCk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2Rl
LT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCk7CkBAIC01MjUsNzggKzYzMCw4NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFy
cmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKKyAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQo
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRlTGVuZ3Ro
KTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAgICAgICAg
ICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxl
bmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmVh
ZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG1vZGUudHlw
ZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0Zp
ZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNj
RmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBK
U1N0YWNrOjpTY29wZUNoYWluKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2tpcFRvcFNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oU2tpcFRvcFNjb3BlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0
aW9uUmVnaXN0ZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgICAgICByZWFkKEpT
VmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9z
dXJlUmVnaXN0ZXJzTG9jLCBKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1
cmVWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVt
YmVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJl
cigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFs
VmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVy
KCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRHbG9i
YWxWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIE5ld09iamVj
dDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKICAgICBj
YXNlIE5ld0FycmF5QnVmZmVyOgorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgLy8g
RklYTUU6IEVuYWJsZSBDU0UgZm9yIHRoZXNlIG5vZGVzLiBXZSBjYW4ndCBkbyB0aGlzIHJpZ2h0
IG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheQorICAgICAgICAvLyBmb3IgdXMgdG8gY2xhaW0g
YW4gaW5kZXggbm9kZSBhbmQgYSB2YWx1ZSBub2RlLiBXZSBjb3VsZCBtYWtlIHRoaXMgd29yayBp
ZiB3ZSBsb3dlcmVkCisgICAgICAgIC8vIHRoZXNlIG5vZGVzIG9yIGlmIHdlIGhhZCBhIG1vcmUg
ZmxleGlibGUgd2F5IG9mIGRlZigpJ2luZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNworICAgICAgICByZWFkKEhlYXBPYmplY3RDb3Vu
dCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3U3Ry
aW5nT2JqZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgIGNhc2UgTmV3RnVu
Y3Rpb246Ci0gICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVh
cE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgY2FzZSBOZXdG
dW5jdGlvbk5vQ2hlY2s6CisgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3
cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICByZWFkKFdvcmxkKTsKLSAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHJldHVybjsKKwogICAgIGNh
c2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhw
U3RhdGUpOwpAQCAtNjA5LDYgKzcyMyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTYxNiw4ICs3MzEsMTAgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29tcGFy
ZUxlc3NFcToKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKLSAgICAgICAgaWYgKCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpCisg
ICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAg
ICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICBy
ZXR1cm47CkBAIC02MjYsNiArNzQzLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewog
ICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmlu
Z09iamVjdFVzZToKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGRlZiBhIHB1cmUgdmFsdWUs
IHVuZm9ydHVuYXRlbHkuIEknbGwgYXZvaWQgbG9hZC1lbGltaW5hdGluZyB0aGVzZSBmb3IKKyAg
ICAgICAgICAgIC8vIG5vdy4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIENlbGxVc2U6CkBAIC02NTIsMTAgKzc3MSwxNiBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICAvLyBGSVhN
RTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBjb2RlIG9yaWdpbiBhcyBh
IGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCisgICAgICAgIC8vIGhhdmUgZm9yIFB1cmVWYWx1ZS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDc5
NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
OgogICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBk
ZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEga2luZCBvZiBtX2lu
Zm8sIGxpa2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CkBAIC02
ODUsNyArODEwLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
Y2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9
Ci0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CiB9OwogCiBjbGFzcyBD
aGVja0Nsb2JiZXJpemUgewpAQCAtNjk1LDcgKzgyMSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgbV9yZXN1bHQgPSB0
cnVlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KKyAgICB2b2lkIG9wZXJhdG9yKCko
VC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCkBAIC03MDMsNiArODMwLDkgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcmVzdWx0OwogfTsKIAorYm9vbCBpc1B1cmUoR3JhcGgmLCBOb2RlKik7IC8v
IFB1cmUgbWVhbnMgaXQgZG9lcyBubyByZWFkcyBvciB3cml0ZXMuCitib29sIGhhc1B1cmVEZWZz
KEdyYXBoJiwgTm9kZSopOyAvLyBIYXZpbmcgcHVyZSBkZWZzIG1lYW5zIHRoYXQgcHVyZSBDU0Ug
aXMgcG9zc2libGUuCisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAogY2xhc3Mg
QWJzdHJhY3RIZWFwT3ZlcmxhcHMgewpAQCAtNzMwLDYgKzg2MCw3MiBAQCBwcml2YXRlOgogYm9v
bCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKIGJvb2wgd3Jp
dGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwogCisvLyBXZSB3b3VsZCBo
YXZlIHVzZWQgYmluZCgpIGZvciB0aGVzZSwgYnV0IGJlY2F1c2Ugb2YgdGhlIG92ZXJsYW9kaW5n
IHRoYXQgd2UgYXJlIGRvaW5nLAorLy8gaXQncyBxdWl0ZSBhIGJpdCBvZiBjbGVhcmVyIHRvIGp1
c3Qgd3JpdGUgdGhpcyBvdXQgdGhlIHRyYWRpdGlvbmFsIHdheS4KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIFJlYWRNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBSZWFkTWV0
aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAg
IHsKKyAgICAgICAgbV92YWx1ZS5yZWFkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgVCYg
bV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBXcml0ZU1ldGhvZENs
b2JiZXJpemUgeworcHVibGljOgorICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkK
KyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBv
cGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS53cml0
ZShoZWFwKTsKKyAgICB9Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6CisgICAg
RGVmTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKFB1cmVWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIG1fdmFsdWUuZGVmKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBZGFwdG9yJiBhZGFwdG9yKQorewor
ICAgIFJlYWRNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHJlYWQoYWRhcHRvcik7CisgICAgV3Jp
dGVNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHdyaXRlKGFkYXB0b3IpOworICAgIERlZk1ldGhv
ZENsb2JiZXJpemU8QWRhcHRvcj4gZGVmKGFkYXB0b3IpOworICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIHJlYWQsIHdyaXRlLCBkZWYpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcHJvY2VzcyB0aGUgZ3JhcGgg
aW4gcmV2ZXJzZSBERlMgb3JkZXIsIHNvIHRoYXQgd2UgZ2V0IHRvIHRoZSB1c2VzCiAgICAgICAg
ICAgICAvLyBvZiBhIG5vZGUgYmVmb3JlIHdlIGdldCB0byB0aGUgbm9kZSBpdHNlbGYuCiAgICAg
ICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgICAgICBtX2dy
YXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICAgICAg
bV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5zaXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAg
Zml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIyMCw3ICsy
MjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4s
IGVkZ2UpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM5LDI1ICs2MzksNzUgQEAgdm9pZCBH
cmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwogICAgIH0KIH0KIAotdm9pZCBHcmFw
aDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVu
LCBCYXNpY0Jsb2NrKiBibG9jaykKKy8vIFV0aWxpdGllcyBmb3IgcHJlLSBhbmQgcG9zdC1vcmRl
ciB0cmF2ZXJzYWxzLgorbmFtZXNwYWNlIHsKKworaW5saW5lIHZvaWQgYWRkRm9yUHJlT3JkZXIo
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29y
a2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgaWYgKHNl
ZW4uY29udGFpbnMoYmxvY2spKQorICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CiAgICAgd29ya2xp
c3QuYXBwZW5kKGJsb2NrKTsKLSAgICBzZWVuLmFkZChibG9jayk7CisgICAgc2Vlbi5zZXQoYmxv
Y2stPmluZGV4KTsKIH0KIAotdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIo
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorZW51bSBQb3N0T3JkZXJUYXNrS2luZCB7Cisg
ICAgUG9zdE9yZGVyRmlyc3RWaXNpdCwKKyAgICBQb3N0T3JkZXJBZGRUb1Jlc3VsdAorfTsKKwor
c3RydWN0IFBvc3RPcmRlclRhc2sgeworICAgIFBvc3RPcmRlclRhc2soQmFzaWNCbG9jayogYmxv
Y2sgPSBudWxscHRyLCBQb3N0T3JkZXJUYXNrS2luZCBraW5kID0gUG9zdE9yZGVyRmlyc3RWaXNp
dCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBQb3N0T3JkZXJU
YXNrS2luZCBtX2tpbmQ7Cit9OworCitpbmxpbmUgdm9pZCBhZGRGb3JQb3N0T3JkZXIoVmVjdG9y
PFBvc3RPcmRlclRhc2ssIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayhibG9jaywgUG9z
dE9yZGVyRmlyc3RWaXNpdCkpOworICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Cit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblByZU9yZGVy
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDE2PiB3b3JrbGlzdDsKLSAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOwotICAgIGFkZEZv
ckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICBC
aXRWZWN0b3Igc2VlbjsKKyAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0LCBzZWVu
LCBibG9jaygwKSk7CiAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgYWRk
Rm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3Nv
cihpKSk7CisgICAgICAgICAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0LCBzZWVu
LCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nr
c0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8
UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OworICAgIEJpdFZlY3RvciBzZWVuOworICAgIGFk
ZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIHdoaWxlICghd29y
a2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFBvc3RPcmRlclRhc2sgdGFzayA9IHdvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgICAgIHN3aXRjaCAodGFzay5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgorICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKFBvc3RP
cmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJBZGRUb1Jlc3VsdCkpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTsp
CisgICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVyKHdvcmtsaXN0LCBzZWVuLCB0YXNrLm1f
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
b3N0T3JkZXJBZGRUb1Jlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGFzay5tX2Js
b2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3
ICs2NjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclJlcGxhY2VtZW50cygpOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKICAgICAKLSAgICB2b2lkIGdldEJsb2Nrc0luRGVw
dGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRC
bG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAgdm9pZCBn
ZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOwogICAgIAog
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4u
Y29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKQEAgLTc1MSw3ICs3NTIsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcik7Ci0g
ICAgdm9pZCBhZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQs
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4m
IHNlZW4sIEJhc2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxk
U3BlY3VsYXRlSW50MzIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRp
b24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiLCBtX2hlYXApOworICAgIAorICAgIGlmICgh
bV9iYXNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnByaW50KCJbIiwgbV9iYXNl
KTsKKyAgICBpZiAobV9pbmRleCkKKyAgICAgICAgb3V0LnByaW50KCIsICIsIG1faW5kZXgpOwor
ICAgIG91dC5wcmludCgiXSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2NhdGlvbktpbmQga2luZCkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludmFsaWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5w
cmludCgiSW52YWxpZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnRMb2M6CisgICAgICAgIG91dC5wcmludCgiSW52YWxp
ZGF0aW9uUG9pbnRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIElz
T2JqZWN0TG9jOgorICAgICAgICBvdXQucHJpbnQoIklzT2JqZWN0TG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc0Z1bmN0aW9uTG9jOgorICAgICAgICBvdXQucHJp
bnQoIklzRnVuY3Rpb25Mb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IFR5cGVPZkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlT2ZMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldHRlckxvYzoKKyAgICAgICAgb3V0LnByaW50KCJH
ZXR0ZXJMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlckxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXJMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIlZhcmlhYmxl
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheUxlbmd0aExv
YzoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxlbmd0aExvYyIpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQnV0dGVyZmx5TG9jOgorICAgICAgICBvdXQucHJpbnQoIkJ1
dHRlcmZseUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tI
YXNJbnN0YW5jZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja0hhc0luc3RhbmNlTG9jIik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlUmVnaXN0ZXJzTG9j
OgorICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVSZWdpc3RlcnNMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVWYXJpYWJsZUxvYzoKKyAgICAgICAgb3V0
LnByaW50KCJDbG9zdXJlVmFyaWFibGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEdsb2JhbFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkdsb2JhbFZh
cmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbmRleGVk
UHJvcGVydHlMb2M6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFBvcnBlcnR5TG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbmRleGVkUHJvcGVydHlTdG9yYWdl
TG9jOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2ZMb2M6CisgICAgICAg
IG91dC5wcmludCgiSW5zdGFuY2VPZkxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgTXlBcmd1bWVudEJ5VmFsTG9jOgorICAgICAgICBvdXQucHJpbnQoIk15QXJndW1l
bnRCeVZhbExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTXlBcmd1
bWVudHNMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiTXlBcmd1bWVudHNMZW5ndGhMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlMb2M6
CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgU2tpcFRvcFNjb3BlTG9jOgorICAgICAgICBvdXQucHJpbnQo
IlNraXBUb3BTY29wZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlwZWRBcnJheUJ5
dGVPZmZzZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
SGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHSGVhcExvY2F0aW9uX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gTG9jYXRpb25L
aW5kIHsKKyAgICBJbnZhbGlkTG9jYXRpb25LaW5kLAorICAgIAorICAgIEFycmF5TGVuZ3RoTG9j
LAorICAgIEJ1dHRlcmZseUxvYywKKyAgICBDaGVja0hhc0luc3RhbmNlTG9jLAorICAgIENsb3N1
cmVSZWdpc3RlcnNMb2MsCisgICAgQ2xvc3VyZVZhcmlhYmxlTG9jLAorICAgIEdldHRlckxvYywK
KyAgICBHbG9iYWxWYXJpYWJsZUxvYywKKyAgICBJbmRleGVkUHJvcGVydHlMb2MsCisgICAgSW5k
ZXhlZFByb3BlcnR5U3RvcmFnZUxvYywKKyAgICBJbnN0YW5jZU9mTG9jLAorICAgIEludmFsaWRh
dGlvblBvaW50TG9jLAorICAgIElzRnVuY3Rpb25Mb2MsCisgICAgSXNPYmplY3RMb2MsCisgICAg
TXlBcmd1bWVudEJ5VmFsTG9jLAorICAgIE15QXJndW1lbnRzTGVuZ3RoTG9jLAorICAgIE5hbWVk
UHJvcGVydHlMb2MsCisgICAgU2V0dGVyTG9jLAorICAgIFNraXBUb3BTY29wZUxvYywKKyAgICBU
eXBlT2ZMb2MsCisgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCisgICAgVmFyaWFibGVMb2MK
K307CisKK2NsYXNzIEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgSGVhcExvY2F0aW9uKAor
ICAgICAgICBMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRMb2NhdGlvbktpbmQsCisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwID0gQWJzdHJhY3RIZWFwKCksCisgICAgICAgIE5vZGUqIGJhc2Ug
PSBudWxscHRyLCBOb2RlKiBpbmRleCA9IG51bGxwdHIpCisgICAgICAgIDogbV9raW5kKGtpbmQp
CisgICAgICAgICwgbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9iYXNlKGJhc2UpCisgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoa2luZCA9PSBJbnZhbGlk
TG9jYXRpb25LaW5kKSA9PSAhaGVhcCk7CisgICAgICAgIEFTU0VSVCghIW1faGVhcCB8fCAhbV9i
YXNlKTsKKyAgICAgICAgQVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7CisgICAgfQorICAgIAor
ICAgIEhlYXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhlYXAsIEVk
Z2UgYmFzZSwgRWRnZSBpbmRleCA9IEVkZ2UoKSkKKyAgICAgICAgOiBIZWFwTG9jYXRpb24oa2lu
ZCwgaGVhcCwgYmFzZS5ub2RlKCksIGluZGV4Lm5vZGUoKSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAg
IDogbV9raW5kKEludmFsaWRMb2NhdGlvbktpbmQpCisgICAgICAgICwgbV9oZWFwKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fYmFzZShudWxscHRyKQorICAgICAgICAs
IG1faW5kZXgobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIW1faGVhcDsgfQorICAgIAorICAgIExvY2F0aW9uS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25z
dCB7IHJldHVybiBtX2hlYXA7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9i
YXNlOyB9CisgICAgTm9kZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5k
ICsgbV9oZWFwLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9pbmRleCkgKyBt
X2tpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRp
b24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5t
X2tpbmQKKyAgICAgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXAKKyAgICAgICAgICAg
ICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9oZWFwLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICBBYnN0
cmFjdEhlYXAgbV9oZWFwOworICAgIE5vZGUqIG1fYmFzZTsKKyAgICBOb2RlKiBtX2luZGV4Owor
fTsKKworc3RydWN0IEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgSGVhcExvY2F0aW9uJiBhLCBjb25zdCBIZWFwTG9jYXRpb24m
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6REZHOjpMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6SGVh
cExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6SGVhcExvY2F0aW9uSGFzaCBIYXNo
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hNYXA8SGVh
cExvY2F0aW9uLCBOb2RlKj4gSW1wdXJlTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0hlYXBMb2NhdGlv
bl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJ
KHJldmlzaW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3JkZXIgdG8g
ZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CiAgICAgICAgIC8vIHRlbmQgdG8gaG9pc3QgZG9taW5h
dG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0
aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRo
Rmlyc3QpOworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7
CiAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFjazsKICAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcwOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MywxMCArMzczLDExIEBAIHN0
cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20p
OwogICAgIH0KLQotICAgIHZvaWQgY29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpCisgICAgCisg
ICAgdm9pZCByZXBsYWNlV2l0aChOb2RlKiBvdGhlcikKICAgICB7Ci0gICAgICAgIHNldE9wQW5k
RGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBjb252ZXJ0VG9QaGFudG9tKCk7CisgICAg
ICAgIHJlcGxhY2VtZW50ID0gb3RoZXI7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9JZGVu
dGl0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxh
bjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgICAgIAogICAgIHBl
cmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICBw
ZXJmb3JtTENTRShkZmcpOwogICAgIHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcp
OwogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIHBlcmZvcm1DRkEoZGZnKTsK
ICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZnKTsKLSAgICBj
aGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnKTsKKyAgICBjaGFuZ2VkIHw9IHBlcmZvcm1MQ1NFKGRm
Zyk7CiAgICAgCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZhbGlkYXRl
KGRmZyk7CkBAIC0zMTYsNyArMzE2LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybVNTQUNvbnZlcnNpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVNTQUxvd2VyaW5nKGRm
Zyk7Ci0gICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAgcGVyZm9ybUdDU0UoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNG
QShkZmcpOwogICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CkBAIC0zMjksNyAr
MzI5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAg
ICBwZXJmb3JtTElDTShkZmcpOwogICAgICAgICBwZXJmb3JtUGhhbnRvbVJlbW92YWwoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUludGVnZXJDaGVja0NvbWJpbmluZyhkZmcpOwotICAgICAgICBwZXJm
b3JtQ1NFKGRmZyk7CisgICAgICAgIHBlcmZvcm1HQ1NFKGRmZyk7CiAgICAgICAgIAogICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRvIGFueSBmdXJ0aGVyIGNv
ZGUgbW90aW9uIGJlY2F1c2Ugb3VyIHJlYXNvbmluZwogICAgICAgICAvLyBhYm91dCBjb2RlIG1v
dGlvbiBhc3N1bWVzIHRoYXQgaXQncyBPSyB0byBpbnNlcnQgR0MgcG9pbnRzIGluIHJhbmRvbSBw
bGFjZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1B1cmVWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUHVyZVZh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KEdyYXBo
OjpvcE5hbWUob3AoKSkpOworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBj
b21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChjaGlsZHJlbigpLmNoaWxkKGkpKQorICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBjaGlsZHJlbigpLmNoaWxkKGkpKTsKKyAgICB9CisgICAgaWYgKG1faW5m
bykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2luZm8pOworICAgIG91dC5wcmludCgiKSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1B1cmVWYWx1ZV9oCisjZGVmaW5lIERG
R1B1cmVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQdXJlVmFsdWUg
eworcHVibGljOgorICAgIFB1cmVWYWx1ZSgpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUp
CisgICAgICAgICwgbV9pbmZvKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUo
Tm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCB1aW50cHRyX3QgaW5m
bykKKyAgICAgICAgOiBtX29wKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisg
ICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgICAgICBBU1NFUlQoIShkZWZhdWx0Rmxh
Z3Mob3ApICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5v
ZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgY29uc3Qgdm9pZCogcHRy
KQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHB0cikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3As
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwg
Y2hpbGRyZW4sIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMCkpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSwgdWludHB0cl90IGluZm8pCisgICAgICAgIDogUHVy
ZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkcmVuLCBpbmZvKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIGNvbnN0IHZvaWQqIHB0cikKKyAgICAgICAg
OiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4sIHB0cikKKyAgICB7CisgICAg
fQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2RlKQorICAgICAgICA6IFB1cmVWYWx1ZShu
b2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVW
YWx1ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vcChMYXN0
Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmICFt
X2luZm87IH0KKyAgICAKKyAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0K
KyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW47IH0KKyAgICB1aW50cHRyX3QgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQor
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJ
bnRIYXNoPGludD46Omhhc2goc3RhdGljX2Nhc3Q8aW50PihtX29wKSkgKyBtX2NoaWxkcmVuLmhh
c2goKSArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFB1
cmVWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcCA9PSBvdGhl
ci5tX29wCisgICAgICAgICAgICAmJiBtX2NoaWxkcmVuID09IG90aGVyLm1fY2hpbGRyZW4KKyAg
ICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVHlw
ZSBtX29wOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKyAgICB1aW50cHRyX3QgbV9p
bmZvOworfTsKKworc3RydWN0IFB1cmVWYWx1ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFB1cmVWYWx1ZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUHVyZVZhbHVlJiBhLCBjb25zdCBQdXJlVmFsdWUmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQdXJlVmFsdWU+IHsK
KyAgICB0eXBlZGVmIEpTQzo6REZHOjpQdXJlVmFsdWVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpE
Rkc6OlB1cmVWYWx1ZT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIE5vZGUqPiBQdXJlTWFw
OwordHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgVmVjdG9yPE5vZGUqPj4gUHVyZU11bHRpTWFw
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1B1cmVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3
MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAgIGJsb2NrLT52
YWx1ZXNBdEhlYWQuY2xlYXIoKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xl
YXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6
U1NBRGF0YShibG9jaykpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlx
dWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTcwOTc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNyZWF0ZVBoaVZh
cmlhYmxlcygpOwogCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwogCiAgICAgICAg
IGludCBtYXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGJs
b2NrSW5kZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxvY2tJbmRleC0tOyApIHsKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE0LTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW2Z0bG9wdF0gREZHIHNob3VsZCBiZSBhYmxlIHRvIGRvIEdDU0UgaW4g
U1NBIGFuZCB0aGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggdGhlIENTRSBpbiBDUFMsIGFuZCBi
b3RoIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQgdXNlIGFic3RyYWN0IGhlYXBzIGZvciByZWFzb25p
bmcgYWJvdXQgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBFeHBvc2UgYSBuZXcgSGFzaE1hcCBtZXRob2QsIGNhbGxlZCByZW1v
dmVJZigpLCB3aGljaCBhbGxvd3MgeW91IHRvIGRvIGFuIGVmZmljaWVudAorICAgICAgICBwYXNz
IG92ZXIgdGhlIG1hcCBhbmQgcmVtb3ZlIGEgYnVuY2ggb2YgdGhpbmdzIGF0IG9uY2UuIFRoaXMg
aXMgdXNlZCBieSBERkcgR0NTRS4KKworICAgICAgICAqIHd0Zi9IYXNoTWFwLmg6CisgICAgICAg
IChXVEY6Olg+OjpyZW1vdmVJZik6CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVJZik6CisKIDIwMTQtMDYtMDEgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBBSSBzaG91bGQgYmUgYWJs
ZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJnZXIgdGhhbiAxCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZp
c2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCw2ICsxMjAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHJlbW92ZShjb25zdCBLZXlU
eXBlJik7CiAgICAgYm9vbCByZW1vdmUoaXRlcmF0b3IpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCByZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKTsKICAgICB2b2lk
IGNsZWFyKCk7CiAKICAgICBNYXBwZWRUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYpOyAvLyBlZmZp
Y2llbnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCkBAIC0zNTQsNiArMzU2LDEzIEBA
IGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW8KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIG1faW1wbC5yZW1v
dmVJZihmdW5jdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KIGlubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJl
bW92ZShmaW5kKGtleSkpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE3MDk3NSkKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkz
LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKICAg
ICAgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yKTsK
ICAgICAgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0
ZXJhdG9yKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICAgICAgdm9p
ZCByZW1vdmVJZihGdW5jdG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFs
dWUpKTsgfQpAQCAtMTAzMSw2ICsxMDMzLDI4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBpbmxpbmUgdm9p
ZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46OnJlbW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3RhYmxlU2l6ZTsgaS0tOykgeworICAgICAgICAgICAgaWYgKGlz
RW1wdHlPckRlbGV0ZWRCdWNrZXQobV90YWJsZVtpXSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZnVuY3RvcihtX3RhYmxlW2ldKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVs
ZXRlQnVja2V0KG1fdGFibGVbaV0pOworICAgICAgICAgICAgKyttX2RlbGV0ZWRDb3VudDsKKyAg
ICAgICAgICAgIC0tbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHNob3VsZFNocmluaygpKQorICAgICAgICAgICAgc2hyaW5rKCk7CisgICAgICAgIAorICAgICAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgYXV0byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUpIC0+IFZhbHVlVHlwZSoK
ICAgICB7CiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3
aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE3MDk3NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE0LTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgW2Z0bG9wdF0gREZHIHNob3VsZCBiZSBhYmxlIHRvIGRvIEdDU0UgaW4gU1NBIGFu
ZCB0aGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggdGhlIENTRSBpbiBDUFMsIGFuZCBib3RoIG9m
IHRoZXNlIHRoaW5ncyBzaG91bGQgdXNlIGFic3RyYWN0IGhlYXBzIGZvciByZWFzb25pbmcgYWJv
dXQgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9nY3NlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzOiBBZGRlZC4KKwogMjAxNC0w
Ny0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRd
IEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nY3NlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nY3NlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvZ2NzZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2Ut
cG9seS1nZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nY3NlLXBvbHktZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvZ2NzZS1wb2x5LWdldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1n
ZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVz
cy1vYnZpb3VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNz
LW9idmlvdXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9nY3NlLXBvbHktZ2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nY3NlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2NzZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dj
c2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUg
QEAKKyhmdW5jdGlvbihvLCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAx
MDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIg
YSA9IG8uZjsKKyAgICAgICAgdmFyIGIgPSBvLmY7CisgICAgICAgIHZhciBjID0gby5mOworICAg
ICAgICB2YXIgZCA9IG8uZjsKKyAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgIHZhciBlID0g
by5mOworICAgICAgICAgICAgdmFyIGYgPSBvLmY7CisgICAgICAgICAgICB2YXIgZyA9IG8uZjsK
KyAgICAgICAgICAgIHZhciBoID0gby5mOworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaiA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgayA9IG8uZjsKKyAgICAg
ICAgICAgICAgICB2YXIgbCA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgbSA9IG8uZjsKKyAg
ICAgICAgICAgICAgICBpZiAobSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IG8uZjsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBzID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IG8uZjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRt
cCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAo
cmVzdWx0ICE9IChuIC8gMikgKiBvLmYgKyAobiAvIDIpICogcC5mKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSh7Zjo0MiwgZzowfSwge2c6MCwgZjo0
M30pOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5
LWdldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9nY3NlLXBvbHktZ2V0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM3IEBACisoZnVuY3Rpb24oKXsKKyAgICB2YXIgbyA9IHtmOjQyLCBnOjB9OworICAgIHZhciBw
ID0ge2c6MCwgZjo0M307CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAw
OworICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgYSA9IG8u
ZjsKKyAgICAgICAgdmFyIGIgPSBvLmY7CisgICAgICAgIHZhciBjID0gby5mOworICAgICAgICB2
YXIgZCA9IG8uZjsKKyAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgIHZhciBlID0gby5mOwor
ICAgICAgICAgICAgdmFyIGYgPSBvLmY7CisgICAgICAgICAgICB2YXIgZyA9IG8uZjsKKyAgICAg
ICAgICAgIHZhciBoID0gby5mOworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaiA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgayA9IG8uZjsKKyAgICAgICAgICAg
ICAgICB2YXIgbCA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgbSA9IG8uZjsKKyAgICAgICAg
ICAgICAgICBpZiAobSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IG8uZjsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHIgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciBzID0g
by5mOworICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IG8uZjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRtcCA9IG87
CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0
ICE9IChuIC8gMikgKiBvLmYgKyAobiAvIDIpICogcC5mKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM3IEBACisoZnVuY3Rpb24oKXsKKyAgICB2YXIgbyA9IHtmOjQyfTsKKyAgICB2YXIgcCA9IHtm
OjQzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9y
ICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBhID0gby5mOworICAgICAg
ICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBvLmY7CisgICAgICAgIHZhciBkID0gby5m
OworICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgdmFyIGUgPSBvLmY7CisgICAgICAgICAg
ICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBnID0gby5mOworICAgICAgICAgICAgdmFy
IGggPSBvLmY7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgICAgIHZhciBqID0g
by5mOworICAgICAgICAgICAgICAgIHZhciBrID0gby5mOworICAgICAgICAgICAgICAgIHZhciBs
ID0gby5mOworICAgICAgICAgICAgICAgIHZhciBtID0gby5mOworICAgICAgICAgICAgICAgIGlm
IChtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gby5mOworICAgICAgICAgICAgICAg
ICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBvLmY7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB0ID0gby5mOworICAgICAgICAgICAgICAgICAgICBpZiAodCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSByOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAg
byA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLyAy
KSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234773</attachid>
            <date>2014-07-11 11:47:35 -0700</date>
            <delta_ts>2014-07-13 17:00:58 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>137262</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBA
QAorMjAxNC0wNy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBzaG91bGQgYmUgYWJsZSB0byBkbyBHQ1NFIGluIFNTQSBhbmQgdGhpcyBz
aG91bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBDU0UgaW4gQ1BTLCBhbmQgYm90aCBvZiB0aGVzZSB0
aGluZ3Mgc2hvdWxkIHVzZSBhYnN0cmFjdCBoZWFwcyBmb3IgcmVhc29uaW5nIGFib3V0IGVmZmVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyByZW1vdmVzIHRoZSBvbGQgQ1NFIHBoYXNlLCB3aGljaCB3YXMgYmFzZWQgb24gbWFu
dWFsbHkgd3JpdHRlbiBiYWNrd2FyZC1zZWFyY2ggcnVsZXMKKyAgICAgICAgZm9yIGFsbCBvZiB0
aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRoaW5ncyB3ZSBjYXJlZCBhYm91dCwgYW5kIGFkZHMgYSBu
ZXcgbG9jYWwvZ2xvYmFsIENTRQorICAgICAgICAobG9jYWwgZm9yIENQUyBhbmQgZ2xvYmFsIGZv
ciBTU0EpIHRoYXQgbGVhdmVzIHRoZSBub2RlIHNlbWFudGljcyBhbG1vc3QgZW50aXJlbHkgdXAg
dG8KKyAgICAgICAgY2xvYmJlcml6ZSgpLiBUaHVzLCB0aGUgQ1NFIHBoYXNlIGl0c2VsZiBqdXN0
IHdvcnJpZXMgYWJvdXQgdGhlIGFsZ29yaXRobXMgYW5kIGRhdGEKKyAgICAgICAgc3RydWN0dXJl
cyB1c2VkIGZvciBzdG9yaW5nIHNldHMgb2YgYXZhaWxhYmxlIHZhbHVlcy4gVGhpcyByZXN1bHRz
IGluIG1vcmUgdGhhbiBhIDJ4CisgICAgICAgIHJlZHVjdGlvbiBpbiBjb2RlIGluIENTRVBoYXNl
LmNwcCB3aGlsZSBncmVhdGx5IGluY3JlYXNpbmcgdGhlIHBoYXNlJ3MgcG93ZXIgKHNpbmNlIGl0
IG5vdworICAgICAgICBkb2VzIGdsb2JhbCBDU0UpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBhY2NvbXBsaXNoZWQgYnkgYWRkaW5nIHRoZSBjb25jZXB0IG9mICJkZWYiIHRvIGNsb2JiZXJp
emUoKS4gSWYgY2xvYmJlcml6ZSgpIGNhbGxzCisgICAgICAgIGRlZigpLCBpdCBtZWFucyB0aGF0
IHRoZSBub2RlIGJlaW5nIGFuYWx5emVkIG1ha2VzIGF2YWlsYWJsZSBzb21lIHZhbHVlIGluIHNv
bWUgREZHIG5vZGUsCisgICAgICAgIGFuZCB0aGF0IGZ1dHVyZSBhdHRlbXB0cyB0byBjb21wdXRl
IHRoYXQgdmFsdWUgY2FuIHNpbXBseSB1c2UgdGhhdCBub2RlLiBUaGVyZSBhcmUgdHdvCisgICAg
ICAgIGtpbmRzIG9mIHRoaW5ncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gZGVmKCk6CisgICAgICAg
IAorICAgICAgICBQdXJlVmFsdWUuIFRoaXMgY2FwdHVyZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHB1cmUgbm9kZXMgLSBub2RlcyB0aGF0CisgICAgICAgICAg
ICBuZWl0aGVyIHJlYWQgbm9yIHdyaXRlLCBhbmQgcHJvZHVjZSBhIHZhbHVlIHRoYXQgaXMgYSBD
U0UgY2FuZGlkYXRlIC0gYXJlIGlkZW50aWNhbC4gSXQKKyAgICAgICAgICAgIGNhcnJpZXMgdGhl
IE5vZGVUeXBlLCBhbiBBZGphY2VuY3lMaXN0LCBhbmQgb25lIHdvcmQgb2YgbWV0YS1kYXRhLiBU
aGUgbWV0YS1kYXRhIGlzCisgICAgICAgICAgICB1c3VhbGx5IHVzZWQgZm9yIHRoaW5ncyBsaWtl
IHRoZSBhcml0aG1ldGljIG1vZGUgb3IgY29uc3RhbnQgcG9pbnRlci4gUGFzc2luZyBhCisgICAg
ICAgICAgICBQdXJlVmFsdWUgdG8gZGVmKCkgbWVhbnMgdGhhdCB0aGUgbm9kZSBwcm9kdWNlcyBh
IHZhbHVlIHRoYXQgaXMgdmFsaWQgYW55d2hlcmUgdGhhdCB0aGUKKyAgICAgICAgICAgIG5vZGUg
ZG9taW5hdGVzLgorICAgICAgICAKKyAgICAgICAgSGVhcExvY2F0aW9uLiBUaGlzIGRlc2NyaWJl
cyBhIGxvY2F0aW9uIGluIHRoZSBoZWFwIHRoYXQgY291bGQgYmUgd3JpdHRlbiB0byBvciByZWFk
IGZyb20uCisgICAgICAgICAgICBCb3RoIHN0b3JlcyBhbmQgbG9hZHMgY2FuIGRlZigpIGEgSGVh
cExvY2F0aW9uLiBIZWFwTG9jYXRpb24gY2FycmllcyBhcm91bmQgYW4gYWJzdHJhY3QKKyAgICAg
ICAgICAgIGhlYXAgdGhhdCBib3RoIHNlcnZlcyBhcyBwYXJ0IG9mIHRoZSAibmFtZSIgb2YgdGhl
IGhlYXAgbG9jYXRpb24gKHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgICBvdGhlciBmaWVs
ZHMgb2YgSGVhcExvY2F0aW9uKSBhbmQgYWxzbyB0ZWxscyB1cyB3aGF0IHdyaXRlKCkncyB0byB3
YXRjaCBmb3IuIElmIHNvbWVvbmUKKyAgICAgICAgICAgIHdyaXRlKCkncyB0byBhbiBhYnN0cmFj
dCBoZWFwIHRoYXQgb3ZlcmxhcHMgdGhlIGhlYXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBIZWFwTG9j
YXRpb24sCisgICAgICAgICAgICB0aGVuIGl0IG1lYW5zIHRoYXQgdGhlIHZhbHVlcyBmb3IgdGhh
dCBsb2NhdGlvbiBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgYXBwcm9hY2ggaXMgc3VmaWNpZW50bHkgY2xldmVyIHRoYXQgdGhlIENTRVBoYXNlIGl0c2Vs
ZiBjYW4gZm9jdXMgb24gdGhlIG1lY2hhbmlzbSBvZgorICAgICAgICB0cmFja2luZyB0aGUgUHVy
ZVZhbHVlPT5ub2RlIGFuZCBIZWFwTG9jYXRpb249Pm5vZGUgbWFwcywgd2l0aG91dCBoYXZpbmcg
dG8gd29ycnkgYWJvdXQKKyAgICAgICAgaW50ZXJwcmV0aW5nIHRoZSBzZW1hbnRpY3Mgb2YgZGlm
ZmVyZW50IERGRyBub2RlIHR5cGVzIC0gdGhhdCBpcyBub3cgYWxtb3N0IGVudGlyZWx5IGluCisg
ICAgICAgIGNsb2JiZXJpemUoKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzbGlnaHQg
T2N0YW5lIGFuZCBMb25nU3BpZGVyIHNwZWVkLXVwLiBJbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRo
aW5ncywgaXQncyBub3QgYQorICAgICAgICBiaWcgd2luIGJlY2F1c2UgTExWTSB3YXMgYWxyZWFk
eSBnaXZpbmcgdXMgbW9zdCBvZiB3aGF0IHdlIG5lZWRlZCBpbiBpdHMgR1ZOLiBTdGlsbCwgdGhp
cworICAgICAgICBpcyBhIGdvb2QgdGhpbmcgLSBpdCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgTExW
TSBJUiB3ZSBnZW5lcmF0ZSwgaXQgcmVtb3ZlcyB0aGUgb2xkIENTRSdzCisgICAgICAgIGhlYXAg
bW9kZWxpbmcgKHdoaWNoIHdhcyBhIGNvbnN0YW50IHNvdXJjZSBvZiBidWdzKSwgYW5kIGl0IGRv
ZXMgaW1wcm92ZSB0aGUgY29kZSB3ZQorICAgICAgICBnZW5lcmF0ZSBhICp0aW55KiBiaXQuIEFs
c28sIGFueSBmdXR1cmUgb3B0aW1pemF0aW9ucyB0aGF0IGRlcGVuZCBvbiBHQ1NFIHdpbGwgbm93
IGJlCisgICAgICAgIGVhc2llciB0byBpbXBsZW1lbnQuCisgICAgICAgIAorICAgICAgICBEdXJp
bmcgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgcGF0Y2ggSSBhbHNvIHJhdGlvbmFsaXplZCBzb21l
IG90aGVyIHN0dWZmLCBsaWtlIEdyYXBoJ3MKKyAgICAgICAgb3JkZXJlZCB0cmF2ZXJzYWxzIC0g
d2Ugbm93IGhhdmUgcHJlb3JkZXIgYW5kIHBvc3RvcmRlciByYXRoZXIgdGhhbiBqdXN0ICJkZXB0
aCBmaXJzdCIuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RIZWFwLmg6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGph
Y2VuY3lMaXN0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bUxDU0UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1HQ1NFKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Q1NFUGhhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpydW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbmRJ
bmRleEZvclB1cmVDU0UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpw
dXJlQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y29uc3RhbnRD
U0UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjb25zdGFudFN0b3Jh
Z2VQb2ludGVyQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0
Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNjb3BlZFZhckxvYWRFbGltaW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnZhckluamVjdGlvbldhdGNocG9pbnRF
bGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Y2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVj
a0FycmF5RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNl
OjpnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldE15U2NvcGVMb2Fk
RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRM
b2NhbExvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmludmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpw
ZXJmb3JtQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2xvYmJlclNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHMp
OgorICAgICAgICAoSlNDOjpERkc6OmFkZFdyaXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRk
UmVhZHNBbmRXcml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OnJlYWRzT3ZlcmxhcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6d3JpdGVzT3ZlcmxhcCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmlzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6
aGFzUHVyZURlZnMpOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNXcml0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6OmFjY2Vzc2VzT3ZlcmxhcCk6CisgICAgICAgIChKU0M6OkRGRzo6d3JpdGVzT3Zl
cmxhcCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpOb09wQ2xvYmJlcml6ZTo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6Q2hlY2tDbG9iYmVyaXplOjpvcGVyYXRvcigpKToK
KyAgICAgICAgKEpTQzo6REZHOjpSZWFkTWV0aG9kQ2xvYmJlcml6ZTo6UmVhZE1ldGhvZENsb2Ji
ZXJpemUpOgorICAgICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6OldyaXRlTWV0
aG9kQ2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V3JpdGVNZXRob2RDbG9iYmVyaXpl
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpE
ZWZNZXRob2RDbG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVy
aXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNl
OjpmaXh1cEJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpnZXRCbG9ja3NJblByZU9yZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjph
ZGRGb3JEZXB0aEZpcnN0U29ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OkhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6SGVhcExvY2F0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBM
b2NhdGlvbjo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpoZWFwKToK
KyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmJhc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OkhlYXBMb2NhdGlvbjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlv
bjo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR0xJ
Q01QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cmVwbGFjZVdpdGgp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHVyZVZhbHVlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjpkdW1wKToKKyAgICAgICAg
KiBkZmcvREZHUHVyZVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1
ZTo6UHVyZVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6Om9wZXJhdG9yISk6
CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjpvcCk6CisgICAgICAgIChKU0M6OkRGRzo6
UHVyZVZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjppbmZv
KToKKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6Omhhc2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlB1cmVWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVl
Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVl
SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlSGFzaDo6ZXF1YWwpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisK
IDIwMTQtMDctMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
ZnRsb3B0XSBNb3ZlIEZsdXNoKFNldExvY2FsKSBzdG9yZSBlbGltaW5hdGlvbiB0byBTdHJlbmd0
aFJlZHVjdGlvblBoYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGRmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAKICAgICBkZmcvREZHR3JhcGgu
Y3BwCiAgICAgZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNwcAorICAgIGRmZy9ERkdIZWFwTG9jYXRp
b24uY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAogICAgIGRmZy9ERkdJ
bnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAKQEAgLTE4Niw2ICsxODcsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFuLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAorICAgIGRmZy9ERkdQdXJlVmFsdWUuY3BwCiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAogICAg
IGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC00MDMsNiArNDAzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAi
IC8+CkBAIC00MzcsNiArNDM4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQbGFuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+CkBAIC05NzUs
NiArOTc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHUFJJbmZvLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNhZmVwb2ludC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIg
Lz4KQEAgLTEwMTUsNiArMTAxOCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHUmVnaXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTIwMTgxMjU3
MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIxNEUyMzE4MTMwOTU1MDA5QjZCNEQg
LyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lu
bGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExv
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICovOyB9Owor
CQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RDE5NkI4RjlFMDA5
MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZC
MTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDM4QTIxOTI3
MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CiAJCTBGQjU0Njc3MTRGNTlC
NUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAgQEAKIAkJMEZCMTRFMUQxODEyNEFD
RTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNo
ZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5saW5lQ2Fj
aGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdJbmxpbmVDYWNo
ZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjE3NjVD
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNzY1RDE5
NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRoID0gZGZnL0RGR0hlYXBMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1
MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHUHVyZVZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1
cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQdXJlVmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZp
ZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7
IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5oOyBwYXRoID0gZGZnL0RGR0FsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTExNCw2ICs1MTIyLDggQEAK
IAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCAqLywKIAkJCQkwRjJG
Q0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwICovLAogCQkJCTBG
MkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICovLAorCQkJCTBG
QjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBG
QjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCAqLywKIAkJCQkwRkIx
NEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi8sCiAJCQkJ
MEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMu
aCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAKIAkJCQkwRkJFMEY2RTE2QzFEQjAx
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZGRkM5
NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVl
LmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
ICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLywKQEAgLTYxMTcsNiArNjEyOSw3
IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA3MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjE3NjYz
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2NjcsNyBAQAogCQkJCTg2QUU2NEFBMTM1
RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA5RjJGMDE3QTBBQzA0
MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBF
NkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NDAs
MTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
OEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0Ey
QzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzYxNkMxREIw
RjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1Zh
bHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZF
RiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZp
c2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQobWFjcm8pIFwK
ICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAgICAgbWFjcm8oV29ybGQpIFwKLSAg
ICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0gICAgbWFjcm8oQXJndW1lbnRzX292
ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAotICAgIG1h
Y3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAgbWFjcm8oQXJyYXlCdWZmZXJfZGF0
YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZlcikgXAogICAgIG1hY3JvKEJ1dHRl
cmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBc
CiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdldHRlclNldHRl
cl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpIFwKLSAgICBt
YWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZp
ZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCiAgICAgbWFjcm8o
SlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKSBc
CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25f
ZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGVDaGFpbikgXAogICAgIG1h
Y3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3JvKEpTVmFyaWFibGVPYmplY3RfcmVn
aXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVzKSBcCkBAIC03Niw3ICs2Niw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBYnNvbHV0ZSkgXAog
ICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIG1h
eSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMgbmV2ZXIgZGlyZWN0bHkgd3JpdHRl
biBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5vZGUgY2xvYmJlcnMgdGhpczsgaXQg
anVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3JpdGUgd29ybGQgdG8gY2xvYmJlciBp
dC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBcCi0gICAgLyogVXNlIHRoaXMgZm9y
IHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUgd29ybGQgZ290IGNsb2Ji
ZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLiAqL1wKKyAgICAvKiBVc2Ug
dGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUgd29ybGQg
Z290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLiAqL1wKICAg
ICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRoaXMgZm9yIHdyaXRlcyBvbmx5LCBq
dXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5vZGUgaXMgaW52YWxpZC4gVGhpcyB3
b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5nIHRoYXQgaGFzIGFueSBzaWRlIGVm
ZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTcwOTc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1MSw2ICsxNTEsMzYgQEAgcHVibGljOgogICAgICAgICBtX3dvcmRzWzFdLm1f
ZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBp
ZiAoIWNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIHJlc3VsdCArPSBjaGlsZDEoKS5oYXNoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNo
aWxkMigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJl
c3VsdCAqPSAzOworICAgICAgICByZXN1bHQgKz0gY2hpbGQyKCkuaGFzaCgpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFjaGlsZDMoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIAorICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAgcmVzdWx0ICs9IGNoaWxkMygpLmhh
c2goKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGphY2VuY3lMaXN0JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBjaGlsZDEoKSA9PSBvdGhlci5jaGlsZDEoKQorICAgICAgICAgICAg
JiYgY2hpbGQyKCkgPT0gb3RoZXIuY2hpbGQyKCkKKyAgICAgICAgICAgICYmIGNoaWxkMygpID09
IG90aGVyLmNoaWxkMygpOworICAgIH0KKyAgICAKIHByaXZhdGU6CiAgICAgRWRnZSBtX3dvcmRz
W1NpemVdOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDggKzE3MSw4IEBAIHN0cnVjdCBCYXNp
Y0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgU1NBRGF0YShCYXNpY0Jsb2Nr
Kik7CiAgICAgICAgIH5TU0FEYXRhKCk7CiAgICAgfTsKLSAgICBPd25QdHI8U1NBRGF0YT4gc3Nh
OwotCisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQURhdGE+IHNzYTsKKyAgICAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9k
ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2
aXNpb24gMTcwOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQu
aCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHRWRnZVVzZXNTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgpAQCAtMzksOTg0ICs0MCw0NzkgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFzcyBDU0VQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CisvLyBUaGlzIGZpbGUgY29udGFpbnMgdHdvIENTRSBpbXBsZW1lbnRhdGlvbnM6
IGxvY2FsIChMQ1NFKSBhbmQgZ2xvYmFsIChHQ1NFKS4gTENTRSB0eXBpY2FsbHkgcnVucworLy8g
d2hlbiB3ZSdyZSBpbiBERkcgbW9kZSwgaS5lLiB3ZSB3YW50IHRvIGNvbXBpbGUgcXVpY2tseS4g
TENTRSBjb250YWlucyBhIGxvdCBvZiBvcHRpbWl6YXRpb25zCisvLyBmb3IgY29tcGlsZSB0aW1l
LiBHQ1NFLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZmFpcmx5IHN0cmFpZ2h0LWZvcndhcmQuIEl0
IHdpbGwgZmluZCBtb3JlCisvLyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBieSB2aXJ0dWUg
b2YgYmVpbmcgZ2xvYmFsLgorCituYW1lc3BhY2UgeworCitjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKworY2xhc3MgQ2xvYmJlckZpbHRlciB7CiBwdWJsaWM6Ci0gICAgQ1NFUGhhc2UoR3Jh
cGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1YmV4cHJlc3Npb24g
ZWxpbWluYXRpb24iKQorICAgIENsb2JiZXJGaWx0ZXIoQWJzdHJhY3RIZWFwIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCiAgICAgewogICAgIH0KICAgICAKLSAgICBib29sIHJ1bigpCisg
ICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEltcHVyZU1hcDo6S2V5VmFsdWVQYWlyVHlwZSYgcGFp
cikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSAhPSBCZWZv
cmVGaXhwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0
aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwZXJmb3JtQmxv
Y2tDU0UoZGVwdGhGaXJzdFtpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IG1fY2hhbmdlZDsKKyAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtleS5oZWFw
KCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgCi0gICAgdW5zaWduZWQgZW5kSW5kZXhG
b3JQdXJlQ1NFKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5b
bV9jdXJyZW50Tm9kZS0+b3AoKV07Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gVUlOVF9NQVgpCi0g
ICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQr
KzsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2luZGV4SW5CbG9jayk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQorICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7Cit9OwogCi0gICAg
Tm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBu
b2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5j
aGlsZDIoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMo
KS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZElu
ZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxk
MSB8fCBvdGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGlsZDMpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7CitpbmxpbmUgdm9pZCBjbG9iYmVyKEltcHVyZU1hcCYgbWFwLCBBYnN0
cmFjdEhlYXAgaGVhcCkKK3sKKyAgICBDbG9iYmVyRmlsdGVyIGZpbHRlcihoZWFwKTsKKyAgICBt
YXAucmVtb3ZlSWYoZmlsdGVyKTsKK30KIAotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
b3RoZXJOb2RlLT5vcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLnNhbml0
aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIHJl
dHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDEpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVy
Q2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMigpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYg
KCFvdGhlckNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAg
ICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxk
MygpLnNhbml0aXplZCgpOwotICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQotICAgICAgICAg
ICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBj
aGlsZDMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CitjbGFz
cyBMQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExDU0VQaGFzZShHcmFw
aCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhbCBjb21tb24gc3ViZXhwcmVz
c2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9zbWFsbEJsb2NrKGdyYXBoKQorICAgICAg
ICAsIG1fbGFyZ2VCbG9jayhncmFwaCkKKyAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGNv
bnN0YW50Q1NFKE5vZGUqIG5vZGUpCisgICAgYm9vbCBydW4oKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlm
IChvdGhlck5vZGUtPm9wKCkgIT0gbm9kZS0+b3AoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnQoKSAh
PSBub2RlLT5jb25zdGFudCgpKQorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9n
cmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOworICAgICAgICAgICAgaWYg
KGJsb2NrLT5zaXplKCkgPD0gU21hbGxNYXBzOjpjYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fc21hbGxCbG9jay5ydW4oYmxvY2spOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9sYXJnZUJsb2NrLnJ1bihibG9jayk7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAgICAgCi0gICAgTm9kZSogY29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRShOb2RlKiBu
b2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NF
KCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgIT0gQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZS0+c3RvcmFnZVBvaW50ZXIoKSAhPSBub2RlLT5zdG9yYWdl
UG9pbnRlcigpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXR1cm4gb3RoZXJOb2RlOworcHJpdmF0ZToKKyAgICBjbGFzcyBTbWFsbE1hcHMg
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNhcGFjaXR5ID0g
MjA7CisgICAgCisgICAgICAgIFNtYWxsTWFwcygpCisgICAgICAgICAgICA6IG1fcHVyZUxlbmd0
aCgwKQorICAgICAgICAgICAgLCBtX2ltcHVyZUxlbmd0aCgwKQorICAgICAgICB7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIAotICAgIE5vZGUqIGdldENhbGxlZUxv
YWRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wdXJlTGVuZ3RoID0gMDsK
KyAgICAgICAgICAgIG1faW1wdXJlTGVuZ3RoID0gMDsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihO
b2RlKiBhcnJheSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBh
cnJheSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltcHVyZUxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGhlYXAub3ZlcmxhcHMobV9pbXB1cmVNYXBbaV0ua2V5LmhlYXAo
KSkpCisgICAgICAgICAgICAgICAgICAgIG1faW1wdXJlTWFwW2ktLV0gPSBtX2ltcHVyZU1hcFst
LW1faW1wdXJlTGVuZ3RoXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CiAgICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lz
dGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIE5vZGUqIGFk
ZFB1cmUoUHVyZVZhbHVlIHZhbHVlLCBOb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3B1cmVMZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9wdXJlTWFwW2ldLmtleSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcHVyZU1hcFtpXS52YWx1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fcHVyZUxlbmd0aCA8IGNhcGFjaXR5KTsKKyAgICAg
ICAgICAgIG1fcHVyZU1hcFttX3B1cmVMZW5ndGgrK10gPSBXVEY6OktleVZhbHVlUGFpcjxQdXJl
VmFsdWUsIE5vZGUqPih2YWx1ZSwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgCi0gICAgTm9kZSogc2Nv
cGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgaW50IHZhck51bWJlcikKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYmIG5v
ZGUtPnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAgICAgICAg
ICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhck51
bWJlcigpICE9IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVycykKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIE5vZGUqIGFkZEltcHVyZShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUq
IG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW1wdXJl
TGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1faW1wdXJlTWFwW2ldLmtleSA9
PSBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1faW1wdXJlTWFwW2ldLnZh
bHVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQobV9pbXB1cmVMZW5ndGggPCBjYXBhY2l0eSk7CisgICAgICAgICAgICBtX2ltcHVyZU1h
cFttX2ltcHVyZUxlbmd0aCsrXSA9IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBMb2NhdGlvbiwgTm9k
ZSo+KGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICAKLSAgICBib29sIHZhckluamVjdGlv
bldhdGNocG9pbnRFbGltaW5hdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhckluamVj
dGlvbldhdGNocG9pbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgIHByaXZhdGU6CisgICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPFB1cmVWYWx1ZSwgTm9k
ZSo+IG1fcHVyZU1hcFtjYXBhY2l0eV07CisgICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEhlYXBM
b2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwW2NhcGFjaXR5XTsKKyAgICAgICAgdW5zaWduZWQg
bV9wdXJlTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBtX2ltcHVyZUxlbmd0aDsKKyAgICB9Owor
CisgICAgY2xhc3MgTGFyZ2VNYXBzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExhcmdlTWFwcygp
CisgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAg
IAotICAgIE5vZGUqIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSwgTm9kZSog
Y2hpbGQyLCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEgfHwg
bm9kZSA9PSBjaGlsZDIpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hp
bGQxCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpID09IGNoaWxkMgotICAg
ICAgICAgICAgICAgICAgICAmJiBub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gYXJyYXlNb2Rl
LnR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIC8v
IFR5cGVkIGFycmF5cyAKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGVkQXJyYXlU
eXBlKCkgIT0gTm90VHlwZWRBcnJheSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkgPT0gY2hpbGQx
Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkgPT0g
Y2hpbGQyCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9
PSBhcnJheU1vZGUudHlwZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBh
c3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBn
ZXR0aW5nIGZyb20uCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7
IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEK
LSAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhl
biB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAg
ICAgICAgLy8gLi4uIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHR5cGVkIGFycmF5cywgd2hlcmUgYWxs
IHR5cGVkIGFycmF5cyBjbG9iYmVyIGFsbCBvdGhlcgotICAgICAgICAgICAgICAgIC8vIHR5cGVk
IGFycmF5cyEgIEFuIEludDMyQXJyYXkgY2FuIGFsaWFzIGEgRmxvYXQ2NEFycmF5IGZvciBleGFt
cGxlLCBhbmQgc28gb24uCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9wdXJlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBtX2ltcHVy
ZU1hcC5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEZyb3plblZhbHVlKiBmdW5jdGlvbiwgTm9k
ZSogY2hpbGQxKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQ
dXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0Z1bmN0aW9u
ICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5mdW5jdGlvbigpID09IGZ1bmN0
aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgICAgICB2b2lkIHdy
aXRlKEFic3RyYWN0SGVhcCBoZWFwKQorICAgICAgICB7CisgICAgICAgICAgICBjbG9iYmVyKG1f
aW1wdXJlTWFwLCBoZWFwKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hp
bGQxKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBDaGVja0V4ZWN1dGFibGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUt
PmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBOb2RlKiBhZGRQdXJlKFB1cmVWYWx1ZSB2YWx1ZSwgTm9kZSogbm9kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3B1cmVNYXAuYWRkKHZhbHVlLCBu
b2RlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOworICAgICAgICB9CisgICAgCisgICAgICAgIE5vZGUqIGFkZEltcHVyZShIZWFwTG9jYXRp
b24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9pbXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWluYXRp
b24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGUqIGNoaWxkMSkKLSAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAg
ICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVT
ZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAg
ICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5u
ZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAg
ICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0
dXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGgg
YW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9z
c2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6
Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9u
IGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhh
dCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJl
TWFwOworICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBzPgorICAgIGNsYXNzIEJsb2NrQ1NF
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJsb2NrQ1NFKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
ICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CiAgICAgCi0gICAgYm9vbCBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludEVsaW1pbmF0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlKiBjaGlsZDEpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAg
ICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzICE9IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIC8v
IFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUuCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0g
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlW
YWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFm
ZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBs
aWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBib29sIHJ1bihCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXBzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50aXR5
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3Jh
cGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiBtX2NoYW5nZWQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KICAgICAKLSAgICBOb2RlKiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBiYXNlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBiYXNlKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMigpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51
bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpID09IGJhc2UpIC8vIE11c3QgYmUgc2FtZSBwcm9w
ZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MygpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikg
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
RGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2Rl
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQg
aXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBp
bnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1
Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICAgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkg
eyB9CiAgICAgCi0gICAgTm9kZSogZ2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRp
b24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUg
PT0gYmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSBiYXNlCi0gICAgICAgICAgICAg
ICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5n
IGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwg
dGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgdm9pZCB3cml0ZShBYnN0cmFj
dEhlYXAgaGVhcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXBzLndyaXRlKGhlYXApOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRQ
cm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZSA9PSBjaGlsZDEpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
YXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIC8vIElmIHdlIGNhbiBjaGVhcGx5IHBy
b3ZlIHRoaXMgaXMgYSBjaGFuZ2UgdG8gb3VyIG9iamVjdCdzIHN0b3JhZ2UsIHdlCi0gICAgICAg
ICAgICAgICAgLy8gY2FuIG9wdGltaXplIGFuZCB1c2UgaXRzIHJlc3VsdC4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGN1cnJlbnRseSBj
YW4ndCBwcm92ZSB0aGF0IHRoaXMgZG9lc24ndCBjaGFuZ2Ugb3VyIG9iamVjdCdzCi0gICAgICAg
ICAgICAgICAgLy8gc3RvcmFnZSwgc28gd2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgaXQg
bWF5IGNoYW5nZSB0aGUgc3RvcmFnZQotICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgb2YgYW55
IG9iamVjdCwgaW5jbHVkaW5nIG91cnMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5n
IGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwg
dGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJy
YXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0ZXJmbHkuCi0gICAgICAgICAgICAgICAg
Ly8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gbV9tYXBzLmFkZFB1cmUodmFsdWUsIG1fbm9k
ZSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICAK
LSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBh
cnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2Fz
ZSBDaGVja0FycmF5OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGls
ZDEgJiYgbm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9T
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5
aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYXJyYXkuCi0gICAgICAgICAgICAgICAgLy8gQnV0
IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTm9k
ZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEs
IEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBh
cnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB2b2lkIGRl
ZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBOb2RlKiBtYXRjaCA9IG1fbWFwcy5hZGRJbXB1cmUobG9jYXRpb24sIHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGb3IgdW5jYXB0dXJlZCBsb2NhbHMsIHVzdWFsbHkgdGhlIENQUyByZXRocmVhZGlu
ZyBwaGFzZSBkb2VzIHRoaXMuIEJ1dCBpdCdzIE9LCisgICAgICAgICAgICAgICAgLy8gZm9yIHVz
IHRvIG1lc3Mgd2l0aCBsb2NhbHMgLSByZWdhcmRsZXNzIG9mIHRoZWlyIGNhcHR1cmVkbmVzcyAt
IHNvIGxvbmcgYXM6CisgICAgICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAgICAgLy8gLSBX
ZSBkZXRocmVhZCB0aGUgZ3JhcGguIEFueSBjaGFuZ2VzIHdlIG1ha2UgbWF5IGludmFsaWRhdGUg
dGhlIGFzc3VtcHRpb25zIG9mCisgICAgICAgICAgICAgICAgLy8gICBvdXIgQ1BTIGZvcm0sIHBh
cnRpY3VsYXJseSBpZiB0aGlzIEdldExvY2FsIGlzIGxpbmtlZCB0byB0aGUgdmFyaWFibGVzQXRU
YWlsLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBXZSBkb24ndCBp
bnRyb2R1Y2UgYSBQaGFudG9tIGZvciB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLiBUaGlzIHdv
dWxkbid0IGJlCisgICAgICAgICAgICAgICAgLy8gICB0b3RhbGx5IHdyb25nIGJ1dCBpdCB3b3Vs
ZCBwZXNzaW1pemUgdGhlIGNvZGUuIEp1c3QgYmVjYXVzZSB0aGVyZSBpcyBhCisgICAgICAgICAg
ICAgICAgLy8gICBHZXRMb2NhbCBkb2Vzbid0IG1lYW4gdGhhdCB0aGUgY2hpbGQgd2FzIGxpdmUu
IFNpbXBseSByZXJvdXRpbmcgdGhlIGFsbCB1c2VzCisgICAgICAgICAgICAgICAgLy8gICBvZiB0
aGlzIEdldExvY2FsIHdpbGwgcHJlc2VydmUgdGhlIGxpdmUtYXQtZXhpdCBpbmZvcm1hdGlvbiBq
dXN0IGZpbmUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBhY2Nv
bXBsaXNoIHRoZSBsYXR0ZXIgYnkganVzdCBjbGVhcmluZyB0aGUgY2hpbGQ7IHRoZW4gdGhlIFBo
YW50b20gdGhhdCB3ZQorICAgICAgICAgICAgICAgIC8vIGludHJvZHVjZSB3b24ndCBoYXZlIGNo
aWxkcmVuIGFuZCBzbyBpdCB3aWxsIGV2ZW50dWFsbHkganVzdCBiZSBkZWxldGVkLgorICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICAK
LSAgICBOb2RlKiBnZXRJbnRlcm5hbEZpZWxkTG9hZEVsaW1pbmF0aW9uKE5vZGVUeXBlIG9wLCBO
b2RlKiBjaGlsZDEpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgICAgIAor
ICAgICAgICBib29sIG1fY2hhbmdlZDsKKyAgICAgICAgTm9kZSogbV9ub2RlOworICAgIAorICAg
ICAgICBNYXBzIG1fbWFwczsKKyAgICB9OwogCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBvcCAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgQmxvY2tDU0U8U21hbGxNYXBzPiBtX3NtYWxsQmxvY2s7CisgICAgQmxvY2tD
U0U8TGFyZ2VNYXBzPiBtX2xhcmdlQmxvY2s7Cit9OwogCi0gICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3Bl
TG9hZEVsaW1pbmF0aW9uKCkKK2NsYXNzIEdDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgR0NTRVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
Imdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29w
ZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgR2V0TXlTY29w
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGdldExvY2FsTG9hZEVsaW1pbmF0aW9u
KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZSomIHJlbGV2YW50TG9jYWxPcCwgYm9vbCBjYXJl
QWJvdXRDbG9iYmVyaW5nKQorICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIHJlbGV2YW50
TG9jYWxPcCA9IDA7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBG
aXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9jYWwpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAg
ICBtX2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7CisgICAgICAgIG1fZ3JhcGgubV9kb21p
bmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gcHJlT3JkZXI7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5Q
cmVPcmRlcihwcmVPcmRlcik7CisgICAgICAgIAorICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVz
aXplKG1fZ3JhcGgubnVtQmxvY2tzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmln
dXJlIG91dCB3aGF0IGdldHMgY2xvYmJlcmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNl
cyB0aGUgcHJlT3JkZXIgbGlzdAorICAgICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gcHJlT3JkZXIuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBtX2Jsb2NrID0gcHJlT3JkZXJbaV07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAm
bV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gbV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAg
ICAgICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1fYmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJl
RGF0YS0+d3JpdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQmFzZWQgb24g
bXkgZXhwZXJpZW5jZSBkb2luZyB0aGlzIGJlZm9yZSwgd2hhdCBmb2xsb3dzIG1pZ2h0IGhhdmUg
dG8gYmUgbWFkZSBpdGVyYXRpdmUuCisgICAgICAgIC8vIEJ1dCBpdCBmZWVscyBsaWtlLCByaWdo
dCBub3csIHRoaXMgd29ya3MgYXMgYSBzaW5nbGUgcGFzcyBiZWNhdXNlIHdlIG9ubHkgdHVybiBh
IG5vZGUKKyAgICAgICAgLy8gaW50byBhIHZhbHVlIG9yIGhlYXAgbG9jYXRpb24gYWZ0ZXIgd2Ug
aGF2ZSBwZXJmb3JtZWQgc3Vic3RpdHV0aW9ucyBvbiB0aGF0IG5vZGUncworICAgICAgICAvLyBj
aGlsZHJlbi4KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVP
cmRlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgbV9ibG9jayA9IHByZU9yZGVyW2ldOwor
ICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Jsb2NrLT5pbmRl
eF07CisgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlByb2Nlc3Np
bmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4iKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICBMb29raW5nIGF0IG5vZGUgIiwgbV9ub2RlLCAiOlxuIik7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6Ci0gICAgICAgICAgICBjYXNlIFB1dENsb3N1
cmVWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZv
cm1TdWJzdGl0dXRpb24obV9ub2RlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09
IElkZW50aXR5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9u
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVy
aXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAg
ICAgfQorCisgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CiAgICAgCi0gICAgYm9vbCBp
bnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0aW9uKCkKKyAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVh
cCBoZWFwKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBJbnZhbGlkYXRpb25Qb2ludCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh3cml0ZXNPdmVybGFwKG1f
Z3JhcGgsIG5vZGUsIFdhdGNocG9pbnRfZmlyZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjbG9iYmVyKG1faW1wdXJl
RGF0YS0+YXZhaWxhYmxlQXRUYWlsLCBoZWFwKTsKKyAgICAgICAgbV93cml0ZXNTb0Zhci5hZGQo
aGVhcCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFj
ZW1lbnQpCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYg
KCFyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIG1fY3VycmVudE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhp
cyBub2RlLgotICAgICAgICBtX2N1cnJlbnROb2RlLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50
OworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQodmFsdWUsIFZlY3RvcjxO
b2RlKj4oKSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVb
aV07CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGNhbmRp
ZGF0ZS0+b3duZXIsIG1fYmxvY2spKSB7CisgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNl
V2l0aChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQobV9ub2RlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGUoKQorICAgIE5vZGUq
IGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewotICAgICAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJlbnRO
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgIE5vZGUqIG1hdGNoID0gbV9pbXB1cmVE
YXRhLT5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICBGb3VuZCBsb2NhbCBtYXRjaDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFu
dG9tVHlwZSA9IFBoYW50b20pCi0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKHBoYW50b21UeXBlKTsKKyAgICAgICAgaWYgKG1f
d3JpdGVzU29GYXIub3ZlcmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTm90IGxvb2tpbmcgZ2xv
YmFsbHkgYmVjYXVzZSBvZiBsb2NhbCBjbG9iYmVyOiAiLCBtX3dyaXRlc1NvRmFyLCAiXG4iKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NF
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24o
bm9kZSk7CisgICAgICAgIC8vIFRoaXMgcGVyZm9tcyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5k
IHNvbWUgcG9zc2libGUgZGVmKCkgdGhhdCBtYXRjaGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxv
Y2F0aW9uLiBBcyBzb29uIGFzIGl0IGZpbmRzIGEgcG9zc2libGUgZGVmKCksIGl0IGFzc3VtZXMg
dGhhdCB0aGlzIG9uZSBtdXN0IGJlIHRoZQorICAgICAgICAvLyBtYXRjaCBhbmQgY29tcGxldGVz
IHRoZSBzZWFyY2ggYnkgaGFsdGluZyBhdCB0aGlzIGJsb2NrLiBBcyBzb29uIGFzIGl0IGZpbmRz
IGEgd3JpdGUoKQorICAgICAgICAvLyB0aGF0IG92ZXJsYXBzIHRoZSBsb2NhdGlvbidzIGhlYXAs
IGl0IHN0b3BzLCBhc3N1bWluZyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1hdGNoLgogICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgOD4gd29ya2xpc3Q7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gc2Vl
bkxpc3Q7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOwogICAgICAgICAKLSAgICAgICAgY2FzZSBJ
ZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUg
dGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4K
LSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2Ug
Qml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6
Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAg
ICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBB
cml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhT
aW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogot
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAg
ICBjYXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElz
RnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBTa2lwVG9w
U2NvcGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNlIEdldENsb3N1cmVS
ZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2UgVHlwZU9mOgot
ICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXA6Ci0gICAg
ICAgIGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0g
ICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAg
IGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICAgICAg
Tm9kZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgIGlmICghY2FuZGlk
YXRlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhj
YW5kaWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRhdGUtPmFyaXRoTW9k
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FuZGlk
YXRlLT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAg
ICAgICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vl
bi5zZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
IHNlZW5MaXN0LmFwcGVuZChibG9jayk7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxsZWVMb2FkRWxpbWluYXRp
b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5v
ZGUqIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGUqIHBvc3NpYmxlUmVwbGFjZW1l
bnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCks
IHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwotICAg
ICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9IEdldExvY2FsVW5saW5rZWQK
LSAgICAgICAgICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
ICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgIGlmICgh
c2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBH
ZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQKLSAgICAgICAg
ICAgIC8vIGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3At
Pm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKLSAgICAgICAgICAgICAgICByZWxldmFudExvY2Fs
T3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKLQotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAg
ICBOb2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS0+dW5saW5rZWRMb2NhbCgpLCByZWxldmFu
dExvY2FsT3BJZ25vcmVkLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgY2FzZSBEb3Vi
bGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgLy8g
VGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQg
bm9kZXMgdG8gY29uc3RhbnRzLAotICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBk
dXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRShub2Rl
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEFy
cmF5TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGlt
aW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15
U2NvcGVMb2FkRWxpbWluYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBp
biBibG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBk
YXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF07CiAgICAgICAgICAgICAKLSAgICAg
ICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsbHkgcHVyZTogdGhlc2UgYXJl
IHB1cmUsIGFuZCBjYW4KLSAgICAgICAgLy8gYmUgQ1NFJ2QsIHNvIGxvbmcgYXMgdGhlIHByZWRp
Y3Rpb24gaXMgdGhlIG9uZSB3ZSB3YW50LgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAg
ICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsK
LSAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0g
ICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBwdXJlQ1NFKG5vZGUpOwotICAgICAg
ICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2Fs
KHJlcGxhY2VtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFj
ZW1lbnQpOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhi
bG9jaywgbV9ibG9jaykgJiYgYmxvY2sgIT0gbV9ibG9jaykgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0IHN0cmlj
dGx5IGRvbWluYXRlcy5cbiIpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgIW1hdGNoKTsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGRhdGEuYXZhaWxh
YmxlQXRUYWlsLmdldChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmlsaXR5OiAiLCBtYXRj
aCwgIlxuIik7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIERvbid0IGV4YW1pbmUgdGhlIHByZWRlY2Vzc29ycyBvZiBhIG1hdGNoLiBBdCB0aGlz
IHBvaW50IHdlIGp1c3Qgd2FudCB0bworICAgICAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2gg
dGhhdCBvdGhlciBibG9ja3Mgb24gdGhlIHBhdGggZnJvbSBoZXJlIHRvIHRoZXJlIGRvbid0IGNs
b2JiZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxvY2F0aW9uIHdlJ3JlIGludGVyZXN0
ZWQgaW4uCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5v
dCBxdWl0ZSBwdXJlLCBidXQgd2UgY2FuIHN0aWxsCi0gICAgICAgIC8vIG9wdGltaXplIHRoZW0g
cHJvdmlkZWQgdGhhdCBzb21lIHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCi0gICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPnZhck51bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmICh2YXJJbmpl
Y3Rpb25XYXRjaHBvaW50RWxpbWluYXRpb24oKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlW
YWw6Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgotICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgICAgICBFZGdlIGNo
aWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICBFZGdlIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
cmVwbGFjZW1lbnQgPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEubm9kZSgpLCBjaGls
ZDIubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXBs
YWNlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3AoUHV0QnlWYWxBbGlhcyk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIERlYWxpbmcgd2l0aCB3cml0ZSBzZXQgIiwgZGF0
YS53cml0ZXMsICJcbiIpOworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJsYXBzKGxv
Y2F0aW9uLmhlYXAoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBDbG9iYmVyZWQuXG4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAg
ICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLT5m
dW5jdGlvbigpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1p
bmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAg
ICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBpZiAoY2hlY2tBcnJh
eUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKQot
ICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRUeXBl
ZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXI6Ci0gICAgICAgIGNhc2Ug
R2V0U2V0dGVyOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbnRlcm5hbEZpZWxk
TG9hZEVsaW1pbmF0aW9uKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo
IXNlZW4uZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29y
a2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5zZXQo
cHJlZGVjZXNzb3ItPmluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlv
bihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTXVs
dGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9h
ZEVsaW1pbmF0aW9uKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJl
ciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgotICAgICAgICAgICAgaWYgKGlu
dmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24oKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAvLyBkbyBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdHMgZm9yIG5leHQgdGltZS4gV2UgY2FjaGUgdGhl
bSBib3RoIGZvciB0aGlzIGJsb2NrIGFuZCBmb3IgYWxsIG9mIG91cgorICAgICAgICAvLyBwcmVk
ZWNlc3NvcnMsIHNpbmNlIGV2ZW4gdGhvdWdoIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCBvdXIgcHJl
ZGVjZXNzb3JzLCBvdXIgcHJlZGVjZXNzb3JzCisgICAgICAgIC8vIHByb2JhYmx5IGhhdmUgc3Vj
Y2Vzc29ycyBvdGhlciB0aGFuIHVzLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
c2Vlbkxpc3QpCisgICAgICAgICAgICBtX2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4XS5hdmFp
bGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CisgICAgICAgIG1faW1wdXJlRGF0YS0+
YXZhaWxhYmxlQXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICAKLSAgICAgICAg
bV9sYXN0U2Vlbltub2RlLT5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOworICAgICAgICByZXR1cm4g
bWF0Y2g7CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUp
CiAgICAgewotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24g
ZGVmOiAiLCBsb2NhdGlvbiwgIiAtPiAiLCB2YWx1ZSwgIlxuIik7CisgICAgICAgIAorICAgICAg
ICBOb2RlKiBtYXRjaCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEdvdCBtYXRjaDog
IiwgbWF0Y2gsICJcbiIpOwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9j
azsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExhc3ROb2RlVHlwZTsgKytpKQot
ICAgICAgICAgICAgbV9sYXN0U2VlbltpXSA9IFVJTlRfTUFYOwotICAgICAgICAKLSAgICAgICAg
Zm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5h
dChtX2luZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBwZXJmb3JtTm9kZUNTRShtX2N1cnJlbnRO
b2RlKTsKKyAgICAgICAgaWYgKCFtYXRjaCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBt
X2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbm9kZS0+cmVwbGFj
ZVdpdGgobWF0Y2gpOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwot
ICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExh
c3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKLSAgICBib29sIG1fY2hhbmdlZDsgLy8gT25seSB0cmFj
a3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1p
emF0aW9ucy4KKyAgICBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICAgICAgSW1wdXJlQmxv
Y2tEYXRhKCkKKyAgICAgICAgICAgIDogZGlkVmlzaXQoZmFsc2UpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQ2xvYmJlclNldCB3cml0ZXM7CisgICAgICAgIEltcHVy
ZU1hcCBhdmFpbGFibGVBdFRhaWw7CisgICAgICAgIGJvb2wgZGlkVmlzaXQ7CisgICAgfTsKKyAg
ICAKKyAgICBQdXJlTXVsdGlNYXAgbV9wdXJlVmFsdWVzOworICAgIFZlY3RvcjxJbXB1cmVCbG9j
a0RhdGE+IG1faW1wdXJlRGF0YU1hcDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwor
ICAgIE5vZGUqIG1fbm9kZTsKKyAgICBJbXB1cmVCbG9ja0RhdGEqIG1faW1wdXJlRGF0YTsKKyAg
ICBDbG9iYmVyU2V0IG1fd3JpdGVzU29GYXI7CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CiB9
OwogCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQorfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2Jvb2wgcGVyZm9ybUxDU0UoR3JhcGgmIGdyYXBoKQogewotICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNl
PENTRVBoYXNlPihncmFwaCk7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBMQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExDU0VQaGFzZT4oZ3JhcGgpOwor
fQorCitib29sIHBlcmZvcm1HQ1NFKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIEdDU0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
R0NTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmgJKHJldmlzaW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsMTEgQEAgY2xhc3Mg
R3JhcGg7CiAvLyBpdCBpcyByYXRoZXIgcHJvZml0YWJsZS4gSXQgaGFzIGZhaXJseSBhY2N1cmF0
ZSBoZWFwIG1vZGVsaW5nIGFuZCB3aWxsIG1hdGNoCiAvLyBhIHdpZGUgcmFuZ2Ugb2Ygc3ViZXhw
cmVzc2lvbiBzaW1pbGFyaXRpZXMuIEl0J3Mga25vd24gdG8gcHJvZHVjZSBiaWcgd2lucwogLy8g
b24gYSBmZXcgYmVuY2htYXJrcywgYW5kIGlzIHJlbGF0aXZlbHkgY2hlYXAgdG8gcnVuLgotYm9v
bCBwZXJmb3JtQ1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1MQ1NFKEdyYXBoJik7CisKKy8vIFNh
bWUsIGJ1dCBnbG9iYWwuIE9ubHkgd29ya3MgZm9yIFNTQSwgYW5kIGRvZXNuJ3QgaGF2ZSBhbGwg
b2YgdGhlIHNhbWUgc3BlZWQKKy8vIG9wdGltaXphdGlvbnMuCitib29sIHBlcmZvcm1HQ1NFKEdy
YXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCShyZXZpc2lvbiAxNzA5NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMjIsMzcgKzEyMiwzOCBAQCBIYXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJlclNldDo6c2V0
T2YoCiB2b2lkIGFkZFJlYWRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYg
cmVhZFNldCkKIHsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7Ci0gICAgTm9P
cENsb2JiZXJpemUgYWRkV3JpdGU7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVh
ZCwgYWRkV3JpdGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShn
cmFwaCwgbm9kZSwgYWRkUmVhZCwgbm9PcCwgbm9PcCk7CiB9CiAKIHZvaWQgYWRkV3JpdGVzKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCiB7Ci0gICAgTm9P
cENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwogICAgIENsb2Ji
ZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBh
ZGRXcml0ZSwgbm9PcCk7CiB9CiAKIHZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0LCBDbG9iYmVyU2V0JiB3cml0ZVNldCkK
IHsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7CiAgICAgQ2xvYmJlclNldEFk
ZCBhZGRXcml0ZSh3cml0ZVNldCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVh
ZCwgYWRkV3JpdGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShn
cmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiBib29sIHJlYWRzT3Zl
cmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAg
ICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFJlYWQocmVhZFNldCk7Ci0gICAgTm9PcENsb2JiZXJp
emUgYWRkV3JpdGU7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3Jp
dGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9k
ZSwgYWRkUmVhZCwgbm9PcCwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFJlYWQucmVzdWx0KCk7CiB9
CiAKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJT
ZXQmIHdyaXRlU2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENs
b2JiZXJpemUgbm9PcDsKICAgICBDbG9iYmVyU2V0T3ZlcmxhcHMgYWRkV3JpdGUod3JpdGVTZXQp
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBj
bG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJu
IGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJldmlzaW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDI2ICszMiw0
MyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2Jvb2wgaXNQdXJlKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICBDaGVja0Nsb2JiZXJpemUgYWRkQWNjZXNz
OworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwg
YWRkQWNjZXNzLCBhZGRBY2Nlc3MsIG5vT3ApOworICAgIHJldHVybiAhYWRkQWNjZXNzLnJlc3Vs
dCgpOworfQorCitib29sIGhhc1B1cmVEZWZzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sK
KyAgICBDaGVja0Nsb2JiZXJpemUgYWRkUHVyZTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIG5vT3AsIGFkZFB1cmUpOworICAgIHJl
dHVybiBhZGRQdXJlLnJlc3VsdCgpOworfQorCiBib29sIGRvZXNXcml0ZXMoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENs
b2JiZXJpemUgbm9PcDsKICAgICBDaGVja0Nsb2JiZXJpemUgYWRkV3JpdGU7Ci0gICAgY2xvYmJl
cml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVz
dWx0KCk7CiB9CiAKIGJvb2wgYWNjZXNzZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBB
YnN0cmFjdEhlYXBPdmVybGFwcyBhZGRBY2Nlc3MoaGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFw
aCwgbm9kZSwgYWRkQWNjZXNzLCBhZGRBY2Nlc3MpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5v
ZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKICAgICByZXR1cm4gYWRkQWNjZXNzLnJl
c3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBBYnN0cmFjdEhlYXAgaGVhcCkKIHsKLSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAg
IE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkV3JpdGUo
aGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOwor
ICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICBy
ZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMx
LDEzIEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiREZHRWRnZVVz
ZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0hlYXBM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0
b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3Rv
ciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQogewogICAgIC8v
IFNvbWUgbm90ZXM6CiAgICAgLy8KQEAgLTY5LDYgKzcxLDI5IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAvLyAgIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNl
IC0gdGhvdWdoIHRoZXkgcHJvYmFibHkgY291bGQgYmUgaWYgd2UgZGlkIHNvbWUKICAgICAvLyAg
IHNtYWxsIGhhY2tpbmcuCiAgICAgCisgICAgLy8gV2hpbGUgcmVhZCgpIGFuZCB3cml0ZSgpIGFy
ZSBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSAtIHRoZXkgdHJhY2sgd2hhdCBzb3J0cyBvZiB0aGlu
Z3MgdGhlCisgICAgLy8gbm9kZSBtYXkgcmVhZCBvciB3cml0ZSAtIHRoZSBkZWYoKSBmdW5jdG9y
IGlzIG1vcmUgdHJpY2t5LiBJdCB0ZWxscyB5b3UgdGhlIGhlYXAgbG9jYXRpb25zCisgICAgLy8g
KG5vdCBqdXN0IGFic3RyYWN0IGhlYXBzKSB0aGF0IGFyZSBkZWZpbmVkIGJ5IGEgbm9kZS4gQSBo
ZWFwIGxvY2F0aW9uIGNvbXByaXNlcyBhbiBhYnN0cmFjdAorICAgIC8vIGhlYXAsIHNvbWUgbm9k
ZXMsIGFuZCBhIExvY2F0aW9uS2luZC4gQnJpZWZseSwgYSBsb2NhdGlvbiBkZWZpbmVkIGJ5IGEg
bm9kZSBpcyBhIGxvY2F0aW9uCisgICAgLy8gd2hvc2UgdmFsdWUgY2FuIGJlIGRlZHVjZWQgZnJv
bSBsb29raW5nIGF0IHRoZSBub2RlIGl0c2VsZi4gVGhlIGxvY2F0aW9ucyByZXR1cm5lZCBtdXN0
IG9iZXkKKyAgICAvLyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgLy8KKyAgICAvLyAt
IElmIHNvbWVvbmUgd2FudHMgdG8gQ1NFIGEgbG9hZCBmcm9tIHRoZSBoZWFwLCB0aGVuIGEgSGVh
cExvY2F0aW9uIG9iamVjdCBzaG91bGQgYmUKKyAgICAvLyAgIHN1ZmZpY2llbnQgdG8gZmluZCBh
IHNpbmdsZSBtYXRjaGluZyBub2RlLgorICAgIC8vCisgICAgLy8gLSBUaGUgYWJzdHJhY3QgaGVh
cCBpcyB0aGUgb25seSBhYnN0cmFjdCBoZWFwIHRoYXQgY291bGQgYmUgY2xvYmJlcmVkIHRvIGlu
dmFsaWRhdGUgYW55IHN1Y2gKKyAgICAvLyAgIENTRSBhdHRlbXB0LiBJLmUuIGlmIGNsb2JiZXJp
emUoKSByZXBvcnRzIHRoYXQgb24gZXZlcnkgcGF0aCBiZXR3ZWVuIHNvbWUgbm9kZSBhbmQgYSBu
b2RlCisgICAgLy8gICB0aGF0IGRlZmluZXMgYSBIZWFwTG9jYXRpb24gdGhhdCBpdCB3YW50ZWQs
IHRoZXJlIHdlcmUgbm8gd3JpdGVzIHRvIGFueSBhYnN0cmFjdCBoZWFwIHRoYXQKKyAgICAvLyAg
IG92ZXJsYXAgdGhlIGxvY2F0aW9uJ3MgaGVhcCwgdGhlbiB3ZSBoYXZlIGEgc291bmQgbWF0Y2gu
IEVmZmVjdGl2ZWx5LCB0aGUgc2VtYW50aWNzIG9mCisgICAgLy8gICB3cml0ZSgpIGFuZCBkZWYo
KSBhcmUgaW50ZXJ0d2luZWQgc3VjaCB0aGF0IGZvciB0aGVtIHRvIGJlIHNvdW5kIHRoZXkgbXVz
dCBhZ3JlZSBvbiB3aGF0CisgICAgLy8gICBpcyBDU0VhYmxlLgorICAgIC8vCisgICAgLy8gcmVh
ZCgpLCB3cml0ZSgpLCBhbmQgZGVmKCkgZm9yIGhlYXAgbG9jYXRpb25zIGlzIGVub3VnaCB0byBk
byBHQ1NFIG9uIGVmZmVjdGZ1bCB0aGluZ3MuIFRvCisgICAgLy8ga2VlcCB0aGluZ3Mgc2ltcGxl
LCB0aGlzIGNvZGUgd2lsbCBhbHNvIGRlZigpIHB1cmUgdGhpbmdzLiBkZWYoKSBtdXN0IGJlIG92
ZXJsb2FkZWQgdG8gYWxzbworICAgIC8vIGFjY2VwdCBQdXJlVmFsdWUuIFRoaXMgd2F5LCBhIGNs
aWVudCBvZiBjbG9iYmVyaXplKCkgY2FuIGltcGxlbWVudCBHQ1NFIGVudGlyZWx5IHVzaW5nIHRo
ZQorICAgIC8vIGluZm9ybWF0aW9uIHRoYXQgY2xvYmJlcml6ZSgpIHBhc3NlcyB0byB3cml0ZSgp
IGFuZCBkZWYoKS4gT3RoZXIgY2xpZW50cyBvZiBjbG9iYmVyaXplKCkgY2FuCisgICAgLy8ganVz
dCBpZ25vcmUgZGVmKCkgYnkgdXNpbmcgYSBOb09wQ2xvYmJlcml6ZSBmdW5jdG9yLgorCiAgICAg
aWYgKGVkZ2VzVXNlU3RydWN0dXJlKGdyYXBoLCBub2RlKSkKICAgICAgICAgcmVhZChKU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgIApAQCAtNzYsMjMgKzEwMSwyMyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQ
aGFudG9tOgorICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJp
dE9yOgogICAgIGNhc2UgQml0WG9yOgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0
UlNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAg
ICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0
ZToKLSAgICBjYXNlIEFyaXRoTXVsOgogICAgIGNhc2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJp
dGhEaXY6Ci0gICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTEwMCwyOCArMTI1LDQ3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5k
OgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNh
c2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9v
bGVhbjoKICAgICBjYXNlIElzTnVtYmVyOgogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBM
b2dpY2FsTm90OgotICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVj
a0luQm91bmRzOgotICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgog
ICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJl
cDoKICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgor
ICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRo
RGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+YXJp
dGhNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBub2RlLT5leGVjdXRhYmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTE0Miw3ICsxODYsNiBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1RpZXJVcEF0
UmV0dXJuOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgotICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBCcmVha3BvaW50Ogog
ICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0x
NTEsNiArMTk0LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAg
ICBjYXNlIEludmFsaWRhdGlvblBvaW50OgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2Zp
cmUpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CkBAIC0xOTUsMTIgKzI0MywyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc09iamVjdDoK
KyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc09i
amVjdExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgY2FzZSBUeXBlT2Y6CiAg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5j
dGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKKyAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0yMjMsMjcgKzI4
MywzMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRl
ciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0dGVyKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFj
azo6Q2FsbGVlKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6
CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywg
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxp
bmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTI3MywxMSArMzM5
LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGlzIGFwcGVh
cnMgdG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBvbmx5IHJlYWRpbmcgaW1tdXRhYmxlIGRh
dGEuCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwogICAgICAgICAg
ICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIFZhcmlhYmxlcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CkBAIC0yODUsNiArMzUzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsK
QEAgLTI5Niw2ICszNjUsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMDcsNiAr
Mzc3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAg
cmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMzAsOCArNDAx
LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVByb3BlcnRpZXMpOwotICAgICAgICAgICAg
cmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5
QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJv
cGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTM0Miw2ICs0MTMsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgTm9k
ZSogYmFzZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogaW5kZXggPSBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCk7CisgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgpOwogICAgICAgICBz
d2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgpA
QCAtMzYzLDkgKzQzNyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVu
dHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVu
dHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFZh
cmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTM3OCw2ICs0NTIs
OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgcmVhZChJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRp
ZXMpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkp
CisgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJv
cGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtMzkwLDYgKzQ2Nyw5IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQor
ICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtNDAyLDYgKzQ4Miw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICByZWFkKEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGlndW91
c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCkpCisgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CkBAIC00MjAsOSArNTAzLDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAg
ICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICAgICAgcmVh
ZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4ndCBkZWYoKSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgdGhlc2Ugb3Bl
cmF0aW9ucyB0cnVuY2F0ZSB0aGVpciBpbnB1dHMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQz
MCw3ICs1MTQsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgSW5zdGFu
Y2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICByZXR1cm47
CiAKQEAgLTQ0MiwxMiArNTI1LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgcmVhZChKU0Nl
bGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0
YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICByZWFk
KEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICBy
ZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5zdGFu
Y2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0
ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ1NywxNSArNTQyLDE4IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0
dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1
dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGls
ZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlp
Znk6CkBAIC00NzksNDIgKzU2Nyw1OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpTdHJpbmcpCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0g
QXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5h
cnJheU1vZGUoKS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZWFk
KEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgcmVhZChNaXNj
RmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlTdG9yYWdl
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgIHJl
YWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVy
Vmlld19tb2RlKTsKLSAgICAgICAgcmVhZChCdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwotICAgICAg
ICByZWFkKEFycmF5QnVmZmVyX2RhdGEpOworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLCBNaXNjRmllbGRz
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJl
cikpOworICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVy
KTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFBy
b3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmll
ck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHJl
YWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVh
cCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAg
ICAgCi0gICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJlYWQoSlNP
YmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVy
dGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKSk7Cisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3JpdGUoaGVhcCk7CiAg
ICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMo
KSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmIChu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKQogICAgICAg
ICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5p
ZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOwor
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1l
ZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKQEAg
LTUyNSw3OCArNjMwLDg3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOwotICAgICAgICAgICAg
cmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxk
cyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJW
aWV3X2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobW9kZS50eXBlZEFycmF5VHlwZSgpICE9
IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTa2lwVG9w
U2NvcGU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3JhcGguYWN0aXZh
dGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTa2lwVG9wU2NvcGVM
b2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdpc3RlcigpKSwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIHJlYWQoSlNWYXJpYWJsZU9iamVjdF9y
ZWdpc3RlcnMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVSZWdpc3RlcnNMb2Ms
IEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDMoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpLCBub2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAo
QWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3
QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgIGNhc2UgTmV3QXJyYXlCdWZm
ZXI6CisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogRW5hYmxlIENT
RSBmb3IgdGhlc2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1c2UgdGhl
cmUgaXMgbm8gd2F5CisgICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBub2RlIGFu
ZCBhIHZhbHVlIG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2VyZWQKKyAg
ICAgICAgLy8gdGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3YXkgb2Yg
ZGVmKCknaW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzM3CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3Jp
dGUoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6Ci0gICAg
Y2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKLSAgICBjYXNl
IE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoK
KyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgog
ICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RD
b3VudCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgVW50
eXBlZFVzZToKLSAgICAgICAgICAgIHJlYWQoV29ybGQpOwotICAgICAgICAgICAgd3JpdGUoV29y
bGQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgog
ICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkBAIC02MDks
NiArNzIzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICAgICAgd3JpdGUoV29ybGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cisg
ICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgQ29tcGFyZUVxOgpAQCAtNjE2LDggKzczMSwxMCBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBp
ZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHJlYWQo
V29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYyNiw2
ICs3NDMsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgU3Ry
aW5nT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAg
ICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmIGEgcHVyZSB2YWx1ZSwgdW5mb3J0dW5hdGVseS4g
SSdsbCBhdm9pZCBsb2FkLWVsaW1pbmF0aW5nIHRoZXNlIGZvcgorICAgICAgICAgICAgLy8gbm93
LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2VsbFVz
ZToKQEAgLTY1MiwxMCArNzcxLDE2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkZWYo
KSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEga2luZCBvZiBtX2luZm8s
IGxpa2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIHJlYWQo
VmFyaWFibGVzKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRlZigpIHRoaXMgYnkgc3Bl
Y2lmeWluZyB0aGUgY29kZSBvcmlnaW4gYXMgYSBraW5kIG9mIG1faW5mbywgbGlrZSB3ZQorICAg
ICAgICAvLyBoYXZlIGZvciBQdXJlVmFsdWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3OTcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKQEAgLTY4NSw3ICs4MTAsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiBjbGFzcyBOb09wQ2xvYmJl
cml6ZSB7CiBwdWJsaWM6CiAgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KLSAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgorICAg
IHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xvYmJlcml6ZSB7
CkBAIC02OTUsNyArODIxLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUPgorICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0
ID0gdHJ1ZTsgfQogICAgIAogICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1
bHQ7IH0KICAgICAKQEAgLTcwMyw2ICs4MzAsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1
bHQ7CiB9OwogCitib29sIGlzUHVyZShHcmFwaCYsIE5vZGUqKTsgLy8gUHVyZSBtZWFucyBpdCBk
b2VzIG5vIHJlYWRzIG9yIHdyaXRlcy4KK2Jvb2wgaGFzUHVyZURlZnMoR3JhcGgmLCBOb2RlKik7
IC8vIEhhdmluZyBwdXJlIGRlZnMgbWVhbnMgdGhhdCBwdXJlIENTRSBpcyBwb3NzaWJsZS4KKwog
Ym9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwogCiBjbGFzcyBBYnN0cmFjdEhlYXBPdmVy
bGFwcyB7CkBAIC03MzAsNiArODYwLDcyIEBAIHByaXZhdGU6CiBib29sIGFjY2Vzc2VzT3Zlcmxh
cChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwogYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBo
JiwgTm9kZSosIEFic3RyYWN0SGVhcCk7CiAKKy8vIFdlIHdvdWxkIGhhdmUgdXNlZCBiaW5kKCkg
Zm9yIHRoZXNlLCBidXQgYmVjYXVzZSBvZiB0aGUgb3Zlcmxhb2RpbmcgdGhhdCB3ZSBhcmUgZG9p
bmcsCisvLyBpdCdzIHF1aXRlIGEgYml0IG9mIGNsZWFyZXIgdG8ganVzdCB3cml0ZSB0aGlzIG91
dCB0aGUgdHJhZGl0aW9uYWwgd2F5LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgUmVh
ZE1ldGhvZENsb2JiZXJpemUgeworcHVibGljOgorICAgIFJlYWRNZXRob2RDbG9iYmVyaXplKFQm
IHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBtX3Zh
bHVlLnJlYWQoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJs
aWM6CisgICAgV3JpdGVNZXRob2RDbG9iYmVyaXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJh
Y3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBtX3ZhbHVlLndyaXRlKGhlYXApOworICAgIH0K
K3ByaXZhdGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBEZWZNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBEZWZNZXRob2RDbG9iYmVy
aXplKFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
bV92YWx1ZS5kZWYodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoSGVh
cExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5k
ZWYobG9jYXRpb24sIG5vZGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUJiBtX3ZhbHVlOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIEFkYXB0b3ImIGFkYXB0b3IpCit7CisgICAgUmVhZE1ldGhvZENs
b2JiZXJpemU8QWRhcHRvcj4gcmVhZChhZGFwdG9yKTsKKyAgICBXcml0ZU1ldGhvZENsb2JiZXJp
emU8QWRhcHRvcj4gd3JpdGUoYWRhcHRvcik7CisgICAgRGVmTWV0aG9kQ2xvYmJlcml6ZTxBZGFw
dG9yPiBkZWYoYWRhcHRvcik7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgcmVhZCwgd3Jp
dGUsIGRlZik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgLy8gTmVlZCB0byBwcm9jZXNzIHRoZSBncmFwaCBpbiByZXZlcnNlIERGUyBv
cmRlciwgc28gdGhhdCB3ZSBnZXQgdG8gdGhlIHVzZXMKICAgICAgICAgICAgIC8vIG9mIGEgbm9k
ZSBiZWZvcmUgd2UgZ2V0IHRvIHRoZSBub2RlIGl0c2VsZi4KICAgICAgICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5E
ZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgICAgICBtX2dyYXBoLmdldEJsb2Nr
c0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
ZXB0aEZpcnN0LnNpemUoKTsgaS0tOykKICAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRo
Rmlyc3RbaV0pOwogICAgICAgICB9IGVsc2UgewpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgZWRnZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tVW5jaGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MzksMjUgKzYzOSw3NSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRl
R2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjphZGRGb3JEZXB0aEZp
cnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwg
MTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqIGJs
b2NrKQorLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFuZCBwb3N0LW9yZGVyIHRyYXZlcnNhbHMuCitu
YW1lc3BhY2UgeworCitpbmxpbmUgdm9pZCBhZGRGb3JQcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9y
JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICBpZiAoc2Vlbi5jb250YWlucyhibG9j
aykpCisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2sp
OwotICAgIHNlZW4uYWRkKGJsb2NrKTsKKyAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwogfQog
Ci12b2lkIEdyYXBoOjpnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQpCitlbnVtIFBvc3RPcmRlclRhc2tLaW5kIHsKKyAgICBQb3N0T3JkZXJGaXJz
dFZpc2l0LAorICAgIFBvc3RPcmRlckFkZFRvUmVzdWx0Cit9OworCitzdHJ1Y3QgUG9zdE9yZGVy
VGFzayB7CisgICAgUG9zdE9yZGVyVGFzayhCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIFBv
c3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3JkZXJGaXJzdFZpc2l0KQorICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIFBvc3RPcmRlclRhc2tLaW5kIG1fa2luZDsK
K307CisKK2lubGluZSB2b2lkIGFkZEZvclBvc3RPcmRlcihWZWN0b3I8UG9zdE9yZGVyVGFzaywg
MTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKGJsb2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0
KSk7CisgICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0Owot
ICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47Ci0gICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIEJpdFZlY3RvciBzZWVuOwor
ICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKICAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29y
dChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAg
ICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNz
b3IoaSkpOworICAgIH0KK30KKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAx
Nj4gd29ya2xpc3Q7CisgICAgQml0VmVjdG9yIHNlZW47CisgICAgYWRkRm9yUG9zdE9yZGVyKHdv
cmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUG9zdE9yZGVyVGFzayB0YXNrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAg
ICAgICAgc3dpdGNoICh0YXNrLm1fa2luZCkgeworICAgICAgICBjYXNlIFBvc3RPcmRlckZpcnN0
VmlzaXQ6CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayh0YXNrLm1f
YmxvY2ssIFBvc3RPcmRlckFkZFRvUmVzdWx0KSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0YXNrLm1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIHRhc2subV9ibG9jay0+c3VjY2Vzc29y
KGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvc3RPcmRlckFkZFRvUmVz
dWx0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0YXNrLm1fYmxvY2spOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjYzLDcgKzY2Myw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgdm9pZCBpbml0aWFsaXplTm9k
ZU93bmVycygpOwogICAgIAotICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJsb2Nrc0luUHJlT3JkZXIo
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJsb2Nrc0luUG9zdE9y
ZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CiAgICAgCiAgICAgUHJvZmlsZXI6OkNv
bXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQo
KTsgfQogICAgIApAQCAtNzUxLDcgKzc1Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0
LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKLSAgICB2b2lkIGFkZEZvckRl
cHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9j
ayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnQzMiwg
Tm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBI
ZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9raW5kLCAiOiIsIG1faGVhcCk7CisgICAgCisgICAgaWYgKCFtX2Jhc2UpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIlsiLCBtX2Jhc2UpOworICAgIGlmIChtX2lu
ZGV4KQorICAgICAgICBvdXQucHJpbnQoIiwgIiwgbV9pbmRleCk7CisgICAgb3V0LnByaW50KCJd
Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgSW52YWxpZExvY2F0aW9uS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkTG9j
YXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlk
YXRpb25Qb2ludExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkYXRpb25Qb2ludExvYyIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNPYmplY3RMb2M6CisgICAg
ICAgIG91dC5wcmludCgiSXNPYmplY3RMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIElzRnVuY3Rpb25Mb2M6CisgICAgICAgIG91dC5wcmludCgiSXNGdW5jdGlvbkxv
YyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHlwZU9mTG9jOgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVPZkxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgR2V0dGVyTG9jOgorICAgICAgICBvdXQucHJpbnQoIkdldHRlckxvYyIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlNldHRlckxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
VmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5TGVuZ3RoTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIkFycmF5TGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBCdXR0ZXJmbHlMb2M6CisgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5TG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlTG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkNoZWNrSGFzSW5zdGFuY2VMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVSZWdpc3RlcnNMb2M6CisgICAgICAgIG91dC5w
cmludCgiQ2xvc3VyZVJlZ2lzdGVyc0xvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQ2xvc3VyZVZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVW
YXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2xvYmFs
VmFyaWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiR2xvYmFsVmFyaWFibGVMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluZGV4ZWRQcm9wZXJ0eUxvYzoKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkUG9ycGVydHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2M6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYyIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbnN0
YW5jZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBNeUFyZ3Vt
ZW50QnlWYWxMb2M6CisgICAgICAgIG91dC5wcmludCgiTXlBcmd1bWVudEJ5VmFsTG9jIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBNeUFyZ3VtZW50c0xlbmd0aExvYzoK
KyAgICAgICAgb3V0LnByaW50KCJNeUFyZ3VtZW50c0xlbmd0aExvYyIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0eUxvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJOYW1lZFByb3BlcnR5TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTa2lwVG9wU2NvcGVMb2M6CisgICAgICAgIG91dC5wcmludCgiU2tpcFRvcFNjb3BlTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlZEFycmF5Qnl0ZU9m
ZnNldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlZEFycmF5Qnl0ZU9mZnNldExvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdIZWFwTG9jYXRpb25faAor
I2RlZmluZSBERkdIZWFwTG9jYXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBMb2NhdGlvbktpbmQgeworICAgIEludmFs
aWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgQXJyYXlMZW5ndGhMb2MsCisgICAgQnV0dGVyZmx5
TG9jLAorICAgIENoZWNrSGFzSW5zdGFuY2VMb2MsCisgICAgQ2xvc3VyZVJlZ2lzdGVyc0xvYywK
KyAgICBDbG9zdXJlVmFyaWFibGVMb2MsCisgICAgR2V0dGVyTG9jLAorICAgIEdsb2JhbFZhcmlh
YmxlTG9jLAorICAgIEluZGV4ZWRQcm9wZXJ0eUxvYywKKyAgICBJbmRleGVkUHJvcGVydHlTdG9y
YWdlTG9jLAorICAgIEluc3RhbmNlT2ZMb2MsCisgICAgSW52YWxpZGF0aW9uUG9pbnRMb2MsCisg
ICAgSXNGdW5jdGlvbkxvYywKKyAgICBJc09iamVjdExvYywKKyAgICBNeUFyZ3VtZW50QnlWYWxM
b2MsCisgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCisgICAgTmFtZWRQcm9wZXJ0eUxvYywKKyAg
ICBTZXR0ZXJMb2MsCisgICAgU2tpcFRvcFNjb3BlTG9jLAorICAgIFR5cGVPZkxvYywKKyAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKKyAgICBWYXJpYWJsZUxvYworfTsKKworY2xhc3MgSGVh
cExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBIZWFwTG9jYXRpb24oCisgICAgICAgIExvY2F0aW9u
S2luZCBraW5kID0gSW52YWxpZExvY2F0aW9uS2luZCwKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhl
YXAgPSBBYnN0cmFjdEhlYXAoKSwKKyAgICAgICAgTm9kZSogYmFzZSA9IG51bGxwdHIsIE5vZGUq
IGluZGV4ID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2hl
YXAoaGVhcCkKKyAgICAgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChraW5kID09IEludmFsaWRMb2NhdGlvbktpbmQpID09
ICFoZWFwKTsKKyAgICAgICAgQVNTRVJUKCEhbV9oZWFwIHx8ICFtX2Jhc2UpOworICAgICAgICBB
U1NFUlQobV9iYXNlIHx8ICFtX2luZGV4KTsKKyAgICB9CisgICAgCisgICAgSGVhcExvY2F0aW9u
KExvY2F0aW9uS2luZCBraW5kLCBBYnN0cmFjdEhlYXAgaGVhcCwgRWRnZSBiYXNlLCBFZGdlIGlu
ZGV4ID0gRWRnZSgpKQorICAgICAgICA6IEhlYXBMb2NhdGlvbihraW5kLCBoZWFwLCBiYXNlLm5v
ZGUoKSwgaW5kZXgubm9kZSgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSGVhcExvY2F0aW9u
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxp
ZExvY2F0aW9uS2luZCkKKyAgICAgICAgLCBtX2hlYXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpCisgICAgICAgICwgbV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9pbmRleChudWxscHRy
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhbV9oZWFwOyB9CisgICAgCisgICAgTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICBBYnN0cmFjdEhlYXAgaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cDsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBOb2Rl
KiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2hlYXAuaGFzaCgp
ICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2luZGV4KSArIG1fa2luZDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAg
ICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90
aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
IH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2hlYXAuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICBMb2NhdGlvbktpbmQgbV9raW5kOworICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
CisgICAgTm9kZSogbV9iYXNlOworICAgIE5vZGUqIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgSGVh
cExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSGVhcExvY2F0
aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBIZWFwTG9jYXRpb24mIGEsIGNvbnN0IEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkxvY2F0
aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3Rl
bXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAg
ICB0eXBlZGVmIEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OkhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlND
OjpERkc6OkhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJ
c1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxIZWFwTG9jYXRpb24sIE5vZGUq
PiBJbXB1cmVNYXA7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyBGb3IgbWF4aW11
bSBwcm9maXQsIHdlIHdhbGsgYmxvY2tzIGluIERGUyBvcmRlciB0byBlbnN1cmUgdGhhdCB3ZSBn
ZW5lcmFsbHkKICAgICAgICAgLy8gdGVuZCB0byBob2lzdCBkb21pbmF0b3JzIGJlZm9yZSBkb21p
bmF0ZWVzLgogICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOwogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKICAgICAgICAgZm9yICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzczLDEwICszNzMsMTEgQEAgc3RydWN0IE5vZGUgewogICAg
IHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgfQotCi0gICAg
dm9pZCBjb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKCkKKyAgICAKKyAgICB2b2lkIHJlcGxhY2VX
aXRoKE5vZGUqIG90aGVyKQogICAgIHsKLSAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgIGNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgcmVwbGFjZW1lbnQg
PSBvdGhlcjsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0lkZW50aXR5KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MDk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MCwxNCArMjUwLDE0IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAgICAgCiAgICAgcGVyZm9ybVN0cmVuZ3RoUmVk
dWN0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybUNTRShkZmcpOworICAgIHBlcmZvcm1MQ1NFKGRmZyk7
CiAgICAgcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7CiAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgIHBlcmZvcm1Db25z
dGFudEZvbGRpbmcoZGZnKTsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBjaGFuZ2Vk
IHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwotICAgIGNoYW5nZWQgfD0gcGVyZm9y
bUNTRShkZmcpOworICAgIGNoYW5nZWQgfD0gcGVyZm9ybUxDU0UoZGZnKTsKICAgICAKICAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKQEAgLTMxNiw3
ICszMTYsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
ICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29udmVy
c2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmcoZGZnKTsKLSAgICAgICAgcGVy
Zm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR0NTRShkZmcpOwogICAgICAgICBwZXJmb3Jt
TGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKQEAgLTMyOSw3ICszMjksNyBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MSUNNKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1QaGFudG9tUmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3Jt
SW50ZWdlckNoZWNrQ29tYmluaW5nKGRmZyk7Ci0gICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAg
ICAgICAgcGVyZm9ybUdDU0UoZGZnKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UncmUgbm90IGFsbG93ZWQgdG8gZG8gYW55IGZ1cnRoZXIgY29kZSBtb3Rpb24gYmVjYXVz
ZSBvdXIgcmVhc29uaW5nCiAgICAgICAgIC8vIGFib3V0IGNvZGUgbW90aW9uIGFzc3VtZXMgdGhh
dCBpdCdzIE9LIHRvIGluc2VydCBHQyBwb2ludHMgaW4gcmFuZG9tIHBsYWNlcy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHVyZVZhbHVlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQdXJlVmFsdWU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoR3JhcGg6Om9wTmFtZShvcCgpKSk7
CisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAg
aWYgKGNoaWxkcmVuKCkuY2hpbGQoaSkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGNo
aWxkcmVuKCkuY2hpbGQoaSkpOworICAgIH0KKyAgICBpZiAobV9pbmZvKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG1faW5mbyk7CisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHVyZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUHVyZVZhbHVlX2gKKyNkZWZpbmUgREZHUHVyZVZhbHVlX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFB1cmVWYWx1ZSB7CitwdWJsaWM6CisgICAg
UHVyZVZhbHVlKCkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkKKyAgICAgICAgLCBtX2lu
Zm8oMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4sIHVpbnRwdHJfdCBpbmZvKQorICAgICAgICA6IG1f
b3Aob3ApCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICAgICAgLCBtX2luZm8o
aW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlSGFz
VmFyQXJncykpOworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCBjb25zdCB2b2lkKiBwdHIpCisgICAgICAgIDogUHVy
ZVZhbHVlKG9wLCBjaGlsZHJlbiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocHRyKSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlVHlwZSBvcCwgY29uc3QgQWRqYWNlbmN5
TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogUHVyZVZhbHVlKG9wLCBjaGlsZHJlbiwgc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigwKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShO
b2RlKiBub2RlLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3Ao
KSwgbm9kZS0+Y2hpbGRyZW4sIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFs
dWUoTm9kZSogbm9kZSwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1cmVWYWx1ZShub2Rl
LT5vcCgpLCBub2RlLT5jaGlsZHJlbiwgcHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVy
ZVZhbHVlKE5vZGUqIG5vZGUpCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUt
PmNoaWxkcmVuKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29wKExhc3ROb2RlVHlwZSkKKyAgICAg
ICAgLCBtX2luZm8oMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gbV9vcCA9PSBMYXN0Tm9kZVR5cGUgJiYgIW1faW5mbzsgfQorICAgIAor
ICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAgIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAgIHVp
bnRwdHJfdCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFz
aChzdGF0aWNfY2FzdDxpbnQ+KG1fb3ApKSArIG1fY2hpbGRyZW4uaGFzaCgpICsgbV9pbmZvOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVyZVZhbHVlJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wID09IG90aGVyLm1fb3AKKyAgICAgICAg
ICAgICYmIG1fY2hpbGRyZW4gPT0gb3RoZXIubV9jaGlsZHJlbgorICAgICAgICAgICAgJiYgbV9p
bmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcCA9PSBMYXN0Tm9k
ZVR5cGUgJiYgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1fb3A7CisgICAgQWRq
YWNlbmN5TGlzdCBtX2NoaWxkcmVuOworICAgIHVpbnRwdHJfdCBtX2luZm87Cit9OworCitzdHJ1
Y3QgUHVyZVZhbHVlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHVyZVZh
bHVlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQdXJlVmFsdWUmIGEsIGNvbnN0IFB1cmVWYWx1ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHR5cGVkZWYgSlND
OjpERkc6OlB1cmVWYWx1ZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6
UHVyZVZhbHVlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHVyZVZhbHVlPiB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgTm9kZSo+IFB1cmVNYXA7Cit0eXBlZGVmIEhhc2hN
YXA8UHVyZVZhbHVlLCBWZWN0b3I8Tm9kZSo+PiBQdXJlTXVsdGlNYXA7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUHVyZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTcwOTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVh
cigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwotICAgICAgICAg
ICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7
CisgICAgICAgICAgICBibG9jay0+c3NhID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrOjpT
U0FEYXRhPihibG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9h
cmd1bWVudHMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzA5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAg
ICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdl
dEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBtX2dyYXBoLmdl
dEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAKICAgICAgICAgaW50IG1heE51bWJlck9m
QXJndW1lbnRzID0gLTE7CiAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGRlcHRo
Rmlyc3Quc2l6ZSgpOyBibG9ja0luZGV4LS07ICkgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDk3NSkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTQtMDctMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBb
ZnRsb3B0XSBERkcgc2hvdWxkIGJlIGFibGUgdG8gZG8gR0NTRSBpbiBTU0EgYW5kIHRoaXMgc2hv
dWxkIGJlIHVuaWZpZWQgd2l0aCB0aGUgQ1NFIGluIENQUywgYW5kIGJvdGggb2YgdGhlc2UgdGhp
bmdzIHNob3VsZCB1c2UgYWJzdHJhY3QgaGVhcHMgZm9yIHJlYXNvbmluZyBhYm91dCBlZmZlY3Rz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEV4cG9zZSBhIG5ldyBIYXNoTWFwIG1ldGhvZCwgY2FsbGVkIHJlbW92ZUlmKCksIHdoaWNoIGFs
bG93cyB5b3UgdG8gZG8gYW4gZWZmaWNpZW50CisgICAgICAgIHBhc3Mgb3ZlciB0aGUgbWFwIGFu
ZCByZW1vdmUgYSBidW5jaCBvZiB0aGluZ3MgYXQgb25jZS4gVGhpcyBpcyB1c2VkIGJ5IERGRyBH
Q1NFLgorCisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6WD46OnJlbW92
ZUlmKToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OnJlbW92ZUlmKToKKwogMjAxNC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVy
ZSBzZXRzIGxhcmdlciB0aGFuIDEKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHJldmlzaW9uIDE3MDk3NSkKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKICAgICBib29s
IHJlbW92ZShpdGVyYXRvcik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIHJlbW92ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAg
IE1hcHBlZFR5cGUgdGFrZShjb25zdCBLZXlUeXBlJik7IC8vIGVmZmljaWVudCBjb21iaW5hdGlv
biBvZiBnZXQgd2l0aCByZW1vdmUKQEAgLTM1NCw2ICszNTYsMTMgQEAgaW5saW5lIGJvb2wgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92
ZUlmKEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgogaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVt
b3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTcwOTc1KQorKysgU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsOCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJlbW92
ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOwogICAgICAgICB2b2lkIHJl
bW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgICAgICB2b2lkIHJlbW92ZUlmKEZ1bmN0
b3ImKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1w
dHlCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNIYXNoVHJhaXRzRW1w
dHlWYWx1ZTxLZXlUcmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOyB9CkBAIC0xMDMx
LDYgKzEwMzMsMjggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVt
b3ZlSWYoRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fdGFibGVTaXplOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoaXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldChtX3RhYmxlW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFmdW5jdG9yKG1fdGFibGVbaV0pKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWxldGVCdWNrZXQobV90YWJs
ZVtpXSk7CisgICAgICAgICAgICArK21fZGVsZXRlZENvdW50OworICAgICAgICAgICAgLS1tX2tl
eUNvdW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkU2hyaW5rKCkp
CisgICAgICAgICAgICBzaHJpbmsoKTsKKyAgICAgICAgCisgICAgICAgIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBhdXRvIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
Pjo6YWxsb2NhdGVUYWJsZShpbnQgc2l6ZSkgLT4gVmFsdWVUeXBlKgogICAgIHsKICAgICAgICAg
Ly8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3Bl
Y2lhbGl6YXRpb25zIGhlcmUsIGJ1dApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTc1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQt
MDctMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0
XSBERkcgc2hvdWxkIGJlIGFibGUgdG8gZG8gR0NTRSBpbiBTU0EgYW5kIHRoaXMgc2hvdWxkIGJl
IHVuaWZpZWQgd2l0aCB0aGUgQ1NFIGluIENQUywgYW5kIGJvdGggb2YgdGhlc2UgdGhpbmdzIHNo
b3VsZCB1c2UgYWJzdHJhY3QgaGVhcHMgZm9yIHJlYXNvbmluZyBhYm91dCBlZmZlY3RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3Mv
Z2NzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1wb2x5
LWdldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1wb2x5
LWdldC1sZXNzLW9idmlvdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2djc2UuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2Nz
ZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2djc2UuanM6IEFkZGVkLgorCiAyMDE0LTA3LTA0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gSW5mZXIgaW1tdXRhYmxl
IG9iamVjdCBwcm9wZXJ0aWVzCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nY3Nl
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1n
ZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVz
cy9nY3NlLXBvbHktZ2V0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQt
bGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9n
Y3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3Nl
LXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dj
c2UtcG9seS1nZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dj
c2UtcG9seS1nZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2NzZS1wb2x5LWdldC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nY3NlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3Nl
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3NlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1n
ZXQtbGVzcy1vYnZpb3VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNz
LW9idmlvdXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorKGZ1bmN0aW9uKG8s
IHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9y
ICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBhID0gby5mOworICAgICAg
ICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBvLmY7CisgICAgICAgIHZhciBkID0gby5m
OworICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgdmFyIGUgPSBvLmY7CisgICAgICAgICAg
ICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBnID0gby5mOworICAgICAgICAgICAgdmFy
IGggPSBvLmY7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgICAgIHZhciBqID0g
by5mOworICAgICAgICAgICAgICAgIHZhciBrID0gby5mOworICAgICAgICAgICAgICAgIHZhciBs
ID0gby5mOworICAgICAgICAgICAgICAgIHZhciBtID0gby5mOworICAgICAgICAgICAgICAgIGlm
IChtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gby5mOworICAgICAgICAgICAgICAg
ICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBvLmY7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB0ID0gby5mOworICAgICAgICAgICAgICAgICAgICBpZiAodCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSByOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAg
byA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLyAy
KSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKK30pKHtmOjQyLCBnOjB9LCB7ZzowLCBmOjQzfSk7CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9n
Y3NlLXBvbHktZ2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKyhmdW5jdGlv
bigpeworICAgIHZhciBvID0ge2Y6NDIsIGc6MH07CisgICAgdmFyIHAgPSB7ZzowLCBmOjQzfTsK
KyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIg
aSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBhID0gby5mOworICAgICAgICB2YXIg
YiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBvLmY7CisgICAgICAgIHZhciBkID0gby5mOworICAg
ICAgICBpZiAoZCkgeworICAgICAgICAgICAgdmFyIGUgPSBvLmY7CisgICAgICAgICAgICB2YXIg
ZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBnID0gby5mOworICAgICAgICAgICAgdmFyIGggPSBv
LmY7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgICAgIHZhciBqID0gby5mOwor
ICAgICAgICAgICAgICAgIHZhciBrID0gby5mOworICAgICAgICAgICAgICAgIHZhciBsID0gby5m
OworICAgICAgICAgICAgICAgIHZhciBtID0gby5mOworICAgICAgICAgICAgICAgIGlmIChtKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gby5mOworICAgICAgICAgICAgICAgICAgICB2
YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBvLmY7CisgICAgICAgICAg
ICAgICAgICAgIHZhciB0ID0gby5mOworICAgICAgICAgICAgICAgICAgICBpZiAodCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSByOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7
CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLyAyKSAqIG8u
ZiArIChuIC8gMikgKiBwLmYpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9nY3NlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2djc2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9nY3NlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKyhmdW5jdGlv
bigpeworICAgIHZhciBvID0ge2Y6NDJ9OworICAgIHZhciBwID0ge2Y6NDN9OworICAgIHZhciBy
ZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMCA7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgdmFyIGEgPSBvLmY7CisgICAgICAgIHZhciBiID0gby5mOwor
ICAgICAgICB2YXIgYyA9IG8uZjsKKyAgICAgICAgdmFyIGQgPSBvLmY7CisgICAgICAgIGlmIChk
KSB7CisgICAgICAgICAgICB2YXIgZSA9IG8uZjsKKyAgICAgICAgICAgIHZhciBmID0gby5mOwor
ICAgICAgICAgICAgdmFyIGcgPSBvLmY7CisgICAgICAgICAgICB2YXIgaCA9IG8uZjsKKyAgICAg
ICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICAgICAgdmFyIGogPSBvLmY7CisgICAgICAgICAg
ICAgICAgdmFyIGsgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGwgPSBvLmY7CisgICAgICAg
ICAgICAgICAgdmFyIG0gPSBvLmY7CisgICAgICAgICAgICAgICAgaWYgKG0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHEgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gby5m
OworICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHQgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIGlmICh0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAg
cCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAobiAvIDIpICogby5mICsgKG4gLyAy
KSAqIHAuZikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fSkoKTsK
</data>
<flag name="review"
          id="259312"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234835</attachid>
            <date>2014-07-13 17:00:58 -0700</date>
            <delta_ts>2014-07-14 23:48:03 -0700</delta_ts>
            <desc>almost ready to land</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>138565</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNC0wNy0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBzaG91bGQgYmUgYWJsZSB0byBkbyBHQ1NFIGluIFNTQSBhbmQgdGhpcyBz
aG91bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBDU0UgaW4gQ1BTLCBhbmQgYm90aCBvZiB0aGVzZSB0
aGluZ3Mgc2hvdWxkIHVzZSBhYnN0cmFjdCBoZWFwcyBmb3IgcmVhc29uaW5nIGFib3V0IGVmZmVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY3
NworCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisgICAgICAgIAorICAgICAgICBU
aGlzIHJlbW92ZXMgdGhlIG9sZCBDU0UgcGhhc2UsIHdoaWNoIHdhcyBiYXNlZCBvbiBtYW51YWxs
eSB3cml0dGVuIGJhY2t3YXJkLXNlYXJjaCBydWxlcworICAgICAgICBmb3IgYWxsIG9mIHRoZSBk
aWZmZXJlbnQga2luZHMgb2YgdGhpbmdzIHdlIGNhcmVkIGFib3V0LCBhbmQgYWRkcyBhIG5ldyBs
b2NhbC9nbG9iYWwgQ1NFCisgICAgICAgIChsb2NhbCBmb3IgQ1BTIGFuZCBnbG9iYWwgZm9yIFNT
QSkgdGhhdCBsZWF2ZXMgdGhlIG5vZGUgc2VtYW50aWNzIGFsbW9zdCBlbnRpcmVseSB1cCB0bwor
ICAgICAgICBjbG9iYmVyaXplKCkuIFRodXMsIHRoZSBDU0UgcGhhc2UgaXRzZWxmIGp1c3Qgd29y
cmllcyBhYm91dCB0aGUgYWxnb3JpdGhtcyBhbmQgZGF0YQorICAgICAgICBzdHJ1Y3R1cmVzIHVz
ZWQgZm9yIHN0b3Jpbmcgc2V0cyBvZiBhdmFpbGFibGUgdmFsdWVzLiBUaGlzIHJlc3VsdHMgaW4g
bW9yZSB0aGFuIGEgMngKKyAgICAgICAgcmVkdWN0aW9uIGluIGNvZGUgaW4gQ1NFUGhhc2UuY3Bw
IHdoaWxlIGdyZWF0bHkgaW5jcmVhc2luZyB0aGUgcGhhc2UncyBwb3dlciAoc2luY2UgaXQgbm93
CisgICAgICAgIGRvZXMgZ2xvYmFsIENTRSkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGFj
Y29tcGxpc2hlZCBieSBhZGRpbmcgdGhlIGNvbmNlcHQgb2YgImRlZiIgdG8gY2xvYmJlcml6ZSgp
LiBJZiBjbG9iYmVyaXplKCkgY2FsbHMKKyAgICAgICAgZGVmKCksIGl0IG1lYW5zIHRoYXQgdGhl
IG5vZGUgYmVpbmcgYW5hbHl6ZWQgbWFrZXMgYXZhaWxhYmxlIHNvbWUgdmFsdWUgaW4gc29tZSBE
Rkcgbm9kZSwKKyAgICAgICAgYW5kIHRoYXQgZnV0dXJlIGF0dGVtcHRzIHRvIGNvbXB1dGUgdGhh
dCB2YWx1ZSBjYW4gc2ltcGx5IHVzZSB0aGF0IG5vZGUuIFRoZXJlIGFyZSB0d28KKyAgICAgICAg
a2luZHMgb2YgdGhpbmdzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBkZWYoKToKKyAgICAgICAgCisg
ICAgICAgIFB1cmVWYWx1ZS4gVGhpcyBjYXB0dXJlcyBldmVyeXRoaW5nIG5lZWRlZCB0byBkZXRl
cm1pbmUgd2hldGhlciB0d28gcHVyZSBub2RlcyAtIG5vZGVzIHRoYXQKKyAgICAgICAgICAgIG5l
aXRoZXIgcmVhZCBub3Igd3JpdGUsIGFuZCBwcm9kdWNlIGEgdmFsdWUgdGhhdCBpcyBhIENTRSBj
YW5kaWRhdGUgLSBhcmUgaWRlbnRpY2FsLiBJdAorICAgICAgICAgICAgY2FycmllcyB0aGUgTm9k
ZVR5cGUsIGFuIEFkamFjZW5jeUxpc3QsIGFuZCBvbmUgd29yZCBvZiBtZXRhLWRhdGEuIFRoZSBt
ZXRhLWRhdGEgaXMKKyAgICAgICAgICAgIHVzdWFsbHkgdXNlZCBmb3IgdGhpbmdzIGxpa2UgdGhl
IGFyaXRobWV0aWMgbW9kZSBvciBjb25zdGFudCBwb2ludGVyLiBQYXNzaW5nIGEKKyAgICAgICAg
ICAgIFB1cmVWYWx1ZSB0byBkZWYoKSBtZWFucyB0aGF0IHRoZSBub2RlIHByb2R1Y2VzIGEgdmFs
dWUgdGhhdCBpcyB2YWxpZCBhbnl3aGVyZSB0aGF0IHRoZQorICAgICAgICAgICAgbm9kZSBkb21p
bmF0ZXMuCisgICAgICAgIAorICAgICAgICBIZWFwTG9jYXRpb24uIFRoaXMgZGVzY3JpYmVzIGEg
bG9jYXRpb24gaW4gdGhlIGhlYXAgdGhhdCBjb3VsZCBiZSB3cml0dGVuIHRvIG9yIHJlYWQgZnJv
bS4KKyAgICAgICAgICAgIEJvdGggc3RvcmVzIGFuZCBsb2FkcyBjYW4gZGVmKCkgYSBIZWFwTG9j
YXRpb24uIEhlYXBMb2NhdGlvbiBjYXJyaWVzIGFyb3VuZCBhbiBhYnN0cmFjdAorICAgICAgICAg
ICAgaGVhcCB0aGF0IGJvdGggc2VydmVzIGFzIHBhcnQgb2YgdGhlICJuYW1lIiBvZiB0aGUgaGVh
cCBsb2NhdGlvbiAodG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgIG90aGVyIGZpZWxkcyBv
ZiBIZWFwTG9jYXRpb24pIGFuZCBhbHNvIHRlbGxzIHVzIHdoYXQgd3JpdGUoKSdzIHRvIHdhdGNo
IGZvci4gSWYgc29tZW9uZQorICAgICAgICAgICAgd3JpdGUoKSdzIHRvIGFuIGFic3RyYWN0IGhl
YXAgdGhhdCBvdmVybGFwcyB0aGUgaGVhcCBhc3NvY2lhdGVkIHdpdGggdGhlIEhlYXBMb2NhdGlv
biwKKyAgICAgICAgICAgIHRoZW4gaXQgbWVhbnMgdGhhdCB0aGUgdmFsdWVzIGZvciB0aGF0IGxv
Y2F0aW9uIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
cHByb2FjaCBpcyBzdWZpY2llbnRseSBjbGV2ZXIgdGhhdCB0aGUgQ1NFUGhhc2UgaXRzZWxmIGNh
biBmb2N1cyBvbiB0aGUgbWVjaGFuaXNtIG9mCisgICAgICAgIHRyYWNraW5nIHRoZSBQdXJlVmFs
dWU9Pm5vZGUgYW5kIEhlYXBMb2NhdGlvbj0+bm9kZSBtYXBzLCB3aXRob3V0IGhhdmluZyB0byB3
b3JyeSBhYm91dAorICAgICAgICBpbnRlcnByZXRpbmcgdGhlIHNlbWFudGljcyBvZiBkaWZmZXJl
bnQgREZHIG5vZGUgdHlwZXMgLSB0aGF0IGlzIG5vdyBhbG1vc3QgZW50aXJlbHkgaW4KKyAgICAg
ICAgY2xvYmJlcml6ZSgpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIHNsaWdodCBPY3Rh
bmUgYW5kIFN1blNwaWRlciBzcGVlZC11cC4gSW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3Ms
IGl0J3Mgbm90IGEKKyAgICAgICAgYmlnIHdpbiBiZWNhdXNlIExMVk0gd2FzIGFscmVhZHkgZ2l2
aW5nIHVzIG1vc3Qgb2Ygd2hhdCB3ZSBuZWVkZWQgaW4gaXRzIEdWTi4gQWxzbywgdGhlCisgICAg
ICAgIFN1blNwaWRlciBzcGVlZC11cCBpc24ndCBmcm9tIEdDU0UgYXMgbXVjaCBhcyBpdCdzIGEg
Y2xlYW4tdXAgb2YgbG9jYWwgQ1NFLiBTdGlsbCwgdGhpcyBhbGwKKyAgICAgICAgYSBnb29kIHRo
aW5nIC0gaXQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIExMVk0gSVIgd2UgZ2VuZXJhdGUsIGl0IHJl
bW92ZXMgdGhlIG9sZCBDU0UncyBoZWFwCisgICAgICAgIG1vZGVsaW5nICh3aGljaCB3YXMgYSBj
b25zdGFudCBzb3VyY2Ugb2YgYnVncyksIGFuZCBpdCBkb2VzIGltcHJvdmUgdGhlIGNvZGUgd2Ug
Z2VuZXJhdGUgYQorICAgICAgICAqdGlueSogYml0LiBBbHNvLCBhbnkgZnV0dXJlIG9wdGltaXph
dGlvbnMgdGhhdCBkZXBlbmQgb24gR0NTRSB3aWxsIG5vdyBiZSBlYXNpZXIgdG8KKyAgICAgICAg
aW1wbGVtZW50LgorICAgICAgICAKKyAgICAgICAgRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0
aGlzIHBhdGNoIEkgYWxzbyByYXRpb25hbGl6ZWQgc29tZSBvdGhlciBzdHVmZiwgbGlrZSBHcmFw
aCdzCisgICAgICAgIG9yZGVyZWQgdHJhdmVyc2FscyAtIHdlIG5vdyBoYXZlIHByZW9yZGVyIGFu
ZCBwb3N0b3JkZXIgcmF0aGVyIHRoYW4ganVzdCAiZGVwdGggZmlyc3QiLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAgICAgICAq
IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlz
dDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6b3BlcmF0b3I9PSk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1MQ1NFKToKKyAgICAgICAgKEpTQzo6
REZHOjpwZXJmb3JtR0NTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OkNTRVBoYXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZW5kSW5kZXhGb3JQdXJlQ1NFKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHVyZUNTRSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNvbnN0YW50Q1NFKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Y29uc3RhbnRTdG9yYWdlUG9pbnRlckNTRSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldENhbGxlZUxvYWRFbGltaW5hdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEFycmF5TGVuZ3RoRWxp
bWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnbG9iYWxW
YXJMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNl
OjpzY29wZWRWYXJMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjp2YXJJbmplY3Rpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeVZhbExvYWRFbGltaW5hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrRnVuY3Rpb25FbGltaW5h
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrRXhlY3V0
YWJsZUVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeU9mZnNldExvYWRFbGltaW5h
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEdldHRlclNl
dHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tBcnJheUVsaW1pbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjppbnZhbGlkYXRpb25Qb2ludEVs
aW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2V0UmVw
bGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbGltaW5h
dGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNT
RSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1CbG9ja0NT
RSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJTZXQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmFkZFJlYWRzKToKKyAgICAgICAgKEpTQzo6REZHOjph
ZGRXcml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkZFJlYWRzQW5kV3JpdGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpyZWFkc092ZXJsYXApOgorICAgICAgICAoSlNDOjpERkc6OndyaXRlc092
ZXJsYXApOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjppc1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6Omhhc1B1cmVEZWZzKToKKyAgICAgICAg
KEpTQzo6REZHOjpkb2VzV3JpdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjphY2Nlc3Nlc092ZXJs
YXApOgorICAgICAgICAoSlNDOjpERkc6OndyaXRlc092ZXJsYXApOgorICAgICAgICAqIGRmZy9E
RkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6UmVh
ZE1ldGhvZENsb2JiZXJpemU6OlJlYWRNZXRob2RDbG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpSZWFkTWV0aG9kQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRG
Rzo6V3JpdGVNZXRob2RDbG9iYmVyaXplOjpXcml0ZU1ldGhvZENsb2JiZXJpemUpOgorICAgICAg
ICAoSlNDOjpERkc6OldyaXRlTWV0aG9kQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAg
IChKU0M6OkRGRzo6RGVmTWV0aG9kQ2xvYmJlcml6ZTo6RGVmTWV0aG9kQ2xvYmJlcml6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVmTWV0aG9kQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAg
ICAgICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Zml4dXBCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0QmxvY2tz
SW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldEJsb2Nrc0luUG9zdE9y
ZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRCbG9ja3NJbkRlcHRoRmlyc3RP
cmRlcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZn
L0RGR0hlYXBMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdIZWFwTG9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0
aW9uOjpIZWFwTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6b3Bl
cmF0b3IhKToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aGVhcCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVh
cExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmluZGV4
KToKKyAgICAgICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb246Omhhc2gpOgorICAgICAgICAoSlND
OjpERkc6OkhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6SGVh
cExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
SGVhcExvY2F0aW9uSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9u
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkxJQ01QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpjb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisgICAgICAgICogZGZnL0RGR1B1cmVWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OlB1cmVWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1B1cmVWYWx1ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6OlB1cmVWYWx1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6UHVyZVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OlB1
cmVWYWx1ZTo6b3ApOgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6
UHVyZVZhbHVlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6aXNIYXNoVGFibGVEZWxldGVkVmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZUhhc2g6Omhhc2gpOgorICAgICAgICAo
SlNDOjpERkc6OlB1cmVWYWx1ZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorCiAyMDE0LTA3LTEzICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0IHVuaW50
ZW5kZWQgY2hhbmdlIGluIHIxNzEwNTEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAKICAgICBkZmcv
REZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNwcAorICAgIGRmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKQEAgLTE4Niw2ICsxODcsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFuLmNwcAogICAgIGRmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAorICAgIGRmZy9ERkdQdXJlVmFsdWUuY3BwCiAgICAgZGZnL0RGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAogICAgIGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5jcHAiIC8+CkBAIC00MzcsNiArNDM4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+
CkBAIC05NzUsNiArOTc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdH
UFJJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGguaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNhZmVwb2ludC5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCIgLz4KQEAgLTEwMTUsNiArMTAxOCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIgLz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMCBAQAogCQkwRkIxNEUxRjE4MTI0QUNFMDA5QjZCNEQg
LyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBw
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0
RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkIxNEUyMzE4MTMwOTU1
MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjIxODEzMDk1NTAwOUI2QjRE
IC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyog
REZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3Bw
ICovOyB9OworCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RDE5
NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVT
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CiAJCTBGQjU0
Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzYxNEY1OUFEMTAw
MkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CkBAIC0yNjA5LDYgKzI2MTMsMTAgQEAKIAkJMEZCMTRF
MUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
SW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAv
KiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdJ
bmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSGVhcExvY2F0aW9uLmNwcDsgcGF0aCA9
IGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRoID0gZGZnL0RGR0hl
YXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNzY1RTE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHUHVyZVZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJB
IC8qIERGR1B1cmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQ
dXJlVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyog
REZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5p
ZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9jYXRvci5oOyBwYXRoID0gZGZn
L0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTExNCw2ICs1
MTIyLDggQEAKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCAqLywK
IAkJCQkwRjJGQ0NGMjE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwICov
LAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICov
LAorCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICov
LAorCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCAqLywK
IAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmgg
Ki8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBl
cklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTE5MCw2ICs1MjAwLDggQEAKIAkJCQkwRkJFMEY2
RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyog
REZHUHVyZVZhbHVlLmNwcCAqLywKKwkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZH
UHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lz
dGVyQmFuay5oICovLAogCQkJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNjY2RUNCMTgzNkIzN0UwMEQw
MTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLywKQEAgLTYxMTcs
NiArNjEyOSw3IEBACiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDRE
OTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJ
RC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjU0LDYgKzY2NjcsNyBAQAogCQkJCTg2
QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTc4RjExM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RW
aXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyog
REZHSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5
NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA5RjJG
MDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywK
QEAgLTc3NDAsMTEgKzc3NTQsMTMgQEAKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkx
MDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMkIxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8q
IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBG
NzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIyOEJGMzAwQ0Q4OTEw
IC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkI1MTY2NkVF
RDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyNSArNDIsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQo
bWFjcm8pIFwKICAgICBtYWNybyhJbnZhbGlkQWJzdHJhY3RIZWFwKSBcCiAgICAgbWFjcm8oV29y
bGQpIFwKLSAgICBtYWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCi0gICAgbWFjcm8oQXJn
dW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBcCiAgICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykg
XAotICAgIG1hY3JvKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCi0gICAgbWFjcm8oQXJyYXlC
dWZmZXJfZGF0YSkgXAotICAgIG1hY3JvKEJ1dHRlcmZseV9hcnJheUJ1ZmZlcikgXAogICAgIG1h
Y3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9y
TGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXAogICAgIG1hY3JvKEdl
dHRlclNldHRlcl9zZXR0ZXIpIFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgp
IFwKLSAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19tb2RlKSBcCi0gICAgbWFjcm8oSlNBcnJh
eUJ1ZmZlclZpZXdfdmVjdG9yKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlEKSBcCiAg
ICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAotICAgIG1hY3JvKEpT
RnVuY3Rpb25fZXhlY3V0YWJsZSkgXAotICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGVDaGFpbikg
XAogICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3JvKEpTVmFyaWFibGVP
YmplY3RfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVzKSBcCkBAIC03Niw3
ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBYnNv
bHV0ZSkgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwgdG8gaW5kaWNhdGUgdGhh
dCB0aGlzIG1heSBmaXJlIHdhdGNocG9pbnRzLiBVc3VhbGx5IHRoaXMgaXMgbmV2ZXIgZGlyZWN0
bHkgd3JpdHRlbiBidXQgaW5zdGVhZCB3ZSB0ZXN0IHRvIHNlZSBpZiBhIG5vZGUgY2xvYmJlcnMg
dGhpczsgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgeW91IGhhdmUgdG8gd3JpdGUgd29ybGQgdG8g
Y2xvYmJlciBpdC4gKi9cCiAgICAgbWFjcm8oV2F0Y2hwb2ludF9maXJlKSBcCi0gICAgLyogVXNl
IHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUgd29ybGQg
Z290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLiAqL1wKKyAg
ICAvKiBVc2UgdGhlc2UgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0
aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3Jr
LiAqL1wKICAgICBtYWNybyhNaXNjRmllbGRzKSBcCiAgICAgLyogVXNlIHRoaXMgZm9yIHdyaXRl
cyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5vZGUgaXMgaW52YWxp
ZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5nIHRoYXQgaGFzIGFu
eSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKICAgICBtYWNybyhTaWRlU3RhdGUpCkBAIC0yMDcs
NyArMTk3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpCisg
ICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwogICAgICAg
ICBBU1NFUlQob3RoZXIua2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwpAQCAtMjIwLDcg
KzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHBheWxvYWQoKS5pc0Rpc2pvaW50KG90
aGVyLnBheWxvYWQoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgQWJz
dHJhY3RIZWFwJiBvdGhlcikKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IEFic3RyYWN0SGVhcCYg
b3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIWlzRGlzam9pbnQob3RoZXIpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1MSwzNiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IG51bUNoaWxkcmVuOwogICAgIH0K
ICAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IDA7CisgICAgICAgIGlmICghY2hpbGQxKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAKKyAgICAgICAgcmVzdWx0ICs9IGNoaWxkMSgpLmhhc2goKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghY2hpbGQyKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgcmVzdWx0ICo9IDM7CisgICAgICAgIHJlc3VsdCArPSBjaGls
ZDIoKS5oYXNoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNoaWxkMygpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAg
ICByZXN1bHQgKz0gY2hpbGQzKCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFkamFjZW5jeUxp
c3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpID09IG90aGVy
LmNoaWxkMSgpCisgICAgICAgICAgICAmJiBjaGlsZDIoKSA9PSBvdGhlci5jaGlsZDIoKQorICAg
ICAgICAgICAgJiYgY2hpbGQzKCkgPT0gb3RoZXIuY2hpbGQzKCk7CisgICAgfQorICAgIAogcHJp
dmF0ZToKICAgICBFZGdlIG1fd29yZHNbU2l6ZV07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MTA1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEs
OCArMTcxLDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAg
ICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAgICAgICAgflNTQURhdGEoKTsKICAgICB9Owot
ICAgIE93blB0cjxTU0FEYXRhPiBzc2E7Ci0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBRGF0YT4g
c3NhOworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAg
IFZlY3RvcjxOb2RlKiwgOD4gbV9ub2RlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisj
aW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNp
bmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCkBA
IC0zOSw5ODQgKzQwLDU0NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LWNsYXNzIENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKKy8vIFRoaXMgZmlsZSBjb250YWlucyB0
d28gQ1NFIGltcGxlbWVudGF0aW9uczogbG9jYWwgYW5kIGdsb2JhbC4gTG9jYWxDU0UgdHlwaWNh
bGx5IHJ1bnMgd2hlbiB3ZSdyZQorLy8gaW4gREZHIG1vZGUsIGkuZS4gd2Ugd2FudCB0byBjb21w
aWxlIHF1aWNrbHkuIExvY2FsQ1NFIGNvbnRhaW5zIGEgbG90IG9mIG9wdGltaXphdGlvbnMgZm9y
CisvLyBjb21waWxlIHRpbWUuIEdsb2JhbENTRSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGZhaXJs
eSBzdHJhaWdodC1mb3J3YXJkLiBJdCB3aWxsIGZpbmQgbW9yZQorLy8gb3B0aW1pemF0aW9uIG9w
cG9ydHVuaXRpZXMgYnkgdmlydHVlIG9mIGJlaW5nIGdsb2JhbC4KKworbmFtZXNwYWNlIHsKKwor
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2NsYXNzIENsb2JiZXJGaWx0ZXIgewogcHVi
bGljOgotICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwg
ImNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKKyAgICBDbG9iYmVyRmlsdGVyKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBydW4oKQorICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6
OktleVZhbHVlUGFpclR5cGUmIHBhaXIpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2ZpeHBvaW50U3RhdGUgIT0gQmVmb3JlRml4cG9pbnQpOwotICAgICAgICAKLSAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2dyYXBoLmNsZWFyUmVw
bGFjZW1lbnRzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAg
ICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKGRlcHRoRmlyc3RbaV0pOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICBwZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgICAgIHJldHVybiBt
X2hlYXAub3ZlcmxhcHMocGFpci5rZXkuaGVhcCgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgot
ICAgIAotICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgpCisgICAgQWJzdHJhY3RIZWFw
IG1faGVhcDsKK307CisKK2lubGluZSB2b2lkIGNsb2JiZXIoSW1wdXJlTWFwJiBtYXAsIEFic3Ry
YWN0SGVhcCBoZWFwKQoreworICAgIENsb2JiZXJGaWx0ZXIgZmlsdGVyKGhlYXApOworICAgIG1h
cC5yZW1vdmVJZihmaWx0ZXIpOworfQorCitjbGFzcyBMb2NhbENTRVBoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBMb2NhbENTRVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
OiBQaGFzZShncmFwaCwgImxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikK
KyAgICAgICAgLCBtX3NtYWxsQmxvY2soZ3JhcGgpCisgICAgICAgICwgbV9sYXJnZUJsb2NrKGdy
YXBoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2N1cnJl
bnROb2RlLT5vcCgpXTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBVSU5UX01BWCkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCsrOwotICAg
ICAgICBBU1NFUlQocmVzdWx0IDw9IG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0KLSAgICBOb2RlKiBwdXJlQ1NFKE5vZGUqIG5vZGUpCisgICAgCisgICAg
Ym9vbCBydW4oKQogICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5z
YW5pdGl6ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6
ZWQoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29u
dmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8
IG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90
aGVyTm9kZSA9PSBjaGlsZDEgfHwgb3RoZXJOb2RlID09IGNoaWxkMiB8fCBvdGhlck5vZGUgPT0g
Y2hpbGQzKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSAhPSBvdGhlck5vZGUtPm9wKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQx
KCkuc2FuaXRpemVkKCk7Ci0gICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNo
aWxkMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQyKCkuc2FuaXRpemVkKCk7Ci0gICAgICAg
ICAgICBpZiAoIW90aGVyQ2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsK
LSAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3RoZXJDaGlsZCA9IG90aGVyTm9k
ZS0+Y2hpbGQzKCkuc2FuaXRpemVkKCk7Ci0gICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgICAgIGlmIChvdGhlckNo
aWxkICE9IGNoaWxkMykKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CisgICAg
ICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA8PSBTbWFsbE1hcHM6OmNhcGFjaXR5KQorICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9zbWFsbEJsb2NrLnJ1bihibG9jayk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2xhcmdlQmxvY2sucnVuKGJsb2Nr
KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBjaGFuZ2VkOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBjb25zdGFudENTRShOb2RlKiBub2Rl
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgIT0gbm9kZS0+b3AoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90
aGVyTm9kZS0+Y29uc3RhbnQoKSAhPSBub2RlLT5jb25zdGFudCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwor
cHJpdmF0ZToKKyAgICBjbGFzcyBTbWFsbE1hcHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8g
VGhpcyBwZXJtaXRzIFNtYWxsTWFwcyB0byBiZSB1c2VkIGZvciBibG9ja3MgdGhhdCBoYXZlIHVw
IHRvIDEwMCBub2Rlcy4gSW4gcHJhY3RpY2UsCisgICAgICAgIC8vIGZld2VyIHRoYW4gaGFsZiBv
ZiB0aGUgbm9kZXMgaW4gYSBibG9jayBoYXZlIHB1cmUgZGVmcywgYW5kIGV2ZW4gZmV3ZXIgaGF2
ZSBpbXB1cmUgZGVmcy4KKyAgICAgICAgLy8gVGh1cywgYSBjYXBhY2l0eSBsaW1pdCBvZiAxMDAg
cHJvYmFibHkgbWVhbnMgdGhhdCBzb21ld2hlcmUgYXJvdW5kIH40MCB0aGluZ3MgbWF5IGVuZCB1
cAorICAgICAgICAvLyBpbiBvbmUgb2YgdGhlc2UgInNtYWxsIiBsaXN0LWJhc2VkIG1hcHMuIFRo
YXQgbnVtYmVyIHN0aWxsIHNlZW1zIGxhcmdlaXNoLCBleGNlcHQgdGhhdAorICAgICAgICAvLyB0
aGUgb3ZlcmhlYWQgb2YgSGFzaE1hcHMgY2FuIGJlIHF1aXRlIGhpZ2ggY3VycmVudGx5OiBjbGVh
cmluZyB0aGVtLCBvciBldmVuIHJlbW92aW5nCisgICAgICAgIC8vIGVub3VnaCB0aGluZ3MgZnJv
bSB0aGVtLCBkZWxldGVzIChvciByZXNpemVzKSB0aGVpciBiYWNraW5nIHN0b3JlIGVhZ2VybHku
IEhlbmNlCisgICAgICAgIC8vIEhhc2hNYXBzIGluZHVjZSBhIGxvdCBvZiBtYWxsb2MgdHJhZmZp
Yy4KKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNhcGFjaXR5ID0gMTAwOworICAgIAor
ICAgICAgICBTbWFsbE1hcHMoKQorICAgICAgICAgICAgOiBtX3B1cmVMZW5ndGgoMCkKKyAgICAg
ICAgICAgICwgbV9pbXB1cmVMZW5ndGgoMCkKKyAgICAgICAgewogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KICAgICAKLSAgICBOb2RlKiBjb25zdGFudFN0b3JhZ2VQb2ludGVy
Q1NFKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBD
b25zdGFudFN0b3JhZ2VQb2ludGVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5zdG9yYWdlUG9pbnRlcigpICE9IG5v
ZGUtPnN0b3JhZ2VQb2ludGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CisgICAgICAgIHZvaWQgY2xlYXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3B1cmVMZW5ndGggPSAwOworICAgICAgICAgICAg
bV9pbXB1cmVMZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
ICAgICAKLSAgICBOb2RlKiBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wdXJlTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5vdmVybGFwcyhtX2ltcHVyZU1hcFtpXS5rZXku
aGVhcCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9pbXB1cmVNYXBbaS0tXSA9IG1faW1wdXJl
TWFwWy0tbV9pbXB1cmVMZW5ndGhdOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRBcnJheUxlbmd0aEVsaW1pbmF0
aW9uKE5vZGUqIGFycmF5KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRl
eEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICgh
bV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxV
bmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
ID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBzY29w
ZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCBpbnQgdmFyTnVtYmVyKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjog
ewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9k
ZS0+dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAg
ICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVt
YmVyKCkgIT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgdmFySW5qZWN0aW9uV2F0Y2hwb2ludEVsaW1pbmF0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFySW5qZWN0aW9uV2F0Y2hwb2ludCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGlt
aW5hdGlvbihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgQXJyYXlNb2RlIGFycmF5TW9kZSkK
LSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxIHx8IG5vZGUgPT0gY2hpbGQyKSAKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBu
b2RlLT5jaGlsZDIoKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAvLyBUeXBlZCBhcnJheXMgCi0gICAgICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpID09IGNoaWxkMgotICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gYXJyYXlNb2RlLnR5cGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikubm9kZSgpOwot
ICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1dEJ5VmFsIHdpbGwg
Y2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGluZyBmcm9tLgotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQgdGhlIFB1dEJ5VmFs
IGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCi0gICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50
IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Uga25vdyB0aGF0IHRoZXkgd29uJ3QgY2xv
YmJlciBlYWNoIG90aGVyLgotICAgICAgICAgICAgICAgIC8vIC4uLiBleGNlcHQgb2YgY291cnNl
IGZvciB0eXBlZCBhcnJheXMsIHdoZXJlIGFsbCB0eXBlZCBhcnJheXMgY2xvYmJlciBhbGwgb3Ro
ZXIKLSAgICAgICAgICAgICAgICAvLyB0eXBlZCBhcnJheXMhICBBbiBJbnQzMkFycmF5IGNhbiBh
bGlhcyBhIEZsb2F0NjRBcnJheSBmb3IgZXhhbXBsZSwgYW5kIHNvIG9uLgotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNrRnVu
Y3Rpb25FbGltaW5hdGlvbihGcm96ZW5WYWx1ZSogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0g
Y2hpbGQxKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBDaGVja0V4ZWN1dGFibGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5v
ZGUtPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29s
IGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3Vw
ZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkg
Y2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVy
ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVj
dDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3Mg
YWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdl
ciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hl
Y2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAg
ICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0
LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBOb2RlKiBhZGRQdXJlKFB1cmVWYWx1ZSB2YWx1ZSwgTm9kZSog
bm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wdXJlTGVu
Z3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcHVyZU1hcFtpXS5rZXkgPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3B1cmVNYXBbaV0udmFsdWU7CiAgICAg
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fcHVyZUxlbmd0aCA8IGNh
cGFjaXR5KTsKKyAgICAgICAgICAgIG1fcHVyZU1hcFttX3B1cmVMZW5ndGgrK10gPSBXVEY6Oktl
eVZhbHVlUGFpcjxQdXJlVmFsdWUsIE5vZGUqPih2YWx1ZSwgbm9kZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQog
ICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZSogY2hpbGQxKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGls
ZDEpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cyAhPSBzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVy
dHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNT
dHJ1Y3R1cmVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhh
dCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8v
IGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0
cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5OgotICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIC8vIFdlIGNv
dWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVy
ZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtl
IEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgTm9kZSogYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbXB1cmVMZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbXB1
cmVNYXBbaV0ua2V5ID09IGxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bXB1cmVNYXBbaV0udmFsdWU7CiAgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKG1faW1wdXJlTGVuZ3RoIDwgY2FwYWNpdHkpOworICAgICAgICAgICAgbV9pbXB1cmVN
YXBbbV9pbXB1cmVMZW5ndGgrK10gPSBXVEY6OktleVZhbHVlUGFpcjxIZWFwTG9jYXRpb24sIE5v
ZGUqPihsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIAotICAgIE5vZGUqIGdldEJ5
T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGJh
c2UpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlID09IGJhc2UpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8UHVyZVZhbHVlLCBOb2RlKj4gbV9w
dXJlTWFwW2NhcGFjaXR5XTsKKyAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SGVhcExvY2F0aW9u
LCBOb2RlKj4gbV9pbXB1cmVNYXBbY2FwYWNpdHldOworICAgICAgICB1bnNpZ25lZCBtX3B1cmVM
ZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIG1faW1wdXJlTGVuZ3RoOworICAgIH07CiAKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gYmFzZQotICAgICAgICAg
ICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlCi0gICAgICAgICAgICAgICAg
ICAgICYmIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBp
ZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRl
bnRpZmllck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkg
PT0gYmFzZSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmll
ck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBiYXNlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRo
IGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBv
c3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAv
LyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IAotICAgIE5vZGUqIGdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGJhc2UpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGJhc2Up
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJh
eSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQn
cyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIAotICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2Fz
ZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNo
aWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAg
ICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAg
Ly8gSWYgd2UgY2FuIGNoZWFwbHkgcHJvdmUgdGhpcyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0
J3Mgc3RvcmFnZSwgd2UKLSAgICAgICAgICAgICAgICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBp
dHMgcmVzdWx0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSwgd2UgY3VycmVudGx5IGNhbid0IHByb3ZlIHRoYXQgdGhpcyBkb2Vzbid0IGNoYW5n
ZSBvdXIgb2JqZWN0J3MKLSAgICAgICAgICAgICAgICAvLyBzdG9yYWdlLCBzbyB3ZSBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhhdCBpdCBtYXkgY2hhbmdlIHRoZSBzdG9yYWdlCi0gICAgICAgICAg
ICAgICAgLy8gcG9pbnRlciBvZiBhbnkgb2JqZWN0LCBpbmNsdWRpbmcgb3Vycy4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIC8vIFdl
IGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3VyIGJ1dHRl
cmZseS4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRh
a2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgY2xhc3MgTGFyZ2VNYXBz
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIExhcmdlTWFwcygpCisgICAgICAgIHsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxp
bWluYXRpb24oTm9kZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZSA9PSBjaGlsZDEpIAotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgp
ID09IGFycmF5TW9kZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5
aWZ5OgotICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICAgICAg
ICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qg
b3VyIGFycmF5LgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291
bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIHZvaWQgY2xl
YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3B1cmVNYXAuY2xlYXIoKTsKKyAgICAgICAg
ICAgIG1faW1wdXJlTWFwLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCB3
cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICAgICAgeworICAgICAgICAgICAgY2xvYmJlciht
X2ltcHVyZU1hcCwgaGVhcCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgTm9kZSogYWRkUHVy
ZShQdXJlVmFsdWUgdmFsdWUsIE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gbV9wdXJlTWFwLmFkZCh2YWx1ZSwgbm9kZSk7CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICBOb2RlKiBhZGRJbXB1cmUoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiBub2Rl
KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW1wdXJlTWFwLmFkZChs
b2NhdGlvbiwgbm9kZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkg
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1v
ZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAg
IEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJlTWFwOworICAgICAgICBIYXNoTWFwPEhl
YXBMb2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwOworICAgIH07CiAKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwcz4KKyAgICBjbGFzcyBCbG9ja0NTRSB7CisgICAgcHVi
bGljOgorICAgICAgICBCbG9ja0NTRShHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6IG1fZ3Jh
cGgoZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIAorICAgICAgICBib29sIHJ1bihC
YXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXBzLmNsZWFyKCk7
CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50
aXR5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1f
Z3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogICAgIAotICAgIE5vZGUqIGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24oTm9kZVR5
cGUgb3AsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gb3AgJiYgbm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB2b2lkIHJlYWQoQWJzdHJhY3RIZWFwKSB7IH0KKyAgICAKKyAgICAgICAgdm9pZCB3cml0
ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXBzLndyaXRl
KGhlYXApOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBtX21hcHMuYWRkUHVyZSh2
YWx1ZSwgbV9ub2RlKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0
aChtYXRjaCk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVsaW1p
bmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENy
ZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8g
cmV0dXJuIGEgZGlmZmVyZW50IHNjb3BlLgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdm9p
ZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgTm9kZSogbWF0Y2ggPSBtX21hcHMuYWRkSW1wdXJlKGxvY2F0aW9uLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAg
ICAgICAgICAgLy8gRm9yIHVuY2FwdHVyZWQgbG9jYWxzLCB1c3VhbGx5IHRoZSBDUFMgcmV0aHJl
YWRpbmcgcGhhc2UgZG9lcyB0aGlzLiBCdXQgaXQncyBPSworICAgICAgICAgICAgICAgIC8vIGZv
ciB1cyB0byBtZXNzIHdpdGggbG9jYWxzIC0gcmVnYXJkbGVzcyBvZiB0aGVpciBjYXB0dXJlZG5l
c3MgLSBzbyBsb25nIGFzOgorICAgICAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgICAgIC8v
IC0gV2UgZGV0aHJlYWQgdGhlIGdyYXBoLiBBbnkgY2hhbmdlcyB3ZSBtYWtlIG1heSBpbnZhbGlk
YXRlIHRoZSBhc3N1bXB0aW9ucyBvZgorICAgICAgICAgICAgICAgIC8vICAgb3VyIENQUyBmb3Jt
LCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBHZXRMb2NhbCBpcyBsaW5rZWQgdG8gdGhlIHZhcmlhYmxl
c0F0VGFpbC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gV2UgZG9u
J3QgaW50cm9kdWNlIGEgUGhhbnRvbSBmb3IgdGhlIGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4gVGhp
cyB3b3VsZG4ndCBiZQorICAgICAgICAgICAgICAgIC8vICAgdG90YWxseSB3cm9uZyBidXQgaXQg
d291bGQgcGVzc2ltaXplIHRoZSBjb2RlLiBKdXN0IGJlY2F1c2UgdGhlcmUgaXMgYQorICAgICAg
ICAgICAgICAgIC8vICAgR2V0TG9jYWwgZG9lc24ndCBtZWFuIHRoYXQgdGhlIGNoaWxkIHdhcyBs
aXZlLiBTaW1wbHkgcmVyb3V0aW5nIHRoZSBhbGwgdXNlcworICAgICAgICAgICAgICAgIC8vICAg
b2YgdGhpcyBHZXRMb2NhbCB3aWxsIHByZXNlcnZlIHRoZSBsaXZlLWF0LWV4aXQgaW5mb3JtYXRp
b24ganVzdCBmaW5lLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2Ug
YWNjb21wbGlzaCB0aGUgbGF0dGVyIGJ5IGp1c3QgY2xlYXJpbmcgdGhlIGNoaWxkOyB0aGVuIHRo
ZSBQaGFudG9tIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAvLyBpbnRyb2R1Y2Ugd29uJ3QgaGF2
ZSBjaGlsZHJlbiBhbmQgc28gaXQgd2lsbCBldmVudHVhbGx5IGp1c3QgYmUgZGVsZXRlZC4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOworICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAg
ICAgCi0gICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENsb2JiZXJpbmcpCi0g
ICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSAwOworICAgIHByaXZhdGU6CisgICAgICAg
IEdyYXBoJiBtX2dyYXBoOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0g
bG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkg
PT0gbG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgewot
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgR2V0Q2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1i
ZXIoKSkgPT0gbG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KKyAgICAgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgICAgIE5vZGUqIG1fbm9kZTsKICAg
ICAKLSAgICBib29sIGludmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24oKQorICAgICAgICBNYXBz
IG1fbWFwczsKKyAgICB9OworCisgICAgQmxvY2tDU0U8U21hbGxNYXBzPiBtX3NtYWxsQmxvY2s7
CisgICAgQmxvY2tDU0U8TGFyZ2VNYXBzPiBtX2xhcmdlQmxvY2s7Cit9OworCitjbGFzcyBHbG9i
YWxDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgR2xvYmFsQ1NFUGhhc2Uo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZ2xvYmFsIGNvbW1vbiBzdWJl
eHByZXNzaW9uIGVsaW1pbmF0aW9uIikKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gSW52YWxpZGF0
aW9uUG9pbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAo
d3JpdGVzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBXYXRjaHBvaW50X2ZpcmUpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkKKyAgICBib29s
IHJ1bigpCiAgICAgewotICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KTsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICAgICAgbV9ncmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOworICAgICAgICBtX2dyYXBo
Lm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CiAgICAgICAgIAotICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRv
IHRoaXMgbm9kZS4KLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNl
bWVudDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJlT3JkZXIpOwog
ICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgbV9pbXB1cmVEYXRh
TWFwLnJlc2l6ZShtX2dyYXBoLm51bUJsb2NrcygpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZSgpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQg
d2hhdCBnZXRzIGNsb2JiZXJlZCBieSBibG9ja3MuIE5vZGUgdGhhdCB0aGlzIHVzZXMgdGhlIHBy
ZU9yZGVyIGxpc3QKKyAgICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fcHJlT3JkZXIuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBt
X2Jsb2NrID0gbV9wcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2lt
cHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgICAg
ICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRh
LT53cml0ZXMpOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAvLyBCYXNlZCBvbiBteSBleHBlcmllbmNlIGRvaW5nIHRoaXMgYmVmb3JlLCB3
aGF0IGZvbGxvd3MgbWlnaHQgaGF2ZSB0byBiZSBtYWRlIGl0ZXJhdGl2ZS4KKyAgICAgICAgLy8g
UmlnaHQgbm93IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBpdGVyYXRpdmUgYmVjYXVzZSBldmVyeXRo
aW5nIGlzIGRvbWluYXRvci1ic2VkLiBCdXQgd2hlbgorICAgICAgICAvLyB2YWxpZGF0aW9uIGlz
IGVuYWJsZWQsIHdlIGNoZWNrIGlmIGl0ZXJhdGluZyB3b3VsZCBmaW5kIG5ldyBDU0Ugb3Bwb3J0
dW5pdGllcy4KKworICAgICAgICBib29sIGNoYW5nZWQgPSBpdGVyYXRlKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBJdGVyYXRpbmcgYSBzZWNvbmQgdGltZSBzaG91bGQgbm90IGZpbmQgbmV3IENT
RSBvcHBvcnR1bml0aWVzLCB1bmxlc3Mgd2UgaGF2ZSBhIGJ1Zy4KKyAgICAgICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsICFpdGVyYXRlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5h
dGUoTm9kZSogbm9kZSwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFudG9tKQorICAgIHZvaWQg
cmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CisgICAgICAgIG1fcHVyZVZhbHVlcy5jbGVh
cigpOwogICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
bV9pbXB1cmVEYXRhTWFwW2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOworICAgICAgICAgICAg
bV9pbXB1cmVEYXRhTWFwW2ldLmRpZFZpc2l0ID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlKiBub2RlKQorICAgIGJvb2wgaXRlcmF0
ZSgpCiAgICAgewotICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiUGVyZm9ybWluZyBpdGVy
YXRpb24uXG4iKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50
cygpOwogICAgICAgICAKLSAgICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVz
IG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAg
ICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJT
aGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoK
LSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAg
Y2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJp
dGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTaW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6
Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2Rl
QXQ6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAgIGNhc2UgSXNCb29sZWFuOgot
ICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICBj
YXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTG9n
aWNhbE5vdDoKLSAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIGNhc2UgU2tpcFNj
b3BlOgotICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0
U2NvcGU6Ci0gICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0
YW50OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBNYWtlUm9wZToK
LSAgICAgICAgY2FzZSBEb3VibGVSZXA6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6Ci0gICAgICAg
IGNhc2UgSW50NTJSZXA6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhB
ZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0g
ICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgIGNh
c2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2Ug
RG91YmxlQXNJbnQzMjogewotICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcHVyZUNTRShu
b2RlKTsKLSAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhjYW5kaWRhdGUtPmFyaXRoTW9kZSgpLCBub2Rl
LT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFy
aXRoTW9kZSgpLCBjYW5kaWRhdGUtPmFyaXRoTW9kZSgpKSkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlLT5zZXRBcml0aE1vZGUobm9kZS0+YXJp
dGhNb2RlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY2Fu
ZGlkYXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ByZU9yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBt
X2Jsb2NrID0gbV9wcmVPcmRlcltpXTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2lt
cHVyZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAgICAgbV93cml0ZXNTb0Zhci5j
bGVhcigpOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2Fs
T3A7Ci0gICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2Fk
RWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3As
IHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKLSAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbE9wKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJl
bGV2YW50TG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAgICAg
JiYgcmVsZXZhbnRMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vz
c0RhdGEpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlKiBwaGkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBv
c3NpYmxlUmVwbGFjZW1lbnQpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIElmIHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwg
dGhlbiB0dXJuIHRoZSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAvLyBpbnRvIGEgR2V0
TG9jYWwuCi0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2Fs
VW5saW5rZWQpCi0gICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0VG9HZXRM
b2NhbCh2YXJpYWJsZUFjY2Vzc0RhdGEsIHBoaSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGJsb2NrICIsICptX2Jsb2NrLCAi
OlxuIik7CiAKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICAgICAgTm9kZSogcmVsZXZhbnRMb2NhbE9wSWdub3JlZDsKLSAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wSWdub3JlZCwgdHJ1ZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0g
ICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoK
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFz
ZXMgd2lsbCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0YW50cywKLSAgICAgICAgICAgIC8vIHdoaWNo
IG1heSByZXN1bHQgaW4gZHVwbGljYXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4g
dGhpcyB1cC4KLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnRT
dG9yYWdlUG9pbnRlcjoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50U3RvcmFn
ZVBvaW50ZXJDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dEFycmF5TGVuZ3RoRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgYXJlIGNvbmRp
dGlvbmFsbHkgcHVyZTogdGhlc2UgYXJlIHB1cmUsIGFuZCBjYW4KLSAgICAgICAgLy8gYmUgQ1NF
J2QsIHNvIGxvbmcgYXMgdGhlIHByZWRpY3Rpb24gaXMgdGhlIG9uZSB3ZSB3YW50LgotICAgICAg
ICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAg
IGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAg
ICAgICAgY2FzZSBDb21wYXJlRXE6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGlj
dGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQg
PSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAmJiBtX2dy
YXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKHJlcGxhY2VtZW50KSkKLSAgICAgICAgICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICBMb29raW5nIGF0IG5vZGUgIiwgbV9ub2RlLCAiOlxuIik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG1fbm9kZSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBJZGVudGl0
eSkgeworICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKG1fbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcml6ZShtX2dy
YXBoLCBtX25vZGUsICp0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgaGVhcCBh
Y2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBidXQgd2UgY2FuIHN0aWxsCi0gICAg
ICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBzb21lIHN1YnRsZSBjb25kaXRpb25z
IGFyZSBtZXQuCi0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsK
LSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+ZGlkVmlzaXQgPSB0cnVlOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAgIH0KIAotICAgICAgICBj
YXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBpZiAodmFySW5qZWN0aW9u
V2F0Y2hwb2ludEVsaW1pbmF0aW9uKCkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEJ5VmFsOgot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICAgICAgRWRnZSBjaGlsZDEg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGlsZDIg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgewotICAgICAgICAgICAgICAgIE5vZGUqIHJlcGxh
Y2VtZW50ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hpbGQxLm5vZGUoKSwgY2hpbGQyLm5v
ZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZW1l
bnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wKFB1dEJ5VmFsQWxpYXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CisgICAgCisgICAgdm9pZCB3cml0ZShBYnN0
cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIGNsb2JiZXIobV9pbXB1cmVEYXRhLT5hdmFp
bGFibGVBdFRhaWwsIGhlYXApOworICAgICAgICBtX3dyaXRlc1NvRmFyLmFkZChoZWFwKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX3B1cmVWYWx1ZXMuYWRkKHZhbHVlLCBWZWN0b3I8Tm9kZSo+KCkpOwor
ICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG1fbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlW2ldOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0
b3JzLmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAg
ICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bV9ub2RlKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZFJlcGxhY2VtZW50KEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIE5vZGUqIG1hdGNoID0gbV9pbXB1cmVEYXRh
LT5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1hdGNoKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBG
b3VuZCBsb2NhbCBtYXRjaDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgcmV0dXJuIG1h
dGNoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV93cml0ZXNTb0Zhci5vdmVy
bGFwcyhsb2NhdGlvbi5oZWFwKCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICBOb3QgbG9va2luZyBnbG9iYWxseSBiZWNhdXNlIG9m
IGxvY2FsIGNsb2JiZXI6ICIsIG1fd3JpdGVzU29GYXIsICJcbiIpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgcGVyZm9t
cyBhIGJhY2t3YXJkIHNlYXJjaCB0byBmaW5kIHNvbWUgcG9zc2libGUgZGVmKCkgdGhhdCBtYXRj
aGVzIG91ciBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9uLiBTdWNoIGEgbWF0Y2ggaXMgb25seSB2
YWxpZCBpZiB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgcGF0aCBmcm9tIHRoZSBkZWYoKSB0bwor
ICAgICAgICAvLyBvdXIgYmxvY2sgdGhhdCBjb250YWlucyBhIHdyaXRlKCkgdGhhdCBvdmVybGFw
cyBvdXIgaGVhcC4gVGhpcyBhbGdvcml0aG0gbG9va3MgZm9yIGJvdGgKKyAgICAgICAgLy8gb2Yg
dGhlc2UgdGhpbmdzICh0aGUgbWF0Y2hpbmcgZGVmIGFuZCB0aGUgb3ZlcmxhcHBpbmcgd3JpdGVz
KSBpbiBvbmUgYmFja3dhcmRzIERGUyBwYXNzLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlz
IHN0YXJ0cyBieSBsb29raW5nIGF0IHRoZSBzdGFydGluZyBibG9jaydzIHByZWRlY2Vzc29ycywg
YW5kIHRoZW4gaXQgY29udGludWVzIGFsb25nCisgICAgICAgIC8vIHRoZWlyIHByZWRlY2Vzc29y
cy4gQXMgc29vbiBhcyB0aGlzIGZpbmRzIGEgcG9zc2libGUgZGVmKCkgLSBvbmUgdGhhdCBkZWZp
bmVzIHRoZSBoZWFwCisgICAgICAgIC8vIGxvY2F0aW9uIHdlIHdhbnQgd2hpbGUgZG9taW5hdGlu
ZyBvdXIgc3RhcnRpbmcgYmxvY2sgLSBpdCBhc3N1bWVzIHRoYXQgdGhpcyBvbmUgbXVzdCBiZQor
ICAgICAgICAvLyB0aGUgbWF0Y2guIEl0IHRoZW4gbGV0cyB0aGUgREZTIG92ZXIgcHJlZGVjZXNz
b3JzIGNvbXBsZXRlLCBidXQgaXQgZG9lc24ndCBhZGQgdGhlCisgICAgICAgIC8vIGRlZigpJ3Mg
cHJlZGVjZXNzb3JzOyB0aGlzIGVuc3VyZXMgdGhhdCBhbnkgYmxvY2tzIHdlIHZpc2l0IHRoZXJl
YWZ0ZXIgYXJlIG9uIHNvbWUgcGF0aAorICAgICAgICAvLyBmcm9tIHRoZSBkZWYoKSB0byB1cy4g
QXMgc29vbiBhcyB0aGUgREZHIGZpbmRzIGEgd3JpdGUoKSB0aGF0IG92ZXJsYXBzIHRoZSBsb2Nh
dGlvbidzCisgICAgICAgIC8vIGhlYXAsIGl0IHN0b3BzLCBhc3N1bWluZyB0aGF0IHRoZXJlIGlz
IG5vIHBvc3NpYmxlIG1hdGNoLiBOb3RlIHRoYXQgdGhlIHdyaXRlKCkgY2FzZSBtYXkKKyAgICAg
ICAgLy8gdHJpZ2dlciBiZWZvcmUgd2UgZmluZCBhIGRlZigpLCBvciBhZnRlci4gRWl0aGVyIHdh
eSwgdGhlIHdyaXRlKCkgY2FzZSBjYXVzZXMgdGhpcworICAgICAgICAvLyBmdW5jdGlvbiB0byBp
bW1lZGlhdGVseSByZXR1cm4gbnVsbHB0ci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhl
IHdyaXRlKCkgaXMgZm91bmQgYmVmb3JlIHdlIGZpbmQgdGhlIGRlZigpLCB0aGVuIHdlIGtub3cg
dGhhdCBhbnkgZGVmKCkgd2Ugd291bGQKKyAgICAgICAgLy8gZmluZCB3b3VsZCBoYXZlIGEgcGF0
aCB0byB1cyB0aGF0IHRyaXBzIG92ZXIgdGhlIHdyaXRlKCkgYW5kIGhlbmNlIGJlY29tZXMgaW52
YWxpZC4gVGhpcworICAgICAgICAvLyBpcyBqdXN0IGEgZGlyZWN0IG91dGNvbWUgb2YgdXMgbG9v
a2luZyBmb3IgYSBkZWYoKSB0aGF0IGRvbWluYXRlcyB1cy4gR2l2ZW4gYSBibG9jayBBCisgICAg
ICAgIC8vIHRoYXQgZG9taW5hdGVzIGJsb2NrIEIgLSBzbyB0aGF0IEEgaXMgdGhlIG9uZSB0aGF0
IHdvdWxkIGhhdmUgdGhlIGRlZigpIGFuZCBCIGlzIG91cgorICAgICAgICAvLyBzdGFydGluZyBi
bG9jayAtIHdlIGtub3cgdGhhdCBhbnkgb3RoZXIgYmxvY2sgbXVzdCBlaXRoZXIgYmUgb24gdGhl
IHBhdGggZnJvbSBBIHRvIEIsIG9yCisgICAgICAgIC8vIGl0IG11c3QgYmUgb24gYSBwYXRoIGZy
b20gdGhlIHJvb3QgdG8gQSwgYnV0IG5vdCBib3RoLiBTbywgaWYgd2UgaGF2ZW4ndCBmb3VuZCBB
IHlldCBidXQKKyAgICAgICAgLy8gd2UgYWxyZWFkeSBoYXZlIGZvdW5kIGEgYmxvY2sgQyB0aGF0
IGhhcyBhIHdyaXRlKCksIHRoZW4gQyBtdXN0IGJlIG9uIHNvbWUgcGF0aCBmcm9tIEEKKyAgICAg
ICAgLy8gdG8gQiwgd2hpY2ggbWVhbnMgdGhhdCBBJ3MgZGVmKCkgaXMgaW52YWxpZCBmb3Igb3Vy
IHB1cnBvc2VzLiBIZW5jZSwgYmVmb3JlIHdlIGZpbmQgdGhlCisgICAgICAgIC8vIGRlZigpLCBz
dG9wcGluZyBvbiB3cml0ZSgpIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gU3RvcHBpbmcgb24gd3JpdGUoKSBpcyBhbHNvIHRoZSByaWdodCB0aGluZyB0
byBkbyBhZnRlciB3ZSBmaW5kIHRoZSBkZWYoKS4gQWZ0ZXIgd2UgZmluZAorICAgICAgICAvLyB0
aGUgZGVmKCksIHdlIGRvbid0IGFkZCB0aGF0IGJsb2NrJ3MgcHJlZGVjZXNzb3JzIHRvIHRoZSBz
ZWFyY2ggd29ya2xpc3QuIFRoYXQgbWVhbnMKKyAgICAgICAgLy8gdGhhdCBoZW5jZWZvcnRoIHRo
ZSBvbmx5IGJsb2NrcyB3ZSB3aWxsIHNlZSBpbiB0aGUgc2VhcmNoIGFyZSBibG9ja3Mgb24gdGhl
IHBhdGggZnJvbQorICAgICAgICAvLyB0aGUgZGVmKCkgdG8gdXMuIElmIGFueSBzdWNoIGJsb2Nr
IGhhcyBhIHdyaXRlKCkgdGhhdCBjbG9iYmVycyBvdXIgaGVhcCB0aGVuIHdlIHNob3VsZAorICAg
ICAgICAvLyBnaXZlIHVwLgorICAgICAgICAvLworICAgICAgICAvLyBIZW5jZSB0aGlzIGdyYXBo
IHNlYXJjaCBhbGdvcml0aG0gZW5kcyB1cCBiZWluZyBkZWNlcHRpdmVseSBzaW1wbGU6IGFueSBv
dmVybGFwcGluZworICAgICAgICAvLyB3cml0ZSgpIGNhdXNlcyB1cyB0byBpbW1lZGlhdGVseSBy
ZXR1cm4gbnVsbHB0ciwgYW5kIGEgbWF0Y2hpbmcgZGVmKCkgbWVhbnMgdGhhdCB3ZSBqdXN0Cisg
ICAgICAgIC8vIHJlY29yZCBpdCBhbmQgbmVnbGVjdCB0byB2aXNpdCBpdHMgcHJlY2Vzc29ycy4K
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gd29ya2xpc3Q7CisgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gc2Vlbkxpc3Q7CisgICAgICAgIEJpdFZlY3RvciBz
ZWVuOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ibG9jay0+cHJlZGVj
ZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgPSBtX2Jsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBpZiAoIXNlZW4uZ2V0
KHByZWRlY2Vzc29yLT5pbmRleCkpIHsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
cHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHNlZW4uc2V0KHByZWRlY2Vzc29yLT5pbmRl
eCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdv
cmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBzZWVuTGlzdC5hcHBlbmQoYmxvY2spOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICBTZWFyY2hpbmcgaW4gYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAg
ICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5k
ZXhdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSByZXF1aXJlIHN0cmljdCBkb21p
bmF0aW9uIGJlY2F1c2UgdGhpcyB3b3VsZCBvbmx5IHNlZSB0aGluZ3MgaW4gb3VyIG93biBibG9j
ayBpZgorICAgICAgICAgICAgLy8gdGhleSBjYW1lICphZnRlciogb3VyIHBvc2l0aW9uIGluIHRo
ZSBibG9jay4gQ2xlYXJseSwgd2hpbGUgb3VyIGJsb2NrIGRvbWluYXRlcworICAgICAgICAgICAg
Ly8gaXRzZWxmLCB0aGUgdGhpbmdzIGluIHRoZSBibG9jayBhZnRlciB1cyBkb24ndCBkb21pbmF0
ZSB1cy4KKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxv
Y2ssIG1fYmxvY2spICYmIGJsb2NrICE9IG1fYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCBzdHJpY3Rs
eSBkb21pbmF0ZXMuXG4iKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgZGF0YS5kaWRWaXNpdCk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsICFtYXRjaCk7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRhLmF2YWlsYWJs
ZUF0VGFpbC5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eTogIiwgbWF0Y2gs
ICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBEb24ndCBleGFtaW5lIHRoZSBwcmVkZWNlc3NvcnMgb2YgYSBtYXRjaC4gQXQgdGhpcyBw
b2ludCB3ZSBqdXN0IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gZXN0YWJsaXNoIHRo
YXQgb3RoZXIgYmxvY2tzIG9uIHRoZSBwYXRoIGZyb20gaGVyZSB0byB0aGVyZSBkb24ndCBjbG9i
YmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsb2NhdGlvbiB3ZSdyZSBpbnRlcmVzdGVk
IGluLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
LSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVy
ZVNldCgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVj
a0Z1bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2Rl
LT5mdW5jdGlvbigpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVs
aW1pbmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAg
ICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBpZiAoY2hlY2tB
cnJheUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkp
KQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIERlYWxpbmcgd2l0aCB3cml0ZSBzZXQgIiwgZGF0
YS53cml0ZXMsICJcbiIpOworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJsYXBzKGxv
Y2F0aW9uLmhlYXAoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBDbG9iYmVyZWQuXG4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICBjYXNlIEdldEdldHRlcjoK
LSAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAg
ICAgICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAg
ICAgICBzZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9u
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0
TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEdldHRl
clNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5p
ZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6Ci0gICAg
ICAgICAgICBpZiAoaW52YWxpZGF0aW9uUG9pbnRFbGltaW5hdGlvbigpKQotICAgICAgICAgICAg
ICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQorICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0cyBmb3IgbmV4dCB0aW1l
LiBXZSBjYWNoZSB0aGVtIGJvdGggZm9yIHRoaXMgYmxvY2sgYW5kIGZvciBhbGwgb2Ygb3VyCisg
ICAgICAgIC8vIHByZWRlY2Vzc29ycywgc2luY2UgZXZlbiB0aG91Z2ggd2UndmUgYWxyZWFkeSB2
aXNpdGVkIG91ciBwcmVkZWNlc3NvcnMsIG91ciBwcmVkZWNlc3NvcnMKKyAgICAgICAgLy8gcHJv
YmFibHkgaGF2ZSBzdWNjZXNzb3JzIG90aGVyIHRoYW4gdXMuCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBzZWVuTGlzdCkKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9j
ay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsKKyAgICAgICAg
bV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CiAgICAg
ICAgIAotICAgICAgICBtX2xhc3RTZWVuW25vZGUtPm9wKCldID0gbV9pbmRleEluQmxvY2s7Cisg
ICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tD
U0UoQmFzaWNCbG9jayogYmxvY2spCisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9u
LCBOb2RlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBHb3Qg
aGVhcCBsb2NhdGlvbiBkZWY6ICIsIGxvY2F0aW9uLCAiIC0+ICIsIHZhbHVlLCAiXG4iKTsKICAg
ICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKLSAgICAgICAgICAgIG1fbGFzdFNl
ZW5baV0gPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZSogbWF0Y2ggPSBmaW5kUmVwbGFjZW1lbnQo
bG9jYXRpb24pOwogICAgICAgICAKLSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1f
aW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAg
ICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7Ci0gICAgICAg
ICAgICBwZXJmb3JtTm9kZUNTRShtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBHb3QgbWF0Y2g6ICIsIG1hdGNoLCAiXG4iKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX25vZGUtPnJl
cGxhY2VXaXRoKG1hdGNoKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAg
Ci0gICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7Ci0gICAgTm9kZSogbV9jdXJyZW50Tm9k
ZTsKLSAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKLSAgICBzdGQ6OmFycmF5PHVuc2lnbmVk
LCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47Ci0gICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkg
dHJhY2tzIGNoYW5nZXMgdGhhdCBoYXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVyIG9w
dGltaXphdGlvbnMuCisgICAgc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CisgICAgICAgIEltcHVy
ZUJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IGRpZFZpc2l0KGZhbHNlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENsb2JiZXJTZXQgd3JpdGVzOworICAgICAgICBJ
bXB1cmVNYXAgYXZhaWxhYmxlQXRUYWlsOworICAgICAgICBib29sIGRpZFZpc2l0OworICAgIH07
CisgICAgCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX3ByZU9yZGVyOworCisgICAgUHVyZU11
bHRpTWFwIG1fcHVyZVZhbHVlczsKKyAgICBWZWN0b3I8SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVy
ZURhdGFNYXA7CisgICAgCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBOb2RlKiBtX25v
ZGU7CisgICAgSW1wdXJlQmxvY2tEYXRhKiBtX2ltcHVyZURhdGE7CisgICAgQ2xvYmJlclNldCBt
X3dyaXRlc1NvRmFyOworICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOwogfTsKIAotYm9vbCBwZXJm
b3JtQ1NFKEdyYXBoJiBncmFwaCkKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHBl
cmZvcm1Mb2NhbENTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBMb2NhbENTRSBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMb2Nh
bENTRVBoYXNlPihncmFwaCk7Cit9CisKK2Jvb2wgcGVyZm9ybUdsb2JhbENTRShHcmFwaCYgZ3Jh
cGgpCiB7Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2Ui
KTsKLSAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEdsb2JhbENTRSBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxHbG9iYWxDU0VQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4
LDExIEBAIGNsYXNzIEdyYXBoOwogLy8gaXQgaXMgcmF0aGVyIHByb2ZpdGFibGUuIEl0IGhhcyBm
YWlybHkgYWNjdXJhdGUgaGVhcCBtb2RlbGluZyBhbmQgd2lsbCBtYXRjaAogLy8gYSB3aWRlIHJh
bmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2Ug
YmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFw
IHRvIHJ1bi4KLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYpOworYm9vbCBwZXJmb3JtTG9jYWxDU0Uo
R3JhcGgmKTsKKworLy8gU2FtZSwgYnV0IGdsb2JhbC4gT25seSB3b3JrcyBmb3IgU1NBLiBUaGlz
IHdpbGwgZmluZCBjb21tb24gc3ViZXhwcmVzc2lvbnMKKy8vIGJvdGggaW4gdGhlIHNhbWUgYmxv
Y2sgYW5kIGluIGFueSBibG9jayB0aGF0IGRvbWluYXRlcyB0aGUgY3VycmVudCBibG9jay4KK2Jv
b2wgcGVyZm9ybUdsb2JhbENTRShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAko
cmV2aXNpb24gMTcxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIyLDM3ICsxMjIsMzggQEAgSGFzaFNldDxBYnN0cmFj
dEhlYXA+IENsb2JiZXJTZXQ6OnNldE9mKAogdm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRS
ZWFkKHJlYWRTZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwog
fQogCiB2b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQm
IHdyaXRlU2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2Ji
ZXJpemUgbm9PcDsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBj
bG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6
ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiB2b2lkIGFkZFJlYWRz
QW5kV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwg
Q2xvYmJlclNldCYgd3JpdGVTZXQpCiB7CiAgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRT
ZXQpOwogICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBu
b09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlLCBub09w
KTsKIH0KIAogYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9i
YmVyU2V0JiByZWFkU2V0KQogewogICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRT
ZXQpOwotICAgIE5vT3BDbG9iYmVyaXplIGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgs
IG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAg
IGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIG5vT3AsIG5vT3ApOwogICAgIHJldHVy
biBhZGRSZWFkLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2xvYmJlclNldE92ZXJs
YXBzIGFkZFdyaXRlKHdyaXRlU2V0KTsKLSAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRS
ZWFkLCBhZGRXcml0ZSk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgbm9PcCwgYWRkV3Jp
dGUsIG5vT3ApOwogICAgIHJldHVybiBhZGRXcml0ZS5yZXN1bHQoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCShyZXZpc2lvbiAxNzEw
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiwyNiArMzIsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCitib29sIGlzUHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hl
Y2tDbG9iYmVyaXplIGFkZEFjY2VzczsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOworICAgIGNs
b2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzLCBub09wKTsKKyAgICBy
ZXR1cm4gIWFkZEFjY2Vzcy5yZXN1bHQoKTsKK30KKworYm9vbCBoYXNQdXJlRGVmcyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFB1cmU7CisgICAg
Tm9PcENsb2JiZXJpemUgbm9PcDsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBu
b09wLCBhZGRQdXJlKTsKKyAgICByZXR1cm4gYWRkUHVyZS5yZXN1bHQoKTsKK30KKwogYm9vbCBk
b2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKLSAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAgICAgQ2hlY2tDbG9iYmVyaXpl
IGFkZFdyaXRlOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRl
KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAg
ICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0SGVhcCBoZWFwKQogeworICAgIE5vT3BD
bG9iYmVyaXplIG5vT3A7CiAgICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkQWNjZXNzKGhlYXAp
OwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNzKTsKKyAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRBY2Nlc3MsIGFkZEFjY2Vzcywgbm9PcCk7CiAg
ICAgcmV0dXJuIGFkZEFjY2Vzcy5yZXN1bHQoKTsKIH0KIAogYm9vbCB3cml0ZXNPdmVybGFwKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7Ci0gICAgTm9PcENs
b2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwogICAgIEFic3RyYWN0
SGVhcE92ZXJsYXBzIGFkZFdyaXRlKGhlYXApOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBh
ZGRXcml0ZSwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcx
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5o
IgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdQdXJlVmFsdWUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgotdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYg
d3JpdGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5j
dG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUsIERlZkZ1
bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC02OSw2ICs3MSwy
OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgLy8gICBw
cmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3VnaCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlm
IHdlIGRpZCBzb21lCiAgICAgLy8gICBzbWFsbCBoYWNraW5nLgogICAgIAorICAgIC8vIFdoaWxl
IHJlYWQoKSBhbmQgd3JpdGUoKSBhcmUgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkgLSB0aGV5IHRy
YWNrIHdoYXQgc29ydHMgb2YgdGhpbmdzIHRoZQorICAgIC8vIG5vZGUgbWF5IHJlYWQgb3Igd3Jp
dGUgLSB0aGUgZGVmKCkgZnVuY3RvciBpcyBtb3JlIHRyaWNreS4gSXQgdGVsbHMgeW91IHRoZSBo
ZWFwIGxvY2F0aW9ucworICAgIC8vIChub3QganVzdCBhYnN0cmFjdCBoZWFwcykgdGhhdCBhcmUg
ZGVmaW5lZCBieSBhIG5vZGUuIEEgaGVhcCBsb2NhdGlvbiBjb21wcmlzZXMgYW4gYWJzdHJhY3QK
KyAgICAvLyBoZWFwLCBzb21lIG5vZGVzLCBhbmQgYSBMb2NhdGlvbktpbmQuIEJyaWVmbHksIGEg
bG9jYXRpb24gZGVmaW5lZCBieSBhIG5vZGUgaXMgYSBsb2NhdGlvbgorICAgIC8vIHdob3NlIHZh
bHVlIGNhbiBiZSBkZWR1Y2VkIGZyb20gbG9va2luZyBhdCB0aGUgbm9kZSBpdHNlbGYuIFRoZSBs
b2NhdGlvbnMgcmV0dXJuZWQgbXVzdCBvYmV5CisgICAgLy8gdGhlIGZvbGxvd2luZyBwcm9wZXJ0
aWVzOgorICAgIC8vCisgICAgLy8gLSBJZiBzb21lb25lIHdhbnRzIHRvIENTRSBhIGxvYWQgZnJv
bSB0aGUgaGVhcCwgdGhlbiBhIEhlYXBMb2NhdGlvbiBvYmplY3Qgc2hvdWxkIGJlCisgICAgLy8g
ICBzdWZmaWNpZW50IHRvIGZpbmQgYSBzaW5nbGUgbWF0Y2hpbmcgbm9kZS4KKyAgICAvLworICAg
IC8vIC0gVGhlIGFic3RyYWN0IGhlYXAgaXMgdGhlIG9ubHkgYWJzdHJhY3QgaGVhcCB0aGF0IGNv
dWxkIGJlIGNsb2JiZXJlZCB0byBpbnZhbGlkYXRlIGFueSBzdWNoCisgICAgLy8gICBDU0UgYXR0
ZW1wdC4gSS5lLiBpZiBjbG9iYmVyaXplKCkgcmVwb3J0cyB0aGF0IG9uIGV2ZXJ5IHBhdGggYmV0
d2VlbiBzb21lIG5vZGUgYW5kIGEgbm9kZQorICAgIC8vICAgdGhhdCBkZWZpbmVzIGEgSGVhcExv
Y2F0aW9uIHRoYXQgaXQgd2FudGVkLCB0aGVyZSB3ZXJlIG5vIHdyaXRlcyB0byBhbnkgYWJzdHJh
Y3QgaGVhcCB0aGF0CisgICAgLy8gICBvdmVybGFwIHRoZSBsb2NhdGlvbidzIGhlYXAsIHRoZW4g
d2UgaGF2ZSBhIHNvdW5kIG1hdGNoLiBFZmZlY3RpdmVseSwgdGhlIHNlbWFudGljcyBvZgorICAg
IC8vICAgd3JpdGUoKSBhbmQgZGVmKCkgYXJlIGludGVydHdpbmVkIHN1Y2ggdGhhdCBmb3IgdGhl
bSB0byBiZSBzb3VuZCB0aGV5IG11c3QgYWdyZWUgb24gd2hhdAorICAgIC8vICAgaXMgQ1NFYWJs
ZS4KKyAgICAvLworICAgIC8vIHJlYWQoKSwgd3JpdGUoKSwgYW5kIGRlZigpIGZvciBoZWFwIGxv
Y2F0aW9ucyBpcyBlbm91Z2ggdG8gZG8gR0NTRSBvbiBlZmZlY3RmdWwgdGhpbmdzLiBUbworICAg
IC8vIGtlZXAgdGhpbmdzIHNpbXBsZSwgdGhpcyBjb2RlIHdpbGwgYWxzbyBkZWYoKSBwdXJlIHRo
aW5ncy4gZGVmKCkgbXVzdCBiZSBvdmVybG9hZGVkIHRvIGFsc28KKyAgICAvLyBhY2NlcHQgUHVy
ZVZhbHVlLiBUaGlzIHdheSwgYSBjbGllbnQgb2YgY2xvYmJlcml6ZSgpIGNhbiBpbXBsZW1lbnQg
R0NTRSBlbnRpcmVseSB1c2luZyB0aGUKKyAgICAvLyBpbmZvcm1hdGlvbiB0aGF0IGNsb2JiZXJp
emUoKSBwYXNzZXMgdG8gd3JpdGUoKSBhbmQgZGVmKCkuIE90aGVyIGNsaWVudHMgb2YgY2xvYmJl
cml6ZSgpIGNhbgorICAgIC8vIGp1c3QgaWdub3JlIGRlZigpIGJ5IHVzaW5nIGEgTm9PcENsb2Ji
ZXJpemUgZnVuY3Rvci4KKwogICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkp
CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAKQEAgLTc2LDIzICsxMDEs
MjMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
SlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25z
dGFudDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5jb25zdGFudCgpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFBo
YW50b206CiAgICAgY2FzZSBIYXJkUGhhbnRvbToKKyAgICBjYXNlIENoZWNrOgorICAgIGNhc2Ug
RXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2Fz
ZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKICAgICBjYXNlIEJp
dExTaGlmdDoKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAg
Y2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICBjYXNlIEFyaXRoU3Vi
OgotICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgY2FzZSBBcml0aE11bDoKICAgICBjYXNlIEFy
aXRoSU11bDoKLSAgICBjYXNlIEFyaXRoRGl2OgotICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgY2Fz
ZSBBcml0aEFiczoKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CkBAIC0x
MDAsMjggKzEyNSw0NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgogICAgIGNhc2UgQXJp
dGhDb3M6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBHZXRTY29wZToKICAgICBj
YXNlIFNraXBTY29wZToKLSAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgY2FzZSBTdHJpbmdD
aGFyQ29kZUF0OgotICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAgIGNhc2UgQ29tcGFy
ZUVxQ29uc3RhbnQ6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgY2FzZSBTdHJpbmdD
aGFyQ29kZUF0OgorICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CiAgICAgY2FzZSBJc051bWJlcjoKICAgICBjYXNl
IElzU3RyaW5nOgogICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKLSAgICBjYXNlIENvbnN0YW50U3RvcmFn
ZVBvaW50ZXI6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIERvdWJsZUFzSW50
MzI6Ci0gICAgY2FzZSBDaGVjazoKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBjYXNlIFZhbHVl
UmVwOgogICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQXJpdGhBZGQ6
CisgICAgY2FzZSBBcml0aFN1YjoKKyAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgIGNhc2UgQXJp
dGhNdWw6CisgICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTW9kOgorICAgIGNhc2Ug
RG91YmxlQXNJbnQzMjoKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUsIG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5m
dW5jdGlvbigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDaGVja0V4
ZWN1dGFibGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+ZXhlY3V0YWJsZSgp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPnN0b3JhZ2VQb2ludGVy
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CkBAIC0x
NDIsNyArMTg2LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NS
RW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBjYXNlIEludmFsaWRhdGlvblBvaW50Ogog
ICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNl
IFByb2ZpbGVEaWRDYWxsOgpAQCAtMTUxLDYgKzE5NCwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAg
d3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Q
b2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKwogICAg
IGNhc2UgRmx1c2g6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwpAQCAtMTk1LDEyICsyNDMsMjQg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBW
YXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAogICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBJc0Z1bmN0aW9u
OgotICAgIGNhc2UgVHlwZU9mOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgp
KSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBUeXBlT2Y6Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVHlwZU9m
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICByZXR1cm47
CisKICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQ
dXRCeUlkOgpAQCAtMjIzLDI3ICsyODMsMzMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAgICAgICAgcmVh
ZChHZXR0ZXJTZXR0ZXJfZ2V0dGVyKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJM
b2MsIEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIHJlYWQoR2V0
dGVyU2V0dGVyX3NldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU2V0dGVyTG9jLCBH
ZXR0ZXJTZXR0ZXJfc2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpDYWxsZWUp
KSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxv
YywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2Fs
KCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9j
YWwoKSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5
VmFsOiB7CkBAIC0yNzMsMTEgKzMzOSwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25s
eSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2Rl
LCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNf
cmVnaXN0ZXJzKTsKICAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMjg1LDYgKzM1Myw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC0yOTYsNiArMzY1LDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZERvdWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
YWQoV29ybGQpOwpAQCAtMzA3LDYgKzM3Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOwogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGln
dW91c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQo
V29ybGQpOwpAQCAtMzMwLDggKzQwMSw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlQcm9w
ZXJ0aWVzKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAg
ICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAgICAgICAgIHJl
YWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9w
ZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNDIsNiArNDEzLDkgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJy
YXlNb2RlKCk7CisgICAgICAgIE5vZGUqIGJhc2UgPSBncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGluZGV4ID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkubm9kZSgpOworICAgICAgICBOb2RlKiB2YWx1ZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpLm5vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsK
ICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2Fz
ZSBBcnJheTo6VW5wcm9maWxlZDoKQEAgLTM2Myw5ICs0MzcsOSBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAg
ICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICByZWFk
KEFyZ3VtZW50c19zbG93QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
CiAgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CkBAIC0zNzgsNiArNDUyLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0
ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVy
dHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKQEAgLTM5MCw2ICs0NjcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAg
ICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CiAgICAgICAgICAgICB3cml0ZShJ
bmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkubWF5U3RvcmVUb0hvbGUoKSkKKyAgICAgICAgICAgICAgICB3cml0ZShCdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5
TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKQEAgLTQwMiw2ICs0ODIsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAg
ICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOwogICAgICAgICAgICAg
d3JpdGUoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgYmFzZSwgaW5kZXgp
LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNDIwLDkgKzUwMywxMCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVj
dG9yKTsKLSAgICAgICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKKyAgICAg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAgICAgICAgICB3cml0ZShUeXBlZEFycmF5UHJv
cGVydGllcyk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3QgZGVmKCkgYW55dGhpbmcg
aGVyZSBiZWNhdXNlIHRoZXNlIG9wZXJhdGlvbnMgdHJ1bmNhdGUgdGhlaXIgaW5wdXRzLgorICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDcz
NwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC00MzAsNyArNTE0LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKLSAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC00NDIsMTIgKzUyNSwxNCBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CiAgICAgICAgIHJlYWQoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKENoZWNrSGFzSW5zdGFuY2VMb2MsIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIENoZWNrRXhl
Y3V0YWJsZToKLSAgICAgICAgcmVhZChKU0Z1bmN0aW9uX2V4ZWN1dGFibGUpOworICAgIGNhc2Ug
SW5zdGFuY2VPZjoKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluc3RhbmNlT2ZMb2MsIEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVj
dHVyZUlEKTsKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvVHlwZSk7CkBAIC00NTcsMTUg
KzU0MiwxOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIAogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9j
LCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1
dHRlcmZseSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVj
dF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0
dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0
X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5aWZ5OgpAQCAtNDc5LDQyICs1NjcsNTkgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpIHsKKyAgICAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkuYXNXb3JkKCkpKTsKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAg
ICB9CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlC
eXRlT2Zmc2V0OgotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAg
ICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7Ci0gICAgICAgIHJlYWQoQnV0dGVyZmx5
X2FycmF5QnVmZmVyKTsKLSAgICAgICAgcmVhZChBcnJheUJ1ZmZlcl9kYXRhKTsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0
ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgIGNhc2UgR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVy
dGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OiB7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAg
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVy
dGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNdWx0aUdl
dEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewogICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZp
ZXJOdW1iZXIpOworICAgICAgICByZWFkKGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJl
SUQpOwogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
aWRlbnRpZmllck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3Bl
cnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcik7Cisg
ICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCiAgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0
dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5yZWFsbG9j
YXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CisgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6IHsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAg
ICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgd3JpdGUoaGVhcCk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CkBAIC01MjUsNzggKzYzMCw4NyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAg
IHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBub2RlLT5jaGlsZDEo
KSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5h
c1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRl
TGVuZ3RoKTsKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAg
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihB
cnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG1v
ZGUudHlwZWRBcnJheVR5cGUoKSAhPSBOb3RUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIHJlYWQo
TWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9j
LCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAg
ICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgU2tpcFRvcFNjb3BlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIGdyYXBoLmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU2tpcFRvcFNjb3BlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgICAgICBy
ZWFkKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihDbG9zdXJlUmVnaXN0ZXJzTG9jLCBKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycywgbm9kZS0+
Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdl
dENsb3N1cmVWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVM
b2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dENs
b3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZh
ck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9j
LCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSksIG5vZGUtPmNoaWxk
MSgpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoQWJzb2x1
dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
R2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+
cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkp
LCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIE5l
d09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToK
ICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAg
ICAgLy8gRklYTUU6IEVuYWJsZSBDU0UgZm9yIHRoZXNlIG5vZGVzLiBXZSBjYW4ndCBkbyB0aGlz
IHJpZ2h0IG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheQorICAgICAgICAvLyBmb3IgdXMgdG8g
Y2xhaW0gYW4gaW5kZXggbm9kZSBhbmQgYSB2YWx1ZSBub2RlLiBXZSBjb3VsZCBtYWtlIHRoaXMg
d29yayBpZiB3ZSBsb3dlcmVkCisgICAgICAgIC8vIHRoZXNlIG5vZGVzIG9yIGlmIHdlIGhhZCBh
IG1vcmUgZmxleGlibGUgd2F5IG9mIGRlZigpJ2luZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNworICAgICAgICByZWFkKEhlYXBPYmpl
Y3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2Ug
TmV3U3RyaW5nT2JqZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgIGNhc2Ug
TmV3RnVuY3Rpb246Ci0gICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJl
YWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgY2Fz
ZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICBjYXNlIE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICByZWFkKFdvcmxkKTsK
LSAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHJldHVybjsKKwog
ICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQo
UmVnRXhwU3RhdGUpOwpAQCAtNjA5LDYgKzcyMyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTYxNiw4ICs3MzEs
MTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
Q29tcGFyZUxlc3NFcToKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXJFcToKLSAgICAgICAgaWYgKCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVz
ZSkpCisgICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Cisg
ICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoV29ybGQpOwogICAg
ICAgICByZXR1cm47CkBAIC02MjYsNiArNzQzLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewogICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICAgICAgY2FzZSBTdHJpbmdP
clN0cmluZ09iamVjdFVzZToKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGRlZiBhIHB1cmUg
dmFsdWUsIHVuZm9ydHVuYXRlbHkuIEknbGwgYXZvaWQgbG9hZC1lbGltaW5hdGluZyB0aGVzZSBm
b3IKKyAgICAgICAgICAgIC8vIG5vdy4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIENlbGxVc2U6CkBAIC02NTIsMTAgKzc3MSwxNiBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBjb2RlIG9yaWdp
biBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCisgICAgICAgIC8vIGhhdmUgZm9yIFB1cmVW
YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEga2luZCBv
ZiBtX2luZm8sIGxpa2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6
CkBAIC02ODUsNyArODEwLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogY2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXpl
KCkgeyB9Ci0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CiB9OwogCiBj
bGFzcyBDaGVja0Nsb2JiZXJpemUgewpAQCAtNjk1LDcgKzgyMSw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgbV9yZXN1
bHQgPSB0cnVlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KKyAgICB2b2lkIG9wZXJh
dG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCkBAIC03MDMsNiArODMwLDkgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fcmVzdWx0OwogfTsKIAorYm9vbCBpc1B1cmUoR3JhcGgmLCBOb2Rl
Kik7IC8vIFB1cmUgbWVhbnMgaXQgZG9lcyBubyByZWFkcyBvciB3cml0ZXMuCitib29sIGhhc1B1
cmVEZWZzKEdyYXBoJiwgTm9kZSopOyAvLyBIYXZpbmcgcHVyZSBkZWZzIG1lYW5zIHRoYXQgcHVy
ZSBDU0UgaXMgcG9zc2libGUuCisKIGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAog
Y2xhc3MgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgewpAQCAtNzMwLDYgKzg2MCw3MiBAQCBwcml2YXRl
OgogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKIGJv
b2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwogCisvLyBXZSB3
b3VsZCBoYXZlIHVzZWQgYmluZCgpIGZvciB0aGVzZSwgYnV0IGJlY2F1c2Ugb2YgdGhlIG92ZXJs
YW9kaW5nIHRoYXQgd2UgYXJlIGRvaW5nLAorLy8gaXQncyBxdWl0ZSBhIGJpdCBvZiBjbGVhcmVy
IHRvIGp1c3Qgd3JpdGUgdGhpcyBvdXQgdGhlIHRyYWRpdGlvbmFsIHdheS4KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIFJlYWRNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBS
ZWFkTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFw
KQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5yZWFkKGhlYXApOworICAgIH0KK3ByaXZhdGU6Cisg
ICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBXcml0ZU1l
dGhvZENsb2JiZXJpemUgeworcHVibGljOgorICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZShUJiB2
YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV92YWx1
ZS53cml0ZShoZWFwKTsKKyAgICB9Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmTWV0aG9kQ2xvYmJlcml6ZSB7CitwdWJsaWM6
CisgICAgRGVmTWV0aG9kQ2xvYmJlcml6ZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKFB1cmVWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZGVmKHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVCYgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBZGFwdG9yJiBhZGFwdG9y
KQoreworICAgIFJlYWRNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHJlYWQoYWRhcHRvcik7Cisg
ICAgV3JpdGVNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IHdyaXRlKGFkYXB0b3IpOworICAgIERl
Zk1ldGhvZENsb2JiZXJpemU8QWRhcHRvcj4gZGVmKGFkYXB0b3IpOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRlLCBkZWYpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcHJvY2VzcyB0aGUg
Z3JhcGggaW4gcmV2ZXJzZSBERlMgb3JkZXIsIHNvIHRoYXQgd2UgZ2V0IHRvIHRoZSB1c2VzCiAg
ICAgICAgICAgICAvLyBvZiBhIG5vZGUgYmVmb3JlIHdlIGdldCB0byB0aGUgbm9kZSBpdHNlbGYu
CiAgICAgICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgICAg
ICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5zaXplKCk7IGktLTspCiAgICAgICAgICAg
ICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIy
MCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5v
cmlnaW4sIGVkZ2UpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM5LDI1ICs2MzksNzUgQEAg
dm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0
LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+
JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKKy8vIFV0aWxpdGllcyBmb3IgcHJlLSBhbmQgcG9z
dC1vcmRlciB0cmF2ZXJzYWxzLgorbmFtZXNwYWNlIHsKKworaW5saW5lIHZvaWQgYWRkRm9yUHJl
T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAg
aWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CiAgICAg
d29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBzZWVuLmFkZChibG9jayk7CisgICAgc2Vlbi5z
ZXQoYmxvY2stPmluZGV4KTsKIH0KIAotdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0
T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorZW51bSBQb3N0T3JkZXJUYXNrS2lu
ZCB7CisgICAgUG9zdE9yZGVyRmlyc3RWaXNpdCwKKyAgICBQb3N0T3JkZXJBZGRUb1Jlc3VsdAor
fTsKKworc3RydWN0IFBvc3RPcmRlclRhc2sgeworICAgIFBvc3RPcmRlclRhc2soQmFzaWNCbG9j
ayogYmxvY2sgPSBudWxscHRyLCBQb3N0T3JkZXJUYXNrS2luZCBraW5kID0gUG9zdE9yZGVyRmly
c3RWaXNpdCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fa2luZChraW5k
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBQb3N0
T3JkZXJUYXNrS2luZCBtX2tpbmQ7Cit9OworCitpbmxpbmUgdm9pZCBhZGRGb3JQb3N0T3JkZXIo
VmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayhibG9j
aywgUG9zdE9yZGVyRmlyc3RWaXNpdCkpOworICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblBy
ZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKIHsKICAgICBWZWN0b3I8QmFzaWNC
bG9jayosIDE2PiB3b3JrbGlzdDsKLSAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOwotICAg
IGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsK
KyAgICBCaXRWZWN0b3Igc2VlbjsKKyAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0
LCBzZWVuLCBibG9jaygwKSk7CiAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAg
ICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1
Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0
LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGg6Omdl
dEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBW
ZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OworICAgIEJpdFZlY3RvciBzZWVuOwor
ICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFBvc3RPcmRlclRhc2sgdGFzayA9IHdv
cmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIHN3aXRjaCAodGFzay5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgorICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJBZGRUb1Jlc3VsdCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCk7
IGktLTspCisgICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVyKHdvcmtsaXN0LCBzZWVuLCB0
YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQb3N0T3JkZXJBZGRUb1Jlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGFz
ay5tX2Jsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzEwNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2Myw3ICs2NjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclJlcGxhY2VtZW50cygpOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKICAgICAKLSAgICB2b2lkIGdldEJsb2Nr
c0luRGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAgdm9p
ZCBnZXRCbG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAg
dm9pZCBnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOwog
ICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBt
X3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKQEAgLTc1MSw3ICs3NTIsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
cik7Ci0gICAgdm9pZCBhZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Js
b2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxl
U2hvdWxkU3BlY3VsYXRlSW50MzIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdIZWFw
TG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIjoiLCBtX2hlYXApOworICAgIAorICAg
IGlmICghbV9iYXNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnByaW50KCJbIiwg
bV9iYXNlKTsKKyAgICBpZiAobV9pbmRleCkKKyAgICAgICAgb3V0LnByaW50KCIsICIsIG1faW5k
ZXgpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2NhdGlvbktpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludmFsaWRMb2NhdGlvbktpbmQ6CisgICAgICAg
IG91dC5wcmludCgiSW52YWxpZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnRMb2M6CisgICAgICAgIG91dC5wcmludCgi
SW52YWxpZGF0aW9uUG9pbnRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIElzT2JqZWN0TG9jOgorICAgICAgICBvdXQucHJpbnQoIklzT2JqZWN0TG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc0Z1bmN0aW9uTG9jOgorICAgICAgICBv
dXQucHJpbnQoIklzRnVuY3Rpb25Mb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFR5cGVPZkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlT2ZMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldHRlckxvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJHZXR0ZXJMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNl
dHRlckxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXJMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIlZh
cmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheUxl
bmd0aExvYzoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxlbmd0aExvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQnV0dGVyZmx5TG9jOgorICAgICAgICBvdXQucHJp
bnQoIkJ1dHRlcmZseUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
Q2hlY2tIYXNJbnN0YW5jZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja0hhc0luc3RhbmNl
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlUmVnaXN0
ZXJzTG9jOgorICAgICAgICBvdXQucHJpbnQoIkNsb3N1cmVSZWdpc3RlcnNMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENsb3N1cmVWYXJpYWJsZUxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJDbG9zdXJlVmFyaWFibGVMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIEdsb2JhbFZhcmlhYmxlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkds
b2JhbFZhcmlhYmxlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJ
bmRleGVkUHJvcGVydHlMb2M6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFBvcnBlcnR5TG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbmRleGVkUHJvcGVydHlT
dG9yYWdlTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2ZMb2M6Cisg
ICAgICAgIG91dC5wcmludCgiSW5zdGFuY2VPZkxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgTXlBcmd1bWVudEJ5VmFsTG9jOgorICAgICAgICBvdXQucHJpbnQoIk15
QXJndW1lbnRCeVZhbExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
TXlBcmd1bWVudHNMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiTXlBcmd1bWVudHNMZW5n
dGhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVy
dHlMb2M6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eUxvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2tpcFRvcFNjb3BlTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlNraXBUb3BTY29wZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlwZWRB
cnJheUJ5dGVPZmZzZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHSGVhcExvY2F0aW9uX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAi
REZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gTG9j
YXRpb25LaW5kIHsKKyAgICBJbnZhbGlkTG9jYXRpb25LaW5kLAorICAgIAorICAgIEFycmF5TGVu
Z3RoTG9jLAorICAgIEJ1dHRlcmZseUxvYywKKyAgICBDaGVja0hhc0luc3RhbmNlTG9jLAorICAg
IENsb3N1cmVSZWdpc3RlcnNMb2MsCisgICAgQ2xvc3VyZVZhcmlhYmxlTG9jLAorICAgIEdldHRl
ckxvYywKKyAgICBHbG9iYWxWYXJpYWJsZUxvYywKKyAgICBJbmRleGVkUHJvcGVydHlMb2MsCisg
ICAgSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywKKyAgICBJbnN0YW5jZU9mTG9jLAorICAgIElu
dmFsaWRhdGlvblBvaW50TG9jLAorICAgIElzRnVuY3Rpb25Mb2MsCisgICAgSXNPYmplY3RMb2Ms
CisgICAgTXlBcmd1bWVudEJ5VmFsTG9jLAorICAgIE15QXJndW1lbnRzTGVuZ3RoTG9jLAorICAg
IE5hbWVkUHJvcGVydHlMb2MsCisgICAgU2V0dGVyTG9jLAorICAgIFNraXBUb3BTY29wZUxvYywK
KyAgICBUeXBlT2ZMb2MsCisgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCisgICAgVmFyaWFi
bGVMb2MKK307CisKK2NsYXNzIEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgSGVhcExvY2F0
aW9uKAorICAgICAgICBMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRMb2NhdGlvbktpbmQsCisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwID0gQWJzdHJhY3RIZWFwKCksCisgICAgICAgIE5vZGUq
IGJhc2UgPSBudWxscHRyLCBOb2RlKiBpbmRleCA9IG51bGxwdHIpCisgICAgICAgIDogbV9raW5k
KGtpbmQpCisgICAgICAgICwgbV9oZWFwKGhlYXApCisgICAgICAgICwgbV9iYXNlKGJhc2UpCisg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoa2luZCA9PSBJ
bnZhbGlkTG9jYXRpb25LaW5kKSA9PSAhaGVhcCk7CisgICAgICAgIEFTU0VSVCghIW1faGVhcCB8
fCAhbV9iYXNlKTsKKyAgICAgICAgQVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7CisgICAgfQor
ICAgIAorICAgIEhlYXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhl
YXAsIEVkZ2UgYmFzZSwgRWRnZSBpbmRleCA9IEVkZ2UoKSkKKyAgICAgICAgOiBIZWFwTG9jYXRp
b24oa2luZCwgaGVhcCwgYmFzZS5ub2RlKCksIGluZGV4Lm5vZGUoKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisg
ICAgICAgIDogbV9raW5kKEludmFsaWRMb2NhdGlvbktpbmQpCisgICAgICAgICwgbV9oZWFwKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fYmFzZShudWxscHRyKQorICAg
ICAgICAsIG1faW5kZXgobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1faGVhcDsgfQorICAgIAorICAgIExvY2F0aW9uS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgQWJzdHJhY3RIZWFwIGhlYXAo
KSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9iYXNlOyB9CisgICAgTm9kZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9raW5kICsgbV9oZWFwLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9pbmRl
eCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFw
TG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBv
dGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXAKKyAgICAg
ICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9oZWFwLmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKKyAg
ICBBYnN0cmFjdEhlYXAgbV9oZWFwOworICAgIE5vZGUqIG1fYmFzZTsKKyAgICBOb2RlKiBtX2lu
ZGV4OworfTsKKworc3RydWN0IEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSGVhcExvY2F0aW9uJiBhLCBjb25zdCBIZWFwTG9j
YXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6REZHOjpMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRG
Rzo6SGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6SGVhcExvY2F0aW9uSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hN
YXA8SGVhcExvY2F0aW9uLCBOb2RlKj4gSW1wdXJlTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0hlYXBM
b2NhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAJKHJldmlzaW9uIDE3MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3Jk
ZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CiAgICAgICAgIC8vIHRlbmQgdG8gaG9pc3Qg
ZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVy
KGRlcHRoRmlyc3QpOworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhG
aXJzdCk7CiAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFjazsKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcxMDUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MywxMCArMzczLDEx
IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOwogICAgIH0KLQotICAgIHZvaWQgY29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpCisg
ICAgCisgICAgdm9pZCByZXBsYWNlV2l0aChOb2RlKiBvdGhlcikKICAgICB7Ci0gICAgICAgIHNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBjb252ZXJ0VG9QaGFudG9tKCk7
CisgICAgICAgIHJlcGxhY2VtZW50ID0gb3RoZXI7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0
VG9JZGVudGl0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxNzEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgICAgIAog
ICAgIHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZnKTsK
KyAgICBwZXJmb3JtTG9jYWxDU0UoZGZnKTsKICAgICBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmlj
YXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3Jt
Q0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRm
Zyk7Ci0gICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAgY2hhbmdlZCB8PSBwZXJm
b3JtTG9jYWxDU0UoZGZnKTsKICAgICAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAg
ICAgICAgdmFsaWRhdGUoZGZnKTsKQEAgLTMxNiw3ICszMTYsNyBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhk
ZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3Jt
U1NBTG93ZXJpbmcoZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShkZmcpOworICAgICAgICBwZXJm
b3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGlu
ZyhkZmcpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybVBo
YW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21iaW5pbmco
ZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR2xvYmFsQ1NF
KGRmZyk7CiAgICAgICAgIAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxv
d2VkIHRvIGRvIGFueSBmdXJ0aGVyIGNvZGUgbW90aW9uIGJlY2F1c2Ugb3VyIHJlYXNvbmluZwog
ICAgICAgICAvLyBhYm91dCBjb2RlIG1vdGlvbiBhc3N1bWVzIHRoYXQgaXQncyBPSyB0byBpbnNl
cnQgR0MgcG9pbnRzIGluIHJhbmRvbSBwbGFjZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgUHVyZVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KEdyYXBoOjpvcE5hbWUob3AoKSkpOworICAgIG91dC5wcmludCgi
KCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChjaGlsZHJlbigpLmNo
aWxkKGkpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBjaGlsZHJlbigpLmNoaWxkKGkp
KTsKKyAgICB9CisgICAgaWYgKG1faW5mbykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2lu
Zm8pOworICAgIG91dC5wcmludCgiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1B1cmVWYWx1ZV9oCisjZGVmaW5lIERGR1B1cmVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBQdXJlVmFsdWUgeworcHVibGljOgorICAgIFB1cmVWYWx1ZSgpCisgICAg
ICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDApCisgICAgeworICAg
IH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3Qm
IGNoaWxkcmVuLCB1aW50cHRyX3QgaW5mbykKKyAgICAgICAgOiBtX29wKG9wKQorICAgICAgICAs
IG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAg
ICAgICBBU1NFUlQoIShkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICB9
CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbiwgY29uc3Qgdm9pZCogcHRyKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRy
ZW4sIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHB0cikpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBQdXJlVmFsdWUoTm9kZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQor
ICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSwgdWludHB0
cl90IGluZm8pCisgICAgICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkcmVu
LCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIGNv
bnN0IHZvaWQqIHB0cikKKyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hp
bGRyZW4sIHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2Rl
KQorICAgICAgICA6IFB1cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbikKKyAgICB7
CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDEpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1f
b3AgPT0gTGFzdE5vZGVUeXBlICYmICFtX2luZm87IH0KKyAgICAKKyAgICBOb2RlVHlwZSBvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB1aW50cHRyX3QgaW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2goc3RhdGljX2Nhc3Q8aW50
PihtX29wKSkgKyBtX2NoaWxkcmVuLmhhc2goKSArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFB1cmVWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vcCA9PSBvdGhlci5tX29wCisgICAgICAgICAgICAmJiBtX2NoaWxkcmVu
ID09IG90aGVyLm1fY2hpbGRyZW4KKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2lu
Zm87CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmIG1faW5mbzsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX29wOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGls
ZHJlbjsKKyAgICB1aW50cHRyX3QgbV9pbmZvOworfTsKKworc3RydWN0IFB1cmVWYWx1ZUhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFB1cmVWYWx1ZSYga2V5KSB7IHJldHVy
biBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHVyZVZhbHVlJiBh
LCBjb25zdCBQdXJlVmFsdWUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PEpTQzo6REZHOjpQdXJlVmFsdWU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQdXJlVmFsdWVI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxQ
dXJlVmFsdWUsIE5vZGUqPiBQdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgVmVj
dG9yPE5vZGUqPj4gUHVyZU11bHRpTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1cmVWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIo
KTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKICAgICAgICAgICAg
IGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBh
ZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAgICAgICAgYmxv
Y2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTcxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogCiAgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmly
c3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVy
KGRlcHRoRmlyc3QpOwogCiAgICAgICAgIGludCBtYXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxv
Y2tJbmRleC0tOyApIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MTA1MikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA3LTEwICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gREZHIHNo
b3VsZCBiZSBhYmxlIHRvIGRvIEdDU0UgaW4gU1NBIGFuZCB0aGlzIHNob3VsZCBiZSB1bmlmaWVk
IHdpdGggdGhlIENTRSBpbiBDUFMsIGFuZCBib3RoIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQgdXNl
IGFic3RyYWN0IGhlYXBzIGZvciByZWFzb25pbmcgYWJvdXQgZWZmZWN0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Njc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVz
cy1vYnZpb3VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nY3Nl
LXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2djc2UtcG9seS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nY3NlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1n
ZXQtbGVzcy1vYnZpb3VzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9nY3NlLXBvbHktZ2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9nY3NlLmpzOiBBZGRlZC4KKwogMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3Qg
cHJvcGVydGllcwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2NzZQorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2NzZS1w
b2x5LWdldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2
aW91cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
Y3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2NzZS1wb2x5
LWdldC1sZXNzLW9idmlvdXMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdl
dC1sZXNzLW9idmlvdXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHkt
Z2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHkt
Z2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9s
eS1nZXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2Nz
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvZ2NzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mt
b2J2aW91cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3Vz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKyhmdW5jdGlvbihvLCBwKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkg
PSAwIDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgYSA9IG8uZjsKKyAgICAgICAgdmFyIGIg
PSBvLmY7CisgICAgICAgIHZhciBjID0gby5mOworICAgICAgICB2YXIgZCA9IG8uZjsKKyAgICAg
ICAgaWYgKGQpIHsKKyAgICAgICAgICAgIHZhciBlID0gby5mOworICAgICAgICAgICAgdmFyIGYg
PSBvLmY7CisgICAgICAgICAgICB2YXIgZyA9IG8uZjsKKyAgICAgICAgICAgIHZhciBoID0gby5m
OworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgaiA9IG8uZjsKKyAg
ICAgICAgICAgICAgICB2YXIgayA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgbCA9IG8uZjsK
KyAgICAgICAgICAgICAgICB2YXIgbSA9IG8uZjsKKyAgICAgICAgICAgICAgICBpZiAobSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHIgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciBzID0gby5mOworICAgICAgICAgICAg
ICAgICAgICB2YXIgdCA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOwor
ICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IChuIC8gMikgKiBvLmYg
KyAobiAvIDIpICogcC5mKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9KSh7Zjo0MiwgZzowfSwge2c6MCwgZjo0M30pOwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5
LWdldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisoZnVuY3Rpb24oKXsKKyAg
ICB2YXIgbyA9IHtmOjQyLCBnOjB9OworICAgIHZhciBwID0ge2c6MCwgZjo0M307CisgICAgdmFy
IHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwIDsg
aSA8IG47ICsraSkgeworICAgICAgICB2YXIgYSA9IG8uZjsKKyAgICAgICAgdmFyIGIgPSBvLmY7
CisgICAgICAgIHZhciBjID0gby5mOworICAgICAgICB2YXIgZCA9IG8uZjsKKyAgICAgICAgaWYg
KGQpIHsKKyAgICAgICAgICAgIHZhciBlID0gby5mOworICAgICAgICAgICAgdmFyIGYgPSBvLmY7
CisgICAgICAgICAgICB2YXIgZyA9IG8uZjsKKyAgICAgICAgICAgIHZhciBoID0gby5mOworICAg
ICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgaiA9IG8uZjsKKyAgICAgICAg
ICAgICAgICB2YXIgayA9IG8uZjsKKyAgICAgICAgICAgICAgICB2YXIgbCA9IG8uZjsKKyAgICAg
ICAgICAgICAgICB2YXIgbSA9IG8uZjsKKyAgICAgICAgICAgICAgICBpZiAobSkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgcSA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBv
LmY7CisgICAgICAgICAgICAgICAgICAgIHZhciBzID0gby5mOworICAgICAgICAgICAgICAgICAg
ICB2YXIgdCA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAg
ICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IChuIC8gMikgKiBvLmYgKyAobiAv
IDIpICogcC5mKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3Nl
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Z2NzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisoZnVuY3Rpb24oKXsKKyAg
ICB2YXIgbyA9IHtmOjQyfTsKKyAgICB2YXIgcCA9IHtmOjQzfTsKKyAgICB2YXIgcmVzdWx0ID0g
MDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIHZhciBhID0gby5mOworICAgICAgICB2YXIgYiA9IG8uZjsKKyAgICAgICAg
dmFyIGMgPSBvLmY7CisgICAgICAgIHZhciBkID0gby5mOworICAgICAgICBpZiAoZCkgeworICAg
ICAgICAgICAgdmFyIGUgPSBvLmY7CisgICAgICAgICAgICB2YXIgZiA9IG8uZjsKKyAgICAgICAg
ICAgIHZhciBnID0gby5mOworICAgICAgICAgICAgdmFyIGggPSBvLmY7CisgICAgICAgICAgICBp
ZiAoaCkgeworICAgICAgICAgICAgICAgIHZhciBqID0gby5mOworICAgICAgICAgICAgICAgIHZh
ciBrID0gby5mOworICAgICAgICAgICAgICAgIHZhciBsID0gby5mOworICAgICAgICAgICAgICAg
IHZhciBtID0gby5mOworICAgICAgICAgICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBxID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG8uZjsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHMgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0g
by5mOworICAgICAgICAgICAgICAgICAgICBpZiAodCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCArPSByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7
CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLyAyKSAqIG8uZiArIChuIC8gMikgKiBwLmYp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234907</attachid>
            <date>2014-07-14 23:48:03 -0700</date>
            <delta_ts>2014-07-14 23:48:03 -0700</delta_ts>
            <desc>closer to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>146754</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMDU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNC0wNy0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBzaG91bGQgYmUgYWJsZSB0byBkbyBHQ1NFIGluIFNTQSBhbmQgdGhpcyBz
aG91bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBDU0UgaW4gQ1BTLCBhbmQgYm90aCBvZiB0aGVzZSB0
aGluZ3Mgc2hvdWxkIHVzZSBhYnN0cmFjdCBoZWFwcyBmb3IgcmVhc29uaW5nIGFib3V0IGVmZmVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY3
NworCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisgICAgICAgIAorICAgICAgICBU
aGlzIHJlbW92ZXMgdGhlIG9sZCBsb2NhbCBDU0UgcGhhc2UsIHdoaWNoIHdhcyBiYXNlZCBvbiBt
YW51YWxseSB3cml0dGVuIGJhY2t3YXJkLXNlYXJjaCAKKyAgICAgICAgcnVsZXMgZm9yIGFsbCBv
ZiB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRoaW5ncyB3ZSBjYXJlZCBhYm91dCwgYW5kIGFkZHMg
YSBuZXcgbG9jYWwvZ2xvYmFsCisgICAgICAgIENTRSAobG9jYWwgZm9yIENQUyBhbmQgZ2xvYmFs
IGZvciBTU0EpIHRoYXQgbGVhdmVzIHRoZSBub2RlIHNlbWFudGljcyBhbG1vc3QgZW50aXJlbHkg
dXAgdG8KKyAgICAgICAgY2xvYmJlcml6ZSgpLiBUaHVzLCB0aGUgQ1NFIHBoYXNlIGl0c2VsZiBq
dXN0IHdvcnJpZXMgYWJvdXQgdGhlIGFsZ29yaXRobXMgYW5kIGRhdGEKKyAgICAgICAgc3RydWN0
dXJlcyB1c2VkIGZvciBzdG9yaW5nIHNldHMgb2YgYXZhaWxhYmxlIHZhbHVlcy4gVGhpcyByZXN1
bHRzIGluIGEgbGFyZ2UgcmVkdWN0aW9uIGluCisgICAgICAgIGNvZGUgc2l6ZSBpbiBDU0VQaGFz
ZS5jcHAgd2hpbGUgZ3JlYXRseSBpbmNyZWFzaW5nIHRoZSBwaGFzZSdzIHBvd2VyIChzaW5jZSBp
dCBub3cgZG9lcworICAgICAgICBnbG9iYWwgQ1NFKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
aXMgYWNjb21wbGlzaGVkIGJ5IGFkZGluZyB0aGUgY29uY2VwdCBvZiAiZGVmIiB0byBjbG9iYmVy
aXplKCkuIElmIGNsb2JiZXJpemUoKSBjYWxscworICAgICAgICBkZWYoKSwgaXQgbWVhbnMgdGhh
dCB0aGUgbm9kZSBiZWluZyBhbmFseXplZCBtYWtlcyBhdmFpbGFibGUgc29tZSB2YWx1ZSBpbiBz
b21lIERGRyBub2RlLAorICAgICAgICBhbmQgdGhhdCBmdXR1cmUgYXR0ZW1wdHMgdG8gY29tcHV0
ZSB0aGF0IHZhbHVlIGNhbiBzaW1wbHkgdXNlIHRoYXQgbm9kZS4gVGhlcmUgYXJlIHR3bworICAg
ICAgICBraW5kcyBvZiB0aGluZ3MgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGRlZigpOgorICAgICAg
ICAKKyAgICAgICAgUHVyZVZhbHVlLiBUaGlzIGNhcHR1cmVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRv
IGRldGVybWluZSB3aGV0aGVyIHR3byBwdXJlIG5vZGVzIC0gbm9kZXMgdGhhdAorICAgICAgICAg
ICAgbmVpdGhlciByZWFkIG5vciB3cml0ZSwgYW5kIHByb2R1Y2UgYSB2YWx1ZSB0aGF0IGlzIGEg
Q1NFIGNhbmRpZGF0ZSAtIGFyZSBpZGVudGljYWwuIEl0CisgICAgICAgICAgICBjYXJyaWVzIHRo
ZSBOb2RlVHlwZSwgYW4gQWRqYWNlbmN5TGlzdCwgYW5kIG9uZSB3b3JkIG9mIG1ldGEtZGF0YS4g
VGhlIG1ldGEtZGF0YSBpcworICAgICAgICAgICAgdXN1YWxseSB1c2VkIGZvciB0aGluZ3MgbGlr
ZSB0aGUgYXJpdGhtZXRpYyBtb2RlIG9yIGNvbnN0YW50IHBvaW50ZXIuIFBhc3NpbmcgYQorICAg
ICAgICAgICAgUHVyZVZhbHVlIHRvIGRlZigpIG1lYW5zIHRoYXQgdGhlIG5vZGUgcHJvZHVjZXMg
YSB2YWx1ZSB0aGF0IGlzIHZhbGlkIGFueXdoZXJlIHRoYXQgdGhlCisgICAgICAgICAgICBub2Rl
IGRvbWluYXRlcy4KKyAgICAgICAgCisgICAgICAgIEhlYXBMb2NhdGlvbi4gVGhpcyBkZXNjcmli
ZXMgYSBsb2NhdGlvbiBpbiB0aGUgaGVhcCB0aGF0IGNvdWxkIGJlIHdyaXR0ZW4gdG8gb3IgcmVh
ZCBmcm9tLgorICAgICAgICAgICAgQm90aCBzdG9yZXMgYW5kIGxvYWRzIGNhbiBkZWYoKSBhIEhl
YXBMb2NhdGlvbi4gSGVhcExvY2F0aW9uIGNhcnJpZXMgYXJvdW5kIGFuIGFic3RyYWN0CisgICAg
ICAgICAgICBoZWFwIHRoYXQgYm90aCBzZXJ2ZXMgYXMgcGFydCBvZiB0aGUgIm5hbWUiIG9mIHRo
ZSBoZWFwIGxvY2F0aW9uICh0b2dldGhlciB3aXRoIHRoZQorICAgICAgICAgICAgb3RoZXIgZmll
bGRzIG9mIEhlYXBMb2NhdGlvbikgYW5kIGFsc28gdGVsbHMgdXMgd2hhdCB3cml0ZSgpJ3MgdG8g
d2F0Y2ggZm9yLiBJZiBzb21lb25lCisgICAgICAgICAgICB3cml0ZSgpJ3MgdG8gYW4gYWJzdHJh
Y3QgaGVhcCB0aGF0IG92ZXJsYXBzIHRoZSBoZWFwIGFzc29jaWF0ZWQgd2l0aCB0aGUgSGVhcExv
Y2F0aW9uLAorICAgICAgICAgICAgdGhlbiBpdCBtZWFucyB0aGF0IHRoZSB2YWx1ZXMgZm9yIHRo
YXQgbG9jYXRpb24gYXJlIG5vIGxvbmdlciBhdmFpbGFibGUuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFwcHJvYWNoIGlzIHN1ZmljaWVudGx5IGNsZXZlciB0aGF0IHRoZSBDU0VQaGFzZSBpdHNl
bGYgY2FuIGZvY3VzIG9uIHRoZSBtZWNoYW5pc20gb2YKKyAgICAgICAgdHJhY2tpbmcgdGhlIFB1
cmVWYWx1ZT0+bm9kZSBhbmQgSGVhcExvY2F0aW9uPT5ub2RlIG1hcHMsIHdpdGhvdXQgaGF2aW5n
IHRvIHdvcnJ5IGFib3V0CisgICAgICAgIGludGVycHJldGluZyB0aGUgc2VtYW50aWNzIG9mIGRp
ZmZlcmVudCBERkcgbm9kZSB0eXBlcyAtIHRoYXQgaXMgbm93IGFsbW9zdCBlbnRpcmVseSBpbgor
ICAgICAgICBjbG9iYmVyaXplKCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgc2xpZ2h0
IE9jdGFuZSBhbmQgU3VuU3BpZGVyIHNwZWVkLXVwLiBJbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRo
aW5ncywgaXQncyBub3QgYQorICAgICAgICBiaWcgd2luIGJlY2F1c2UgTExWTSB3YXMgYWxyZWFk
eSBnaXZpbmcgdXMgbW9zdCBvZiB3aGF0IHdlIG5lZWRlZCBpbiBpdHMgR1ZOLiBBbHNvLCB0aGUK
KyAgICAgICAgU3VuU3BpZGVyIHNwZWVkLXVwIGlzbid0IGZyb20gR0NTRSBhcyBtdWNoIGFzIGl0
J3MgYSBjbGVhbi11cCBvZiBsb2NhbCBDU0UuIFN0aWxsLCB0aGlzIGFsbAorICAgICAgICBhIGdv
b2QgdGhpbmcgLSBpdCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgTExWTSBJUiB3ZSBnZW5lcmF0ZSwg
aXQgcmVtb3ZlcyB0aGUgb2xkIENTRSdzIGhlYXAKKyAgICAgICAgbW9kZWxpbmcgKHdoaWNoIHdh
cyBhIGNvbnN0YW50IHNvdXJjZSBvZiBidWdzKSwgYW5kIGl0IGRvZXMgaW1wcm92ZSB0aGUgY29k
ZSB3ZSBnZW5lcmF0ZSBhCisgICAgICAgICp0aW55KiBiaXQuIEFsc28sIGFueSBmdXR1cmUgb3B0
aW1pemF0aW9ucyB0aGF0IGRlcGVuZCBvbiBHQ1NFIHdpbGwgbm93IGJlIGVhc2llciB0bworICAg
ICAgICBpbXBsZW1lbnQuCisgICAgICAgIAorICAgICAgICBEdXJpbmcgdGhlIGRldmVsb3BtZW50
IG9mIHRoaXMgcGF0Y2ggSSBhbHNvIHJhdGlvbmFsaXplZCBzb21lIG90aGVyIHN0dWZmLCBsaWtl
IEdyYXBoJ3MKKyAgICAgICAgb3JkZXJlZCB0cmF2ZXJzYWxzIC0gd2Ugbm93IGhhdmUgcHJlb3Jk
ZXIgYW5kIHBvc3RvcmRlciByYXRoZXIgdGhhbiBqdXN0ICJkZXB0aCBmaXJzdCIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAg
ICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2Vu
Y3lMaXN0OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUxvY2FsQ1NFKToKKyAgICAg
ICAgKEpTQzo6REZHOjpwZXJmb3JtR2xvYmFsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Q1NFUGhhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpy
dW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbmRJbmRleEZvclB1
cmVDU0UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwdXJlQ1NFKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y29uc3RhbnRDU0UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjb25zdGFudFN0b3JhZ2VQb2ludGVy
Q1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0Q2FsbGVlTG9h
ZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0
QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6OnNjb3BlZFZhckxvYWRFbGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVs
aW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tG
dW5jdGlvbkVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6Y2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkNTRVBoYXNlOjpjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGlt
aW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zm
c2V0TG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6Z2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja0FycmF5RWxp
bWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Z2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldE15U2NvcGVMb2FkRWxpbWluYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRF
bGltaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmludmFs
aWRhdGlvblBvaW50RWxpbWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmVsaW1pbmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OnBlcmZvcm1Ob2RlQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
cGVyZm9ybUJsb2NrQ1NFKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ1NF
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKiBkZmcv
REZHQ2xvYmJlclNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHMpOgorICAgICAg
ICAoSlNDOjpERkc6OmFkZFdyaXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHNBbmRX
cml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OnJlYWRzT3ZlcmxhcCk6CisgICAgICAgIChKU0M6
OkRGRzo6d3JpdGVzT3ZlcmxhcCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmlzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6aGFzUHVyZURl
ZnMpOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNXcml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6
OmFjY2Vzc2VzT3ZlcmxhcCk6CisgICAgICAgIChKU0M6OkRGRzo6d3JpdGVzT3ZlcmxhcCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVy
aXplKToKKyAgICAgICAgKEpTQzo6REZHOjpOb09wQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2hlY2tDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6REZHOjpSZWFkTWV0aG9kQ2xvYmJlcml6ZTo6UmVhZE1ldGhvZENsb2JiZXJpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6OldyaXRlTWV0aG9kQ2xvYmJl
cml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V3JpdGVNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpEZWZNZXRob2RD
bG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpmaXh1cEJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpnZXRCbG9ja3NJblByZU9yZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0
QmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0
aEZpcnN0U29ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldEJsb2Nr
c0luRGVwdGhGaXJzdE9yZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6SGVhcExvY2F0aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6
CisgICAgICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpIZWFwTG9jYXRpb246OkhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SGVh
cExvY2F0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6
a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpoZWFwKToKKyAgICAgICAg
KEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmJhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBM
b2NhdGlvbjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6REZHOjpIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpIZWFwTG9jYXRpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cmVwbGFjZVdpdGgpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHVyZVZhbHVlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
UHVyZVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlB1cmVWYWx1ZTo6UHVyZVZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAg
IChKU0M6OkRGRzo6UHVyZVZhbHVlOjpvcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVl
OjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjppbmZvKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQdXJlVmFsdWU6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OlB1cmVW
YWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlOjppc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlSGFzaDo6aGFz
aCk6CisgICAgICAgIChKU0M6OkRGRzo6UHVyZVZhbHVlSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNv
bnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisKIDIwMTQtMDct
MTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnQgdW5pbnRlbmRlZCBjaGFuZ2UgaW4gcjE3MTA1MS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MTA1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDYgKzE1Miw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0
LmNwcAogICAgIGRmZy9ERkdHcmFwaC5jcHAKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3Bw
CisgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCiAgICAgZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAg
IGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcApAQCAtMTg2LDYgKzE4
Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAg
ICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBk
ZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3MTA1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsNyBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcCIgLz4KQEAgLTQzNyw2ICs0MzgsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRh
dGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTYWZl
cG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0
aXZlSklULmNwcCIgLz4KQEAgLTk3NSw2ICs5NzcsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0dQUkluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdHcmFwaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBo
U2FmZXBvaW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVhcExv
Y2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNl
cnRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5oIiAvPgpAQCAtMTAxNSw2ICsxMDE4LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIiAv
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MTA1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsNiArNDMyLDEwIEBACiAJCTBGQjE0RTFGMTgx
MjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMUQxODEyNEFDRTAwOUI2QjRE
IC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTRFMjExODEyNTcwQjAwOUI2QjREIC8qIERGR0lu
bGluZUNhY2hlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCMTRFMjAxODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
QjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNEUyMjE4
MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjE3NjYwMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hl
YXBMb2NhdGlvbi5jcHAgKi87IH07CisJCTBGQjE3NjYxMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdI
ZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNzY2MjE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJl
VmFsdWUuY3BwICovOyB9OworCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIx
NzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5
IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAq
LzsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1
NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3OTE0RjVD
NDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5
IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKQEAgLTI2MDksNiArMjYxMywx
MCBAQAogCQkwRkIxNEUxRDE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMjAxODEyNTcwQjAw
OUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaDsgcGF0aCA9IGRmZy9ERkdJbmxpbmVD
YWNoZVdyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMjIxODEz
MDk1NTAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oOyBw
YXRoID0gZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdIZWFwTG9jYXRp
b24uY3BwOyBwYXRoID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSGVhcExvY2F0aW9uLmg7IHBh
dGggPSBkZmcvREZHSGVhcExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjE3NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHVyZVZhbHVlLmNwcDsgcGF0aCA9IGRmZy9E
RkdQdXJlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNzY1RjE5
NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1B1cmVWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1B1cmVWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3Ry
dWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVj
dHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR01pbmlmaWVkSUQuaDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZElELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTE5MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdB
bGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWxsb2NhdG9y
Lmg7IHBhdGggPSBkZmcvREZHQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MTE0LDYgKzUxMjIsOCBAQAogCQkJCTg2RUM5REI4MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHcmFwaC5oICovLAogCQkJCTBGMkZDQ0YyMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5jcHAgKi8sCiAJCQkJMEYyRkNDRjMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBo
U2FmZXBvaW50LmggKi8sCisJCQkJMEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBM
b2NhdGlvbi5jcHAgKi8sCisJCQkJMEZCMTc2NUQxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBM
b2NhdGlvbi5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVD
YWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5s
aW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MTkwLDYgKzUyMDAsOCBA
QAogCQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGQjE3NjVFMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAorCQkJCTBGQjE3NjVGMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJB
RDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0Yx
IC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY2NjZF
Q0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
ICovLApAQCAtNjExNyw2ICs2MTI5LDcgQEAKIAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIg
LyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5
NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFBODAwNkJBNTU0IC8qIERGR01lcmdlTW9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkR3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAv
KiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NjE1MjI4MDIwMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NTQsNiArNjY2
Nyw3IEBACiAJCQkJODZBRTY0QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJBNzhGMTEzQUFCODhGMDA1
QjdDMkMgLyogU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjE3NjYxMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMTYw
RkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBp
biBIZWFkZXJzICovLApAQCAtNzc0MCwxMSArNzc1NCwxMyBAQAogCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCMTc2
NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1
RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyQjE1NDc1MDAwMDAzRUQwRkYgLyog
REZHVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0RjE1
MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODc0RUQxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4
aXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE3MTA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDMxICs0MiwyMiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjZGVmaW5lIEZPUl9FQUNIX0FCU1RS
QUNUX0hFQVBfS0lORChtYWNybykgXAogICAgIG1hY3JvKEludmFsaWRBYnN0cmFjdEhlYXApIFwK
ICAgICBtYWNybyhXb3JsZCkgXAotICAgIG1hY3JvKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpIFwK
LSAgICBtYWNybyhBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpIFwKICAgICBtYWNybyhBcmd1bWVu
dHNfcmVnaXN0ZXJzKSBcCi0gICAgbWFjcm8oQXJndW1lbnRzX3Nsb3dBcmd1bWVudHMpIFwKLSAg
ICBtYWNybyhBcnJheUJ1ZmZlcl9kYXRhKSBcCi0gICAgbWFjcm8oQnV0dGVyZmx5X2FycmF5QnVm
ZmVyKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1
dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBc
CiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAotICAgIG1hY3JvKEpTQXJyYXlCdWZm
ZXJWaWV3X2xlbmd0aCkgXAotICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X21vZGUpIFwKLSAg
ICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpIFwKICAgICBtYWNybyhKU0NlbGxfc3Ry
dWN0dXJlSUQpIFwKICAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlKSBcCiAgICAgbWFjcm8o
SlNDZWxsX3R5cGVJbmZvRmxhZ3MpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlKSBc
Ci0gICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlKSBcCi0gICAgbWFjcm8oSlNGdW5jdGlv
bl9zY29wZUNoYWluKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBcCiAgICAgbWFj
cm8oSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpIFwKICAgICBtYWNybyhOYW1lZFByb3BlcnRp
ZXMpIFwKICAgICBtYWNybyhJbmRleGVkSW50MzJQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5k
ZXhlZERvdWJsZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMpIFwKKyAgICBtYWNybyhJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAogICAg
IG1hY3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhWYXJpYWJsZXMpIFwK
ICAgICBtYWNybyhUeXBlZEFycmF5UHJvcGVydGllcykgXApAQCAtNzYsNyArNjcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKICAgICAv
KiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIHRvIGluZGljYXRlIHRoYXQgdGhpcyBtYXkgZmly
ZSB3YXRjaHBvaW50cy4gVXN1YWxseSB0aGlzIGlzIG5ldmVyIGRpcmVjdGx5IHdyaXR0ZW4gYnV0
IGluc3RlYWQgd2UgdGVzdCB0byBzZWUgaWYgYSBub2RlIGNsb2JiZXJzIHRoaXM7IGl0IGp1c3Qg
c28gaGFwcGVucyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIHdvcmxkIHRvIGNsb2JiZXIgaXQuICov
XAogICAgIG1hY3JvKFdhdGNocG9pbnRfZmlyZSkgXAotICAgIC8qIFVzZSB0aGlzIGZvciByZWFk
cyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVyZWQs
IHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCisgICAgLyogVXNlIHRoZXNl
IGZvciByZWFkcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBj
bG9iYmVyZWQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCiAgICAgbWFj
cm8oTWlzY0ZpZWxkcykgXAogICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0
byBpbmRpY2F0ZSB0aGF0IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3Mg
YmVjYXVzZSB3ZSBkb24ndCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3Rz
IGF0IGFsbC4gKi9cCiAgICAgbWFjcm8oU2lkZVN0YXRlKQpAQCAtMjA3LDcgKzE5OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNEaXNqb2ludChjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKQorICAgIGJvb2wgaXNEaXNq
b2ludChjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKICAgICAgICAgQVNTRVJUKG90aGVy
LmtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKQEAgLTIyMCw3ICsyMTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBwYXlsb2FkKCkuaXNEaXNqb2ludChvdGhlci5wYXlsb2FkKCkp
OwogICAgIH0KICAgICAKLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEFic3RyYWN0SGVhcCYgb3Ro
ZXIpCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24g
MTcxMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBFZGdlIGNoaWxkMSwgRWRnZSBj
aGlsZDIsIEVkZ2UgY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBFZGdlIGNo
aWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5p
dGlhbGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKQEAgLTE1MSw2ICsxNTEsNDEgQEAgcHVi
bGljOgogICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAg
ICB9CiAgICAgCisgICAgQWRqYWNlbmN5TGlzdCBzYW5pdGl6ZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFkamFjZW5jeUxpc3QoRml4ZWQsIGNoaWxkMSgpLnNhbml0aXplZCgpLCBj
aGlsZDIoKS5zYW5pdGl6ZWQoKSwgY2hpbGQzKCkuc2FuaXRpemVkKCkpOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDA7CisgICAgICAgIGlmICghY2hpbGQxKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgcmVzdWx0ICs9IGNoaWxkMSgpLmhhc2goKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghY2hpbGQyKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgcmVzdWx0ICo9IDM7CisgICAgICAgIHJlc3VsdCArPSBjaGlsZDIoKS5o
YXNoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWNoaWxkMygpKQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICByZXN1
bHQgKz0gY2hpbGQzKCkuaGFzaCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFkamFjZW5jeUxpc3QmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpID09IG90aGVyLmNoaWxk
MSgpCisgICAgICAgICAgICAmJiBjaGlsZDIoKSA9PSBvdGhlci5jaGlsZDIoKQorICAgICAgICAg
ICAgJiYgY2hpbGQzKCkgPT0gb3RoZXIuY2hpbGQzKCk7CisgICAgfQorICAgIAogcHJpdmF0ZToK
ICAgICBFZGdlIG1fd29yZHNbU2l6ZV07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MTA1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsOCArMTcx
LDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBT
U0FEYXRhKEJhc2ljQmxvY2sqKTsKICAgICAgICAgflNTQURhdGEoKTsKICAgICB9OwotICAgIE93
blB0cjxTU0FEYXRhPiBzc2E7Ci0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBRGF0YT4gc3NhOwor
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIFZlY3Rv
cjxOb2RlKiwgOD4gbV9ub2RlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzEwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRl
ICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCkBAIC0zOSw5
ODQgKzQwLDY0MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNz
IENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKKy8vIFRoaXMgZmlsZSBjb250YWlucyB0d28gQ1NF
IGltcGxlbWVudGF0aW9uczogbG9jYWwgYW5kIGdsb2JhbC4gTG9jYWxDU0UgdHlwaWNhbGx5IHJ1
bnMgd2hlbiB3ZSdyZQorLy8gaW4gREZHIG1vZGUsIGkuZS4gd2Ugd2FudCB0byBjb21waWxlIHF1
aWNrbHkuIExvY2FsQ1NFIGNvbnRhaW5zIGEgbG90IG9mIG9wdGltaXphdGlvbnMgZm9yCisvLyBj
b21waWxlIHRpbWUuIEdsb2JhbENTRSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGZhaXJseSBzdHJh
aWdodC1mb3J3YXJkLiBJdCB3aWxsIGZpbmQgbW9yZQorLy8gb3B0aW1pemF0aW9uIG9wcG9ydHVu
aXRpZXMgYnkgdmlydHVlIG9mIGJlaW5nIGdsb2JhbC4KKworbmFtZXNwYWNlIHsKKworY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2NsYXNzIENsb2JiZXJGaWx0ZXIgewogcHVibGljOgot
ICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgImNvbW1v
biBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKKyAgICBDbG9iYmVyRmlsdGVyKEFic3RyYWN0
SGVhcCBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBydW4oKQorICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6OktleVZh
bHVlUGFpclR5cGUmIHBhaXIpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2ZpeHBvaW50U3RhdGUgIT0gQmVmb3JlRml4cG9pbnQpOwotICAgICAgICAKLSAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1l
bnRzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgICAgICBt
X2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKGRlcHRoRmlyc3RbaV0pOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgICAgICBw
ZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgICAgIHJldHVybiBtX2hlYXAu
b3ZlcmxhcHMocGFpci5rZXkuaGVhcCgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIAot
ICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgpCi0gICAgewotICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX2xhc3RTZWVuW21fY3VycmVudE5vZGUtPm9wKCldOwotICAgICAgICBpZiAo
cmVzdWx0ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPD0gbV9pbmRl
eEluQmxvY2spOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBBYnN0cmFjdEhl
YXAgbV9oZWFwOworfTsKIAotICAgIE5vZGUqIHB1cmVDU0UoTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCkuc2FuaXRpemVkKCk7Ci0gICAgICAg
IEVkZ2UgY2hpbGQyID0gbm9kZS0+Y2hpbGQyKCkuc2FuaXRpemVkKCk7Ci0gICAgICAgIEVkZ2Ug
Y2hpbGQzID0gbm9kZS0+Y2hpbGQzKCkuc2FuaXRpemVkKCk7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKG90aGVyTm9kZSA9PSBjaGlsZDEgfHwgb3RoZXJOb2RlID09IGNoaWxkMiB8fCBvdGhlck5v
ZGUgPT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGJyZWFrOworaW5saW5lIHZvaWQgY2xvYmJl
cihJbXB1cmVNYXAmIG1hcCwgQWJzdHJhY3RIZWFwIGhlYXApCit7CisgICAgQ2xvYmJlckZpbHRl
ciBmaWx0ZXIoaGVhcCk7CisgICAgbWFwLnJlbW92ZUlmKGZpbHRlcik7Cit9CiAKLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IG90aGVyTm9kZS0+b3AoKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRWRnZSBvdGhlckNoaWxkID0gb3Ro
ZXJOb2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGls
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgIT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDIoKS5zYW5pdGl6
ZWQoKTsKLSAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3RoZXJOb2RlOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNo
aWxkID0gb3RoZXJOb2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKLSAgICAgICAgICAgIGlmICgh
b3RoZXJDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICAg
ICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBjb25zdGFudENTRShOb2Rl
KiBub2RlKQorY2xhc3MgTG9jYWxDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgTG9jYWxDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJs
b2NhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9zbWFs
bEJsb2NrKGdyYXBoKQorICAgICAgICAsIG1fbGFyZ2VCbG9jayhncmFwaCkKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IG5vZGUtPm9wKCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNvbnN0
YW50KCkgIT0gbm9kZS0+Y29uc3RhbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogY29uc3RhbnRTdG9yYWdlUG9p
bnRlckNTRShOb2RlKiBub2RlKQorICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLT5vcCgpICE9IENvbnN0YW50U3RvcmFnZVBvaW50ZXIpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPnN0
b3JhZ2VQb2ludGVyKCkgIT0gbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3Jt
ID09IExvYWRTdG9yZSk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG90aGVy
Tm9kZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c2l6ZSgpIDw9IFNtYWxsTWFwczo6Y2FwYWNp
dHkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX3NtYWxsQmxvY2sucnVuKGJsb2NrKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fbGFyZ2VCbG9j
ay5ydW4oYmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAK
LSAgICBOb2RlKiBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBnZXRBcnJheUxl
bmd0aEVsaW1pbmF0aW9uKE5vZGUqIGFycmF5KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAg
ICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0
b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lz
dGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCBpbnQgdmFy
TnVtYmVyKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdp
c3RlcnMgJiYgbm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0g
Ci0gICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+dmFyTnVtYmVyKCkgIT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICYmIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgdmFySW5qZWN0aW9uV2F0Y2hw
b2ludEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBnZXRC
eVZhbExvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgQXJyYXlNb2Rl
IGFycmF5TW9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxIHx8IG5vZGUgPT0gY2hpbGQyKSAK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghbV9n
cmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jaGlsZDIoKSA9PSBjaGlsZDIKLSAgICAgICAgICAgICAgICAgICAg
JiYgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IGFycmF5TW9kZS50eXBlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAvLyBUeXBlZCBhcnJheXMgCi0g
ICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVk
QXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApID09IGNoaWxkMQotICAgICAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpID09IGNoaWxkMgotICAgICAgICAg
ICAgICAgICAgICAmJiBub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gYXJyYXlNb2RlLnR5cGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
Mikubm9kZSgpOwotICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1
dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGluZyBmcm9tLgotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQg
dGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCi0gICAgICAgICAgICAgICAg
Ly8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Uga25vdyB0aGF0IHRo
ZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgotICAgICAgICAgICAgICAgIC8vIC4uLiBleGNl
cHQgb2YgY291cnNlIGZvciB0eXBlZCBhcnJheXMsIHdoZXJlIGFsbCB0eXBlZCBhcnJheXMgY2xv
YmJlciBhbGwgb3RoZXIKLSAgICAgICAgICAgICAgICAvLyB0eXBlZCBhcnJheXMhICBBbiBJbnQz
MkFycmF5IGNhbiBhbGlhcyBhIEZsb2F0NjRBcnJheSBmb3IgZXhhbXBsZSwgYW5kIHNvIG9uLgot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBi
b29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihGcm96ZW5WYWx1ZSogZnVuY3Rpb24sIE5vZGUq
IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVy
ZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAm
JiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlv
bikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRp
b24oRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKG5vZGUgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0V4ZWN1dGFibGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0g
Y2hpbGQxICYmIG5vZGUtPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQsIE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0
dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250
YWlucyhub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5n
IGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndy
aXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1
cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRl
cyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNl
IGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Citwcml2YXRlOgorICAgIGNsYXNzIFNtYWxsTWFwcyB7CisgICAgcHVi
bGljOgorICAgICAgICAvLyBUaGlzIHBlcm1pdHMgU21hbGxNYXBzIHRvIGJlIHVzZWQgZm9yIGJs
b2NrcyB0aGF0IGhhdmUgdXAgdG8gMTAwIG5vZGVzLiBJbiBwcmFjdGljZSwKKyAgICAgICAgLy8g
ZmV3ZXIgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBpbiBhIGJsb2NrIGhhdmUgcHVyZSBkZWZzLCBh
bmQgZXZlbiBmZXdlciBoYXZlIGltcHVyZSBkZWZzLgorICAgICAgICAvLyBUaHVzLCBhIGNhcGFj
aXR5IGxpbWl0IG9mIDEwMCBwcm9iYWJseSBtZWFucyB0aGF0IHNvbWV3aGVyZSBhcm91bmQgfjQw
IHRoaW5ncyBtYXkgZW5kIHVwCisgICAgICAgIC8vIGluIG9uZSBvZiB0aGVzZSAic21hbGwiIGxp
c3QtYmFzZWQgbWFwcy4gVGhhdCBudW1iZXIgc3RpbGwgc2VlbXMgbGFyZ2Vpc2gsIGV4Y2VwdCB0
aGF0CisgICAgICAgIC8vIHRoZSBvdmVyaGVhZCBvZiBIYXNoTWFwcyBjYW4gYmUgcXVpdGUgaGln
aCBjdXJyZW50bHk6IGNsZWFyaW5nIHRoZW0sIG9yIGV2ZW4gcmVtb3ZpbmcKKyAgICAgICAgLy8g
ZW5vdWdoIHRoaW5ncyBmcm9tIHRoZW0sIGRlbGV0ZXMgKG9yIHJlc2l6ZXMpIHRoZWlyIGJhY2tp
bmcgc3RvcmUgZWFnZXJseS4gSGVuY2UKKyAgICAgICAgLy8gSGFzaE1hcHMgaW5kdWNlIGEgbG90
IG9mIG1hbGxvYyB0cmFmZmljLgorICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FwYWNp
dHkgPSAxMDA7CisgICAgCisgICAgICAgIFNtYWxsTWFwcygpCisgICAgICAgICAgICA6IG1fcHVy
ZUxlbmd0aCgwKQorICAgICAgICAgICAgLCBtX2ltcHVyZUxlbmd0aCgwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fcHVyZUxlbmd0aCA9IDA7CisgICAgICAgICAgICBtX2ltcHVyZUxlbmd0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wdXJlTGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5vdmVybGFwcyhtX2ltcHVyZU1h
cFtpXS5rZXkuaGVhcCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9pbXB1cmVNYXBbaS0tXSA9
IG1faW1wdXJlTWFwWy0tbV9pbXB1cmVMZW5ndGhdOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgCisgICAgICAgIE5vZGUqIGFkZFB1cmUoUHVyZVZhbHVlIHZhbHVlLCBOb2RlKiBub2Rl
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3B1cmVMZW5ndGg7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wdXJlTWFwW2ldLmtleSA9PSB2YWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHVyZU1hcFtpXS52YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobV9wdXJlTGVuZ3RoIDwgY2FwYWNp
dHkpOworICAgICAgICAgICAgbV9wdXJlTWFwW21fcHVyZUxlbmd0aCsrXSA9IFdURjo6S2V5VmFs
dWVQYWlyPFB1cmVWYWx1ZSwgTm9kZSo+KHZhbHVlLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBmaW5kUmVwbGFj
ZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2ltcHVyZUxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGlm
IChtX2ltcHVyZU1hcFtpXS5rZXkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2ltcHVyZU1hcFtpXS52YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisgICAgCisgICAgICAgIE5vZGUqIGFkZEltcHVyZShI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChOb2RlKiByZXN1bHQgPSBmaW5kUmVwbGFjZW1lbnQobG9jYXRpb24pKQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBBU1NFUlQobV9pbXB1cmVMZW5ndGgg
PCBjYXBhY2l0eSk7CisgICAgICAgICAgICBtX2ltcHVyZU1hcFttX2ltcHVyZUxlbmd0aCsrXSA9
IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBMb2NhdGlvbiwgTm9kZSo+KGxvY2F0aW9uLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJlTWFw
W2NhcGFjaXR5XTsKKyAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SGVhcExvY2F0aW9uLCBOb2Rl
Kj4gbV9pbXB1cmVNYXBbY2FwYWNpdHldOworICAgICAgICB1bnNpZ25lZCBtX3B1cmVMZW5ndGg7
CisgICAgICAgIHVuc2lnbmVkIG1faW1wdXJlTGVuZ3RoOworICAgIH07CisKKyAgICBjbGFzcyBM
YXJnZU1hcHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGFyZ2VNYXBzKCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX3B1cmVNYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIG1faW1wdXJlTWFwLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkK
KyAgICAgICAgeworICAgICAgICAgICAgY2xvYmJlcihtX2ltcHVyZU1hcCwgaGVhcCk7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgTm9kZSogYWRkUHVyZShQdXJlVmFsdWUgdmFsdWUsIE5vZGUq
IG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlTWFwLmFk
ZCh2YWx1ZSwgbm9kZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogZmluZFJl
cGxhY2VtZW50KEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faW1wdXJlTWFwLmdldChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgTm9kZSogYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZU1hcC5hZGQobG9jYXRp
b24sIG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hNYXA8UHVy
ZVZhbHVlLCBOb2RlKj4gbV9wdXJlTWFwOworICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwg
Tm9kZSo+IG1faW1wdXJlTWFwOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBz
PgorICAgIGNsYXNzIEJsb2NrQ1NFIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJsb2NrQ1NFKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgCisgICAgICAgIGJvb2wgcnVuKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX21hcHMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obV9ub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gSWRlbnRpdHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBydWxlIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGxv
Y2FsIENTRSwgc2luY2UgaW4gU1NBIGZvcm0gd2UgaGF2ZSBhbHJlYWR5CisgICAgICAgICAgICAg
ICAgICAgIC8vIGZhY3RvcmVkIHRoZSBib3VuZHMgY2hlY2sgb3V0IG9mIHRoZSBQdXRCeVZhbC4g
SXQncyBraW5kIG9mIGdyb3NzLCBidXQgd2UKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwg
aGF2ZSByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IFB1dEJ5VmFsQWxpYXMgaXMgYSBnb29kIG9wdGlt
aXphdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBpdCdzIGJldHRlciB0byBk
byBpdCB3aXRoIGEgc2luZ2xlIG5vZGUgcmF0aGVyIHRoYW4gc2VwYXJhdGluZyBvdXQgdGhlCisg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrSW5Cb3VuZHMuCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWwgfHwgbV9ub2RlLT5vcCgpID09IFB1dEJ5VmFs
RGlyZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBIZWFwTG9jYXRpb24gaGVhcDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kZS5p
c0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAgPSBIZWFwTG9jYXRpb24oCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJv
cGVydGllcywgYmFzZSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9k
ZS5pc0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAgPSBIZWFwTG9jYXRpb24oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJs
ZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtb2RlLmlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhcCA9IEhlYXBMb2NhdGlvbigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRl
eGVkQ29udGlndW91c1Byb3BlcnRpZXMsIGJhc2UsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2
QXJyYXk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1vZGUuaXNJbkJvdW5kcygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFw
ID0gSGVhcExvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleGVk
UHJvcGVydHlMb2MsIFR5cGVkQXJyYXlQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISFoZWFwICYmIG1fbWFwcy5maW5kUmVwbGFjZW1lbnQoaGVhcCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUo
bV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJy
YXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVj
dCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtl
IGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KICAgICAKLSAgICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKLSAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdm9p
ZCByZWFkKEFic3RyYWN0SGVhcCkgeyB9CisgICAgCisgICAgICAgIHZvaWQgd3JpdGUoQWJzdHJh
Y3RIZWFwIGhlYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbWFwcy53cml0ZShoZWFwKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBOb2RlKiBtYXRjaCA9IG1fbWFwcy5hZGRQdXJlKHZhbHVl
LCBtX25vZGUpOworICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0g
Y2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmlzU3Vi
c2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzICE9IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1
Y3R1cmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5
IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdz
IGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZp
Y2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBC
dXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7CisgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogYmFzZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSA9PSBiYXNlCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpID09IGJhc2UKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSBiYXNlKSAvLyBNdXN0IGJlIHNhbWUg
cHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5j
aGlsZDMoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1i
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGJhc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0
aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEg
c3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogYmFzZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KSA9PSBiYXNlCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0g
aWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJ
c1B1cmUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3Vs
YXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNh
dXNlIGEgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZ2V0UHJv
cGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92
ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3ZQotICAgICAgICAg
ICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjdXJyZW50bHkgY2Fu
J3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3QncwotICAgICAgICAg
ICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGl0IG1h
eSBjaGFuZ2UgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgICAgICAvLyBwb2ludGVyIG9mIGFueSBv
YmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBh
biBhcnJheSB3aXRoIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRo
ZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQotICAgICAgICAg
ICAgICAgICAgICAvLyBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9T
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5
aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5LgotICAgICAgICAgICAgICAgIC8v
IEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBtX21hcHMuYWRkSW1wdXJlKGxvY2F0aW9u
LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdldExvY2FsKSB7
CisgICAgICAgICAgICAgICAgLy8gRm9yIHVuY2FwdHVyZWQgbG9jYWxzLCB1c3VhbGx5IHRoZSBD
UFMgcmV0aHJlYWRpbmcgcGhhc2UgZG9lcyB0aGlzLiBCdXQgaXQncyBPSworICAgICAgICAgICAg
ICAgIC8vIGZvciB1cyB0byBtZXNzIHdpdGggbG9jYWxzIC0gcmVnYXJkbGVzcyBvZiB0aGVpciBj
YXB0dXJlZG5lc3MgLSBzbyBsb25nIGFzOgorICAgICAgICAgICAgICAgIC8vIAorICAgICAgICAg
ICAgICAgIC8vIC0gV2UgZGV0aHJlYWQgdGhlIGdyYXBoLiBBbnkgY2hhbmdlcyB3ZSBtYWtlIG1h
eSBpbnZhbGlkYXRlIHRoZSBhc3N1bXB0aW9ucyBvZgorICAgICAgICAgICAgICAgIC8vICAgb3Vy
IENQUyBmb3JtLCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBHZXRMb2NhbCBpcyBsaW5rZWQgdG8gdGhl
IHZhcmlhYmxlc0F0VGFpbC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IC0gV2UgZG9uJ3QgaW50cm9kdWNlIGEgUGhhbnRvbSBmb3IgdGhlIGNoaWxkIG9mIHRoZSBHZXRM
b2NhbC4gVGhpcyB3b3VsZG4ndCBiZQorICAgICAgICAgICAgICAgIC8vICAgdG90YWxseSB3cm9u
ZyBidXQgaXQgd291bGQgcGVzc2ltaXplIHRoZSBjb2RlLiBKdXN0IGJlY2F1c2UgdGhlcmUgaXMg
YQorICAgICAgICAgICAgICAgIC8vICAgR2V0TG9jYWwgZG9lc24ndCBtZWFuIHRoYXQgdGhlIGNo
aWxkIHdhcyBsaXZlLiBTaW1wbHkgcmVyb3V0aW5nIHRoZSBhbGwgdXNlcworICAgICAgICAgICAg
ICAgIC8vICAgb2YgdGhpcyBHZXRMb2NhbCB3aWxsIHByZXNlcnZlIHRoZSBsaXZlLWF0LWV4aXQg
aW5mb3JtYXRpb24ganVzdCBmaW5lLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gV2UgYWNjb21wbGlzaCB0aGUgbGF0dGVyIGJ5IGp1c3QgY2xlYXJpbmcgdGhlIGNoaWxk
OyB0aGVuIHRoZSBQaGFudG9tIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAvLyBpbnRyb2R1Y2Ug
d29uJ3QgaGF2ZSBjaGlsZHJlbiBhbmQgc28gaXQgd2lsbCBldmVudHVhbGx5IGp1c3QgYmUgZGVs
ZXRlZC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkgPSBF
ZGdlKCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOworICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsK
LSAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZSogY2hpbGQx
LCBBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoJiBtX2dyYXBoOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgICAgIE5vZGUqIG1fbm9kZTsK
KyAgICAKKyAgICAgICAgTWFwcyBtX21hcHM7CisgICAgfTsKIAotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9
PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheWlm
eToKLSAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAgICAgICAg
ICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91
ciBhcnJheS4KLSAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxk
IHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgQmxvY2tDU0U8U21hbGxNYXBzPiBtX3NtYWxsQmxv
Y2s7CisgICAgQmxvY2tDU0U8TGFyZ2VNYXBzPiBtX2xhcmdlQmxvY2s7Cit9OwogCi0gICAgTm9k
ZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEs
IEFycmF5TW9kZSBhcnJheU1vZGUpCitjbGFzcyBHbG9iYWxDU0VQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgR2xvYmFsQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAiZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikK
ICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGdldEludGVybmFsRmllbGRMb2FkRWxpbWlu
YXRpb24oTm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSkKKyAgICBib29sIHJ1bigpCiAgICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlm
IChub2RlID09IGNoaWxkMSkgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IG9wICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2lu
dFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2Rl
T3duZXJzKCk7CisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2Fy
eShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRl
cihtX3ByZU9yZGVyKTsKKyAgICAgICAgCisgICAgICAgIG1faW1wdXJlRGF0YU1hcC5yZXNpemUo
bV9ncmFwaC5udW1CbG9ja3MoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCBmaWd1cmUg
b3V0IHdoYXQgZ2V0cyBjbG9iYmVyZWQgYnkgYmxvY2tzLiBOb2RlIHRoYXQgdGhpcyB1c2VzIHRo
ZSBwcmVPcmRlciBsaXN0CisgICAgICAgIC8vIGZvciBjb252ZW5pZW5jZSBvbmx5LgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ByZU9yZGVyLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgbV9ibG9jayA9IG1fcHJlT3JkZXJbaV07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAm
bV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gbV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAg
ICAgICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1fYmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJl
RGF0YS0+d3JpdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQmFzZWQgb24g
bXkgZXhwZXJpZW5jZSBkb2luZyB0aGlzIGJlZm9yZSwgd2hhdCBmb2xsb3dzIG1pZ2h0IGhhdmUg
dG8gYmUgbWFkZSBpdGVyYXRpdmUuCisgICAgICAgIC8vIFJpZ2h0IG5vdyBpdCBkb2Vzbid0IGhh
dmUgdG8gYmUgaXRlcmF0aXZlIGJlY2F1c2UgZXZlcnl0aGluZyBpcyBkb21pbmF0b3ItYnNlZC4g
QnV0IHdoZW4KKyAgICAgICAgLy8gdmFsaWRhdGlvbiBpcyBlbmFibGVkLCB3ZSBjaGVjayBpZiBp
dGVyYXRpbmcgd291bGQgZmluZCBuZXcgQ1NFIG9wcG9ydHVuaXRpZXMuCiAKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGl0ZXJhdGUoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEl0ZXJhdGluZyBhIHNlY29uZCB0aW1lIHNob3VsZCBub3QgZmluZCBuZXcgQ1NFIG9wcG9y
dHVuaXRpZXMsIHVubGVzcyB3ZSBoYXZlIGEgYnVnLgorICAgICAgICBpZiAodmFsaWRhdGlvbkVu
YWJsZWQoKSkgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgIWl0ZXJhdGUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgCi0gICAg
Tm9kZSogZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbigpCisgICAgdm9pZCByZXNldCgpCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZl
cmVudCBzY29wZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2Ug
R2V0TXlTY29wZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIG1f
cHVyZVZhbHVlcy5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgbV9pbXB1cmVEYXRh
TWFwW2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOworICAgICAgICAgICAgbV9pbXB1cmVEYXRh
TWFwW2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAotICAgIE5vZGUqIGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCwgTm9kZSomIHJlbGV2YW50TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVy
aW5nKQorICAgIGJvb2wgaXRlcmF0ZSgpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3Ag
PSAwOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlBlcmZvcm1p
bmcgaXRlcmF0aW9uLlxuIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9
PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdl
dExvY2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnVubGlua2VkTG9jYWwo
KSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2Rl
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFNldExvY2FsOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlT3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIG1fYmxvY2sgPSBtX3ByZU9yZGVyW2ldOworICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0g
Jm1faW1wdXJlRGF0YU1hcFttX2Jsb2NrLT5pbmRleF07CisgICAgICAgICAgICBtX3dyaXRlc1Nv
RmFyLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4i
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2Rl
ID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICBMb29raW5nIGF0IG5vZGUgIiwgbV9ub2Rl
LCAiOlxuIik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6Ci0gICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2Fs
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obV9ub2RlKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50aXR5KSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMp
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ltcHVyZURhdGEt
PmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpbnZhbGlkYXRpb25Qb2ludEVsaW1pbmF0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBpZiAod3JpdGVzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBXYXRjaHBv
aW50X2ZpcmUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiBy
ZXBsYWNlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghcmVwbGFjZW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwg
ZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KLSAgICAgICAgbV9jdXJyZW50
Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKLSAgICAgICAgCi0gICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBlbGltaW5hdGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudE5v
ZGUtPm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOwogICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIG1fY2hhbmdlZDsKICAgICB9CisKKyAgICB2b2lkIHJlYWQoQWJzdHJhY3RIZWFwKSB7IH0K
ICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFudG9tVHlw
ZSA9IFBoYW50b20pCisgICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKICAgICB7Ci0g
ICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
cGhhbnRvbVR5cGUpOwotICAgICAgICAKLSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgY2xvYmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVhcCk7CisgICAgICAg
IG1fd3JpdGVzU29GYXIuYWRkKGhlYXApOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBDbG9iYmVyZWQsIG5ldyB0YWlsIG1hcDogIiwgbWFwRHVtcChtX2lt
cHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCksICJcbiIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAg
ICAgICAvLyBXaXRoIHB1cmUgdmFsdWVzIHdlIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRo
ZSBwb3NzaWJpbGl0eSBvZiBzb21lIGNvbnRyb2wgZmxvdyBwYXRoCisgICAgICAgIC8vIGNsb2Ji
ZXJpbmcgdGhlIHZhbHVlLiBTbywgd2UganVzdCBzZWFyY2ggZm9yIGFsbCBvZiB0aGUgbGlrZSB2
YWx1ZXMgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgLy8gY29tcHV0ZWQuIFdlIHBpY2sgb25lIHRo
YXQgaXMgaW4gYSBibG9jayB0aGF0IGRvbWluYXRlcyBvdXJzLiBOb3RlIHRoYXQgdGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIC8vIGEgUHVyZVZhbHVlIHdpbGwgbWFwIHRvIGEgbGlzdCBvZiBub2Rl
cywgc2luY2UgdGhlcmUgbWF5IGJlIG1hbnkgcGxhY2VzIGluIHRoZSBjb250cm9sCisgICAgICAg
IC8vIGZsb3cgZ3JhcGggdGhhdCBjb21wdXRlIGEgdmFsdWUgYnV0IG9ubHkgb25lIG9mIHRoZW0g
dGhhdCBkb21pbmF0ZXMgdXMuIHdlIG1heSBidWlsZCB1cAorICAgICAgICAvLyBhIGxhcmdlIGxp
c3Qgb2Ygbm9kZXMgdGhhdCBjb21wdXRlIHNvbWUgdmFsdWUgaW4gdGhlIGNhc2Ugb2YgZ25hcmx5
IGNvbnRyb2wgZmxvdy4gVGhpcworICAgICAgICAvLyBpcyBwcm9iYWJseSBPSy4KICAgICAgICAg
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
cHVyZVZhbHVlcy5hZGQodmFsdWUsIFZlY3RvcjxOb2RlKj4oKSk7CisgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQobV9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNp
ZGUtZWZmZWN0cy4KLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0g
ICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2Fz
ZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2FzZSBBcml0
aEFiczoKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAg
ICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAg
IGNhc2UgQXJpdGhTaW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgIGNhc2Ug
SXNVbmRlZmluZWQ6Ci0gICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVt
YmVyOgotICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAg
ICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAg
Y2FzZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIGNhc2UgU2tpcFNjb3BlOgotICAgICAgICBjYXNl
IEdldENsb3N1cmVSZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNh
c2UgVHlwZU9mOgotICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBjYXNl
IFZhbHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAgICAgICAgY2FzZSBEb3Vi
bGVSZXA6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6Ci0gICAgICAgIGNhc2UgSW50NTJSZXA6Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2Ug
QXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgIGNhc2UgQXJpdGhN
dWw6Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewot
ICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAg
IGlmICghY2FuZGlkYXRlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KCFzdWJzdW1lcyhjYW5kaWRhdGUtPmFyaXRoTW9kZSgpLCBub2RlLT5hcml0aE1vZGUoKSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXN1YnN1bWVzKG5vZGUtPmFyaXRoTW9kZSgpLCBjYW5kaWRh
dGUtPmFyaXRoTW9kZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FuZGlkYXRlLT5zZXRBcml0aE1vZGUobm9kZS0+YXJpdGhNb2RlKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZVtp
XTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoY2FuZGlk
YXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VX
aXRoKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1fbm9kZSk7CisgICAgfQorICAg
IAorICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAg
eworICAgICAgICAvLyBBdCB0aGlzIGluc3RhbnQsIG91ciAiYXZhaWxhYmxlQXRUYWlsIiByZWZs
ZWN0cyB0aGUgc2V0IG9mIHRoaW5ncyB0aGF0IGFyZSBhdmFpbGFibGUgaW4KKyAgICAgICAgLy8g
dGhpcyBibG9jayBzbyBmYXIuIFdlIGNoZWNrIHRoaXMgbWFwIHRvIGZpbmQgYmxvY2stbG9jYWwg
Q1NFIG9wcG9ydHVuaXRpZXMgYmVmb3JlIGRvaW5nCisgICAgICAgIC8vIGEgZ2xvYmFsIHNlYXJj
aC4KKyAgICAgICAgTm9kZSogbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5n
ZXQobG9jYXRpb24pOworICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEZvdW5kIGxvY2FsIG1hdGNoOiAi
LCBtYXRjaCwgIlxuIik7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIElmIGl0J3Mgbm90IGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGlu
IHRoZSBibG9jaywgYW5kIGF0IHNvbWUgcHJpb3IgcG9pbnQgaW4gdGhlIGJsb2NrCisgICAgICAg
IC8vIHdlIGhhdmUgY2xvYmJlcmVkIHRoaXMgaGVhcCBsb2NhdGlvbiwgdGhlbiB0aGVyZSBpcyBu
byBwb2ludCBpbiBkb2luZyBhIGdsb2JhbCBzZWFyY2guCisgICAgICAgIGlmIChtX3dyaXRlc1Nv
RmFyLm92ZXJsYXBzKGxvY2F0aW9uLmhlYXAoKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIE5vdCBsb29raW5nIGdsb2JhbGx5IGJl
Y2F1c2Ugb2YgbG9jYWwgY2xvYmJlcjogIiwgbV93cml0ZXNTb0ZhciwgIlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhp
cyBwZXJmb21zIGEgYmFja3dhcmQgc2VhcmNoIG92ZXIgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCB0
byBmaW5kIHNvbWUgcG9zc2libGUKKyAgICAgICAgLy8gbm9uLWxvY2FsIGRlZigpIHRoYXQgbWF0
Y2hlcyBvdXIgaGVhcCBsb2NhdGlvbi4gU3VjaCBhIG1hdGNoIGlzIG9ubHkgdmFsaWQgaWYgdGhl
cmUgZG9lcworICAgICAgICAvLyBub3QgZXhpc3QgYW55IHBhdGggZnJvbSB0aGF0IGRlZigpIHRv
IG91ciBibG9jayB0aGF0IGNvbnRhaW5zIGEgd3JpdGUoKSB0aGF0IG92ZXJsYXBzCisgICAgICAg
IC8vIG91ciBoZWFwLiBUaGlzIGFsZ29yaXRobSBsb29rcyBmb3IgYm90aCBvZiB0aGVzZSB0aGlu
Z3MgKHRoZSBtYXRjaGluZyBkZWYgYW5kIHRoZQorICAgICAgICAvLyBvdmVybGFwcGluZyB3cml0
ZXMpIGluIG9uZSBiYWNrd2FyZHMgREZTIHBhc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
aXMgc3RhcnRzIGJ5IGxvb2tpbmcgYXQgdGhlIHN0YXJ0aW5nIGJsb2NrJ3MgcHJlZGVjZXNzb3Jz
LCBhbmQgdGhlbiBpdCBjb250aW51ZXMgYWxvbmcKKyAgICAgICAgLy8gdGhlaXIgcHJlZGVjZXNz
b3JzLiBBcyBzb29uIGFzIHRoaXMgZmluZHMgYSBwb3NzaWJsZSBkZWYoKSAtIG9uZSB0aGF0IGRl
ZmluZXMgdGhlIGhlYXAKKyAgICAgICAgLy8gbG9jYXRpb24gd2Ugd2FudCB3aGlsZSBkb21pbmF0
aW5nIG91ciBzdGFydGluZyBibG9jayAtIGl0IGFzc3VtZXMgdGhhdCB0aGlzIG9uZSBtdXN0IGJl
CisgICAgICAgIC8vIHRoZSBtYXRjaC4gSXQgdGhlbiBsZXRzIHRoZSBERlMgb3ZlciBwcmVkZWNl
c3NvcnMgY29tcGxldGUsIGJ1dCBpdCBkb2Vzbid0IGFkZCB0aGUKKyAgICAgICAgLy8gZGVmKCkn
cyBwcmVkZWNlc3NvcnM7IHRoaXMgZW5zdXJlcyB0aGF0IGFueSBibG9ja3Mgd2UgdmlzaXQgdGhl
cmVhZnRlciBhcmUgb24gc29tZSBwYXRoCisgICAgICAgIC8vIGZyb20gdGhlIGRlZigpIHRvIHVz
LiBBcyBzb29uIGFzIHRoZSBERkcgZmluZHMgYSB3cml0ZSgpIHRoYXQgb3ZlcmxhcHMgdGhlIGxv
Y2F0aW9uJ3MKKyAgICAgICAgLy8gaGVhcCwgaXQgc3RvcHMsIGFzc3VtaW5nIHRoYXQgdGhlcmUg
aXMgbm8gcG9zc2libGUgbWF0Y2guIE5vdGUgdGhhdCB0aGUgd3JpdGUoKSBjYXNlIG1heQorICAg
ICAgICAvLyB0cmlnZ2VyIGJlZm9yZSB3ZSBmaW5kIGEgZGVmKCksIG9yIGFmdGVyLiBFaXRoZXIg
d2F5LCB0aGUgd3JpdGUoKSBjYXNlIGNhdXNlcyB0aGlzCisgICAgICAgIC8vIGZ1bmN0aW9uIHRv
IGltbWVkaWF0ZWx5IHJldHVybiBudWxscHRyLgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0
aGUgd3JpdGUoKSBpcyBmb3VuZCBiZWZvcmUgd2UgZmluZCB0aGUgZGVmKCksIHRoZW4gd2Uga25v
dyB0aGF0IGFueSBkZWYoKSB3ZSB3b3VsZAorICAgICAgICAvLyBmaW5kIHdvdWxkIGhhdmUgYSBw
YXRoIHRvIHVzIHRoYXQgdHJpcHMgb3ZlciB0aGUgd3JpdGUoKSBhbmQgaGVuY2UgYmVjb21lcyBp
bnZhbGlkLiBUaGlzCisgICAgICAgIC8vIGlzIGp1c3QgYSBkaXJlY3Qgb3V0Y29tZSBvZiB1cyBs
b29raW5nIGZvciBhIGRlZigpIHRoYXQgZG9taW5hdGVzIHVzLiBHaXZlbiBhIGJsb2NrIEEKKyAg
ICAgICAgLy8gdGhhdCBkb21pbmF0ZXMgYmxvY2sgQiAtIHNvIHRoYXQgQSBpcyB0aGUgb25lIHRo
YXQgd291bGQgaGF2ZSB0aGUgZGVmKCkgYW5kIEIgaXMgb3VyCisgICAgICAgIC8vIHN0YXJ0aW5n
IGJsb2NrIC0gd2Uga25vdyB0aGF0IGFueSBvdGhlciBibG9jayBtdXN0IGVpdGhlciBiZSBvbiB0
aGUgcGF0aCBmcm9tIEEgdG8gQiwgb3IKKyAgICAgICAgLy8gaXQgbXVzdCBiZSBvbiBhIHBhdGgg
ZnJvbSB0aGUgcm9vdCB0byBBLCBidXQgbm90IGJvdGguIFNvLCBpZiB3ZSBoYXZlbid0IGZvdW5k
IEEgeWV0IGJ1dAorICAgICAgICAvLyB3ZSBhbHJlYWR5IGhhdmUgZm91bmQgYSBibG9jayBDIHRo
YXQgaGFzIGEgd3JpdGUoKSwgdGhlbiBDIG11c3QgYmUgb24gc29tZSBwYXRoIGZyb20gQQorICAg
ICAgICAvLyB0byBCLCB3aGljaCBtZWFucyB0aGF0IEEncyBkZWYoKSBpcyBpbnZhbGlkIGZvciBv
dXIgcHVycG9zZXMuIEhlbmNlLCBiZWZvcmUgd2UgZmluZCB0aGUKKyAgICAgICAgLy8gZGVmKCks
IHN0b3BwaW5nIG9uIHdyaXRlKCkgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAv
LworICAgICAgICAvLyBTdG9wcGluZyBvbiB3cml0ZSgpIGlzIGFsc28gdGhlIHJpZ2h0IHRoaW5n
IHRvIGRvIGFmdGVyIHdlIGZpbmQgdGhlIGRlZigpLiBBZnRlciB3ZSBmaW5kCisgICAgICAgIC8v
IHRoZSBkZWYoKSwgd2UgZG9uJ3QgYWRkIHRoYXQgYmxvY2sncyBwcmVkZWNlc3NvcnMgdG8gdGhl
IHNlYXJjaCB3b3JrbGlzdC4gVGhhdCBtZWFucworICAgICAgICAvLyB0aGF0IGhlbmNlZm9ydGgg
dGhlIG9ubHkgYmxvY2tzIHdlIHdpbGwgc2VlIGluIHRoZSBzZWFyY2ggYXJlIGJsb2NrcyBvbiB0
aGUgcGF0aCBmcm9tCisgICAgICAgIC8vIHRoZSBkZWYoKSB0byB1cy4gSWYgYW55IHN1Y2ggYmxv
Y2sgaGFzIGEgd3JpdGUoKSB0aGF0IGNsb2JiZXJzIG91ciBoZWFwIHRoZW4gd2Ugc2hvdWxkCisg
ICAgICAgIC8vIGdpdmUgdXAuCisgICAgICAgIC8vCisgICAgICAgIC8vIEhlbmNlIHRoaXMgZ3Jh
cGggc2VhcmNoIGFsZ29yaXRobSBlbmRzIHVwIGJlaW5nIGRlY2VwdGl2ZWx5IHNpbXBsZTogYW55
IG92ZXJsYXBwaW5nCisgICAgICAgIC8vIHdyaXRlKCkgY2F1c2VzIHVzIHRvIGltbWVkaWF0ZWx5
IHJldHVybiBudWxscHRyLCBhbmQgYSBtYXRjaGluZyBkZWYoKSBtZWFucyB0aGF0IHdlIGp1c3QK
KyAgICAgICAgLy8gcmVjb3JkIGl0IGFuZCBuZWdsZWN0IHRvIHZpc2l0IGl0cyBwcmVjZXNzb3Jz
LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA4PiB3b3JrbGlzdDsKKyAg
ICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA4PiBzZWVuTGlzdDsKKyAgICAgICAgQml0VmVjdG9y
IHNlZW47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNl
c3NvciA9IG1fYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgIGlmICghc2Vlbi5n
ZXQocHJlZGVjZXNzb3ItPmluZGV4KSkgeworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2Vlbi5zZXQocHJlZGVjZXNzb3ItPmlu
ZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUg
KCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIHNlZW5MaXN0LmFwcGVuZChibG9jayk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBpbiBibG9jayAiLCAqYmxvY2ssICJcbiIpOworICAg
ICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2NrLT5p
bmRleF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHJlcXVpcmUgc3RyaWN0IGRv
bWluYXRpb24gYmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2VlIHRoaW5ncyBpbiBvdXIgb3duIGJs
b2NrIGlmCisgICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFmdGVyKiBvdXIgcG9zaXRpb24gaW4g
dGhlIGJsb2NrLiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sgZG9taW5hdGVzCisgICAgICAgICAg
ICAvLyBpdHNlbGYsIHRoZSB0aGluZ3MgaW4gdGhlIGJsb2NrIGFmdGVyIHVzIGRvbid0IGRvbWlu
YXRlIHVzLgorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhi
bG9jaywgbV9ibG9jaykgJiYgYmxvY2sgIT0gbV9ibG9jaykgeworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0IHN0cmlj
dGx5IGRvbWluYXRlcy5cbiIpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgIW1hdGNoKTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFiaWxpdHkgbWFwOiAiLCBtYXBE
dW1wKGRhdGEuYXZhaWxhYmxlQXRUYWlsKSwgIlxuIik7CisgICAgICAgICAgICAgICAgbWF0Y2gg
PSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJp
bGl0eTogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBleGFtaW5lIHRoZSBwcmVkZWNlc3NvcnMgb2YgYSBt
YXRjaC4gQXQgdGhpcyBwb2ludCB3ZSBqdXN0IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gZXN0YWJsaXNoIHRoYXQgb3RoZXIgYmxvY2tzIG9uIHRoZSBwYXRoIGZyb20gaGVyZSB0byB0
aGVyZSBkb24ndCBjbG9iYmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsb2NhdGlvbiB3
ZSdyZSBpbnRlcmVzdGVkIGluLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChj
YW5kaWRhdGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldENh
bGxlZUxvYWRFbGltaW5hdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBpZiAo
IXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgTm9kZSogcmVsZXZhbnRMb2NhbE9wOwotICAgICAgICAgICAgTm9kZSog
cG9zc2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSk7Ci0gICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxPcCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgIT0g
R2V0TG9jYWxVbmxpbmtlZAotICAgICAgICAgICAgICAgICYmIHJlbGV2YW50TG9jYWxPcC0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwot
ICAgICAgICAgICAgaWYgKCFzZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2VtZW50KSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3ZSByZXBsYWNlIGEg
R2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUgR2V0TG9jYWxV
bmxpbmtlZAotICAgICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgotICAgICAgICAgICAgaWYg
KHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKQotICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRvR2V0TG9jYWwodmFyaWFibGVBY2Nlc3NEYXRh
LCBwaGkpOwotCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldExvY2FsVW5saW5r
ZWQ6IHsKLSAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcElnbm9yZWQ7Ci0gICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExvYWRFbGltaW5hdGlvbihub2RlLT51bmxpbmtl
ZExvY2FsKCksIHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6
Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3NhcnkuIFNvbWUgcGhh
c2VzIHdpbGwgY29udmVydCBub2RlcyB0byBjb25zdGFudHMsCi0gICAgICAgICAgICAvLyB3aGlj
aCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NFIHRvIGNsZWFu
IHRoaXMgdXAuCi0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50
U3RvcmFnZVBvaW50ZXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudFN0b3Jh
Z2VQb2ludGVyQ1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChn
ZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbigpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25k
aXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCi0gICAgICAgIC8vIGJlIENT
RSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudC4KLSAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRp
Y3RlZE51bWVyaWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50
ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQgJiYgbV9n
cmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChyZXBsYWNlbWVudCkpCi0gICAgICAgICAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgRGVhbGluZyB3aXRoIHdyaXRlIHNl
dCAiLCBkYXRhLndyaXRlcywgIlxuIik7CisgICAgICAgICAgICBpZiAoZGF0YS53cml0ZXMub3Zl
cmxhcHMobG9jYXRpb24uaGVhcCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJlZC5cbiIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGhhbmRs
ZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3Rp
bGwKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNv
bmRpdGlvbnMgYXJlIG1ldC4KLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0Q2xvc3Vy
ZVZhcjogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBv
aW50OgotICAgICAgICAgICAgaWYgKHZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigp
KQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0
QnlWYWw6IHsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdl
KCkpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGdldEJ5VmFsTG9hZEVs
aW1pbmF0aW9uKGNoaWxkMS5ub2RlKCksIGNoaWxkMi5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+
cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgIGlmICghc2Vlbi5nZXQocHJlZGVjZXNz
b3ItPmluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBzZWVuLnNldChwcmVkZWNlc3Nvci0+aW5kZXgp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAg
ICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLT5m
dW5jdGlvbigpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1p
bmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAg
ICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBpZiAoY2hlY2tBcnJh
eUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKQot
ICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRUeXBl
ZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXI6Ci0gICAgICAgIGNhc2Ug
R2V0U2V0dGVyOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbnRlcm5hbEZpZWxk
TG9hZEVsaW1pbmF0aW9uKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
LSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5h
dGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9m
ZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkuaWRlbnRpZmllck51bWJlciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50Ogot
ICAgICAgICAgICAgaWYgKGludmFsaWRhdGlvblBvaW50RWxpbWluYXRpb24oKSkKLSAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBkbyBub3RoaW5nLgotICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNlZW5bbm9kZS0+b3Ao
KV0gPSBtX2luZGV4SW5CbG9jazsKKyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdHMgZm9y
IG5leHQgdGltZS4gV2UgY2FjaGUgdGhlbSBib3RoIGZvciB0aGlzIGJsb2NrIGFuZCBmb3IgYWxs
IG9mIG91cgorICAgICAgICAvLyBwcmVkZWNlc3NvcnMsIHNpbmNlIGV2ZW4gdGhvdWdoIHdlJ3Zl
IGFscmVhZHkgdmlzaXRlZCBvdXIgcHJlZGVjZXNzb3JzLCBvdXIgcHJlZGVjZXNzb3JzCisgICAg
ICAgIC8vIHByb2JhYmx5IGhhdmUgc3VjY2Vzc29ycyBvdGhlciB0aGFuIHVzLgorICAgICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgY2FjaGluZyBmYWlsZWQgc2VhcmNoZXMgYXMgd2VsbCwgd2hlbiBt
YXRjaCBpcyBudWxsLiBJdCdzIG5vdCBjbGVhciB0aGF0CisgICAgICAgIC8vIHRoZSByZWR1Y3Rp
b24gaW4gY29tcGlsZSB0aW1lIHdvdWxkIHdhcnJhbnQgdGhlIGluY3JlYXNlIGluIGNvbXBsZXhp
dHksIHRob3VnaC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNDg3NgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogc2Vlbkxpc3Qp
CisgICAgICAgICAgICBtX2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4XS5hdmFpbGFibGVBdFRh
aWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CisgICAgICAgIG1faW1wdXJlRGF0YS0+YXZhaWxhYmxl
QXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1h
dGNoOwogICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKCFibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIEdvdCBoZWFwIGxvY2F0aW9uIGRl
ZjogIiwgbG9jYXRpb24sICIgLT4gIiwgdmFsdWUsICJcbiIpOwogICAgICAgICAKLSAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IExhc3ROb2RlVHlwZTsgKytpKQotICAgICAgICAgICAgbV9sYXN0U2VlbltpXSA9IFVJTlRfTUFY
OworICAgICAgICBOb2RlKiBtYXRjaCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbik7CiAgICAg
ICAgIAotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBi
bG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRO
b2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIHBlcmZvcm1Ob2Rl
Q1NFKG1fY3VycmVudE5vZGUpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgIEdvdCBtYXRjaDogIiwgbWF0Y2gsICJcbiIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFtYXRjaCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgQWRkaW5nIGF0LXRhaWwgbWFwcGluZzogIiwgbG9jYXRpb24sICIg
LT4gIiwgdmFsdWUsICJcbiIpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZURh
dGEtPmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0
Y2gpOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Js
b2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwotICAgIHVuc2ln
bmVkIG1faW5kZXhJbkJsb2NrOwotICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlw
ZT4gbV9sYXN0U2VlbjsKLSAgICBib29sIG1fY2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdl
cyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4K
KyAgICBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICAgICAgSW1wdXJlQmxvY2tEYXRhKCkK
KyAgICAgICAgICAgIDogZGlkVmlzaXQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQ2xvYmJlclNldCB3cml0ZXM7CisgICAgICAgIEltcHVyZU1hcCBhdmFp
bGFibGVBdFRhaWw7CisgICAgICAgIGJvb2wgZGlkVmlzaXQ7CisgICAgfTsKKyAgICAKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IG1fcHJlT3JkZXI7CisKKyAgICBQdXJlTXVsdGlNYXAgbV9wdXJl
VmFsdWVzOworICAgIFZlY3RvcjxJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlRGF0YU1hcDsKKyAg
ICAKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBJbXB1
cmVCbG9ja0RhdGEqIG1faW1wdXJlRGF0YTsKKyAgICBDbG9iYmVyU2V0IG1fd3JpdGVzU29GYXI7
CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CiB9OwogCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgm
IGdyYXBoKQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgcGVyZm9ybUxvY2FsQ1NF
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZH
IExvY2FsQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExvY2FsQ1NFUGhhc2U+KGdy
YXBoKTsKK30KKworYm9vbCBwZXJmb3JtR2xvYmFsQ1NFKEdyYXBoJiBncmFwaCkKIHsKLSAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENTRSBQaGFzZSIpOwotICAgIHJldHVy
biBydW5QaGFzZTxDU0VQaGFzZT4oZ3JhcGgpOworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgR2xvYmFsQ1NFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPEdsb2Jh
bENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmgJKHJldmlzaW9uIDE3MTA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsMTEgQEAgY2xhc3Mg
R3JhcGg7CiAvLyBpdCBpcyByYXRoZXIgcHJvZml0YWJsZS4gSXQgaGFzIGZhaXJseSBhY2N1cmF0
ZSBoZWFwIG1vZGVsaW5nIGFuZCB3aWxsIG1hdGNoCiAvLyBhIHdpZGUgcmFuZ2Ugb2Ygc3ViZXhw
cmVzc2lvbiBzaW1pbGFyaXRpZXMuIEl0J3Mga25vd24gdG8gcHJvZHVjZSBiaWcgd2lucwogLy8g
b24gYSBmZXcgYmVuY2htYXJrcywgYW5kIGlzIHJlbGF0aXZlbHkgY2hlYXAgdG8gcnVuLgotYm9v
bCBwZXJmb3JtQ1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1Mb2NhbENTRShHcmFwaCYpOworCisv
LyBTYW1lLCBidXQgZ2xvYmFsLiBPbmx5IHdvcmtzIGZvciBTU0EuIFRoaXMgd2lsbCBmaW5kIGNv
bW1vbiBzdWJleHByZXNzaW9ucworLy8gYm90aCBpbiB0aGUgc2FtZSBibG9jayBhbmQgaW4gYW55
IGJsb2NrIHRoYXQgZG9taW5hdGVzIHRoZSBjdXJyZW50IGJsb2NrLgorYm9vbCBwZXJmb3JtR2xv
YmFsQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCShyZXZpc2lvbiAxNzEw
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMjIsMzcgKzEyMiwzOCBAQCBIYXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJl
clNldDo6c2V0T2YoCiB2b2lkIGFkZFJlYWRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xv
YmJlclNldCYgcmVhZFNldCkKIHsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7
Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkV3JpdGU7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9k
ZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xv
YmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgbm9PcCwgbm9PcCk7CiB9CiAKIHZvaWQgYWRk
V3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCiB7
Ci0gICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBOb09wQ2xvYmJlcml6ZSBub09wOwog
ICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3Jh
cGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiB9CiAKIHZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0LCBDbG9iYmVyU2V0JiB3
cml0ZVNldCkKIHsKICAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7CiAgICAgQ2xv
YmJlclNldEFkZCBhZGRXcml0ZSh3cml0ZVNldCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9k
ZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xv
YmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUsIG5vT3ApOwogfQogCiBib29s
IHJlYWRzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRT
ZXQpCiB7CiAgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFJlYWQocmVhZFNldCk7Ci0gICAgTm9P
cENsb2JiZXJpemUgYWRkV3JpdGU7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVh
ZCwgYWRkV3JpdGUpOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShn
cmFwaCwgbm9kZSwgYWRkUmVhZCwgbm9PcCwgbm9PcCk7CiAgICAgcmV0dXJuIGFkZFJlYWQucmVz
dWx0KCk7CiB9CiAKIGJvb2wgd3JpdGVzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IENsb2JiZXJTZXQmIHdyaXRlU2V0KQogewotICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7Cisg
ICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBDbG9iYmVyU2V0T3ZlcmxhcHMgYWRkV3JpdGUo
d3JpdGVTZXQpOwotICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRl
KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBub09wLCBhZGRXcml0ZSwgbm9PcCk7CiAg
ICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJldmlzaW9uIDE3MTA1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDI2ICszMiw1MSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2Jvb2wg
aXNQdXJlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICBDaGVja0Nsb2JiZXJpemUg
YWRkQWNjZXNzOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CisgICAgY2xvYmJlcml6ZShncmFw
aCwgbm9kZSwgYWRkQWNjZXNzLCBhZGRBY2Nlc3MsIG5vT3ApOworICAgIHJldHVybiAhYWRkQWNj
ZXNzLnJlc3VsdCgpOworfQorCitib29sIGhhc1B1cmVEZWZzKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKK3sKKyAgICBDaGVja0Nsb2JiZXJpemUgYWRkUHVyZTsKKyAgICBOb09wQ2xvYmJlcml6
ZSBub09wOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIG5vT3AsIGFkZFB1cmUp
OworICAgIHJldHVybiBhZGRQdXJlLnJlc3VsdCgpOworfQorCitIZWFwTG9jYXRpb24gZ2V0SGVh
cExvY2F0aW9uRGVmKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICBOb09wQ2xvYmJl
cml6ZSBub09wOworICAgIEdldEhlYXBMb2NhdGlvbkRlZkNsb2JiZXJpemUgZ2V0SGVhcExvY2F0
aW9uRGVmOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIG5vT3AsIGdldEhlYXBM
b2NhdGlvbkRlZik7CisgICAgcmV0dXJuIGdldEhlYXBMb2NhdGlvbkRlZi5sb2NhdGlvbigpOwor
fQorCiBib29sIGRvZXNXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewotICAgIE5v
T3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBDaGVj
a0Nsb2JiZXJpemUgYWRkV3JpdGU7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVh
ZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIG5vT3AsIGFkZFdyaXRl
LCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7CiB9CiAKIGJvb2wgYWNjZXNz
ZXNPdmVybGFwKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RIZWFwIGhlYXApCiB7
CisgICAgTm9PcENsb2JiZXJpemUgbm9PcDsKICAgICBBYnN0cmFjdEhlYXBPdmVybGFwcyBhZGRB
Y2Nlc3MoaGVhcCk7Ci0gICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkQWNjZXNzLCBhZGRB
Y2Nlc3MpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZEFjY2VzcywgYWRkQWNjZXNz
LCBub09wKTsKICAgICByZXR1cm4gYWRkQWNjZXNzLnJlc3VsdCgpOwogfQogCiBib29sIHdyaXRl
c092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdEhlYXAgaGVhcCkKIHsK
LSAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOworICAgIE5vT3BDbG9iYmVyaXplIG5vT3A7CiAg
ICAgQWJzdHJhY3RIZWFwT3ZlcmxhcHMgYWRkV3JpdGUoaGVhcCk7Ci0gICAgY2xvYmJlcml6ZShn
cmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5v
ZGUsIG5vT3AsIGFkZFdyaXRlLCBub09wKTsKICAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAxNzEwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDEzIEBACiAjaW5jbHVkZSAiREZHQWJz
dHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCIKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0hlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkRG
R1B1cmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3I+Ci12b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3Jp
dGVGdW5jdG9yJiB3cml0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3
cml0ZSwgRGVmRnVuY3RvciYgZGVmKQogewogICAgIC8vIFNvbWUgbm90ZXM6CiAgICAgLy8KQEAg
LTY5LDYgKzcxLDI5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAvLyAgIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNlIC0gdGhvdWdoIHRoZXkgcHJvYmFibHkg
Y291bGQgYmUgaWYgd2UgZGlkIHNvbWUKICAgICAvLyAgIHNtYWxsIGhhY2tpbmcuCiAgICAgCisg
ICAgLy8gV2hpbGUgcmVhZCgpIGFuZCB3cml0ZSgpIGFyZSBmYWlybHkgc2VsZi1leHBsYW5hdG9y
eSAtIHRoZXkgdHJhY2sgd2hhdCBzb3J0cyBvZiB0aGluZ3MgdGhlCisgICAgLy8gbm9kZSBtYXkg
cmVhZCBvciB3cml0ZSAtIHRoZSBkZWYoKSBmdW5jdG9yIGlzIG1vcmUgdHJpY2t5LiBJdCB0ZWxs
cyB5b3UgdGhlIGhlYXAgbG9jYXRpb25zCisgICAgLy8gKG5vdCBqdXN0IGFic3RyYWN0IGhlYXBz
KSB0aGF0IGFyZSBkZWZpbmVkIGJ5IGEgbm9kZS4gQSBoZWFwIGxvY2F0aW9uIGNvbXByaXNlcyBh
biBhYnN0cmFjdAorICAgIC8vIGhlYXAsIHNvbWUgbm9kZXMsIGFuZCBhIExvY2F0aW9uS2luZC4g
QnJpZWZseSwgYSBsb2NhdGlvbiBkZWZpbmVkIGJ5IGEgbm9kZSBpcyBhIGxvY2F0aW9uCisgICAg
Ly8gd2hvc2UgdmFsdWUgY2FuIGJlIGRlZHVjZWQgZnJvbSBsb29raW5nIGF0IHRoZSBub2RlIGl0
c2VsZi4gVGhlIGxvY2F0aW9ucyByZXR1cm5lZCBtdXN0IG9iZXkKKyAgICAvLyB0aGUgZm9sbG93
aW5nIHByb3BlcnRpZXM6CisgICAgLy8KKyAgICAvLyAtIElmIHNvbWVvbmUgd2FudHMgdG8gQ1NF
IGEgbG9hZCBmcm9tIHRoZSBoZWFwLCB0aGVuIGEgSGVhcExvY2F0aW9uIG9iamVjdCBzaG91bGQg
YmUKKyAgICAvLyAgIHN1ZmZpY2llbnQgdG8gZmluZCBhIHNpbmdsZSBtYXRjaGluZyBub2RlLgor
ICAgIC8vCisgICAgLy8gLSBUaGUgYWJzdHJhY3QgaGVhcCBpcyB0aGUgb25seSBhYnN0cmFjdCBo
ZWFwIHRoYXQgY291bGQgYmUgY2xvYmJlcmVkIHRvIGludmFsaWRhdGUgYW55IHN1Y2gKKyAgICAv
LyAgIENTRSBhdHRlbXB0LiBJLmUuIGlmIGNsb2JiZXJpemUoKSByZXBvcnRzIHRoYXQgb24gZXZl
cnkgcGF0aCBiZXR3ZWVuIHNvbWUgbm9kZSBhbmQgYSBub2RlCisgICAgLy8gICB0aGF0IGRlZmlu
ZXMgYSBIZWFwTG9jYXRpb24gdGhhdCBpdCB3YW50ZWQsIHRoZXJlIHdlcmUgbm8gd3JpdGVzIHRv
IGFueSBhYnN0cmFjdCBoZWFwIHRoYXQKKyAgICAvLyAgIG92ZXJsYXAgdGhlIGxvY2F0aW9uJ3Mg
aGVhcCwgdGhlbiB3ZSBoYXZlIGEgc291bmQgbWF0Y2guIEVmZmVjdGl2ZWx5LCB0aGUgc2VtYW50
aWNzIG9mCisgICAgLy8gICB3cml0ZSgpIGFuZCBkZWYoKSBhcmUgaW50ZXJ0d2luZWQgc3VjaCB0
aGF0IGZvciB0aGVtIHRvIGJlIHNvdW5kIHRoZXkgbXVzdCBhZ3JlZSBvbiB3aGF0CisgICAgLy8g
ICBpcyBDU0VhYmxlLgorICAgIC8vCisgICAgLy8gcmVhZCgpLCB3cml0ZSgpLCBhbmQgZGVmKCkg
Zm9yIGhlYXAgbG9jYXRpb25zIGlzIGVub3VnaCB0byBkbyBHQ1NFIG9uIGVmZmVjdGZ1bCB0aGlu
Z3MuIFRvCisgICAgLy8ga2VlcCB0aGluZ3Mgc2ltcGxlLCB0aGlzIGNvZGUgd2lsbCBhbHNvIGRl
ZigpIHB1cmUgdGhpbmdzLiBkZWYoKSBtdXN0IGJlIG92ZXJsb2FkZWQgdG8gYWxzbworICAgIC8v
IGFjY2VwdCBQdXJlVmFsdWUuIFRoaXMgd2F5LCBhIGNsaWVudCBvZiBjbG9iYmVyaXplKCkgY2Fu
IGltcGxlbWVudCBHQ1NFIGVudGlyZWx5IHVzaW5nIHRoZQorICAgIC8vIGluZm9ybWF0aW9uIHRo
YXQgY2xvYmJlcml6ZSgpIHBhc3NlcyB0byB3cml0ZSgpIGFuZCBkZWYoKS4gT3RoZXIgY2xpZW50
cyBvZiBjbG9iYmVyaXplKCkgY2FuCisgICAgLy8ganVzdCBpZ25vcmUgZGVmKCkgYnkgdXNpbmcg
YSBOb09wQ2xvYmJlcml6ZSBmdW5jdG9yLgorCiAgICAgaWYgKGVkZ2VzVXNlU3RydWN0dXJlKGdy
YXBoLCBub2RlKSkKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgIApAQCAt
NzYsMjMgKzEwMSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0
YW50KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIElkZW50aXR5Ogog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6
CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgog
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0VVJT
aGlmdDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNh
c2UgQXJpdGhTdWI6Ci0gICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICBjYXNlIEFyaXRoTXVsOgog
ICAgIGNhc2UgQXJpdGhJTXVsOgotICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1v
ZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0
aE1heDoKQEAgLTEwMCwyOCArMTI1LDQ3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIEFyaXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAg
ICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICBjYXNlIEdldFNj
b3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAg
Y2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKICAgICBjYXNlIElzTnVtYmVy
OgogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgotICAgIGNhc2UgQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcjoKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2Ug
RG91YmxlQXNJbnQzMjoKLSAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAg
IGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIE1ha2VSb3BlOgor
ICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEFyaXRoQWRkOgorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE5l
Z2F0ZToKKyAgICBjYXNlIEFyaXRoTXVsOgorICAgIGNhc2UgQXJpdGhEaXY6CisgICAgY2FzZSBB
cml0aE1vZDoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgY2FzZSBVSW50MzJUb051bWJl
cjoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5hcml0aE1vZGUoKSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGRlZihQdXJl
VmFsdWUoQ2hlY2tGdW5jdGlvbiwgQWRqYWNlbmN5TGlzdChBZGphY2VuY3lMaXN0OjpGaXhlZCwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5mdW5jdGlvbigpKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGRlZihQdXJlVmFsdWUo
bm9kZSwgbm9kZS0+ZXhlY3V0YWJsZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUsIG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIE1vdkhpbnQ6CkBAIC0xNDIsNyArMTg2LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAg
ICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICBj
YXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFBy
b2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgpAQCAtMTUxLDYgKzE5NCwx
MSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBJbnZh
bGlkYXRpb25Qb2ludDoKKyAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3Rh
dGUpOwpAQCAtMTk0LDEzICsyNDIsMzAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNo
cG9pbnQ6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFySW5qZWN0aW9uV2F0Y2hwb2ludExvYywgTWlzY0ZpZWxkcyksIG5vZGUpOworICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKKyAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnRMb2MsIE1pc2NGaWVsZHMpLCBub2RlKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElzT2JqZWN0TG9jLCBNaXNjRmllbGRzLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
SXNGdW5jdGlvbjoKLSAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2Ug
VHlwZU9mOgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFR5cGVPZkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgog
ICAgIGNhc2UgUHV0QnlJZDoKQEAgLTIyMywyNyArMjg4LDMzIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAg
ICAgICAgIHJlYWQoR2V0dGVyU2V0dGVyX2dldHRlcik7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oR2V0dGVyTG9jLCBHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2V0dGVyOgogICAgICAg
ICByZWFkKEdldHRlclNldHRlcl9zZXR0ZXIpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNl
dHRlckxvYywgR2V0dGVyU2V0dGVyX3NldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKICAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFj
azo6Q2FsbGVlKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
VmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBu
b2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51
bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRCeVZhbDogewpAQCAtMjczLDE4ICszNDQsMjAgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIFRoaXMgYXBwZWFycyB0byByZWFkIG5vdGhpbmcgYmVjYXVz
ZSBpdCdzIG9ubHkgcmVhZGluZyBpbW11dGFibGUgZGF0YS4KKyAgICAgICAgICAgIGRlZihQdXJl
VmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQo
QXJndW1lbnRzX3JlZ2lzdGVycyk7CiAgICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAg
IGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
SW50MzJQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFk
KFdvcmxkKTsKQEAgLTI5NCw4ICszNjcsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlm
IChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQo
V29ybGQpOwpAQCAtMzA1LDggKzM3OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAg
IGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIElu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigp
KSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmVhZChXb3JsZCk7CkBAIC0zMTUsNyArMzg4LDExIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICAvLyBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdy4KKyAgICAgICAgICAgIGlm
IChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3Zl
Y3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQXJyYXlTdG9yYWdlUHJv
cGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zMzAsOCArNDA3LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVBy
b3BlcnRpZXMpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwot
ICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAgICAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFBy
b3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM0Miw2ICs0MTksOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5h
cnJheU1vZGUoKTsKKyAgICAgICAgTm9kZSogYmFzZSA9IGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLm5vZGUoKTsKKyAgICAgICAgTm9kZSogaW5kZXggPSBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIHZhbHVlID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikubm9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBj
YXNlIEFycmF5OjpVbnByb2ZpbGVkOgpAQCAtMzYzLDkgKzQ0Myw5IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwot
ICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJl
YWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKICAgICAgICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7CisgICAgICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKQEAgLTM3OCw2ICs0NTgsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwog
ICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdy
aXRlKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCisgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9w
ZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgpAQCAtMzkwLDYgKzQ3Myw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHdyaXRl
KEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVy
dHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgpAQCAtNDAyLDYgKzQ4OCw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAgICAg
ICB3cml0ZShJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCisgICAgICAgICAgICAgICAgd3JpdGUo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElu
ZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBiYXNlLCBpbmRl
eCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CkBAIC00MjAsOSArNTA5LDEwIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld192
ZWN0b3IpOwotICAgICAgICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOworICAg
ICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBkZWYoKSBhbnl0aGlu
ZyBoZXJlIGJlY2F1c2UgdGhlc2Ugb3BlcmF0aW9ucyB0cnVuY2F0ZSB0aGVpciBpbnB1dHMuCisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
NzM3CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQzMCw3ICs1MjAsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgotICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0
dXJlSUQpOwogICAgICAgICByZXR1cm47CiAKQEAgLTQ0MiwxMiArNTMxLDE0IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0
YW5jZToKICAgICAgICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgQ2hlY2tF
eGVjdXRhYmxlOgotICAgICAgICByZWFkKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAgY2Fz
ZSBJbnN0YW5jZU9mOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5zdGFuY2VPZkxvYywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2Rl
LT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKKwogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICB3cml0ZShKU0NlbGxfc3Ry
dWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKQEAgLTQ1Nywx
NSArNTQ4LDE4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICAgICAgCiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUo
SlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlM
b2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2Jq
ZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9i
dXR0ZXJmbHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmpl
Y3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgQXJyYXlpZnk6CkBAIC00NzksNDIgKzU3Myw1OSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBub2RlLT5hcnJheU1vZGUoKS5hc1dvcmQoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisgICAg
ICAgIH0KKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQ6Ci0gICAgICAgIHJlYWQoSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsKLSAg
ICAgICAgcmVhZChKU0FycmF5QnVmZmVyVmlld19tb2RlKTsKLSAgICAgICAgcmVhZChCdXR0ZXJm
bHlfYXJyYXlCdWZmZXIpOwotICAgICAgICByZWFkKEFycmF5QnVmZmVyX2RhdGEpOworICAgICAg
ICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFR5cGVkQXJyYXlC
eXRlT2Zmc2V0TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6IHsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAg
ICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIHJlYWQo
SlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwot
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikpOworICAgICAgICBBYnN0cmFjdEhlYXAg
aGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRp
Zmllck51bWJlcik7CisgICAgICAgIHJlYWQoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogor
ICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogewogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJv
cGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsK
KyAgICAgICAgd3JpdGUoaGVhcCk7CiAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKICAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7CiAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxs
b2NhdGVzU3RvcmFnZSgpKQogICAgICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5j
aGlsZDEoKSksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgY2FzZSBQdXRC
eU9mZnNldDogeworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAg
ICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFBy
b3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIo
KSksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUg
PSBub2RlLT5hcnJheU1vZGUoKTsKQEAgLTUyNSw3OCArNjM2LDkwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxk
MSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2Rl
LmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJp
ZGVMZW5ndGgpOwotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZWFkKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQo
bW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpOworICAgICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhM
b2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZToKLSAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7
CisgICAgICAgIGlmIChncmFwaC5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCkpIHsKKyAg
ICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFp
bikpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpLCBub2RlKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBncmFwaC5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFNraXBUb3BTY29wZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3Jh
cGguYWN0aXZhdGlvblJlZ2lzdGVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICAg
ICAgcmVhZChKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xvYywgSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMsIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBj
YXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
bm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFy
aWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9k
ZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IFB1dENsb3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5v
ZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlh
YmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSksIG5vZGUt
PmNoaWxkMigpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
QWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVn
aXN0ZXJQb2ludGVyKCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwg
bm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9i
YWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50
ZXIoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBj
YXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRo
U2l6ZToKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgIGNhc2UgTmV3VHlwZWRBcnJheToK
KyAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBDU0UgZm9yIHRoZXNlIG5vZGVzLiBXZSBjYW4ndCBk
byB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheQorICAgICAgICAvLyBmb3Ig
dXMgdG8gY2xhaW0gYW4gaW5kZXggbm9kZSBhbmQgYSB2YWx1ZSBub2RlLiBXZSBjb3VsZCBtYWtl
IHRoaXMgd29yayBpZiB3ZSBsb3dlcmVkCisgICAgICAgIC8vIHRoZXNlIG5vZGVzIG9yIGlmIHdl
IGhhZCBhIG1vcmUgZmxleGlibGUgd2F5IG9mIGRlZigpJ2luZy4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNworICAgICAgICByZWFkKEhl
YXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAg
IGNhc2UgTmV3RnVuY3Rpb246Ci0gICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAg
ICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Cisg
ICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICBj
YXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQp
OwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICByZWFkKFdv
cmxkKTsKLSAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKwogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAg
IHJlYWQoUmVnRXhwU3RhdGUpOwpAQCAtNjA5LDYgKzczMiw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTYxNiw4
ICs3NDAsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgQ29tcGFyZUxlc3NFcToKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgaWYgKCFub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkpCisgICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2Up
KSB7CisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoV29ybGQp
OwogICAgICAgICByZXR1cm47CkBAIC02MjYsNiArNzUyLDggQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgewogICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICAgICAgY2FzZSBT
dHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGRlZiBh
IHB1cmUgdmFsdWUsIHVuZm9ydHVuYXRlbHkuIEknbGwgYXZvaWQgbG9hZC1lbGltaW5hdGluZyB0
aGVzZSBmb3IKKyAgICAgICAgICAgIC8vIG5vdy4KICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIENlbGxVc2U6CkBAIC02NTIsMTAgKzc4MCwxNiBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBjb2Rl
IG9yaWdpbiBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCisgICAgICAgIC8vIGhhdmUgZm9y
IFB1cmVWYWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgogICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEg
a2luZCBvZiBtX2luZm8sIGxpa2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENy
ZWF0ZWQ6CkBAIC02ODUsNyArODE5LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogY2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BDbG9i
YmVyaXplKCkgeyB9Ci0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CiB9
OwogCiBjbGFzcyBDaGVja0Nsb2JiZXJpemUgewpAQCAtNjk1LDcgKzgzMCw4IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsg
bV9yZXN1bHQgPSB0cnVlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KKyAgICB2b2lk
IG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJl
c3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCkBAIC03MDMsNiArODM5LDMw
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc3VsdDsKIH07CiAKK2Jvb2wgaXNQdXJlKEdyYXBo
JiwgTm9kZSopOyAvLyBQdXJlIG1lYW5zIGl0IGRvZXMgbm8gcmVhZHMgb3Igd3JpdGVzLgorYm9v
bCBoYXNQdXJlRGVmcyhHcmFwaCYsIE5vZGUqKTsgLy8gSGF2aW5nIHB1cmUgZGVmcyBtZWFucyB0
aGF0IHB1cmUgQ1NFIGlzIHBvc3NpYmxlLgorCitjbGFzcyBHZXRIZWFwTG9jYXRpb25EZWZDbG9i
YmVyaXplIHsKK3B1YmxpYzoKKyAgICBHZXRIZWFwTG9jYXRpb25EZWZDbG9iYmVyaXplKCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUpIHsgfQorICAg
IAorICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uLCBOb2Rl
KikKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICB9CisKKyAgICBI
ZWFwTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisKK3By
aXZhdGU6CisgICAgSGVhcExvY2F0aW9uIG1fbG9jYXRpb247Cit9OworCitIZWFwTG9jYXRpb24g
Z2V0SGVhcExvY2F0aW9uRGVmKEdyYXBoJiwgTm9kZSopOworCiBib29sIGRvZXNXcml0ZXMoR3Jh
cGgmLCBOb2RlKik7CiAKIGNsYXNzIEFic3RyYWN0SGVhcE92ZXJsYXBzIHsKQEAgLTczMCw2ICs4
OTAsNzIgQEAgcHJpdmF0ZToKIGJvb2wgYWNjZXNzZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIEFi
c3RyYWN0SGVhcCk7CiBib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RI
ZWFwKTsKIAorLy8gV2Ugd291bGQgaGF2ZSB1c2VkIGJpbmQoKSBmb3IgdGhlc2UsIGJ1dCBiZWNh
dXNlIG9mIHRoZSBvdmVybGFvZGluZyB0aGF0IHdlIGFyZSBkb2luZywKKy8vIGl0J3MgcXVpdGUg
YSBiaXQgb2YgY2xlYXJlciB0byBqdXN0IHdyaXRlIHRoaXMgb3V0IHRoZSB0cmFkaXRpb25hbCB3
YXkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBSZWFkTWV0aG9kQ2xvYmJlcml6ZSB7
CitwdWJsaWM6CisgICAgUmVhZE1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAgIDog
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUucmVhZChoZWFwKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgV3JpdGVNZXRob2RDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBXcml0ZU1ldGhv
ZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7
CisgICAgICAgIG1fdmFsdWUud3JpdGUoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBUJiBt
X3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZk1ldGhvZENsb2Ji
ZXJpemUgeworcHVibGljOgorICAgIERlZk1ldGhvZENsb2JiZXJpemUoVCYgdmFsdWUpCisgICAg
ICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0
b3IoKShQdXJlVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRpb24s
IE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX3ZhbHVlLmRlZihsb2NhdGlvbiwgbm9kZSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
QWRhcHRvciYgYWRhcHRvcikKK3sKKyAgICBSZWFkTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiBy
ZWFkKGFkYXB0b3IpOworICAgIFdyaXRlTWV0aG9kQ2xvYmJlcml6ZTxBZGFwdG9yPiB3cml0ZShh
ZGFwdG9yKTsKKyAgICBEZWZNZXRob2RDbG9iYmVyaXplPEFkYXB0b3I+IGRlZihhZGFwdG9yKTsK
KyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCByZWFkLCB3cml0ZSwgZGVmKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTcx
MDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBOZWVk
IHRvIHByb2Nlc3MgdGhlIGdyYXBoIGluIHJldmVyc2UgREZTIG9yZGVyLCBzbyB0aGF0IHdlIGdl
dCB0byB0aGUgdXNlcwogICAgICAgICAgICAgLy8gb2YgYSBub2RlIGJlZm9yZSB3ZSBnZXQgdG8g
dGhlIG5vZGUgaXRzZWxmLgogICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZp
cnN0OwotICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0
aEZpcnN0KTsKKyAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZp
cnN0KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6ZSgpOyBp
LS07KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAg
IH0gZWxzZSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
UGhhbnRvbSwgbm9kZS0+b3JpZ2luLCBlZGdlKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcxMDU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
OSwyNSArNjM5LDc1IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MK
ICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNo
U2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCisvLyBVdGlsaXRpZXMg
Zm9yIHByZS0gYW5kIHBvc3Qtb3JkZXIgdHJhdmVyc2Fscy4KK25hbWVzcGFjZSB7CisKK2lubGlu
ZSB2b2lkIGFkZEZvclByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9y
PEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sq
IGJsb2NrKQogewotICAgIGlmIChzZWVuLmNvbnRhaW5zKGJsb2NrKSkKKyAgICBpZiAoc2Vlbi5n
ZXQoYmxvY2stPmluZGV4KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHJlc3VsdC5hcHBl
bmQoYmxvY2spOwogICAgIHdvcmtsaXN0LmFwcGVuZChibG9jayk7Ci0gICAgc2Vlbi5hZGQoYmxv
Y2spOworICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJs
b2Nrc0luRGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK2VudW0g
UG9zdE9yZGVyVGFza0tpbmQgeworICAgIFBvc3RPcmRlckZpcnN0VmlzaXQsCisgICAgUG9zdE9y
ZGVyQWRkVG9SZXN1bHQKK307CisKK3N0cnVjdCBQb3N0T3JkZXJUYXNrIHsKKyAgICBQb3N0T3Jk
ZXJUYXNrKEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgUG9zdE9yZGVyVGFza0tpbmQga2lu
ZCA9IFBvc3RPcmRlckZpcnN0VmlzaXQpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CisgICAgUG9zdE9yZGVyVGFza0tpbmQgbV9raW5kOworfTsKKworaW5saW5lIHZvaWQg
YWRkRm9yUG9zdE9yZGVyKFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAxNj4mIHdvcmtsaXN0LCBCaXRW
ZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmdldChibG9j
ay0+aW5kZXgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd29ya2xpc3QuYXBwZW5kKFBv
c3RPcmRlclRhc2soYmxvY2ssIFBvc3RPcmRlckZpcnN0VmlzaXQpKTsKKyAgICBzZWVuLnNldChi
bG9jay0+aW5kZXgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBHcmFw
aDo6Z2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7CiAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgSGFzaFNldDxCYXNpY0Js
b2NrKj4gc2VlbjsKLSAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0LCBz
ZWVuLCBibG9jaygwKSk7CisgICAgQml0VmVjdG9yIHNlZW47CisgICAgYWRkRm9yUHJlT3JkZXIo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOwogICAgIHdoaWxlICghd29ya2xpc3Qu
aXNFbXB0eSgpKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxh
c3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
aS0tOykKLSAgICAgICAgICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3Qs
IHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAgICAgYWRkRm9yUHJlT3JkZXIo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQpCit7CisgICAgVmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2PiB3b3JrbGlzdDsKKyAgICBC
aXRWZWN0b3Igc2VlbjsKKyAgICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIGJsb2Nr
KDApKTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBQb3N0T3Jk
ZXJUYXNrIHRhc2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKHRhc2su
bV9raW5kKSB7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyRmlyc3RWaXNpdDoKKyAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKHRhc2subV9ibG9jaywgUG9zdE9yZGVyQWRk
VG9SZXN1bHQpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhc2subV9ibG9jay0+
bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIGFkZEZvclBvc3RPcmRlcih3
b3JrbGlzdCwgc2VlbiwgdGFzay5tX2Jsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTcxMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NjMsNyArNjYzLDggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJS
ZXBsYWNlbWVudHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7CiAgICAgCi0g
ICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQpOworICAgIHZvaWQgZ2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+
JiByZXN1bHQpOworICAgIHZvaWQgZ2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcmVzdWx0KTsKICAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCkBAIC03NTEs
NyArNzUyLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nl
c3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IpOwotICAgIHZvaWQgYWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9y
PEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3Qs
IEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKik7CiAgICAgCiAgICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKE5vZGUqIGFk
ZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludDMyLCBOb2RlKiBpbW1lZGlhdGUpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEhlYXBMb2NhdGlvbjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICI6IiwgbV9o
ZWFwKTsKKyAgICAKKyAgICBpZiAoIW1fYmFzZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG91dC5wcmludCgiWyIsIG1fYmFzZSk7CisgICAgaWYgKG1faW5kZXgpCisgICAgICAgIG91dC5w
cmludCgiLCAiLCBtX2luZGV4KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jYXRpb25L
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkTG9jYXRp
b25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRMb2NhdGlvbktpbmQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRhdGlvblBvaW50TG9jOgorICAg
ICAgICBvdXQucHJpbnQoIkludmFsaWRhdGlvblBvaW50TG9jIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBJc09iamVjdExvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc09i
amVjdExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNGdW5jdGlv
bkxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJc0Z1bmN0aW9uTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBUeXBlT2ZMb2M6CisgICAgICAgIG91dC5wcmludCgiVHlw
ZU9mTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXR0ZXJMb2M6
CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTZXR0ZXJMb2M6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyTG9jIik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBWYXJpYWJsZUxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlMZW5ndGhMb2M6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlMZW5ndGhM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZseUxvYzoK
KyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2VMb2M6CisgICAgICAgIG91dC5wcmludCgi
Q2hlY2tIYXNJbnN0YW5jZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgQ2xvc3VyZVJlZ2lzdGVyc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJDbG9zdXJlUmVnaXN0
ZXJzTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDbG9zdXJlVmFy
aWFibGVMb2M6CisgICAgICAgIG91dC5wcmludCgiQ2xvc3VyZVZhcmlhYmxlTG9jIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHbG9iYWxWYXJpYWJsZUxvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkUHJv
cGVydHlTdG9yYWdlTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJ
bnN0YW5jZU9mTG9jOgorICAgICAgICBvdXQucHJpbnQoIkluc3RhbmNlT2ZMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRCeVZhbExvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJNeUFyZ3VtZW50QnlWYWxMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIE15QXJndW1lbnRzTGVuZ3RoTG9jOgorICAgICAgICBvdXQucHJpbnQo
Ik15QXJndW1lbnRzTGVuZ3RoTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNraXBUb3BTY29wZUxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJTa2lwVG9wU2NvcGVMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jOgorICAgICAgICBv
dXQucHJpbnQoIlR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlZhckluamVjdGlvbldhdGNocG9pbnRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKKyAgICAgICAg
b3V0LnByaW50KCJBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZH
SGVhcExvY2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJz
dHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2VudW0gTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkTG9jYXRpb25L
aW5kLAorICAgIAorICAgIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYywKKyAgICBBcnJh
eUxlbmd0aExvYywKKyAgICBCdXR0ZXJmbHlMb2MsCisgICAgQ2hlY2tIYXNJbnN0YW5jZUxvYywK
KyAgICBDbG9zdXJlUmVnaXN0ZXJzTG9jLAorICAgIENsb3N1cmVWYXJpYWJsZUxvYywKKyAgICBH
ZXR0ZXJMb2MsCisgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSW5kZXhlZFByb3BlcnR5TG9j
LAorICAgIEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsCisgICAgSW5zdGFuY2VPZkxvYywKKyAg
ICBJbnZhbGlkYXRpb25Qb2ludExvYywKKyAgICBJc0Z1bmN0aW9uTG9jLAorICAgIElzT2JqZWN0
TG9jLAorICAgIE15QXJndW1lbnRCeVZhbExvYywKKyAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywK
KyAgICBOYW1lZFByb3BlcnR5TG9jLAorICAgIFNldHRlckxvYywKKyAgICBTa2lwVG9wU2NvcGVM
b2MsCisgICAgVHlwZU9mTG9jLAorICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAorICAgIFZh
ckluamVjdGlvbldhdGNocG9pbnRMb2MsCisgICAgVmFyaWFibGVMb2MKK307CisKK2NsYXNzIEhl
YXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgSGVhcExvY2F0aW9uKAorICAgICAgICBMb2NhdGlv
bktpbmQga2luZCA9IEludmFsaWRMb2NhdGlvbktpbmQsCisgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwID0gQWJzdHJhY3RIZWFwKCksCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCBOb2Rl
KiBpbmRleCA9IG51bGxwdHIpCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9o
ZWFwKGhlYXApCisgICAgICAgICwgbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoa2luZCA9PSBJbnZhbGlkTG9jYXRpb25LaW5kKSA9
PSAhaGVhcCk7CisgICAgICAgIEFTU0VSVCghIW1faGVhcCB8fCAhbV9iYXNlKTsKKyAgICAgICAg
QVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7CisgICAgfQorICAgIAorICAgIEhlYXBMb2NhdGlv
bihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhlYXAsIEVkZ2UgYmFzZSwgRWRnZSBp
bmRleCA9IEVkZ2UoKSkKKyAgICAgICAgOiBIZWFwTG9jYXRpb24oa2luZCwgaGVhcCwgYmFzZS5u
b2RlKCksIGluZGV4Lm5vZGUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEhlYXBMb2NhdGlv
bihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9raW5kKEludmFs
aWRMb2NhdGlvbktpbmQpCisgICAgICAgICwgbV9oZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlKQorICAgICAgICAsIG1fYmFzZShudWxscHRyKQorICAgICAgICAsIG1faW5kZXgobnVsbHB0
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1faGVhcDsgfQorICAgIAorICAgIExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CisgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hl
YXA7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgTm9k
ZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9oZWFwLmhhc2go
KSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9pbmRleCkgKyBtX2tpbmQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRpb24mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAg
ICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXAKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBv
dGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9oZWFwLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICBBYnN0cmFjdEhlYXAgbV9oZWFw
OworICAgIE5vZGUqIG1fYmFzZTsKKyAgICBOb2RlKiBtX2luZGV4OworfTsKKworc3RydWN0IEhl
YXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2Nh
dGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgSGVhcExvY2F0aW9uJiBhLCBjb25zdCBIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpMb2Nh
dGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiB7Cisg
ICAgdHlwZWRlZiBKU0M6OkRGRzo6SGVhcExvY2F0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpT
Qzo6REZHOjpIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBOb2Rl
Kj4gSW1wdXJlTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0hlYXBMb2NhdGlvbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDE3MTA1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gRm9yIG1heGlt
dW0gcHJvZml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2Ug
Z2VuZXJhbGx5CiAgICAgICAgIC8vIHRlbmQgdG8gaG9pc3QgZG9taW5hdG9ycyBiZWZvcmUgZG9t
aW5hdGVlcy4KICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAg
ICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAg
ICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CiAgICAgICAgIFZlY3Rv
cjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFjazsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIGZvciAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTcxMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MywxMCArMzczLDExIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgIH0KLQotICAg
IHZvaWQgY29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpCisgICAgCisgICAgdm9pZCByZXBsYWNl
V2l0aChOb2RlKiBvdGhlcikKICAgICB7Ci0gICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOworICAgICAgICBjb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgIHJlcGxhY2VtZW50
ID0gb3RoZXI7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9JZGVudGl0eSgpOwpAQCAtNDQz
LDYgKzQ0NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKG9wKCkgPT0gR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBDb25zdGFudFN0b3JhZ2VQb2lu
dGVyOwogICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
OworICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbnZl
cnRUb0dldExvY2FsVW5saW5rZWQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNzEwNTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsMTQg
KzI1MCwxNCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
ICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgICAgIAogICAgIHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlv
bihkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICBwZXJmb3JtTG9jYWxDU0UoZGZnKTsK
ICAgICBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BT
UmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0
YW50Rm9sZGluZyhkZmcpOwogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGNoYW5nZWQg
fD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7Ci0gICAgY2hhbmdlZCB8PSBwZXJmb3Jt
Q1NFKGRmZyk7CisgICAgY2hhbmdlZCB8PSBwZXJmb3JtTG9jYWxDU0UoZGZnKTsKICAgICAKICAg
ICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKQEAgLTMx
Niw3ICszMTYsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAg
ICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29u
dmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmcoZGZnKTsKLSAgICAgICAg
cGVyZm9ybUNTRShkZmcpOworICAgICAgICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwpAQCAtMzI5LDcgKzMyOSw3IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9y
bUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1JbnRlZ2VyQ2hlY2tDb21iaW5pbmcoZGZnKTsKLSAgICAgICAgcGVyZm9ybUNTRShk
ZmcpOworICAgICAgICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIAogICAgICAgICAv
LyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRvIGFueSBmdXJ0aGVyIGNvZGUg
bW90aW9uIGJlY2F1c2Ugb3VyIHJlYXNvbmluZwogICAgICAgICAvLyBhYm91dCBjb2RlIG1vdGlv
biBhc3N1bWVzIHRoYXQgaXQncyBPSyB0byBpbnNlcnQgR0MgcG9pbnRzIGluIHJhbmRvbSBwbGFj
ZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1B1cmVWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUHVyZVZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KEdyYXBoOjpv
cE5hbWUob3AoKSkpOworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytp
KSB7CisgICAgICAgIGlmIChjaGlsZHJlbigpLmNoaWxkKGkpKQorICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBjaGlsZHJlbigpLmNoaWxkKGkpKTsKKyAgICB9CisgICAgaWYgKG1faW5mbykK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2luZm8pOworICAgIG91dC5wcmludCgiKSIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1cmVWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXJlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1B1cmVWYWx1ZV9oCisjZGVmaW5lIERGR1B1
cmVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQdXJlVmFsdWUgewor
cHVibGljOgorICAgIFB1cmVWYWx1ZSgpCisgICAgICAgIDogbV9vcChMYXN0Tm9kZVR5cGUpCisg
ICAgICAgICwgbV9pbmZvKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9k
ZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuLCB1aW50cHRyX3QgaW5mbykK
KyAgICAgICAgOiBtX29wKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4uc2FuaXRp
emVkKCkpCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgICAgICBBU1NFUlQoIShk
ZWZhdWx0RmxhZ3Mob3ApICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICB9CisgICAgCisgICAgUHVy
ZVZhbHVlKE5vZGVUeXBlIG9wLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbiwgY29uc3Qg
dm9pZCogcHRyKQorICAgICAgICA6IFB1cmVWYWx1ZShvcCwgY2hpbGRyZW4sIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHB0cikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9k
ZVR5cGUgb3AsIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFB1cmVW
YWx1ZShvcCwgY2hpbGRyZW4sIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBQdXJlVmFsdWUoTm9kZSogbm9kZSwgdWludHB0cl90IGluZm8pCisgICAg
ICAgIDogUHVyZVZhbHVlKG5vZGUtPm9wKCksIG5vZGUtPmNoaWxkcmVuLCBpbmZvKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgUHVyZVZhbHVlKE5vZGUqIG5vZGUsIGNvbnN0IHZvaWQqIHB0cikK
KyAgICAgICAgOiBQdXJlVmFsdWUobm9kZS0+b3AoKSwgbm9kZS0+Y2hpbGRyZW4sIHB0cikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFB1cmVWYWx1ZShOb2RlKiBub2RlKQorICAgICAgICA6IFB1
cmVWYWx1ZShub2RlLT5vcCgpLCBub2RlLT5jaGlsZHJlbikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFB1cmVWYWx1ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDog
bV9vcChMYXN0Tm9kZVR5cGUpCisgICAgICAgICwgbV9pbmZvKDEpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVU
eXBlICYmICFtX2luZm87IH0KKyAgICAKKyAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3A7IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW47IH0KKyAgICB1aW50cHRyX3QgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5mbzsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2goc3RhdGljX2Nhc3Q8aW50PihtX29wKSkgKyBtX2No
aWxkcmVuLmhhc2goKSArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFB1cmVWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
cCA9PSBvdGhlci5tX29wCisgICAgICAgICAgICAmJiBtX2NoaWxkcmVuID09IG90aGVyLm1fY2hp
bGRyZW4KKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb3AgPT0gTGFzdE5vZGVUeXBlICYmIG1faW5mbzsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBOb2RlVHlwZSBtX29wOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKyAgICB1aW50
cHRyX3QgbV9pbmZvOworfTsKKworc3RydWN0IFB1cmVWYWx1ZUhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFB1cmVWYWx1ZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHVyZVZhbHVlJiBhLCBjb25zdCBQdXJlVmFs
dWUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQdXJl
VmFsdWU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQdXJlVmFsdWVIYXNoIEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8SlNDOjpERkc6OlB1cmVWYWx1ZT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFs
dWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgSGFzaE1hcDxQdXJlVmFsdWUsIE5vZGUq
PiBQdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPFB1cmVWYWx1ZSwgVmVjdG9yPE5vZGUqPj4gUHVy
ZU11bHRpTWFwOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1cmVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE3MTA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAg
IGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNB
dEhlYWQuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBhZG9wdFB0cihuZXcgQmFz
aWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6
bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTcxMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNy
ZWF0ZVBoaVZhcmlhYmxlcygpOwogCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhG
aXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZp
cnN0KTsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3QpOwog
CiAgICAgICAgIGludCBtYXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxvY2tJbmRleC0tOyApIHsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE3MTA1OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA3LTEzICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gREZHIHNob3VsZCBiZSBhYmxlIHRv
IGRvIEdDU0UgaW4gU1NBIGFuZCB0aGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggdGhlIENTRSBp
biBDUFMsIGFuZCBib3RoIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQgdXNlIGFic3RyYWN0IGhlYXBz
IGZvciByZWFzb25pbmcgYWJvdXQgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZp
b3VzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2djc2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanM6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQu
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UuanM6IEFk
ZGVkLgorCiAyMDE0LTA3LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW2Z0bG9wdF0gSW5mZXIgaW1tdXRhYmxlIG9iamVjdCBwcm9wZXJ0aWVzCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nY3NlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nY3NlLXBvbHktZ2V0CisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQtbGVzcy1v
YnZpb3VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC1sZXNz
LW9idmlvdXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2Nz
ZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3Nl
LXBvbHktZ2V0LWxlc3Mtb2J2aW91cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2djc2UtcG9seS1nZXQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2NzZS1wb2x5LWdldC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nY3NlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2djc2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nY3Nl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQtbGVzcy1vYnZpb3VzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQt
bGVzcy1vYnZpb3VzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvZ2NzZS1wb2x5LWdldC1sZXNzLW9idmlvdXMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNSBAQAorKGZ1bmN0aW9uKG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7
CisgICAgICAgIHZhciBhID0gby5mOworICAgICAgICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFy
IGMgPSBvLmY7CisgICAgICAgIHZhciBkID0gby5mOworICAgICAgICBpZiAoZCkgeworICAgICAg
ICAgICAgdmFyIGUgPSBvLmY7CisgICAgICAgICAgICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAg
IHZhciBnID0gby5mOworICAgICAgICAgICAgdmFyIGggPSBvLmY7CisgICAgICAgICAgICBpZiAo
aCkgeworICAgICAgICAgICAgICAgIHZhciBqID0gby5mOworICAgICAgICAgICAgICAgIHZhciBr
ID0gby5mOworICAgICAgICAgICAgICAgIHZhciBsID0gby5mOworICAgICAgICAgICAgICAgIHZh
ciBtID0gby5mOworICAgICAgICAgICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBxID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHMgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gby5m
OworICAgICAgICAgICAgICAgICAgICBpZiAodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCArPSByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7Cisg
ICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLyAyKSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKHtmOjQyLCBn
OjB9LCB7ZzowLCBmOjQzfSk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9nY3NlLXBvbHktZ2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2djc2UtcG9seS1nZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLXBvbHktZ2V0LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKyhmdW5jdGlvbigpeworICAgIHZhciBvID0ge2Y6NDIsIGc6
MH07CisgICAgdmFyIHAgPSB7ZzowLCBmOjQzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2
YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbjsgKytpKSB7CisgICAg
ICAgIHZhciBhID0gby5mOworICAgICAgICB2YXIgYiA9IG8uZjsKKyAgICAgICAgdmFyIGMgPSBv
LmY7CisgICAgICAgIHZhciBkID0gby5mOworICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAg
dmFyIGUgPSBvLmY7CisgICAgICAgICAgICB2YXIgZiA9IG8uZjsKKyAgICAgICAgICAgIHZhciBn
ID0gby5mOworICAgICAgICAgICAgdmFyIGggPSBvLmY7CisgICAgICAgICAgICBpZiAoaCkgewor
ICAgICAgICAgICAgICAgIHZhciBqID0gby5mOworICAgICAgICAgICAgICAgIHZhciBrID0gby5m
OworICAgICAgICAgICAgICAgIHZhciBsID0gby5mOworICAgICAgICAgICAgICAgIHZhciBtID0g
by5mOworICAgICAgICAgICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBx
ID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG8uZjsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHMgPSBvLmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gby5mOworICAg
ICAgICAgICAgICAgICAgICBpZiAodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQor
ICAgIGlmIChyZXN1bHQgIT0gKG4gLyAyKSAqIG8uZiArIChuIC8gMikgKiBwLmYpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2djc2UuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nY3NlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKyhmdW5jdGlvbigpeworICAgIHZhciBvID0ge2Y6NDJ9Owor
ICAgIHZhciBwID0ge2Y6NDN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAw
MDAwMDsKKyAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIGEg
PSBvLmY7CisgICAgICAgIHZhciBiID0gby5mOworICAgICAgICB2YXIgYyA9IG8uZjsKKyAgICAg
ICAgdmFyIGQgPSBvLmY7CisgICAgICAgIGlmIChkKSB7CisgICAgICAgICAgICB2YXIgZSA9IG8u
ZjsKKyAgICAgICAgICAgIHZhciBmID0gby5mOworICAgICAgICAgICAgdmFyIGcgPSBvLmY7Cisg
ICAgICAgICAgICB2YXIgaCA9IG8uZjsKKyAgICAgICAgICAgIGlmIChoKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGogPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIGsgPSBvLmY7CisgICAgICAg
ICAgICAgICAgdmFyIGwgPSBvLmY7CisgICAgICAgICAgICAgICAgdmFyIG0gPSBvLmY7CisgICAg
ICAgICAgICAgICAgaWYgKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBvLmY7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciByID0gby5mOworICAgICAgICAgICAgICAgICAgICB2YXIg
cyA9IG8uZjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBvLmY7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0bXAg
PSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJl
c3VsdCAhPSAobiAvIDIpICogby5mICsgKG4gLyAyKSAqIHAuZikKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>