<?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>163865</bug_id>
          
          <creation_ts>2016-10-23 02:34:28 -0700</creation_ts>
          <short_desc>We should be able optimize the pattern where we spread a function&apos;s rest parameter to another call</short_desc>
          <delta_ts>2016-11-29 22:25:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>163925</dependson>
    
    <dependson>164258</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243500</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-23 02:34:28 -0700</bug_when>
    <thetext>The most trivial of cases would be eliminating two array allocations and the array iterator protocol loop in something like this:

```
function foo(...args) { return bar(...args); }
```

ES6SampleBench/Air has code similar to this:

```
    visitArg(index, func, ...args)
    {
        let replacement = func(this._args[index], ...args);
        if (replacement)
            this._args[index] = replacement;
    }
```

Since this function is never called with more than 3 arguments, I rewrote the code like this to see what the performance improvement ballpark is:
```
    visitArg(index, func, a1, a2, a3)
    {
        let replacement = func(this._args[index], a1, a2, a3);
        if (replacement)
            this._args[index] = replacement;
    }
```

This made the benchmark speed up by ~50%.
I&apos;m guessing we should be able to make this benchmark at least 30-45% faster by optimizing this type of pattern in the DFG/FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250686</commentid>
    <comment_count>1</comment_count>
      <attachid>294622</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-12 11:19:13 -0800</bug_when>
    <thetext>Created attachment 294622
WIP

It beings. It can run this program and do the proper optimization:

```
function assert(b) {
    if (!b)
        throw new Error;
}

function baz(a, b, c, d) { 
    return [a, b, c, d];
}
function bar(a, b, ...args) {
    return baz(a, b, ...args);
}
function foo(a, b, c, d) {
    return bar(a, b, c, d);
}
noInline(foo);

for (let i = 0; i &lt; 10000; i++) {
    let [a, b, c, d] = foo(i, i+1, i+2, i+3);
    assert(a === i);
    assert(b === i+1);
    assert(c === i+2);
    assert(d === i+3);
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251118</commentid>
    <comment_count>2</comment_count>
      <attachid>294736</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-14 13:35:42 -0800</bug_when>
    <thetext>Created attachment 294736
WIP

Some more things, it now kind of works with a new type of ForwardVarargs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251753</commentid>
    <comment_count>3</comment_count>
      <attachid>294911</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-15 18:54:26 -0800</bug_when>
    <thetext>Created attachment 294911
WIP

It might be able to run SampleBench/Air now. Still have quite a few things left.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252092</commentid>
    <comment_count>4</comment_count>
      <attachid>294996</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-16 16:20:57 -0800</bug_when>
    <thetext>Created attachment 294996
WIP

We can forward varargs from a spread, and we can call varargs with spread. I still need to do OSR exit and make sure all the things work.

I also want to make NewArrayWithSpread understand how to create itself from PhantomSpreads even if the NewArrayWithSpread itself is escaped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252173</commentid>
    <comment_count>5</comment_count>
      <attachid>295016</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-16 19:07:58 -0800</bug_when>
    <thetext>Created attachment 295016
WIP

OSR exit is starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252239</commentid>
    <comment_count>6</comment_count>
      <attachid>295037</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-17 00:14:54 -0800</bug_when>
    <thetext>Created attachment 295037
WIP

NewArrayWithSpread now can accept arbitrary PhantomSpreads as arguments even if it itself must be allocated.

PhantomSpread can only become Phantom if its argument is CreateRest and the CreateRest doesn&apos;t escape. I think this is probably needed for correctness because we don&apos;t know if any other incoming array has arbitrary indexed getters on it. If we want to PhantomSpread arbitrary arrays, we probably need a way to prove that the act of spreading wouldn&apos;t call into user observable code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252564</commentid>
    <comment_count>7</comment_count>
      <attachid>295122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-17 19:23:37 -0800</bug_when>
    <thetext>Created attachment 295122
WIP

passes almost all JSC tests. Just need to write some more specific testing for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253322</commentid>
    <comment_count>8</comment_count>
      <attachid>295319</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-21 19:20:00 -0800</bug_when>
    <thetext>Created attachment 295319
patch

I think this patch is just about ready, I just need to write a changelog and a few more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253323</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-21 19:22:43 -0800</bug_when>
    <thetext>Attachment 295319 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:994:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253798</commentid>
    <comment_count>10</comment_count>
      <attachid>295476</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-27 16:50:22 -0800</bug_when>
    <thetext>Created attachment 295476
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253799</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-27 16:52:27 -0800</bug_when>
    <thetext>Attachment 295476 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:49:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:50:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:67:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:68:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:69:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:979:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 8 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253947</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-28 12:48:36 -0800</bug_when>
    <thetext>*** Bug 164806 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254568</commentid>
    <comment_count>13</comment_count>
      <attachid>295476</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-29 16:48:31 -0800</bug_when>
    <thetext>Comment on attachment 295476
patch

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

&gt; Source/JavaScriptCore/b3/B3ValueRep.h:81
&gt; +        // It&apos;s not valid output representation.

*a valid

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4331
&gt;          if (m_graph.isWatchingHavingABadTimeWatchpoint(m_node)) {

I don&apos;t know from this method name if it means that we are having a bad time or if the watchpoint set is valid (i.e. we are not having a bad time).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254569</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-29 16:51:53 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 295476 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295476&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ValueRep.h:81
&gt; &gt; +        // It&apos;s not valid output representation.
&gt; 
&gt; *a valid
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4331
&gt; &gt;          if (m_graph.isWatchingHavingABadTimeWatchpoint(m_node)) {
&gt; 
&gt; I don&apos;t know from this method name if it means that we are having a bad time
&gt; or if the watchpoint set is valid (i.e. we are not having a bad time).

Never mind, I was reading this wrong.  I didn&apos;t parse the &quot;isWatching&quot; right.  Please disregard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254646</commentid>
    <comment_count>15</comment_count>
      <attachid>295693</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-29 19:30:06 -0800</bug_when>
    <thetext>Created attachment 295693
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254647</commentid>
    <comment_count>16</comment_count>
      <attachid>295694</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-29 19:35:08 -0800</bug_when>
    <thetext>Created attachment 295694
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254699</commentid>
    <comment_count>17</comment_count>
      <attachid>295694</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-29 22:25:05 -0800</bug_when>
    <thetext>Comment on attachment 295694
patch for landing

Clearing flags on attachment: 295694

Committed r209121: &lt;http://trac.webkit.org/changeset/209121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254700</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-29 22:25:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294622</attachid>
            <date>2016-11-12 11:19:13 -0800</date>
            <delta_ts>2016-11-14 13:35:42 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>24051</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk3NCw2ICsxOTc0LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBj
YXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgog
ICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVl
KTsgLy8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0
byByZXR1cm4gYm90dG9tLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDQ0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gQXJyYXlVc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0
ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIEJpdFZl
Y3RvciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bUNoaWxkcmVuID0gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIG1hdGNoIGEgdGhpbmcgd2hlcmUgd2UgYXJl
IG9ubHkgc3ByZWFkaW5nIHRoZSB0aGluZworICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUg
ZW5kIHdoZXJlIHRoZSBsYXN0IGl0ZW0gaXMgc3ByZWFkaW5nIGEgQ3JlYXRlUmVzdCBub2RlLgor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZG8gbW9yZSBzb3BoaXN0aWNhdGVkIG1hdGNo
aW5nCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFiaXRWZWN0b3ItPmdldChudW1DaGlsZHJl
biAtIDEpKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgbm90IHNwcmVhZGlu
ZyB0aGUgbGFzdCB0aGluZywgc28gYmFpbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09L
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUNoaWxkcmVuIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBzcHJl
YWRpbmcgc29tZXRoaW5nIHRoYXQgaXNuJ3QgdGhlIGxhc3QgZWxlbWVudCwgc28gYmFpbC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc09LID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0spCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzcHJlYWRO
b2RlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBudW1DaGlsZHJlbiAtIDEpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNwcmVhZE5vZGUtPm9wKCkgPT0gU3ByZWFkICYmIHNw
cmVhZE5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBzcHJlYWROb2RlLT5j
aGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2NhbmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRh
dGVzLmFkZChzcHJlYWROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHRoaXMgaWYgaXQgd2Fzbid0IGZvciB0
aGUgZmFjdCB0aGF0IHNjb3BlZCBhcmd1bWVudHMgYXJlCkBAIC0xMjYsMTkgKzE2NCwzOCBAQCBw
cml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkNhbmRp
ZGF0ZXM6ICIsIGxpc3REdW1wKG1fY2FuZGlkYXRlcyksICJcbiIpOwogICAgIH0KKworICAgIHZv
aWQgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKE5vZGUqIG5vZGUsIE5vZGUqIHNvdXJjZSA9
IG51bGxwdHIpCisgICAgeworICAgICAgICBib29sIHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVt
b3ZlKG5vZGUpOworICAgICAgICBpZiAocmVtb3ZlZCAmJiB2ZXJib3NlICYmIHNvdXJjZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgbm9kZSwgIiBiZWNh
dXNlIGl0IGVzY2FwZXMgZnJvbTogIiwgc291cmNlLCAiXG4iKTsKKworICAgICAgICBpZiAocmVt
b3ZlZCAmJiBub2RlLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAg
Tm9kZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJl
bigpIC0gMSkubm9kZSgpOworICAgICAgICAgICAgZGF0YUxvZygiV2hvYSBiYWQhXG4iKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwcmVhZC0+b3AoKSA9PSBTcHJlYWQpOworICAgICAg
ICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKHNwcmVhZCwgbm9kZSk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBGSVhNRTogaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB1c2Ugb2Yg
YSBzcHJlYWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCisgICAgICAgIC8vIHdlIHJlbW92ZSBpdCBo
ZXJlIGFuZCByZW1vdmUgaXQncyBwYXJlbnQgb2YgTmV3QXJyYXlXaXRoU3ByZWFkLgorICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBTcHJlYWQpCisgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1v
dmVDYW5kaWRhdGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlKTsKKyAgICB9CiAgICAgCiAg
ICAgLy8gTG9vayBmb3IgZXNjYXBpbmcgc2l0ZXMsIGFuZCByZW1vdmUgZnJvbSB0aGUgY2FuZGlk
YXRlcyBzZXQgaWYgd2Ugc2VlIGFuIGVzY2FwZS4KICAgICB2b2lkIGVsaW1pbmF0ZUNhbmRpZGF0
ZXNUaGF0RXNjYXBlKCkKICAgICB7CiAgICAgICAgIGF1dG8gZXNjYXBlID0gWyZdIChFZGdlIGVk
Z2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CiAg
ICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92ZShlZGdlLm5vZGUoKSk7Ci0gICAg
ICAgICAgICBpZiAocmVtb3ZlZCAmJiB2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
ImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgZWRnZS5ub2RlKCksICIgYmVjYXVzZSBpdCBlc2Nh
cGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1v
dmVDYW5kaWRhdGUoZWRnZS5ub2RlKCksIHNvdXJjZSk7CiAgICAgICAgIH07CiAgICAgICAgIAog
ICAgICAgICBhdXRvIGVzY2FwZUJhc2VkT25BcnJheU1vZGUgPSBbJl0gKEFycmF5TW9kZSBtb2Rl
LCBFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNvbnNp
ZGVyIHRoaXMgY2FsbGVkIGZyb20gQ2hlY2tBcnJheSBhbmQgdGhlIGVkZ2UgYmVpbmcgYSBOZXdB
cnJheVdpdGhTcHJlYWQgbm9kZS4KICAgICAgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKICAgICAgICAgICAgICAg
ICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVEaXJlY3RBcmd1bWVudHMpCkBAIC0xODcsNiArMjQ0
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBlc2NhcGVJZlNwcmVhZCA9IFsmXSAoRWRnZSBlZGdl
LCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgIGlmIChlZGdlLm5vZGUoKS0+b3AoKSA9PSBO
ZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZSwgc291cmNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgfTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewpAQCAtMTk1LDE1ICsyNjAsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlW
YWw6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZUlmU3ByZWFkKG5vZGUtPmNoaWxkMSgpLCBu
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShub2RlLT5h
cnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBl
c2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+Y2hpbGQzKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZUlmU3ByZWFkKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAg
ZXNjYXBlQmFzZWRPbkFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCks
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgLy8g
RXNjYXBlIGV2ZXJ5dGhpbmcgYnV0IHRoZSBzcHJlYWQgYXQgdGhlIGVuZC4KKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAx
OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCBpKSwgbm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0
ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IG5vdCBhIGNhbmRpZGF0ZSwgZXNjYXBlIHdoYXQgbWlnaHQgYmUgYSBzcHJlYWQgdG9vLgorICAg
ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKSAtIDEpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6
CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjYzLDYgKzM0NywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0
ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9k
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5v
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zOTAsNyArNDc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBibG9jay0+c2l6ZSgpICYmIGNh
bmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5n
IGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAi
LCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTQxNyw3ICs1MDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRp
ZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2Nr
LT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC00NjAsOSArNTQ4LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHRyYXZlcnNlIGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBzZWUgYSBkZWYgYmVmb3JlIGEgdXNlLgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZWZvcmUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgdHJhbnNmb3JtZWQgdGhlIGFsbG9jYXRpb24g
YmVmb3JlIHRoZSB1c2UKICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4gYWxsb2NhdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2Fu
ZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNh
bmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFkIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXBGcm9tQ2FuZGlkYXRlID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIC0+IHVuc2ln
bmVkIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fY2FuZGlkYXRlcy5jb250YWlucyhj
YW5kaWRhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRh
dGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBzcHJlYWQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRp
ZGF0ZSwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0gMSkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5vcCgpID09IFBoYW50b21TcHJlYWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcmVzdCA9IHNwcmVhZC0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdC0+b3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgpAQCAtNDg4LDYgKzU5MywyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tU3ByZWFkKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKQEAgLTYwMCw5ICs3MTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlk
YXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwRnJv
bUNhbmRpZGF0ZShjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+
b2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCiAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOwpAQCAtNjE3LDYgKzczNCw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSAxOwog
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPj0gMSk7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUt
Pm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArPSBjYW5kaWRhdGUtPm51bUNoaWxk
cmVuKCkgLSAxOworCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0su
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBu
b2RlLT5vcmlnaW4uZXhpdE9LKTsKQEAgLTY0MSwxMCArNzYxLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGRldGVybWluZSBpZiB3ZSBoYXZl
IGFuIGVsZW1lbnQgd2UgY2FuIGxvYWQsIGFuZCBsb2FkIGl0IGlmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9hZEluZGV4
ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRJbmRleCArIDEgPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBVSU5UX01BWDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlX
aXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmdW5j
dGlvbiBmb28oYXJnMSwgYXJnMiwgLi4uYXJncykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIGNhbGwoW2EsIGIsIGMsIC4uLmFyZ3NdKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdG9yZUluZGV4IDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0gMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhYm92ZSBw
YXR0ZXJuIGhhcyA0IGNoaWxkcmVuLCBidXQgd2Ugb25seSB3YW50IHRvIHN0b3JlIGEsIGIsIGMu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgc3RvcmVJbmRleCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZz
ZXQgLSAoY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0gMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiBsb2FkSW5kZXggKyAxIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7CkBAIC02NTIsNyArNzg0LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhp
dE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhkYXRhKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gc3RvcmUgYW55dGhpbmcgaWYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlSW5kZXggPj0gdmFyYXJn
c0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3aWxsIHN0aWxsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBT
byBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbApAQCAtNjg2LDYgKzgyMCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYW5kaWRhdGUtPm9wKCkgIT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCk7IC8vIEZJWE1FOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDYgKzEwOSwxMCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJy
YXlMZW5ndGgoCiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAg
ICAgfQogCisgICAgLy8gRklYTUU6IGhhbmRsZSBOZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpICE9IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQp
OworICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBOZXdBcnJheVdpdGhTcHJl
YWQpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiAr
NDc4LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlIFBo
YW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhhbnRv
bSwgaXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNlZCB3
aXRoIGFub3RoZXIuCiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwODY0MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ3LDYgKzI0Nyw4IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFy
Z3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgY2FzZSBQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MzgsNiArMTQzOCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFj
dGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAg
ICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRv
bUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA4NjQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBl
bXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3
aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEg
bm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC00NzMsNyArNDcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGhh
c0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVj
dEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgb3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJn
dW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgewogICAgICAgICAgICAg
Ly8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBi
ZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lz
ZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2
YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsK
QEAgLTE3NTYsNiArMTc1NSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2Jq
ZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAg
Y2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9u
ZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgogICAgICAgICBj
YXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDYgKzM0NCw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDcmVhdGVEaXJl
Y3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21EaXJlY3RBcmd1
bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGFu
dG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKFBoYW50b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBOb2RlUmVzdWx0
SlMpIFwKICAgICBtYWNybyhDcmVhdGVDbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKFBoYW50b21DbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA4
NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCwxMSBAQCB2b2lkIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAg
IGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6
CisgICAgICAgIC8vIEZJWE1FOgorICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MjA4NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsNiArMTAxMCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2Ug
UGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoK
KyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJh
eVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA4NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICszNTgsOCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBNYXRl
cmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
OgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgor
ICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9u
ZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA4NjQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYxNCw2ICs1NjE0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVu
ZXhwZWN0ZWQgbm9kZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MzAsNiArNTgzMCw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxT
dGFjazoKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6Cisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5v
ZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsMTAgKzY4
NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBw
cm9iYWJseSBub3QgY29ycmVjdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRI
aW50OgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmNoaWxkMSgp
LT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwODY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDYgKzIzMyw4IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRl
QWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoK
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0LDYgKzEwODQs
OCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAg
ICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294736</attachid>
            <date>2016-11-14 13:35:42 -0800</date>
            <delta_ts>2016-11-15 18:54:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>38445</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFkLWZvcndhcmQtdmFyYXJncy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFy
Z3MuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9y
d2FyZC12YXJhcmdzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9u
IGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBh
c3NlcnRpb24iKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJhcihhLCBiLCBj
LCBkKSB7CisgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKK30KK2Z1bmN0aW9uIGZvbyguLi5hcmdz
KSB7CisgICAgcmV0dXJuIGJhciguLi5hcmdzKTsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBbYSwgYiwgYywgZF0gPSBmb28o
aSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KGEgPT09IGkpOworICAgIGFzc2VydChiID09
PSBpKzEpOworICAgIGFzc2VydChjID09PSBpKzIpOworICAgIGFzc2VydChkID09PSBpKzMpIDsK
K30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjczLDEwICsyNzMsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMb2FkVmFy
YXJnczoKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hl
Y2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQg
dHVybgogICAgICAgICAvLyBpdHNlbGYgaW50byBhIHN0cmFpZ2h0LWxpbmUgc2VxdWVuY2Ugb2Yg
R2V0U3RhY2svUHV0U3RhY2suCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDMwNzEKKworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgYmUgbW9y
ZSBhY2N1cmF0ZSBmb3IgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkIGhlcmUuCiAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAg
ICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0lu
dDMyT25seSk7CkBAIC0xOTc0LDYgKzE5NzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0Ogor
ICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQ6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVy
KHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMgY2xh
aW1zIHRvIHJldHVybiBib3R0b20uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNDQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2Fu
ZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgICAgICAgICAgICAg
Qml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4gPSBub2RlLT5udW1DaGlsZHJlbigpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2ggYSB0aGluZyB3aGVyZSB3
ZSBhcmUgb25seSBzcHJlYWRpbmcgdGhlIHRoaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIGF0
IHRoZSBlbmQgd2hlcmUgdGhlIGxhc3QgaXRlbSBpcyBzcHJlYWRpbmcgYSBDcmVhdGVSZXN0IG5v
ZGUuCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBkbyBtb3JlIHNvcGhpc3RpY2F0ZWQg
bWF0Y2hpbmcKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWJpdFZlY3Rvci0+Z2V0KG51bUNo
aWxkcmVuIC0gMSkpICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3Qgc3By
ZWFkaW5nIHRoZSBsYXN0IHRoaW5nLCBzbyBiYWlsLgorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBib29s
IGlzT0sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2hpbGRyZW4gLSAxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
aXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IHNwcmVhZGluZyBzb21ldGhpbmcgdGhhdCBpc24ndCB0aGUgbGFzdCBlbGVtZW50LCBzbyBiYWls
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT0sgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPSykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNw
cmVhZE5vZGUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG51bUNoaWxkcmVuIC0gMSkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3ByZWFkTm9kZS0+b3AoKSA9PSBTcHJlYWQg
JiYgc3ByZWFkTm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNlICYmIHNwcmVhZE5v
ZGUtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZVJlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmRpZGF0ZXMuYWRkKHNwcmVhZE5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBpZiBpdCB3YXNuJ3Qg
Zm9yIHRoZSBmYWN0IHRoYXQgc2NvcGVkIGFyZ3VtZW50cyBhcmUKQEAgLTEyNiwxOSArMTY0LDM4
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
Q2FuZGlkYXRlczogIiwgbGlzdER1bXAobV9jYW5kaWRhdGVzKSwgIlxuIik7CiAgICAgfQorCisg
ICAgdm9pZCB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoTm9kZSogbm9kZSwgTm9kZSogc291
cmNlID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1fY2FuZGlkYXRl
cy5yZW1vdmUobm9kZSk7CisgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2UgJiYgc291cmNl
KQorICAgICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBub2RlLCAi
IGJlY2F1c2UgaXQgZXNjYXBlcyBmcm9tOiAiLCBzb3VyY2UsICJcbiIpOworCisgICAgICAgIGlm
IChyZW1vdmVkICYmIG5vZGUtPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAg
ICAgICBOb2RlKiBzcHJlYWQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPm51bUNo
aWxkcmVuKCkgLSAxKS5ub2RlKCk7CisgICAgICAgICAgICBkYXRhTG9nKCJXaG9hIGJhZCFcbiIp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5vcCgpID09IFNwcmVhZCk7Cisg
ICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoc3ByZWFkLCBub2RlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHVz
ZSBvZiBhIHNwcmVhZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAgICAgLy8gd2UgcmVtb3Zl
IGl0IGhlcmUgYW5kIHJlbW92ZSBpdCdzIHBhcmVudCBvZiBOZXdBcnJheVdpdGhTcHJlYWQuCisg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFNwcmVhZCkKKyAgICAgICAgICAgIHRyYW5zaXRpdmVs
eVJlbW92ZUNhbmRpZGF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUpOworICAgIH0KICAg
ICAKICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBj
YW5kaWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2Fu
ZGlkYXRlc1RoYXRFc2NhcGUoKQogICAgIHsKICAgICAgICAgYXV0byBlc2NhcGUgPSBbJl0gKEVk
Z2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc291cmNl
KTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBib29sIHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVtb3ZlKGVkZ2Uubm9kZSgpKTsK
LSAgICAgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBlZGdlLm5vZGUoKSwgIiBiZWNhdXNlIGl0
IGVzY2FwZXMgZnJvbTogIiwgc291cmNlLCAiXG4iKTsKKyAgICAgICAgICAgIHRyYW5zaXRpdmVs
eVJlbW92ZUNhbmRpZGF0ZShlZGdlLm5vZGUoKSwgc291cmNlKTsKICAgICAgICAgfTsKICAgICAg
ICAgCiAgICAgICAgIGF1dG8gZXNjYXBlQmFzZWRPbkFycmF5TW9kZSA9IFsmXSAoQXJyYXlNb2Rl
IG1vZGUsIEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgdGhpcyBjYWxsZWQgZnJvbSBDaGVja0FycmF5IGFuZCB0aGUgZWRnZSBiZWluZyBh
IE5ld0FycmF5V2l0aFNwcmVhZCBub2RlLgogICAgICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICAg
ICAgICAgIGlmIChlZGdlLT5vcCgpICE9IENyZWF0ZURpcmVjdEFyZ3VtZW50cykKQEAgLTE4Nyw2
ICsyNDQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfTsKKworICAgICAgICBhdXRvIGVzY2FwZUlmU3ByZWFkID0gWyZdIChFZGdl
IGVkZ2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpLT5vcCgp
ID09IE5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLCBz
b3VyY2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9OwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CkBAIC0xOTUsMTUgKzI2MCwzNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQx
KCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5v
ZGUtPmFycmF5TW9kZSgpLCBub2RlLT5jaGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZShub2RlLT5jaGlsZDMoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgICAgICAg
ICAgZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAg
ICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5jaGls
ZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKSwg
bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAg
ICAvLyBFc2NhcGUgZXZlcnl0aGluZyBidXQgdGhlIHNwcmVhZCBhdCB0aGUgZW5kLgorICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIGkpLCBub2RlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2Fu
ZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UncmUgbm90IGEgY2FuZGlkYXRlLCBlc2NhcGUgd2hhdCBtaWdodCBiZSBhIHNwcmVhZCB0b28u
CisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBub2RlLT5udW1DaGlsZHJlbigpIC0gMSksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0yNjMsNiArMzQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBh
cmFtZXRlclN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2lu
dChub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoQ29udGln
dW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM5MCw3ICs0NzgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IGJsb2NrLT5zaXplKCkg
JiYgY2FuZGlkYXRlLT5vd25lciAhPSBibG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiZWxpbWlu
YXRpbmcgY2FuZGlkYXRlOiAiLCBjYW5kaWRhdGUsICIgYmVjYXVzZSBpdCBpcyBjbG9iYmVyZWQg
Ynk6ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FuZGlkYXRlcy5yZW1vdmUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtNDE3LDcgKzUwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcg
Y2FuZGlkYXRlOiAiLCBjYW5kaWRhdGUsICIgYmVjYXVzZSBpdCBpcyBjbG9iYmVyZWQgYnkgIiwg
YmxvY2stPmF0KG5vZGVJbmRleCksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY2FuZGlkYXRlcy5yZW1vdmUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTQ2MCw5ICs1NDgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgdHJhdmVyc2UgaW4gc3VjaCBhIHdheSB0aGF0IHdlIGFyZSBndWFy
YW50ZWVkIHRvIHNlZSBhIGRlZiBiZWZvcmUgYSB1c2UuCiAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZXJlZm9yZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSB0cmFuc2Zvcm1lZCB0aGUgYWxsb2Nh
dGlvbiBiZWZvcmUgdGhlIHVzZQogICAgICAgICAgICAgICAgICAgICAvLyBvZiBhbiBhbGxvY2F0
aW9uLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50
b21DcmVhdGVSZXN0IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8
fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBjYW5kaWRhdGUt
Pm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAg
fHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21TcHJlYWQgfHwgY2FuZGlkYXRlLT5vcCgpID09
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcEZyb21DYW5kaWRhdGUgPSBbJl0gKE5vZGUqIGNhbmRpZGF0ZSkgLT4g
dW5zaWduZWQgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9jYW5kaWRhdGVzLmNvbnRh
aW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
bmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
Y2FuZGlkYXRlLCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCkgLSAxKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN0ID0gc3ByZWFkLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN0
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CkBAIC00ODgsNiArNTkzLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21TcHJlYWQpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlX
aXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlu
cyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6
IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwpAQCAtNjAwLDkgKzcxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
YW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXBGcm9tQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NE
YXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAKICAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CkBAIC02MTcsNiArNzM0LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICs9IGNhbmRpZGF0ZS0+bnVt
Q2hpbGRyZW4oKSAtIDE7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4
aXRPSy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwpAQCAtNjQxLDEwICs3NjEsMjIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdl
IGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2Fk
SW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsg
MSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IFVJTlRfTUFYOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZ1bmN0aW9uIGZvbyhhcmcxLCBhcmcyLCAuLi5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgY2FsbChbYSwgYiwgYywgLi4uYXJnc10pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0b3JlSW5kZXggPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCkg
LSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFi
b3ZlIHBhdHRlcm4gaGFzIDQgY2hpbGRyZW4sIGJ1dCB3ZSBvbmx5IHdhbnQgdG8gc3RvcmUgYSwg
YiwgYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBzdG9yZUluZGV4KS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEt
Pm9mZnNldCAtIChjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCkgLSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlICYmIGxvYWRJbmRleCArIDEg
PCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWcsIEZsdXNoZWRKU1ZhbHVlKTsKQEAgLTY1Miw3ICs3ODQs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndp
dGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKGRhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBp
ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2
YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgR2V0U3RhY2tzIGluIHRoYXQgcmFu
Z2UuIFNvIGlmIHdlIGRvbid0IGRvIHRoZSBzdG9yZXMsIHdlJ2xsCkBAIC02ODYsOCArODIwLDE2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZv
cndhcmRWYXJhcmdzKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oY2FuZGlkYXRlLCBb
Jl0gKEVkZ2UgZWRnZSkgeyBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKEVkZ2UoZWRn
ZS5ub2RlKCkpKTsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJz
dENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2
ICsxMDksMTAgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAg
ICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIAorICAgIC8v
IEZJWE1FOiBoYW5kbGUgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIFJFTEVBU0VfQVNTRVJUKGFy
Z3VtZW50cy0+b3AoKSAhPSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChhcmd1bWVudHMtPm9wKCkgIT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKKwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCw4IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoSGVhcE9i
amVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgor
ICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DcmVh
dGVSZXN0OgogICAgICAgICAvLyBFdmVuIHRob3VnaCBpdCdzIHBoYW50b20sIGl0IHN0aWxsIGhh
cyB0aGUgcHJvcGVydHkgdGhhdCBvbmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyLgog
ICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkBAIC02MjAsNiArNjIyLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIFdlIGNvdWxkIGJlIHdheSBtb3JlIHByZWNp
c2UgaGVyZS4KICAgICAgICAgcmVhZChTdGFjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NywxMCArMjQ3LDEz
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAg
ICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJn
dW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICBjYXNlIFB1dFN0YWNrOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDM4LDYgKzE0MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpAQCAtMTgw
Nyw2ICsxODA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6
CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVj
dDoKICAgICAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJl
c3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBj
b25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAogICAgICAg
ICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0aGF0IGRv
ZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NzMs
NyArNDcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KCkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8
fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCkgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9w
KCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgewogICAgICAgICAgICAgLy8gVGhlc2UgcHJl
dGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0IG9mIHRo
ZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3VsZG4ndCB0
YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4KICAgICAg
ICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKQEAgLTExNzUsNyAr
MTE3NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndh
cmRWYXJhcmdzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09
IEZvcndhcmRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOwogICAg
IH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCkBAIC0xNzU2
LDYgKzE3NTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAg
ICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzOgogICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJh
cmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRC
eVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFj
cm8oUHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1h
Y3JvKFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApA
QCAtMzQ0LDYgKzM0NSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhDcmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBo
YW50b21EaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhD
cmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENyZWF0ZUNs
b25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNsb25lZEFy
Z3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTMsNiArMTUzLDggQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIC8vIEZJWE1FOiBt
YWtlIHN1cmUgdGhpcyBpcyBjb3JyZWN0LiBJIHRoaW5rIGl0IGlzLgorICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3
YXJkVmFyYXJnczogewogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKQEAgLTE2NCw3ICsxNjYsNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
ICAgICAKKyAgICAKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRv
bURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6IHsKQEAg
LTIwOCw2ICsyMTAsMTEgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4
ZQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAg
ICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAvLyBGSVhNRToKKyAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3M6CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgpAQCAtMTE4LDcgKzExOSwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWU7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5oYXNBcmd1bWVudHNDaGlsZCgpICYmIG1fbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKSkKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbHNlIGlmIChtX25vZGUtPm9wKCkgPT0g
Rm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGlm
IHdlIHNwcmVhZCBtb3JlIHRoYW4gdGhlIGxhc3QgYXJndW1lbnQsIHRoaXMgaXMgbm8gbG9uZ2Vy
IGNvcnJlY3QuCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDEpLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OwogCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTAsNiArMTAxMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50
czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9t
U3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkBAIC0x
MTAwLDYgKzExMDIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUHV0RHluYW1pY1Zh
cjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkocmV2
aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0
ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0
YWNrIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJk
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUwNCw3ICs1MDQsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0
by4gVGhpcyBtYWtlcyB0aG9zZSBzdGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBU
aGlzIG1lYW5zIHdlIHNob3VsZCBuZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBQdXRTdGFja3MgcmlnaHQgdG8gdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFy
Z3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAg
ICAgICAgICAgICAgICAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsMTAg
KzM1OCwxMyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
Y2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0
QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9t
U3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgIGNhc2UgQ3JlYXRl
UmVzdDoKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVn
RXhwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NjE0LDYgKzU2MTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNl
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgz
MCw2ICs1ODMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgS2lsbFN0YWNrOgogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3
QXJyYXlXaXRoU3ByZWFkOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAg
ICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwog
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAg
ICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKQEAgLTIyNyw2ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRW
YXJhcmdzOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODMsMTQgKzY4
MywyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBoYXZlIGJldHRlciB2YWxpZGF0aW9uIGZvciB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2s6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCBjb3JyZWN0Lgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bVNwcmVhZDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbUFsbG9jYXRpb24o
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICAgICAgY2FzZSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
ZG8gc29tZXRoaW5nIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzMsMTAgKzIzMywxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2Fz
ZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6Cisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgog
ICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgVHlwZU9mOgogICAgIGNhc2UgUHV0QnlJZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSw5IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFy
Z3MoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0
aFNwcmVhZDoKKyAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERGRzo6SnVtcDoKICAgICAgICAgICAg
IGNvbXBpbGVKdW1wKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODQsNiArMTA4Nyw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAg
IGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoK
ICAgICAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgpAQCAtNjU4
NSw2ICs2NTkwLDEwNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJn
c1dpdGhTcHJlYWQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGNvbWJpbmUgdGhpcyB3aXRo
IHRoZSByZWd1bGFyIGZvcndhcmRWYXJhcmdzLgorICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPm51
bUNoaWxkcmVuKCkgLSAxKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX25vZGUtPm51bUNoaWxkcmVuKCkpOworICAgICAgICB1bnNp
Z25lZCBudW1TdGF0aWNBcmd1bWVudHMgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworCisg
ICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAKKyAgICAgICAgTFZhbHVlIGxlbmd0aElu
Y2x1ZGluZ1RoaXMgPSBudWxscHRyOworICAgICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1lbnRz
TGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlm
IChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgeworICAgICAgICAgICAgdW5zaWduZWQga25vd25M
ZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247CisgICAgICAgICAgICBpZiAoa25vd25MZW5n
dGggPj0gZGF0YS0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0ga25vd25M
ZW5ndGggLSBkYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
a25vd25MZW5ndGggPSAwOworICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQuY29uc3RJbnQzMihr
bm93bkxlbmd0aCArIG51bVN0YXRpY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBsZW5ndGhJbmNs
dWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEgKyBudW1TdGF0aWNB
cmd1bWVudHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBw
ZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQg
dGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCisgICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNl
dCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNt
YWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIo
MCkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEt
Pm9mZnNldCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdl
ciwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJM
ZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQu
cGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgs
IG1fb3V0LmNvbnN0SW50MzIobnVtU3RhdGljQXJndW1lbnRzKSk7CisgICAgICAgICAgICBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxICsg
bnVtU3RhdGljQXJndW1lbnRzKSk7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisKKyAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7CisgICAgICAgIExW
YWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApOworICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsgaSsrKSB7CisgICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCBpKSk7ICAgIAorICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbnVsbHB0ciwgSlNWYWx1ZShpKSkp
OworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aEFzUHRyID0gbV9vdXQuemVyb0V4
dFB0cihsZW5ndGgpOworICAgICAgICBMVmFsdWUgbG9vcEJvdW5kVmFsdWUgPSBtX291dC5jb25z
dEludFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKworICAgICAgICBMQmFzaWNCbG9jayB1
bmRlZmluZWRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWFp
bkxvb3BFbnRyeSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG1haW5M
b29wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxv
b3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsb29wQm91bmRWYWx1ZSk7CisKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9vcEJvdW5kVmFsdWUsIGxlbmd0aEFz
UHRyKSwgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmRl
ZmluZWRMb29wLCBtYWluTG9vcEVudHJ5KTsKKyAgICAgICAgTFZhbHVlIHByZXZpb3VzSW5kZXgg
PSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgbG9vcEJvdW5kKTsKKyAgICAgICAgTFZhbHVlIGN1
cnJlbnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBtX291dC5pbnRQdHJPbmUpOwor
ICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAorICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4
KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgY3VycmVudEluZGV4KSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihjdXJyZW50SW5kZXgpOwor
ICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7
CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGN1cnJlbnRJ
bmRleCwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShtYWluTG9v
cEVudHJ5KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhtYWluTG9vcEVudHJ5
LCBtYWluTG9vcCk7CisgICAgICAgIGxvb3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsZW5ndGhBc1B0
cik7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxsKGxlbmd0aEFzUHRyKSwgdW5z
dXJlKG1haW5Mb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8obWFpbkxvb3AsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHByZXZpb3Vz
SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgbG9vcEJvdW5kKTsKKyAgICAgICAgY3Vy
cmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7Cisg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAgICAgICAgICAgIG1fb3V0LmJh
c2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGN1cnJlbnRJbmRleCkpOwor
ICAgICAgICB1bnNpZ25lZCBzdG9yZU9mZnNldCA9IChtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAx
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7IC8vIFdlJ3ZlIGFscmVhZHkgc3RvcmVkIHRoZXNl
IGF0IHRoZSB0b3AuCisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRl
eChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCwgSlNWYWx1ZSgp
LCBzdG9yZU9mZnNldCkpOworICAgICAgICBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVu
dEluZGV4KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBu
ZXh0SW5kZXgpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKGN1cnJlbnRJbmRl
eCksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobWFpbkxvb3ApKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKwog
ICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9j
ayhtX25vZGUtPnRhcmdldEJsb2NrKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294911</attachid>
            <date>2016-11-15 18:54:26 -0800</date>
            <delta_ts>2016-11-16 16:20:57 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>83801</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOwor
fQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
eCA9IGJhciguLi5hcmdzLCA0MiwgLi4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9Jbmxp
bmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAg
ICBhc3NlcnQoclswXSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJb
MV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMs
IEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5n
aWZ5KHIpKTsKKyAgICBhc3NlcnQocls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzZdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMt
bG9hZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5l
dy1hcnJheS13aXRoLXNwcmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkocmV2aXNpb24g
MCkKKysrIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJl
YWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
OCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7
CisgICAgcmV0dXJuIGJheiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28o
YSwgYiwgYywgZCkgeworICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShm
b28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFz
c2VydChyWzBdID09PSBpKzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzJdID09PSBpKzMpOworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJb
NF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0g
PT09IGkrMyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJk
LXZhcmFyZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQt
Zm9yd2FyZC12YXJhcmdzLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRv
bS1zcHJlYWQtZm9yd2FyZC12YXJhcmdzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEg
QEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9u
IGJhcihhLCBiLCBjLCBkKSB7CisgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKK30KK2Z1bmN0aW9u
IGZvbyguLi5hcmdzKSB7CisgICAgcmV0dXJuIGJhciguLi5hcmdzKTsKK30KK25vSW5saW5lKGZv
byk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBbYSwgYiwg
YywgZF0gPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KGEgPT09IGkpOworICAg
IGFzc2VydChiID09PSBpKzEpOworICAgIGFzc2VydChjID09PSBpKzIpOworICAgIGFzc2VydChk
ID09PSBpKzMpIDsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQt
dG8tc3RhdGljLWNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNh
bGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyOSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVu
Y3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK25vSW5saW5lKGJheik7
CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAgIHJldHVybiBiYXooLi4uYXJncywgNDIs
IC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQpIHsKKyAgICByZXR1cm4gYmFy
KGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNz
ZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsxKTsKKyAgICBhc3Nl
cnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSszKTsKKyAgICBhc3NlcnQo
clszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09PSBpKzEpOworICAgIGFzc2VydChyWzVd
ID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBpKzMpOworfQpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwkocmV2aXNpb24gMjA4NjkzKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw0
ICszNiw0IEBAIGZ1bmN0aW9uIHJlcG9ydFJlc3VsdCguLi5hcmdzKSB7CiB9CiAKIGRyaXZlci5h
ZGRCZW5jaG1hcmsoQWlyQmVuY2htYXJrUnVubmVyKTsKLWRyaXZlci5hZGRCZW5jaG1hcmsoQmFz
aWNCZW5jaG1hcmtSdW5uZXIpOworLy9kcml2ZXIuYWRkQmVuY2htYXJrKEJhc2ljQmVuY2htYXJr
UnVubmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSw3ICsxOTI5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwodmFsdWUtPmNoaWxkKDApKQogICAgICAgICAgICAg
JiYgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQpIHsKICAgICAgICAgICAgIGlubmVy
QWRkID0gdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgb2Zmc2V0ID0gdmFsdWUtPmNoaWxk
KDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQzMl90
Pih2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+
Y2hpbGQoMCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGlj
OgogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBw
YXJ0aWN1bGFyIHJlZ2lzdGVyIGFuZCBzdGF0ZXMgdGhhdAogICAgICAgICAvLyB0aGUgcmVnaXN0
ZXIgaXMgdXNlZCBsYXRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlZ2lzdGVyIGlzIHVzZWQgYWZ0
ZXIgdGhlIHJlc3VsdAogICAgICAgICAvLyBpcyBkZWZpbmVkIChpLmUsIHRoZSByZXN1bHQgd2ls
bCBpbnRlcmZlcmUgd2l0aCB0aGlzIGFzIGFuIGlucHV0KS4KLSAgICAgICAgLy8gSXQncyBub3Qg
dmFsaWQgZm9yIHRoaXMgdG8gYmUgdXNlZCBhcyBhIHJlc3VsdCBraW5kLgorICAgICAgICAvLyBJ
dCdzIG5vdCB2YWxpZCBvdXRwdXQgcmVwcmVzZW50YXRpb24uCiAgICAgICAgIExhdGVSZWdpc3Rl
ciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMg
dXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzMsMTAgKzI3MywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsK
ICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291
bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCiAgICAgICAg
IC8vIGl0c2VsZiBpbnRvIGEgc3RyYWlnaHQtbGluZSBzZXF1ZW5jZSBvZiBHZXRTdGFjay9QdXRT
dGFjay4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzA3MQorCisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBiZSBtb3JlIGFjY3VyYXRlIGZv
ciBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQgaGVyZS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1fc3RhdGUudmFy
aWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKQEAg
LTE5NzQsNiArMTk3Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNl
IEJvdHRvbVZhbHVlOgogICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFBy
ZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgLy8gVGhpcyBjbGFpbXMgdG8gcmV0dXJu
IGJvdHRvbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxp
bWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSwzMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
U3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0
aCBhcmJpdHJhcnkgYXJyYXlzIQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IEFycmF5VXNlICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0
ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJy
YXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9y
ID0gbm9kZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09LID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUt
Pm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZl
Y3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gU3ByZWFkIHx8IGNoaWxkLT5jaGlsZDEoKS0+
b3AoKSAhPSBDcmVhdGVSZXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
T0sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5k
aWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0
ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhlIGZhY3QgdGhhdCBzY29wZWQgYXJndW1l
bnRzIGFyZQpAQCAtMTI2LDE5ICsxNTMsNzUgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRhdGVzOiAiLCBsaXN0RHVtcChtX2NhbmRp
ZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZENhbmRpZGF0ZShO
b2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0ZS0+b3AoKSkg
eworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgIHJldHVybiBtX2NhbmRpZGF0ZXMu
Y29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCkpOworCisgICAgICAgIGNhc2UgTmV3
QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNh
bmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
Yml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0
ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpCisgICAgeworICAg
ICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwgMT4gdG9SZW1vdmU7CisKKyAgICAgICAg
ICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAg
ICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92ZSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zaXRp
dmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBOb2RlKiBzb3VyY2UgPSBudWxscHRyKQor
ICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsK
KyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAmJiBzb3VyY2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIsIG5vZGUsICIgYmVjYXVzZSBpdCBlc2Nh
cGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAgICAgICAgaWYgKHJlbW92ZWQpCisgICAg
ICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOworICAgIH0KICAgICAKICAgICAvLyBM
b29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBjYW5kaWRhdGVzIHNl
dCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2FuZGlkYXRlc1RoYXRF
c2NhcGUoKQogICAgIHsKICAgICAgICAgYXV0byBlc2NhcGUgPSBbJl0gKEVkZ2UgZWRnZSwgTm9k
ZSogc291cmNlKSB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKICAgICAgICAg
ICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBib29s
IHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgICAg
IGlmIChyZW1vdmVkICYmIHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiZWxpbWlu
YXRpbmcgY2FuZGlkYXRlOiAiLCBlZGdlLm5vZGUoKSwgIiBiZWNhdXNlIGl0IGVzY2FwZXMgZnJv
bTogIiwgc291cmNlLCAiXG4iKTsKKyAgICAgICAgICAgIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRp
ZGF0ZShlZGdlLm5vZGUoKSwgc291cmNlKTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAg
IGF1dG8gZXNjYXBlQmFzZWRPbkFycmF5TW9kZSA9IFsmXSAoQXJyYXlNb2RlIG1vZGUsIEVkZ2Ug
ZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgdGhp
cyBjYWxsZWQgZnJvbSBDaGVja0FycmF5IGFuZCB0aGUgZWRnZSBiZWluZyBhIE5ld0FycmF5V2l0
aFNwcmVhZCBub2RlLgogICAgICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICAgICAgICAgIGlmIChl
ZGdlLT5vcCgpICE9IENyZWF0ZURpcmVjdEFyZ3VtZW50cykKQEAgLTE4Nyw2ICsyNzAsMjEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGVzY2FwZUlmU3ByZWFkID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUq
IHNvdXJjZSkgeworICAgICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpLT5vcCgpID09IE5ld0FycmF5
V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLCBzb3VyY2UpOworICAg
ICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gZWRnZS0+Yml0VmVjdG9yKCk7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2UtPm51bUNoaWxkcmVu
KCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkID0gbV9ncmFwaC52YXJB
cmdDaGlsZChlZGdlLm5vZGUoKSwgaSk7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShjaGls
ZCwgZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUoY2hpbGQtPmNoaWxkMSgpLCBjaGls
ZC5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOwogICAgICAgICAKICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
ewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CkBAIC0xOTUsMTUgKzI5
Myw0MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgICAg
ICAgICAgZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQxKCksIG5vZGUpOyAvLyBGSVhNRToKICAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShub2RlLT5hcnJheU1vZGUo
KSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9k
ZS0+Y2hpbGQyKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hp
bGQzKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZUlmU3By
ZWFkKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsgLy8gRklYTUU6CiAgICAgICAgICAgICAgICAgICAg
IGVzY2FwZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNoaWxkMSgp
LCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLCBub2Rl
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRXNjYXBlIGV2ZXJ5dGhpbmcgYnV0IHRoZSBzcHJlYWQgYXQgdGhlIGVuZC4KKyAgICAgICAg
ICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFc2NhcGVTZWxmID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRF
c2NhcGUgPSAhYml0VmVjdG9yLT5nZXQoaSkgfHwgY2hpbGQtPmNoaWxkMSgpLnVzZUtpbmQoKSAh
PSBBcnJheVVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRFc2NhcGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGNoaWxkLCBub2RlKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpICYmICFtX2NhbmRpZGF0ZXMu
Y29udGFpbnMoY2hpbGQubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGNhbid0IGJlY29tZSBwaGFudG9tIGlmIGFueSBvZiBvdXIgY2hpbGRyZW4gZXNjYXBlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVzY2FwZVNlbGYgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Y2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgp
LCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjYzLDYgKzM4NywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChu
b2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdh
dGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0
aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zOTAsNyArNTE4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBibG9jay0+
c2l6ZSgpICYmIGNhbmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
ImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xv
YmJlcmVkIGJ5OiAiLCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTQxNyw3ICs1NDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1p
bmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVk
IGJ5ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjAsOSArNTg4LDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyYXZlcnNlIGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBh
cmUgZ3VhcmFudGVlZCB0byBzZWUgYSBkZWYgYmVmb3JlIGEgdXNlLgogICAgICAgICAgICAgICAg
ICAgICAvLyBUaGVyZWZvcmUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgdHJhbnNmb3JtZWQgdGhl
IGFsbG9jYXRpb24gYmVmb3JlIHRoZSB1c2UKICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4g
YWxsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFy
Z3VtZW50cyB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0
ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2Fu
ZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFkIHx8IGNhbmRpZGF0ZS0+
b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXBGcm9tQ2FuZGlkYXRlID0gWyZdIChOb2RlKiBjYW5kaWRh
dGUpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fY2FuZGlkYXRl
cy5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzcHJlYWQgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKGNhbmRpZGF0ZSwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0gMSkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5vcCgpID09IFBo
YW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcmVzdCA9IHNwcmVh
ZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
ICAgIH07CiAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgpAQCAtNDg4LDYgKzYz
MywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6
CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tU3ByZWFk
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5l
d0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKQEAgLTU5OSw5NCArNzU4LDE4NiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0
T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+
b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWU7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IFsmXSAodW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9
IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2Rl
LT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25J
bnQzMlVzZSkpOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdz
RGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
c3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92
SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmln
aW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQ29udmVydFRvU3RhdGlj
TG9hZFN0b3JlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJp
dFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5
IGVzY2FwaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Db252ZXJ0VG9TdGF0aWNM
b2FkU3RvcmVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlz
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
YW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUs
IGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5IGVzY2FwaW5nLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkg
PT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0
ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTcHJlYWRBcmd1
bWVudHMgPSBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNwcmVhZEFyZ3VtZW50cyA9IDA7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICs9IG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5v
ZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNv
IGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQo
Y2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdz
RGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9k
ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQ
dXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2
YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQz
MlVzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0g
MSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRlICJ0aGlzIiwgc2luY2UgdGhh
dCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRl
eCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwg
YW5kIGxvYWQgaXQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2li
bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0Rh
dGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1
c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3Jl
IGFueXRoaW5nIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9y
ZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGls
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3Mg
aW4gdGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2Un
bGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDc0MzQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZh
cmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4
Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdz
RGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzdG9yZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBhc3NlcnRpb24gdHJ1
ZSB2aWEgcHJvcGVybHkgZXNjYXBpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBj
aGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZy
YW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4IDwgZnJhbWVBcmd1
bWVudENvdW50OyBsb2FkSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2Rl
LT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3N0b3JlSW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlk
YXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmVJbmRleCA8PSBsaW1p
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBzdG9yZUluZGV4
IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCF1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3Jp
Z2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9yZVZhbHVlKHVuZGVmaW5lZCwgc3RvcmVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3Rv
cmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0
ICsgc3RvcmVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53
aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwRnJvbUNhbmRpZGF0ZShjYW5kaWRhdGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9mZnNldCArPSBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4g
dmFyYXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEt
PmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8gZXhjbHVkZSAidGhp
cyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1p
dCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytzdG9yZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2Ug
aGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0YS0+b2Zmc2V0Owor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRv
IHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdl
IHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
YXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVz
LCB3ZSdsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUg
ZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlk
bid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBQdXRT
dGFja3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzQzNAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Ug
aGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTY5OCwyNyArOTQ5LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
YW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAg
IENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDEgKyB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQ7IGkgPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLCBPcEluZm8oZGF0YSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydFRv
U3RhdGljQ2FsbCA9IFsmXSAoY29uc3QgVmVjdG9yPE5vZGUqPiYgYXJndW1lbnRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbi5hcHBlbmQobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2RlLT5jaGlsZDIoKSk7CkBAIC03
NDMsMjUgKzk3NSw5OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
amFjZW5jeUxpc3Q6OlZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0VG9G
b3J3YXJkc0NhbGwgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENh
bGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9y
d2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3
YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhDYWxsRm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENv
bnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhblRyYW5zZm9ybVRvQ2FsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRW
ZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5n
ZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
PmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5j
aGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
VHJhbnNmb3JtVG9DYWxsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhblRyYW5zZm9ybVRvQ2FsbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxk
cmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRh
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU3RhdGljQ2FsbChhcmd1bWVu
dHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNh
bmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNl
dCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIHZhcmFyZ3NEYXRhLT5maXJzdFZh
ckFyZ09mZnNldDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9
IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmx1
c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydFRvU3RhdGljQ2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0Nh
bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOSw2ICsxMDksMTAgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKAogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0K
IAorICAgIC8vIEZJWE1FOiBoYW5kbGUgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIFJFTEVBU0Vf
QVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgIT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsK
KwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAgICAgICBj
YXNlIERpcmVjdFRhaWxDYWxsOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAg
ICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgY2FzZSBV
bnJlYWNoYWJsZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkp
OwogICAgICAgICAgICAgLy8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5k
IHRoZSBsaWtlLiBUaGVyZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBub2RlcyBh
ZnRlciB0aGUgdGVybWluYWwuIFRoZXkgYXJlIGFsbCBuby1vcHMgYW5kIHdpbGwgbm90IGhhdmUg
YW55IGNoZWNrZWQgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKEhl
YXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgUGhhbnRvbVNwcmVh
ZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKICAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQncyBwaGFudG9tLCBpdCBzdGls
bCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhl
ci4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwpAQCAtNjIwLDYgKzYyMiw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBXZSBjb3VsZCBiZSB3YXkgbW9yZSBw
cmVjaXNlIGhlcmUuCiAgICAgICAgIHJlYWQoU3RhY2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMTAgKzI0
NywxMyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25l
ZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBQdXRIaW50OgogICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBQdXRTdGFjazoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA4
NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQzOCw2ICsxNDM4LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50
b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAg
ICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKQEAg
LTE4MDcsNiArMTgwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdP
YmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTksNyArNDU5LDYgQEAgcHVibGljOgog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAg
ICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgotICAgICAgICBjYXNlIFBoYW50b21DcmVh
dGVSZXN0OgogICAgICAgICAgICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFs
dWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhh
dCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
NDczLDcgKzQ3Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFu
dCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChvcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVu
dHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpIHsKKyAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8
fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpIHsKICAgICAgICAgICAgIC8vIFRoZXNl
IHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBv
ZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRu
J3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAg
ICAgICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCk7CkBAIC0xMDYz
LDcgKzEwNjIsNyBAQCBwdWJsaWM6CiAKICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvcigpCiAgICAg
ewotICAgICAgICBBU1NFUlQob3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICBB
U1NFUlQob3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgb3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEJpdFZlY3Rvcio+KCk7
CiAgICAgfQogCkBAIC0xMTc1LDcgKzExNzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBo
YXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZh
cmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRW
YXJhcmdzV2l0aFNwcmVhZDsKICAgICB9CiAgICAgCiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2Fk
VmFyYXJnc0RhdGEoKQpAQCAtMTc1Niw2ICsxNzU1LDggQEAgcHVibGljOgogICAgICAgICBjYXNl
IFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
ICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3By
ZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rp
b246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODEsNiArMTgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhGb3J3YXJkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTM0NCw2ICszNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBOb2RlUmVz
dWx0SlMpIFwKICAgICBtYWNybyhQaGFudG9tRGlyZWN0QXJndW1lbnRzLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNyZWF0ZVJlc3QsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tU3ByZWFkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzKSBcCiAgICAgbWFjcm8oQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhDcmVhdGVDbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAg
IG1hY3JvKFBoYW50b21DbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA4Njkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw4IEBAIHZvaWQgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKKyAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgY29ycmVjdC4gSSB0aGluayBp
dCBpcy4KKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIExvYWRW
YXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC0xNjQsNyArMTY2LDcgQEAg
dm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjEwLDExIEBAIHZvaWQgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAg
Ly8gRklYTUU6CisgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTEwLDYgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAg
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0
aFNwcmVhZDoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnczoKQEAgLTExOCw3ICsxMTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFzQXJn
dW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCiAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxz
ZSBpZiAobV9ub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCkgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBzcHJlYWQgbW9yZSB0aGFuIHRoZSBsYXN0IGFyZ3Vt
ZW50LCB0aGlzIGlzIG5vIGxvbmdlciBjb3JyZWN0LgorICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPm51bUNoaWxkcmVu
KCkgLSAxKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKIAogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsOCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6
CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbE91dE9mQm91bmRzOgpAQCAtMTEwMCw2ICsxMTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBFeGl0T0s6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAg
ICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTksNyArMTE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3Ao
KSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIApAQCAtMjg2LDcgKzI4Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBhdXRv
IHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJl
YWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAg
CkBAIC01MDQsNyArNTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bG9jYXRpb25zIHRoZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3RhY2sgbG9jYXRpb25z
IGRlYWQgcmlnaHQgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBMb2FkVmFy
YXJncy9Gb3J3YXJkVmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2ZXIgc2luawogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRoaXMgcG9pbnQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IEZvcndhcmRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3NX
aXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzU4LDEwICszNTgsMTMgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgog
ICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6
CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNw
cmVhZDoKICAgICBjYXNlIENyZWF0ZVJlc3Q6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAg
IGNhc2UgU3RyaW5nUmVwbGFjZVJlZ0V4cDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA4Njkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYxNCw2ICs1NjE0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKKyAgICBjYXNlIFBo
YW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAg
ICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVuZXhwZWN0ZWQgbm9kZSBpbiBERkcg
YmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwODY5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4MzAsNiArNTgzMCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIEdldFN0
YWNrOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFk
OgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICBjYXNlIEZvcndhcmRW
YXJhcmdzV2l0aFNwcmVhZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZp
c2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAg
ICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC0yMjcsNiArMjI4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBG
b3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgzLDE0ICs2ODMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGF2ZSBiZXR0ZXIgdmFsaWRh
dGlvbiBmb3IgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAg
ICAgICBjYXNlIENoZWNrOgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBw
cm9iYWJseSBub3QgY29ycmVjdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRI
aW50OgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmNoaWxkMSgp
LT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDEwICsyMzMsMTMgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVh
dGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNl
IFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
OgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIEZvcndh
cmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIFN3aXRjaDoKICAgICBjYXNlIFR5cGVPZjoK
ICAgICBjYXNlIFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4
ODksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICAg
ICAgY29tcGlsZUZvcndhcmRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CisgICAgICAgICAgICBjb21waWxlRm9yd2Fy
ZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBE
Rkc6Okp1bXA6CiAgICAgICAgICAgICBjb21waWxlSnVtcCgpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMDg0LDYgKzEwODcsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVh
dGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAg
ICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoK
KyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKQEAgLTYwOTgsOCArNjEwMywzMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIH0pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJh
cmdzU3ByZWFkKCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAg
IExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSB0aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5jaGlsZDMoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlX
aXRoU3ByZWFkKTsKKyAgICAgICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0gbm9kZS0+Y2hpbGQz
KCkubm9kZSgpOworICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVh
ZC0+Yml0VmVjdG9yKCk7CisgICAgICAgIHVuc2lnbmVkIG51bU5vblNwcmVhZFBhcmFtZXRlcnMg
PSAwOworICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBW
ZWN0b3I8TFZhbHVlLCA4PiBwYXRjaHBvaW50QXJndW1lbnRzOworCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgewor
ICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRv
bVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEo
KS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFy
Z3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3ByZWFkLT5jaGlsZDEoKS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKKworICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNMZW5n
dGguaXNLbm93bikgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9
IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtub3duTGVu
Z3RoID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAgICAgICAgICAgICAgICAgICAg
a25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBrbm93bkxlbmd0
aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50MzIoa25v
d25MZW5ndGgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUg
Y29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xl
bmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1
bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFy
Z2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgu
dmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVy
T3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1f
b3V0Lnplcm9FeHRQdHIobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50QXJndW1l
bnRzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5k
KGxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrbnVtTm9u
U3ByZWFkUGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dK
U1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKSk7CisgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnRQdHIobnVtTm9uU3ByZWFkUGFyYW1ldGVycyArIDEpOworICAg
ICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQorICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIAorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKKworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKHRoaXNBcmcsIFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBWYWx1ZVJlcDo6
V2FybUFueSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3RvcldpdGhSZXAocGF0Y2hw
b2ludEFyZ3VtZW50cywgVmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcikp
OworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworCisgICAgICAgIFJlZlB0cjxQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2Ny
YXRjaFJlZ2lzdGVycyA9IDA7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbWluaW11bSBhbW91
bnQgb2YgY2FsbCBhcmcgYXJlYSBzdGFjayBzcGFjZSB0aGF0IGFsbCBKUy0+SlMgY2FsbHMgYWx3
YXlzIGhhdmUuCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1KU0NhbGxBcmVhU2l6ZSA9CisgICAg
ICAgICAgICBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKworICAgICAgICAgICAgV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRl
cyhtaW5pbXVtSlNDYWxsQXJlYVNpemUpOworICAgICAgICAKKyAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOworICAgICAgICBT
dGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmpp
dENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOworCisgICAg
ICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBh
cmFtcyktPmp1bXBzKGppdCk7CisKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNj
aGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAg
ICAgICAvL0NhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwor
CisgICAgICAgICAgICAgICAgLy9HUFJSZWcgc2NyYXRjaEdQUjEgPSBwYXJhbXMuZ3BTY3JhdGNo
KDApOworICAgICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hHUFIyID0gcGFyYW1zLmdwU2Ny
YXRjaCgxKTsKKyAgICAgICAgICAgICAgICAvL0dQUlJlZyBzY3JhdGNoR1BSMyA9IHBhcmFtcy5n
cFNjcmF0Y2goMik7CisgICAgICAgICAgICAgICAgLy9HUFJSZWcgc2NyYXRjaEdQUjQgPSBwYXJh
bXMuZ3BTY3JhdGNoKDMpOworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgdXNlZFJl
Z2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgp
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zWzFdLmdwcigpOwor
ICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7CisKKyAgICAgICAg
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMp
OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSNCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVn
aXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgYXV0byBnZXRWYWx1ZUZyb21SZXAgPSBbJl0g
KEIzOjpWYWx1ZVJlcCByZXAsIEdQUlJlZyByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlcC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6SW1tNjQocmVwLnZhbHVlKCkpLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTm90ZTogaW4gdGhpcyBmdW5jdGlvbiwgd2Ugb25seSByZXF1ZXN0IDY0IGJp
dCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpdCdzIHByb2JhYmx5IG1v
cmUgc3BhY2UgZWZmaWNpZW50IHRvIGFsbG93IDMyLWJpdCB2YWx1ZXMuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXAuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVwLm9mZnNldEZyb21GUCgpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IGlzIHRoaXMgdHJ1ZT8KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVwLmlzR1BSKCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghUmVnaXN0
ZXJTZXQoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjQp
LmdldChyZXAuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUocmVwLmdwcigp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGNh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgeworICAgICAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICAgICAgICAgICAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2Vt
Ymx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVt
cFdpZHRoKSk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gYWRq
dXN0U3RhY2sgPSBbJl0gKEdQUlJlZyBhbW91bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBhbW91bnQsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dDYXNlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBw
YXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU2xvdHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgb3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNSZXAgPSBwYXJhbXNbM107CisgICAgICAgICAgICAgICAg
ICAgIGdldFZhbHVlRnJvbVJlcChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1JlcCwgc2NyYXRj
aEdQUjIpOworICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0M6Om1heEFyZ3VtZW50cyArIDEpKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dGF0aWNfY2FzdDxzaXplX3Q+KG51bVVzZWRTbG90cyArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRj
aEdQUjEgbm93IGhhcyB0aGUgcmVxdWlyZWQgZnJhbWUgc2l6ZSBpbiBSZWdpc3RlciB1bml0cwor
ICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZCBzY3JhdGNoR1BSMSB0byBuZXh0IG11bHRpcGxl
IG9mIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
IC0gMSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMih+KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BS
MSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5sc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0z
MigzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoR1BSMSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisKKyAgICAgICAgICAgICAgICAgICAg
aW50IHN0b3JlT2Zmc2V0ID0gKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpLS07ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyYW1zT2Zmc2V0ID0gNDsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gc3RhdGUtPmdyYXBoLnZhckFyZ0No
aWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNwcmVhZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPmNoaWxkMSgpLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHNwcmVhZC0+Y2hpbGQxKCktPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHNwcmVhZC0+Y2hpbGQxKCktPm51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
Mzo6VmFsdWVSZXAgbnVtQXJndW1lbnRzVG9Db3B5ID0gcGFyYW1zW3BhcmFtc09mZnNldCArIGld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJlcChudW1Bcmd1bWVu
dHNUb0NvcHksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bG9hZE9mZnNldCA9IChBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxG
cmFtZSkub2Zmc2V0KCkgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBkb25lID0gaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hH
UFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BTdGFydCA9IGppdC5s
YWJlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjMsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNldCksIHNjcmF0Y2hHUFI0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSNCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IHNjcmF0Y2hHUFIzKS5saW5rVG8obG9vcFN0YXJ0LCAmaml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJlcChwYXJhbXNb
cGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigxKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbnRUaHJv
dyA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAg
ICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncykpOworICAgICAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RU
aHJvdyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkb250VGhy
b3cubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhZGp1
c3RTdGFjayhzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbGxlZUdQUiA9PSBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoY2FsbGVlR1BSLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAocGFyYW1z
WzJdLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQ
UjMsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5r
SW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0g
aml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0
Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYg
KGlzVGFpbENhbGwpCisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxU
eXBlLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygK
KyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xv
d0NhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQogICAgIHsKKyAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBOb2RlKiBub2RlID0g
bV9ub2RlOwogICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSk7CkBAIC02NDk3LDYgKzY4MDUsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KSAmJiBtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQp
IHsKKyAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKQEAgLTY1ODUs
NiArNjg5OCwxMDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NX
aXRoU3ByZWFkKCkKKyAgICB7CisgICAgICAgIHZvbGF0aWxlIGJvb2wgZiA9IGZhbHNlOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmKTsgLy8gRklYTUU6IGdvdHRhIG1ha2UgdGhpcyB3b3JrIHcv
IGFyYml0cmFyeSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLgorCisgICAgICAgIC8vIEZJWE1F
OiBjb21iaW5lIHRoaXMgd2l0aCB0aGUgcmVndWxhciBmb3J3YXJkVmFyYXJncy4KKyAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMSktPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWU7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ub2RlLT5udW1DaGlsZHJl
bigpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtU3RhdGljQXJndW1lbnRzID0gbV9ub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKKworICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCisgICAg
ICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKKyAgICAgICAgQXJndW1l
bnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxs
RnJhbWUpOworICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOworICAgICAg
ICAgICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICBr
bm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGxlbmd0aCA9
IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyBudW1TdGF0aWNBcmd1bWVudHMpOworICAg
ICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5n
dGggKyAxICsgbnVtU3RhdGljQXJndW1lbnRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0
aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgorICAgICAgICAg
ICAgaWYgKCFkYXRhLT5vZmZzZXQpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRz
TGVuZ3RoLnZhbHVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihh
cmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwor
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQs
IGxhcmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW5ndGgg
PSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdEludDMyKG51bVN0YXRpY0FyZ3VtZW50cykp
OworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmNvbnN0SW50MzIoMSArIG51bVN0YXRpY0FyZ3VtZW50cykpOworICAgICAgICB9CisKKyAg
ICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsCisgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBt
X291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
c3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3Vu
dCkpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+
b2Zmc2V0OworICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChp
bmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgTFZhbHVl
IHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAt
IDE7IGkrKykgeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgaSkpOyAgICAKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
dmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIG51
bGxwdHIsIEpTVmFsdWUoaSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBsZW5ndGhB
c1B0ciA9IG1fb3V0Lnplcm9FeHRQdHIobGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxvb3BCb3Vu
ZFZhbHVlID0gbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkTG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIG1haW5Mb29wRW50cnkgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBtYWluTG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIAorICAgICAg
ICBWYWx1ZUZyb21CbG9jayBsb29wQm91bmQgPSBtX291dC5hbmNob3IobG9vcEJvdW5kVmFsdWUp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxvb3BC
b3VuZFZhbHVlLCBsZW5ndGhBc1B0ciksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKG1h
aW5Mb29wRW50cnkpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkTG9vcCwgbWFpbkxvb3BFbnRyeSk7CisgICAgICAgIExW
YWx1ZSBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGxvb3BCb3VuZCk7
CisgICAgICAgIExWYWx1ZSBjdXJyZW50SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwg
bV9vdXQuaW50UHRyT25lKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKKyAgICAgICAg
ICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJl
bnRJbmRleCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBtX291dC5hbmNo
b3IoY3VycmVudEluZGV4KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91
c0luZGV4LCBuZXh0SW5kZXgpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBt
X291dC5hYm92ZShjdXJyZW50SW5kZXgsIGxlbmd0aEFzUHRyKSwgdW5zdXJlKHVuZGVmaW5lZExv
b3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obWFpbkxvb3BFbnRyeSwgbWFpbkxvb3ApOworICAgICAgICBsb29wQm91bmQgPSBtX291
dC5hbmNob3IobGVuZ3RoQXNQdHIpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVs
bChsZW5ndGhBc1B0ciksIHVuc3VyZShtYWluTG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5Mb29wLCBjb250aW51YXRpb24p
OworICAgICAgICBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGxvb3BC
b3VuZCk7CisgICAgICAgIGN1cnJlbnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBt
X291dC5pbnRQdHJPbmUpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5sb2FkNjQoCisg
ICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHNvdXJjZVN0YXJ0
LCBjdXJyZW50SW5kZXgpKTsKKyAgICAgICAgdW5zaWduZWQgc3RvcmVPZmZzZXQgPSAobV9ub2Rl
LT5udW1DaGlsZHJlbigpIC0gMSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOyAvLyBXZSd2ZSBh
bHJlYWR5IHN0b3JlZCB0aGVzZSBhdCB0aGUgdG9wLgorICAgICAgICBtX291dC5zdG9yZTY0KHZh
bHVlLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBjdXJy
ZW50SW5kZXgsIEpTVmFsdWUoKSwgc3RvcmVPZmZzZXQpKTsKKyAgICAgICAgbmV4dEluZGV4ID0g
bV9vdXQuYW5jaG9yKGN1cnJlbnRJbmRleCk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9Q
aGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmlzTnVsbChjdXJyZW50SW5kZXgpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG1haW5M
b29wKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAgICB7CiAgICAgICAg
IG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YXJnZXRCbG9jaygpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2aXNp
b24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIGVu
ZFZhckFyZ3MubGluaygmaml0KTsKICAgICB9Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobWF4QXJndW1lbnRzICsgMSkpKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU0M6Om1heEFyZ3VtZW50cyArIDEpKSk7CiAgICAgCiAgICAgZW1pdFNldFZh
cmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCB0cnVlLCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0
Y2hHUFIyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294996</attachid>
            <date>2016-11-16 16:20:57 -0800</date>
            <delta_ts>2016-11-16 19:07:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>84819</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOwor
fQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
eCA9IGJhciguLi5hcmdzLCA0MiwgLi4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9Jbmxp
bmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAg
ICBhc3NlcnQoclswXSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJb
MV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMs
IEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5n
aWZ5KHIpKTsKKyAgICBhc3NlcnQocls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzZdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMt
bG9hZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5l
dy1hcnJheS13aXRoLXNwcmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkocmV2aXNpb24g
MCkKKysrIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJl
YWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
OCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7
CisgICAgcmV0dXJuIGJheiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28o
YSwgYiwgYywgZCkgeworICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShm
b28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFz
c2VydChyWzBdID09PSBpKzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzJdID09PSBpKzMpOworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJb
NF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0g
PT09IGkrMyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJk
LXZhcmFyZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQt
Zm9yd2FyZC12YXJhcmdzLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRv
bS1zcHJlYWQtZm9yd2FyZC12YXJhcmdzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIsIG09IiIpIHsKKyAgICBpZiAo
IWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gYmFy
KGEsIGIsIGMsIGQpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKKyAgICB9CisgICAg
ZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzKTsKKyAg
ICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7
IGkrKykgeworICAgICAgICBsZXQgW2EsIGIsIGMsIGRdID0gZm9vKGksIGkrMSwgaSsyLCBpKzMp
OworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSBpKzEpOwor
ICAgICAgICBhc3NlcnQoYyA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0KGQgPT09IGkrMykgOwor
ICAgIH0KK30KK3Rlc3QxKCk7CisKK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGZ1bmN0aW9uIGJh
ciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBm
b28oYSwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3Mp
OworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CisgICAgICAgIGxldCByID0gZm9vKGksIGkrMSwgaSsyLCBpKzMpOworICAg
ICAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgICAgICBsZXQgW2EsIGIsIGMsIGQsIGUs
IGYsIGddID0gcjsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChi
ID09PSBpKzIpOworICAgICAgICBhc3NlcnQoYyA9PT0gaSszKTsKKyAgICAgICAgYXNzZXJ0KGQg
PT09IGkpOworICAgICAgICBhc3NlcnQoZSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGYgPT09
IGkrMiwgSlNPTi5zdHJpbmdpZnkocikgKyAiOiIgKyBmKTsKKyAgICAgICAgYXNzZXJ0KGcgPT09
IGkrMyk7CisgICAgfQorfQordGVzdDIoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1j
YWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNz
ZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK25v
SW5saW5lKGJheik7CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAgIHJldHVybiBiYXoo
Li4uYXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQpIHsKKyAg
ICByZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkr
Myk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsx
KTsKKyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSszKTsK
KyAgICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09PSBpKzEpOworICAg
IGFzc2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBpKzMpOworfQpJbmRl
eDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwkocmV2aXNpb24gMjA4Njkz
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw0ICszNiw0IEBAIGZ1bmN0aW9uIHJlcG9ydFJlc3VsdCguLi5hcmdzKSB7CiB9
CiAKIGRyaXZlci5hZGRCZW5jaG1hcmsoQWlyQmVuY2htYXJrUnVubmVyKTsKLWRyaXZlci5hZGRC
ZW5jaG1hcmsoQmFzaWNCZW5jaG1hcmtSdW5uZXIpOworLy9kcml2ZXIuYWRkQmVuY2htYXJrKEJh
c2ljQmVuY2htYXJrUnVubmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSw3ICsxOTI5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwodmFsdWUtPmNoaWxkKDApKQog
ICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQpIHsKICAgICAg
ICAgICAgIGlubmVyQWRkID0gdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgb2Zmc2V0ID0g
dmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgcHVibGljOgogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIGFuZCBzdGF0ZXMgdGhhdAogICAgICAgICAv
LyB0aGUgcmVnaXN0ZXIgaXMgdXNlZCBsYXRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlZ2lzdGVy
IGlzIHVzZWQgYWZ0ZXIgdGhlIHJlc3VsdAogICAgICAgICAvLyBpcyBkZWZpbmVkIChpLmUsIHRo
ZSByZXN1bHQgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGlzIGFzIGFuIGlucHV0KS4KLSAgICAgICAg
Ly8gSXQncyBub3QgdmFsaWQgZm9yIHRoaXMgdG8gYmUgdXNlZCBhcyBhIHJlc3VsdCBraW5kLgor
ICAgICAgICAvLyBJdCdzIG5vdCB2YWxpZCBvdXRwdXQgcmVwcmVzZW50YXRpb24uCiAgICAgICAg
IExhdGVSZWdpc3RlciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxp
ZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzMsMTAgKzI3MywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExvYWRWYXJh
cmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVj
ayBpZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0
dXJuCiAgICAgICAgIC8vIGl0c2VsZiBpbnRvIGEgc3RyYWlnaHQtbGluZSBzZXF1ZW5jZSBvZiBH
ZXRTdGFjay9QdXRTdGFjay4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MzA3MQorCisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBiZSBtb3Jl
IGFjY3VyYXRlIGZvciBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQgaGVyZS4KICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAg
IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKQEAgLTE5NzQsNiArMTk3Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6Cisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIo
dHJ1ZSk7IC8vIFByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgLy8gVGhpcyBjbGFp
bXMgdG8gcmV0dXJuIGJvdHRvbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSwzMyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgd2l0aCBhcmJpdHJhcnkgYXJyYXlzIQorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNlICYmIG5vZGUtPmNoaWxkMSgpLT5v
cCgpID09IENyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMu
YWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIEJpdFZlY3Rv
ciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc09LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gU3ByZWFkIHx8IGNoaWxk
LT5jaGlsZDEoKS0+b3AoKSAhPSBDcmVhdGVSZXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzT0sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc09LKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIGNvdWxkIGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhlIGZhY3QgdGhhdCBz
Y29wZWQgYXJndW1lbnRzIGFyZQpAQCAtMTI2LDE5ICsxNTMsNzUgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRhdGVzOiAiLCBsaXN0
RHVtcChtX2NhbmRpZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29sIGlzU3RpbGxWYWxp
ZENhbmRpZGF0ZShOb2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhbmRp
ZGF0ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgIHJldHVybiBt
X2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCkpOworCisgICAg
ICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJp
dFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkp
Lm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygp
CisgICAgeworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwgMT4gdG9SZW1vdmU7
CisKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5kaWRhdGVzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1Jl
bW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICB2
b2lkIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBOb2RlKiBzb3VyY2Ug
PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJl
bW92ZShub2RlKTsKKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAmJiBzb3VyY2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIsIG5vZGUsICIgYmVj
YXVzZSBpdCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAgICAgICAgaWYgKHJl
bW92ZWQpCisgICAgICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOworICAgIH0KICAg
ICAKICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBj
YW5kaWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2Fu
ZGlkYXRlc1RoYXRFc2NhcGUoKQogICAgIHsKICAgICAgICAgYXV0byBlc2NhcGUgPSBbJl0gKEVk
Z2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc291cmNl
KTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBib29sIHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVtb3ZlKGVkZ2Uubm9kZSgpKTsK
LSAgICAgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBlZGdlLm5vZGUoKSwgIiBiZWNhdXNlIGl0
IGVzY2FwZXMgZnJvbTogIiwgc291cmNlLCAiXG4iKTsKKyAgICAgICAgICAgIHRyYW5zaXRpdmVs
eVJlbW92ZUNhbmRpZGF0ZShlZGdlLm5vZGUoKSwgc291cmNlKTsKICAgICAgICAgfTsKICAgICAg
ICAgCiAgICAgICAgIGF1dG8gZXNjYXBlQmFzZWRPbkFycmF5TW9kZSA9IFsmXSAoQXJyYXlNb2Rl
IG1vZGUsIEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgdGhpcyBjYWxsZWQgZnJvbSBDaGVja0FycmF5IGFuZCB0aGUgZWRnZSBiZWluZyBh
IE5ld0FycmF5V2l0aFNwcmVhZCBub2RlLgogICAgICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICAg
ICAgICAgIGlmIChlZGdlLT5vcCgpICE9IENyZWF0ZURpcmVjdEFyZ3VtZW50cykKQEAgLTE4Nyw2
ICsyNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfTsKKworICAgICAgICBhdXRvIGVzY2FwZUlmU3ByZWFkID0gWyZdIChFZGdl
IGVkZ2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpLT5vcCgp
ID09IE5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLCBz
b3VyY2UpOworICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gZWRnZS0+Yml0
VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2Ut
Pm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkID0g
bV9ncmFwaC52YXJBcmdDaGlsZChlZGdlLm5vZGUoKSwgaSk7CisgICAgICAgICAgICAgICAgICAg
IGVzY2FwZShjaGlsZCwgZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYml0
VmVjdG9yLT5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUoY2hpbGQtPmNo
aWxkMSgpLCBjaGlsZC5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOwogICAgICAg
ICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CkBA
IC0xOTUsMTUgKzI5Myw0MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQxKCksIG5vZGUpOyAv
LyBGSVhNRToKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShub2Rl
LT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2Nh
cGUobm9kZS0+Y2hpbGQzKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgICAg
IGVzY2FwZUlmU3ByZWFkKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsgLy8gRklYTUU6CiAgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCksIG5v
ZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNo
aWxkMigpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRXNjYXBlIGV2ZXJ5dGhpbmcgYnV0IHRoZSBzcHJlYWQgYXQgdGhlIGVu
ZC4KKyAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRW
ZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFc2NhcGVTZWxmID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5u
dW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaG91bGRFc2NhcGUgPSAhYml0VmVjdG9yLT5nZXQoaSkgfHwgY2hpbGQtPmNoaWxkMSgp
LnVzZUtpbmQoKSAhPSBBcnJheVVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91
bGRFc2NhcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGNoaWxkLCBub2Rl
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpICYmICFt
X2NhbmRpZGF0ZXMuY29udGFpbnMoY2hpbGQubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbid0IGJlY29tZSBwaGFudG9tIGlmIGFueSBvZiBvdXIgY2hpbGRy
ZW4gZXNjYXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVzY2FwZVNlbGYg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjYzLDYgKzM4NywxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1l
V2F0Y2hwb2ludChub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVh
ZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZp
bmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0z
OTAsNyArNTE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRl
eCA9PSBibG9jay0+c2l6ZSgpICYmIGNhbmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1
c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAiLCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlk
YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQxNyw3ICs1NDUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQg
aXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRp
ZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjAsOSArNTg4LDI2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyYXZlcnNlIGluIHN1Y2ggYSB3
YXkgdGhhdCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgYSBkZWYgYmVmb3JlIGEgdXNlLgogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgdHJh
bnNmb3JtZWQgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHRoZSB1c2UKICAgICAgICAgICAgICAgICAg
ICAgLy8gb2YgYW4gYWxsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRp
ZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhh
bnRvbURpcmVjdEFyZ3VtZW50cyB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1
bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFkIHx8
IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXBGcm9tQ2FuZGlkYXRlID0gWyZdIChO
b2RlKiBjYW5kaWRhdGUpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzcHJlYWQgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0g
MSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFk
LT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
cmVzdCA9IHNwcmVhZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgpA
QCAtNDg4LDYgKzYzMywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFy
Z3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0
ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKQEAgLTU5OSw5NCArNzU4LDE4NiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJl
dHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
RXhpdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJn
c0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQg
Kz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IFsmXSAodW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBN
b3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRn
ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhj
YW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
Tm9kZSwgS25vd25JbnQzMlVzZSkpOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVk
IHN0b3JlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNr
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQ29u
dmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBC
aXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNo
aWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUg
dmlhIHByb3Blcmx5IGVzY2FwaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGls
ZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxk
MSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Db252
ZXJ0VG9TdGF0aWNMb2FkU3RvcmVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAg
ICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IDE7IC8vIHx0aGlzfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGls
ZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5IGVzY2Fw
aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZTcHJlYWRBcmd1bWVudHMgPSBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNwcmVhZEFyZ3VtZW50
cyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICs9IG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsrYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZh
cmFyZ3NEYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxp
bWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0Rh
dGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
Y2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmln
aW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRh
a2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzTm9kZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nl
c3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9k
ZSwgS25vd25JbnQzMlVzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0Rh
dGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRlICJ0aGlz
Iiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAx
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4ID0g
MDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3
ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4
ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJ
bmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBidXQg
d2Ugd2lsbCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2
ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywg
d2UnbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5l
cmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3Vy
IGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJl
YXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGlt
aXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9y
LT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBh
c3NlcnRpb24gdHJ1ZSB2aWEgcHJvcGVybHkgZXNjYXBpbmcuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRv
bVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4
IDwgZnJhbWVBcmd1bWVudENvdW50OyBsb2FkSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZs
dXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdl
dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0
b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
K3N0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmVJ
bmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVu
ZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
OyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3Rh
bnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yZVZhbHVlKHVuZGVmaW5lZCwgc3RvcmVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUg
YSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJn
c0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5v
ZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwRnJvbUNhbmRpZGF0ZShj
YW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9mZnNldCAr
PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA+PSAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8g
ZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFy
Z3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytzdG9yZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRl
cm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0
YS0+b2Zmc2V0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9h
ZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpT
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5F
eGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWlu
aW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBk
byB0aGUgc3RvcmVzLCB3ZSdsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRo
aW5nIHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaGF2ZSBQdXRTdGFja3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzQzNAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY5OCwyNyArOTQ5LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQzKCku
bm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24o
Y2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxsVmFy
YXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJn
T2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQ7
IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLCBPcElu
Zm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydFRvU3RhdGljQ2FsbCA9IFsmXSAoY29uc3QgVmVjdG9yPE5vZGUqPiYgYXJndW1l
bnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2RlLT5jaGls
ZDIoKSk7CkBAIC03NDMsMjUgKzk3NSw5OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJz
dENoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENh
bGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENh
bGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
VGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDYWxsRm9yd2FyZFZhcmFyZ3MpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhblRyYW5zZm9ybVRvQ2FsbCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRl
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Yml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FuVHJhbnNmb3JtVG9DYWxsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhblRyYW5zZm9ybVRvQ2FsbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRh
dGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hp
bGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Rmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4s
IE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU3RhdGlj
Q2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAw
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5maXJz
dFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIHZhcmFyZ3NE
YXRhLT5maXJzdFZhckFyZ09mZnNldDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydFRvU3RhdGljQ2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksMTAgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50
MzIpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBoYW5kbGUgTmV3QXJyYXlXaXRoU3ByZWFkOgor
ICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgIT0gTmV3QXJyYXlX
aXRoU3ByZWFkKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNiArOTQsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAg
ICAgICAgICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAg
ICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZElu
ZGV4KG5vZGUsIGkpOwogICAgICAgICAgICAgLy8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4g
UGhhbnRvbXMgYW5kIHRoZSBsaWtlLiBUaGVyZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9y
IHR3byBub2RlcyBhZnRlciB0aGUgdGVybWluYWwuIFRoZXkgYXJlIGFsbCBuby1vcHMgYW5kIHdp
bGwgbm90IGhhdmUgYW55IGNoZWNrZWQgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2
ICs0NzgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2Ug
UGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQncyBwaGFu
dG9tLCBpdCBzdGlsbCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJlcGxhY2Vk
IHdpdGggYW5vdGhlci4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwpAQCAtNjIwLDYg
KzYyMiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhT
cHJlYWQ6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBXZSBjb3VsZCBi
ZSB3YXkgbW9yZSBwcmVjaXNlIGhlcmUuCiAgICAgICAgIHJlYWQoU3RhY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDcsMTAgKzI0NywxMyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJl
Y3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50
b21OZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgogICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBQdXRI
aW50OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBQdXRTdGFj
azoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzOCw2ICsxNDM4LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgICAg
ICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRP
ZkJvdW5kczoKQEAgLTE4MDcsNiArMTgwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGFp
bENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgRm9yd2FyZFZh
cmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTksNyArNDU5LDYg
QEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgotICAgICAgICBjYXNl
IFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAgICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0
aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2Vu
ZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0
byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtNDczLDcgKzQ3Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChvcCgpID09IFBoYW50b21E
aXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IG9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpIHsKKyAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVj
dEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpIHsKICAgICAgICAg
ICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0
aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhl
cndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRl
IGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9u
KCk7CkBAIC0xMDYzLDcgKzEwNjIsNyBAQCBwdWJsaWM6CiAKICAgICBCaXRWZWN0b3IqIGJpdFZl
Y3RvcigpCiAgICAgewotICAgICAgICBBU1NFUlQob3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQp
OworICAgICAgICBBU1NFUlQob3AoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgb3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEJp
dFZlY3Rvcio+KCk7CiAgICAgfQogCkBAIC0xMTc1LDcgKzExNzQsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgp
ID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDsKICAgICB9CiAgICAgCiAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQpAQCAtMTc1Niw2ICsxNzU1LDggQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVj
dEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3RnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9u
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTM0NCw2ICszNDUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQ3JlYXRlRGlyZWN0QXJndW1l
bnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFudG9tRGlyZWN0QXJndW1lbnRzLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNyZWF0
ZVJlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFu
dG9tU3ByZWFkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhDcmVhdGVDbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21DbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2
aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw4IEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKKyAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgY29ycmVj
dC4gSSB0aGluayBpdCBpcy4KKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAg
ICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC0xNjQs
NyArMTY2LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAg
Y2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjEwLDExIEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKKyAgICAgICAgLy8gRklYTUU6CisgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9m
Qm91bmRzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnczoKQEAgLTExOCw3ICsxMTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgaWYgKG1f
bm9kZS0+aGFzQXJndW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCiAg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZWxzZSBpZiAobV9ub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBzcHJlYWQgbW9yZSB0aGFuIHRo
ZSBsYXN0IGFyZ3VtZW50LCB0aGlzIGlzIG5vIGxvbmdlciBjb3JyZWN0LgorICAgICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUt
Pm51bUNoaWxkcmVuKCkgLSAxKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKIAogICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDYgKzEw
MTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgog
ICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpAQCAtMTEwMCw2ICsxMTAyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBFeGl0T0s6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRo
U3ByZWFkOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9
OwogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExv
YWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIApAQCAtMjg2LDcg
KzI4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAg
ICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC01MDQsNyArNTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgd3JpdGUgdG8uIFRoaXMgbWFrZXMgdGhvc2Ugc3Rh
Y2sgbG9jYXRpb25zIGRlYWQgcmlnaHQgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZv
cmUgYSBMb2FkVmFyYXJncy9Gb3J3YXJkVmFyYXJncy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgbmV2
ZXIgc2luawogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0U3RhY2tzIHJpZ2h0IHRvIHRo
aXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5v
cCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3NXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDEwICszNTgsMTMgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVB
Y3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBo
YW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50
b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgog
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIEZvcndhcmRW
YXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIENyZWF0ZVJlc3Q6CiAgICAgY2FzZSBTdHJpbmdS
ZXBsYWNlOgogICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJlZ0V4cDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxNCw2ICs1NjE0LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoK
KyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVuZXhwZWN0ZWQg
bm9kZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MzAsNiArNTgzMCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxTdGFjazoKICAg
ICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQ
aGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICBj
YXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0Lmdy
YXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhh
c2UuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0
aFNwcmVhZDoKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC0yMjcsNiArMjI4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNv
dW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgzLDE0ICs2ODMsMjMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NX
aXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGF2ZSBi
ZXR0ZXIgdmFsaWRhdGlvbiBmb3IgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgICAgICAgICBjYXNlIENoZWNrOgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBwcm9iYWJseSBub3QgY29ycmVjdC4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRIaW50OgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5v
ZGUtPmNoaWxkMSgpLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBoZXJlLgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDEwICsyMzMsMTMg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTWF0
ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50
czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoK
KyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIFN3aXRjaDoKICAgICBj
YXNlIFR5cGVPZjoKICAgICBjYXNlIFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg4OSw2ICs4ODksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgogICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CisgICAgICAgICAgICBj
b21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBERkc6Okp1bXA6CiAgICAgICAgICAgICBjb21waWxlSnVtcCgpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMDg0LDYgKzEwODcsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoK
ICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAgLTYwOTgsOCArNjEwMywyODIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzU3ByZWFkKCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25v
ZGU7CisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIExWYWx1ZSB0aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
KTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5jaGlsZDMoKS0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0g
bm9kZS0+Y2hpbGQzKCkubm9kZSgpOworICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFy
cmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7CisgICAgICAgIHVuc2lnbmVkIG51bU5vblNwcmVh
ZFBhcmFtZXRlcnMgPSAwOworICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhz
OworICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiBwYXRjaHBvaW50QXJndW1lbnRzOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVu
KCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJl
YWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9w
KCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3By
ZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3ByZWFkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0U3ByZWFk
TGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50cy5hcHBlbmQobGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK251bU5vblNwcmVhZFBhcmFtZXRlcnM7
CisgICAgICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkpOworICAgICAgICAgICAgICAgIHBhdGNocG9p
bnRBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIExWYWx1ZSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0
SW50UHRyKG51bU5vblNwcmVhZFBhcmFtZXRlcnMgKyAxKTsKKyAgICAgICAgZm9yIChMVmFsdWUg
bGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwor
ICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0
Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZCh0aGlzQXJnLCBWYWx1ZVJlcDo6V2FybUFueSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3JXaXRoUmVwKHBhdGNocG9pbnRBcmd1bWVudHMsIFZh
bHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25z
KHBhdGNocG9pbnQpOworCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAw
OworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFy
ZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpTIGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAg
ICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNpemUgPQorICAgICAgICAgICAgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAg
ICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFy
ZWFTaXplKTsKKyAgICAgICAgCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRk
VW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQp
OworCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlv
bkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAgaml0
LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7
CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2Rl
QmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgLy9DYWxsVmFyYXJn
c0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKworICAgICAgICAgICAgICAg
IC8vR1BSUmVnIHNjcmF0Y2hHUFIxID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAg
ICAgICAvL0dQUlJlZyBzY3JhdGNoR1BSMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CisgICAgICAg
ICAgICAgICAgLy9HUFJSZWcgc2NyYXRjaEdQUjMgPSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAg
ICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hHUFI0ID0gcGFyYW1zLmdwU2NyYXRjaCgzKTsK
KyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworCisgICAgICAgICAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9tUmVwID0gWyZdIChCMzo6VmFsdWVSZXAgcmVw
LCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXAuaXNDb25zdGFu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6Oklt
bTY0KHJlcC52YWx1ZSgpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6
IGluIHRoaXMgZnVuY3Rpb24sIHdlIG9ubHkgcmVxdWVzdCA2NCBiaXQgdmFsdWVzLgorICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBwcm9iYWJseSBtb3JlIHNwYWNlIGVmZmljaWVu
dCB0byBhbGxvdyAzMi1iaXQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBpZiAocmVwLmlz
U3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHJlcC5vZmZzZXRGcm9tRlAoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHRy
dWU/CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcC5pc0dQUigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIVJlZ2lzdGVyU2V0KHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFI0KS5nZXQocmVwLmdwcigpKSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1h
bEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChH
UFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFt
ZVNpemUoKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtVXNlZFNsb3RzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzUmVwID0gcGFyYW1zWzNdOworICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21S
ZXAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNSZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1
bWVudHMgKyAxKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aml0Lm1vdmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90
PihudW1Vc2VkU2xvdHMgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykpLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhl
IHJlcXVpcmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAg
ICAgLy8gUm91bmQgc2NyYXRjaEdQUjEgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpCisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BS
MSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIofihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAg
ICAgICAgICBqaXQubHNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlciwgc2NyYXRjaEdQUjEpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNj
cmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9
IChDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApIC0gMikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IDQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRlLT5ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJl
YWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFy
Z3VtZW50c1RvQ29weSA9IHBhcmFtc1twYXJhbXNPZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAobnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNo
R1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNz
ZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBsb29wU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQs
IGxvYWRPZmZzZXQpLCBzY3JhdGNoR1BSNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlNjQoc2NyYXRjaEdQUjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgQ0NhbGxI
ZWxwZXJzOjpUaW1lc0VpZ2h0LCBzdG9yZU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlu
a1RvKGxvb3BTdGFydCwgJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAocGFyYW1zW3BhcmFtc09mZnNldCArIGld
LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
c2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUaW1l
c0VpZ2h0LCBzdG9yZU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkp
LCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0
V2l0aFJlYXNvbihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZG9udFRocm93LmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQ
UjEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIg
PT0gR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQ
UiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CisgICAgICAgICAgICAgICAgZ2V0VmFsdWVGcm9tUmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6
OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0
Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxD
YWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9y
KGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRo
UGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUklu
Zm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoaXNUYWlsQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAg
ICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpCisgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFz
b24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2lu
YWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlv
bk9mKHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9p
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIGNv
bXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKICAgICB7CisgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMygpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAg
ICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwogICAgICAg
ICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CkBAIC02NDk3
LDYgKzY3NzYsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFy
YXJncygpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSAmJiBtX25vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAg
IGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKSkKQEAgLTY1ODUsNiArNjg2OSwxNDAgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CiAgICAgfQogCisgICAgTFZhbHVlIGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKQorICAgIHsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0
aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYXJn
dW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3Ro
ID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOworICAgICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0g
a25vd25MZW5ndGggLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gbV9v
dXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIFdl
IG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBh
Ym92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgorICAgICAgICBpZiAoIW51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52
YWx1ZTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJ
bnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUo
Y29udGludWF0aW9uKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxh
cmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3Ro
LnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIs
IHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOworICAgIH0K
KworICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogaXMgdGhpcyBjb3JyZWN0IGhhc2ggdHJhaXRzIGZvciBpdCB0byBiZSBu
dWxscHRyPworICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpE
ZWZhdWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFp
dHM8SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7CisKKyAgICAgICAgTm9k
ZSogYXJyYXlXaXRoU3ByZWFkID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGFycmF5V2l0aFNwcmVhZC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkKTsKKyAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcnJheVdpdGhTcHJlYWQt
PmJpdFZlY3RvcigpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJndW1lbnRz
ID0gMDsKKyAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsg
aSsrKSB7CisgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBp
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPmNo
aWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBjYWNo
ZWRTcHJlYWRMZW5ndGhzLmZpbmQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlciAhPSBjYWNoZWRTcHJlYWRMZW5ndGhzLmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICBzcHJlYWRMZW5ndGhzLmFwcGVuZChpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBnZXRTcHJlYWRMZW5ndGhG
cm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgY2hpbGQtPmNoaWxkMSgpLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkU3ByZWFk
TGVuZ3Rocy5hZGQoaW5saW5lQ2FsbEZyYW1lLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7
CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGljQXJndW1lbnRzKTsKKyAgICAgICAgZm9yIChM
VmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKworICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5z
dG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50
KSk7CisKKyAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lU3RhcnQpLnZhbHVlKCk7CisgICAgICAgIExWYWx1ZSBzdG9yZUluZGV4ID0gbV9vdXQuY29u
c3RJbnRQdHIoMCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhT
cHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+
Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGls
ZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxs
RnJhbWUsIGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAg
ICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVk
U3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2FsbEZyYW1lKSk7CisKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHN0YXJ0TG9hZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0
SW50UHRyKDApKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydFN0b3JlSW5k
ZXggPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc3RhcnRTdG9yZUluZGV4Rm9yRW5kID0gbV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgpOwor
CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzY0KHNwcmVhZExlbmd0
aCksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcCkpOworCisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wLCBjb250aW51YXRp
b24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBsb29wU3RvcmVJbmRleCA9IG1fb3V0LnBoaShJ
bnQ2NCwgc3RhcnRTdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbG9hZEluZGV4
ID0gbV9vdXQucGhpKEludDY0LCBzdGFydExvYWRJbmRleCk7CisgICAgICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAorICAgICAgICAgICAgICAgICAgICBtX291dC5iYXNl
SW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHNvdXJjZVN0YXJ0LCBsb2FkSW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52
YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBsb29wU3RvcmVJbmRleCkpOworICAgICAgICAgICAgICAg
IExWYWx1ZSBuZXh0TG9hZEluZGV4ID0gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBs
b2FkSW5kZXgpOworICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkobG9hZElu
ZGV4LCBtX291dC5hbmNob3IobmV4dExvYWRJbmRleCkpOworICAgICAgICAgICAgICAgIExWYWx1
ZSBuZXh0U3RvcmVJbmRleCA9IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cigxKSwgbG9vcFN0
b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkobG9vcFN0
b3JlSW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0U3RvcmVJbmRleCkpOworICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGxvb3BTdG9yZUluZGV4Rm9yRW5kID0gbV9vdXQuYW5jaG9yKG5leHRT
dG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3cobmV4
dExvYWRJbmRleCwgc3ByZWFkTGVuZ3RoKSwgdW5zdXJlKGxvb3ApLCB1bnN1cmUoY29udGludWF0
aW9uKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBz
dGFydFN0b3JlSW5kZXhGb3JFbmQsIGxvb3BTdG9yZUluZGV4Rm9yRW5kKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX2dy
YXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkpOworICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFy
Z2V0U3RhcnQsIHN0b3JlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gbV9v
dXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBzdG9yZUluZGV4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZExvb3AgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleCA9IG1fb3V0
LmFuY2hvcihzdG9yZUluZGV4KTsKKyAgICAgICAgTFZhbHVlIGxvb3BCb3VuZFZhbHVlID0gbV9v
dXQuY29uc3RJbnRQdHIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5iZWxvdyhzdG9yZUluZGV4LCBsb29wQm91bmRWYWx1ZSksCisgICAgICAgICAg
ICB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBsb29wU3RvcmVJbmRleCA9IG1fb3V0LnBoaShJ
bnQ2NCwgc3RhcnRTdG9yZUluZGV4KTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKKyAg
ICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQs
IGxvb3BTdG9yZUluZGV4KSk7CisgICAgICAgIExWYWx1ZSBuZXh0SW5kZXggPSBtX291dC5hZGQo
bG9vcFN0b3JlSW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShsb29wU3RvcmVJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRJbmRleCkpOwor
ICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5iZWxvdyhuZXh0SW5kZXgs
IGxvb3BCb3VuZFZhbHVlKSwgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUoY29udGludWF0
aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewogICAgICAgICBtX291dC5q
dW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFyZ2V0QmxvY2soKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlzaW9uIDIwODY5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UoQ0NhbGwKICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGZpcnN0VmFyQXJnT2Zmc2V0KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBlbmRWYXJBcmdz
LmxpbmsoJmppdCk7CiAgICAgfQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KG1heEFyZ3VtZW50cyArIDEpKSk7CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOwogICAgIAogICAgIGVtaXRTZXRWYXJhcmdzRnJh
bWUoaml0LCBzY3JhdGNoR1BSMSwgdHJ1ZSwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMik7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295016</attachid>
            <date>2016-11-16 19:07:58 -0800</date>
            <delta_ts>2016-11-17 00:14:54 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>98304</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOwor
fQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
eCA9IGJhciguLi5hcmdzLCA0MiwgLi4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9Jbmxp
bmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAg
ICBhc3NlcnQoclswXSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJb
MV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMs
IEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5n
aWZ5KHIpKTsKKyAgICBhc3NlcnQocls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzZdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMt
bG9hZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5l
dy1hcnJheS13aXRoLXNwcmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkocmV2aXNpb24g
MCkKKysrIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJl
YWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
OCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7
CisgICAgcmV0dXJuIGJheiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28o
YSwgYiwgYywgZCkgeworICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShm
b28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFz
c2VydChyWzBdID09PSBpKzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzJdID09PSBpKzMpOworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJb
NF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0g
PT09IGkrMyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLW5ldy1hcnJheS13aXRo
LXNwcmVhZC1vc3ItZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9t
LW5ldy1hcnJheS13aXRoLXNwcmVhZC1vc3ItZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVz
dHMvc3RyZXNzL3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24hIik7Cit9Citub0lu
bGluZShhc3NlcnQpOworCitsZXQgdmFsdWUgPSBmYWxzZTsKKworZnVuY3Rpb24gYmF6KHgpIHsK
KyAgICBpZiAodHlwZW9mIHggIT09ICJudW1iZXIiKSB7CisgICAgICAgIHZhbHVlID0gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIHg7Cit9Citub0lubGluZShiYXopOworCitmdW5jdGlvbiBiYXIo
Li4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorCitsZXQgZGlkRWZmZWN0cyA9IGZhbHNl
OyAKK2Z1bmN0aW9uIGVmZmVjdHMoKSB7IGRpZEVmZmVjdHMgPSB0cnVlOyB9Citub0lubGluZShl
ZmZlY3RzKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQgdGhlQXJncyA9
IFsuLi5hcmdzLCBhLCAuLi5hcmdzXTsKKyAgICBiYXooYSk7CisgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgbGV0IHIgPSBiYXIuYXBwbHkobnVsbCwgdGhl
QXJncyk7CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgZm9vKGksIGkrMSk7CisgICAgYXNzZXJ0KCFkaWRF
ZmZlY3RzKTsKK30KK2xldCBvID0ge307CitsZXQgW2EsIGIsIGNdID0gZm9vKG8sIDIwKTsKK2Fz
c2VydChhID09PSAyMCk7Cithc3NlcnQoYiA9PT0gbyk7Cithc3NlcnQoYyA9PT0gMjApOworYXNz
ZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9y
d2FyZC12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3By
ZWFkLWZvcndhcmQtdmFyYXJncy5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMvc3RyZXNzL3Bo
YW50b20tc3ByZWFkLWZvcndhcmQtdmFyYXJncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExNyBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBhc3NlcnQoYiwgbT0iIikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsgbSk7
Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlv
biBiYXIoYSwgYiwgYywgZCkgeworICAgICAgICByZXR1cm4gW2EsIGIsIGMsIGRdOworICAgIH0K
KyAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3Mp
OworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBbYSwgYiwgYywgZF0gPSBmb28oaSwgaSsxLCBpKzIs
IGkrMyk7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkr
MSk7CisgICAgICAgIGFzc2VydChjID09PSBpKzIpOworICAgICAgICBhc3NlcnQoZCA9PT0gaSsz
KSA7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBiYXIoLi4u
YXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEs
IC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAg
ICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7
IGkrKykgeworICAgICAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAg
YXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICAgICAgbGV0IFthLCBiLCBjLCBkLCBlLCBmLCBn
XSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBhc3NlcnQoYiA9PT0g
aSsyKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IGkrMyk7CisgICAgICAgIGFzc2VydChkID09PSBp
KTsKKyAgICAgICAgYXNzZXJ0KGUgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChmID09PSBpKzIp
OworICAgICAgICBhc3NlcnQoZyA9PT0gaSszKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qz
KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4u
LmFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgLi4uYXJncykgeworICAg
ICAgICByZXR1cm4gYmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGlu
ZShmb28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAg
ICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3Ro
ID09PSAzKTsKKyAgICAgICAgbGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09
PSBpKzMpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSk7CisgICAgICAgIGFzc2VydChjID09PSBp
KzMpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAgZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGJhcigu
Li5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXooLi4uYXJncyk7CisgICAgfQorICAgIGZ1bmN0
aW9uIGZvbyhhLCBiLCBjLCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJn
cywgYSwgLi4uYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCByID0gZm9vKGksIGkrMSwg
aSsyLCBpKzMpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDEpOworICAgICAgICBhc3Nl
cnQoclswXSA9PT0gaSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5j
dGlvbiBiYXooYSwgYiwgYykgeworICAgICAgICByZXR1cm4gW2EsIGIsIGNdOworICAgIH0KKyAg
ICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICBy
ZXR1cm4gYmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28p
OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQg
ciA9IGZvbyhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAz
KTsKKyAgICAgICAgbGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKTsK
KyAgICAgICAgYXNzZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1
bmRlZmluZWQpOworICAgIH0KK30KKwordGVzdDEoKTsKK3Rlc3QyKCk7Cit0ZXN0MygpOwordGVz
dDQoKTsKK3Rlc3Q1KCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3It
ZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3It
ZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFkLW9z
ci1leGl0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKK2Z1bmN0aW9uIGFzc2Vy
dChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRp
b24hIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitsZXQgdmFsdWUgPSBmYWxzZTsKKworZnVu
Y3Rpb24gYmF6KHgpIHsKKyAgICBpZiAodHlwZW9mIHggIT09ICJudW1iZXIiKSB7CisgICAgICAg
IHZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9Citub0lubGluZShiYXopOwor
CitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorCitsZXQgZGlk
RWZmZWN0cyA9IGZhbHNlOyAKK2Z1bmN0aW9uIGVmZmVjdHMoKSB7IGRpZEVmZmVjdHMgPSB0cnVl
OyB9Citub0lubGluZShlZmZlY3RzKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAg
ICBsZXQgciA9IGJhciguLi5hcmdzLCBiYXooYSksIC4uLmFyZ3MpOworICAgIGlmICh2YWx1ZSkg
eworICAgICAgICBlZmZlY3RzKCk7CisgICAgfQorICAgIHJldHVybiByOworfQorbm9JbmxpbmUo
Zm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgIGZvbyhpLCBp
KzEpOworICAgIGFzc2VydCghZGlkRWZmZWN0cyk7Cit9CitsZXQgbyA9IHt9OworbGV0IFthLCBi
LCBjXSA9IGZvbyhvLCAyMCk7Cithc3NlcnQoYSA9PT0gMjApOworYXNzZXJ0KGIgPT09IG8pOwor
YXNzZXJ0KGMgPT09IDIwKTsKK2Fzc2VydChkaWRFZmZlY3RzKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwkocmV2
aXNpb24gMCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGlj
LWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICByZXR1cm4g
YXJnczsKK30KK25vSW5saW5lKGJheik7CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAg
IHJldHVybiBiYXooLi4uYXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIs
IGMsIGQpIHsKKyAgICByZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwg
aSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQo
clswXSA9PT0gaSsxKTsKKyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsy
XSA9PT0gaSszKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09
PSBpKzEpOworICAgIGFzc2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBp
KzMpOworfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwkocmV2
aXNpb24gMjA4NjkzKQorKysgUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw0ICszNiw0IEBAIGZ1bmN0aW9uIHJlcG9ydFJlc3VsdCgu
Li5hcmdzKSB7CiB9CiAKIGRyaXZlci5hZGRCZW5jaG1hcmsoQWlyQmVuY2htYXJrUnVubmVyKTsK
LWRyaXZlci5hZGRCZW5jaG1hcmsoQmFzaWNCZW5jaG1hcmtSdW5uZXIpOworLy9kcml2ZXIuYWRk
QmVuY2htYXJrKEJhc2ljQmVuY2htYXJrUnVubmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSw3
ICsxOTI5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwodmFsdWUt
PmNoaWxkKDApKQogICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBB
ZGQpIHsKICAgICAgICAgICAgIGlubmVyQWRkID0gdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAg
ICAgb2Zmc2V0ID0gdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICBvZmZz
ZXQgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAg
ICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgIH0KICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDIwODY5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIGFuZCBzdGF0ZXMgdGhh
dAogICAgICAgICAvLyB0aGUgcmVnaXN0ZXIgaXMgdXNlZCBsYXRlLiBUaGlzIG1lYW5zIHRoYXQg
dGhlIHJlZ2lzdGVyIGlzIHVzZWQgYWZ0ZXIgdGhlIHJlc3VsdAogICAgICAgICAvLyBpcyBkZWZp
bmVkIChpLmUsIHRoZSByZXN1bHQgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGlzIGFzIGFuIGlucHV0
KS4KLSAgICAgICAgLy8gSXQncyBub3QgdmFsaWQgZm9yIHRoaXMgdG8gYmUgdXNlZCBhcyBhIHJl
c3VsdCBraW5kLgorICAgICAgICAvLyBJdCdzIG5vdCB2YWxpZCBvdXRwdXQgcmVwcmVzZW50YXRp
b24uCiAgICAgICAgIExhdGVSZWdpc3RlciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQn
cyBub3QgYSB2YWxpZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4NjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsMTAgKzI3MywxMyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBj
YXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdz
IHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMs
IGl0IHNob3VsZCB0dXJuCiAgICAgICAgIC8vIGl0c2VsZiBpbnRvIGEgc3RyYWlnaHQtbGluZSBz
ZXF1ZW5jZSBvZiBHZXRTdGFjay9QdXRTdGFjay4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3MQorCisgICAgICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBiZSBtb3JlIGFjY3VyYXRlIGZvciBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQgaGVyZS4K
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CiAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0
VHlwZShTcGVjSW50MzJPbmx5KTsKQEAgLTE5NzQsNiArMTk3Nyw4IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVu
dHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBtX3N0YXRlLnNl
dERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAg
Ly8gVGhpcyBjbGFpbXMgdG8gcmV0dXJuIGJvdHRvbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSwz
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChu
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCBhcmJpdHJhcnkgYXJyYXlzIQorICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNlICYmIG5vZGUt
PmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2NhbmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICAgICAg
ICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc09LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gU3By
ZWFkIHx8IGNoaWxkLT5jaGlsZDEoKS0+b3AoKSAhPSBDcmVhdGVSZXN0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzT0sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhl
IGZhY3QgdGhhdCBzY29wZWQgYXJndW1lbnRzIGFyZQpAQCAtMTI2LDE5ICsxNTMsNzUgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRh
dGVzOiAiLCBsaXN0RHVtcChtX2NhbmRpZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29s
IGlzU3RpbGxWYWxpZENhbmRpZGF0ZShOb2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNhbmRpZGF0ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAg
ICAgIHJldHVybiBtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2Rl
KCkpOworCisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBC
aXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChj
YW5kaWRhdGUsIGkpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlk
Q2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwg
MT4gdG9SZW1vdmU7CisKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92
ZShub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBO
b2RlKiBzb3VyY2UgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9j
YW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAm
JiBzb3VyY2UpCisgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIs
IG5vZGUsICIgYmVjYXVzZSBpdCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAg
ICAgICAgaWYgKHJlbW92ZWQpCisgICAgICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygp
OworICAgIH0KICAgICAKICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92
ZSBmcm9tIHRoZSBjYW5kaWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQg
ZWxpbWluYXRlQ2FuZGlkYXRlc1RoYXRFc2NhcGUoKQogICAgIHsKICAgICAgICAgYXV0byBlc2Nh
cGUgPSBbJl0gKEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICBVTlVTRURf
UEFSQU0oc291cmNlKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVtb3ZlKGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBlZGdlLm5vZGUoKSwg
IiBiZWNhdXNlIGl0IGVzY2FwZXMgZnJvbTogIiwgc291cmNlLCAiXG4iKTsKKyAgICAgICAgICAg
IHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShlZGdlLm5vZGUoKSwgc291cmNlKTsKICAgICAg
ICAgfTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gZXNjYXBlQmFzZWRPbkFycmF5TW9kZSA9IFsm
XSAoQXJyYXlNb2RlIG1vZGUsIEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogY29uc2lkZXIgdGhpcyBjYWxsZWQgZnJvbSBDaGVja0FycmF5IGFuZCB0aGUg
ZWRnZSBiZWluZyBhIE5ld0FycmF5V2l0aFNwcmVhZCBub2RlLgogICAgICAgICAgICAgc3dpdGNo
IChtb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRz
OgogICAgICAgICAgICAgICAgIGlmIChlZGdlLT5vcCgpICE9IENyZWF0ZURpcmVjdEFyZ3VtZW50
cykKQEAgLTE4Nyw2ICsyNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKKworICAgICAgICBhdXRvIGVzY2FwZUlmU3ByZWFk
ID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgaWYgKGVkZ2Uu
bm9kZSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIGVz
Y2FwZShlZGdlLCBzb3VyY2UpOworICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9y
ID0gZWRnZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVkZ2UtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChlZGdlLm5vZGUoKSwgaSk7CisgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZShjaGlsZCwgZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlc2Nh
cGUoY2hpbGQtPmNoaWxkMSgpLCBjaGlsZC5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRl
cygpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CkBAIC0xOTUsMTUgKzI5Myw0MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQx
KCksIG5vZGUpOyAvLyBGSVhNRToKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFy
cmF5TW9kZShub2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZUlmU3ByZWFkKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsgLy8gRklY
TUU6CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJy
YXlNb2RlKCksIG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgZXNj
YXBlKG5vZGUtPmNoaWxkMigpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlIGV2ZXJ5dGhpbmcgYnV0IHRoZSBzcHJl
YWQgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3Ig
PSBub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFc2Nh
cGVTZWxmID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaG91bGRFc2NhcGUgPSAhYml0VmVjdG9yLT5nZXQoaSkgfHwgY2hp
bGQtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBBcnJheVVzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRFc2NhcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
KGNoaWxkLCBub2RlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+
Z2V0KGkpICYmICFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2hpbGQubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlY29tZSBwaGFudG9tIGlmIGFueSBv
ZiBvdXIgY2hpbGRyZW4gZXNjYXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEVzY2FwZVNlbGYgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAg
IGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjYzLDYgKzM4NywxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hh
dmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE5ld0Fy
cmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlz
V2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0zOTAsNyArNTE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCA9PSBibG9jay0+c2l6ZSgpICYmIGNhbmRpZGF0ZS0+b3duZXIgIT0gYmxv
Y2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlk
YXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAiLCBibG9jay0+YXQobm9kZUluZGV4
KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNh
bmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5k
aWRhdGUoY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQxNyw3ICs1NDUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAi
IGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRp
ZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2Fu
ZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjAs
OSArNTg4LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyYXZlcnNl
IGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgYSBkZWYgYmVmb3Jl
IGEgdXNlLgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHNob3VsZCBoYXZl
IGFscmVhZHkgdHJhbnNmb3JtZWQgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHRoZSB1c2UKICAgICAg
ICAgICAgICAgICAgICAgLy8gb2YgYW4gYWxsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBjYW5kaWRhdGUt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhh
bnRvbUNsb25lZEFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRh
dGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50
b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFu
dG9tU3ByZWFkIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXBGcm9tQ2FuZGlk
YXRlID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzcHJlYWQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgY2FuZGlkYXRlLT5udW1D
aGlsZHJlbigpIC0gMSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3ByZWFkLT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcmVzdCA9IHNwcmVhZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVz
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdC0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0
QXJndW1lbnRzOgpAQCAtNDg4LDYgKzYzMywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbUNsb25lZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKQEAgLTU5OSw5NCArNzU4LDE4
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9j
YXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4
aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NE
YXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAKLSAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3Rv
cmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IFsmXSAodW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhp
dE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9m
ZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOworICAgICAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFs
dWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRK
U1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQo
Y2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQo
KSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5k
aWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgYXNz
ZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5IGVzY2FwaW5nLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYm
IGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYW5Db252ZXJ0VG9TdGF0aWNMb2FkU3RvcmVzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlzfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFw
aC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUgdmlhIHBy
b3Blcmx5IGVzY2FwaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQx
KCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hp
bGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5j
aGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3ByZWFkQXJndW1lbnRzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVu
dENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHMgPSBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNw
cmVhZEFyZ3VtZW50cyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICs9IG51bWJlck9mU3ByZWFkQXJndW1lbnRzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsrYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFy
YXJnc0RhdGEtPmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jl
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4u
ZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9k
ZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0so
Y2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBo
Lm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11
bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBl
eGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0
YS0+bGltaXQgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5l
ZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBz
dG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUg
YW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXgg
PSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9
IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmln
aW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlN
aW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8g
dGhlIHN0b3Jlcywgd2UnbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRo
YXQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1
dFN0YWNrcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0Rh
dGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQg
ZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVt
Q2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IG1ha2UgdGhpcyBhc3NlcnRpb24gdHJ1ZSB2aWEgcHJvcGVybHkgZXNjYXBpbmcuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9w
KCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgbG9hZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyBsb2FkSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFs
dWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArK3N0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3RvcmVJbmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHVuZGVmaW5lZCwgc3RvcmVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0
aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1
c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50
LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
UHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwRnJv
bUNhbmRpZGF0ZShjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0Rh
dGEtPm9mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJn
c0RhdGEtPm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA+PSAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBv
dXIgbGltaXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8g
cmVhc29uIGFib3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
aW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1p
dDsgKytzdG9yZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQg
bG9hZCBpdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2li
bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXgg
KyB2YXJhcmdzRGF0YS0+b2Zmc2V0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
ZywgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+
bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBp
ZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFj
a3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzQzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhp
dCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1v
dmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRP
SyA9IGNhbkV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY5OCwyNyArOTQ5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9k
ZS0+Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRl
ZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBu
b2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEt
PmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAg
ICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyB2YXJhcmdzRGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+
b3JpZ2luLCBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydFRvU3RhdGljQ2FsbCA9IFsmXSAoY29uc3QgVmVjdG9yPE5v
ZGUqPiYgYXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmaXJz
dENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVu
ZChub2RlLT5jaGlsZDIoKSk7CkBAIC03NDMsMjUgKzk3NSw5OSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5z
aXplKCkgLSBmaXJzdENoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwgPSBbJl0gKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lu
bGluZWRDYWxsZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDYWxsRm9yd2FyZFZh
cmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhblRyYW5zZm9ybVRvQ2FsbCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0
VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuVHJhbnNmb3JtVG9DYWxsID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhblRyYW5zZm9y
bVRvQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJn
dW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRl
LCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGls
ZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBu
b2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjaGlsZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydFRvU3RhdGljQ2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEg
PSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFy
Z3NEYXRhLT5maXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBh
cmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MSArIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9w
SW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU3RhdGljQ2FsbChhcmd1bWVudHMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCShyZXZpc2lv
biAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksMTAgQEAgTm9kZSogZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChO
b2RlUmVzdWx0SW50MzIpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBoYW5kbGUgTmV3QXJyYXlX
aXRoU3ByZWFkOgorICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkg
IT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8
QmFzaWNCbG9jCiAgICAgICAgICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgogICAgICAgICAgICAg
Y2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3M6CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgICAgICByZXR1
cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkpOwogICAgICAgICAgICAgLy8gVGhlIGJpdHRlciBlbmQg
Y2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5kIHRoZSBsaWtlLiBUaGVyZSB3aWxsIHByb2JhYmx5IG9u
bHkgYmUgb25lIG9yIHR3byBub2RlcyBhZnRlciB0aGUgdGVybWluYWwuIFRoZXkgYXJlIGFsbCBu
by1vcHMgYW5kIHdpbGwgbm90IGhhdmUgYW55IGNoZWNrZWQgY2hpbGRyZW4uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3OCw2ICs0NzgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsK
IAorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgLy8gRXZlbiB0aG91
Z2ggaXQncyBwaGFudG9tLCBpdCBzdGlsbCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0
IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhlci4KICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQp
OwpAQCAtNjIwLDYgKzYyMiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBGb3J3YXJk
VmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAv
LyBXZSBjb3VsZCBiZSB3YXkgbW9yZSBwcmVjaXNlIGhlcmUuCiAgICAgICAgIHJlYWQoU3RhY2sp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsMTAgKzI0NywxMyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tU3ByZWFk
OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAg
ICAgY2FzZSBQdXRIaW50OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAg
Y2FzZSBQdXRTdGFjazoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzOCw2ICsxNDM4LDggQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAg
Y2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgog
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTE4MDcsNiArMTgwOSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9s
RmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNp
b24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxv
Y2soCiAgICAgZm9yIChOb2RlKiBub2RlIDogY29tYmluZWRMaXZlbmVzcy5saXZlQXRUYWlsW2Js
b2NrXSkKICAgICAgICAgZnVuY3RvcihibG9jay0+c2l6ZSgpLCBub2RlKTsKICAgICAKLSAgICBM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgbG9jYWxBdmFpbGFiaWxpdHk7CisgICAgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGxvY2FsQXZhaWxhYmlsaXR5KGdyYXBoKTsKICAg
ICBsb2NhbEF2YWlsYWJpbGl0eS5iZWdpbkJsb2NrKGJsb2NrKTsKICAgICAvLyBTdGFydCBhdCB0
aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25seSBp
bnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRvIG5v
ZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUgZnVu
Y3RvciBoYXMgbm90aGluZyB0byBkby4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoK
ICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0
YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAg
ICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24n
dCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3Myw3ICs0
NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9w
KCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DcmVhdGVSZXN0
KSB7CisgICAgICAgIGlmIChvcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9
PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5k
IHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERG
RyBiYWNrZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Ug
a2luZGx5IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAg
ICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOwpAQCAtMTA2Myw3ICsxMDYy
LDcgQEAgcHVibGljOgogCiAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IoKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgQVNTRVJUKG9w
KCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCk7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxCaXRWZWN0b3IqPigpOwogICAgIH0K
IApAQCAtMTE3NSw3ICsxMTc0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaGFzTG9hZFZh
cmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzIHx8
IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJh
cmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnc1dp
dGhTcHJlYWQ7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NE
YXRhKCkKQEAgLTE3NTYsNiArMTc1NSw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAg
ICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgogICAg
ICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYg
KzE4MSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRN
eUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGb3J3YXJk
VmFyYXJnc1dpdGhTcHJlYWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAog
ICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFy
Z3MpIFwKICAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVI
YXNWYXJBcmdzKSBcCkBAIC0zNDQsNiArMzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKENyZWF0ZURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oUGhhbnRvbURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21DcmVhdGVSZXN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbVNwcmVhZCwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykg
XAogICAgIG1hY3JvKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogCiAgICAgICAgIC8v
IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBp
biByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAgCi0gICAgICAgIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yOworICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IgY2FsY3VsYXRvcihtX2dyYXBoKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkOwogICAg
ICAgICBkbyB7CiAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xMDUsNyArMTA1LDgg
QEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcAogICAgIHJldHVybiBy
dW5QaGFzZTxPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlPihncmFwaCk7CiB9CiAKLUxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
KCkKK0xvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6TG9jYWxPU1JBdmFpbGFiaWxpdHlD
YWxjdWxhdG9yKEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CiB9CiAKQEAg
LTE1Myw2ICsxNTQsOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhl
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgLy8gRklYTUU6IG1ha2Ugc3Vy
ZSB0aGlzIGlzIGNvcnJlY3QuIEkgdGhpbmsgaXQgaXMuCisgICAgY2FzZSBGb3J3YXJkVmFyYXJn
c1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwpAQCAtMTY0LDcgKzE2Nyw3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhdG9yOjpleGUKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAor
ICAgIAogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0
QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czogewpAQCAtMjA4LDYg
KzIxMSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihTcHJlYWRQTG9jLCBub2RlKSwg
QXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLm5vZGUoKTsKKyAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmV3QXJy
YXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jLCBub2RlLCBpKSwgQXZhaWxhYmlsaXR5KGNoaWxkKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDIwODY5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgcGVyZm9ybU9TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXAKIC8vIGhhdmluZyBydW4gdGhlIGF2YWlsYWJpbGl0eSBh
bmFseXNpcy4KIGNsYXNzIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciB7CiBwdWJsaWM6
Ci0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CisgICAgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yKEdyYXBoJik7CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CkBAIC01
NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAK
ICAgICBBdmFpbGFiaWxpdHlNYXAgbV9hdmFpbGFiaWxpdHk7CisgICAgR3JhcGgmIG1fZ3JhcGg7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MzQsNyArMTYzNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUg
cmlnaHQgcGxhY2VzLCByZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFwcHJv
cHJpYXRlCiAgICAgICAgIC8vIHZhbHVlLCBhbmQgY3JlYXRlIHRoZSBtYXRlcmlhbGl6YXRpb24g
bm9kZXMuCi0gICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOworICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcihtX2dyYXBoKTsKICAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxh
Y2VtZW50cygpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIG1faGVhcCA9IG1faGVhcEF0SGVhZFtibG9j
a107CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJl
YWQ6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0
cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6
CkBAIC0xMTgsNyArMTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIGlmIChtX25vZGUtPmhhc0FyZ3VtZW50
c0NoaWxkKCkgJiYgbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKQogICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgaWYg
KG1fbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaWYgd2Ugc3ByZWFkIG1vcmUgdGhhbiB0aGUgbGFzdCBhcmd1bWVudCwg
dGhpcyBpcyBubyBsb25nZXIgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJh
bWUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5udW1DaGlsZHJlbigpIC0g
MSktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMCw2ICsxMDEwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAg
ICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczoKQEAgLTExMDAsNiArMTEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
RXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICAgICAg
Y2FzZSBQdXREeW5hbWljVmFyOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYg
KzExNCwxNCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvCiAgICAg
Y2FzZSBWZWN0b3JMZW5ndGhQTG9jOgogICAgICAgICBvdXQucHJpbnQoIlZlY3Rvckxlbmd0aFBM
b2MiKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTcHJlYWRQTG9jOgorICAgICAgICBv
dXQucHJpbnQoIlNwcmVhZFBMb2MiKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOZXdB
cnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2M6CisgICAgICAgIG91dC5wcmludCgiTmV3QXJyYXlX
aXRoU3ByZWFkQXJndW1lbnRQTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIw
ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOSBAQCBlbnVtIFByb21vdGVkTG9jYXRp
b25LaW5kIHsKICAgICBOYW1lZFByb3BlcnR5UExvYywKICAgICBQdWJsaWNMZW5ndGhQTG9jLAog
ICAgIFN0cnVjdHVyZVBMb2MsCi0gICAgVmVjdG9yTGVuZ3RoUExvYworICAgIFZlY3Rvckxlbmd0
aFBMb2MsCisgICAgU3ByZWFkUExvYywKKyAgICBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBM
b2MsCiB9OwogCiBjbGFzcyBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICAgICAg
YXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNr
IHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgp
ID09IFB1dFN0YWNrIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVy
ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUwNCw3ICs1
MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhl
eSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBzdGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRW
YXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBuZXZlciBzaW5rCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8gdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9k
ZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9y
d2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRG
bHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTgsMTAgKzM1OCwxMyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2Fz
ZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAg
ICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgIGNh
c2UgQ3JlYXRlUmVzdDoKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdS
ZXBsYWNlUmVnRXhwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NjE0LDYgKzU2MTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoK
KyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgzMCw2ICs1ODMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgS2lsbFN0YWNrOgogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQg
bm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczog
ewogICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKQEAgLTIyNyw2ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
V2l0aFNwcmVhZDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewog
ICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291
bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
ODMsMTQgKzY4MywyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIGJldHRlciB2YWxpZGF0aW9uIGZvciB0aGlz
LgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2s6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCBj
b3JyZWN0LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbVNwcmVhZDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbUFs
bG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogZG8gc29tZXRoaW5nIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
b1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA4
NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzMsMTAgKzIzMywxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246
CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRo
U3ByZWFkOgogICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgVHlwZU9mOgogICAgIGNhc2UgUHV0
QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1fb3V0KHN0YXRlKQog
ICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IobV9ncmFwaCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAg
ICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCiAgICAgewpAQCAtODg5LDYg
Kzg5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAg
ICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKKyAgICAgICAgICAgIGNvbXBpbGVGb3J3
YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IERGRzo6SnVtcDoKICAgICAgICAgICAgIGNvbXBpbGVKdW1wKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTEwODQsNiArMTA4OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFk
OgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICBj
YXNlIEJvdHRvbVZhbHVlOgpAQCAtNjA5OCw4ICs2MTA0LDI4MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZh
cmFyZ3NTcHJlYWQoKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAg
ICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgTFZhbHVlIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMygpLT5vcCgpID09IFBoYW50b21OZXdBcnJh
eVdpdGhTcHJlYWQpOworICAgICAgICBOb2RlKiBhcnJheVdpdGhTcHJlYWQgPSBub2RlLT5jaGls
ZDMoKS5ub2RlKCk7CisgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJyYXlXaXRoU3By
ZWFkLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtTm9uU3ByZWFkUGFyYW1ldGVy
cyA9IDA7CisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7CisgICAgICAg
IFZlY3RvcjxMVmFsdWUsIDg+IHBhdGNocG9pbnRBcmd1bWVudHM7CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBzcHJlYWQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9k
ZSgpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwcmVhZC0+b3AoKSA9PSBQaGFu
dG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPmNoaWxk
MSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHNwcmVhZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBnZXRTcHJlYWRMZW5ndGhGcm9t
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
OworICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIobGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICBwYXRjaHBvaW50QXJndW1lbnRzLmFwcGVuZChsZW5ndGgpOworICAgICAg
ICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICsrbnVtTm9uU3ByZWFkUGFyYW1ldGVyczsKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
YXJyYXlXaXRoU3ByZWFkLCBpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50
cy5hcHBlbmQoYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
TFZhbHVlIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnRQdHIobnVt
Tm9uU3ByZWFkUGFyYW1ldGVycyArIDEpOworICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBz
cHJlYWRMZW5ndGhzKQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIAor
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KElu
dDY0KTsKKworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpy
ZWcoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHRoaXNBcmcs
IFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBWYWx1ZVJlcDo6V2FybUFueSk7CisgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFZlY3RvcldpdGhSZXAocGF0Y2hwb2ludEFyZ3VtZW50cywgVmFsdWVSZXA6Oldh
cm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOworCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBl
eGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2lu
dCk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0
Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+cmVz
dWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDA7CisKKyAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY2FsbCBhcmcgYXJlYSBzdGFjayBz
cGFjZSB0aGF0IGFsbCBKUy0+SlMgY2FsbHMgYWx3YXlzIGhhdmUuCisgICAgICAgIHVuc2lnbmVk
IG1pbmltdW1KU0NhbGxBcmVhU2l6ZSA9CisgICAgICAgICAgICBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgKworICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgNSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworCisgICAgICAgIG1fcHJv
Yy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhtaW5pbXVtSlNDYWxsQXJlYVNpemUpOwor
ICAgICAgICAKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2Ny
aXB0aW9uT2ZDYWxsU2l0ZSgpOworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0K
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxs
U2l0ZUluZGV4KGNvZGVPcmlnaW4pOworCisgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVy
czo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25I
YW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisKKyAgICAg
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5k
KHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKKworICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAvL0NhbGxWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgICAgICAgICAgLy9HUFJSZWcg
c2NyYXRjaEdQUjEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgIC8vR1BS
UmVnIHNjcmF0Y2hHUFIyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICAv
L0dQUlJlZyBzY3JhdGNoR1BSMyA9IHBhcmFtcy5ncFNjcmF0Y2goMik7CisgICAgICAgICAgICAg
ICAgLy9HUFJSZWcgc2NyYXRjaEdQUjQgPSBwYXJhbXMuZ3BTY3JhdGNoKDMpOworICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0
Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KGNhbGxlZUdQUik7CisKKyAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSNCA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAg
ICAgYXV0byBnZXRWYWx1ZUZyb21SZXAgPSBbJl0gKEIzOjpWYWx1ZVJlcCByZXAsIEdQUlJlZyBy
ZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcC5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6SW1tNjQocmVwLnZh
bHVlKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogaW4gdGhpcyBm
dW5jdGlvbiwgd2Ugb25seSByZXF1ZXN0IDY0IGJpdCB2YWx1ZXMuCisgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBpdCdzIHByb2JhYmx5IG1vcmUgc3BhY2UgZWZmaWNpZW50IHRvIGFsbG93
IDMyLWJpdCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXAuaXNTdGFjaygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVwLm9mZnNldEZyb21GUCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgdHJ1ZT8KKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwLmlzR1BSKCkpOworICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghUmVnaXN0ZXJTZXQoc2NyYXRjaEdQUjEsIHNjcmF0Y2hH
UFIyLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjQpLmdldChyZXAuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0Lm1vdmUocmVwLmdwcigpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0g
KHZvaWQqIGNhbGxlZSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVu
ZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9u
Q2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgICAgIGF1dG8gYWRqdXN0U3RhY2sgPSBbJl0gKEdQUlJlZyBhbW91
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBhbW91bnQsIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwor
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1Vc2Vk
U2xvdHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgb3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNSZXAg
PSBwYXJhbXNbM107CisgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJlcChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc1JlcCwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0
Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0M6Om1heEFyZ3VtZW50cyArIDEp
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KG51bVVzZWRT
bG90cyArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSksIHNjcmF0Y2hHUFIxKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjEgbm93IGhhcyB0aGUgcmVxdWlyZWQg
ZnJhbWUgc2l6ZSBpbiBSZWdpc3RlciB1bml0cworICAgICAgICAgICAgICAgICAgICAvLyBSb3Vu
ZCBzY3JhdGNoR1BSMSB0byBuZXh0IG11bHRpcGxlIG9mIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSksIHNjcmF0Y2hHUFIxKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih+KHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5sc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgc2NyYXRjaEdQUjEpOworICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3Jh
dGNoR1BSMSk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50IHN0b3JlT2Zmc2V0ID0gKENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCkgLSAyKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJyYXlXaXRo
U3ByZWFkLT5udW1DaGlsZHJlbigpOyBpLS07ICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgcGFyYW1zT2Zmc2V0ID0gNDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
c3ByZWFkID0gc3RhdGUtPmdyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwcmVhZC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzcHJlYWQtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IHNwcmVhZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IHNwcmVhZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgbnVtQXJndW1lbnRzVG9D
b3B5ID0gcGFyYW1zW3BhcmFtc09mZnNldCArIGldOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldFZhbHVlRnJvbVJlcChudW1Bcmd1bWVudHNUb0NvcHksIHNjcmF0Y2hHUFIzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9hZE9mZnNldCA9IChBc3NlbWJseUhlbHBl
cnM6OmFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSkub2Zmc2V0KCkgKyBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gaml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGxvb3BTdGFydCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19j
YXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc2NyYXRjaEdQUjMsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNl
dCksIHNjcmF0Y2hHUFI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoR1BSNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
KSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIzKS5saW5rVG8obG9vcFN0
YXJ0LCAmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldFZhbHVlRnJvbVJlcChwYXJhbXNbcGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hH
UFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BS
MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5k
ZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0
b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN1YlB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSksIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbnRUaHJvdyA9IGppdC5qdW1wKCk7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJm
bG93Rm9yVmFyYXJncykpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29u
KERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RUaHJvdyk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBkb250VGhyb3cubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBhZGp1c3RTdGFjayhzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxlZUdQUiA9PSBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoY2FsbGVlR1BSLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAg
ICAgICAgICBnZXRWYWx1ZUZyb21SZXAocGFyYW1zWzJdLCBzY3JhdGNoR1BSMyk7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUjMsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJn
dW1lbnRTbG90KDApKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENvbnN0cnVjdFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RGb3J3YXJkVmFy
YXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdFZhcmFyZ3M7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQorICAg
ICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdz
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBD
YWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IoY2FsbFR5cGUp
ID09IENhbGxNb2RlOjpUYWlsOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAs
IHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBkb25lOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAg
ICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCisgICAgICAgICAgICAg
ICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBq
aXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRS
ZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVp
Z2h0KSwKKyAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rp
b25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0
VG9DaGVjaykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUNhbGxP
ckNvbnN0cnVjdFZhcmFyZ3MoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkt
Pm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgY29tcGls
ZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIExWYWx1ZSBq
c0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSB0
aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKQEAgLTY0OTcsNiArNjc3Nywx
MSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAg
ICB7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpICYmIG1fbm9kZS0+Y2hpbGQxKCktPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUZv
cndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpKQpAQCAtNjU4NSw2ICs2ODcwLDE0MCBAQCBwcml2YXRlOgog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAK
KyAgICBMVmFsdWUgZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
CisgICAgeworICAgICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJn
dW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhcmd1bWVudHNMZW5n
dGguaXNLbm93bikgeworICAgICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVu
dHNMZW5ndGgua25vd247CisgICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0
aCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdElu
dDMyKGtub3duTGVuZ3RoKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBw
ZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQg
dGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCisgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xh
cmdlciwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3Ro
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1f
b3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9y
RXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBpcyB0aGlzIGNvcnJlY3QgaGFzaCB0cmFpdHMgZm9yIGl0IHRvIGJlIG51bGxwdHI/Cisg
ICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNo
PElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVD
YWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKKworICAgICAgICBOb2RlKiBhcnJheVdp
dGhTcHJlYWQgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYXJyYXlXaXRoU3ByZWFkLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwor
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9y
KCk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOworICAg
ICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAg
ICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9w
KCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGNhY2hlZFNwcmVhZExl
bmd0aHMuZmluZChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIGlmIChpdGVyICE9
IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHNwcmVhZExl
bmd0aHMuYXBwZW5kKGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpOworICAgICAgICAgICAgICAgICAgICBjYWNoZWRTcHJlYWRMZW5ndGhzLmFk
ZChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHNwcmVhZExl
bmd0aHMuYXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsKKyAgICAgICAg
fQorCisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQz
MigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOworICAgICAgICBmb3IgKExWYWx1ZSBsZW5n
dGggOiBzcHJlYWRMZW5ndGhzKQorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1f
b3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgpOworCisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAor
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVu
Z3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKworICAg
ICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCku
dmFsdWUoKTsKKyAgICAgICAgTFZhbHVlIHN0b3JlSW5kZXggPSBtX291dC5jb25zdEludFB0cigw
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5V2l0aFNwcmVhZC0+bnVt
Q2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsK
KyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoYXJyYXlX
aXRoU3ByZWFkLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hp
bGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAg
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEo
KS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAgICAgICAgICAgICAgIExW
YWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgY2hp
bGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5n
dGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxvb3AgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc3RhcnRMb2FkSW5kZXggPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkp
OworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleCA9IG1fb3V0
LmFuY2hvcihzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFy
dFN0b3JlSW5kZXhGb3JFbmQgPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisKKyAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3ByZWFkTGVuZ3RoKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3AsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAgICAgTFZhbHVlIGxvb3BTdG9yZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFy
dFN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBsb2FkSW5kZXggPSBtX291dC5w
aGkoSW50NjQsIHN0YXJ0TG9hZEluZGV4KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBtX291dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGxvYWRJbmRleCkpOworICAgICAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
dGFyZ2V0U3RhcnQsIGxvb3BTdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5l
eHRMb2FkSW5kZXggPSBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoMSksIGxvYWRJbmRleCk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb2FkSW5kZXgsIG1fb3V0
LmFuY2hvcihuZXh0TG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRTdG9y
ZUluZGV4ID0gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBsb29wU3RvcmVJbmRleCk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb29wU3RvcmVJbmRleCwg
bV9vdXQuYW5jaG9yKG5leHRTdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgbG9vcFN0b3JlSW5kZXhGb3JFbmQgPSBtX291dC5hbmNob3IobmV4dFN0b3JlSW5kZXgp
OworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhuZXh0TG9hZEluZGV4
LCBzcHJlYWRMZW5ndGgpLCB1bnN1cmUobG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKwor
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICAgICAgICAgIHN0b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJ
bmRleEZvckVuZCwgbG9vcFN0b3JlSW5kZXhGb3JFbmQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwg
c3RvcmVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0b3JlSW5kZXggPSBtX291dC5hZGQobV9v
dXQuY29uc3RJbnRQdHIoMSksIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkTG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRTdG9yZUluZGV4ID0gbV9vdXQuYW5jaG9yKHN0
b3JlSW5kZXgpOworICAgICAgICBMVmFsdWUgbG9vcEJvdW5kVmFsdWUgPSBtX291dC5jb25zdElu
dFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmJlbG93KHN0b3JlSW5kZXgsIGxvb3BCb3VuZFZhbHVlKSwKKyAgICAgICAgICAgIHVuc3VyZSh1
bmRlZmluZWRMb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkTG9vcCwgY29udGludWF0aW9u
KTsKKyAgICAgICAgTFZhbHVlIGxvb3BTdG9yZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFy
dFN0b3JlSW5kZXgpOworICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAorICAgICAgICAgICAg
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbG9vcFN0b3Jl
SW5kZXgpKTsKKyAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LmFkZChsb29wU3RvcmVJ
bmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKGxvb3BTdG9yZUluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KG5leHRJbmRleCwgbG9vcEJvdW5k
VmFsdWUpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisK
ICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAgICB7CiAgICAgICAgIG1fb3V0Lmp1bXAobG93Qmxv
Y2sobV9ub2RlLT50YXJnZXRCbG9jaygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJJbmxpbmVD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNGaXhlZEFy
cmF5LmgiCiAjaW5jbHVkZSAiSlNHZW5lcmF0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTGV4
aWNhbEVudmlyb25tZW50LmgiCiAKQEAgLTg0LDYgKzg1LDggQEAgZXh0ZXJuICJDIiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUAogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlX
aXRoU3ByZWFkOgogICAgICAgICAvLyBUaG9zZSBhcmUgY29tcGxldGVseSBoYW5kbGVkIGJ5IG9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IKICAgICAgICAgYnJlYWs7CiAKQEAgLTM4OCwx
NCArMzkxLDg2IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAg
ICAgICAgICAgICAgICBBU1NFUlQoZm91bmQpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0KICAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6
IHsKKyAgICAgICAgZGF0YUxvZ0xuKCJQaGFudG9tIHNwcmVhZCIpOworICAgICAgICBKU0FycmF5
KiBhcnJheSA9IG51bGxwdHI7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXph
dGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgY29uc3QgRXhp
dFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClb
aV07CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgPT0gU3ByZWFk
UExvYykgeworICAgICAgICAgICAgICAgIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihKU1ZhbHVl
OjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOworCisgICAgICAg
IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhlIGdldERpcmVjdEluZGV4IGhlcmUgaXMgc291bmQhCisg
ICAgICAgIEpTRml4ZWRBcnJheSogZml4ZWRBcnJheSA9IEpTRml4ZWRBcnJheTo6Y3JlYXRlRnJv
bUFycmF5KGV4ZWMsIHZtLCBhcnJheSk7CisgICAgICAgIHJldHVybiBmaXhlZEFycmF5OworICAg
IH0KKworICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICBkYXRh
TG9nTG4oIlBoYW50b20gbmV3IGFycmF5IHdpdGggc3ByZWFkIVxuIik7CisgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jaygKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
QXJyYXlXaXRoQ29udGlndW91cyk7CisKKyAgICAgICAgdW5zaWduZWQgYXJyYXlTaXplID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbnVtUHJvcGVydGllcyA9IDA7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0
aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24o
KS5raW5kKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jKSB7CisgICAgICAgICAg
ICAgICAgKytudW1Qcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoSlNGaXhlZEFy
cmF5KiBmaXhlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2YWx1ZSkpCisg
ICAgICAgICAgICAgICAgICAgIGFycmF5U2l6ZSArPSBmaXhlZEFycmF5LT5zaXplKCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcnJheVNpemUgKz0gMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgYXJyYXlTaXplKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKworICAgICAgICBWZWN0b3I8SlNWYWx1ZSwg
OD4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuZ3JvdyhudW1Qcm9wZXJ0aWVzKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9w
ZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IE5ld0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50
UExvYykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWVzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5sb2Nh
dGlvbigpLmluZm8oKSA8IG51bVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50
c1twcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGFycmF5SW5kZXggPSAwOworICAgICAgICBmb3Ig
KEpTVmFsdWUgdmFsdWUgOiBhcmd1bWVudHMpIHsKKyAgICAgICAgICAgIGlmIChKU0ZpeGVkQXJy
YXkqIGZpeGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTRml4ZWRBcnJheSo+KHZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaXhlZEFycmF5LT5zaXpl
KCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZml4ZWRBcnJheS0+Z2V0KGkp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5pbml0aWFsaXplSW5kZXgodm0sIGFycmF5
SW5kZXgsIGZpeGVkQXJyYXktPmdldChpKSk7CisgICAgICAgICAgICAgICAgICAgICsrYXJyYXlJ
bmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIFdlIGFyZSBub3Qgc3ByZWFkaW5nLgorICAgICAgICAgICAgICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZUluZGV4KHZtLCBhcnJheUluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
KythcnJheUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2V0dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxs
CiAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihmaXJzdFZhckFy
Z09mZnNldCksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgZW5kVmFyQXJncy5saW5rKCZqaXQpOwog
ICAgIH0KLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmUsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhBcmd1bWVudHMg
KyAxKSkpOworICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpB
Ym92ZSwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTQzo6bWF4QXJn
dW1lbnRzICsgMSkpKTsKICAgICAKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRj
aEdQUjEsIHRydWUsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjIpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAkocmV2aXNpb24gMjA4
NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAv
LyBXZSBtYXkgc3RpbGwgY2FsbCBpbnRvIHRoaXMgZnVuY3Rpb24gd2hlbiAhZ2xvYmFsT2JqZWN0
LT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCksCiAgICAgICAg
ICAgICAgICAgLy8gaG93ZXZlciwgaWYgd2UgZG8gdGhhdCwgd2UgZW5zdXJlIHdlJ3JlIGNhbGxp
bmcgaW4gd2l0aCBhbiBhcnJheSB3aXRoIGFsbCBzZWxmIHByb3BlcnRpZXMgYmV0d2VlbgogICAg
ICAgICAgICAgICAgIC8vIFswLCBsZW5ndGgpLgotICAgICAgICAgICAgICAgIEFTU0VSVChhcnJh
eS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBtYXkg
YWxzbyBjYWxsIGludG8gdGhpcyBkdXJpbmcgT1NSIGV4aXQgdG8gbWF0ZXJpYWxpemUgYSBwaGFu
dG9tIGZpeGVkIGFycmF5LgorICAgICAgICAgICAgICAgIC8vIFdlIG1heSBiZSBjcmVhdGluZyBh
IGZpeGVkIGFycmF5IGR1cmluZyBPU1IgZXhpdCBldmVuIGFmdGVyIHRoZSBpdGVyYXRvciBwcm90
b2NvbCBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIC8vIEJ1dCwgd2hlbiB0aGUgcGhhbnRvbSB3
b3VsZCBoYXZlIGxvZ2ljYWxseSBiZWVuIGNyZWF0ZWQsIHRoZSBwcm90b2NvbCBoYWRuJ3QgYmVl
bgorICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQuIFRoZXJlZm9yZSwgaXQgaXMgc291bmQgdG8g
YXNzdW1lIGVtcHR5IGluZGljZXMgYXJlIGpzVW5kZWZpbmVkKCkuCiAgICAgICAgICAgICAgICAg
dmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295037</attachid>
            <date>2016-11-17 00:14:54 -0800</date>
            <delta_ts>2016-11-17 19:23:37 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>108715</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOwor
fQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
eCA9IGJhciguLi5hcmdzLCA0MiwgLi4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9Jbmxp
bmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAg
ICBhc3NlcnQoclswXSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJb
MV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMs
IEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5n
aWZ5KHIpKTsKKyAgICBhc3NlcnQocls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzZdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMt
bG9hZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5l
dy1hcnJheS13aXRoLXNwcmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkocmV2aXNpb24g
MCkKKysrIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0aC1zcHJl
YWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
OCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7
CisgICAgcmV0dXJuIGJheiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28o
YSwgYiwgYywgZCkgeworICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShm
b28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFz
c2VydChyWzBdID09PSBpKzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzJdID09PSBpKzMpOworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJb
NF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0g
PT09IGkrMyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9uZXctYXJyYXktd2l0aC1zcHJlYWQt
d2l0aC1ub3JtYWwtc3ByZWFkLWFuZC1waGFudG9tLXNwcmVhZC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy9uZXctYXJyYXktd2l0aC1zcHJlYWQtd2l0aC1ub3JtYWwtc3ByZWFkLWFu
ZC1waGFudG9tLXNwcmVhZC5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMvc3RyZXNzL25ldy1h
cnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFkLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7Cisg
ICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
ciA9IFsuLi5hLCAuLi5hcmdzXTsKKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBsZXQgbyA9IHt9OworICAg
IGxldCBhID0gW28sIDIwXTsKKyAgICBsZXQgciA9IGZvbyhhLCAzMCwgNDApOworICAgIGFzc2Vy
dChyLmxlbmd0aCA9PT0gNCk7CisgICAgYXNzZXJ0KHJbMF0gPT09IG8pOworICAgIGFzc2VydChy
WzFdID09PSAyMCk7CisgICAgYXNzZXJ0KHJbMl0gPT09IDMwKTsKKyAgICBhc3NlcnQoclszXSA9
PT0gNDApOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1uZXctYXJyYXktd2l0aC1z
cHJlYWQtb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1u
ZXctYXJyYXktd2l0aC1zcHJlYWQtb3NyLWV4aXQuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3Rz
L3N0cmVzcy9waGFudG9tLW5ldy1hcnJheS13aXRoLXNwcmVhZC1vc3ItZXhpdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfQorbm9Jbmxp
bmUoYXNzZXJ0KTsKKworbGV0IHZhbHVlID0gZmFsc2U7CisKK2Z1bmN0aW9uIGJheih4KSB7Cisg
ICAgaWYgKHR5cGVvZiB4ICE9PSAibnVtYmVyIikgeworICAgICAgICB2YWx1ZSA9IHRydWU7Cisg
ICAgfQorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24gYmFyKC4u
LmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KKworbGV0IGRpZEVmZmVjdHMgPSBmYWxzZTsg
CitmdW5jdGlvbiBlZmZlY3RzKCkgeyBkaWRFZmZlY3RzID0gdHJ1ZTsgfQorbm9JbmxpbmUoZWZm
ZWN0cyk7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0IHRoZUFyZ3MgPSBb
Li4uYXJncywgYSwgLi4uYXJnc107CisgICAgYmF6KGEpOworICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICBlZmZlY3RzKCk7CisgICAgfQorICAgIGxldCByID0gYmFyLmFwcGx5KG51bGwsIHRoZUFy
Z3MpOworICAgIHJldHVybiByOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDA7IGkrKykgeworICAgIGZvbyhpLCBpKzEpOworICAgIGFzc2VydCghZGlkRWZm
ZWN0cyk7Cit9CitsZXQgbyA9IHt9OworbGV0IFthLCBiLCBjXSA9IGZvbyhvLCAyMCk7Cithc3Nl
cnQoYSA9PT0gMjApOworYXNzZXJ0KGIgPT09IG8pOworYXNzZXJ0KGMgPT09IDIwKTsKK2Fzc2Vy
dChkaWRFZmZlY3RzKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFkLWZvcndh
cmQtdmFyYXJncy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVh
ZC1mb3J3YXJkLXZhcmFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9waGFu
dG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTcgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIsIG09IiIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOwor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24g
YmFyKGEsIGIsIGMsIGQpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzKTsK
KyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAw
MDA7IGkrKykgeworICAgICAgICBsZXQgW2EsIGIsIGMsIGRdID0gZm9vKGksIGkrMSwgaSsyLCBp
KzMpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSBpKzEp
OworICAgICAgICBhc3NlcnQoYyA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0KGQgPT09IGkrMykg
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rpb24gYmFyKC4uLmFy
Z3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGZvbyhhLCAu
Li5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4uYXJncyk7CisgICAg
fQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBp
KyspIHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFz
c2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgICAgIGxldCBbYSwgYiwgYywgZCwgZSwgZiwgZ10g
PSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkr
Mik7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgICAgICBhc3NlcnQoZCA9PT0gaSk7
CisgICAgICAgIGFzc2VydChlID09PSBpKzEpOworICAgICAgICBhc3NlcnQoZiA9PT0gaSsyKTsK
KyAgICAgICAgYXNzZXJ0KGcgPT09IGkrMyk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0Mygp
IHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAg
ICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheiguLi5h
cmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIC4uLmFyZ3MpIHsKKyAgICAg
ICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAg
bGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9
PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0g
aSszKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkpOworICAgICAgICBhc3NlcnQoYyA9PT0gaSsz
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5h
cmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBiYXIoLi4u
YXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlv
biBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3Ms
IGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkr
MiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0
KHJbMF0gPT09IGkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgZnVuY3Rp
b24gYmF6KGEsIGIsIGMpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjXTsKKyAgICB9CisgICAg
ZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheiguLi5hcmdzKTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7
CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7Cisg
ICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5k
ZWZpbmVkKTsKKyAgICB9Cit9CisKK3Rlc3QxKCk7Cit0ZXN0MigpOwordGVzdDMoKTsKK3Rlc3Q0
KCk7Cit0ZXN0NSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtb3NyLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtb3NyLWV4
aXQuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3It
ZXhpdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACitmdW5jdGlvbiBhc3NlcnQo
YikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9u
ISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHZhbHVlID0gZmFsc2U7CisKK2Z1bmN0
aW9uIGJheih4KSB7CisgICAgaWYgKHR5cGVvZiB4ICE9PSAibnVtYmVyIikgeworICAgICAgICB2
YWx1ZSA9IHRydWU7CisgICAgfQorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoYmF6KTsKKwor
ZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KKworbGV0IGRpZEVm
ZmVjdHMgPSBmYWxzZTsgCitmdW5jdGlvbiBlZmZlY3RzKCkgeyBkaWRFZmZlY3RzID0gdHJ1ZTsg
fQorbm9JbmxpbmUoZWZmZWN0cyk7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAg
bGV0IHIgPSBiYXIoLi4uYXJncywgYmF6KGEpLCAuLi5hcmdzKTsKKyAgICBpZiAodmFsdWUpIHsK
KyAgICAgICAgZWZmZWN0cygpOworICAgIH0KKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZv
byk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBmb28oaSwgaSsx
KTsKKyAgICBhc3NlcnQoIWRpZEVmZmVjdHMpOworfQorbGV0IG8gPSB7fTsKK2xldCBbYSwgYiwg
Y10gPSBmb28obywgMjApOworYXNzZXJ0KGEgPT09IDIwKTsKK2Fzc2VydChiID09PSBvKTsKK2Fz
c2VydChjID09PSAyMCk7Cithc3NlcnQoZGlkRWZmZWN0cyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9zcHJlYWQtY2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1jYWxsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMJKHJldmlz
aW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtY2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1j
YWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKK2Z1bmN0aW9uIGFzc2VydChi
KSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKTsKK30KK25v
SW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFy
Z3M7Cit9Citub0lubGluZShiYXopOworZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3MpIHsKKyAgICBy
ZXR1cm4gYmF6KC4uLmFyZ3MsIDQyLCAuLi5hcmdzKTsKK30KK2Z1bmN0aW9uIGZvbyhhLCBiLCBj
LCBkKSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBjLCBkKTsKK30KK25vSW5saW5lKGZvbyk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByID0gZm9vKGksIGkr
MSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgYXNzZXJ0KHJb
MF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbMl0g
PT09IGkrMyk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyKTsKKyAgICBhc3NlcnQocls0XSA9PT0g
aSsxKTsKKyAgICBhc3NlcnQocls1XSA9PT0gaSsyKTsKKyAgICBhc3NlcnQocls2XSA9PT0gaSsz
KTsKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2dsdWUuanMJKHJldmlz
aW9uIDIwODY5MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzYsNCArMzYsNCBAQCBmdW5jdGlvbiByZXBvcnRSZXN1bHQoLi4u
YXJncykgewogfQogCiBkcml2ZXIuYWRkQmVuY2htYXJrKEFpckJlbmNobWFya1J1bm5lcik7Ci1k
cml2ZXIuYWRkQmVuY2htYXJrKEJhc2ljQmVuY2htYXJrUnVubmVyKTsKKy8vZHJpdmVyLmFkZEJl
bmNobWFyayhCYXNpY0JlbmNobWFya1J1bm5lcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjksNyAr
MTkyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKHZhbHVlLT5j
aGlsZCgwKSkKICAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWRk
KSB7CiAgICAgICAgICAgICBpbm5lckFkZCA9IHZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAg
IG9mZnNldCA9IHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAgICAgb2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKTsKICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAyMDg2OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3RlciBhbmQgc3RhdGVzIHRoYXQK
ICAgICAgICAgLy8gdGhlIHJlZ2lzdGVyIGlzIHVzZWQgbGF0ZS4gVGhpcyBtZWFucyB0aGF0IHRo
ZSByZWdpc3RlciBpcyB1c2VkIGFmdGVyIHRoZSByZXN1bHQKICAgICAgICAgLy8gaXMgZGVmaW5l
ZCAoaS5lLCB0aGUgcmVzdWx0IHdpbGwgaW50ZXJmZXJlIHdpdGggdGhpcyBhcyBhbiBpbnB1dCku
Ci0gICAgICAgIC8vIEl0J3Mgbm90IHZhbGlkIGZvciB0aGlzIHRvIGJlIHVzZWQgYXMgYSByZXN1
bHQga2luZC4KKyAgICAgICAgLy8gSXQncyBub3QgdmFsaWQgb3V0cHV0IHJlcHJlc2VudGF0aW9u
LgogICAgICAgICBMYXRlUmVnaXN0ZXIsCiAKICAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mg
bm90IGEgdmFsaWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjczLDEwICsyNzMsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBj
YXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBz
aG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBp
dCBzaG91bGQgdHVybgogICAgICAgICAvLyBpdHNlbGYgaW50byBhIHN0cmFpZ2h0LWxpbmUgc2Vx
dWVuY2Ugb2YgR2V0U3RhY2svUHV0U3RhY2suCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzEKKworICAgICAgICAvLyBGSVhNRTogd2UgY291
bGQgYmUgbW9yZSBhY2N1cmF0ZSBmb3IgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkIGhlcmUuCiAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OwogICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CkBAIC0xOTc0LDYgKzE5NzcsOCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVh
dGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJh
eVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXRE
aWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8v
IFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0b20uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAg
cHJpdmF0ZToKICAgICAvLyBKdXN0IGZpbmRzIG5vZGVzIHRoYXQgd2Uga25vdyBob3cgdG8gd29y
ayB3aXRoLgogICAgIHZvaWQgaWRlbnRpZnlDYW5kaWRhdGVzKCkKICAgICB7Ci0gICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRl
cigpKSB7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0
ZURpcmVjdEFyZ3VtZW50czoKQEAgLTEwOSw2ICsxMDksMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGNhbiB0aGlzIHdvcmsgd2l0
aCBhcmJpdHJhcnkgYXJyYXlzPyBJIHVzZWQgdG8gdGhpbmsgeWV0LCBidXQgbm93IEkgdGhpbmsg
bm8uCisgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQgaWYgdGhlIGFycmF5IGhhcyBzZWxmIGdl
dHRlcnMvc2V0dGVycyBkZWZpbmVkLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5p
c1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNlICYmIG5v
ZGUtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZVJlc3QgJiYgbV9jYW5kaWRhdGVzLmNvbnRhaW5z
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
YW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFk
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdFZlY3Rv
ciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBvbmx5IGFsbG93IGZvciBTcHJlYWRzIHRvIGJlIG9mIHJlc3Qgbm9kZXMgZm9yIG5v
dy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPSyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4o
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0
KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzT0sgPSBjaGlsZC0+b3AoKSA9PSBTcHJlYWQgJiYgY2hpbGQtPmNoaWxkMSgp
LT5vcCgpID09IENyZWF0ZVJlc3QgJiYgbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNoaWxkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSB0aGlz
IGlmIGl0IHdhc24ndCBmb3IgdGhlIGZhY3QgdGhhdCBzY29wZWQgYXJndW1lbnRzIGFyZQpAQCAt
MTI2LDE5ICsxNTcsNzUgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJDYW5kaWRhdGVzOiAiLCBsaXN0RHVtcChtX2NhbmRpZGF0ZXMpLCAiXG4i
KTsKICAgICB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZENhbmRpZGF0ZShOb2RlKiBjYW5kaWRh
dGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0ZS0+b3AoKSkgeworICAgICAgICBj
YXNlIFNwcmVhZDoKKyAgICAgICAgICAgIHJldHVybiBtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2Fu
ZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCkpOworCisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3By
ZWFkOiB7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0
VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRl
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5n
ZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMo
bV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgdm9pZCByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBib29sIGNo
YW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIFZlY3RvcjxOb2RlKiwgMT4gdG9SZW1vdmU7CisKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogY2FuZGlkYXRlIDogbV9jYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1N0
aWxsVmFsaWRDYW5kaWRhdGUoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0
b1JlbW92ZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9
IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zaXRpdmVseVJlbW92ZUNh
bmRpZGF0ZShOb2RlKiBub2RlLCBOb2RlKiBzb3VyY2UgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgaWYg
KHJlbW92ZWQgJiYgdmVyYm9zZSAmJiBzb3VyY2UpCisgICAgICAgICAgICBkYXRhTG9nKCJlbGlt
aW5hdGluZyBjYW5kaWRhdGU6ICIsIG5vZGUsICIgYmVjYXVzZSBpdCBlc2NhcGVzIGZyb206ICIs
IHNvdXJjZSwgIlxuIik7CisKKyAgICAgICAgaWYgKHJlbW92ZWQpCisgICAgICAgICAgICByZW1v
dmVJbnZhbGlkQ2FuZGlkYXRlcygpOworICAgIH0KICAgICAKICAgICAvLyBMb29rIGZvciBlc2Nh
cGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBjYW5kaWRhdGVzIHNldCBpZiB3ZSBzZWUg
YW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2FuZGlkYXRlc1RoYXRFc2NhcGUoKQogICAg
IHsKICAgICAgICAgYXV0byBlc2NhcGUgPSBbJl0gKEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7
CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKICAgICAgICAgICAgIGlmICghZWRn
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBib29sIHJlbW92ZWQgPSBt
X2NhbmRpZGF0ZXMucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChyZW1vdmVk
ICYmIHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlk
YXRlOiAiLCBlZGdlLm5vZGUoKSwgIiBiZWNhdXNlIGl0IGVzY2FwZXMgZnJvbTogIiwgc291cmNl
LCAiXG4iKTsKKyAgICAgICAgICAgIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShlZGdlLm5v
ZGUoKSwgc291cmNlKTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gZXNjYXBl
QmFzZWRPbkFycmF5TW9kZSA9IFsmXSAoQXJyYXlNb2RlIG1vZGUsIEVkZ2UgZWRnZSwgTm9kZSog
c291cmNlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgdGhpcyBjYWxsZWQgZnJv
bSBDaGVja0FycmF5IGFuZCB0aGUgZWRnZSBiZWluZyBhIE5ld0FycmF5V2l0aFNwcmVhZCBub2Rl
LgogICAgICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBB
cnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICAgICAgICAgIGlmIChlZGdlLT5vcCgpICE9
IENyZWF0ZURpcmVjdEFyZ3VtZW50cykKQEAgLTE4Nyw2ICsyNzQsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKKworICAgICAg
ICBhdXRvIGVzY2FwZUlmU3ByZWFkID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgewor
ICAgICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCkK
KyAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZSwgc291cmNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOwogICAgICAgICAKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CkBAIC0xOTUsMTUgKzI4OSw0NSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgICAgICAgICAg
ZXNjYXBlSWZTcHJlYWQobm9kZS0+Y2hpbGQxKCksIG5vZGUpOyAvLyBGSVhNRToKICAgICAgICAg
ICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKSwgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hp
bGQyKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCks
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZUlmU3ByZWFkKG5v
ZGUtPmNoaWxkMSgpLCBub2RlKTsgLy8gRklYTUU6CiAgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNoaWxkMSgpLCBub2Rl
KTsKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLCBub2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgICAgICAgICAgICAgQml0VmVj
dG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzT0s7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc09LID0gY2hpbGQtPm9wKCkgPT0gU3ByZWFkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIGNoaWxkLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQXJyYXlVc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09
IENyZWF0ZVJlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5p
c1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPSyA9IGZhbHNl
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0spCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXNjYXBlKGNoaWxkLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhc2UgU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPSyA9
IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5jaGlsZDEoKS0+
b3AoKSA9PSBDcmVhdGVSZXN0OworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0spCisgICAg
ICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yNjMsNiArMzg3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBv
aW50KG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludChub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoQXJy
YXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM5MCw3ICs1
MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IGJs
b2NrLT5zaXplKCkgJiYgY2FuZGlkYXRlLT5vd25lciAhPSBibG9jaykgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBjYW5kaWRhdGUsICIgYmVjYXVzZSBpdCBp
cyBjbG9iYmVyZWQgYnk6ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5yZW1vdmUoY2FuZGlkYXRlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIApAQCAtNDE3LDcgKzU0NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBjYW5kaWRhdGUsICIgYmVjYXVzZSBpdCBpcyBjbG9i
YmVyZWQgYnkgIiwgYmxvY2stPmF0KG5vZGVJbmRleCksICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5yZW1vdmUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlkYXRlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ2MCw5ICs1ODgsMjYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJhdmVyc2UgaW4gc3VjaCBhIHdheSB0aGF0
IHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBhIGRlZiBiZWZvcmUgYSB1c2UuCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSB0cmFuc2Zvcm1l
ZCB0aGUgYWxsb2NhdGlvbiBiZWZvcmUgdGhlIHVzZQogICAgICAgICAgICAgICAgICAgICAvLyBv
ZiBhbiBhbGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8
fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cworICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21TcHJlYWQgfHwgY2FuZGlk
YXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAg
YXV0byBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcEZyb21DYW5kaWRhdGUgPSBbJl0gKE5vZGUqIGNh
bmRpZGF0ZSkgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9jYW5k
aWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2Fu
ZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCkgLSAxKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkg
PT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN0ID0g
c3ByZWFkLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN0LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CkBAIC00ODgs
NiArNjMzLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQ2xvbmVkQXJndW1lbnRz
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21T
cHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlk
YXRlcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEZy
b21Bcmd1bWVudHM6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwpAQCAtNTk5LDk0ICs3NTgsMTg2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJl
IGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBu
b2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9mZnNldCArPSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKIAotICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzdG9yZUFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gWyZdICh1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNO
b2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQs
IG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nl
c3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlLCBL
bm93bkludDMyVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJ
bmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZh
cmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUt
Pm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5Db252ZXJ0VG9T
dGF0aWNMb2FkU3RvcmVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdFZlY3Rv
ciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRWZWN0b3IoKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4o
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0
KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9n
cmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBhc3NlcnRpb24gdHJ1ZSB2aWEgcHJv
cGVybHkgZXNjYXBpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQgJiYgY2hpbGQtPmNoaWxkMSgpLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkNvbnZlcnRUb1N0
YXRpY0xvYWRTdG9yZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsgLy8g
fHRoaXN8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRp
ZGF0ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IG1ha2UgdGhpcyBhc3NlcnRpb24gdHJ1ZSB2aWEgcHJvcGVybHkgZXNjYXBpbmcuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQXJndW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNwcmVh
ZEFyZ3VtZW50cyA9IGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU3ByZWFkQXJndW1lbnRzID0gMDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKz0gbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kythcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0Rh
dGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGlt
aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhp
dCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRo
RXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJl
cihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXNOb2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlLCBLbm93
bkludDMyVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGlt
aXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5j
ZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBzdG9y
ZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBs
b2FkLCBhbmQgbG9hZCBpdCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
b3NzaWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJh
cmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsg
MSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn
LCBGbHVzaGVkSlNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4
aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8g
c3RvcmUgYW55dGhpbmcgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3aWxs
IHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0
YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBkZWdlbmVyYXRlIElS
OiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzQzNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11
bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQg
dG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFi
b3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZh
cmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHN0b3JlSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIGFzc2VydGlv
biB0cnVlIHZpYSBwcm9wZXJseSBlc2NhcGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFk
ICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFt
ZUFyZ3VtZW50Q291bnQ7IGxvYWRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpT
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ss
IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RvcmVJ
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChj
YW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yZVZhbHVlKHZhbHVlLCBzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArK3N0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdG9yZUluZGV4IDw9
IGxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVk
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHN0b3Jl
SW5kZXggPCBsaW1pdDsgKytzdG9yZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2Rl
LT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVmFsdWUodW5kZWZpbmVkLCBzdG9yZUluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVl
LCBzdG9yZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+
c3RhcnQgKyBzdG9yZUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a0FjY2Vzc0RhdGEqIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3Jp
Z2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXBGcm9tQ2FuZGlkYXRlKGNhbmRpZGF0
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+b2Zmc2V0ICs9IG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwOworCisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSAxOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdz
RGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRl
ICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gdmFyYXJnc0RhdGEt
PmxpbWl0IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZp
bmVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGRldGVybWluZSBp
ZiB3ZSBoYXZlIGFuIGVsZW1lbnQgd2UgY2FuIGxvYWQsIGFuZCBsb2FkIGl0IGlmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZz
ZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXgg
KyAxIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gc3RvcmUgYW55dGhpbmcgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBi
dXQgd2Ugd2lsbCBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgR2V0U3RhY2tzIGluIHRoYXQgcmFuZ2UuIFNvIGlmIHdlIGRvbid0IGRvIHRoZSBz
dG9yZXMsIHdlJ2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSBkZWdlbmVyYXRlIElSOiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBzb21ldGhpbmcgdGhh
dCBkaWRuJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IFB1dFN0YWNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NDM0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwganNVbmRlZmluZWQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjk4LDI3ICs5NDksOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRh
dGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0
YSgpOwotICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQg
Kz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUg
JiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRzOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMSArIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldDsgaSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRh
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0VG9TdGF0aWNDYWxsID0gWyZdIChjb25zdCBWZWN0b3I8Tm9kZSo+JiBhcmd1bWVudHMpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKG5vZGUtPmNoaWxkMigpKTsK
QEAgLTc0MywyNSArOTc1LDk5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRUb0ZvcndhcmRzQ2FsbCA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFy
Z3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoQ2FsbEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1
Y3RGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJk
VmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuVHJhbnNmb3JtVG9DYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEJpdFZlY3RvciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNo
aWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5v
ZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW5UcmFuc2Zvcm1Ub0NhbGwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuVHJhbnNmb3JtVG9DYWxsKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVt
Q2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVz
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nl
c3NEYXRhLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVk
SlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZv
KGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TdGF0aWNDYWxsKGFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnZlcnRUb0ZvcndhcmRzQ2FsbCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJn
T2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0VG9TdGF0aWNDYWxsKGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0Zvcndh
cmRzQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDYgKzEwOSwxMCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJy
YXlMZW5ndGgoCiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAg
ICAgfQogCisgICAgLy8gRklYTUU6IGhhbmRsZSBOZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRzLT5vcCgpICE9IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQp
OworICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBOZXdBcnJheVdpdGhTcHJl
YWQpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
ICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
czoKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICBj
YXNlIFVucmVhY2hhYmxlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb2RlQW5kSW5kZXgobm9k
ZSwgaSk7CiAgICAgICAgICAgICAvLyBUaGUgYml0dGVyIGVuZCBjYW4gY29udGFpbiBQaGFudG9t
cyBhbmQgdGhlIGxpa2UuIFRoZXJlIHdpbGwgcHJvYmFibHkgb25seSBiZSBvbmUgb3IgdHdvIG5v
ZGVzIGFmdGVyIHRoZSB0ZXJtaW5hbC4gVGhleSBhcmUgYWxsIG5vLW9wcyBhbmQgd2lsbCBub3Qg
aGF2ZSBhbnkgY2hlY2tlZCBjaGlsZHJlbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCw4
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3Jp
dGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBQaGFudG9t
U3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBo
YW50b21DcmVhdGVSZXN0OgogICAgICAgICAvLyBFdmVuIHRob3VnaCBpdCdzIHBoYW50b20sIGl0
IHN0aWxsIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBvbmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0aCBh
bm90aGVyLgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkBAIC02MjAsNiArNjIyLDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoK
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIFdlIGNvdWxkIGJlIHdheSBt
b3JlIHByZWNpc2UgaGVyZS4KICAgICAgICAgcmVhZChTdGFjayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nywx
MCArMjQ3LDEzIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9t
Q2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoK
KyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBjYXNlIFB1dEhpbnQ6CiAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICBjYXNlIFB1dFN0YWNrOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDM4LDYgKzE0MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2Ug
UGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgog
ICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRz
OgpAQCAtMTgwNyw2ICsxODA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dp
dGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNl
IE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1Myw3ICsxNTMsNyBAQCB2b2lkIGZvckFsbEtpbGxzSW5CbG9jaygKICAgICBmb3IgKE5vZGUq
IG5vZGUgOiBjb21iaW5lZExpdmVuZXNzLmxpdmVBdFRhaWxbYmxvY2tdKQogICAgICAgICBmdW5j
dG9yKGJsb2NrLT5zaXplKCksIG5vZGUpOwogICAgIAotICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvciBsb2NhbEF2YWlsYWJpbGl0eTsKKyAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IgbG9jYWxBdmFpbGFiaWxpdHkoZ3JhcGgpOwogICAgIGxvY2FsQXZhaWxhYmlsaXR5
LmJlZ2luQmxvY2soYmxvY2spOwogICAgIC8vIFN0YXJ0IGF0IHRoZSBzZWNvbmQgbm9kZSwgYmVj
YXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0byBvbmx5IGluc3BlY3Qgbm9kZXMgZnJvbSB0
aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sgdXAgdG8gbm9kZUluZGV4IChleGNsdXNpdmUp
LCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVuIHRoZSBmdW5jdG9yIGhhcyBub3RoaW5nIHRv
IGRvLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODY5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NTksNyArNDU5LDYgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
UGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzOgotICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAgICAgLy8gVGhl
c2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0
IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3Vs
ZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4K
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDczLDcgKzQ3Miw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChvcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVk
QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpIHsKKyAgICAgICAgaWYgKG9w
KCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMpIHsKICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZh
bHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAg
ICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRo
YXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4gRnJvemVuVmFs
dWU6OmVtcHR5U2luZ2xldG9uKCk7CkBAIC0xMDYzLDcgKzEwNjIsNyBAQCBwdWJsaWM6CiAKICAg
ICBCaXRWZWN0b3IqIGJpdFZlY3RvcigpCiAgICAgewotICAgICAgICBBU1NFUlQob3AoKSA9PSBO
ZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICBBU1NFUlQob3AoKSA9PSBOZXdBcnJheVdpdGhT
cHJlYWQgfHwgb3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvLmFzPEJpdFZlY3Rvcio+KCk7CiAgICAgfQogCkBAIC0xMTc1LDcgKzExNzQs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFy
YXJnczsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3
YXJkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDsKICAgICB9CiAg
ICAgCiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQpAQCAtMTc1Niw2ICsx
NzU1LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAg
IGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoK
ICAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0dlbmVyYXRvckZ1bmN0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9m
Qm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTG9h
ZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJkVmFyYXJncywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxE
aXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQ
dXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTM0
NCw2ICszNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
Q3JlYXRlRGlyZWN0QXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFudG9t
RGlyZWN0QXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUGhhbnRvbUNyZWF0ZVJlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhQaGFudG9tU3ByZWFkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ3JlYXRl
U2NvcGVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhDcmVhdGVDbG9uZWRB
cmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21DbG9uZWRBcmd1bWVu
dHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRl
IG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVy
LgogICAgICAgICAKLSAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGNhbGN1
bGF0b3I7CisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9y
KG1fZ3JhcGgpOwogICAgICAgICBib29sIGNoYW5nZWQ7CiAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTEwNSw3ICsxMDUsOCBAQCBib29sIHBlcmZvcm1PU1JB
dmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwCiAgICAgcmV0dXJuIHJ1blBoYXNlPE9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2U+KGdyYXBoKTsKIH0KIAotTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhdG9yOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoKQorTG9jYWxPU1JBdmFpbGFi
aWxpdHlDYWxjdWxhdG9yOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoR3JhcGgmIGdy
YXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKIHsKIH0KIApAQCAtMTUzLDYgKzE1NCw4IEBAIHZv
aWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKKyAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgY29ycmVjdC4g
SSB0aGluayBpdCBpcy4KKyAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC0xNjQsNyAr
MTY3LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjExLDE3IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
Y2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFBy
b21vdGVkSGVhcExvY2F0aW9uKFNwcmVhZFBMb2MsIG5vZGUpLCBBdmFpbGFiaWxpdHkobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQaGFudG9tTmV3
QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVu
dFBMb2MsIG5vZGUsIGkpLCBBdmFpbGFiaWxpdHkoY2hpbGQpKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMo
R3JhcAogLy8gaGF2aW5nIHJ1biB0aGUgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLgogY2xhc3MgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3IoKTsKKyAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Io
R3JhcGgmKTsKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAgCiAg
ICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAogICAgIEF2YWlsYWJpbGl0eU1h
cCBtX2F2YWlsYWJpbGl0eTsKKyAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzNCw3ICsxNjM0LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxh
Y2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgLy8g
dmFsdWUsIGFuZCBjcmVhdGUgdGhlIG1hdGVyaWFsaXphdGlvbiBub2Rlcy4KLSAgICAgICAgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAg
ICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
KG1fZ3JhcGgpOwogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgewog
ICAgICAgICAgICAgbV9oZWFwID0gbV9oZWFwQXRIZWFkW2Jsb2NrXTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6
CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKQEAgLTExOCw3ICsxMTksMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFzQXJndW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUt
PmFyZ3VtZW50c0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9u
b2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwot
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSBpZiAobV9ub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzV2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpZiB3
ZSBzcHJlYWQgbW9yZSB0aGFuIHRoZSBsYXN0IGFyZ3VtZW50LCB0aGlzIGlzIG5vIGxvbmdlciBj
b3JyZWN0LgorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsK
IAogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpAQCAtMTEw
MCw2ICsxMTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBFeGl0T0s6CiAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNh
c2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHJldmlz
aW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDE0IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm8KICAgICBjYXNlIFZlY3Rvckxlbmd0aFBM
b2M6CiAgICAgICAgIG91dC5wcmludCgiVmVjdG9yTGVuZ3RoUExvYyIpOwogICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIFNwcmVhZFBMb2M6CisgICAgICAgIG91dC5wcmludCgiU3ByZWFkUExv
YyIpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZEFyZ3Vt
ZW50UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBM
b2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw5IEBAIGVudW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgewogICAgIE5hbWVk
UHJvcGVydHlQTG9jLAogICAgIFB1YmxpY0xlbmd0aFBMb2MsCiAgICAgU3RydWN0dXJlUExvYywK
LSAgICBWZWN0b3JMZW5ndGhQTG9jCisgICAgVmVjdG9yTGVuZ3RoUExvYywKKyAgICBTcHJlYWRQ
TG9jLAorICAgIE5ld0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYywKIH07CiAKIGNsYXNzIFBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2sgfHwgbm9kZS0+b3AoKSA9PSBM
b2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2sgfHwgbm9k
ZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07
CiAKQEAgLTI4Niw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChu
b2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3Mp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBM
b2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzIHx8IG5vZGUtPm9wKCkg
PT0gRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNTA0LDcgKzUwNCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1h
a2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMg
d2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNr
cyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRW
YXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAg
ICAgICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OCwxMCArMzU4LDEzIEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIE1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6Cisg
ICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25l
ZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBDcmVhdGVSZXN0OgogICAg
IGNhc2UgU3RyaW5nUmVwbGFjZToKICAgICBjYXNlIFN0cmluZ1JlcGxhY2VSZWdFeHA6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MTQsNiArNTYx
NCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBGb3J3YXJkVmFyYXJn
c1dpdGhTcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMwLDYgKzU4MzAs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBL
aWxsU3RhY2s6CiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0
OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQ6CisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgICAgIERGR19D
UkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIs
NiArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGb3J3
YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwpAQCAt
MjI3LDYgKzIyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBkYXRhLT5jb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MywxNCArNjgzLDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzV2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIGhhdmUgYmV0dGVyIHZhbGlkYXRpb24gZm9yIHRoaXMuCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVjazoKICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IGNvcnJlY3QuCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCBub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
MywxMCArMjMzLDEzIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBo
YW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2Fy
ZFZhcmFyZ3M6CisgICAgY2FzZSBGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQ6CiAgICAgY2FzZSBT
d2l0Y2g6CiAgICAgY2FzZSBUeXBlT2Y6CiAgICAgY2FzZSBQdXRCeUlkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4
NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRs
U3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9vdXQoc3RhdGUpCiAgICAgICAgICwgbV9wcm9jKCpz
dGF0ZS5wcm9jKQorICAgICAgICAsIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcihtX2dyYXBoKQog
ICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihz
dGF0ZS5ncmFwaCwgbV9zdGF0ZSkKICAgICB7CkBAIC04ODksNiArODkwLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJk
VmFyYXJncygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3NXaXRoU3ByZWFkOgorICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVh
ZCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgREZHOjpKdW1wOgogICAgICAg
ICAgICAgY29tcGlsZUp1bXAoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA4NCw2ICsxMDg4
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzOgogICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CkBA
IC00MzA4LDYgKzQzMTQsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ncmFwaC5pc1dhdGNo
aW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG1fbm9kZSkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0TGVuZ3RoID0gMDsKICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0g
bV9ub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1l
KiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6
Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3Ro
czsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+bnVtQ2hp
bGRyZW4oKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFiaXRWZWN0b3ItPmdldChpKSkK
ICAgICAgICAgICAgICAgICAgICAgKytzdGFydExlbmd0aDsKQEAgLTQzMTgsOCArNDMyNiwyMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0
KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIGkpOwotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheSA9IGxv
d0NlbGwodXNlKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQuYWRkKGxlbmd0
aCwgbV9vdXQubG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFycmF5X3NpemUpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVzZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh1c2UtPmNoaWxkMSgpLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdXNlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gdXNlLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGNhY2hlZFNwcmVhZExl
bmd0aHMuZmluZChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZh
bHVlIHNwcmVhZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGNh
Y2hlZFNwcmVhZExlbmd0aHMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3By
ZWFkTGVuZ3RoID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGggPSBnZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZFNwcmVhZExlbmd0aHMu
YWRkKGlubGluZUNhbGxGcmFtZSwgc3ByZWFkTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgs
IHNwcmVhZExlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmxvYWQzMihm
aXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTQzMzIsNDIgKzQz
NTUsODQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X25vZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIGkpOwogICAgICAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkgewotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3Rh
cnQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dXNlLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSB1c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2Ut
PmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5n
dGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApOworCisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbG9hZEluZGV4U3RhcnQgPSBtX291dC5hbmNo
b3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9
IG1fb3V0LmFuY2hvcihpbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChsZW5ndGgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobG9vcFN0YXJ0KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXkg
PSBsb3dDZWxsKHVzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKIAotICAgICAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaXhlZEluZGV4U3RhcnQgPSBtX291dC5hbmNo
b3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBhcnJheUluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaW5kZXgpOwotICAgICAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2ggPSBtX291dC5h
bmNob3IoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGFycmF5SW5kZXgg
PSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSBsb2FkSW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwg
bG9hZEluZGV4U3RhcnQpOwogCi0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5
U2l6ZSA9IG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMu
SlNGaXhlZEFycmF5X3NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBpdGVt
ID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgc291cmNl
U3RhcnQsIGxvYWRJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NChpdGVtLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsIHN0b3JhZ2UsIGFycmF5SW5kZXgpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmaXhlZEFycmF5
U2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGxvb3BTdGFydCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRBcnJh
eUluZGV4ID0gbV9vdXQuYWRkKGFycmF5SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0TG9hZEluZGV4ID0gbV9vdXQuYWRkKGxv
YWRJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleExvb3BGb3JGaW5pc2ggPSBtX291dC5hbmNob3IobmV4
dEFycmF5SW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb2FkSW5kZXgsIG1fb3V0LmFuY2hv
cihuZXh0TG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNv
bWluZ1RvUGhpKGFycmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCkpOwogCi0g
ICAgICAgICAgICAgICAgICAgIExWYWx1ZSBhcnJheUluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJU
eXBlKCksIGFycmF5SW5kZXhTdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhl
ZEFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZml4ZWRJbmRleFN0YXJ0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5iZWxvdyhuZXh0TG9hZEluZGV4LCBsZW5ndGgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb29wU3RhcnQpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4
ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwg
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9y
YWdlLCBhcnJheUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJy
YXlJbmRleExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhl
ZEFycmF5ID0gbG93Q2VsbCh1c2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmaXhlZEluZGV4U3RhcnQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIo
MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRBcnJheUluZGV4ID0gbV9vdXQuYWRk
KGFycmF5SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
TFZhbHVlIG5leHRGaXhlZEFycmF5SW5kZXggPSBtX291dC5hZGQoZml4ZWRBcnJheUluZGV4LCBt
X291dC5jb25zdEludFB0cigxKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGFycmF5SW5kZXhMb29wRm9yRmluaXNoID0gbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5U2l6ZSA9IG1fb3V0Lnpl
cm9FeHRQdHIobV9vdXQubG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFycmF5X3Np
emUpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGZpeGVk
QXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRGaXhlZEFycmF5SW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShhcnJheUluZGV4LCBtX291dC5hbmNo
b3IobmV4dEFycmF5SW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmaXhlZEFycmF5
U2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShsb29wU3RhcnQpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5iZWxvdyhuZXh0Rml4ZWRBcnJheUluZGV4
LCBmaXhlZEFycmF5U2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG9vcFN0
YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wU3RhcnQsIGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJU
eXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5pc2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGFycmF5SW5kZXggPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IExWYWx1ZSBmaXhlZEFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZml4ZWRJ
bmRleFN0YXJ0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBtX291
dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwgZml4
ZWRBcnJheSwgZml4ZWRBcnJheUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KGl0ZW0sIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmluZGV4ZWRDb250aWd1b3Vz
UHJvcGVydGllcywgc3RvcmFnZSwgYXJyYXlJbmRleCkpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBMVmFsdWUgbmV4dEFycmF5SW5kZXggPSBtX291dC5hZGQoYXJyYXlJbmRleCwgbV9vdXQu
Y29uc3RJbnRQdHIoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRGaXhl
ZEFycmF5SW5kZXggPSBtX291dC5hZGQoZml4ZWRBcnJheUluZGV4LCBtX291dC5jb25zdEludFB0
cigxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4
TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoZml4ZWRBcnJheUluZGV4LCBt
X291dC5hbmNob3IobmV4dEZpeGVkQXJyYXlJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShhcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEFy
cmF5SW5kZXgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJlbG93KG5leHRGaXhlZEFycmF5SW5kZXgs
IGZpeGVkQXJyYXlTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG9v
cFN0YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFy
dEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgSW5kZXhl
ZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVz
OwogICAgICAgICAgICAgICAgICAgICBMVmFsdWUgaXRlbSA9IGxvd0pTVmFsdWUodXNlKTsKQEAg
LTYwOTgsOCArNjE2MywyODIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKCkKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSB0aGlzQXJnID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChu
b2RlLT5jaGlsZDMoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAg
ICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOworICAgICAg
ICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7Cisg
ICAgICAgIHVuc2lnbmVkIG51bU5vblNwcmVhZFBhcmFtZXRlcnMgPSAwOworICAgICAgICBWZWN0
b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiBw
YXRjaHBvaW50QXJndW1lbnRzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJp
dFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFw
aC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3By
ZWFkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgbGVuZ3RoID0gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBs
ZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludEFyZ3VtZW50cy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzcHJlYWRMZW5n
dGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICArK251bU5vblNwcmVhZFBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50ID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnRBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50UHRyKG51bU5vblNwcmVhZFBhcmFtZXRlcnMg
KyAxKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKKyAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJlcDo6V2FybUFueSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
VmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3JXaXRo
UmVwKHBhdGNocG9pbnRBcmd1bWVudHMsIFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKworICAgICAg
ICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJl
cGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1p
bmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpT
IGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNp
emUgPQorICAgICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsK
KyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Cisg
ICAgICAgICAgICAgICAgLy9DYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJn
c0RhdGEoKTsKKworICAgICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hHUFIxID0gcGFyYW1z
LmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgICAgICAvL0dQUlJlZyBzY3JhdGNoR1BSMiA9IHBh
cmFtcy5ncFNjcmF0Y2goMSk7CisgICAgICAgICAgICAgICAgLy9HUFJSZWcgc2NyYXRjaEdQUjMg
PSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAgICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hH
UFI0ID0gcGFyYW1zLmdwU2NyYXRjaCgzKTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sx
XS5ncHIoKTsKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOwor
CisgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2Vk
UmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJP
ZlJldXNlZFJlZ2lzdGVycygpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9t
UmVwID0gWyZdIChCMzo6VmFsdWVSZXAgcmVwLCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXAuaXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OkltbTY0KHJlcC52YWx1ZSgpKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IGluIHRoaXMgZnVuY3Rpb24sIHdlIG9ubHkgcmVx
dWVzdCA2NCBiaXQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBw
cm9iYWJseSBtb3JlIHNwYWNlIGVmZmljaWVudCB0byBhbGxvdyAzMi1iaXQgdmFsdWVzLgorICAg
ICAgICAgICAgICAgICAgICBpZiAocmVwLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlcC5vZmZzZXRGcm9tRlAo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHRydWU/CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlcC5pc0dQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIVJlZ2lzdGVyU2V0KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFI0KS5nZXQocmVwLmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwor
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25D
aGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBl
cnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNr
SGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKKworICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVXNlZFNsb3RzID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG9yaWdpbmFsU3RhY2tIZWln
aHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzUmVwID0gcGFyYW1zWzNdOworICAgICAg
ICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNS
ZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Vc2VkU2xvdHMgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycykpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhlIHJlcXVpcmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0
ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgc2NyYXRjaEdQUjEgdG8gbmV4
dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCisgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
bmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIofihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIo
c2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0UHRyKENDYWxsSGVs
cGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjEpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAg
ICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9IChDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDAp
IC0gMikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4o
KTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNl
dCA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRlLT5ncmFw
aC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5j
aGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxk
MSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNo
aWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFyZ3VtZW50c1RvQ29weSA9IHBhcmFtc1twYXJhbXNP
ZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAo
bnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChp
bmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb29wU3Rh
cnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2Ny
YXRjaEdQUjMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2hHUFIz
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIGxvYWRPZmZzZXQpLCBzY3JhdGNoR1BSNCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUjQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBzdG9yZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlua1RvKGxvb3BTdGFydCwgJmppdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21S
ZXAocGFyYW1zW3BhcmFtc09mZnNldCArIGldLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBzdG9yZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBkb250VGhyb3cgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdWYXJhcmdzVGhyb3dpbmdQ
YXRoRGlkTm90VGhyb3cpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgZG9udFRocm93LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNs
b3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICAgICAgZ2V0VmFsdWVGcm9t
UmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0
KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxs
VHlwZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFy
YXJnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwg
PSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgeworICAgICAgICAgICAg
ICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICBmYXN0
Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCisgICAgICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChjYWxsVHlwZSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtD
YWxsID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2Fs
bCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkK
ICAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMygpLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJh
cmdzU3ByZWFkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBO
b2RlKiBub2RlID0gbV9ub2RlOwogICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDIoKSk7CkBAIC02NDk3LDYgKzY4MzYsMTEgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgeworICAgICAgICBpZiAobV9u
b2RlLT5jaGlsZDEoKSAmJiBtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21OZXdBcnJh
eVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJl
YWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KSkKQEAgLTY1ODUsNiArNjkyOSwxNDAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogCisgICAgTFZhbHVlIGdldFNwcmVh
ZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgIHsKKyAgICAgICAgQXJn
dW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOworICAg
ICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAg
ICAgICAgICAgICAgIGtub3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9
IDA7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Cisg
ICAgICAgIH0KKworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dp
Y2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVy
YXRpb25zLgorICAgICAgICBpZiAoIW51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKworICAgICAgICBMQmFzaWNCbG9jayBp
c0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxl
ck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50
c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkp
LCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBs
YXJnZXJMZW5ndGhSZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJh
cmdzV2l0aFNwcmVhZCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyBjb3JyZWN0
IGhhc2ggdHJhaXRzIGZvciBpdCB0byBiZSBudWxscHRyPworICAgICAgICBIYXNoTWFwPElubGlu
ZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZhdWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6
SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8SW5saW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNw
cmVhZExlbmd0aHM7CisKKyAgICAgICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0gbV9ub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5V2l0aFNwcmVhZC0+
b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgQml0VmVjdG9yKiBi
aXRWZWN0b3IgPSBhcnJheVdpdGhTcHJlYWQtPmJpdFZlY3RvcigpOworCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mU3RhdGljQXJndW1lbnRzID0gMDsKKyAgICAgICAgVmVjdG9yPExWYWx1ZSwg
Mj4gc3ByZWFkTGVuZ3RoczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5
V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KTsKKyAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSBjYWNoZWRTcHJlYWRMZW5ndGhzLmZpbmQoaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBjYWNoZWRTcHJlYWRMZW5ndGhz
LmVuZCgpKQorICAgICAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChpdGVyLT52
YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBsZW5ndGggPSBnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSwgY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FjaGVkU3ByZWFkTGVuZ3Rocy5hZGQoaW5saW5lQ2FsbEZyYW1lLCBs
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUg
bGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9mU3RhdGlj
QXJndW1lbnRzKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykK
KyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoSW5jbHVk
aW5nVGhpcywgbGVuZ3RoKTsKKworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFi
b3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7
CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBh
eWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisKKyAgICAgICAgTFZhbHVlIHRhcmdldFN0
YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CisgICAgICAgIExW
YWx1ZSBzdG9yZUluZGV4ID0gbV9vdXQuY29uc3RJbnRQdHIoMCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgewor
ICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgp
OworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21T
cHJlYWQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBn
ZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0
aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2FsbEZy
YW1lKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0TG9hZEluZGV4
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBzdGFydFN0b3JlSW5kZXggPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7
CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRTdG9yZUluZGV4Rm9yRW5kID0g
bV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmlzWmVybzY0KHNwcmVhZExlbmd0aCksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobG9vcCkpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhsb29wLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBs
b29wU3RvcmVJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRTdG9yZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgbG9hZEluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFydExvYWRJ
bmRleCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHNvdXJj
ZVN0YXJ0LCBsb2FkSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVl
LCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBsb29wU3Rv
cmVJbmRleCkpOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0TG9hZEluZGV4ID0gbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBsb2FkSW5kZXgpOworICAgICAgICAgICAgICAgIG1f
b3V0LmFkZEluY29taW5nVG9QaGkobG9hZEluZGV4LCBtX291dC5hbmNob3IobmV4dExvYWRJbmRl
eCkpOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0U3RvcmVJbmRleCA9IG1fb3V0LmFkZCht
X291dC5jb25zdEludFB0cigxKSwgbG9vcFN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIG1f
b3V0LmFkZEluY29taW5nVG9QaGkobG9vcFN0b3JlSW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0U3Rv
cmVJbmRleCkpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxvb3BTdG9yZUluZGV4
Rm9yRW5kID0gbV9vdXQuYW5jaG9yKG5leHRTdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuYmVsb3cobmV4dExvYWRJbmRleCwgc3ByZWFkTGVuZ3RoKSwgdW5z
dXJlKGxvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBzdG9y
ZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFydFN0b3JlSW5kZXhGb3JFbmQsIGxvb3BTdG9y
ZUluZGV4Rm9yRW5kKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVh
ZCwgaSkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIHN0b3JlSW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZUluZGV4ID0gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBz
dG9yZUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExCYXNpY0Js
b2NrIHVuZGVmaW5lZExvb3AgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHN0YXJ0U3RvcmVJbmRleCA9IG1fb3V0LmFuY2hvcihzdG9yZUluZGV4KTsKKyAgICAgICAg
TFZhbHVlIGxvb3BCb3VuZFZhbHVlID0gbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+bWFuZGF0b3J5
TWluaW11bSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhzdG9yZUluZGV4LCBs
b29wQm91bmRWYWx1ZSksCisgICAgICAgICAgICB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBs
b29wU3RvcmVJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRTdG9yZUluZGV4KTsKKyAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGxvb3BTdG9yZUluZGV4KSk7CisgICAgICAgIExW
YWx1ZSBuZXh0SW5kZXggPSBtX291dC5hZGQobG9vcFN0b3JlSW5kZXgsIG1fb3V0LmNvbnN0SW50
UHRyKDEpKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb29wU3RvcmVJbmRleCwg
bV9vdXQuYW5jaG9yKG5leHRJbmRleCkpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5iZWxvdyhuZXh0SW5kZXgsIGxvb3BCb3VuZFZhbHVlKSwgdW5zdXJlKHVuZGVm
aW5lZExvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlSnVt
cCgpCiAgICAgewogICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFyZ2V0Qmxv
Y2soKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
RlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpT
R2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgog
CkBAIC04NCw2ICs4NSw4IEBAIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blAKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAg
Ly8gVGhvc2UgYXJlIGNvbXBsZXRlbHkgaGFuZGxlZCBieSBvcGVyYXRpb25NYXRlcmlhbGl6ZU9i
amVjdEluT1NSCiAgICAgICAgIGJyZWFrOwogCkBAIC0zODgsMTQgKzM5MSw4NiBAQCBleHRlcm4g
IkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgICAgICAgICAgQVNTRVJU
KGZvdW5kKTsKICAgICAgICAgICAgIH0KICNlbmRpZgotCiAgICAgICAgICAgICByZXR1cm4gYXJy
YXk7CiAgICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgfQorCisgICAgY2FzZSBQaGFudG9tU3ByZWFkOiB7CisgICAgICAgIGRhdGFMb2dM
bigiUGhhbnRvbSBzcHJlYWQiKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBudWxscHRyOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9w
ZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IFNwcmVhZFBMb2MpIHsKKyAgICAgICAgICAg
ICAgICBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKworICAgICAgICAvLyBGSVhNRTogbWFrZSBzdXJl
IHRoZSBnZXREaXJlY3RJbmRleCBoZXJlIGlzIHNvdW5kIQorICAgICAgICBKU0ZpeGVkQXJyYXkq
IGZpeGVkQXJyYXkgPSBKU0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJheShleGVjLCB2bSwgYXJy
YXkpOworICAgICAgICByZXR1cm4gZml4ZWRBcnJheTsKKyAgICB9CisKKyAgICBjYXNlIFBoYW50
b21OZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgZGF0YUxvZ0xuKCJQaGFudG9tIG5ldyBh
cnJheSB3aXRoIHNwcmVhZCFcbiIpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCisgICAgICAgICAg
ICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMp
OworCisgICAgICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51
bVByb3BlcnRpZXMgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRp
b24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQ
cm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ld
OworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IE5ld0FycmF5
V2l0aFNwcmVhZEFyZ3VtZW50UExvYykgeworICAgICAgICAgICAgICAgICsrbnVtUHJvcGVydGll
czsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
c1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKEpTRml4ZWRBcnJheSogZml4ZWRBcnJheSA9IGpz
RHluYW1pY0Nhc3Q8SlNGaXhlZEFycmF5Kj4odmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBh
cnJheVNpemUgKz0gZml4ZWRBcnJheS0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYXJyYXlTaXplICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGFycmF5U2l6ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisKKyAgICAgICAgVmVjdG9yPEpTVmFsdWUsIDg+IGFyZ3VtZW50czsKKyAgICAg
ICAgYXJndW1lbnRzLmdyb3cobnVtUHJvcGVydGllcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRp
b24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigp
LmtpbmQoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MpIHsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkgPCBudW1Q
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbcHJvcGVydHkubG9jYXRpb24o
KS5pbmZvKCldID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBhcnJheUluZGV4ID0gMDsKKyAgICAgICAgZm9yIChKU1ZhbHVlIHZhbHVlIDogYXJn
dW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoSlNGaXhlZEFycmF5KiBmaXhlZEFycmF5ID0ganNE
eW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZml4ZWRBcnJheS0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGZpeGVkQXJyYXktPmdldChpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUluZGV4KHZtLCBhcnJheUluZGV4LCBmaXhlZEFycmF5LT5n
ZXQoaSkpOworICAgICAgICAgICAgICAgICAgICArK2FycmF5SW5kZXg7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm90
IHNwcmVhZGluZy4KKyAgICAgICAgICAgICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwg
YXJyYXlJbmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgICsrYXJyYXlJbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0Zy
YW1lLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9p
ZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogICAgICAgICBqaXQuc3ViMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BS
MSk7CiAgICAgICAgIGVuZFZhckFyZ3MubGluaygmaml0KTsKICAgICB9Ci0gICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4QXJndW1lbnRzICsgMSkpKTsKKyAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2hHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0M6Om1heEFyZ3VtZW50cyArIDEpKSk7CiAgICAg
CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCB0cnVlLCBudW1Vc2Vk
U2xvdHNHUFIsIHNjcmF0Y2hHUFIyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaXhlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGaXhlZEFycmF5LmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGNhbGwg
aW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gIWdsb2JhbE9iamVjdC0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpLAogICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIs
IGlmIHdlIGRvIHRoYXQsIHdlIGVuc3VyZSB3ZSdyZSBjYWxsaW5nIGluIHdpdGggYW4gYXJyYXkg
d2l0aCBhbGwgc2VsZiBwcm9wZXJ0aWVzIGJldHdlZW4KICAgICAgICAgICAgICAgICAvLyBbMCwg
bGVuZ3RoKS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpOworICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGFsc28gY2FsbCBpbnRvIHRoaXMg
ZHVyaW5nIE9TUiBleGl0IHRvIG1hdGVyaWFsaXplIGEgcGhhbnRvbSBmaXhlZCBhcnJheS4KKyAg
ICAgICAgICAgICAgICAvLyBXZSBtYXkgYmUgY3JlYXRpbmcgYSBmaXhlZCBhcnJheSBkdXJpbmcg
T1NSIGV4aXQgZXZlbiBhZnRlciB0aGUgaXRlcmF0b3IgcHJvdG9jb2wgY2hhbmdlZC4KKyAgICAg
ICAgICAgICAgICAvLyBCdXQsIHdoZW4gdGhlIHBoYW50b20gd291bGQgaGF2ZSBsb2dpY2FsbHkg
YmVlbiBjcmVhdGVkLCB0aGUgcHJvdG9jb2wgaGFkbid0IGJlZW4KKyAgICAgICAgICAgICAgICAv
LyBjaGFuZ2VkLiBUaGVyZWZvcmUsIGl0IGlzIHNvdW5kIHRvIGFzc3VtZSBlbXB0eSBpbmRpY2Vz
IGFyZSBqc1VuZGVmaW5lZCgpLgogICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295122</attachid>
            <date>2016-11-17 19:23:37 -0800</date>
            <delta_ts>2016-11-21 19:20:00 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>108032</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy9jYWxsLXZhcmFyZ3Mtc3ByZWFkLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtID0gIiIpIHsKKyAgICBpZiAoIWIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydDogIiArIG0pOworfQorbm9Jbmxp
bmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsK
K30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0
IHggPSBiYXIoLi4uYXJncywgNDIsIC4uLmFyZ3MpOyAKKyAgICByZXR1cm4geDsKK30KK25vSW5s
aW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBy
ID0gZm9vKGksIGkrMSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7Cisg
ICAgYXNzZXJ0KHJbMF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzFdID09PSBpKzIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSsz
LCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyLCBKU09OLnN0cmlu
Z2lmeShyKSk7CisgICAgYXNzZXJ0KHJbNF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOwor
ICAgIGFzc2VydChyWzVdID09PSBpKzIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQo
cls2XSA9PT0gaSszLCBKU09OLnN0cmluZ2lmeShyKSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFkLWNvbnZlcnQtdG8tc3RhdGlj
LWxvYWRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1u
ZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5ldy1hcnJheS13aXRoLXNw
cmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXoo
Li4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3Mp
IHsKKyAgICByZXR1cm4gYmF6KC4uLmFyZ3MsIDQyLCAuLi5hcmdzKTsKK30KK2Z1bmN0aW9uIGZv
byhhLCBiLCBjLCBkKSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBjLCBkKTsKK30KK25vSW5saW5l
KGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByID0g
Zm9vKGksIGkrMSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAg
YXNzZXJ0KHJbMF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMik7CisgICAgYXNz
ZXJ0KHJbMl0gPT09IGkrMyk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyKTsKKyAgICBhc3NlcnQo
cls0XSA9PT0gaSsxKTsKKyAgICBhc3NlcnQocls1XSA9PT0gaSsyKTsKKyAgICBhc3NlcnQocls2
XSA9PT0gaSszKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVh
ZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFkLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQt
YW5kLXBoYW50b20tc3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL25l
dy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFk
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7
CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBs
ZXQgciA9IFsuLi5hLCAuLi5hcmdzXTsKKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7
CisKK2Z1bmN0aW9uIGVzY2FwZShhKSB7IHJldHVybiBhOyB9Citub0lubGluZShlc2NhcGUpOwor
ZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3MpIHsKKyAgICBlc2NhcGUoYXJncyk7CisgICAgbGV0IHIg
PSBbLi4uYSwgLi4uYXJnc107CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBmb3IgKGxldCBmIG9mIFtmb28s
IGJhcl0pIHsKKyAgICAgICAgbGV0IG8gPSB7fTsKKyAgICAgICAgbGV0IGEgPSBbbywgMjBdOwor
ICAgICAgICBsZXQgciA9IGYoYSwgMzAsIDQwKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09
PSA0KTsKKyAgICAgICAgYXNzZXJ0KHJbMF0gPT09IG8pOworICAgICAgICBhc3NlcnQoclsxXSA9
PT0gMjApOworICAgICAgICBhc3NlcnQoclsyXSA9PT0gMzApOworICAgICAgICBhc3NlcnQoclsz
XSA9PT0gNDApOworICAgIH0KK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3LWFy
cmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7
CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24hIik7
Cit9Citub0lubGluZShhc3NlcnQpOworCitsZXQgdmFsdWUgPSBmYWxzZTsKKworZnVuY3Rpb24g
YmF6KHgpIHsKKyAgICBpZiAodHlwZW9mIHggIT09ICJudW1iZXIiKSB7CisgICAgICAgIHZhbHVl
ID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9Citub0lubGluZShiYXopOworCitmdW5j
dGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorCitsZXQgZGlkRWZmZWN0
cyA9IGZhbHNlOyAKK2Z1bmN0aW9uIGVmZmVjdHMoKSB7IGRpZEVmZmVjdHMgPSB0cnVlOyB9Citu
b0lubGluZShlZmZlY3RzKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
dGhlQXJncyA9IFsuLi5hcmdzLCBhLCAuLi5hcmdzXTsKKyAgICBiYXooYSk7CisgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgbGV0IHIgPSBiYXIuYXBwbHko
bnVsbCwgdGhlQXJncyk7CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgZm9vKGksIGkrMSk7CisgICAgYXNz
ZXJ0KCFkaWRFZmZlY3RzKTsKK30KK2xldCBvID0ge307CitsZXQgW2EsIGIsIGNdID0gZm9vKG8s
IDIwKTsKK2Fzc2VydChhID09PSAyMCk7Cithc3NlcnQoYiA9PT0gbyk7Cithc3NlcnQoYyA9PT0g
MjApOworYXNzZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtZm9yd2FyZC12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Bo
YW50b20tc3ByZWFkLWZvcndhcmQtdmFyYXJncy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTcgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIsIG09
IiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
bjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7Cisg
ICAgZnVuY3Rpb24gYmFyKGEsIGIsIGMsIGQpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBk
XTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJh
ciguLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgW2EsIGIsIGMsIGRdID0gZm9vKGks
IGkrMSwgaSsyLCBpKzMpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2Vy
dChiID09PSBpKzEpOworICAgICAgICBhc3NlcnQoYyA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0
KGQgPT09IGkrMykgOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rp
b24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0
aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4u
YXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7
CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgICAgIGxldCBbYSwgYiwgYywg
ZCwgZSwgZiwgZ10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IGkrMik7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgICAgICBhc3Nl
cnQoZCA9PT0gaSk7CisgICAgICAgIGFzc2VydChlID09PSBpKzEpOworICAgICAgICBhc3NlcnQo
ZiA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0KGcgPT09IGkrMyk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1
cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJheiguLi5hcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIC4uLmFy
Z3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKysp
IHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2Vy
dChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBh
c3NlcnQoYSA9PT0gaSszKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkpOworICAgICAgICBhc3Nl
cnQoYyA9PT0gaSszKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0
aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5j
dGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0K
KyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAg
ICAgICAgYXNzZXJ0KHJbMF0gPT09IGkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDUoKSB7
CisgICAgZnVuY3Rpb24gYmF6KGEsIGIsIGMpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjXTsK
KyAgICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheigu
Li5hcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsK
KyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9J
bmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAg
ICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxl
bmd0aCA9PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQo
YSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3Nl
cnQoYyA9PT0gdW5kZWZpbmVkKTsKKyAgICB9Cit9CisKK3Rlc3QxKCk7Cit0ZXN0MigpOwordGVz
dDMoKTsKK3Rlc3Q0KCk7Cit0ZXN0NSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtb3NyLWV4aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRv
bS1zcHJlYWQtb3NyLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIGFzc2VydGlvbiEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2xldCB2YWx1ZSA9IGZh
bHNlOworCitmdW5jdGlvbiBiYXooeCkgeworICAgIGlmICh0eXBlb2YgeCAhPT0gIm51bWJlciIp
IHsKKyAgICAgICAgdmFsdWUgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4geDsKK30KK25vSW5s
aW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFyZ3M7Cit9
CisKK2xldCBkaWRFZmZlY3RzID0gZmFsc2U7IAorZnVuY3Rpb24gZWZmZWN0cygpIHsgZGlkRWZm
ZWN0cyA9IHRydWU7IH0KK25vSW5saW5lKGVmZmVjdHMpOworCitmdW5jdGlvbiBmb28oYSwgLi4u
YXJncykgeworICAgIGxldCByID0gYmFyKC4uLmFyZ3MsIGJheihhKSwgLi4uYXJncyk7CisgICAg
aWYgKHZhbHVlKSB7CisgICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9
Citub0lubGluZShmb28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Cisg
ICAgZm9vKGksIGkrMSk7CisgICAgYXNzZXJ0KCFkaWRFZmZlY3RzKTsKK30KK2xldCBvID0ge307
CitsZXQgW2EsIGIsIGNdID0gZm9vKG8sIDIwKTsKK2Fzc2VydChhID09PSAyMCk7Cithc3NlcnQo
YiA9PT0gbyk7Cithc3NlcnQoYyA9PT0gMjApOworYXNzZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtY2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1j
YWxsLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZl
cnQtdG8tc3RhdGljLWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsK
KyAgICByZXR1cm4gYXJnczsKK30KK25vSW5saW5lKGJheik7CitmdW5jdGlvbiBiYXIoYSwgLi4u
YXJncykgeworICAgIHJldHVybiBiYXooLi4uYXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rp
b24gZm9vKGEsIGIsIGMsIGQpIHsKKyAgICByZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9J
bmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0
IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsK
KyAgICBhc3NlcnQoclswXSA9PT0gaSsxKTsKKyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAg
ICBhc3NlcnQoclsyXSA9PT0gaSszKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFz
c2VydChyWzRdID09PSBpKzEpOworICAgIGFzc2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzZdID09PSBpKzMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTI5LDcgKzE5MjksNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbCh2YWx1ZS0+Y2hpbGQoMCkpCiAg
ICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCkgewogICAgICAg
ICAgICAgaW5uZXJBZGQgPSB2YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICBvZmZzZXQgPSB2
YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSk7CiAgICAgICAgICAgICB2YWx1
ZSA9IHZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIgYW5kIHN0YXRlcyB0aGF0CiAgICAgICAgIC8v
IHRoZSByZWdpc3RlciBpcyB1c2VkIGxhdGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVnaXN0ZXIg
aXMgdXNlZCBhZnRlciB0aGUgcmVzdWx0CiAgICAgICAgIC8vIGlzIGRlZmluZWQgKGkuZSwgdGhl
IHJlc3VsdCB3aWxsIGludGVyZmVyZSB3aXRoIHRoaXMgYXMgYW4gaW5wdXQpLgotICAgICAgICAv
LyBJdCdzIG5vdCB2YWxpZCBmb3IgdGhpcyB0byBiZSB1c2VkIGFzIGEgcmVzdWx0IGtpbmQuCisg
ICAgICAgIC8vIEl0J3Mgbm90IHZhbGlkIG91dHB1dCByZXByZXNlbnRhdGlvbi4KICAgICAgICAg
TGF0ZVJlZ2lzdGVyLAogCiAgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwg
dGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlk
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Nyw2ICsyNzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sg
aWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVy
bgogICAgICAgICAvLyBpdHNlbGYgaW50byBhIHN0cmFpZ2h0LWxpbmUgc2VxdWVuY2Ugb2YgR2V0
U3RhY2svUHV0U3RhY2suCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDMwNzEKKworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgYmUgbW9yZSBh
Y2N1cmF0ZSBmb3IgRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkIGhlcmUuCiAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CkBAIC0xOTc0LDYgKzE5NzYsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAg
IGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6
CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRy
dWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMgY2xhaW1z
IHRvIHJldHVybiBib3R0b20uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIw
ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAg
ICAvLyBKdXN0IGZpbmRzIG5vZGVzIHRoYXQgd2Uga25vdyBob3cgdG8gd29yayB3aXRoLgogICAg
IHZvaWQgaWRlbnRpZnlDYW5kaWRhdGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3Vt
ZW50czoKQEAgLTEwOSw2ICsxMDksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNwcmVhZDoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0
Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2hlY2sgQXJy
YXlVc2UgaGVyZSBiZWNhdXNlIEFycmF5VXNlIGluZGljYXRlcyB0aGF0IHRoZSBpdGVyYXRvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdG9jb2wgZm9yIEFycmF5cyBpcyBub24tb2Jz
ZXJ2YWJsZSBieSB1c2VyIGNvZGUgKGUuZywgaXQgaGFzbid0CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBiZWVuIGNoYW5nZWQpLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBDcmVhdGVSZXN0ICYmIG1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUt
PmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBm
b3IgU3ByZWFkcyB0byBiZSBvZiByZXN0IG5vZGVzIGZvciBub3cuCisgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzT0sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09LID0gY2hp
bGQtPm9wKCkgPT0gU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0
ICYmIG1fY2FuZGlkYXRlcy5jb250YWlucyhjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNPSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBpZiBpdCB3YXNuJ3QgZm9yIHRo
ZSBmYWN0IHRoYXQgc2NvcGVkIGFyZ3VtZW50cyBhcmUKQEAgLTEyNiw2ICsxNTgsNjIgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRh
dGVzOiAiLCBsaXN0RHVtcChtX2NhbmRpZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29s
IGlzU3RpbGxWYWxpZENhbmRpZGF0ZShOb2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNhbmRpZGF0ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAg
ICAgIHJldHVybiBtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2Rl
KCkpOworCisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBC
aXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChj
YW5kaWRhdGUsIGkpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlk
Q2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwg
MT4gdG9SZW1vdmU7CisKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92
ZShub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBO
b2RlKiBzb3VyY2UgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9j
YW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAm
JiBzb3VyY2UpCisgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIs
IG5vZGUsICIgYmVjYXVzZSBpdCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAg
ICAgICAgaWYgKHJlbW92ZWQpCisgICAgICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygp
OworICAgIH0KICAgICAKICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92
ZSBmcm9tIHRoZSBjYW5kaWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQg
ZWxpbWluYXRlQ2FuZGlkYXRlc1RoYXRFc2NhcGUoKQpAQCAtMTMzLDEyICsyMjEsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgYXV0byBlc2NhcGUgPSBbJl0gKEVkZ2UgZWRnZSwgTm9kZSogc291cmNl
KSB7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92ZShlZGdlLm5vZGUoKSk7
Ci0gICAgICAgICAgICBpZiAocmVtb3ZlZCAmJiB2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgZWRnZS5ub2RlKCksICIgYmVjYXVzZSBp
dCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisgICAgICAgICAgICB0cmFuc2l0aXZl
bHlSZW1vdmVDYW5kaWRhdGUoZWRnZS5ub2RlKCksIHNvdXJjZSk7CiAgICAgICAgIH07CiAgICAg
ICAgIAogICAgICAgICBhdXRvIGVzY2FwZUJhc2VkT25BcnJheU1vZGUgPSBbJl0gKEFycmF5TW9k
ZSBtb2RlLCBFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgLy8gRklYTUU6
IGNvbnNpZGVyIHRoaXMgY2FsbGVkIGZyb20gQ2hlY2tBcnJheSBhbmQgdGhlIGVkZ2UgYmVpbmcg
YSBOZXdBcnJheVdpdGhTcHJlYWQgbm9kZS4KICAgICAgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKICAgICAgICAg
ICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVEaXJlY3RBcmd1bWVudHMpCkBAIC0xODcs
NiArMjc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfTsKKworICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOwogICAg
ICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7
CkBAIC0yMDEsMTEgKzI5MCw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICAg
ICAgICAgIGVzY2FwZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNo
aWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9k
ZShub2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOyAvLyBGSVhNRTogVGhp
cyB3b3VsZCBub3QgYmUgaGFyZCB0byBzdXBwb3J0LgogICAgICAgICAgICAgICAgICAgICBlc2Nh
cGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDog
eworICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZl
Y3RvcigpOworICAgICAgICAgICAgICAgICAgICBib29sIGlzV2F0Y2hpbmdIYXZpbmdBQmFkVGlt
ZVdhdGNocG9pbnQgPSBtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQo
bm9kZSk7IAorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIGNo
aWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZG9udEVzY2FwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRFc2NhcGUgPSBj
aGlsZC0+b3AoKSA9PSBTcHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
Y2hpbGQtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gQ3JlYXRlUmVzdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVX
YXRjaHBvaW50OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9udEVzY2FwZSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWRvbnRFc2NhcGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
KGNoaWxkLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgU3By
ZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPSyA9IG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0spCisgICAgICAgICAgICAgICAgICAgICAg
ICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJy
YXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxk
MSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC0yMTQsNiArMzM0LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKSwgbm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jYWxsVmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdP
ZmZzZXQgJiYgbm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLCBub2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrOgpAQCAt
MjYzLDYgKzM4NSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0
ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9k
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5v
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zOTAsNyArNTE2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBibG9jay0+c2l6ZSgpICYmIGNh
bmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5n
IGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAi
LCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTQxNyw3ICs1NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRp
ZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2Nr
LT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC00NjAsOSArNTg2LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHRyYXZlcnNlIGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBzZWUgYSBkZWYgYmVmb3JlIGEgdXNlLgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZWZvcmUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgdHJhbnNmb3JtZWQgdGhlIGFsbG9jYXRpb24g
YmVmb3JlIHRoZSB1c2UKICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4gYWxsb2NhdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2Fu
ZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNh
bmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFkIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXBGcm9tQ2FuZGlkYXRlID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIC0+IHVuc2ln
bmVkIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fY2FuZGlkYXRlcy5jb250YWlucyhj
YW5kaWRhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRh
dGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBzcHJlYWQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRp
ZGF0ZSwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpIC0gMSkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5vcCgpID09IFBoYW50b21TcHJlYWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcmVzdCA9IHNwcmVhZC0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdC0+b3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgpAQCAtNDg4LDYgKzYzMSwyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tU3ByZWFkKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKQEAgLTU5OSw5NCArNzU2LDE4NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRP
Syk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXA7CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IFsmXSAo
dW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1
dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJn
c0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOwor
ICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVW
YWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQg
KyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+
b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVk
Z2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNh
bmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
Y2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBtYWtlIHRoaXMgYXNzZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5IGVzY2FwaW5nLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Db252ZXJ0VG9TdGF0aWNMb2FkU3RvcmVzID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkNvbnZl
cnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlzfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51
bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Yml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMg
YXNzZXJ0aW9uIHRydWUgdmlhIHByb3Blcmx5IGVzY2FwaW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFt
ZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHMgPSBmcmFt
ZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZlNwcmVhZEFyZ3VtZW50cyA9IDA7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICs9IG51bWJl
ck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFy
YXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA+PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBi
ZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkV4aXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
Tm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQu
b2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+
Y291bnQsIEZsdXNoZWRJbnQzMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdz
RGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVh
c2llciB0byByZWFzb24gYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyAr
K3N0b3JlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qg
ZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQg
aWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZh
cmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5n
ZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRT
dGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0
MzQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5s
aW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMi
LCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQg
LSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdG9yZUluZGV4
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBhc3NlcnRpb24gdHJ1ZSB2aWEgcHJvcGVy
bHkgZXNjYXBpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQx
KCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQt
PmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRD
b3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyBs
b2FkSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZElu
ZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3N0b3JlSW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2
YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKytzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmVJbmRleCA8PSBsaW1pdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsr
c3RvcmVJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1
bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRl
ZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0
T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1
bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVl
KHVuZGVmaW5lZCwgc3RvcmVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRl
eDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0
KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEp
LCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRP
SyA9IGNhbkV4aXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwRnJvbUNhbmRpZGF0ZShjYW5kaWRhdGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsKKworICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0RhdGEt
Pm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdz
RGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+
PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRo
YXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3RvcmVJbmRleCA9
IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytzdG9yZUluZGV4KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVt
ZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
YWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0YS0+b2Zmc2V0OworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0
YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRo
aW5nIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJ
bmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNr
cyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJ
Ujogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzQzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3Jp
Z2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVl
LCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFs
dWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhG
b3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTY5OCwyNyArOTQ3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdz
RGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+
IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEg
KyB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLCBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydFRvU3RhdGljQ2FsbCA9
IFsmXSAoY29uc3QgVmVjdG9yPE5vZGUqPiYgYXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNp
emUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5h
cHBlbmQobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2RlLT5jaGlsZDIoKSk7CkBAIC03NDMsMjUgKzk3Myw5
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBB
ZGphY2VuY3lMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3Q6
OlZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwg
PSBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3Mp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lu
bGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhDYWxsRm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhblRyYW5zZm9y
bVRvQ2FsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZl
Y3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuVHJhbnNmb3JtVG9D
YWxsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhblRyYW5zZm9ybVRvQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
aGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udmVydFRvU3RhdGljQ2FsbChhcmd1bWVudHMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxWYXJh
cmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYm
ICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMSArIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldDsg
aSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0
YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU3Rh
dGljQ2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNV
dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsx
MDksMTAgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAg
ICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIAorICAgIC8vIEZJ
WE1FOiBoYW5kbGUgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3Vt
ZW50cy0+b3AoKSAhPSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudHMtPm9wKCkgIT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKKwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBAQCBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAgICAgICBjYXNlIERpcmVjdFRh
aWxDYWxsOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToK
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkpOwogICAgICAgICAg
ICAgLy8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5kIHRoZSBsaWtlLiBU
aGVyZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBub2RlcyBhZnRlciB0aGUgdGVy
bWluYWwuIFRoZXkgYXJlIGFsbCBuby1vcHMgYW5kIHdpbGwgbm90IGhhdmUgYW55IGNoZWNrZWQg
Y2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3Vu
dCk7CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNl
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoK
ICAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQncyBwaGFudG9tLCBpdCBzdGlsbCBoYXMgdGhlIHBy
b3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhlci4KICAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDggQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFj
dGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAg
IGNhc2UgUGhhbnRvbVNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzOCw2ICsxNDM4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2Fz
ZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0
OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
QWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zv
ckFsbEtpbGxzLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZv
aWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIGZvciAoTm9kZSogbm9kZSA6IGNvbWJpbmVkTGl2
ZW5lc3MubGl2ZUF0VGFpbFtibG9ja10pCiAgICAgICAgIGZ1bmN0b3IoYmxvY2stPnNpemUoKSwg
bm9kZSk7CiAgICAgCi0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGxvY2FsQXZh
aWxhYmlsaXR5OworICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBsb2NhbEF2YWls
YWJpbGl0eShncmFwaCk7CiAgICAgbG9jYWxBdmFpbGFiaWxpdHkuYmVnaW5CbG9jayhibG9jayk7
CiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlz
IGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8v
IHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBp
cyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRo
ZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5k
LCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRv
IGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC00NzMsNyArNDcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KGhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURp
cmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgb3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCkgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0
QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgewogICAgICAgICAg
ICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRo
ZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUg
YSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24o
KTsKQEAgLTEwNjMsNyArMTA2Miw3IEBAIHB1YmxpYzoKIAogICAgIEJpdFZlY3RvciogYml0VmVj
dG9yKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCk7
CisgICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBvcCgpID09IFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8Qml0
VmVjdG9yKj4oKTsKICAgICB9CiAKQEAgLTE3NTYsNiArMTc1NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwODY5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQ0LDYgKzM0NCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhDcmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKFBoYW50b21EaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBt
YWNybyhDcmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENy
ZWF0ZUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNs
b25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUaGlzIGNv
dWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJz
ZSBwb3N0b3JkZXIuCiAgICAgICAgIAotICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3IgY2FsY3VsYXRvcjsKKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
IGNhbGN1bGF0b3IobV9ncmFwaCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgICAgZG8g
ewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw4IEBAIGJvb2wg
cGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXAKICAgICByZXR1cm4gcnVuUGhhc2U8
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4oZ3JhcGgpOwogfQogCi1Mb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpCitMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
cihHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQogewogfQogCkBAIC0xNjQsNyAr
MTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjA5LDE3IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
Y2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFBy
b21vdGVkSGVhcExvY2F0aW9uKFNwcmVhZFBMb2MsIG5vZGUpLCBBdmFpbGFiaWxpdHkobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQaGFudG9tTmV3
QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVu
dFBMb2MsIG5vZGUsIGkpLCBBdmFpbGFiaWxpdHkoY2hpbGQpKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMo
R3JhcAogLy8gaGF2aW5nIHJ1biB0aGUgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLgogY2xhc3MgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3IoKTsKKyAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Io
R3JhcGgmKTsKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAgCiAg
ICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAogICAgIEF2YWlsYWJpbGl0eU1h
cCBtX2F2YWlsYWJpbGl0eTsKKyAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzNCw3ICsxNjM0LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxh
Y2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgLy8g
dmFsdWUsIGFuZCBjcmVhdGUgdGhlIG1hdGVyaWFsaXphdGlvbiBub2Rlcy4KLSAgICAgICAgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAg
ICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
KG1fZ3JhcGgpOwogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgewog
ICAgICAgICAgICAgbV9oZWFwID0gbV9oZWFwQXRIZWFkW2Jsb2NrXTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQxICsxMDYsNjMgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlYWRUb3AoKQogICAgIHsKKyAgICAgICAgYm9vbCBp
c0ZvcndhcmRpbmdOb2RlID0gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7
Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAg
ICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3
YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOiB7CisgICAgICAgIGNh
c2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAgICBpc0Zv
cndhcmRpbmdOb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczogewogCi0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZTsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmhhc0FyZ3VtZW50c0NoaWxkKCkgJiYgbV9u
b2RlLT5hcmd1bWVudHNDaGlsZCgpKQotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKLSAgICAgICAgICAgIGlmIChtX25v
ZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsIHx8IG1fbm9kZS0+b3AoKSA9PSBHZXRNeUFy
Z3VtZW50QnlWYWxPdXRPZkJvdW5kcykgewotICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBv
ZiBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBndWFyYW50ZWVzIHRoYXQgR2V0TXlBcmd1bWVudEJ5
VmFsKiB3aWxsIG5ldmVyCi0gICAgICAgICAgICAgICAgLy8gcmVhZCBhbnkgYXJndW1lbnRzIGJl
bG93IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAuIEZvciBleGFtcGxlLCBpZiBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCBpcyAyLAotICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgbmV2
ZXIgcmVhZCBhcmd1bWVudCAwIG9yIGFyZ3VtZW50IDEuCi0gICAgICAgICAgICAgICAgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIHJlYWRGcmFtZSA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gUmVhZCB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cyBhbmQgYXJndW1lbnQgY291
bnQuCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dyYXBoLm1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Jl
YWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgICAgICBt
X3JlYWQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGkrKykK
KyAgICAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBSZWFkIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzIGFuZCBhcmd1bWVudCBjb3VudC4K
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFwaC5tX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKTsgaSsrKQotICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpOwotICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGlzRm9yd2FyZGluZ05vZGUgJiYgbV9ub2RlLT5oYXNBcmd1
bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcnJheVdp
dGhTcHJlYWQtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVz
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVhZEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5oYXNBcmd1bWVudHNDaGls
ZCgpICYmIG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSAwOworICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5
VmFsIHx8IG1fbm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcykgewor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb2YgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgZ3VhcmFudGVlcyB0aGF0IEdldE15QXJndW1lbnRCeVZhbCogd2lsbCBuZXZlcgorICAgICAg
ICAgICAgICAgICAgICAvLyByZWFkIGFueSBhcmd1bWVudHMgYmVsb3cgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMgdG8gc2tpcC4gRm9yIGV4YW1wbGUsIGlmIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
IGlzIDIsCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgbmV2ZXIgcmVhZCBhcmd1bWVu
dCAwIG9yIGFyZ3VtZW50IDEuCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gbV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJlYWRGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAg
bV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpKTsKKwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0
LDE0IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm8KICAgICBjYXNl
IFZlY3Rvckxlbmd0aFBMb2M6CiAgICAgICAgIG91dC5wcmludCgiVmVjdG9yTGVuZ3RoUExvYyIp
OwogICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFNwcmVhZFBMb2M6CisgICAgICAgIG91dC5w
cmludCgiU3ByZWFkUExvYyIpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld0FycmF5
V2l0aFNwcmVhZEFyZ3VtZW50UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOZXdBcnJheVdpdGhT
cHJlYWRBcmd1bWVudFBMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMjA4Njkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw5IEBAIGVudW0gUHJvbW90ZWRMb2NhdGlvbktp
bmQgewogICAgIE5hbWVkUHJvcGVydHlQTG9jLAogICAgIFB1YmxpY0xlbmd0aFBMb2MsCiAgICAg
U3RydWN0dXJlUExvYywKLSAgICBWZWN0b3JMZW5ndGhQTG9jCisgICAgVmVjdG9yTGVuZ3RoUExv
YywKKyAgICBTcHJlYWRQTG9jLAorICAgIE5ld0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYywK
IH07CiAKIGNsYXNzIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDg2OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU4LDYgKzM1OCw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBj
YXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoK
KyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjE0LDYgKzU2
MTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJv
dW5kczoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVh
ZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgzMCw2ICs1ODMwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgS2lsbFN0YWNrOgogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2Fz
ZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5MSw2ICs2OTEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tQWxsb2NhdGlv
bigpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21TcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9k
ZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBoZXJlLgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDYgKzIzMyw4
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1h
dGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVu
dHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6
CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNs
b25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAg
ICAgICAgICwgbV9vdXQoc3RhdGUpCiAgICAgICAgICwgbV9wcm9jKCpzdGF0ZS5wcm9jKQorICAg
ICAgICAsIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcihtX2dyYXBoKQogICAgICAgICAsIG1fc3Rh
dGUoc3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9z
dGF0ZSkKICAgICB7CkBAIC0xMDg0LDYgKzEwODUsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoK
ICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAgLTQzMDgsNiArNDMxMSw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQo
bV9ub2RlKSkgewogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogICAgICAg
ICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBtX25vZGUtPmJpdFZlY3RvcigpOworICAgICAg
ICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8
SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNh
bGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOworCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWJpdFZlY3Rvci0+Z2V0KGkpKQogICAgICAgICAgICAgICAgICAgICArK3N0YXJ0
TGVuZ3RoOwpAQCAtNDMxOCw4ICs0MzIzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAg
RWRnZSB1c2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSBmaXhlZEFycmF5ID0gbG93Q2VsbCh1c2UpOwotICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5sb2FkMzIoZml4ZWRBcnJheSwg
bV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNl
LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1
c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNo
aWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBpdGVyID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5maW5kKGlubGluZUNhbGxGcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGggPSBpdGVyLT52YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNwcmVhZExlbmd0aCA9IGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkU3ByZWFkTGVuZ3Rocy5hZGQoaW5saW5lQ2FsbEZyYW1lLCBzcHJlYWRM
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gbV9vdXQuYWRkKGxlbmd0aCwgc3ByZWFkTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFy
cmF5ID0gbG93Q2VsbCh1c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9v
dXQuYWRkKGxlbmd0aCwgbV9vdXQubG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFy
cmF5X3NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIApAQCAtNDMzMiw0MiArNDM1Miw4NCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
aSk7CiAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh1c2UtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodXNlLT5jaGlsZDEoKS0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHVzZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHVzZS0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291
dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRz
U3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBsb2FkSW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4U3RhcnQgPSBt
X291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNoID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKIAotICAg
ICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5pc1plcm82NChsZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZml4ZWRJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmNvbnN0SW50UHRyKDApKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
YXJyYXlJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNoID0gbV9vdXQuYW5jaG9y
KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBjb250aW51YXRpb24pOwogCi0gICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSBmaXhlZEFycmF5U2l6ZSA9IG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubG9h
ZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFycmF5X3NpemUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSBhcnJheUluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IGFycmF5SW5kZXhTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbG9hZElu
ZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGxvYWRJbmRleFN0YXJ0KTsKIAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5pc1plcm82NChmaXhlZEFycmF5U2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnN1
cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgTFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMu
dmFyaWFibGVzLCBzb3VyY2VTdGFydCwgbG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KGl0ZW0sIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywgc3RvcmFnZSwgYXJyYXlJbmRleCkpOwogCi0gICAgICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRBcnJh
eUluZGV4ID0gbV9vdXQuYWRkKGFycmF5SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0TG9hZEluZGV4ID0gbV9vdXQuYWRkKGxv
YWRJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleExvb3BGb3JGaW5pc2ggPSBtX291dC5hbmNob3IobmV4
dEFycmF5SW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBhcnJheUluZGV4ID0g
bV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydCk7Ci0gICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSBmaXhlZEFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwg
Zml4ZWRJbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkobG9hZEluZGV4LCBtX291dC5hbmNob3IobmV4dExvYWRJbmRleCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShhcnJheUluZGV4LCBtX291
dC5hbmNob3IobmV4dEFycmF5SW5kZXgpKTsKIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
aXRlbSA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU0ZpeGVkQXJyYXlf
YnVmZmVyLCBmaXhlZEFycmF5LCBmaXhlZEFycmF5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NChpdGVtLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5pbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMsIHN0b3JhZ2UsIGFycmF5SW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5iZWxvdyhuZXh0TG9hZEluZGV4LCBsZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc3VyZShsb29wU3RhcnQpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgTFZhbHVlIG5leHRBcnJheUluZGV4ID0gbV9vdXQuYWRkKGFycmF5SW5kZXgs
IG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRG
aXhlZEFycmF5SW5kZXggPSBtX291dC5hZGQoZml4ZWRBcnJheUluZGV4LCBtX291dC5jb25zdElu
dFB0cigxKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhM
b29wRm9yRmluaXNoID0gbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJy
YXlJbmRleFN0YXJ0Rm9yRmluaXNoLCBhcnJheUluZGV4TG9vcEZvckZpbmlzaCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXkgPSBsb3dDZWxsKHVzZSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpeGVkSW5kZXhTdGFydCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBhcnJheUluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0Rm9yRmlu
aXNoID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
ZGRJbmNvbWluZ1RvUGhpKGZpeGVkQXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRGaXhlZEFy
cmF5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShh
cnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEFycmF5SW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5U2l6ZSA9IG1fb3V0Lnplcm9FeHRQdHIobV9vdXQu
bG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFycmF5X3NpemUpKTsKIAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5iZWxvdyhuZXh0Rml4ZWRBcnJheUluZGV4LCBmaXhlZEFycmF5U2l6ZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGZpeGVkQXJyYXlTaXplKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOwog
Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgp
LCBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2gsIGFycmF5SW5kZXhMb29wRm9yRmluaXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8obG9vcFN0YXJ0LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgICAgICAgICBM
VmFsdWUgYXJyYXlJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBhcnJheUluZGV4U3Rh
cnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXlJbmRleCA9IG1f
b3V0LnBoaShwb2ludGVyVHlwZSgpLCBmaXhlZEluZGV4U3RhcnQpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgaXRlbSA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy5KU0ZpeGVkQXJyYXlfYnVmZmVyLCBmaXhlZEFycmF5LCBmaXhlZEFycmF5SW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwgbV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9yYWdlLCBhcnJheUlu
ZGV4KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0QXJyYXlJbmRleCA9
IG1fb3V0LmFkZChhcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgbmV4dEZpeGVkQXJyYXlJbmRleCA9IG1fb3V0LmFkZChmaXhl
ZEFycmF5SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhMb29wRm9yRmluaXNoID0gbV9vdXQuYW5jaG9y
KG5leHRBcnJheUluZGV4KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5j
b21pbmdUb1BoaShmaXhlZEFycmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0Rml4ZWRBcnJheUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGFy
cmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCkpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuYmVsb3cobmV4dEZpeGVkQXJyYXlJbmRleCwgZml4ZWRBcnJheVNpemUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb29wU3RhcnQpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtX291dC5waGko
cG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNoLCBhcnJheUluZGV4TG9vcEZv
ckZpbmlzaCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFw
cy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7CiAgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBpdGVtID0gbG93SlNWYWx1ZSh1c2UpOwpAQCAtNDQwNCw2ICs0NDY2LDEyIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGNvbXBpbGVTcHJlYWQoKQogICAgIHsKKyAgICAgICAgLy8gSXQgd291bGQg
YmUgdHJpdmlhbCB0byBzdXBwb3J0IHRoaXMsIGJ1dCBmb3Igbm93LCB3ZSBuZXZlciBjcmVhdGUK
KyAgICAgICAgLy8gSVIgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSB0aGlzLiBUaGUgcmVhc29uIGlz
IHRoYXQgU3ByZWFkIGlzIG9ubHkKKyAgICAgICAgLy8gY29uc3VtZWQgYnkgTmV3QXJyYXlXaXRo
U3ByZWFkIGFuZCBuZXZlciBhbnl0aGluZyBlbHNlLiBBbHNvLCBhbnkKKyAgICAgICAgLy8gU3By
ZWFkKFBoYW50b21DcmVhdGVSZXN0KSB3aWxsIHR1cm4gaW50byBQaGFudG9tU3ByZWFkKFBoYW50
b21DcmVhdGVSZXN0KS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ub2RlLT5jaGlsZDEoKS0+
b3AoKSAhPSBQaGFudG9tQ3JlYXRlUmVzdCk7IAorCiAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgTFZhbHVlIHJlc3VsdDsKQEAg
LTYwOTgsNiArNjE2NiwyNzUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKCkKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSB0aGlzQXJnID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChu
b2RlLT5jaGlsZDMoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAg
ICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOworICAgICAg
ICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7Cisg
ICAgICAgIHVuc2lnbmVkIG51bU5vblNwcmVhZFBhcmFtZXRlcnMgPSAwOworICAgICAgICBWZWN0
b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiBw
YXRjaHBvaW50QXJndW1lbnRzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJp
dFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFw
aC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3By
ZWFkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgbGVuZ3RoID0gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBs
ZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludEFyZ3VtZW50cy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzcHJlYWRMZW5n
dGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICArK251bU5vblNwcmVhZFBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50ID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnRBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50UHRyKG51bU5vblNwcmVhZFBhcmFtZXRlcnMg
KyAxKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKKyAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJlcDo6V2FybUFueSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
VmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3JXaXRo
UmVwKHBhdGNocG9pbnRBcmd1bWVudHMsIFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKworICAgICAg
ICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJl
cGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1p
bmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpT
IGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNp
emUgPQorICAgICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsK
KyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Cisg
ICAgICAgICAgICAgICAgLy9DYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJn
c0RhdGEoKTsKKworICAgICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hHUFIxID0gcGFyYW1z
LmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgICAgICAvL0dQUlJlZyBzY3JhdGNoR1BSMiA9IHBh
cmFtcy5ncFNjcmF0Y2goMSk7CisgICAgICAgICAgICAgICAgLy9HUFJSZWcgc2NyYXRjaEdQUjMg
PSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAgICAgICAgICAgICAgIC8vR1BSUmVnIHNjcmF0Y2hH
UFI0ID0gcGFyYW1zLmdwU2NyYXRjaCgzKTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sx
XS5ncHIoKTsKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOwor
CisgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2Vk
UmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJP
ZlJldXNlZFJlZ2lzdGVycygpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9t
UmVwID0gWyZdIChCMzo6VmFsdWVSZXAgcmVwLCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXAuaXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OkltbTY0KHJlcC52YWx1ZSgpKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IGluIHRoaXMgZnVuY3Rpb24sIHdlIG9ubHkgcmVx
dWVzdCA2NCBiaXQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBw
cm9iYWJseSBtb3JlIHNwYWNlIGVmZmljaWVudCB0byBhbGxvdyAzMi1iaXQgdmFsdWVzLgorICAg
ICAgICAgICAgICAgICAgICBpZiAocmVwLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlcC5vZmZzZXRGcm9tRlAo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHRydWU/CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlcC5pc0dQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIVJlZ2lzdGVyU2V0KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNj
cmF0Y2hHUFI0KS5nZXQocmVwLmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwor
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25D
aGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBl
cnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNr
SGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKKworICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVXNlZFNsb3RzID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG9yaWdpbmFsU3RhY2tIZWln
aHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzUmVwID0gcGFyYW1zWzNdOworICAgICAg
ICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNS
ZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Vc2VkU2xvdHMgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycykpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhlIHJlcXVpcmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0
ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgc2NyYXRjaEdQUjEgdG8gbmV4
dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCisgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
bmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIofihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIo
c2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0UHRyKENDYWxsSGVs
cGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjEpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAg
ICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsg
aS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9
IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRlLT5ncmFwaC52
YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGls
ZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNoaWxk
MSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQjM6OlZhbHVlUmVwIG51bUFyZ3VtZW50c1RvQ29weSA9IHBhcmFtc1twYXJhbXNPZmZz
ZXQgKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAobnVt
QXJndW1lbnRzVG9Db3B5LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxvYWRPZmZzZXQgPSAoQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxp
bmVDYWxsRnJhbWUpLm9mZnNldCgpICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb29wU3RhcnQg
PSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRj
aEdQUjMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjMsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNldCksIHNjcmF0Y2hHUFI0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSNCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBzY3JhdGNoR1BSMykubGlua1RvKGxvb3BTdGFydCwgJmppdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQ
UjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJlcChwYXJhbXNb
cGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b250VGhyb3cgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdWYXJhcmdzVGhyb3dpbmdQYXRo
RGlkTm90VGhyb3cpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ZG9udFRocm93LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEFTU0VSVChjYWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3Qo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICAgICAgZ2V0VmFsdWVGcm9tUmVw
KHBhcmFtc1syXSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNj
cmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlw
ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9w
KCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5
cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
czsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBD
YWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2Fs
bDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgeworICAgICAgICAgICAgICAg
ICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAgICBmYXN0Q2Fs
bCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAg
ICAgICBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAg
ICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCisgICAgICAgICAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChjYWxsVHlwZSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxs
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKHNsb3dDYWxsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAg
ICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFj
aGFibGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKICAg
ICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CkBAIC02MTI0LDYgKzY0NjEsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiYmFkIG5vZGUg
dHlwZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZm9y
d2FyZGluZyAmJiBtX25vZGUtPmNoaWxkMygpICYmIG1fbm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUNhbGxPckNv
bnN0cnVjdFZhcmFyZ3NTcHJlYWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKIApAQCAtNjQ5Nyw2ICs2ODQwLDExIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKKyAgICAgICAgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkgJiYgbV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3By
ZWFkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQx
KCkpCkBAIC02NTg1LDYgKzY5MzMsMTQwIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KIAorICAgIExWYWx1ZSBnZXRTcHJl
YWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICB7CisgICAgICAgIEFy
Z3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKKyAg
ICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAg
ICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga25vd25MZW5ndGgg
PSAwOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwor
ICAgICAgICB9CisKKworICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9n
aWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3Bl
cmF0aW9ucy4KKyAgICAgICAgaWYgKCFudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAg
ICAgIHJldHVybiBhcmd1bWVudHNMZW5ndGgudmFsdWU7CisKKyAgICAgICAgTEJhc2ljQmxvY2sg
aXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxs
ZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVu
dHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
KSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24p
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwg
bGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgY29ycmVj
dCBoYXNoIHRyYWl0cyBmb3IgaXQgdG8gYmUgbnVsbHB0cj8KKyAgICAgICAgSGFzaE1hcDxJbmxp
bmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46
Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRT
cHJlYWRMZW5ndGhzOworCisgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG1fbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheVdpdGhTcHJlYWQt
Pm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgIEJpdFZlY3Rvciog
Yml0VmVjdG9yID0gYXJyYXlXaXRoU3ByZWFkLT5iaXRWZWN0b3IoKTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7CisgICAgICAgIFZlY3RvcjxMVmFsdWUs
IDI+IHNwcmVhZExlbmd0aHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJh
eVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZl
Y3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAg
ICAgICAgICAgICAgYXV0byBpdGVyID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5maW5kKGlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gY2FjaGVkU3ByZWFkTGVuZ3Ro
cy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQoaXRlci0+
dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBMVmFs
dWUgbGVuZ3RoID0gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxs
RnJhbWUsIGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGNhY2hlZFNwcmVhZExlbmd0aHMuYWRkKGlubGluZUNhbGxGcmFtZSwg
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQobGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICArK251bWJlck9mU3RhdGljQXJndW1lbnRzOworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVl
IGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRp
Y0FyZ3VtZW50cyk7CisgICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMp
CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIGxlbmd0aCk7CisKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9u
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICBtX291dC5h
Ym92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBw
YXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworCisgICAgICAgIExWYWx1ZSB0YXJnZXRT
dGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOworICAgICAgICBM
VmFsdWUgc3RvcmVJbmRleCA9IG1fb3V0LmNvbnN0SW50UHRyKDApOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCkt
Pm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0g
Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBjaGlsZC0+Y2hpbGQxKCktPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCkpOworICAgICAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5n
dGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxG
cmFtZSkpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydExvYWRJbmRl
eCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc3RhcnRTdG9yZUluZGV4ID0gbV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgp
OworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleEZvckVuZCA9
IG1fb3V0LmFuY2hvcihzdG9yZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5pc1plcm82NChzcHJlYWRMZW5ndGgpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGxvb3ApKTsKKworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obG9vcCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
bG9vcFN0b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAg
ICAgICAgICAgICAgTFZhbHVlIGxvYWRJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRMb2Fk
SW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBzb3Vy
Y2VTdGFydCwgbG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbG9vcFN0
b3JlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dExvYWRJbmRleCA9IG1fb3V0
LmFkZChtX291dC5jb25zdEludFB0cigxKSwgbG9hZEluZGV4KTsKKyAgICAgICAgICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKGxvYWRJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRMb2FkSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dFN0b3JlSW5kZXggPSBtX291dC5hZGQo
bV9vdXQuY29uc3RJbnRQdHIoMSksIGxvb3BTdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKGxvb3BTdG9yZUluZGV4LCBtX291dC5hbmNob3IobmV4dFN0
b3JlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsb29wU3RvcmVJbmRl
eEZvckVuZCA9IG1fb3V0LmFuY2hvcihuZXh0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KG5leHRMb2FkSW5kZXgsIHNwcmVhZExlbmd0aCksIHVu
c3VyZShsb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgc3Rv
cmVJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRTdG9yZUluZGV4Rm9yRW5kLCBsb29wU3Rv
cmVJbmRleEZvckVuZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJl
YWQsIGkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNl
SW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBzdG9yZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgc3RvcmVJbmRleCA9IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cigxKSwg
c3RvcmVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMQmFzaWNC
bG9jayB1bmRlZmluZWRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZyb21C
bG9jayBzdGFydFN0b3JlSW5kZXggPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisgICAgICAg
IExWYWx1ZSBsb29wQm91bmRWYWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3coc3RvcmVJbmRleCwg
bG9vcEJvdW5kVmFsdWUpLAorICAgICAgICAgICAgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1
cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyh1bmRlZmluZWRMb29wLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUg
bG9vcFN0b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAg
ICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSksCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBsb29wU3RvcmVJbmRleCkpOworICAgICAgICBM
VmFsdWUgbmV4dEluZGV4ID0gbV9vdXQuYWRkKGxvb3BTdG9yZUluZGV4LCBtX291dC5jb25zdElu
dFB0cigxKSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkobG9vcFN0b3JlSW5kZXgs
IG1fb3V0LmFuY2hvcihuZXh0SW5kZXgpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQuYmVsb3cobmV4dEluZGV4LCBsb29wQm91bmRWYWx1ZSksIHVuc3VyZSh1bmRl
ZmluZWRMb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUp1
bXAoKQogICAgIHsKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJs
b2NrKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJK
U0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIK
IApAQCAtODQsNiArODUsOCBAQCBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QCiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNs
b25lZEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAg
IC8vIFRob3NlIGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0ZXJpYWxpemVP
YmplY3RJbk9TUgogICAgICAgICBicmVhazsKIApAQCAtMzg4LDE0ICszOTEsODYgQEAgZXh0ZXJu
ICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIEFTU0VS
VChmb3VuZCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLQogICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwogICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQogICAgIH0KKworICAgIGNhc2UgUGhhbnRvbVNwcmVhZDogeworICAgICAgICBkYXRhTG9n
TG4oIlBoYW50b20gc3ByZWFkIik7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCku
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJv
cGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlm
IChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBTcHJlYWRQTG9jKSB7CisgICAgICAgICAg
ICAgICAgYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0p
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CisKKyAgICAgICAgLy8gRklYTUU6IG1ha2Ugc3Vy
ZSB0aGUgZ2V0RGlyZWN0SW5kZXggaGVyZSBpcyBzb3VuZCEKKyAgICAgICAgSlNGaXhlZEFycmF5
KiBmaXhlZEFycmF5ID0gSlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkoZXhlYywgdm0sIGFy
cmF5KTsKKyAgICAgICAgcmV0dXJuIGZpeGVkQXJyYXk7CisgICAgfQorCisgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgIGRhdGFMb2dMbigiUGhhbnRvbSBuZXcg
YXJyYXkgd2l0aCBzcHJlYWQhXG4iKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBi
YXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKAorICAgICAgICAg
ICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3Vz
KTsKKworICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSAwOworICAgICAgICB1bnNpZ25lZCBu
dW1Qcm9wZXJ0aWVzID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0
aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0
UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtp
XTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJh
eVdpdGhTcHJlYWRBcmd1bWVudFBMb2MpIHsKKyAgICAgICAgICAgICAgICArK251bVByb3BlcnRp
ZXM7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh2YWx1
ZXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChKU0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBq
c0R5bmFtaWNDYXN0PEpTRml4ZWRBcnJheSo+KHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
YXJyYXlTaXplICs9IGZpeGVkQXJyYXktPnNpemUoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGFycmF5U2l6ZSArPSAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworCisgICAgICAgIFZlY3RvcjxKU1ZhbHVlLCA4PiBhcmd1bWVudHM7CisgICAg
ICAgIGFyZ3VtZW50cy5ncm93KG51bVByb3BlcnRpZXMpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0
aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24o
KS5raW5kKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jKSB7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpIDwgbnVt
UHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzW3Byb3BlcnR5LmxvY2F0aW9u
KCkuaW5mbygpXSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
dW5zaWduZWQgYXJyYXlJbmRleCA9IDA7CisgICAgICAgIGZvciAoSlNWYWx1ZSB2YWx1ZSA6IGFy
Z3VtZW50cykgeworICAgICAgICAgICAgaWYgKEpTRml4ZWRBcnJheSogZml4ZWRBcnJheSA9IGpz
RHluYW1pY0Nhc3Q8SlNGaXhlZEFycmF5Kj4odmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpeGVkQXJyYXktPnNpemUoKTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChmaXhlZEFycmF5LT5nZXQoaSkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwgZml4ZWRBcnJheS0+
Z2V0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgKythcnJheUluZGV4OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5v
dCBzcHJlYWRpbmcuCisgICAgICAgICAgICAgICAgcmVzdWx0LT5pbml0aWFsaXplSW5kZXgodm0s
IGFycmF5SW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICArK2FycmF5SW5kZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwog
ICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2V0dXBWYXJhcmdzRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZv
aWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKICAgICAgICAgaml0LnN1YjMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGZpcnN0VmFyQXJnT2Zmc2V0KSwgc2NyYXRjaEdQ
UjEpOwogICAgICAgICBlbmRWYXJBcmdzLmxpbmsoJmppdCk7CiAgICAgfQotICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaEdQUjEsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEFyZ3VtZW50cyArIDEpKSk7CisgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOwogICAg
IAogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgdHJ1ZSwgbnVtVXNl
ZFNsb3RzR1BSLCBzY3JhdGNoR1BSMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRml4ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRml4ZWRBcnJheS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIC8vIFdlIG1heSBzdGlsbCBjYWxs
IGludG8gdGhpcyBmdW5jdGlvbiB3aGVuICFnbG9iYWxPYmplY3QtPmlzQXJyYXlJdGVyYXRvclBy
b3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSwKICAgICAgICAgICAgICAgICAvLyBob3dldmVy
LCBpZiB3ZSBkbyB0aGF0LCB3ZSBlbnN1cmUgd2UncmUgY2FsbGluZyBpbiB3aXRoIGFuIGFycmF5
IHdpdGggYWxsIHNlbGYgcHJvcGVydGllcyBiZXR3ZWVuCiAgICAgICAgICAgICAgICAgLy8gWzAs
IGxlbmd0aCkuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5LT5nbG9iYWxPYmplY3QoKS0+
aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKTsKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIG1heSBhbHNvIGNhbGwgaW50byB0aGlz
IGR1cmluZyBPU1IgZXhpdCB0byBtYXRlcmlhbGl6ZSBhIHBoYW50b20gZml4ZWQgYXJyYXkuCisg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGJlIGNyZWF0aW5nIGEgZml4ZWQgYXJyYXkgZHVyaW5n
IE9TUiBleGl0IGV2ZW4gYWZ0ZXIgdGhlIGl0ZXJhdG9yIHByb3RvY29sIGNoYW5nZWQuCisgICAg
ICAgICAgICAgICAgLy8gQnV0LCB3aGVuIHRoZSBwaGFudG9tIHdvdWxkIGhhdmUgbG9naWNhbGx5
IGJlZW4gY3JlYXRlZCwgdGhlIHByb3RvY29sIGhhZG4ndCBiZWVuCisgICAgICAgICAgICAgICAg
Ly8gY2hhbmdlZC4gVGhlcmVmb3JlLCBpdCBpcyBzb3VuZCB0byBhc3N1bWUgZW1wdHkgaW5kaWNl
cyBhcmUganNVbmRlZmluZWQoKS4KICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIG51bGxwdHIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295319</attachid>
            <date>2016-11-21 19:20:00 -0800</date>
            <delta_ts>2016-11-27 16:50:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>111766</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy9jYWxsLXZhcmFyZ3Mtc3ByZWFkLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtID0gIiIpIHsKKyAgICBpZiAoIWIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydDogIiArIG0pOworfQorbm9Jbmxp
bmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsK
K30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0
IHggPSBiYXIoLi4uYXJncywgNDIsIC4uLmFyZ3MpOyAKKyAgICByZXR1cm4geDsKK30KK25vSW5s
aW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBy
ID0gZm9vKGksIGkrMSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7Cisg
ICAgYXNzZXJ0KHJbMF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzFdID09PSBpKzIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSsz
LCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyLCBKU09OLnN0cmlu
Z2lmeShyKSk7CisgICAgYXNzZXJ0KHJbNF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOwor
ICAgIGFzc2VydChyWzVdID09PSBpKzIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQo
cls2XSA9PT0gaSszLCBKU09OLnN0cmluZ2lmeShyKSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFkLWNvbnZlcnQtdG8tc3RhdGlj
LWxvYWRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1u
ZXctYXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5ldy1hcnJheS13aXRoLXNw
cmVhZC1jb252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXoo
Li4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3Mp
IHsKKyAgICByZXR1cm4gYmF6KC4uLmFyZ3MsIDQyLCAuLi5hcmdzKTsKK30KK2Z1bmN0aW9uIGZv
byhhLCBiLCBjLCBkKSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBjLCBkKTsKK30KK25vSW5saW5l
KGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByID0g
Zm9vKGksIGkrMSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAg
YXNzZXJ0KHJbMF0gPT09IGkrMSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMik7CisgICAgYXNz
ZXJ0KHJbMl0gPT09IGkrMyk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyKTsKKyAgICBhc3NlcnQo
cls0XSA9PT0gaSsxKTsKKyAgICBhc3NlcnQocls1XSA9PT0gaSsyKTsKKyAgICBhc3NlcnQocls2
XSA9PT0gaSszKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVh
ZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFkLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQt
YW5kLXBoYW50b20tc3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL25l
dy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFk
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7
CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBs
ZXQgciA9IFsuLi5hLCAuLi5hcmdzXTsKKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7
CisKK2Z1bmN0aW9uIGVzY2FwZShhKSB7IHJldHVybiBhOyB9Citub0lubGluZShlc2NhcGUpOwor
ZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3MpIHsKKyAgICBlc2NhcGUoYXJncyk7CisgICAgbGV0IHIg
PSBbLi4uYSwgLi4uYXJnc107CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBmb3IgKGxldCBmIG9mIFtmb28s
IGJhcl0pIHsKKyAgICAgICAgbGV0IG8gPSB7fTsKKyAgICAgICAgbGV0IGEgPSBbbywgMjBdOwor
ICAgICAgICBsZXQgciA9IGYoYSwgMzAsIDQwKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09
PSA0KTsKKyAgICAgICAgYXNzZXJ0KHJbMF0gPT09IG8pOworICAgICAgICBhc3NlcnQoclsxXSA9
PT0gMjApOworICAgICAgICBhc3NlcnQoclsyXSA9PT0gMzApOworICAgICAgICBhc3NlcnQoclsz
XSA9PT0gNDApOworICAgIH0KK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3LWFy
cmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7
CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24hIik7
Cit9Citub0lubGluZShhc3NlcnQpOworCitsZXQgdmFsdWUgPSBmYWxzZTsKKworZnVuY3Rpb24g
YmF6KHgpIHsKKyAgICBpZiAodHlwZW9mIHggIT09ICJudW1iZXIiKSB7CisgICAgICAgIHZhbHVl
ID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9Citub0lubGluZShiYXopOworCitmdW5j
dGlvbiBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorCitsZXQgZGlkRWZmZWN0
cyA9IGZhbHNlOyAKK2Z1bmN0aW9uIGVmZmVjdHMoKSB7IGRpZEVmZmVjdHMgPSB0cnVlOyB9Citu
b0lubGluZShlZmZlY3RzKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQg
dGhlQXJncyA9IFsuLi5hcmdzLCBhLCAuLi5hcmdzXTsKKyAgICBiYXooYSk7CisgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgbGV0IHIgPSBiYXIuYXBwbHko
bnVsbCwgdGhlQXJncyk7CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgZm9vKGksIGkrMSk7CisgICAgYXNz
ZXJ0KCFkaWRFZmZlY3RzKTsKK30KK2xldCBvID0ge307CitsZXQgW2EsIGIsIGNdID0gZm9vKG8s
IDIwKTsKK2Fzc2VydChhID09PSAyMCk7Cithc3NlcnQoYiA9PT0gbyk7Cithc3NlcnQoYyA9PT0g
MjApOworYXNzZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtZm9yd2FyZC12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Bo
YW50b20tc3ByZWFkLWZvcndhcmQtdmFyYXJncy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTcgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIsIG09
IiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
bjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7Cisg
ICAgZnVuY3Rpb24gYmFyKGEsIGIsIGMsIGQpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBk
XTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJh
ciguLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBsZXQgW2EsIGIsIGMsIGRdID0gZm9vKGks
IGkrMSwgaSsyLCBpKzMpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2Vy
dChiID09PSBpKzEpOworICAgICAgICBhc3NlcnQoYyA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0
KGQgPT09IGkrMykgOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rp
b24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0
aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4u
YXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7
CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgICAgIGxldCBbYSwgYiwgYywg
ZCwgZSwgZiwgZ10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IGkrMik7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgICAgICBhc3Nl
cnQoZCA9PT0gaSk7CisgICAgICAgIGFzc2VydChlID09PSBpKzEpOworICAgICAgICBhc3NlcnQo
ZiA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0KGcgPT09IGkrMyk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1
cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJheiguLi5hcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIC4uLmFy
Z3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKysp
IHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2Vy
dChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBh
c3NlcnQoYSA9PT0gaSszKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkpOworICAgICAgICBhc3Nl
cnQoYyA9PT0gaSszKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0
aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5j
dGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0K
KyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAg
ICAgICAgYXNzZXJ0KHJbMF0gPT09IGkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDUoKSB7
CisgICAgZnVuY3Rpb24gYmF6KGEsIGIsIGMpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjXTsK
KyAgICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheigu
Li5hcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsK
KyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9J
bmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAg
ICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxl
bmd0aCA9PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQo
YSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3Nl
cnQoYyA9PT0gdW5kZWZpbmVkKTsKKyAgICB9Cit9CisKK3Rlc3QxKCk7Cit0ZXN0MigpOwordGVz
dDMoKTsKK3Rlc3Q0KCk7Cit0ZXN0NSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtb3NyLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1z
cHJlYWQtb3NyLWV4aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRv
bS1zcHJlYWQtb3NyLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIGFzc2VydGlvbiEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2xldCB2YWx1ZSA9IGZh
bHNlOworCitmdW5jdGlvbiBiYXooeCkgeworICAgIGlmICh0eXBlb2YgeCAhPT0gIm51bWJlciIp
IHsKKyAgICAgICAgdmFsdWUgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4geDsKK30KK25vSW5s
aW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFyZ3M7Cit9
CisKK2xldCBkaWRFZmZlY3RzID0gZmFsc2U7IAorZnVuY3Rpb24gZWZmZWN0cygpIHsgZGlkRWZm
ZWN0cyA9IHRydWU7IH0KK25vSW5saW5lKGVmZmVjdHMpOworCitmdW5jdGlvbiBmb28oYSwgLi4u
YXJncykgeworICAgIGxldCByID0gYmFyKC4uLmFyZ3MsIGJheihhKSwgLi4uYXJncyk7CisgICAg
aWYgKHZhbHVlKSB7CisgICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9
Citub0lubGluZShmb28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Cisg
ICAgZm9vKGksIGkrMSk7CisgICAgYXNzZXJ0KCFkaWRFZmZlY3RzKTsKK30KK2xldCBvID0ge307
CitsZXQgW2EsIGIsIGNdID0gZm9vKG8sIDIwKTsKK2Fzc2VydChhID09PSAyMCk7Cithc3NlcnQo
YiA9PT0gbyk7Cithc3NlcnQoYyA9PT0gMjApOworYXNzZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtY2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1j
YWxsLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZl
cnQtdG8tc3RhdGljLWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsK
KyAgICByZXR1cm4gYXJnczsKK30KK25vSW5saW5lKGJheik7CitmdW5jdGlvbiBiYXIoYSwgLi4u
YXJncykgeworICAgIHJldHVybiBiYXooLi4uYXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rp
b24gZm9vKGEsIGIsIGMsIGQpIHsKKyAgICByZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9J
bmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0
IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsK
KyAgICBhc3NlcnQoclswXSA9PT0gaSsxKTsKKyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAg
ICBhc3NlcnQoclsyXSA9PT0gaSszKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFz
c2VydChyWzRdID09PSBpKzEpOworICAgIGFzc2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2Vy
dChyWzZdID09PSBpKzMpOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQt
dmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wtMi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC12YXJhcmdzLXJlc3QtcGFy
YW1ldGVyLWNoYW5nZS1pdGVyYXRvci1wcm90b2NvbC0yLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdl
LWl0ZXJhdG9yLXByb3RvY29sLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
ZnVuY3Rpb24gYXNzZXJ0KGIsIG09IiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKwor
bGV0IGNhbGxlZCA9IGZhbHNlOworZnVuY3Rpb24gYmF6KGMpIHsKKyAgICBpZiAoYykgeworICAg
ICAgICBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgYXNzZXJ0KGZhbHNlLCAic2hvdWxkIG5vdCBiZSBjYWxsZWQhIik7CisgICAgICAg
ICAgICBsZXQgaSA9IDA7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIG5l
eHQoKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgInNob3VsZCBub3QgYmUg
Y2FsbGVkISIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0K
KyAgICB9Cit9Citub0lubGluZShiYXopOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAg
IHJldHVybiBhcmdzOworfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGMsIC4uLmFy
Z3MpIHsKKyAgICBhcmdzID0gWy4uLmFyZ3NdOworICAgIGJheihjKTsKKyAgICByZXR1cm4gYmFy
LmFwcGx5KG51bGwsIGFyZ3MpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gdGVzdChj
KSB7CisgICAgY29uc3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CisgICAgbGV0IHIgPSBmb28o
YywgLi4uYXJncyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSByLmxlbmd0aCk7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCByLmxlbmd0aDsgaSsrKQorICAgICAgICBhc3NlcnQocltpXSA9PT0g
YXJnc1tpXSk7Cit9Citub0lubGluZSh0ZXN0KTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7
IGkrKykgeworICAgIHRlc3QoZmFsc2UpOworfQordGVzdCh0cnVlKTsKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJh
dG9yLXByb3RvY29sLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3
YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVz
dC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KK25vSW5saW5lKGFzc2VydCk7
CisKK2xldCBjYWxsZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIGJheihjKSB7CisgICAgaWYgKGMpIHsK
KyAgICAgICAgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGxldCBpID0gMDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgbmV4dCgpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA9PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ZG9uZTog
dHJ1ZX07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IDQwLCBkb25lOiBmYWxz
ZX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0K
K30KK25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJu
IGFyZ3M7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYywgLi4uYXJncykgewor
ICAgIGJheihjKTsKKyAgICByZXR1cm4gYmFyKC4uLmFyZ3MpOworfQorbm9JbmxpbmUoZm9vKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgY29uc3QgYyA9IGZhbHNl
OworICAgIGNvbnN0IGFyZ3MgPSBbe30sIDIwLCBbXSwgNDVdOworICAgIGxldCByID0gZm9vKGMs
IC4uLmFyZ3MpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gci5sZW5ndGgpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykKKyAgICAgICAgYXNzZXJ0KHJbaV0gPT09IGFy
Z3NbaV0pOworfQorCitjb25zdCBjID0gdHJ1ZTsKK2NvbnN0IGFyZ3MgPSBbe30sIDIwLCBbXSwg
NDVdOworbGV0IHIgPSBmb28oYywgLi4uYXJncyk7Cithc3NlcnQoci5sZW5ndGggPT09IDEpOwor
YXNzZXJ0KHJbMF0gPT09IDQwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSw3ICsxOTI5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwodmFsdWUtPmNoaWxkKDApKQog
ICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQpIHsKICAgICAg
ICAgICAgIGlubmVyQWRkID0gdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgb2Zmc2V0ID0g
dmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgcHVibGljOgogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIGFuZCBzdGF0ZXMgdGhhdAogICAgICAgICAv
LyB0aGUgcmVnaXN0ZXIgaXMgdXNlZCBsYXRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlZ2lzdGVy
IGlzIHVzZWQgYWZ0ZXIgdGhlIHJlc3VsdAogICAgICAgICAvLyBpcyBkZWZpbmVkIChpLmUsIHRo
ZSByZXN1bHQgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGlzIGFzIGFuIGlucHV0KS4KLSAgICAgICAg
Ly8gSXQncyBub3QgdmFsaWQgZm9yIHRoaXMgdG8gYmUgdXNlZCBhcyBhIHJlc3VsdCBraW5kLgor
ICAgICAgICAvLyBJdCdzIG5vdCB2YWxpZCBvdXRwdXQgcmVwcmVzZW50YXRpb24uCiAgICAgICAg
IExhdGVSZWdpc3RlciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxp
ZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzcsNiArMjc3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxkIGNoZWNr
IGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIHR1
cm4KICAgICAgICAgLy8gaXRzZWxmIGludG8gYSBzdHJhaWdodC1saW5lIHNlcXVlbmNlIG9mIEdl
dFN0YWNrL1B1dFN0YWNrLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQzMDcxCisKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGJlIG1vcmUg
YWNjdXJhdGUgZm9yIEZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCBoZXJlLgogICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAg
bV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQz
Mk9ubHkpOwpAQCAtMTk3NCw2ICsxOTc2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNl
IFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0
cnVlKTsgLy8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWlt
cyB0byByZXR1cm4gYm90dG9tLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
MDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAg
ICAgLy8gSnVzdCBmaW5kcyBub2RlcyB0aGF0IHdlIGtub3cgaG93IHRvIHdvcmsgd2l0aC4KICAg
ICB2b2lkIGlkZW50aWZ5Q2FuZGlkYXRlcygpCiAgICAgewotICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1
bWVudHM6CkBAIC0xMDksNiArMTA5LDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdh
dGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNoZWNrIEFy
cmF5VXNlIGhlcmUgYmVjYXVzZSBBcnJheVVzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRlcmF0b3IK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3RvY29sIGZvciBBcnJheXMgaXMgbm9uLW9i
c2VydmFibGUgYnkgdXNlciBjb2RlIChlLmcsIGl0IGhhc24ndAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYmVlbiBjaGFuZ2VkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQXJyYXlVc2UgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkg
PT0gQ3JlYXRlUmVzdCAmJiBtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2Rl
LT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cg
Zm9yIFNwcmVhZHMgdG8gYmUgb2YgcmVzdCBub2RlcyBmb3Igbm93LgorICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc09LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPSyA9IGNo
aWxkLT5vcCgpID09IFNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gQ3JlYXRlUmVz
dCAmJiBtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPSykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9j
YW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHRoaXMgaWYgaXQgd2Fzbid0IGZvciB0
aGUgZmFjdCB0aGF0IHNjb3BlZCBhcmd1bWVudHMgYXJlCkBAIC0xMjYsNiArMTU4LDYyIEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQ2FuZGlk
YXRlczogIiwgbGlzdER1bXAobV9jYW5kaWRhdGVzKSwgIlxuIik7CiAgICAgfQorCisgICAgYm9v
bCBpc1N0aWxsVmFsaWRDYW5kaWRhdGUoTm9kZSogY2FuZGlkYXRlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjYW5kaWRhdGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAg
ICAgICByZXR1cm4gbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKKworICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAg
Qml0VmVjdG9yKiBiaXRWZWN0b3IgPSBjYW5kaWRhdGUtPmJpdFZlY3RvcigpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
Y2FuZGlkYXRlLCBpKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlSW52YWxp
ZENhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7
CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8Tm9kZSos
IDE+IHRvUmVtb3ZlOworCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IG1fY2Fu
ZGlkYXRlcykgeworICAgICAgICAgICAgICAgIGlmICghaXNTdGlsbFZhbGlkQ2FuZGlkYXRlKGNh
bmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjYW5kaWRhdGUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9SZW1vdmUuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogdG9SZW1vdmUpCisgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5yZW1v
dmUobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cisg
ICAgfQorCisgICAgdm9pZCB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoTm9kZSogbm9kZSwg
Tm9kZSogc291cmNlID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1f
Y2FuZGlkYXRlcy5yZW1vdmUobm9kZSk7CisgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2Ug
JiYgc291cmNlKQorICAgICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAi
LCBub2RlLCAiIGJlY2F1c2UgaXQgZXNjYXBlcyBmcm9tOiAiLCBzb3VyY2UsICJcbiIpOworCisg
ICAgICAgIGlmIChyZW1vdmVkKQorICAgICAgICAgICAgcmVtb3ZlSW52YWxpZENhbmRpZGF0ZXMo
KTsKKyAgICB9CiAgICAgCiAgICAgLy8gTG9vayBmb3IgZXNjYXBpbmcgc2l0ZXMsIGFuZCByZW1v
dmUgZnJvbSB0aGUgY2FuZGlkYXRlcyBzZXQgaWYgd2Ugc2VlIGFuIGVzY2FwZS4KICAgICB2b2lk
IGVsaW1pbmF0ZUNhbmRpZGF0ZXNUaGF0RXNjYXBlKCkKQEAgLTEzMywxMiArMjIxLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgIGF1dG8gZXNjYXBlID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUqIHNvdXJj
ZSkgewogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1fY2FuZGlkYXRlcy5yZW1vdmUoZWRnZS5ub2RlKCkp
OwotICAgICAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIsIGVkZ2Uubm9kZSgpLCAiIGJlY2F1c2Ug
aXQgZXNjYXBlcyBmcm9tOiAiLCBzb3VyY2UsICJcbiIpOworICAgICAgICAgICAgdHJhbnNpdGl2
ZWx5UmVtb3ZlQ2FuZGlkYXRlKGVkZ2Uubm9kZSgpLCBzb3VyY2UpOwogICAgICAgICB9OwogICAg
ICAgICAKICAgICAgICAgYXV0byBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlID0gWyZdIChBcnJheU1v
ZGUgbW9kZSwgRWRnZSBlZGdlLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBjb25zaWRlciB0aGlzIGNhbGxlZCBmcm9tIENoZWNrQXJyYXkgYW5kIHRoZSBlZGdlIGJlaW5n
IGEgTmV3QXJyYXlXaXRoU3ByZWFkIG5vZGUuCiAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUudHlw
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlRGlyZWN0QXJndW1lbnRzKQpAQCAtMTg3
LDYgKzI3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH07CisKKyAgICAgICAgcmVtb3ZlSW52YWxpZENhbmRpZGF0ZXMoKTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
ewpAQCAtMjAxLDExICsyOTAsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAg
ICAgICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5j
aGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZUJhc2VkT25BcnJheU1v
ZGUobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNoaWxkMSgpLCBub2RlKTsgLy8gRklYTUU6IFRo
aXMgd291bGQgbm90IGJlIGhhcmQgdG8gc3VwcG9ydC4KICAgICAgICAgICAgICAgICAgICAgZXNj
YXBlKG5vZGUtPmNoaWxkMigpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6
IHsKKyAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRW
ZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1dhdGNoaW5nSGF2aW5nQUJhZFRp
bWVXYXRjaHBvaW50ID0gbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KG5vZGUpOyAKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBj
aGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGRvbnRFc2NhcGU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RXNjYXBlID0g
Y2hpbGQtPm9wKCkgPT0gU3ByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IGNoaWxkLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQXJyYXlVc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZVJlc3QKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1l
V2F0Y2hwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbnRFc2NhcGUgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkb250RXNjYXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZShjaGlsZCwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIFNw
cmVhZDogeworICAgICAgICAgICAgICAgICAgICBib29sIGlzT0sgPSBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gQXJyYXlVc2UgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQ3JlYXRlUmVz
dDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0Fy
cmF5V2l0aFNwcmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGls
ZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtMjE0LDYgKzMzNCw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUp
OwogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCktPmZpcnN0VmFyQXJn
T2Zmc2V0ICYmIG5vZGUtPmNoaWxkMygpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKSwgbm9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVjazoKQEAg
LTI2Myw2ICszODUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1l
dGVyU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhDb250aWd1b3Vz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzkwLDcgKzUxNiw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gYmxvY2stPnNpemUoKSAmJiBj
YW5kaWRhdGUtPm93bmVyICE9IGJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGlu
ZyBjYW5kaWRhdGU6ICIsIGNhbmRpZGF0ZSwgIiBiZWNhdXNlIGl0IGlzIGNsb2JiZXJlZCBieTog
IiwgYmxvY2stPmF0KG5vZGVJbmRleCksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9jYW5kaWRhdGVzLnJlbW92ZShjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC00MTcsNyArNTQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5k
aWRhdGU6ICIsIGNhbmRpZGF0ZSwgIiBiZWNhdXNlIGl0IGlzIGNsb2JiZXJlZCBieSAiLCBibG9j
ay0+YXQobm9kZUluZGV4KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
YW5kaWRhdGVzLnJlbW92ZShjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtNDYwLDkgKzU4NiwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgYXJlIGd1YXJhbnRl
ZWQgdG8gc2VlIGEgZGVmIGJlZm9yZSBhIHVzZS4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
cmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHRyYW5zZm9ybWVkIHRoZSBhbGxvY2F0aW9u
IGJlZm9yZSB0aGUgdXNlCiAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFuIGFsbG9jYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwg
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGNh
bmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGNhbmRpZGF0ZS0+b3Ao
KSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwRnJvbUNhbmRpZGF0ZSA9IFsmXSAoTm9kZSogY2FuZGlkYXRlKSAtPiB1bnNp
Z25lZCB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2NhbmRpZGF0ZXMuY29udGFpbnMo
Y2FuZGlkYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlk
YXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5k
aWRhdGUsIGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKSAtIDEpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwcmVhZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlc3QgPSBzcHJlYWQtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3QtPm9w
KCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3QtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9OwogICAg
ICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKQEAgLTQ4OCw2ICs2MzEsMjAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21DbG9uZWRBcmd1bWVudHMpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ByZWFkOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhT
cHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czogewog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CkBAIC01OTksOTQgKzc1NiwxODMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IC8vIExvYWRWYXJhcmdzIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0
T0spOworICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAg
ICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+b2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9T
a2lwOwogCi0gICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBbJl0g
KHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRh
a2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQ
dXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFy
Z3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUsIEtub3duSW50MzJVc2UpKTsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHN0b3Jl
VmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9yZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0
ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSog
ZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNz
RGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0
T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBF
ZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBj
YW5kaWRhdGUtPmJpdFZlY3RvcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KGNhbmRpZGF0ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9w
KCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQ29udmVydFRvU3Rh
dGljTG9hZFN0b3JlcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg
JiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjYW5Db252ZXJ0VG9TdGF0aWNMb2FkU3RvcmVzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSAxOyAvLyB8
dGhpc3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlk
YXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyT2ZTcHJlYWRBcmd1bWVudHMgPSBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNwcmVhZEFyZ3Vt
ZW50cyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICs9IG51bWJlck9mU3ByZWFkQXJndW1lbnRzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+
IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEt
PmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJn
c0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFy
Z3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25z
dGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5v
cmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzTm9kZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
Tm9kZSwgS25vd25JbnQzMlVzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJn
c0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRlICJ0
aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQg
LSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4
ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVu
dCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUlu
ZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxv
YWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4
aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBi
dXQgd2Ugd2lsbCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jl
cywgd2UnbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVn
ZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRh
dG9yeU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUg
b3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRv
IHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4o
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5vcCgp
ID09IFBoYW50b21TcHJlYWQgJiYgY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVh
dGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
IGxvYWRJbmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2FkSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5h
ZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVl
KHZhbHVlLCBzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RvcmVJbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0b3JlSW5kZXggPD0gbGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmlu
c2VydENvbnN0YW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh1bmRlZmluZWQsIHN0b3JlSW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1
dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcEZyb21D
YW5kaWRhdGUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRh
LT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NE
YXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPj0gMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9yZUFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3Vy
IGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJl
YXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGlt
aXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBzdG9yZUluZGV4IDwgbGltaXQ7
ICsrc3RvcmVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxv
YWQgaXQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxl
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsg
dmFyYXJnc0RhdGEtPm9mZnNldDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcs
IEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhF
eGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1h
bmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3aWxsIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYg
d2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIGRlZ2VuZXJhdGUgSVI6IHdlJ2xsIGhhdmUgR2V0U3RhY2tz
IG9mIHNvbWV0aGluZyB0aGF0IGRpZG4ndAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDc0MzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHZhbHVlLCBzdG9yZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3Zl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sg
PSBjYW5FeGl0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC02OTgsMjcgKzk0NCw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUt
PmNoaWxkMygpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRB
bGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+
b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgp
OwotICAgICAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9k
ZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5m
aXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKIAotICAgICAgICAg
ICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZpcnN0VmFy
QXJnT2Zmc2V0OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9y
aWdpbiwgT3BJbmZvKGRhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRUb1N0YXRpY0FyZ3VtZW50Q291bnRDYWxsID0gWyZdIChjb25z
dCBWZWN0b3I8Tm9kZSo+JiBhcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uYXBwZW5kKG5vZGUtPmNoaWxkMigpKTsKQEAgLTc0MywyNSArOTcwLDk3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxp
c3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRUb0ZvcndhcmRzQ2FsbCA9IFsmXSAoKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbEZvcndhcmRWYXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJn
czoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENh
bGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3Mp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuVHJhbnNmb3JtVG9TdGF0aWNB
cmd1bWVudENvdW50Q2FsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0
b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGls
ZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuVHJh
bnNmb3JtVG9TdGF0aWNBcmd1bWVudENvdW50Q2FsbCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5UcmFuc2Zvcm1Ub1N0YXRp
Y0FyZ3VtZW50Q291bnRDYWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PE5vZGUqPiBhcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGls
ZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5jaGls
ZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5j
aGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
Y2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0Rh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
R2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNoaWxk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1bWVudENvdW50Q2FsbChhcmd1bWVudHMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydFRvRm9yd2FyZHNDYWxsKCk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9k
ZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0
YS0+Zmlyc3RWYXJBcmdPZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2Fu
ZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1l
bnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyB2
YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLCBPcEluZm8o
ZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1N0YXRpY0FyZ3VtZW50Q291bnRDYWxsKGFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9Gb3J3YXJkc0NhbGwoKTsKICAgICAgICAgICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw2ICsxMDksMTAgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5
TGVuZ3RoKAogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAg
IH0KIAorICAgIC8vIEZJWE1FOiBoYW5kbGUgTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIFJFTEVB
U0VfQVNTRVJUKGFyZ3VtZW50cy0+b3AoKSAhPSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgIT0gTmV3QXJyYXlXaXRoU3ByZWFk
KTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3
OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
d3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNl
IFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAvLyBFdmVuIHRob3VnaCBpdCdzIHBoYW50b20s
IGl0IHN0aWxsIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBvbmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0
aCBhbm90aGVyLgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
Nyw2ICsyNDcsOCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgogICAgIGNhc2UgUGhhbnRv
bUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDM4LDYgKzE0MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3Rp
dmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21D
bG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTMsNyArMTUzLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgZm9yIChOb2Rl
KiBub2RlIDogY29tYmluZWRMaXZlbmVzcy5saXZlQXRUYWlsW2Jsb2NrXSkKICAgICAgICAgZnVu
Y3RvcihibG9jay0+c2l6ZSgpLCBub2RlKTsKICAgICAKLSAgICBMb2NhbE9TUkF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IgbG9jYWxBdmFpbGFiaWxpdHk7CisgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlD
YWxjdWxhdG9yIGxvY2FsQXZhaWxhYmlsaXR5KGdyYXBoKTsKICAgICBsb2NhbEF2YWlsYWJpbGl0
eS5iZWdpbkJsb2NrKGJsb2NrKTsKICAgICAvLyBTdGFydCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJl
Y2F1c2UgdGhlIGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25seSBpbnNwZWN0IG5vZGVzIGZyb20g
dGhlIHN0YXJ0IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRvIG5vZGVJbmRleCAoZXhjbHVzaXZl
KSwgc28gaWYgbm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUgZnVuY3RvciBoYXMgbm90aGluZyB0
byBkby4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDU5LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50czoKLSAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgICAgIC8vIFRo
ZXNlIHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZp
dCBvZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291
bGRuJ3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUu
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3Myw3ICs0NzIsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25l
ZEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DcmVhdGVSZXN0KSB7CisgICAgICAgIGlmIChv
cCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJn
dW1lbnRzKSB7CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2
YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAog
ICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0
aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIEZyb3plblZh
bHVlOjplbXB0eVNpbmdsZXRvbigpOwpAQCAtMTA2Myw3ICsxMDYyLDcgQEAgcHVibGljOgogCiAg
ICAgQml0VmVjdG9yKiBiaXRWZWN0b3IoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0g
TmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgQVNTRVJUKG9wKCkgPT0gTmV3QXJyYXlXaXRo
U3ByZWFkIHx8IG9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxCaXRWZWN0b3IqPigpOwogICAgIH0KIApAQCAtMTc1Niw2ICsxNzU1
LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNh
c2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVz
dDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAg
ICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dl
bmVyYXRvckZ1bmN0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNiArMzQ0LDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKENyZWF0ZURpcmVjdEFyZ3VtZW50cywgTm9k
ZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21DcmVhdGVSZXN0LCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbVNwcmVh
ZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21O
ZXdBcnJheVdpdGhTcHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncykgXAogICAgIG1hY3JvKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwK
ICAgICBtYWNybyhQaGFudG9tQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIw
ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgog
CiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNz
aW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAgCi0gICAgICAgIExvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yOworICAgICAgICBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcihtX2dyYXBoKTsKICAgICAgICAgYm9vbCBj
aGFuZ2VkOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CkBAIC0x
MDUsNyArMTA1LDggQEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcAog
ICAgIHJldHVybiBydW5QaGFzZTxPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlPihncmFwaCk7
CiB9CiAKLUxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6TG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yKCkKK0xvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6TG9jYWxPU1JB
dmFpbGFiaWxpdHlDYWxjdWxhdG9yKEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgp
CiB7CiB9CiAKQEAgLTE2NCw3ICsxNjUsNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAK
KyAgICAKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbURpcmVj
dEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6IHsKQEAgLTIwOCw2
ICsyMDksMTcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICBi
cmVhazsKICAgICB9CisKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3ByZWFkUExvYywgbm9kZSks
IEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS5ub2RlKCk7CisgICAgICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKE5ld0Fy
cmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYywgbm9kZSwgaSksIEF2YWlsYWJpbGl0eShjaGlsZCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAyMDg2OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29sIHBlcmZvcm1PU1JB
dmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwCiAvLyBoYXZpbmcgcnVuIHRoZSBhdmFpbGFiaWxpdHkg
YW5hbHlzaXMuCiBjbGFzcyBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgewogcHVibGlj
OgotICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOworICAgIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5Mb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9jayopOwpAQCAt
NTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlTm9kZShOb2RlKik7CiAgICAg
CiAgICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxhYmlsaXR5OworICAgIEdyYXBoJiBtX2dyYXBo
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjM0LDcgKzE2MzQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhl
IHJpZ2h0IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHBy
b3ByaWF0ZQogICAgICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgbWF0ZXJpYWxpemF0aW9u
IG5vZGVzLgotICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjsKKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IobV9ncmFwaCk7CiAgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBs
YWNlbWVudHMoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBtX2hlYXAgPSBtX2hlYXBBdEhlYWRbYmxv
Y2tdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNDEgKzEwNiw2MyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcmVhZFRvcCgpCiAg
ICAgeworICAgICAgICBib29sIGlzRm9yd2FyZGluZ05vZGUgPSBmYWxzZTsKICAgICAgICAgc3dp
dGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0g
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6IHsKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKKyAgICAgICAgICAgIGlzRm9yd2FyZGluZ05vZGUgPSB0cnVlOworICAgICAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOiB7CiAKLSAgICAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFzQXJn
dW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCi0gICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOwot
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWwgfHwgbV9u
b2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGd1YXJhbnRlZXMg
dGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwgbmV2ZXIKLSAgICAgICAgICAgICAgICAvLyBy
ZWFkIGFueSBhcmd1bWVudHMgYmVsb3cgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcC4g
Rm9yIGV4YW1wbGUsIGlmIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGlzIDIsCi0gICAgICAgICAg
ICAgICAgLy8gd2Ugd2lsbCBuZXZlciByZWFkIGFyZ3VtZW50IDAgb3IgYXJndW1lbnQgMS4KLSAg
ICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fbm9kZS0+bnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gcmVhZEZy
YW1lID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBvdXRlcm1vc3QgYXJndW1l
bnRzIGFuZCBhcmd1bWVudCBjb3VudC4KKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7IGkrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkgewotICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIG91dGVybW9zdCBhcmd1bWVudHMg
YW5kIGFyZ3VtZW50IGNvdW50LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEg
KyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dy
YXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7Ci0gICAgICAgICAgICAg
ICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXNGb3J3YXJkaW5nTm9k
ZSAmJiBtX25vZGUtPmhhc0FyZ3VtZW50c0NoaWxkKCkgJiYgbV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpICYmIG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlX
aXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgTm9kZSogYXJyYXlXaXRoU3ByZWFkID0gbV9u
b2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBCaXRWZWN0b3Iq
IGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4o
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQgJiYgY2hpbGQtPmNoaWxkMSgpLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWUoaW5saW5lQ2FsbEZy
YW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIGlmIChtX25v
ZGUtPmhhc0FyZ3VtZW50c0NoaWxkKCkgJiYgbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAg
ICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxk
KCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3Ao
KSA9PSBHZXRNeUFyZ3VtZW50QnlWYWwgfHwgbV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRC
eVZhbE91dE9mQm91bmRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvZiBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBndWFyYW50ZWVzIHRoYXQgR2V0TXlBcmd1bWVudEJ5VmFs
KiB3aWxsIG5ldmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgYW55IGFyZ3VtZW50cyBi
ZWxvdyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLiBGb3IgZXhhbXBsZSwgaWYgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgaXMgMiwKKyAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2ls
bCBuZXZlciByZWFkIGFyZ3VtZW50IDAgb3IgYXJndW1lbnQgMS4KKyAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVhZEZyYW1lKGlu
bGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGkr
KykKLSAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkp
OwotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOworCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4
NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsNiArMTAxMCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhh
bnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMjA4NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw2ICsxMTQsMTQgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFBybwogICAgIGNhc2UgVmVjdG9yTGVuZ3RoUExvYzoKICAgICAgICAgb3V0LnByaW50
KCJWZWN0b3JMZW5ndGhQTG9jIik7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3ByZWFk
UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTcHJlYWRQTG9jIik7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIk5ld0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYyIpOworICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDkgQEAgZW51
bSBQcm9tb3RlZExvY2F0aW9uS2luZCB7CiAgICAgTmFtZWRQcm9wZXJ0eVBMb2MsCiAgICAgUHVi
bGljTGVuZ3RoUExvYywKICAgICBTdHJ1Y3R1cmVQTG9jLAotICAgIFZlY3Rvckxlbmd0aFBMb2MK
KyAgICBWZWN0b3JMZW5ndGhQTG9jLAorICAgIFNwcmVhZFBMb2MsCisgICAgTmV3QXJyYXlXaXRo
U3ByZWFkQXJndW1lbnRQTG9jLAogfTsKIAogY2xhc3MgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0
b3IgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNiArMzU4LDggQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVh
dGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNl
IFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
OgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2MTQsNiArNTYxNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6Cisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJ1bmV4cGVjdGVkIG5v
ZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMwLDYgKzU4MzAsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAg
Y2FzZSBHZXRTdGFjazoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCShyZXZpc2lvbiAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkxLDYgKzY5MSwzOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmNoaWxkMSgp
LT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IFBoYW50b21TcHJlYWQgb3ZlciBQaGFu
dG9tQ3JlYXRlUmVzdC4KKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbV9ncmFwaC5tX2Zv
cm0gPT0gU1NBKTsKKyAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBu
b2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgUGhhbnRvbVNw
cmVhZCBvdmVyIFBoYW50b21DcmVhdGVSZXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlKSwgY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksICFjaGlsZC0+aXNQaGFudG9tQWxsb2NhdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAg
ICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNoaWxkLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSksIGJpdFZlY3Rvci0+Z2V0KGkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBjaGlsZC0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRvVG9DaGlsZHJlbigKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAyMDg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJv
dW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1fb3V0KHN0YXRlKQog
ICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IobV9ncmFwaCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAg
ICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCiAgICAgewpAQCAtMTA4NCw2
ICsxMDg1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBo
YW50b21DcmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNh
c2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVk
QXJndW1lbnRzOgogICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9tVmFs
dWU6CkBAIC00MzA4LDYgKzQzMTEsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ncmFwaC5p
c1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG1fbm9kZSkpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0TGVuZ3RoID0gMDsKICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVj
dG9yID0gbV9ub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgIEhhc2hNYXA8SW5saW5lQ2Fs
bEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNo
LCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFk
TGVuZ3RoczsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFiaXRWZWN0b3ItPmdl
dChpKSkKICAgICAgICAgICAgICAgICAgICAgKytzdGFydExlbmd0aDsKQEAgLTQzMTgsOCArNDMy
MywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rv
ci0+Z2V0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIGkpOwotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJh
eSA9IGxvd0NlbGwodXNlKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQuYWRk
KGxlbmd0aCwgbV9vdXQubG9hZDMyKGZpeGVkQXJyYXksIG1faGVhcHMuSlNGaXhlZEFycmF5X3Np
emUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVzZS0+b3AoKSA9PSBQaGFudG9tU3ByZWFk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh1c2UtPmNoaWxkMSgp
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdXNlLT5jaGlsZDEoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdXNlLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGgg
PSBjYWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVDYWxsRnJhbWUsIFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNwcmVhZExlbmd0aEZyb21Jbmxp
bmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPSBtX291dC5hZGQobGVuZ3RoLCBzcHJlYWRMZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGZpeGVkQXJyYXkgPSBsb3dDZWxsKHVzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5sb2FkMzIoZml4ZWRBcnJheSwgbV9oZWFwcy5K
U0ZpeGVkQXJyYXlfc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogCkBAIC00MzMyLDQyICs0MzQ3LDg0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCBpKTsKICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3QmxvY2so
KTsKLSAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVzZS0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh1c2UtPmNo
aWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdXNlLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdXNlLT5jaGlsZDEoKS0+bnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGxlbmd0
aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2FsbEZy
YW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRB
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGxvYWRJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRy
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhT
dGFydCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2ggPSBtX291dC5hbmNob3IoaW5kZXgp
OwogCi0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5ID0gbG93Q2VsbCh1c2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKIAotICAg
ICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaXhlZEluZGV4U3RhcnQgPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBhcnJheUluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2ggPSBtX291
dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wU3RhcnQsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXlTaXplID0gbV9vdXQuemVyb0V4dFB0ciht
X291dC5sb2FkMzIoZml4ZWRBcnJheSwgbV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6ZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBsb2FkSW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgbG9hZEluZGV4U3RhcnQpOwog
Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmlzWmVybzY0KGZpeGVkQXJyYXlTaXplKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgaXRlbSA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHNvdXJjZVN0YXJ0LCBsb2FkSW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMu
aW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9yYWdlLCBhcnJheUluZGV4KSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhs
b29wU3RhcnQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
bmV4dEFycmF5SW5kZXggPSBtX291dC5hZGQoYXJyYXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIo
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRMb2FkSW5kZXggPSBtX291
dC5hZGQobG9hZEluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFu
Y2hvcihuZXh0QXJyYXlJbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGFycmF5
SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0KTsKLSAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXlJbmRleCA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBmaXhlZEluZGV4U3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
YWRkSW5jb21pbmdUb1BoaShsb2FkSW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0TG9hZEluZGV4KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGFycmF5SW5k
ZXgsIG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCkpOwogCi0gICAgICAgICAgICAgICAgICAg
IExWYWx1ZSBpdGVtID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTRml4
ZWRBcnJheV9idWZmZXIsIGZpeGVkQXJyYXksIGZpeGVkQXJyYXlJbmRleCkpOwotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTY0KGl0ZW0sIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmlu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgc3RvcmFnZSwgYXJyYXlJbmRleCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmJlbG93KG5leHRMb2FkSW5kZXgsIGxlbmd0aCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zdXJlKGxvb3BTdGFydCksIHVuc3VyZShjb250aW51YXRpb24pKTsKIAot
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dEFycmF5SW5kZXggPSBtX291dC5hZGQoYXJy
YXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOwotICAgICAgICAgICAgICAgICAgICBMVmFs
dWUgbmV4dEZpeGVkQXJyYXlJbmRleCA9IG1fb3V0LmFkZChmaXhlZEFycmF5SW5kZXgsIG1fb3V0
LmNvbnN0SW50UHRyKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJy
YXlJbmRleExvb3BGb3JGaW5pc2ggPSBtX291dC5hbmNob3IobmV4dEFycmF5SW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlw
ZSgpLCBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2gsIGFycmF5SW5kZXhMb29wRm9yRmluaXNoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZml4ZWRJbmRleFN0YXJ0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4U3Rh
cnRGb3JGaW5pc2ggPSBtX291dC5hbmNob3IoaW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFkZEluY29taW5nVG9QaGkoZml4ZWRBcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4
dEZpeGVkQXJyYXlJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWlu
Z1RvUGhpKGFycmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXlTaXplID0gbV9vdXQuemVyb0V4dFB0
cihtX291dC5sb2FkMzIoZml4ZWRBcnJheSwgbV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6ZSkpOwog
Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmJlbG93KG5leHRGaXhlZEFycmF5SW5kZXgsIGZpeGVkQXJyYXlTaXplKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb29wU3RhcnQpLCB1bnN1cmUoY29udGludWF0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvNjQoZml4ZWRBcnJheVNpemUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0
YXJ0KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50
ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5p
c2gpOworICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhsb29wU3RhcnQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSBhcnJheUluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5
SW5kZXhTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheUlu
ZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGZpeGVkSW5kZXhTdGFydCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExWYWx1ZSBpdGVtID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLkpTRml4ZWRBcnJheV9idWZmZXIsIGZpeGVkQXJyYXksIGZpeGVkQXJyYXlJ
bmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChpdGVtLCBtX291
dC5iYXNlSW5kZXgobV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIHN0b3JhZ2Us
IGFycmF5SW5kZXgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRBcnJh
eUluZGV4ID0gbV9vdXQuYWRkKGFycmF5SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0Rml4ZWRBcnJheUluZGV4ID0gbV9vdXQu
YWRkKGZpeGVkQXJyYXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleExvb3BGb3JGaW5pc2ggPSBtX291
dC5hbmNob3IobmV4dEFycmF5SW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5hZGRJbmNvbWluZ1RvUGhpKGZpeGVkQXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRGaXhl
ZEFycmF5SW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5n
VG9QaGkoYXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5iZWxvdyhuZXh0Rml4ZWRBcnJheUluZGV4LCBmaXhlZEFycmF5U2l6ZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvb3BTdGFydCksIHVuc3VyZShjb250
aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1f
b3V0LnBoaShwb2ludGVyVHlwZSgpLCBhcnJheUluZGV4U3RhcnRGb3JGaW5pc2gsIGFycmF5SW5k
ZXhMb29wRm9yRmluaXNoKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAg
PSBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKICAgICAgICAgICAgICAgICAg
ICAgTFZhbHVlIGl0ZW0gPSBsb3dKU1ZhbHVlKHVzZSk7CkBAIC00NDA0LDYgKzQ0NjEsMTIgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNwcmVhZCgpCiAgICAgeworICAgICAgICAvLyBJ
dCB3b3VsZCBiZSB0cml2aWFsIHRvIHN1cHBvcnQgdGhpcywgYnV0IGZvciBub3csIHdlIG5ldmVy
IGNyZWF0ZQorICAgICAgICAvLyBJUiB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIHRoaXMuIFRoZSBy
ZWFzb24gaXMgdGhhdCBTcHJlYWQgaXMgb25seQorICAgICAgICAvLyBjb25zdW1lZCBieSBOZXdB
cnJheVdpdGhTcHJlYWQgYW5kIG5ldmVyIGFueXRoaW5nIGVsc2UuIEFsc28sIGFueQorICAgICAg
ICAvLyBTcHJlYWQoUGhhbnRvbUNyZWF0ZVJlc3QpIHdpbGwgdHVybiBpbnRvIFBoYW50b21TcHJl
YWQoUGhhbnRvbUNyZWF0ZVJlc3QpLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX25vZGUtPmNo
aWxkMSgpLT5vcCgpICE9IFBoYW50b21DcmVhdGVSZXN0KTsgCisKICAgICAgICAgTFZhbHVlIGFy
Z3VtZW50ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBMVmFsdWUgcmVz
dWx0OwpAQCAtNjA5OCw2ICs2MTYxLDI3MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQo
KQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgTFZhbHVlIGpz
Q2FsbGVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHRo
aXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPmNoaWxkMygpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQp
OworICAgICAgICBOb2RlKiBhcnJheVdpdGhTcHJlYWQgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7
CisgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJyYXlXaXRoU3ByZWFkLT5iaXRWZWN0
b3IoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtTm9uU3ByZWFkUGFyYW1ldGVycyA9IDA7CisgICAg
ICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7CisgICAgICAgIFZlY3RvcjxMVmFs
dWUsIDg+IHBhdGNocG9pbnRBcmd1bWVudHM7CisgICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZy
YW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBX
VEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVu
Z3RoczsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFk
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChp
KSkgeworICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
YXJyYXlXaXRoU3ByZWFkLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3ByZWFkLT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNwcmVhZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwor
ICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gc3ByZWFk
LT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHNwcmVhZC0+Y2hpbGQxKCkt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxlbmd0
aCA9IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3ByZWFkTGVu
Z3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSk7CisgICAgICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAg
ICAgICAgIHBhdGNocG9pbnRBcmd1bWVudHMuYXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgKytudW1Ob25TcHJlYWRQYXJhbWV0ZXJzOworICAgICAgICAgICAgICAg
IExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdp
dGhTcHJlYWQsIGkpKTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50QXJndW1lbnRzLmFwcGVu
ZChhcmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludFB0cihudW1Ob25TcHJl
YWRQYXJhbWV0ZXJzICsgMSk7CisgICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExl
bmd0aHMpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFk
ZChsZW5ndGgsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgCisgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwor
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjpyZWdUMCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQodGhpc0FyZywgVmFsdWVS
ZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kVmVjdG9yV2l0aFJlcChwYXRjaHBvaW50QXJndW1lbnRzLCBWYWx1ZVJlcDo6V2FybUFueSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3Rh
Z1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlv
bkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKwor
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0
aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOyAvLyBObyBpbnB1dHMgd2lsbCBiZSBpbiBhIHZvbGF0
aWxlIHJlZ2lzdGVyLgorICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMDsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBt
aW5pbXVtIGFtb3VudCBvZiBjYWxsIGFyZyBhcmVhIHN0YWNrIHNwYWNlIHRoYXQgYWxsIEpTLT5K
UyBjYWxscyBhbHdheXMgaGF2ZS4KKyAgICAgICAgdW5zaWduZWQgbWluaW11bUpTQ2FsbEFyZWFT
aXplID0KKyAgICAgICAgICAgIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAgICAg
ICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisKKyAgICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJl
YVNpemVJbkJ5dGVzKG1pbmltdW1KU0NhbGxBcmVhU2l6ZSk7CisgICAgICAgIAorICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7
CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bik7CisKKyAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0
aW9ucyA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0
Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUlu
ZGV4KTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwor
ICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
YWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJl
Z2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7CisKKyAgICAgICAgICAgICAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
NCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworCisgICAg
ICAgICAgICAgICAgYXV0byBnZXRWYWx1ZUZyb21SZXAgPSBbJl0gKEIzOjpWYWx1ZVJlcCByZXAs
IEdQUlJlZyByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXVz
ZWRSZWdpc3RlcnMuZ2V0KHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXAu
aXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OkltbTY0KHJlcC52YWx1ZSgpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdGU6IGluIHRoaXMgZnVuY3Rpb24sIHdlIG9ubHkgcmVxdWVzdCA2NCBiaXQgdmFsdWVz
LgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBwcm9iYWJseSBtb3JlIHNwYWNl
IGVmZmljaWVudCB0byBhbGxvdyAzMi1iaXQgdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBp
ZiAocmVwLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlcC5vZmZzZXRGcm9tRlAoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlcC5pc0dQUigpKTsgLy8gRklYTUU6IGlzIHRoaXMgdHJ1ZT8KKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodXNlZFJlZ2lzdGVycy5nZXQocmVwLmdwcigpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0g
WyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2Vw
dGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcg
YW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUo
KTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVt
VXNlZFNsb3RzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCksIG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
UmVwID0gcGFyYW1zWzNdOworICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNSZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBz
Y3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMg
KyAxKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1V
c2VkU2xvdHMgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykpLCBzY3JhdGNoR1BS
MSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhlIHJlcXVp
cmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgLy8g
Um91bmQgc2NyYXRjaEdQUjEgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpCisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
fihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAg
ICBqaXQubHNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIxKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
c2NyYXRjaEdQUjEpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hH
UFIyLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9IENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5V2l0
aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHNwcmVhZCA9IHN0YXRlLT5ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQt
Pm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBzcHJlYWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFyZ3VtZW50c1Rv
Q29weSA9IHBhcmFtc1twYXJhbXNPZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXRWYWx1ZUZyb21SZXAobnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNoR1BSMyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNzZW1ibHlIZWxw
ZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXApICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBsb29wU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNp
emVfdD4oMSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgc2NyYXRjaEdQUjMsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNldCksIHNj
cmF0Y2hHUFI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoR1BSNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5j
aFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlua1RvKGxvb3BT
dGFydCwgJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2Fz
dDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldFZhbHVlRnJvbVJlcChwYXJhbXNbcGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhF
eGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0ZvclZhcmFyZ3MpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZG9udFRocm93LmxpbmsoJmppdCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjEpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIgPT0gR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxI
ZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAg
ICAgICAgICAgZ2V0VmFsdWVGcm9tUmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMpOworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFy
Z3VtZW50U2xvdCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ2FsbExp
bmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3RWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJn
czsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBl
KSA9PSBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1Qw
LCB0YXJnZXRUb0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAg
ICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGlu
aygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAg
ICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCF1c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjpyZWdUMikpOworICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKGlzVGFpbENhbGwpCisgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtb3Jp
Z2luYWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHRhcmdldFRvQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNo
cG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lk
IGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKICAgICB7CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX25vZGU7CkBAIC02MTI0LDYgKzY0NTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZm9yd2FyZGluZyAmJiBtX25vZGUtPmNo
aWxkMygpICYmIG1fbm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIAogICAgICAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKIApA
QCAtNjQ5Nyw2ICs2ODMzLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlRm9y
d2FyZFZhcmFyZ3MoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkgJiYgbV9u
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAg
ICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZTsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCkBAIC02NTg1LDYgKzY5MjYs
MTQwIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwogICAgIH0KIAorICAgIExWYWx1ZSBnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2Fs
bEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKKyAgICB7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVu
dHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
aWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrbm93
bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKKyAgICAgICAgICAgIGlmIChrbm93bkxl
bmd0aCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgICAgICBrbm93bkxl
bmd0aCA9IGtub3duTGVuZ3RoIC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOworICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOworICAgICAgICB9CisKKworICAgICAg
ICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhl
IGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaWYg
KCFudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNM
ZW5ndGgudmFsdWU7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0
LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50
c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhp
KEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgY29ycmVjdCBoYXNoIHRyYWl0cyBmb3IgaXQg
dG8gYmUgbnVsbHB0cj8KKyAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUs
IFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVI
YXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOworCisgICAg
ICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcnJheVdpdGhTcHJlYWQtPm9wKCkgPT0gUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCk7CisgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJyYXlXaXRo
U3ByZWFkLT5iaXRWZWN0b3IoKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0Fy
Z3VtZW50cyA9IDA7CisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxk
cmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNw
cmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNoaWxkLT5v
cCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNo
aWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgYXV0byBpdGVy
ID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5maW5kKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGl0ZXIgIT0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbmQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQoaXRlci0+dmFsdWUpOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0U3ByZWFk
TGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIGNoaWxkLT5jaGlsZDEo
KS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhY2hl
ZFNwcmVhZExlbmd0aHMuYWRkKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICArK251bWJlck9mU3RhdGljQXJn
dW1lbnRzOworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMg
PSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7CisgICAgICAg
IGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCisgICAgICAgICAgICBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxlbmd0aCk7CisK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1Zh
bHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdU
aGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hp
bmVDb3VudCkpOworCisgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOworICAgICAgICBMVmFsdWUgc3RvcmVJbmRleCA9IG1f
b3V0LmNvbnN0SW50UHRyKDApOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJy
YXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52
YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0
ZVJlc3QpOworICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisg
ICAgICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lLCBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkp
OworICAgICAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRy
KGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworCisgICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydExvYWRJbmRleCA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdEludFB0cigwKSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRT
dG9yZUluZGV4ID0gbV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleEZvckVuZCA9IG1fb3V0LmFuY2hvcihzdG9yZUlu
ZGV4KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzcHJl
YWRMZW5ndGgpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxvb3ApKTsKKworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcCwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbG9vcFN0b3JlSW5kZXggPSBtX291
dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxv
YWRJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRMb2FkSW5kZXgpOworICAgICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwgbG9hZEluZGV4KSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbG9vcFN0b3JlSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgbmV4dExvYWRJbmRleCA9IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0
cigxKSwgbG9hZEluZGV4KTsKKyAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhp
KGxvYWRJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRMb2FkSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgbmV4dFN0b3JlSW5kZXggPSBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoMSks
IGxvb3BTdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhp
KGxvb3BTdG9yZUluZGV4LCBtX291dC5hbmNob3IobmV4dFN0b3JlSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBsb29wU3RvcmVJbmRleEZvckVuZCA9IG1fb3V0LmFuY2hv
cihuZXh0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJl
bG93KG5leHRMb2FkSW5kZXgsIHNwcmVhZExlbmd0aCksIHVuc3VyZShsb29wKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgc3RvcmVJbmRleCA9IG1fb3V0LnBoaShJ
bnQ2NCwgc3RhcnRTdG9yZUluZGV4Rm9yRW5kLCBsb29wU3RvcmVJbmRleEZvckVuZCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFs
dWUobV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJs
ZXMsIHRhcmdldFN0YXJ0LCBzdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3RvcmVJbmRl
eCA9IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cigxKSwgc3RvcmVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydFN0b3JlSW5kZXgg
PSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisgICAgICAgIExWYWx1ZSBsb29wQm91bmRWYWx1
ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuYmVsb3coc3RvcmVJbmRleCwgbG9vcEJvdW5kVmFsdWUpLAorICAg
ICAgICAgICAgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmRlZmluZWRM
b29wLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgbG9vcFN0b3JlSW5kZXggPSBtX291
dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQoCisg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdl
dFN0YXJ0LCBsb29wU3RvcmVJbmRleCkpOworICAgICAgICBMVmFsdWUgbmV4dEluZGV4ID0gbV9v
dXQuYWRkKGxvb3BTdG9yZUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgIG1f
b3V0LmFkZEluY29taW5nVG9QaGkobG9vcFN0b3JlSW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0SW5k
ZXgpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYmVsb3cobmV4
dEluZGV4LCBsb29wQm91bmRWYWx1ZSksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKICAgICAgICAg
bV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJsb2NrKCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4Njkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgog
I2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKIApAQCAtODQsNiArODUsOCBAQCBl
eHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBj
YXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNl
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIC8vIFRob3NlIGFyZSBjb21wbGV0
ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUgogICAgICAgICBi
cmVhazsKIApAQCAtMzg4LDE0ICszOTEsMTAyIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgICAgICBBU1NFUlQoZm91bmQpOwogICAgICAgICAg
ICAgfQogI2VuZGlmCi0KICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQorCiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBj
YXNlIFBoYW50b21TcHJlYWQ6IHsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBudWxscHRyOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9w
ZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IFNwcmVhZFBMb2MpIHsKKyAgICAgICAgICAg
ICAgICBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKworICAgICAgICAvLyBOb3RlOiBpdCBpcyBzb3Vu
ZCBmb3IgSlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkgdG8gY2FsbCBnZXREaXJlY3RJbmRl
eCBoZXJlCisgICAgICAgIC8vIGJlY2F1c2Ugd2UncmUgZ3VhcmFudGVlZCB3ZSBkb24ndCBiZSBj
YWxsaW5nIGFueSBnZXR0ZXJzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzCisgICAgICAgIC8vIHRo
YXQgd2Ugb25seSBzdXBwb3J0IFBoYW50b21TcHJlYWQgb3ZlciBDcmVhdGVSZXN0LCB3aGljaCBp
cyBhbiBhcnJheSB3ZSBjcmVhdGUuCisgICAgICAgIC8vIEFueSBhdHRlbXB0cyB0byBwdXQgYSBn
ZXR0ZXIgb24gYW55IGluZGljZXMgb24gdGhlIHJlc3QgYXJyYXkgd2lsbCBlc2NhcGUgdGhlIGFy
cmF5LgorICAgICAgICBKU0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBKU0ZpeGVkQXJyYXk6OmNy
ZWF0ZUZyb21BcnJheShleGVjLCB2bSwgYXJyYXkpOworICAgICAgICByZXR1cm4gZml4ZWRBcnJh
eTsKKyAgICB9CisKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwg
ZXhlYy0+Y29kZUJsb2NrKCkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKworICAgICAgICB1bnNpZ25lZCBhcnJheVNp
emUgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5s
b2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MpIHsKKyAg
ICAgICAgICAgICAgICArK251bVByb3BlcnRpZXM7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChK
U0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTRml4ZWRBcnJheSo+KHZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplICs9IGZpeGVkQXJyYXktPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFycmF5U2l6ZSAr
PSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSlNBcnJheSogcmVzdWx0
ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNp
emUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAvLyBFbnN1cmUgd2Ugc2VlIGluZGljZXMgZm9yIGV2ZXJ5dGhpbmcgaW4g
dGhlIHJhbmdlOiBbMCwgbnVtUHJvcGVydGllcykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhp
dFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClb
al07CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IE5l
d0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYyAmJiBwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8o
KSA9PSBpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKGZvdW5kKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgVmVjdG9y
PEpTVmFsdWUsIDg+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmdyb3cobnVtUHJvcGVy
dGllcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9w
ZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlW
YWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJheVdpdGhTcHJl
YWRBcmd1bWVudFBMb2MpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlc1tpXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJv
cGVydHkubG9jYXRpb24oKS5pbmZvKCkgPCBudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudHNbcHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCldID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBhcnJheUluZGV4ID0gMDsKKyAg
ICAgICAgZm9yIChKU1ZhbHVlIHZhbHVlIDogYXJndW1lbnRzKSB7CisgICAgICAgICAgICBpZiAo
SlNGaXhlZEFycmF5KiBmaXhlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZml4ZWRB
cnJheS0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZpeGVkQXJy
YXktPmdldChpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUluZGV4
KHZtLCBhcnJheUluZGV4LCBmaXhlZEFycmF5LT5nZXQoaSkpOworICAgICAgICAgICAgICAgICAg
ICArK2FycmF5SW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm90IHNwcmVhZGluZy4KKyAgICAgICAgICAgICAg
ICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwgdmFsdWUpOworICAgICAg
ICAgICAgICAgICsrYXJyYXlJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMjA4NjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0
Q2FzZShDQ2FsbAogICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIGVuZFZhckFyZ3MubGlu
aygmaml0KTsKICAgICB9Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4
QXJndW1lbnRzICsgMSkpKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmUsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U0M6Om1heEFyZ3VtZW50cyArIDEpKSk7CiAgICAgCiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShq
aXQsIHNjcmF0Y2hHUFIxLCB0cnVlLCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIyKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGNhbGwgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gIWds
b2JhbE9iamVjdC0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
LAogICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGlmIHdlIGRvIHRoYXQsIHdlIGVuc3VyZSB3
ZSdyZSBjYWxsaW5nIGluIHdpdGggYW4gYXJyYXkgd2l0aCBhbGwgc2VsZiBwcm9wZXJ0aWVzIGJl
dHdlZW4KICAgICAgICAgICAgICAgICAvLyBbMCwgbGVuZ3RoKS4KLSAgICAgICAgICAgICAgICBB
U1NFUlQoYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gV2UgbWF5IGFsc28gY2FsbCBpbnRvIHRoaXMgZHVyaW5nIE9TUiBleGl0IHRvIG1hdGVyaWFs
aXplIGEgcGhhbnRvbSBmaXhlZCBhcnJheS4KKyAgICAgICAgICAgICAgICAvLyBXZSBtYXkgYmUg
Y3JlYXRpbmcgYSBmaXhlZCBhcnJheSBkdXJpbmcgT1NSIGV4aXQgZXZlbiBhZnRlciB0aGUgaXRl
cmF0b3IgcHJvdG9jb2wgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAvLyBCdXQsIHdoZW4gdGhl
IHBoYW50b20gd291bGQgaGF2ZSBsb2dpY2FsbHkgYmVlbiBjcmVhdGVkLCB0aGUgcHJvdG9jb2wg
aGFkbid0IGJlZW4KKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkLiBUaGVyZWZvcmUsIGl0IGlz
IHNvdW5kIHRvIGFzc3VtZSBlbXB0eSBpbmRpY2VzIGFyZSBqc1VuZGVmaW5lZCgpLgogICAgICAg
ICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295476</attachid>
            <date>2016-11-27 16:50:22 -0800</date>
            <delta_ts>2016-11-29 19:30:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>124921</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDg5OTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgzIEBACisyMDE2LTExLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIG9wdGltaXplIHRoZSBwYXR0ZXJuIHdo
ZXJlIHdlIHNwcmVhZCBhIGZ1bmN0aW9uJ3MgcmVzdCBwYXJhbWV0ZXIgdG8gYW5vdGhlciBjYWxs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4NjUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3Jv
YmVuY2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAg
ICAoY3JlYXRlQ2xhc3NIaWVyYXJjaHkubGV0LmN1cnJlbnRDbGFzcyk6CisgICAgICAgIChjcmVh
dGVDbGFzc0hpZXJhcmNoeSk6CisgICAgICAgICogc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQu
anM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChm
b28pOgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3By
ZWFkLWNvbnZlcnQtdG8tc3RhdGljLWxvYWRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6
CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAg
ICogc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBo
YW50b20tc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChmb28p
OgorICAgICAgICAoZXNjYXBlKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogc3RyZXNzL3Bo
YW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGFzc2VydCk6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGVmZmVj
dHMpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9y
d2FyZC12YXJhcmdzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0
MS5iYXIpOgorICAgICAgICAodGVzdDEuZm9vKToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAg
KHRlc3QyLmJhcik6CisgICAgICAgICh0ZXN0Mi5mb28pOgorICAgICAgICAodGVzdDMuYmF6KToK
KyAgICAgICAgKHRlc3QzLmJhcik6CisgICAgICAgICh0ZXN0My5mb28pOgorICAgICAgICAodGVz
dDQuYmF6KToKKyAgICAgICAgKHRlc3Q0LmJhcik6CisgICAgICAgICh0ZXN0NC5mb28pOgorICAg
ICAgICAodGVzdDUuYmF6KToKKyAgICAgICAgKHRlc3Q1LmJhcik6CisgICAgICAgICh0ZXN0NS5m
b28pOgorICAgICAgICAqIHN0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qczogQWRkZWQu
CisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAg
ICAgIChlZmZlY3RzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1j
YWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToK
KyAgICAgICAgKGJheik6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAg
KiBzdHJlc3Mvc3ByZWFkLWZvcndhcmQtY2FsbC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChpZGVudGl0eSk6CisgICAgICAgIChi
YXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFy
YXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wtMi5qczogQWRkZWQu
CisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6LkFycmF5LnByb3RvdHlwZS5TeW1ib2wu
aXRlcmF0b3IpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28p
OgorICAgICAgICAodGVzdCk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFy
Z3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGFzc2VydCk6CisgICAgICAgIChiYXouQXJyYXkucHJvdG90eXBlLlN5bWJvbC5pdGVy
YXRvcik6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28p
OgorCiAyMDE2LTExLTIxICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIENyYXNoIGluIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogV1RGOjpUaHJlYWRT
cGVjaWZpYzxXVEY6OldURlRocmVhZERhdGEsICsgMTQyCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZGVmYXVsdC1kZXJpdmVkLWNvbnN0cnVjdG9yLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlZmF1bHQtZGVyaXZlZC1jb25z
dHJ1Y3Rvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBjcmVh
dGVDbGFzc0hpZXJhcmNoeShkZXB0aCkgeworICAgIGxldCBjdXJyZW50Q2xhc3MgPSBjbGFzcyBC
YXNlIHsgfTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKKyAgICAgICAg
Y3VycmVudENsYXNzID0gY2xhc3MgZXh0ZW5kcyBjdXJyZW50Q2xhc3Mge307CisgICAgfQorICAg
IHJldHVybiBjdXJyZW50Q2xhc3M7Cit9CisKK2xldCBjdG9yID0gY3JlYXRlQ2xhc3NIaWVyYXJj
aHkoMTApOworbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTAw
MDAwOyBpKyspIHsKKyAgICBsZXQgeCA9IG5ldyBjdG9yKHt9LCB7fSwgMjAsIDMwLCA0MCwgNTAs
IDYwLCB7fSwgODAsIHRydWUsIGZhbHNlKTsKK30KKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOwor
aWYgKHZlcmJvc2UpCisgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKSW5kZXg6IEpTVGVz
dHMvc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvY2FsbC12YXJhcmdzLXNwcmVhZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jYWxsLXZhcmFyZ3Mtc3ByZWFkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgg
QEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtID0gIiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGFzc2VydDogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsK
KworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KK25vSW5saW5l
KGJhcik7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0IHggPSBiYXIoLi4u
YXJncywgNDIsIC4uLmFyZ3MpOyAKKyAgICByZXR1cm4geDsKK30KK25vSW5saW5lKGZvbyk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByID0gZm9vKGksIGkr
MSwgaSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgYXNzZXJ0KHJb
MF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzFdID09PSBpKzIs
IEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSszLCBKU09OLnN0cmlu
Z2lmeShyKSk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyLCBKU09OLnN0cmluZ2lmeShyKSk7Cisg
ICAgYXNzZXJ0KHJbNF0gPT09IGkrMSwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChy
WzVdID09PSBpKzIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQocls2XSA9PT0gaSsz
LCBKU09OLnN0cmluZ2lmeShyKSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFy
Z3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFkLWNvbnZlcnQtdG8tc3RhdGljLWxvYWRzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXctYXJyYXktd2l0
aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5ldy1hcnJheS13aXRoLXNwcmVhZC1jb252ZXJ0
LXRvLXN0YXRpYy1sb2Fkcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBiYXooLi4uYXJncykgewor
ICAgIHJldHVybiBhcmdzOworfQorZnVuY3Rpb24gYmFyKGEsIC4uLmFyZ3MpIHsKKyAgICByZXR1
cm4gYmF6KC4uLmFyZ3MsIDQyLCAuLi5hcmdzKTsKK30KK2Z1bmN0aW9uIGZvbyhhLCBiLCBjLCBk
KSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBjLCBkKTsKK30KK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByID0gZm9vKGksIGkrMSwg
aSsyLCBpKzMpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgYXNzZXJ0KHJbMF0g
PT09IGkrMSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbMl0gPT09
IGkrMyk7CisgICAgYXNzZXJ0KHJbM10gPT09IDQyKTsKKyAgICBhc3NlcnQocls0XSA9PT0gaSsx
KTsKKyAgICBhc3NlcnQocls1XSA9PT0gaSsyKTsKKyAgICBhc3NlcnQocls2XSA9PT0gaSszKTsK
K30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1h
bC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20t
c3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL25ldy1hcnJheS13aXRo
LXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50b20tc3ByZWFkLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUo
YXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQgciA9IFsuLi5h
LCAuLi5hcmdzXTsKKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2Z1bmN0aW9u
IGVzY2FwZShhKSB7IHJldHVybiBhOyB9Citub0lubGluZShlc2NhcGUpOworZnVuY3Rpb24gYmFy
KGEsIC4uLmFyZ3MpIHsKKyAgICBlc2NhcGUoYXJncyk7CisgICAgbGV0IHIgPSBbLi4uYSwgLi4u
YXJnc107CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxldCBpID0g
MDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBmb3IgKGxldCBmIG9mIFtmb28sIGJhcl0pIHsKKyAg
ICAgICAgbGV0IG8gPSB7fTsKKyAgICAgICAgbGV0IGEgPSBbbywgMjBdOworICAgICAgICBsZXQg
ciA9IGYoYSwgMzAsIDQwKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA0KTsKKyAgICAg
ICAgYXNzZXJ0KHJbMF0gPT09IG8pOworICAgICAgICBhc3NlcnQoclsxXSA9PT0gMjApOworICAg
ICAgICBhc3NlcnQoclsyXSA9PT0gMzApOworICAgICAgICBhc3NlcnQoclszXSA9PT0gNDApOwor
ICAgIH0KK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3By
ZWFkLW9zci1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tbmV3
LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL3BoYW50b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24hIik7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitsZXQgdmFsdWUgPSBmYWxzZTsKKworZnVuY3Rpb24gYmF6KHgpIHsKKyAg
ICBpZiAodHlwZW9mIHggIT09ICJudW1iZXIiKSB7CisgICAgICAgIHZhbHVlID0gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIHg7Cit9Citub0lubGluZShiYXopOworCitmdW5jdGlvbiBiYXIoLi4u
YXJncykgeworICAgIHJldHVybiBhcmdzOworfQorCitsZXQgZGlkRWZmZWN0cyA9IGZhbHNlOyAK
K2Z1bmN0aW9uIGVmZmVjdHMoKSB7IGRpZEVmZmVjdHMgPSB0cnVlOyB9Citub0lubGluZShlZmZl
Y3RzKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQgdGhlQXJncyA9IFsu
Li5hcmdzLCBhLCAuLi5hcmdzXTsKKyAgICBiYXooYSk7CisgICAgaWYgKHZhbHVlKSB7CisgICAg
ICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgbGV0IHIgPSBiYXIuYXBwbHkobnVsbCwgdGhlQXJn
cyk7CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwMDsgaSsrKSB7CisgICAgZm9vKGksIGkrMSk7CisgICAgYXNzZXJ0KCFkaWRFZmZl
Y3RzKTsKK30KK2xldCBvID0ge307CitsZXQgW2EsIGIsIGNdID0gZm9vKG8sIDIwKTsKK2Fzc2Vy
dChhID09PSAyMCk7Cithc3NlcnQoYiA9PT0gbyk7Cithc3NlcnQoYyA9PT0gMjApOworYXNzZXJ0
KGRpZEVmZmVjdHMpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9yd2Fy
ZC12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFk
LWZvcndhcmQtdmFyYXJncy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9waGFu
dG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTcgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIsIG09IiIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOwor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24g
YmFyKGEsIGIsIGMsIGQpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzKTsK
KyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAw
MDA7IGkrKykgeworICAgICAgICBsZXQgW2EsIGIsIGMsIGRdID0gZm9vKGksIGkrMSwgaSsyLCBp
KzMpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSBpKzEp
OworICAgICAgICBhc3NlcnQoYyA9PT0gaSsyKTsKKyAgICAgICAgYXNzZXJ0KGQgPT09IGkrMykg
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rpb24gYmFyKC4uLmFy
Z3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGZvbyhhLCAu
Li5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4uYXJncyk7CisgICAg
fQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBp
KyspIHsKKyAgICAgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFz
c2VydChyLmxlbmd0aCA9PT0gNyk7CisgICAgICAgIGxldCBbYSwgYiwgYywgZCwgZSwgZiwgZ10g
PSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkr
Mik7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgICAgICBhc3NlcnQoZCA9PT0gaSk7
CisgICAgICAgIGFzc2VydChlID09PSBpKzEpOworICAgICAgICBhc3NlcnQoZiA9PT0gaSsyKTsK
KyAgICAgICAgYXNzZXJ0KGcgPT09IGkrMyk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0Mygp
IHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAg
ICB9CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheiguLi5h
cmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIC4uLmFyZ3MpIHsKKyAgICAg
ICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAg
bGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9
PT0gMyk7CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0g
aSszKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkpOworICAgICAgICBhc3NlcnQoYyA9PT0gaSsz
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5h
cmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBiYXIoLi4u
YXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlv
biBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3Ms
IGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkr
MiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0
KHJbMF0gPT09IGkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgZnVuY3Rp
b24gYmF6KGEsIGIsIGMpIHsKKyAgICAgICAgcmV0dXJuIFthLCBiLCBjXTsKKyAgICB9CisgICAg
ZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJheiguLi5hcmdzKTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIg
PSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7
CisgICAgICAgIGxldCBbYSwgYiwgY10gPSByOworICAgICAgICBhc3NlcnQoYSA9PT0gaSk7Cisg
ICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5k
ZWZpbmVkKTsKKyAgICB9Cit9CisKK3Rlc3QxKCk7Cit0ZXN0MigpOwordGVzdDMoKTsKK3Rlc3Q0
KCk7Cit0ZXN0NSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtb3NyLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtb3NyLWV4
aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtb3Ny
LWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
biEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2xldCB2YWx1ZSA9IGZhbHNlOworCitmdW5j
dGlvbiBiYXooeCkgeworICAgIGlmICh0eXBlb2YgeCAhPT0gIm51bWJlciIpIHsKKyAgICAgICAg
dmFsdWUgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4geDsKK30KK25vSW5saW5lKGJheik7CisK
K2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFyZ3M7Cit9CisKK2xldCBkaWRF
ZmZlY3RzID0gZmFsc2U7IAorZnVuY3Rpb24gZWZmZWN0cygpIHsgZGlkRWZmZWN0cyA9IHRydWU7
IH0KK25vSW5saW5lKGVmZmVjdHMpOworCitmdW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAg
IGxldCByID0gYmFyKC4uLmFyZ3MsIGJheihhKSwgLi4uYXJncyk7CisgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgIGVmZmVjdHMoKTsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShm
b28pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgZm9vKGksIGkr
MSk7CisgICAgYXNzZXJ0KCFkaWRFZmZlY3RzKTsKK30KK2xldCBvID0ge307CitsZXQgW2EsIGIs
IGNdID0gZm9vKG8sIDIwKTsKK2Fzc2VydChhID09PSAyMCk7Cithc3NlcnQoYiA9PT0gbyk7Cith
c3NlcnQoYyA9PT0gMjApOworYXNzZXJ0KGRpZEVmZmVjdHMpOwpJbmRleDogSlNUZXN0cy9zdHJl
c3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3N0cmVzcy9zcHJlYWQtY2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1jYWxsLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGlj
LWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICByZXR1cm4g
YXJnczsKK30KK25vSW5saW5lKGJheik7CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAg
IHJldHVybiBiYXooLi4uYXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIs
IGMsIGQpIHsKKyAgICByZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwg
aSsxLCBpKzIsIGkrMyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQo
clswXSA9PT0gaSsxKTsKKyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsy
XSA9PT0gaSszKTsKKyAgICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09
PSBpKzEpOworICAgIGFzc2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBp
KzMpOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtY2FsbC12YXJhcmdz
LXN0YWNrLW92ZXJmbG93LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1m
b3J3YXJkLWNhbGwtdmFyYXJncy1zdGFjay1vdmVyZmxvdy5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC1jYWxsLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsK
KyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOwor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gaWRlbnRpdHkoYSkgeyByZXR1cm4gYTsg
fQorbm9JbmxpbmUoaWRlbnRpdHkpOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgIHJl
dHVybiBhcmdzOworfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3Mp
IHsKKyAgICBsZXQgYXJnID0gaWRlbnRpdHkoYSk7CisgICAgdHJ5IHsKKyAgICAgICAgbGV0IHIg
PSBiYXIoLi4uYXJncywgLi4uYXJncyk7CisgICAgICAgIHJldHVybiByOworICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICByZXR1cm4gYXJnOworICAgIH0KK30KK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworICAgIGxldCBhcmdzID0gW107CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAgICBhcmdzLnB1c2goaSk7Cisg
ICAgfQorCisgICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgciA9IGZvbyhvLCAuLi5hcmdzKTsKKyAg
ICBsZXQgaSA9IDA7CisgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0
KHJbaV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgZm9yIChsZXQgYXJnIG9m
IGFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHJbaV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAg
ICB9Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykgeworICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgIGxldCBvID0ge307CisgICAgbGV0IGFyZ3MgPSBbXTsKKyAgICBsZXQgYXJn
Q291bnQgPSBtYXhBcmd1bWVudHMoKSAqICgyLzMpOworICAgIGFyZ0NvdW50ID0gYXJnQ291bnQg
fCAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAgICAgICBh
cmdzLnB1c2goaSk7CisgICAgfQorCisgICAgbGV0IHIgPSBmb28obywgLi4uYXJncyk7CisgICAg
YXNzZXJ0KHIgPT09IG8pOworfQpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQt
dmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wtMi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC12YXJhcmdzLXJlc3QtcGFy
YW1ldGVyLWNoYW5nZS1pdGVyYXRvci1wcm90b2NvbC0yLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdl
LWl0ZXJhdG9yLXByb3RvY29sLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
ZnVuY3Rpb24gYXNzZXJ0KGIsIG09IiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIGFzc2VydGlvbjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKwor
bGV0IGNhbGxlZCA9IGZhbHNlOworZnVuY3Rpb24gYmF6KGMpIHsKKyAgICBpZiAoYykgeworICAg
ICAgICBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgYXNzZXJ0KGZhbHNlLCAic2hvdWxkIG5vdCBiZSBjYWxsZWQhIik7CisgICAgICAg
ICAgICBsZXQgaSA9IDA7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIG5l
eHQoKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgInNob3VsZCBub3QgYmUg
Y2FsbGVkISIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0K
KyAgICB9Cit9Citub0lubGluZShiYXopOworCitmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAg
IHJldHVybiBhcmdzOworfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKGMsIC4uLmFy
Z3MpIHsKKyAgICBhcmdzID0gWy4uLmFyZ3NdOworICAgIGJheihjKTsKKyAgICByZXR1cm4gYmFy
LmFwcGx5KG51bGwsIGFyZ3MpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gdGVzdChj
KSB7CisgICAgY29uc3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CisgICAgbGV0IHIgPSBmb28o
YywgLi4uYXJncyk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSByLmxlbmd0aCk7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCByLmxlbmd0aDsgaSsrKQorICAgICAgICBhc3NlcnQocltpXSA9PT0g
YXJnc1tpXSk7Cit9Citub0lubGluZSh0ZXN0KTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7
IGkrKykgeworICAgIHRlc3QoZmFsc2UpOworfQordGVzdCh0cnVlKTsKSW5kZXg6IEpTVGVzdHMv
c3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJh
dG9yLXByb3RvY29sLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3
YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVz
dC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KK25vSW5saW5lKGFzc2VydCk7
CisKK2xldCBjYWxsZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIGJheihjKSB7CisgICAgaWYgKGMpIHsK
KyAgICAgICAgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGxldCBpID0gMDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgbmV4dCgpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA9PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ZG9uZTog
dHJ1ZX07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IDQwLCBkb25lOiBmYWxz
ZX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0K
K30KK25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJu
IGFyZ3M7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYywgLi4uYXJncykgewor
ICAgIGJheihjKTsKKyAgICByZXR1cm4gYmFyKC4uLmFyZ3MpOworfQorbm9JbmxpbmUoZm9vKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgY29uc3QgYyA9IGZhbHNl
OworICAgIGNvbnN0IGFyZ3MgPSBbe30sIDIwLCBbXSwgNDVdOworICAgIGxldCByID0gZm9vKGMs
IC4uLmFyZ3MpOworICAgIGFzc2VydChyLmxlbmd0aCA9PT0gci5sZW5ndGgpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykKKyAgICAgICAgYXNzZXJ0KHJbaV0gPT09IGFy
Z3NbaV0pOworfQorCitjb25zdCBjID0gdHJ1ZTsKK2NvbnN0IGFyZ3MgPSBbe30sIDIwLCBbXSwg
NDVdOworbGV0IHIgPSBmb28oYywgLi4uYXJncyk7Cithc3NlcnQoci5sZW5ndGggPT09IDEpOwor
YXNzZXJ0KHJbMF0gPT09IDQwKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJk
LXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
c3ByZWFkLWZvcndhcmQtdmFyYXJncy1zdGFjay1vdmVyZmxvdy5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC12YXJhcmdzLXN0YWNrLW92ZXJmbG93Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7Cisg
ICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30K
K25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJu
IGFyZ3M7Cit9CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgdHJ5IHsKKyAgICAg
ICAgbGV0IHIgPSBiYXIoLi4uYXJncywgLi4uYXJncyk7CisgICAgICAgIHJldHVybiByOworICAg
IH0gY2F0Y2goZSkgeworICAgICAgICByZXR1cm4gYTsKKyAgICB9Cit9Citub0lubGluZShmb28p
OworCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgYXJncyA9IFtd
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKKyAgICAgICAgYXJncy5wdXNo
KGkpOworICAgIH0KKworICAgIGxldCBvID0ge307CisgICAgbGV0IHIgPSBmb28obywgLi4uYXJn
cyk7CisgICAgbGV0IGkgPSAwOworICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7CisgICAgICAg
IGFzc2VydChyW2ldID09PSBhcmcpOworICAgICAgICBpKys7CisgICAgfQorICAgIGZvciAobGV0
IGFyZyBvZiBhcmdzKSB7CisgICAgICAgIGFzc2VydChyW2ldID09PSBhcmcpOworICAgICAgICBp
Kys7CisgICAgfQorfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHsKKyAgICBsZXQg
dGhyZXcgPSBmYWxzZTsKKyAgICBsZXQgbyA9IHt9OworICAgIGxldCBhcmdzID0gW107CisgICAg
bGV0IGFyZ0NvdW50ID0gbWF4QXJndW1lbnRzKCkgKiAoMi8zKTsKKyAgICBhcmdDb3VudCA9IGFy
Z0NvdW50IHwgMDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKKyAg
ICAgICAgYXJncy5wdXNoKGkpOworICAgIH0KKworICAgIGxldCByID0gZm9vKG8sIC4uLmFyZ3Mp
OworICAgIGFzc2VydChyID09PSBvKTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBAQAorMjAxNi0xMS0yNyAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBXZSBzaG91bGQgYmUgYWJsZSBvcHRpbWl6ZSB0
aGUgcGF0dGVybiB3aGVyZSB3ZSBzcHJlYWQgYSBmdW5jdGlvbidzIHJlc3QgcGFyYW1ldGVyIHRv
IGFub3RoZXIgY2FsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIGZvbGxvd2luZyBwYXR0ZXJucyB0byBwcmV2
ZW50IGJvdGggdGhlIGFsbG9jYXRpb24KKyAgICAgICAgb2YgdGhlIHJlc3QgcGFyYW1ldGVyLCBh
bmQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgaXRlcmF0b3IgcHJvdG9jb2w6CisgICAgICAgIAorICAg
ICAgICBgYGAKKyAgICAgICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgCWxldCBh
cnIgPSBbLi4uYXJnc107CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGFuZAorICAgICAg
ICAKKyAgICAgICAgZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgCWJhciguLi5hcmdz
KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRvIGRvIHRoaXMs
IEkndmUgZXh0ZW5kZWQgdGhlIGFyZ3VtZW50cyBlbGltaW5hdGlvbiBwaGFzZSB0byByZWFzb24K
KyAgICAgICAgYWJvdXQgU3ByZWFkIGFuZCBOZXdBcnJheVdpdGhTcHJlYWQuIEkndmUgYWRkZWQg
dHdvIG5ldyBub2RlcywgUGhhbnRvbVNwcmVhZAorICAgICAgICBhbmQgUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZC4gUGhhbnRvbVNwcmVhZCBpcyBvbmx5IGFsbG93ZWQgb3ZlciByZXN0CisgICAg
ICAgIHBhcmFtZXRlcnMgdGhhdCBkb24ndCBlc2NhcGUuIElmIHRoZSByZXN0IHBhcmFtZXRlciAq
ZG9lcyogZXNjYXBlLCB3ZSBjYW4ndAorICAgICAgICBjb252ZXJ0IHRoZSBzcHJlYWQgaW50byBh
IHBoYW50b20gYmVjYXVzZSBpdCB3b3VsZCBub3QgYmUgc291bmQgdy5yLnQgSlMKKyAgICAgICAg
c2VtYW50aWNzIGJlY2F1c2Ugd2Ugd291bGQgYmUgcmVhZGluZyBmcm9tIHRoZSBjYWxsIGZyYW1l
IGV2ZW4gdGhvdWdoCisgICAgICAgIHRoZSByZXN0IGFycmF5IG1heSBoYXZlIGNoYW5nZWQuCisg
ICAgICAgIAorICAgICAgICBOb3RlIHRoYXQgTmV3QXJyYXlXaXRoU3ByZWFkIGFsc28gdW5kZXJz
dGFuZHMgd2hhdCB0byBkbyB3aGVuIG9uZSBvZiBpdHMKKyAgICAgICAgYXJndW1lbnRzIGlzIFBo
YW50b21TcHJlYWQoQFBoYW50b21DcmVhdGVSZXN0KSBldmVuIGlmIGl0IGl0c2VsZiBpcyBlc2Nh
cGVkLgorICAgICAgICAKKyAgICAgICAgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCBpcyBvbmx5
IGFsbG93ZWQgb3ZlciBhIHNlcmllcyBvZgorICAgICAgICBQaGFudG9tU3ByZWFkKEBQaGFudG9t
Q3JlYXRlUmVzdCkgbm9kZXMuIExpa2Ugd2l0aCBQaGFudG9tU3ByZWFkLCBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkCisgICAgICAgIGlzIG9ubHkgYWxsb3dlZCBpZiBub25lIG9mIGl0cyBhcmd1
bWVudHMgdGhhdCBhcmUgYmVpbmcgc3ByZWFkIGFyZSBlc2NhcGVkCisgICAgICAgIGFuZCBpZiBp
dCBpdHNlbGYgaXMgbm90IGVzY2FwZWQuCisgICAgICAgIAorICAgICAgICBCZWNhdXNlIHRoZXJl
IGlzIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIGEgbm9kZSBiZWluZyBhIGNhbmRpZGF0ZSBhbmQKKyAg
ICAgICAgdGhlIGVzY2FwZWQgc3RhdGUgb2YgdGhlIG5vZGUncyBjaGlsZHJlbiwgSSd2ZSBleHRl
bmRlZCB0aGUgbm90aW9uCisgICAgICAgIG9mIGVzY2FwaW5nIGEgbm9kZSBpbnNpZGUgdGhlIGFy
Z3VtZW50cyBlbGltaW5hdGlvbiBwaGFzZS4gTm93LCB3aGVuCisgICAgICAgIGFueSBub2RlIGlz
IGVzY2FwZWQsIHdlIG11c3QgY29uc2lkZXIgYWxsIG90aGVyIGNhbmRpZGF0ZXMgdGhhdCBhcmUg
bWF5CisgICAgICAgIG5vdyBubyBsb25nZXIgYmUgdmFsaWQuCisgICAgICAgIAorICAgICAgICBG
b3IgZXhhbXBsZToKKyAgICAgICAgCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28o
Li4uYXJncykgeworICAgICAgICAJZXNjYXBlKGFyZ3MpOworICAgICAgICAJYmFyKC4uLmFyZ3Mp
OworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgSW4gdGhlIGFib3Zl
IHByb2dyYW0sIHdlIGRvbid0IGtub3cgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgdG8gZXNjYXBlKCkK
KyAgICAgICAgbW9kaWZpZXMgYXJncywgdGhlcmVmb3JlLCB0aGUgc3ByZWFkIGNhbiBub3QgYmVj
b21lIHBoYW50b20gYmVjYXVzZQorICAgICAgICB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzcHJlYWQg
bWF5IG5vdCBiZSBhcyBzaW1wbGUgYXMgcmVhZGluZyB0aGUKKyAgICAgICAgYXJndW1lbnRzIGZy
b20gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCB0aGUg
YXJndW1lbnRzIGVsaW1pbmF0aW9uIHBoYXNlIGRvZXMgbm90IGNvbnNpZGVyIGNvbnRyb2wKKyAg
ICAgICAgZmxvdyB3aGVuIGRvaW5nIGl0cyBlc2NhcGUgYW5hbHlzaXMuIEl0IHdvdWxkIGJlIGdv
b2QgdG8gaW50ZWdyYXRlIHRoaXMKKyAgICAgICAgcGhhc2Ugd2l0aCB0aGUgb2JqZWN0IGFsbG9j
YXRpb24gc2lua2luZyBwaGFzZS4gVG8gc2VlIHdoeSwgY29uc2lkZXIKKyAgICAgICAgYW4gZXhh
bXBsZSB3aGVyZSB3ZSBkb24ndCBlbGltaW5hdGUgdGhlIHNwcmVhZCBhbmQgYWxsb2NhdGlvbiBv
ZiB0aGUgcmVzdAorICAgICAgICBwYXJhbWV0ZXIgZXZlbiB0aG91Z2ggd2UgY291bGQ6CisgICAg
ICAgIAorICAgICAgICBgYGAKKyAgICAgICAgZnVuY3Rpb24gZm9vKHJhcmVDb25kaXRpb24sIC4u
LmFyZ3MpIHsKKyAgICAgICAgCWJhciguLi5hcmdzKTsKKyAgICAgICAgCWlmIChyYXJlQ29uZGl0
aW9uKQorICAgICAgICAJCWJheihhcmdzKTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAg
ICAgCisgICAgICAgIFRoZXJlIGFyZSBvbmx5IGEgZmV3IHVzZXJzIG9mIHRoZSBQaGFudG9tU3By
ZWFkIGFuZCBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkCisgICAgICAgIG5vZGVzLiBQaGFudG9t
U3ByZWFkIGlzIG9ubHkgdXNlZCBieSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIGFuZCBOZXdB
cnJheVdpdGhTcHJlYWQuCisgICAgICAgIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgaXMgb25s
eSB1c2VkIGJ5IEZvcndhcmRWYXJhcmdzIGFuZCB0aGUgdmFyaW91cworICAgICAgICAqQ2FsbCpG
b3J3YXJkVmFyYXJncyBub2Rlcy4gVGhlIHVzZXJzIG9mIHRoZXNlIHBoYW50b21zIGtub3cgaG93
IHRvIHByb2R1Y2UKKyAgICAgICAgd2hhdCB0aGUgcGhhbnRvbSBub2RlIHdvdWxkIGhhdmUgcHJv
ZHVjZWQuIEZvciBleGFtcGxlLCBOZXdBcnJheVdpdGhTcHJlYWQKKyAgICAgICAga25vd3MgaG93
IHRvIHByb2R1Y2UgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcm9kdWNlZCBieSBQ
aGFudG9tU3ByZWFkKEBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgYnkgZGlyZWN0bHkgcmVh
ZGluZyBmcm9tIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBp
cyBhIDYlIHNwZWVkdXAgb24gbXkgTUJQIG9uIEVTNlNhbXBsZUJlbmNoLgorCisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dHJ5QXBwZW5kTGVhKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6CisgICAgICAgICogYnVp
bHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbkV4ZWN1
dGFibGVzOjpjcmVhdGVEZWZhdWx0Q29uc3RydWN0b3IpOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICog
ZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpmb3JBbGxLaWxsc0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpiaXRWZWN0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRvbUFsbG9jYXRpb24pOgorICAgICAgICAq
IGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2Nh
bENsb2JiZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Okxvd2VyREZH
VG9CMyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld0FycmF5
V2l0aFNwcmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
Q2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGlu
ZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKToK
KyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAg
ICAgICAgKiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjplbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEds
b2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25NYXhBcmd1bWVu
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaXhlZEFycmF5Lmg6CisgICAgICAgIChKU0M6OkpT
Rml4ZWRBcnJheTo6Y3JlYXRlRnJvbUFycmF5KToKKwogMjAxNi0xMS0yNiAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbV1RGXSBJbXBvcnQgc3RkOjpv
cHRpb25hbCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYXMgV1RGOjpPcHRpb25hbApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwODk5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTAsNiArOTkwLDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRl
Kik7CiAjZW5kaWYKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxl
RnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwogI2VuZGlmCkBAIC0xMjQyLDYgKzEyNDQsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2FtcGxpbmdQcm9maWxlclN0YWNrVHJh
Y2VzIiwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIDApOwogI2VuZGlmCiAK
KyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYXhBcmd1bWVudHMiLCBmdW5jdGlvbk1heEFyZ3Vt
ZW50cywgMCk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVu
Y3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMjQ4NCw2ICsyNDg4LDExIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1
bWVudHMoRXhlY1N0YXRlKikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KEpTQzo6bWF4QXJndW1lbnRzKSk7Cit9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHN0
YXRpYyBKU1ZhbHVlIGJveChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB3YXNtVmFs
dWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjksNyArMTkyOSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAmJiBjYW5CZUludGVybmFsKHZhbHVlLT5jaGlsZCgwKSkKICAgICAgICAgICAgICYmIHZh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWRkKSB7CiAgICAgICAgICAgICBpbm5lckFkZCA9
IHZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHZhbHVlLT5jaGlsZCgxKS0+
YXNJbnQzMigpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFs
dWUtPmNoaWxkKDEpLT5hc0ludCgpKTsKICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxk
KDApOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZVJlcC5oCShyZXZpc2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGlj
dWxhciByZWdpc3RlciBhbmQgc3RhdGVzIHRoYXQKICAgICAgICAgLy8gdGhlIHJlZ2lzdGVyIGlz
IHVzZWQgbGF0ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSByZWdpc3RlciBpcyB1c2VkIGFmdGVyIHRo
ZSByZXN1bHQKICAgICAgICAgLy8gaXMgZGVmaW5lZCAoaS5lLCB0aGUgcmVzdWx0IHdpbGwgaW50
ZXJmZXJlIHdpdGggdGhpcyBhcyBhbiBpbnB1dCkuCi0gICAgICAgIC8vIEl0J3Mgbm90IHZhbGlk
IGZvciB0aGlzIHRvIGJlIHVzZWQgYXMgYSByZXN1bHQga2luZC4KKyAgICAgICAgLy8gSXQncyBu
b3QgdmFsaWQgb3V0cHV0IHJlcHJlc2VudGF0aW9uLgogICAgICAgICBMYXRlUmVnaXN0ZXIsCiAK
ICAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdo
YXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3Bw
CShyZXZpc2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVp
bHRpbkV4ZWN1dGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBCdWls
dGluRXhlY3V0YWJsZXM6OkJ1aWx0aW5FeGVjdXRhYmxlcyhWCiBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZhdWx0Q29uc3RydWN0b3IoQ29u
c3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBiYXNlQ29uc3RydWN0b3JD
b2RlKEFTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uICgpIHsgfSkiKSk7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZGVyaXZlZENvbnN0cnVjdG9yQ29kZShBU0NJSUxpdGVy
YWwoIihmdW5jdGlvbiAoKSB7IHN1cGVyKC4uLmFyZ3VtZW50cyk7IH0pIikpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUoQVND
SUlMaXRlcmFsKCIoZnVuY3Rpb24gKC4uLmFyZ3MpIHsgc3VwZXIoLi4uYXJncyk7IH0pIikpOwog
CiAgICAgc3dpdGNoIChjb25zdHJ1Y3RvcktpbmQpIHsKICAgICBjYXNlIENvbnN0cnVjdG9yS2lu
ZDo6Tm9uZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwODk5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTk3NSw2ICsxOTc1LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAg
ICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVz
dDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xv
YmJlcih0cnVlKTsgLy8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlz
IGNsYWltcyB0byByZXR1cm4gYm90dG9tLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHByaXZh
dGU6CiAgICAgLy8gSnVzdCBmaW5kcyBub2RlcyB0aGF0IHdlIGtub3cgaG93IHRvIHdvcmsgd2l0
aC4KICAgICB2b2lkIGlkZW50aWZ5Q2FuZGlkYXRlcygpCiAgICAgewotICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJl
Y3RBcmd1bWVudHM6CkBAIC0xMDksNiArMTA5LDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJl
YWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNo
ZWNrIEFycmF5VXNlIGhlcmUgYmVjYXVzZSBBcnJheVVzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRl
cmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3RvY29sIGZvciBBcnJheXMgaXMg
bm9uLW9ic2VydmFibGUgYnkgdXNlciBjb2RlIChlLmcsIGl0IGhhc24ndAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmVlbiBjaGFuZ2VkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQXJyYXlVc2UgJiYgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gQ3JlYXRlUmVzdCAmJiBtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRk
KG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2lu
dChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3Ig
PSBub2RlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
YWxsb3cgZm9yIFNwcmVhZHMgdG8gYmUgb2YgcmVzdCBub2RlcyBmb3Igbm93LgorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc09LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNP
SyA9IGNoaWxkLT5vcCgpID09IFNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gQ3Jl
YXRlUmVzdCAmJiBtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2hpbGQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPSykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgogICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHRoaXMgaWYgaXQgd2Fzbid0
IGZvciB0aGUgZmFjdCB0aGF0IHNjb3BlZCBhcmd1bWVudHMgYXJlCkBAIC0xMjYsNiArMTU4LDYy
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
Q2FuZGlkYXRlczogIiwgbGlzdER1bXAobV9jYW5kaWRhdGVzKSwgIlxuIik7CiAgICAgfQorCisg
ICAgYm9vbCBpc1N0aWxsVmFsaWRDYW5kaWRhdGUoTm9kZSogY2FuZGlkYXRlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjYW5kaWRhdGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBTcHJlYWQ6Cisg
ICAgICAgICAgICByZXR1cm4gbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZS0+Y2hpbGQx
KCkubm9kZSgpKTsKKworICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAg
ICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBjYW5kaWRhdGUtPmJpdFZlY3RvcigpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4o
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG1fZ3JhcGgudmFyQXJn
Q2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgcmVtb3Zl
SW52YWxpZENhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8
Tm9kZSosIDE+IHRvUmVtb3ZlOworCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6
IG1fY2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAgIGlmICghaXNTdGlsbFZhbGlkQ2FuZGlk
YXRlKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjYW5k
aWRhdGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9SZW1vdmUuc2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogdG9SZW1vdmUpCisgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRl
cy5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdl
ZCk7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoTm9kZSog
bm9kZSwgTm9kZSogc291cmNlID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGJvb2wgcmVtb3Zl
ZCA9IG1fY2FuZGlkYXRlcy5yZW1vdmUobm9kZSk7CisgICAgICAgIGlmIChyZW1vdmVkICYmIHZl
cmJvc2UgJiYgc291cmNlKQorICAgICAgICAgICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlk
YXRlOiAiLCBub2RlLCAiIGJlY2F1c2UgaXQgZXNjYXBlcyBmcm9tOiAiLCBzb3VyY2UsICJcbiIp
OworCisgICAgICAgIGlmIChyZW1vdmVkKQorICAgICAgICAgICAgcmVtb3ZlSW52YWxpZENhbmRp
ZGF0ZXMoKTsKKyAgICB9CiAgICAgCiAgICAgLy8gTG9vayBmb3IgZXNjYXBpbmcgc2l0ZXMsIGFu
ZCByZW1vdmUgZnJvbSB0aGUgY2FuZGlkYXRlcyBzZXQgaWYgd2Ugc2VlIGFuIGVzY2FwZS4KICAg
ICB2b2lkIGVsaW1pbmF0ZUNhbmRpZGF0ZXNUaGF0RXNjYXBlKCkKQEAgLTEzMyw5ICsyMjEsNyBA
QCBwcml2YXRlOgogICAgICAgICBhdXRvIGVzY2FwZSA9IFsmXSAoRWRnZSBlZGdlLCBOb2RlKiBz
b3VyY2UpIHsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtX2NhbmRpZGF0ZXMucmVtb3ZlKGVkZ2Uubm9k
ZSgpKTsKLSAgICAgICAgICAgIGlmIChyZW1vdmVkICYmIHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZygiZWxpbWluYXRpbmcgY2FuZGlkYXRlOiAiLCBlZGdlLm5vZGUoKSwgIiBiZWNh
dXNlIGl0IGVzY2FwZXMgZnJvbTogIiwgc291cmNlLCAiXG4iKTsKKyAgICAgICAgICAgIHRyYW5z
aXRpdmVseVJlbW92ZUNhbmRpZGF0ZShlZGdlLm5vZGUoKSwgc291cmNlKTsKICAgICAgICAgfTsK
ICAgICAgICAgCiAgICAgICAgIGF1dG8gZXNjYXBlQmFzZWRPbkFycmF5TW9kZSA9IFsmXSAoQXJy
YXlNb2RlIG1vZGUsIEVkZ2UgZWRnZSwgTm9kZSogc291cmNlKSB7CkBAIC0xODcsNiArMjczLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfTsKKworICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CkBAIC0yMDEs
MTEgKzI4OSw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAgIGVz
Y2FwZUJhc2VkT25BcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNoaWxkMSgpLCBu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIG5vdCBiZSBoYXJk
IHRvIHN1cHBvcnQgTmV3QXJyYXlXaXRoU3ByZWFkIGhlcmUgaWYgaXQgaXMgb25seSBvdmVyIFNw
cmVhZChDcmVhdGVSZXN0KSBub2Rlcy4KICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUt
PmNoaWxkMigpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBv
aW50ID0gbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpOyAK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNo
aWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZCA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGRvbnRFc2NhcGU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RXNjYXBlID0gY2hpbGQtPm9w
KCkgPT0gU3ByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNoaWxkLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gQXJyYXlVc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZVJlc3QKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2lu
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbnRFc2NhcGUgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFkb250RXNjYXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShjaGlsZCwg
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIFNwcmVhZDogewor
ICAgICAgICAgICAgICAgICAgICBib29sIGlzT0sgPSBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQXJyYXlVc2UgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQ3JlYXRlUmVzdDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
KG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNh
c2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKS0+b2Zmc2V0ICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNw
cmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtMjE0LDYgKzMzMyw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOworICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCktPmZpcnN0VmFyQXJnT2Zmc2V0ICYm
IG5vZGUtPmNoaWxkMygpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKSwgbm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVjazoKQEAgLTI2Myw2ICsz
ODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
LmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0
dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxB
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMzkwLDcgKzUxNSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gYmxvY2stPnNpemUoKSAmJiBjYW5kaWRhdGUt
Pm93bmVyICE9IGJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRh
dGU6ICIsIGNhbmRpZGF0ZSwgIiBiZWNhdXNlIGl0IGlzIGNsb2JiZXJlZCBieTogIiwgYmxvY2st
PmF0KG5vZGVJbmRleCksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRh
dGVzLnJlbW92ZShjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGl2
ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00
MTcsNyArNTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3Vu
ZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIs
IGNhbmRpZGF0ZSwgIiBiZWNhdXNlIGl0IGlzIGNsb2JiZXJlZCBieSAiLCBibG9jay0+YXQobm9k
ZUluZGV4KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVz
LnJlbW92ZShjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRp
dmVseVJlbW92ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtNDYwLDEwICs1ODUsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgdHJhdmVyc2UgaW4gc3VjaCBhIHdheSB0aGF0IHdlIGFyZSBndWFyYW50ZWVkIHRvIHNl
ZSBhIGRlZiBiZWZvcmUgYSB1c2UuCiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwg
d2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSB0cmFuc2Zvcm1lZCB0aGUgYWxsb2NhdGlvbiBiZWZvcmUg
dGhlIHVzZQogICAgICAgICAgICAgICAgICAgICAvLyBvZiBhbiBhbGxvY2F0aW9uLgotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0
IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGNhbmRpZGF0
ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBjYW5kaWRhdGUt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhh
bnRvbUNsb25lZEFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgfHwgY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21TcHJlYWQgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAKKwogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKQEAgLTQ4
OCw2ICs2MTQsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21DbG9uZWRBcmd1bWVu
dHMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
U3ByZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0
RnJvbUFyZ3VtZW50czogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CkBAIC01OTksOTQgKzczOSwxODUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIg
YmUgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOwotICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+b2Zmc2V0ICs9IG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICBhdXRvIHN0b3JlQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBbJl0gKHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGlu
dCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhp
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUs
IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9y
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
dmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkNvbnZlcnRU
b1N0YXRpY0xvYWRTdG9yZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgQml0VmVj
dG9yKiBiaXRWZWN0b3IgPSBjYW5kaWRhdGUtPmJpdFZlY3RvcigpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5n
ZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBj
aGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNo
aWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5Db252ZXJ0VG9TdGF0aWNMb2FkU3RvcmVzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSAxOyAvLyB8dGhpc3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCAmJiBjaGls
ZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
aGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3ByZWFkQXJn
dW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJh
bWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291
bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHMgPSBmcmFtZUFyZ3VtZW50Q291
bnQgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1iZXJPZlNwcmVhZEFyZ3VtZW50cyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICs9IG51bWJlck9mU3ByZWFkQXJn
dW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2Rl
LT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkV4
aXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92
SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBF
ZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndp
dGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNo
ZWRJbnQzMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBs
aW1pdCB0byBleGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFz
b24gYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2
YXJhcmdzRGF0YS0+bGltaXQgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHVuZGVmaW5lZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlm
IHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4
ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5t
YW5kYXRvcnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYgd2Ug
ZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29t
ZXRoaW5nIHRoYXQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIFB1dFN0YWNrcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0g
dmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0
J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRp
ZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlk
YXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQgJiYgY2hpbGQtPmNoaWxkMSgpLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGls
ZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxk
LT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7IGxvYWRJbmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2Fk
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCAr
IDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0
T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8oZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdG9yZVZhbHVlKHZhbHVlLCBzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUs
IHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
c3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JlSW5kZXggPD0gbGltaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3Jl
SW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZp
bmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVk
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZp
bmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh1bmRl
ZmluZWQsIHN0b3JlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwg
RWRnZSh2YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRn
ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBj
YW5FeGl0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVz
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZz
ZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEt
PmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFy
YXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3Mg
YSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBz
dG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3
ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5k
ZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9h
ZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywg
bm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBp
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlSW5kZXgg
Pj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3aWxsIHN0aWxsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4g
dGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGRlZ2VuZXJhdGUgSVI6IHdl
J2xsIGhhdmUgR2V0U3RhY2tzIG9mIHNvbWV0aGluZyB0aGF0IGRpZG4ndAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53
aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3Rv
cmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHZh
bHVlLCBzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
CisKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2Fy
ZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkBAIC02OTgsMjcgKzkyOSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEq
IHZhcmFyZ3NEYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcDsKIAotICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1
bWVudHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgdmFy
YXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbHVzaGVkSlNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
R2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRUb1N0YXRpY0FyZ3VtZW50Q291
bnRDYWxsID0gWyZdIChjb25zdCBWZWN0b3I8Tm9kZSo+JiBhcmd1bWVudHMpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLmFwcGVuZChub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKG5vZGUtPmNoaWxkMigpKTsKQEAgLTc0Mywy
NSArOTU1LDk3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbiA9IEFkamFjZW5jeUxpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRqYWNl
bmN5TGlzdDo6VmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGls
ZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRUb0Zvcndh
cmRzQ2FsbCA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbEZv
cndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzSW5saW5lZENhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDYWxsVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3Ry
dWN0Rm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50
b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
VHJhbnNmb3JtVG9TdGF0aWNBcmd1bWVudENvdW50Q2FsbCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlk
YXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50
b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+
Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNo
aWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5U
cmFuc2Zvcm1Ub1N0YXRpY0FyZ3VtZW50Q291bnRDYWxsID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhblRyYW5zZm9ybVRvU3Rh
dGljQXJndW1lbnRDb3VudENhbGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Tm9kZSo+IGFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEo
KS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsg
aSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9n
cmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2Rl
LT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dFRvU3RhdGljQXJndW1lbnRDb3VudENhbGwoYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0Zvcndh
cmRzQ2FsbCgpOworCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJn
T2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1bWVudENvdW50Q2FsbChhcmd1bWVudHMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydFRvRm9yd2FyZHNDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDIwODk5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiArNDc4LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAg
ICAgICByZXR1cm47CiAKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAg
IC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhhbnRvbSwgaXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0
aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNlZCB3aXRoIGFub3RoZXIuCiAgICAgICAgIHJlYWQoSGVh
cE9iamVjdENvdW50KTsKQEAgLTExMzAsNiArMTEzMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKICAg
ICAgICAgLy8gVGhpcyBhbHNvIHJlYWRzIGZyb20gSlNGaXhlZEFycmF5J3MgZGF0YSBzdG9yZSwg
YnV0IHdlIGRvbid0IGhhdmUgYW55IHdheSBvZiBkZXNjcmliaW5nIHRoYXQgeWV0LgogICAgICAg
ICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgaWYgKGNoaWxk
LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICByZWFkKFN0YWNrKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA4OTkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDgsNiArMjQ4LDggQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKICAgICBjYXNl
IFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA4OTkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQzOSw2ICsxNDM5LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAg
ICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6
CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHJldmlzaW9uIDIwODk5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIGZv
ciAoTm9kZSogbm9kZSA6IGNvbWJpbmVkTGl2ZW5lc3MubGl2ZUF0VGFpbFtibG9ja10pCiAgICAg
ICAgIGZ1bmN0b3IoYmxvY2stPnNpemUoKSwgbm9kZSk7CiAgICAgCi0gICAgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yIGxvY2FsQXZhaWxhYmlsaXR5OworICAgIExvY2FsT1NSQXZhaWxh
YmlsaXR5Q2FsY3VsYXRvciBsb2NhbEF2YWlsYWJpbGl0eShncmFwaCk7CiAgICAgbG9jYWxBdmFp
bGFiaWxpdHkuYmVnaW5CbG9jayhibG9jayk7CiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBu
b2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2Rl
cyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4
Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5v
dGhpbmcgdG8gZG8uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DbG9u
ZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAg
ICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhl
IGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3
aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBh
IHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NzMsNyArNDcyLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50
b21DbG9uZWRBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkgeworICAgICAg
ICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNs
b25lZEFyZ3VtZW50cykgewogICAgICAgICAgICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUg
ZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwg
d2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBh
IG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBG
cm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIHB1Ymxp
YzoKIAogICAgIEJpdFZlY3RvciogYml0VmVjdG9yKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChv
cCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgIEFTU0VSVChvcCgpID09IE5ld0Fy
cmF5V2l0aFNwcmVhZCB8fCBvcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8Qml0VmVjdG9yKj4oKTsKICAgICB9CiAKQEAgLTE3Njks
NiArMTc2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAg
ICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50
b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDIwODk5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDYgKzM0NSw4IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDcmVhdGVEaXJlY3RBcmd1bWVu
dHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21EaXJlY3RBcmd1bWVudHMsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tQ3JlYXRl
UmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50
b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhDcmVhdGVTY29wZWRBcmd1bWVudHMsIE5v
ZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENyZWF0ZUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkg
cHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAotICAgICAg
ICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKKyAgICAgICAgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGNhbGN1bGF0b3IobV9ncmFwaCk7CiAgICAgICAg
IGJvb2wgY2hhbmdlZDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OwpAQCAtMTA1LDcgKzEwNSw4IEBAIGJvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
KEdyYXAKICAgICByZXR1cm4gcnVuUGhhc2U8T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4o
Z3JhcGgpOwogfQogCi1Mb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcigpCitMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6Okxv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcihHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBo
KGdyYXBoKQogewogfQogCkBAIC0xNjQsNyArMTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJp
bGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICAgICAgCisgICAgCiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50
b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBA
IC0yMDgsNiArMjA5LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpl
eGUKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKFNwcmVhZFBMb2Ms
IG5vZGUpLCBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOwor
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlv
bihOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBBdmFpbGFiaWxpdHko
Y2hpbGQpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24g
MjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBwZXJm
b3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcAogLy8gaGF2aW5nIHJ1biB0aGUgYXZhaWxh
YmlsaXR5IGFuYWx5c2lzLgogY2xhc3MgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIHsK
IHB1YmxpYzoKLSAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKKyAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoR3JhcGgmKTsKICAgICB+TG9jYWxPU1JBdmFpbGFi
aWxpdHlDYWxjdWxhdG9yKCk7CiAgICAgCiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sq
KTsKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSop
OwogICAgIAogICAgIEF2YWlsYWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0eTsKKyAgICBHcmFwaCYg
bV9ncmFwaDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBQbGFjZSBQaGlz
IGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0
aGUgYXBwcm9wcmlhdGUKICAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIG1hdGVyaWFs
aXphdGlvbiBub2Rlcy4KLSAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yKG1fZ3JhcGgpOwogICAgICAgICBtX2dyYXBoLmNs
ZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICAgICAgbV9oZWFwID0gbV9oZWFwQXRI
ZWFkW2Jsb2NrXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg5OTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA2LDQxICsxMDYsNzUgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlYWRU
b3AoKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0
T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgot
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6IHsKLQotICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5oYXNBcmd1
bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKLSAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7Ci0g
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25v
ZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUaGUgdmFsdWUgb2YgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgZ3VhcmFudGVlcyB0
aGF0IEdldE15QXJndW1lbnRCeVZhbCogd2lsbCBuZXZlcgotICAgICAgICAgICAgICAgIC8vIHJl
YWQgYW55IGFyZ3VtZW50cyBiZWxvdyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLiBG
b3IgZXhhbXBsZSwgaWYgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgaXMgMiwKLSAgICAgICAgICAg
ICAgICAvLyB3ZSB3aWxsIG5ldmVyIHJlYWQgYXJndW1lbnQgMCBvciBhcmd1bWVudCAxLgotICAg
ICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gbV9ub2RlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgfQotCisgICAgICAgIGF1dG8gcmVhZEZyYW1l
ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApIHsKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cyBhbmQgYXJn
dW1lbnQgY291bnQuCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZ3JhcGgubV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7IGkrKykKICAgICAgICAgICAgICAgICAgICAgbV9y
ZWFkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKICAgICAgICAgICAgICAgICBtX3Jl
YWQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsg
aSsrKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNldCgp
KSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAg
ICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgYXV0byByZWFkTmV3QXJyYXlXaXRoU3ByZWFkTm9kZSA9IFsmXSAoTm9kZSogYXJyYXlX
aXRoU3ByZWFkKSB7CisgICAgICAgICAgICBBU1NFUlQoYXJyYXlXaXRoU3ByZWFkLT5vcCgpID09
IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcnJheVdpdGhTcHJlYWQtPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFy
cmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lKGlubGluZUNhbGxGcmFt
ZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGJvb2wg
aXNGb3J3YXJkaW5nTm9kZSA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkg
eworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAgICAgaXNGb3J3YXJkaW5nTm9kZSA9IHRy
dWU7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWw6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6IHsKKwor
ICAgICAgICAgICAgaWYgKGlzRm9yd2FyZGluZ05vZGUgJiYgbV9ub2RlLT5oYXNBcmd1bWVudHND
aGlsZCgpICYmIG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0No
aWxkKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAg
ICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgcmVhZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUoYXJyYXlXaXRo
U3ByZWFkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFz
QXJndW1lbnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdl
dE15QXJndW1lbnRCeVZhbCB8fCBtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0
T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwIGd1YXJhbnRlZXMgdGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwg
bmV2ZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBhbnkgYXJndW1lbnRzIGJlbG93IHRo
ZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAuIEZvciBleGFtcGxlLCBpZiBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCBpcyAyLAorICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVy
IHJlYWQgYXJndW1lbnQgMCBvciBhcmd1bWVudCAxLgorICAgICAgICAgICAgICAgICAgICBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZWFkRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlIE5ld0FycmF5
V2l0aFNwcmVhZDogeworICAgICAgICAgICAgcmVhZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUobV9u
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
Miw2ICsxMDEyLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZh
dGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNl
IFBoYW50b21DcmVhdGVSZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAg
IGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZp
c2lvbiAyMDg5OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxNCBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvCiAgICAgY2FzZSBWZWN0b3JMZW5ndGhQ
TG9jOgogICAgICAgICBvdXQucHJpbnQoIlZlY3Rvckxlbmd0aFBMb2MiKTsKICAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBTcHJlYWRQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlNwcmVhZFBM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1
bWVudFBMb2M6CisgICAgICAgIG91dC5wcmludCgiTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQ
TG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwODk5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsOSBAQCBlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKICAgICBOYW1l
ZFByb3BlcnR5UExvYywKICAgICBQdWJsaWNMZW5ndGhQTG9jLAogICAgIFN0cnVjdHVyZVBMb2Ms
Ci0gICAgVmVjdG9yTGVuZ3RoUExvYworICAgIFZlY3Rvckxlbmd0aFBMb2MsCisgICAgU3ByZWFk
UExvYywKKyAgICBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MsCiB9OwogCiBjbGFzcyBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA4OTkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
MCw2ICszNjAsOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNl
IFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMjA4OTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxNiw2ICs1NjE2LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgInVuZXhwZWN0ZWQgbm9kZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwODk5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NDAs
NiArNTg0MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJV
bmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwODk5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTMsNiArNjkzLDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlKSwgbm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbUFsbG9jYXRpb24oKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFk
OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQg
UGhhbnRvbVNwcmVhZCBvdmVyIFBoYW50b21DcmVhdGVSZXN0LgorICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVS
ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCBtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAgICAgICAgICAgICBC
aXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rv
ci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5
IG9ubHkgc3VwcG9ydCBQaGFudG9tU3ByZWFkIG92ZXIgUGhhbnRvbUNyZWF0ZVJlc3QuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBjaGlsZC0+b3AoKSA9PSBQ
aGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIWNoaWxkLT5pc1BoYW50b21BbGxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlX
aXRoU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0g
bm9kZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUGhhbnRvbUFsbG9jYXRpb24oKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgYml0VmVjdG9y
LT5nZXQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
bV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksIGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIwODk5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1h
dGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVu
dHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6
CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNs
b25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4OTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAg
ICAgICAgICwgbV9vdXQoc3RhdGUpCiAgICAgICAgICwgbV9wcm9jKCpzdGF0ZS5wcm9jKQorICAg
ICAgICAsIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcihtX2dyYXBoKQogICAgICAgICAsIG1fc3Rh
dGUoc3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9z
dGF0ZSkKICAgICB7CkBAIC0xMDg2LDYgKzEwODcsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhh
bnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoK
ICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAgLTQzMjgsNiArNDMzMSw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQo
bV9ub2RlKSkgewogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogICAgICAg
ICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBtX25vZGUtPmJpdFZlY3RvcigpOworICAgICAg
ICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8
SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNh
bGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOworCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWJpdFZlY3Rvci0+Z2V0KGkpKQogICAgICAgICAgICAgICAgICAgICArK3N0YXJ0
TGVuZ3RoOwpAQCAtNDMzOCw4ICs0MzQzLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAg
RWRnZSB1c2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSBmaXhlZEFycmF5ID0gbG93Q2VsbCh1c2UpOwotICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5sb2FkMzIoZml4ZWRBcnJheSwg
bV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNl
LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1
c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNo
aWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGlu
ZUNhbGxGcmFtZSwgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5n
dGgsIHNwcmVhZExlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmxvYWQz
MihmaXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTQzNTIsNDIg
KzQzNjcsODQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX25vZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgdXNl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIGkpOwogICAgICAgICAgICAgICAgIGlmIChi
aXRWZWN0b3ItPmdldChpKSkgewotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29w
U3RhcnQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodXNlLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
OworICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSB1c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1
c2UtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRM
ZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExW
YWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApOworCisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbG9hZEluZGV4U3RhcnQgPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlz
aCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGZp
eGVkQXJyYXkgPSBsb3dDZWxsKHVzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvNjQobGVuZ3Ro
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGxvb3BTdGFydCkpOwogCi0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZp
eGVkSW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydCA9IG1fb3V0LmFu
Y2hvcihpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5k
ZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwg
Y29udGludWF0aW9uKTsKIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheVNp
emUgPSBtX291dC56ZXJvRXh0UHRyKG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpT
Rml4ZWRBcnJheV9zaXplKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYXJyYXlJ
bmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBhcnJheUluZGV4U3RhcnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGxvYWRJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlw
ZSgpLCBsb2FkSW5kZXhTdGFydCk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvNjQoZml4ZWRBcnJheVNpemUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShs
b29wU3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBpdGVtID0gbV9vdXQu
bG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGxv
YWRJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChpdGVtLCBt
X291dC5iYXNlSW5kZXgobV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIHN0b3Jh
Z2UsIGFycmF5SW5kZXgpKTsKIAotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0QXJyYXlJbmRleCA9IG1fb3V0LmFkZChhcnJheUlu
ZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFs
dWUgbmV4dExvYWRJbmRleCA9IG1fb3V0LmFkZChsb2FkSW5kZXgsIG1fb3V0LmNvbnN0SW50UHRy
KDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhM
b29wRm9yRmluaXNoID0gbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KTsKIAotICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgYXJyYXlJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBh
cnJheUluZGV4U3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheUlu
ZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGZpeGVkSW5kZXhTdGFydCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGxvYWRJbmRleCwgbV9vdXQu
YW5jaG9yKG5leHRMb2FkSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFk
ZEluY29taW5nVG9QaGkoYXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7
CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQu
YmFzZUluZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4ZWRB
cnJheUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwgbV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9yYWdl
LCBhcnJheUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYmVsb3cobmV4dExvYWRJbmRleCwgbGVu
Z3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwogCi0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0QXJy
YXlJbmRleCA9IG1fb3V0LmFkZChhcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0Rml4ZWRBcnJheUluZGV4ID0gbV9vdXQuYWRk
KGZpeGVkQXJyYXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOwotICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFuY2hv
cihuZXh0QXJyYXlJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJy
YXlJbmRleExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhl
ZEFycmF5ID0gbG93Q2VsbCh1c2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmaXhlZEluZGV4U3RhcnQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIo
MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShmaXhlZEFycmF5
SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0Rml4ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoYXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5l
eHRBcnJheUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJh
eVNpemUgPSBtX291dC56ZXJvRXh0UHRyKG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBz
LkpTRml4ZWRBcnJheV9zaXplKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYmVsb3cobmV4dEZpeGVkQXJyYXlJbmRl
eCwgZml4ZWRBcnJheVNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvb3BT
dGFydCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChm
aXhlZEFycmF5U2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRp
bnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNo
LCBhcnJheUluZGV4TG9vcEZvckZpbmlzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGFycmF5SW5kZXggPSBtX291dC5w
aGkocG9pbnRlclR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIExWYWx1ZSBmaXhlZEFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZml4
ZWRJbmRleFN0YXJ0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBt
X291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwg
Zml4ZWRBcnJheSwgZml4ZWRBcnJheUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5zdG9yZTY0KGl0ZW0sIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmluZGV4ZWRDb250aWd1
b3VzUHJvcGVydGllcywgc3RvcmFnZSwgYXJyYXlJbmRleCkpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBMVmFsdWUgbmV4dEFycmF5SW5kZXggPSBtX291dC5hZGQoYXJyYXlJbmRleCwgbV9v
dXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRG
aXhlZEFycmF5SW5kZXggPSBtX291dC5hZGQoZml4ZWRBcnJheUluZGV4LCBtX291dC5jb25zdElu
dFB0cigxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUlu
ZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoZml4ZWRBcnJheUluZGV4
LCBtX291dC5hbmNob3IobmV4dEZpeGVkQXJyYXlJbmRleCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShhcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4
dEFycmF5SW5kZXgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJlbG93KG5leHRGaXhlZEFycmF5SW5k
ZXgsIGZpeGVkQXJyYXlTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUo
bG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhT
dGFydEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgSW5k
ZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0
aWVzOwogICAgICAgICAgICAgICAgICAgICBMVmFsdWUgaXRlbSA9IGxvd0pTVmFsdWUodXNlKTsK
QEAgLTQ0MjUsNiArNDQ4MiwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU3ByZWFk
KCkKICAgICB7CisgICAgICAgIC8vIEl0IHdvdWxkIGJlIHRyaXZpYWwgdG8gc3VwcG9ydCB0aGlz
LCBidXQgZm9yIG5vdywgd2UgbmV2ZXIgY3JlYXRlCisgICAgICAgIC8vIElSIHRoYXQgd291bGQg
bmVjZXNzaXRhdGUgdGhpcy4gVGhlIHJlYXNvbiBpcyB0aGF0IFNwcmVhZCBpcyBvbmx5CisgICAg
ICAgIC8vIGNvbnN1bWVkIGJ5IE5ld0FycmF5V2l0aFNwcmVhZCBhbmQgbmV2ZXIgYW55dGhpbmcg
ZWxzZS4gQWxzbywgYW55CisgICAgICAgIC8vIFNwcmVhZChQaGFudG9tQ3JlYXRlUmVzdCkgd2ls
bCB0dXJuIGludG8gUGhhbnRvbVNwcmVhZChQaGFudG9tQ3JlYXRlUmVzdCkuCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
OyAKKwogICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CkBAIC02MTI4LDYgKzYxOTEsMjczIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9y
Q29uc3RydWN0VmFyYXJnc1NwcmVhZCgpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9u
b2RlOworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIo
KSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9
IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKKyAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBh
cnJheVdpdGhTcHJlYWQtPmJpdFZlY3RvcigpOworICAgICAgICB1bnNpZ25lZCBudW1Ob25TcHJl
YWRQYXJhbWV0ZXJzID0gMDsKKyAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3Ro
czsKKyAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gcGF0Y2hwb2ludEFyZ3VtZW50czsKKyAgICAg
ICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5s
aW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxG
cmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFk
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gc3ByZWFkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgbGVuZ3RoID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5s
aW5lQ2FsbEZyYW1lLCBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQu
emVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKKyAgICAgICAgICAgICAgICB9KS5pdGVy
YXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50cy5hcHBlbmQo
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK251bU5vblNwcmVhZFBhcmFt
ZXRlcnM7CisgICAgICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX2dy
YXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkpOworICAgICAgICAgICAgICAgIHBh
dGNocG9pbnRBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIExWYWx1ZSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmNvbnN0SW50UHRyKG51bU5vblNwcmVhZFBhcmFtZXRlcnMgKyAxKTsKKyAgICAgICAgZm9yIChM
VmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVuZ3RocykKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2Fs
bGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJlcDo6V2FybUFueSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVmFsdWVSZXA6Oldhcm1BbnkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3JXaXRoUmVwKHBhdGNocG9pbnRBcmd1bWVu
dHMsIFZhbHVlUmVwOjpXYXJtQW55KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFn
TWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNl
cHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0
ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7IC8vIE5vIGlu
cHV0cyB3aWxsIGJlIGluIGEgdm9sYXRpbGUgcmVnaXN0ZXIuCisgICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAwOworCisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFyZWEgc3Rh
Y2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpTIGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAgICB1bnNp
Z25lZCBtaW5pbXVtSlNDYWxsQXJlYVNpemUgPQorICAgICAgICAgICAgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsKKyAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgICAgICBt
X3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFyZWFTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5E
ZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisg
ICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVu
d2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2so
KS0+YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAg
IHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JK
U0NhbGwoKSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sxXS5n
cHIoKTsKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworCisg
ICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJl
dXNlZFJlZ2lzdGVycygpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9tUmVw
ID0gWyZdIChCMzo6VmFsdWVSZXAgcmVwLCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQocmVzdWx0KSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlcC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6SW1tNjQocmVwLnZhbHVlKCkpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTm90ZTogaW4gdGhpcyBmdW5jdGlvbiwgd2Ugb25seSByZXF1
ZXN0IDY0IGJpdCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXAuaXNTdGFjaygp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgcmVwLm9mZnNldEZyb21GUCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwLmlzR1BSKCkp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodXNlZFJlZ2lzdGVycy5nZXQocmVwLmdwcigp
KSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5v
cm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZd
IChHUFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5m
cmFtZVNpemUoKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtVXNlZFNsb3RzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50UmVnaXN0ZXJzKCksIG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzUmVwID0gcGFyYW1zWzNdOworICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZy
b21SZXAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNSZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhB
cmd1bWVudHMgKyAxKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6
ZV90PihudW1Vc2VkU2xvdHMgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykpLCBz
Y3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMg
dGhlIHJlcXVpcmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gUm91bmQgc2NyYXRjaEdQUjEgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpCisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNo
R1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIofihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAg
ICAgICAgICAgICBqaXQubHNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc2NyYXRjaEdQUjEpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
ICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgICAgIGludCBzdG9yZU9mZnNl
dCA9IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IDQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRlLT5ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJl
YWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFy
Z3VtZW50c1RvQ29weSA9IHBhcmFtc1twYXJhbXNPZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAobnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNo
R1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNz
ZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBsb29wU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRp
Y19jYXN0PHNpemVfdD4oMSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlciwgc2NyYXRjaEdQUjMsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgbG9hZE9m
ZnNldCksIHNjcmF0Y2hHUFI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoR1BSNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlu
a1RvKGxvb3BTdGFydCwgJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldFZhbHVlRnJvbVJlcChwYXJhbXNbcGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0
Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNo
R1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQs
IHN0b3JlT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0
V2l0aFJlYXNvbihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZG9udFRocm93LmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQ
UjEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIg
PT0gR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQ
UiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CisgICAgICAgICAgICAgICAgZ2V0VmFsdWVGcm9tUmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6
OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0
Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxD
YWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9y
KGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRo
UGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUklu
Zm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoaXNUYWlsQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOworICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAg
ICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRo
UmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9y
aWdpbmFsU3RhY2tIZWlnaHQpLAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNs
b3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRj
aHBvaW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9p
ZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCiAgICAgewogICAgICAgICBOb2RlKiBu
b2RlID0gbV9ub2RlOwpAQCAtNjE1NCw2ICs2NDg0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcndhcmRpbmcgJiYgbV9ub2RlLT5j
aGlsZDMoKSAmJiBtX25vZGUtPmNoaWxkMygpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQpIHsKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFk
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICAKICAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CiAK
QEAgLTY1MjcsNiArNjg2MywxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUZv
cndhcmRWYXJhcmdzKCkKICAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpICYmIG1f
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAg
ICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9u
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWU7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQpAQCAtNjYxNSw2ICs2OTU2
LDEzNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICB9CiAKKyAgICBMVmFsdWUgZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNh
bGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCisgICAgeworICAgICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1l
bnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
IGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgeworICAgICAgICAgICAgdW5zaWduZWQga25v
d25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247CisgICAgICAgICAgICBpZiAoa25vd25M
ZW5ndGggPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICAgICAga25vd25M
ZW5ndGggPSBrbm93bkxlbmd0aCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsKKyAgICAgICAgfQorCisKKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRo
ZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCisgICAgICAgIGlm
ICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRz
TGVuZ3RoLnZhbHVlOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291
dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciks
IHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVu
dHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBo
aShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKKyAg
ICB7CisgICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1
bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJ
bmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKKworICAgICAgICBOb2RlKiBh
cnJheVdpdGhTcHJlYWQgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJyYXlXaXRoU3ByZWFkLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpOworICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0
VmVjdG9yKCk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAw
OworICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFu
dG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWU7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IGNhY2hlZFNwcmVhZExlbmd0aHMu
ZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBj
aGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOworICAgICAgICAgICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFw
cGVuZChsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKytudW1i
ZXJPZlN0YXRpY0FyZ3VtZW50czsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVu
dHMpOworICAgICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQorICAgICAg
ICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlz
LCBsZW5ndGgpOworCisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZv
cihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKworICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBh
ZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKKyAgICAgICAgTFZhbHVlIHN0
b3JlSW5kZXggPSBtX291dC5jb25zdEludFB0cigwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3Vt
ZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCgpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9v
dXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsK
KworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRMb2FkSW5kZXggPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHN0YXJ0U3RvcmVJbmRleCA9IG1fb3V0LmFuY2hvcihzdG9yZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydFN0b3JlSW5kZXhGb3JFbmQgPSBtX291dC5h
bmNob3Ioc3RvcmVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
aXNaZXJvNjQoc3ByZWFkTGVuZ3RoKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29w
KSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGxvb3AsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxvb3BTdG9y
ZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFydFN0b3JlSW5kZXgpOworICAgICAgICAgICAg
ICAgIExWYWx1ZSBsb2FkSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0TG9hZEluZGV4KTsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5sb2FkNjQoCisgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQs
IGxvYWRJbmRleCkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0
LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGxvb3BTdG9yZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRMb2FkSW5kZXggPSBtX291dC5hZGQobV9v
dXQuY29uc3RJbnRQdHIoMSksIGxvYWRJbmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShsb2FkSW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0TG9hZEluZGV4KSk7Cisg
ICAgICAgICAgICAgICAgTFZhbHVlIG5leHRTdG9yZUluZGV4ID0gbV9vdXQuYWRkKG1fb3V0LmNv
bnN0SW50UHRyKDEpLCBsb29wU3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShsb29wU3RvcmVJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRTdG9yZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbG9vcFN0b3JlSW5kZXhGb3JFbmQg
PSBtX291dC5hbmNob3IobmV4dFN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5iZWxvdyhuZXh0TG9hZEluZGV4LCBzcHJlYWRMZW5ndGgpLCB1bnN1cmUobG9v
cCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIHN0b3JlSW5kZXgg
PSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleEZvckVuZCwgbG9vcFN0b3JlSW5kZXhG
b3JFbmQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgc3RvcmVJbmRleCkpOworICAgICAgICAgICAg
ICAgIHN0b3JlSW5kZXggPSBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoMSksIHN0b3JlSW5k
ZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5k
ZWZpbmVkTG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3Rh
cnRTdG9yZUluZGV4ID0gbV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgpOworICAgICAgICBMVmFsdWUg
bG9vcEJvdW5kVmFsdWUgPSBtX291dC5jb25zdEludFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVt
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KHN0b3JlSW5kZXgsIGxvb3BCb3Vu
ZFZhbHVlKSwKKyAgICAgICAgICAgIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8odW5kZWZpbmVkTG9vcCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGxvb3BTdG9y
ZUluZGV4ID0gbV9vdXQucGhpKEludDY0LCBzdGFydFN0b3JlSW5kZXgpOworICAgICAgICBtX291
dC5zdG9yZTY0KAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLAorICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFy
aWFibGVzLCB0YXJnZXRTdGFydCwgbG9vcFN0b3JlSW5kZXgpKTsKKyAgICAgICAgTFZhbHVlIG5l
eHRJbmRleCA9IG1fb3V0LmFkZChsb29wU3RvcmVJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkp
OworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGxvb3BTdG9yZUluZGV4LCBtX291dC5h
bmNob3IobmV4dEluZGV4KSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1f
b3V0LmJlbG93KG5leHRJbmRleCwgbG9vcEJvdW5kVmFsdWUpLCB1bnN1cmUodW5kZWZpbmVkTG9v
cCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAg
ICB7CiAgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YXJnZXRCbG9jaygpKSk7
CkBAIC05NDkyLDcgKzk5NjIsNyBAQCBwcml2YXRlOgogICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gRWZmZWN0czo6Zm9yQ2FsbCgpOwogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQp
OwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0
KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiAgICAgewogICAgICAgICBMVmFsdWUg
cmlnaHRDZWxsID0gbG93Q2VsbChyaWdodENoaWxkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4OTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpT
QXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0Zp
eGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKIApAQCAtODYsNiArODcsOCBAQCBleHRlcm4gIkMiIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIC8vIFRob3NlIGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQg
Ynkgb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUgogICAgICAgICBicmVhazsKIApAQCAt
MzkzLDE0ICszOTYsMTAyIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGkKICAgICAgICAgICAgICAgICBBU1NFUlQoZm91bmQpOwogICAgICAgICAgICAgfQogI2VuZGlm
Ci0KICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQorCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBoYW50b21T
cHJlYWQ6IHsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBudWxscHRyOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVy
aWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYgKHByb3BlcnR5Lmxv
Y2F0aW9uKCkua2luZCgpID09IFNwcmVhZFBMb2MpIHsKKyAgICAgICAgICAgICAgICBhcnJheSA9
IGpzQ2FzdDxKU0FycmF5Kj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFycmF5KTsKKworICAgICAgICAvLyBOb3RlOiBpdCBpcyBzb3VuZCBmb3IgSlNGaXhl
ZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkgdG8gY2FsbCBnZXREaXJlY3RJbmRleCBoZXJlCisgICAg
ICAgIC8vIGJlY2F1c2Ugd2UncmUgZ3VhcmFudGVlZCB3ZSB3b24ndCBiZSBjYWxsaW5nIGFueSBn
ZXR0ZXJzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzCisgICAgICAgIC8vIHRoYXQgd2Ugb25seSBz
dXBwb3J0IFBoYW50b21TcHJlYWQgb3ZlciBDcmVhdGVSZXN0LCB3aGljaCBpcyBhbiBhcnJheSB3
ZSBjcmVhdGUuCisgICAgICAgIC8vIEFueSBhdHRlbXB0cyB0byBwdXQgYSBnZXR0ZXIgb24gYW55
IGluZGljZXMgb24gdGhlIHJlc3QgYXJyYXkgd2lsbCBlc2NhcGUgdGhlIGFycmF5LgorICAgICAg
ICBKU0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBKU0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJh
eShleGVjLCB2bSwgYXJyYXkpOworICAgICAgICByZXR1cm4gZml4ZWRBcnJheTsKKyAgICB9CisK
KyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6IHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJs
b2NrKCkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhDb250aWd1b3VzKTsKKworICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSAwOworICAg
ICAgICB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24t
PnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtp
bmQoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MpIHsKKyAgICAgICAgICAgICAg
ICArK251bVByb3BlcnRpZXM7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZSh2YWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChKU0ZpeGVkQXJyYXkq
IGZpeGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTRml4ZWRBcnJheSo+KHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgYXJyYXlTaXplICs9IGZpeGVkQXJyYXktPnNpemUoKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFycmF5U2l6ZSArPSAxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAg
ICAvLyBFbnN1cmUgd2Ugc2VlIGluZGljZXMgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlOiBb
MCwgbnVtUHJvcGVydGllcykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGll
cygpLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFs
dWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbal07CisgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IE5ld0FycmF5V2l0aFNw
cmVhZEFyZ3VtZW50UExvYyAmJiBwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKSA9PSBpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJU
KGZvdW5kKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgVmVjdG9yPEpTVmFsdWUsIDg+
IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmdyb3cobnVtUHJvcGVydGllcyk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVy
dHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBM
b2MpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlc1tpXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkubG9jYXRp
b24oKS5pbmZvKCkgPCBudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNb
cHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCldID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBhcnJheUluZGV4ID0gMDsKKyAgICAgICAgZm9yIChK
U1ZhbHVlIHZhbHVlIDogYXJndW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoSlNGaXhlZEFycmF5
KiBmaXhlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZml4ZWRBcnJheS0+c2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZpeGVkQXJyYXktPmdldChpKSk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUluZGV4KHZtLCBhcnJheUlu
ZGV4LCBmaXhlZEFycmF5LT5nZXQoaSkpOworICAgICAgICAgICAgICAgICAgICArK2FycmF5SW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgbm90IHNwcmVhZGluZy4KKyAgICAgICAgICAgICAgICByZXN1bHQtPmlu
aXRpYWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgICsr
YXJyYXlJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMjA4OTkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAog
ICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZmlyc3RWYXJBcmdP
ZmZzZXQpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIGVuZFZhckFyZ3MubGluaygmaml0KTsKICAg
ICB9Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3Zl
LCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4QXJndW1lbnRzICsg
MSkpKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmUsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0M6Om1heEFyZ3Vt
ZW50cyArIDEpKSk7CiAgICAgCiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hH
UFIxLCB0cnVlLCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgJKHJldmlzaW9uIDIwODk5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8g
V2UgbWF5IHN0aWxsIGNhbGwgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gIWdsb2JhbE9iamVjdC0+
aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpLAogICAgICAgICAg
ICAgICAgIC8vIGhvd2V2ZXIsIGlmIHdlIGRvIHRoYXQsIHdlIGVuc3VyZSB3ZSdyZSBjYWxsaW5n
IGluIHdpdGggYW4gYXJyYXkgd2l0aCBhbGwgc2VsZiBwcm9wZXJ0aWVzIGJldHdlZW4KICAgICAg
ICAgICAgICAgICAvLyBbMCwgbGVuZ3RoKS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYXJyYXkt
Pmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCkpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGFs
c28gY2FsbCBpbnRvIHRoaXMgZHVyaW5nIE9TUiBleGl0IHRvIG1hdGVyaWFsaXplIGEgcGhhbnRv
bSBmaXhlZCBhcnJheS4KKyAgICAgICAgICAgICAgICAvLyBXZSBtYXkgYmUgY3JlYXRpbmcgYSBm
aXhlZCBhcnJheSBkdXJpbmcgT1NSIGV4aXQgZXZlbiBhZnRlciB0aGUgaXRlcmF0b3IgcHJvdG9j
b2wgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAvLyBCdXQsIHdoZW4gdGhlIHBoYW50b20gd291
bGQgaGF2ZSBsb2dpY2FsbHkgYmVlbiBjcmVhdGVkLCB0aGUgcHJvdG9jb2wgaGFkbid0IGJlZW4K
KyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkLiBUaGVyZWZvcmUsIGl0IGlzIHNvdW5kIHRvIGFz
c3VtZSBlbXB0eSBpbmRpY2VzIGFyZSBqc1VuZGVmaW5lZCgpLgogICAgICAgICAgICAgICAgIHZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Cg==
</data>
<flag name="review"
          id="318049"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295693</attachid>
            <date>2016-11-29 19:30:06 -0800</date>
            <delta_ts>2016-11-29 19:35:08 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>124637</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDkxMTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgzIEBACisyMDE2LTExLTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIG9wdGltaXplIHRoZSBwYXR0ZXJuIHdo
ZXJlIHdlIHNwcmVhZCBhIGZ1bmN0aW9uJ3MgcmVzdCBwYXJhbWV0ZXIgdG8gYW5vdGhlciBjYWxs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4NjUK
KworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIG1pY3JvYmVu
Y2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAo
Y3JlYXRlQ2xhc3NIaWVyYXJjaHkubGV0LmN1cnJlbnRDbGFzcyk6CisgICAgICAgIChjcmVhdGVD
bGFzc0hpZXJhcmNoeSk6CisgICAgICAgICogc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28p
OgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFk
LWNvbnZlcnQtdG8tc3RhdGljLWxvYWRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICog
c3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50
b20tc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChmb28pOgor
ICAgICAgICAoZXNjYXBlKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogc3RyZXNzL3BoYW50
b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGVmZmVjdHMp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9yd2Fy
ZC12YXJhcmdzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MS5i
YXIpOgorICAgICAgICAodGVzdDEuZm9vKToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKHRl
c3QyLmJhcik6CisgICAgICAgICh0ZXN0Mi5mb28pOgorICAgICAgICAodGVzdDMuYmF6KToKKyAg
ICAgICAgKHRlc3QzLmJhcik6CisgICAgICAgICh0ZXN0My5mb28pOgorICAgICAgICAodGVzdDQu
YmF6KToKKyAgICAgICAgKHRlc3Q0LmJhcik6CisgICAgICAgICh0ZXN0NC5mb28pOgorICAgICAg
ICAodGVzdDUuYmF6KToKKyAgICAgICAgKHRlc3Q1LmJhcik6CisgICAgICAgICh0ZXN0NS5mb28p
OgorICAgICAgICAqIHN0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAgICAg
IChlZmZlY3RzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1jYWxs
LWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKGJheik6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBz
dHJlc3Mvc3ByZWFkLWZvcndhcmQtY2FsbC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChpZGVudGl0eSk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJn
cy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wtMi5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6LkFycmF5LnByb3RvdHlwZS5TeW1ib2wuaXRl
cmF0b3IpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mt
cmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgIChiYXouQXJyYXkucHJvdG90eXBlLlN5bWJvbC5pdGVyYXRv
cik6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAg
ICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanM6IEFk
ZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgor
CiAyMDE2LTExLTI5ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzaW1wbGUgd2F5IHRvIGltcGxlbWVudCBXYXNtIG9wcyB0aGF0IHJlcXVpcmUg
bW9yZSB0aGFuIG9uZSBCMyBvcGNvZGUKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Rl
ZmF1bHQtZGVyaXZlZC1jb25zdHJ1Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVmYXVsdC1kZXJpdmVkLWNvbnN0cnVjdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIGNyZWF0ZUNsYXNzSGll
cmFyY2h5KGRlcHRoKSB7CisgICAgbGV0IGN1cnJlbnRDbGFzcyA9IGNsYXNzIEJhc2UgeyB9Owor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgeworICAgICAgICBjdXJyZW50Q2xh
c3MgPSBjbGFzcyBleHRlbmRzIGN1cnJlbnRDbGFzcyB7fTsKKyAgICB9CisgICAgcmV0dXJuIGN1
cnJlbnRDbGFzczsKK30KKworbGV0IGN0b3IgPSBjcmVhdGVDbGFzc0hpZXJhcmNoeSgxMCk7Cits
ZXQgc3RhcnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykg
eworICAgIGxldCB4ID0gbmV3IGN0b3Ioe30sIHt9LCAyMCwgMzAsIDQwLCA1MCwgNjAsIHt9LCA4
MCwgdHJ1ZSwgZmFsc2UpOworfQorCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9z
ZSkKKyAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mv
Y2FsbC12YXJhcmdzLXNwcmVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jYWxs
LXZhcmFyZ3Mtc3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2NhbGwt
dmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rp
b24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlv
biBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorbm9JbmxpbmUoYmFyKTsKKwor
ZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQgeCA9IGJhciguLi5hcmdzLCA0Miwg
Li4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkr
Myk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsx
LCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMiwgSlNPTi5zdHJp
bmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsK
KyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQo
cls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkr
MiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzZdID09PSBpKzMsIEpTT04uc3Ry
aW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXct
YXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5ldy1hcnJheS13aXRoLXNwcmVhZC1j
b252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFkLWNvbnZlcnQtdG8tc3RhdGlj
LWxvYWRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGFzc2Vy
dChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKTsKK30K
K25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgcmV0dXJu
IGFyZ3M7Cit9CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAgIHJldHVybiBiYXooLi4u
YXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQpIHsKKyAgICBy
ZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7
CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsxKTsK
KyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSszKTsKKyAg
ICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09PSBpKzEpOworICAgIGFz
c2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBpKzMpOworfQpJbmRleDog
SlNUZXN0cy9zdHJlc3MvbmV3LWFycmF5LXdpdGgtc3ByZWFkLXdpdGgtbm9ybWFsLXNwcmVhZC1h
bmQtcGhhbnRvbS1zcHJlYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbmV3LWFy
cmF5LXdpdGgtc3ByZWFkLXdpdGgtbm9ybWFsLXNwcmVhZC1hbmQtcGhhbnRvbS1zcHJlYWQuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbmV3LWFycmF5LXdpdGgtc3ByZWFkLXdp
dGgtbm9ybWFsLXNwcmVhZC1hbmQtcGhhbnRvbS1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpCit9Citub0lubGluZShhc3NlcnQpOwor
CitmdW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxldCByID0gWy4uLmEsIC4uLmFyZ3Nd
OworICAgIHJldHVybiByOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gZXNjYXBlKGEp
IHsgcmV0dXJuIGE7IH0KK25vSW5saW5lKGVzY2FwZSk7CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJn
cykgeworICAgIGVzY2FwZShhcmdzKTsKKyAgICBsZXQgciA9IFsuLi5hLCAuLi5hcmdzXTsKKyAg
ICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTAw
MDA7IGkrKykgeworICAgIGZvciAobGV0IGYgb2YgW2ZvbywgYmFyXSkgeworICAgICAgICBsZXQg
byA9IHt9OworICAgICAgICBsZXQgYSA9IFtvLCAyMF07CisgICAgICAgIGxldCByID0gZihhLCAz
MCwgNDApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDQpOworICAgICAgICBhc3NlcnQo
clswXSA9PT0gbyk7CisgICAgICAgIGFzc2VydChyWzFdID09PSAyMCk7CisgICAgICAgIGFzc2Vy
dChyWzJdID09PSAzMCk7CisgICAgICAgIGFzc2VydChyWzNdID09PSA0MCk7CisgICAgfQorfQpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1uZXctYXJyYXktd2l0aC1zcHJlYWQtb3NyLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1uZXctYXJyYXktd2l0
aC1zcHJlYWQtb3NyLWV4aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhh
bnRvbS1uZXctYXJyYXktd2l0aC1zcHJlYWQtb3NyLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7
CisKK2xldCB2YWx1ZSA9IGZhbHNlOworCitmdW5jdGlvbiBiYXooeCkgeworICAgIGlmICh0eXBl
b2YgeCAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgdmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4geDsKK30KK25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7Cisg
ICAgcmV0dXJuIGFyZ3M7Cit9CisKK2xldCBkaWRFZmZlY3RzID0gZmFsc2U7IAorZnVuY3Rpb24g
ZWZmZWN0cygpIHsgZGlkRWZmZWN0cyA9IHRydWU7IH0KK25vSW5saW5lKGVmZmVjdHMpOworCitm
dW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxldCB0aGVBcmdzID0gWy4uLmFyZ3MsIGEs
IC4uLmFyZ3NdOworICAgIGJheihhKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgZWZmZWN0
cygpOworICAgIH0KKyAgICBsZXQgciA9IGJhci5hcHBseShudWxsLCB0aGVBcmdzKTsKKyAgICBy
ZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAw
OyBpKyspIHsKKyAgICBmb28oaSwgaSsxKTsKKyAgICBhc3NlcnQoIWRpZEVmZmVjdHMpOworfQor
bGV0IG8gPSB7fTsKK2xldCBbYSwgYiwgY10gPSBmb28obywgMjApOworYXNzZXJ0KGEgPT09IDIw
KTsKK2Fzc2VydChiID09PSBvKTsKK2Fzc2VydChjID09PSAyMCk7Cithc3NlcnQoZGlkRWZmZWN0
cyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9yd2FyZC12
YXJhcmdzLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFk
LWZvcndhcmQtdmFyYXJncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorInVz
ZSBzdHJpY3QiOworCitmdW5jdGlvbiBhc3NlcnQoYiwgbT0iIikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlvbiBiYXIoYSwgYiwg
YywgZCkgeworICAgICAgICByZXR1cm4gW2EsIGIsIGMsIGRdOworICAgIH0KKyAgICBmdW5jdGlv
biBmb28oLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3MpOworICAgIH0KKyAg
ICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7
CisgICAgICAgIGxldCBbYSwgYiwgYywgZF0gPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAg
ICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkrMSk7CisgICAgICAg
IGFzc2VydChjID09PSBpKzIpOworICAgICAgICBhc3NlcnQoZCA9PT0gaSszKSA7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAg
ICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsK
KyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9J
bmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAg
ICAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSA3KTsKKyAgICAgICAgbGV0IFthLCBiLCBjLCBkLCBlLCBmLCBnXSA9IHI7CisgICAg
ICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSsyKTsKKyAgICAg
ICAgYXNzZXJ0KGMgPT09IGkrMyk7CisgICAgICAgIGFzc2VydChkID09PSBpKTsKKyAgICAgICAg
YXNzZXJ0KGUgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChmID09PSBpKzIpOworICAgICAgICBh
c3NlcnQoZyA9PT0gaSszKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBm
dW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAg
IH0KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgbGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKzMpOworICAg
ICAgICBhc3NlcnQoYiA9PT0gaSk7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgIH0K
K30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAgZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAg
ICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBiYXooLi4uYXJncyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGZvbyhhLCBi
LCBjLCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4uYXJn
cyk7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCByID0gZm9vKGksIGkrMSwgaSsyLCBpKzMpOwor
ICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoclswXSA9PT0g
aSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBiYXooYSwg
YiwgYykgeworICAgICAgICByZXR1cm4gW2EsIGIsIGNdOworICAgIH0KKyAgICBmdW5jdGlvbiBi
YXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0KKyAgICBm
dW5jdGlvbiBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4u
LmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZvbyhpLCBp
KzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAgICAgICAg
bGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOwor
ICAgIH0KK30KKwordGVzdDEoKTsKK3Rlc3QyKCk7Cit0ZXN0MygpOwordGVzdDQoKTsKK3Rlc3Q1
KCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHZhbHVlID0gZmFsc2U7CisKK2Z1bmN0aW9uIGJheih4
KSB7CisgICAgaWYgKHR5cGVvZiB4ICE9PSAibnVtYmVyIikgeworICAgICAgICB2YWx1ZSA9IHRy
dWU7CisgICAgfQorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24g
YmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KKworbGV0IGRpZEVmZmVjdHMgPSBm
YWxzZTsgCitmdW5jdGlvbiBlZmZlY3RzKCkgeyBkaWRFZmZlY3RzID0gdHJ1ZTsgfQorbm9Jbmxp
bmUoZWZmZWN0cyk7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0IHIgPSBi
YXIoLi4uYXJncywgYmF6KGEpLCAuLi5hcmdzKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAg
ZWZmZWN0cygpOworICAgIH0KKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBmb28oaSwgaSsxKTsKKyAgICBh
c3NlcnQoIWRpZEVmZmVjdHMpOworfQorbGV0IG8gPSB7fTsKK2xldCBbYSwgYiwgY10gPSBmb28o
bywgMjApOworYXNzZXJ0KGEgPT09IDIwKTsKK2Fzc2VydChiID09PSBvKTsKK2Fzc2VydChjID09
PSAyMCk7Cithc3NlcnQoZGlkRWZmZWN0cyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQt
Y2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1jYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGluZShh
c3NlcnQpOworCitmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQor
bm9JbmxpbmUoYmF6KTsKK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7CisgICAgcmV0dXJuIGJh
eiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28oYSwgYiwgYywgZCkgewor
ICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwg
aSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFzc2VydChyWzBdID09PSBp
KzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2VydChyWzJdID09PSBpKzMp
OworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJbNF0gPT09IGkrMSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0gPT09IGkrMyk7Cit9Cklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC1jYWxsLXZhcmFyZ3Mtc3RhY2stb3Zl
cmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtY2Fs
bC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1mb3J3YXJkLWNhbGwtdmFyYXJncy1zdGFjay1vdmVyZmxvdy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBpZGVudGl0eShhKSB7IHJldHVybiBhOyB9Citub0lubGlu
ZShpZGVudGl0eSk7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFyZ3M7
Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxl
dCBhcmcgPSBpZGVudGl0eShhKTsKKyAgICB0cnkgeworICAgICAgICBsZXQgciA9IGJhciguLi5h
cmdzLCAuLi5hcmdzKTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgIHJldHVybiBhcmc7CisgICAgfQorfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAgbGV0IGFyZ3MgPSBbXTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAgICAgIGFyZ3MucHVzaChpKTsKKyAgICB9CisKKyAg
ICBsZXQgbyA9IHt9OworICAgIGxldCByID0gZm9vKG8sIC4uLmFyZ3MpOworICAgIGxldCBpID0g
MDsKKyAgICBmb3IgKGxldCBhcmcgb2YgYXJncykgeworICAgICAgICBhc3NlcnQocltpXSA9PT0g
YXJnKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBmb3IgKGxldCBhcmcgb2YgYXJncykgewor
ICAgICAgICBhc3NlcnQocltpXSA9PT0gYXJnKTsKKyAgICAgICAgaSsrOworICAgIH0KK30KKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisgICAgbGV0IHRocmV3ID0gZmFsc2U7Cisg
ICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgYXJncyA9IFtdOworICAgIGxldCBhcmdDb3VudCA9IG1h
eEFyZ3VtZW50cygpICogKDIvMyk7CisgICAgYXJnQ291bnQgPSBhcmdDb3VudCB8IDA7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgIGFyZ3MucHVzaChp
KTsKKyAgICB9CisKKyAgICBsZXQgciA9IGZvbyhvLCAuLi5hcmdzKTsKKyAgICBhc3NlcnQociA9
PT0gbyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC12YXJhcmdzLXJl
c3QtcGFyYW1ldGVyLWNoYW5nZS1pdGVyYXRvci1wcm90b2NvbC0yLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hh
bmdlLWl0ZXJhdG9yLXByb3RvY29sLTIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJl
c3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3It
cHJvdG9jb2wtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitmdW5jdGlvbiBh
c3NlcnQoYiwgbT0iIikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgYXNzZXJ0aW9uOiAiICsgbSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitsZXQgY2FsbGVk
ID0gZmFsc2U7CitmdW5jdGlvbiBiYXooYykgeworICAgIGlmIChjKSB7CisgICAgICAgIEFycmF5
LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBh
c3NlcnQoZmFsc2UsICJzaG91bGQgbm90IGJlIGNhbGxlZCEiKTsKKyAgICAgICAgICAgIGxldCBp
ID0gMDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgbmV4dCgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAic2hvdWxkIG5vdCBiZSBjYWxsZWQhIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0KK30K
K25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFy
Z3M7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYywgLi4uYXJncykgeworICAg
IGFyZ3MgPSBbLi4uYXJnc107CisgICAgYmF6KGMpOworICAgIHJldHVybiBiYXIuYXBwbHkobnVs
bCwgYXJncyk7Cit9Citub0lubGluZShmb28pOworCitmdW5jdGlvbiB0ZXN0KGMpIHsKKyAgICBj
b25zdCBhcmdzID0gW3t9LCAyMCwgW10sIDQ1XTsKKyAgICBsZXQgciA9IGZvbyhjLCAuLi5hcmdz
KTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IHIubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IHIubGVuZ3RoOyBpKyspCisgICAgICAgIGFzc2VydChyW2ldID09PSBhcmdzW2ldKTsK
K30KK25vSW5saW5lKHRlc3QpOworZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7Cisg
ICAgdGVzdChmYWxzZSk7Cit9Cit0ZXN0KHRydWUpOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3By
ZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9j
b2wuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJn
cy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRl
ci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IGNh
bGxlZCA9IGZhbHNlOworZnVuY3Rpb24gYmF6KGMpIHsKKyAgICBpZiAoYykgeworICAgICAgICBB
cnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgbGV0IGkgPSAwOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBuZXh0
KCkgeworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
ID09PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB0cnVlfTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogNDAsIGRvbmU6IGZhbHNlfTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfQorbm9Jbmxp
bmUoYmF6KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30K
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhjLCAuLi5hcmdzKSB7CisgICAgYmF6KGMp
OworICAgIHJldHVybiBiYXIoLi4uYXJncyk7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBjb25zdCBjID0gZmFsc2U7CisgICAgY29u
c3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CisgICAgbGV0IHIgPSBmb28oYywgLi4uYXJncyk7
CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSByLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCByLmxlbmd0aDsgaSsrKQorICAgICAgICBhc3NlcnQocltpXSA9PT0gYXJnc1tpXSk7Cit9
CisKK2NvbnN0IGMgPSB0cnVlOworY29uc3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CitsZXQg
ciA9IGZvbyhjLCAuLi5hcmdzKTsKK2Fzc2VydChyLmxlbmd0aCA9PT0gMSk7Cithc3NlcnQoclsw
XSA9PT0gNDApOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1z
dGFjay1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9y
d2FyZC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorbm9JbmxpbmUo
YXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30K
KworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICB0cnkgeworICAgICAgICBsZXQgciA9
IGJhciguLi5hcmdzLCAuLi5hcmdzKTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfSBjYXRjaChl
KSB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBhcmdzID0gW107CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAgICBhcmdzLnB1c2goaSk7CisgICAg
fQorCisgICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgciA9IGZvbyhvLCAuLi5hcmdzKTsKKyAgICBs
ZXQgaSA9IDA7CisgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHJb
aV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgZm9yIChsZXQgYXJnIG9mIGFy
Z3MpIHsKKyAgICAgICAgYXNzZXJ0KHJbaV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAgICB9
Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykgeworICAgIGxldCB0aHJldyA9IGZh
bHNlOworICAgIGxldCBvID0ge307CisgICAgbGV0IGFyZ3MgPSBbXTsKKyAgICBsZXQgYXJnQ291
bnQgPSBtYXhBcmd1bWVudHMoKSAqICgyLzMpOworICAgIGFyZ0NvdW50ID0gYXJnQ291bnQgfCAw
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAgICAgICBhcmdz
LnB1c2goaSk7CisgICAgfQorCisgICAgbGV0IHIgPSBmb28obywgLi4uYXJncyk7CisgICAgYXNz
ZXJ0KHIgPT09IG8pOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDkxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQ5IEBACisyMDE2LTExLTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIG9wdGltaXplIHRoZSBwYXR0ZXJu
IHdoZXJlIHdlIHNwcmVhZCBhIGZ1bmN0aW9uJ3MgcmVzdCBwYXJhbWV0ZXIgdG8gYW5vdGhlciBj
YWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBh
dGNoIG9wdGltaXplcyB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIHRvIHByZXZlbnQgYm90aCB0aGUg
YWxsb2NhdGlvbgorICAgICAgICBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIsIGFuZCB0aGUgZXhlY3V0
aW9uIG9mIHRoZSBpdGVyYXRvciBwcm90b2NvbDoKKyAgICAgICAgCisgICAgICAgIGBgYAorICAg
ICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICAgICAgbGV0IGFyciA9IFsuLi5h
cmdzXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYW5kCisgICAgICAgIAorICAgICAg
ICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICAgICAgYmFyKC4uLmFyZ3MpOworICAg
ICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgVG8gZG8gdGhpcywgSSd2ZSBl
eHRlbmRlZCB0aGUgYXJndW1lbnRzIGVsaW1pbmF0aW9uIHBoYXNlIHRvIHJlYXNvbgorICAgICAg
ICBhYm91dCBTcHJlYWQgYW5kIE5ld0FycmF5V2l0aFNwcmVhZC4gSSd2ZSBhZGRlZCB0d28gbmV3
IG5vZGVzLCBQaGFudG9tU3ByZWFkCisgICAgICAgIGFuZCBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkLiBQaGFudG9tU3ByZWFkIGlzIG9ubHkgYWxsb3dlZCBvdmVyIHJlc3QKKyAgICAgICAgcGFy
YW1ldGVycyB0aGF0IGRvbid0IGVzY2FwZS4gSWYgdGhlIHJlc3QgcGFyYW1ldGVyICpkb2VzKiBl
c2NhcGUsIHdlIGNhbid0CisgICAgICAgIGNvbnZlcnQgdGhlIHNwcmVhZCBpbnRvIGEgcGhhbnRv
bSBiZWNhdXNlIGl0IHdvdWxkIG5vdCBiZSBzb3VuZCB3LnIudCBKUworICAgICAgICBzZW1hbnRp
Y3MgYmVjYXVzZSB3ZSB3b3VsZCBiZSByZWFkaW5nIGZyb20gdGhlIGNhbGwgZnJhbWUgZXZlbiB0
aG91Z2gKKyAgICAgICAgdGhlIHJlc3QgYXJyYXkgbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAg
CisgICAgICAgIE5vdGUgdGhhdCBOZXdBcnJheVdpdGhTcHJlYWQgYWxzbyB1bmRlcnN0YW5kcyB3
aGF0IHRvIGRvIHdoZW4gb25lIG9mIGl0cworICAgICAgICBhcmd1bWVudHMgaXMgUGhhbnRvbVNw
cmVhZChAUGhhbnRvbUNyZWF0ZVJlc3QpIGV2ZW4gaWYgaXQgaXRzZWxmIGlzIGVzY2FwZWQuCisg
ICAgICAgIAorICAgICAgICBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIGlzIG9ubHkgYWxsb3dl
ZCBvdmVyIGEgc2VyaWVzIG9mCisgICAgICAgIFBoYW50b21TcHJlYWQoQFBoYW50b21DcmVhdGVS
ZXN0KSBub2Rlcy4gTGlrZSB3aXRoIFBoYW50b21TcHJlYWQsIFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQKKyAgICAgICAgaXMgb25seSBhbGxvd2VkIGlmIG5vbmUgb2YgaXRzIGFyZ3VtZW50cyB0
aGF0IGFyZSBiZWluZyBzcHJlYWQgYXJlIGVzY2FwZWQKKyAgICAgICAgYW5kIGlmIGl0IGl0c2Vs
ZiBpcyBub3QgZXNjYXBlZC4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgdGhlcmUgaXMgYSBk
ZXBlbmRlbmN5IGJldHdlZW4gYSBub2RlIGJlaW5nIGEgY2FuZGlkYXRlIGFuZAorICAgICAgICB0
aGUgZXNjYXBlZCBzdGF0ZSBvZiB0aGUgbm9kZSdzIGNoaWxkcmVuLCBJJ3ZlIGV4dGVuZGVkIHRo
ZSBub3Rpb24KKyAgICAgICAgb2YgZXNjYXBpbmcgYSBub2RlIGluc2lkZSB0aGUgYXJndW1lbnRz
IGVsaW1pbmF0aW9uIHBoYXNlLiBOb3csIHdoZW4KKyAgICAgICAgYW55IG5vZGUgaXMgZXNjYXBl
ZCwgd2UgbXVzdCBjb25zaWRlciBhbGwgb3RoZXIgY2FuZGlkYXRlcyB0aGF0IGFyZSBtYXkKKyAg
ICAgICAgbm93IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgIEZvciBleGFt
cGxlOgorICAgICAgICAKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdz
KSB7CisgICAgICAgICAgICBlc2NhcGUoYXJncyk7CisgICAgICAgICAgICBiYXIoLi4uYXJncyk7
CisgICAgICAgIH0KKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBJbiB0aGUgYWJvdmUg
cHJvZ3JhbSwgd2UgZG9uJ3Qga25vdyBpZiB0aGUgZnVuY3Rpb24gY2FsbCB0byBlc2NhcGUoKQor
ICAgICAgICBtb2RpZmllcyBhcmdzLCB0aGVyZWZvcmUsIHRoZSBzcHJlYWQgY2FuIG5vdCBiZWNv
bWUgcGhhbnRvbSBiZWNhdXNlCisgICAgICAgIHRoZSBleGVjdXRpb24gb2YgdGhlIHNwcmVhZCBt
YXkgbm90IGJlIGFzIHNpbXBsZSBhcyByZWFkaW5nIHRoZQorICAgICAgICBhcmd1bWVudHMgZnJv
bSB0aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoZSBh
cmd1bWVudHMgZWxpbWluYXRpb24gcGhhc2UgZG9lcyBub3QgY29uc2lkZXIgY29udHJvbAorICAg
ICAgICBmbG93IHdoZW4gZG9pbmcgaXRzIGVzY2FwZSBhbmFseXNpcy4gSXQgd291bGQgYmUgZ29v
ZCB0byBpbnRlZ3JhdGUgdGhpcworICAgICAgICBwaGFzZSB3aXRoIHRoZSBvYmplY3QgYWxsb2Nh
dGlvbiBzaW5raW5nIHBoYXNlLiBUbyBzZWUgd2h5LCBjb25zaWRlcgorICAgICAgICBhbiBleGFt
cGxlIHdoZXJlIHdlIGRvbid0IGVsaW1pbmF0ZSB0aGUgc3ByZWFkIGFuZCBhbGxvY2F0aW9uIG9m
IHRoZSByZXN0CisgICAgICAgIHBhcmFtZXRlciBldmVuIHRob3VnaCB3ZSBjb3VsZDoKKyAgICAg
ICAgCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28ocmFyZUNvbmRpdGlvbiwgLi4u
YXJncykgeworICAgICAgICAgICAgYmFyKC4uLmFyZ3MpOworICAgICAgICAgICAgaWYgKHJhcmVD
b25kaXRpb24pCisgICAgICAgICAgICAgICAgYmF6KGFyZ3MpOworICAgICAgICB9CisgICAgICAg
IGBgYAorICAgICAgICAKKyAgICAgICAgVGhlcmUgYXJlIG9ubHkgYSBmZXcgdXNlcnMgb2YgdGhl
IFBoYW50b21TcHJlYWQgYW5kIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQKKyAgICAgICAgbm9k
ZXMuIFBoYW50b21TcHJlYWQgaXMgb25seSB1c2VkIGJ5IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQgYW5kIE5ld0FycmF5V2l0aFNwcmVhZC4KKyAgICAgICAgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCBpcyBvbmx5IHVzZWQgYnkgRm9yd2FyZFZhcmFyZ3MgYW5kIHRoZSB2YXJpb3VzCisgICAg
ICAgICpDYWxsKkZvcndhcmRWYXJhcmdzIG5vZGVzLiBUaGUgdXNlcnMgb2YgdGhlc2UgcGhhbnRv
bXMga25vdyBob3cgdG8gcHJvZHVjZQorICAgICAgICB3aGF0IHRoZSBwaGFudG9tIG5vZGUgd291
bGQgaGF2ZSBwcm9kdWNlZC4gRm9yIGV4YW1wbGUsIE5ld0FycmF5V2l0aFNwcmVhZAorICAgICAg
ICBrbm93cyBob3cgdG8gcHJvZHVjZSB0aGUgdmFsdWVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBy
b2R1Y2VkIGJ5IFBoYW50b21TcHJlYWQoQFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICBieSBk
aXJlY3RseSByZWFkaW5nIGZyb20gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIGlzIGEgNiUgc3BlZWR1cCBvbiBteSBNQlAgb24gRVM2U2FtcGxlQmVuY2guCisK
KyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlBcHBlbmRMZWEpOgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuaDoKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpC
dWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3Rvcik6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdGb3JBbGxLaWxscy5oOgor
ICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJp
dFZlY3Rvcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9tQWxsb2NhdGlvbik6
CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg6Cisg
ICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAg
ICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6TG93ZXJERkdUb0IzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTmV3QXJyYXlXaXRoU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVNwcmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRm9yd2FyZFZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpnZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvblBvcHVsYXRlT2Jq
ZWN0SW5PU1IpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHA6CisgICAgICAgIChK
U0M6OmVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKToKKyAgICAgICAgKiBqc2MuY3BwOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlv
bk1heEFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0ZpeGVkQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6SlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkpOgorCiAyMDE2LTExLTI5ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBzdXBw
b3J0IENyZWF0ZVRoaXMgaW4gdGhlIEZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlz
aW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OTAsNiArOTkwLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1w
bGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAorc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRl
Kik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwog
I2VuZGlmCkBAIC0xMjQyLDYgKzEyNDQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAic2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzIiwgZnVuY3Rpb25TYW1wbGluZ1By
b2ZpbGVyU3RhY2tUcmFjZXMsIDApOwogI2VuZGlmCiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJtYXhBcmd1bWVudHMiLCBmdW5jdGlvbk1heEFyZ3VtZW50cywgMCk7CisKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5j
dGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAt
MjQ4NCw2ICsyNDg4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
YW0KIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKK3sKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7Cit9
CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHN0YXRpYyBKU1ZhbHVlIGJveChFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MjksNyArMTkyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKHZh
bHVlLT5jaGlsZCgwKSkKICAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQWRkKSB7CiAgICAgICAgICAgICBpbm5lckFkZCA9IHZhbHVlLT5jaGlsZCgwKTsKLSAgICAg
ICAgICAgIG9mZnNldCA9IHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAgICAg
b2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKTsK
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAyMDkx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3RlciBhbmQgc3RhdGVz
IHRoYXQKICAgICAgICAgLy8gdGhlIHJlZ2lzdGVyIGlzIHVzZWQgbGF0ZS4gVGhpcyBtZWFucyB0
aGF0IHRoZSByZWdpc3RlciBpcyB1c2VkIGFmdGVyIHRoZSByZXN1bHQKICAgICAgICAgLy8gaXMg
ZGVmaW5lZCAoaS5lLCB0aGUgcmVzdWx0IHdpbGwgaW50ZXJmZXJlIHdpdGggdGhpcyBhcyBhbiBp
bnB1dCkuCi0gICAgICAgIC8vIEl0J3Mgbm90IHZhbGlkIGZvciB0aGlzIHRvIGJlIHVzZWQgYXMg
YSByZXN1bHQga2luZC4KKyAgICAgICAgLy8gSXQncyBub3QgYSB2YWxpZCBvdXRwdXQgcmVwcmVz
ZW50YXRpb24uCiAgICAgICAgIExhdGVSZWdpc3RlciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tl
ZC4gSXQncyBub3QgYSB2YWxpZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDIwOTExMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIEJ1aWx0aW5FeGVjdXRhYmxlczo6QnVpbHRp
bkV4ZWN1dGFibGVzKFYKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0
YWJsZXM6OmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0
b3JLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGJhc2VDb25zdHJ1Y3RvckNvZGUoQVNDSUlMaXRlcmFsKCIoZnVu
Y3Rpb24gKCkgeyB9KSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5n
PiBkZXJpdmVkQ29uc3RydWN0b3JDb2RlKEFTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uICgpIHsgc3Vw
ZXIoLi4uYXJndW1lbnRzKTsgfSkiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gZGVyaXZlZENvbnN0cnVjdG9yQ29kZShBU0NJSUxpdGVyYWwoIihmdW5jdGlvbiAo
Li4uYXJncykgeyBzdXBlciguLi5hcmdzKTsgfSkiKSk7CiAKICAgICBzd2l0Y2ggKGNvbnN0cnVj
dG9yS2luZCkgewogICAgIGNhc2UgQ29uc3RydWN0b3JLaW5kOjpOb25lOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTc1
LDYgKzE5NzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBCb3R0
b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2ZW50
IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0
b20uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBKdXN0IGZpbmRz
IG5vZGVzIHRoYXQgd2Uga25vdyBob3cgdG8gd29yayB3aXRoLgogICAgIHZvaWQgaWRlbnRpZnlD
YW5kaWRhdGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKQEAgLTEwOSw2
ICsxMDksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRl
cy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2hlY2sgQXJyYXlVc2UgaGVyZSBiZWNh
dXNlIEFycmF5VXNlIGluZGljYXRlcyB0aGF0IHRoZSBpdGVyYXRvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcHJvdG9jb2wgZm9yIEFycmF5cyBpcyBub24tb2JzZXJ2YWJsZSBieSB1c2Vy
IGNvZGUgKGUuZywgaXQgaGFzbid0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGNo
YW5nZWQpLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0ICYm
IG1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBmb3IgU3ByZWFkcyB0byBi
ZSBvZiByZXN0IG5vZGVzIGZvciBub3cuCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz
T0sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09LID0gY2hpbGQtPm9wKCkgPT0gU3By
ZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0ICYmIG1fY2FuZGlkYXRl
cy5jb250YWlucyhjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNPSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBpZiBpdCB3YXNuJ3QgZm9yIHRoZSBmYWN0IHRoYXQgc2Nv
cGVkIGFyZ3VtZW50cyBhcmUKQEAgLTEyNiw2ICsxNTgsNjIgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRhdGVzOiAiLCBsaXN0RHVt
cChtX2NhbmRpZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZENh
bmRpZGF0ZShOb2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgIHJldHVybiBtX2Nh
bmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCkpOworCisgICAgICAg
IGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZl
Y3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2NhbmRpZGF0ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5v
ZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpCisg
ICAgeworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwgMT4gdG9SZW1vdmU7CisK
KyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92
ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICB2b2lk
IHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBOb2RlKiBzb3VyY2UgPSBu
dWxscHRyKQorICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92
ZShub2RlKTsKKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAmJiBzb3VyY2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIsIG5vZGUsICIgYmVjYXVz
ZSBpdCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAgICAgICAgaWYgKHJlbW92
ZWQpCisgICAgICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOworICAgIH0KICAgICAK
ICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBjYW5k
aWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2FuZGlk
YXRlc1RoYXRFc2NhcGUoKQpAQCAtMTMzLDkgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGF1
dG8gZXNjYXBlID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgewogICAgICAgICAgICAg
aWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJvb2wgcmVt
b3ZlZCA9IG1fY2FuZGlkYXRlcy5yZW1vdmUoZWRnZS5ub2RlKCkpOwotICAgICAgICAgICAgaWYg
KHJlbW92ZWQgJiYgdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGlu
ZyBjYW5kaWRhdGU6ICIsIGVkZ2Uubm9kZSgpLCAiIGJlY2F1c2UgaXQgZXNjYXBlcyBmcm9tOiAi
LCBzb3VyY2UsICJcbiIpOworICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRl
KGVkZ2Uubm9kZSgpLCBzb3VyY2UpOwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgYXV0
byBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlID0gWyZdIChBcnJheU1vZGUgbW9kZSwgRWRnZSBlZGdl
LCBOb2RlKiBzb3VyY2UpIHsKQEAgLTE4Nyw2ICsyNzMsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9OworCisgICAgICAgIHJlbW92
ZUludmFsaWRDYW5kaWRhdGVzKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CiAgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKQEAgLTIwMSwxMSArMjg5LDQyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShu
b2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXQgd291bGQgbm90IGJlIGhhcmQgdG8gc3VwcG9ydCBOZXdBcnJheVdp
dGhTcHJlYWQgaGVyZSBpZiBpdCBpcyBvbmx5IG92ZXIgU3ByZWFkKENyZWF0ZVJlc3QpIG5vZGVz
LgogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAgICAgICAgICBCaXRWZWN0
b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQgPSBtX2dyYXBoLmlzV2F0Y2hp
bmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSk7IAorICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9udEVzY2FwZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbnRFc2NhcGUgPSBjaGlsZC0+b3AoKSA9PSBTcHJlYWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2hpbGQtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBB
cnJheVVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaGlsZC0+Y2hpbGQx
KCktPm9wKCkgPT0gQ3JlYXRlUmVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBpc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udEVzY2FwZSA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbnRFc2NhcGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGNoaWxkLCBub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGNhc2UgU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNPSyA9IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5j
aGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0OworICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
T0spCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgbm9k
ZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CkBAIC0yMTQsNiArMzMzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShu
b2RlLT5jaGlsZDIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQgJiYgbm9kZS0+Y2hpbGQzKCktPm9wKCkg
PT0gTmV3QXJyYXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMygpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrOgpAQCAtMjYzLDYgKzM4NCwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludChub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdI
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC0zOTAsNyArNTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBibG9jay0+c2l6ZSgpICYmIGNhbmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJl
Y2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAiLCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQxNyw3ICs1NDIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2Ug
aXQgaXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNh
bmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjAsMTAgKzU4NSwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNo
IGEgd2F5IHRoYXQgd2UgYXJlIGd1YXJhbnRlZWQgdG8gc2VlIGEgZGVmIGJlZm9yZSBhIHVzZS4K
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5
IHRyYW5zZm9ybWVkIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSB0aGUgdXNlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIGFuIGFsbG9jYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09
IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9u
ZWRBcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0
QXJndW1lbnRzIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
IAorCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDg4LDYgKzYxNCwyMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVh
ZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
QEAgLTU5OSw5NCArNzM5LDE4NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
TG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50
b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IFsmXSAodW5z
aWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5v
ZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0
YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0Rh
dGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOworICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1
ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBz
dG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhj
YW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2Uo
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRp
ZGF0ZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2Fu
ZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Db252ZXJ0VG9TdGF0aWNM
b2FkU3RvcmVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlz
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
YW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUs
IGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
aGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lQXJndW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJP
ZlNwcmVhZEFyZ3VtZW50cyA9IGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU3ByZWFkQXJndW1lbnRz
ID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKz0gbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKythcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFy
YXJnc0RhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGlt
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0
YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBj
YW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdp
bi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNOb2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vz
c0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2Rl
LCBLbm93bkludDMyVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0
YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMi
LCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAw
OyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdl
IGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXgg
KyB2YXJhcmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZElu
ZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9L
KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhkYXRhKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gc3RvcmUgYW55dGhpbmcgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3
ZSB3aWxsIHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3
ZSdsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBkZWdlbmVy
YXRlIElSOiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NzQzNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5
TWluaW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIg
bGltaXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1p
dCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3It
PmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJl
c3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9h
ZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChy
ZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFs
dWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK3N0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RvcmVJbmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHVuZGVmaW5lZCwgc3RvcmVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdl
IGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
dmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpT
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2Rl
LT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3Rh
Y2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9m
ZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEt
Pm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA+PSAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWlu
aW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGlt
aXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29u
IGFib3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9
IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytz
dG9yZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJz
dCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBp
dCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJh
cmdzRGF0YS0+b2Zmc2V0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5h
ZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1
c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBk
b24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Yg
c29tZXRoaW5nIHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzQz
NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpz
VW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNh
bkV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY5OCwyNyArOTI5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hp
bGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9j
YXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5j
YWxsVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0
VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAg
ICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2lu
LCBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydFRvU3RhdGljQXJndW1lbnRDb3VudENhbGwgPSBbJl0gKGNvbnN0IFZl
Y3RvcjxOb2RlKj4mIGFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZmlyc3RDaGlsZCA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bi5hcHBlbmQobm9kZS0+Y2hpbGQyKCkpOwpAQCAtNzQzLDI1ICs5NTUsOTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydFRvRm9yd2FyZHNDYWxsID0gWyZdICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDYWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbEZv
cndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGlu
ZWRDYWxsZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5UcmFuc2Zvcm1Ub1N0YXRpY0Fy
Z3VtZW50Q291bnRDYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdFZlY3Rv
ciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFw
aC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblRyYW5zZm9ybVRvU3RhdGljQXJn
dW1lbnRDb3VudENhbGwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuVHJhbnNmb3JtVG9TdGF0aWNBcmd1bWVudENvdW50Q2Fs
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRz
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
YW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdl
dChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxk
LT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRh
dGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1bWVudENv
dW50Q2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRm9yd2FyZHNDYWxsKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRh
KiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOworCisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0OyBpIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5v
ZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1
bWVudENvdW50Q2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRm9yd2FyZHNDYWxsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nzgs
NiArNDc4LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNl
IFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhh
bnRvbSwgaXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNl
ZCB3aXRoIGFub3RoZXIuCiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKQEAgLTExMzAs
NiArMTEzMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKICAgICAgICAgLy8gVGhpcyBhbHNvIHJlYWRz
IGZyb20gSlNGaXhlZEFycmF5J3MgZGF0YSBzdG9yZSwgYnV0IHdlIGRvbid0IGhhdmUgYW55IHdh
eSBvZiBkZXNjcmliaW5nIHRoYXQgeWV0LgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBp
KyspIHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
aSkubm9kZSgpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQp
IHsKKyAgICAgICAgICAgICAgICByZWFkKFN0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDggQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgor
ICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzOSw2ICsxNDM5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAg
Y2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgog
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZvckFsbEtpbGxzLmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBA
IHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIGZvciAoTm9kZSogbm9kZSA6IGNvbWJpbmVk
TGl2ZW5lc3MubGl2ZUF0VGFpbFtibG9ja10pCiAgICAgICAgIGZ1bmN0b3IoYmxvY2stPnNpemUo
KSwgbm9kZSk7CiAgICAgCi0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGxvY2Fs
QXZhaWxhYmlsaXR5OworICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBsb2NhbEF2
YWlsYWJpbGl0eShncmFwaCk7CiAgICAgbG9jYWxBdmFpbGFiaWxpdHkuYmVnaW5CbG9jayhibG9j
ayk7CiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9y
IGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAg
IC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRl
eCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTks
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJn
dW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJl
IHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNr
ZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5
IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC00NzMsNyArNDcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKGhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRv
bURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgb3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgewogICAgICAg
ICAgICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9y
IHRoZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90
aGVyd2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1
dGUgYSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0
b24oKTsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIHB1YmxpYzoKIAogICAgIEJpdFZlY3RvciogYml0
VmVjdG9yKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVh
ZCk7CisgICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBvcCgpID09
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8
Qml0VmVjdG9yKj4oKTsKICAgICB9CiAKQEAgLTE3NjksNiArMTc2OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2Ug
UGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgog
ICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRv
bU5ld0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIw
OTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ1LDYgKzM0NSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhDcmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAg
IG1hY3JvKFBoYW50b21EaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAg
ICBtYWNybyhDcmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3Jv
KENyZWF0ZUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRv
bUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUaGlz
IGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2
ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAotICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IgY2FsY3VsYXRvcjsKKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yIGNhbGN1bGF0b3IobV9ncmFwaCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgICAg
ZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw4IEBAIGJv
b2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXAKICAgICByZXR1cm4gcnVuUGhh
c2U8T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4oZ3JhcGgpOwogfQogCi1Mb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpCitM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcihHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQogewogfQogCkBAIC0xNjQs
NyArMTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAg
Y2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjA5LDE3IEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0
KFByb21vdGVkSGVhcExvY2F0aW9uKFNwcmVhZFBMb2MsIG5vZGUpLCBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihOZXdBcnJheVdpdGhTcHJlYWRBcmd1
bWVudFBMb2MsIG5vZGUsIGkpLCBBdmFpbGFiaWxpdHkoY2hpbGQpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXMoR3JhcAogLy8gaGF2aW5nIHJ1biB0aGUgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLgogY2xhc3Mg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKKyAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3IoR3JhcGgmKTsKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKQEAgLTU0LDYgKzU0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAogICAgIEF2YWlsYWJpbGl0
eU1hcCBtX2F2YWlsYWJpbGl0eTsKKyAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNp
b24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJl
cGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAg
Ly8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIG1hdGVyaWFsaXphdGlvbiBub2Rlcy4KLSAgICAgICAg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7Cisg
ICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxh
dG9yKG1fZ3JhcGgpOwogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICAgICAgbV9oZWFwID0gbV9oZWFwQXRIZWFkW2Jsb2NrXTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQxICsxMDYsNzUg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlYWRUb3AoKQogICAgIHsKLSAgICAgICAgc3dp
dGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0g
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6IHsKLQotICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7
Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5oYXNBcmd1bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotCi0gICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5v
cCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVu
dEJ5VmFsT3V0T2ZCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb2YgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgZ3VhcmFudGVlcyB0aGF0IEdldE15QXJndW1lbnRCeVZhbCog
d2lsbCBuZXZlcgotICAgICAgICAgICAgICAgIC8vIHJlYWQgYW55IGFyZ3VtZW50cyBiZWxvdyB0
aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLiBGb3IgZXhhbXBsZSwgaWYgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgaXMgMiwKLSAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVyIHJl
YWQgYXJndW1lbnQgMCBvciBhcmd1bWVudCAxLgotICAgICAgICAgICAgICAgIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gbV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAg
ICAgICAgfQotCisgICAgICAgIGF1dG8gcmVhZEZyYW1lID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAg
ICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVh
ZCB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cyBhbmQgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSk7IGkrKykKICAgICAgICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpKTsKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIG1f
cmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byByZWFkTmV3QXJyYXlX
aXRoU3ByZWFkTm9kZSA9IFsmXSAoTm9kZSogYXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAg
ICBBU1NFUlQoYXJyYXlXaXRoU3ByZWFkLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBh
cnJheVdpdGhTcHJlYWQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAg
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9y
KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFk
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5n
ZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hp
bGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIGJvb2wgaXNGb3J3YXJkaW5nTm9kZSA9IGZhbHNl
OworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBD
b25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgor
ICAgICAgICAgICAgaXNGb3J3YXJkaW5nTm9kZSA9IHRydWU7CisgICAgICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6IHsKKworICAgICAgICAgICAgaWYgKGlzRm9yd2Fy
ZGluZ05vZGUgJiYgbV9ub2RlLT5oYXNBcmd1bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVh
ZCA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgcmVh
ZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUoYXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7
CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFzQXJndW1lbnRzQ2hpbGQoKSAmJiBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25v
ZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGd1YXJhbnRl
ZXMgdGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwgbmV2ZXIKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcmVhZCBhbnkgYXJndW1lbnRzIGJlbG93IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRv
IHNraXAuIEZvciBleGFtcGxlLCBpZiBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBpcyAyLAorICAg
ICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVyIHJlYWQgYXJndW1lbnQgMCBvciBhcmd1
bWVudCAxLgorICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1f
bm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZWFkRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAg
ICAgcmVhZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUobV9ub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDkx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw2ICsxMDEyLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAg
ICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDYgKzExNCwxNCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgUHJvCiAgICAgY2FzZSBWZWN0b3JMZW5ndGhQTG9jOgogICAgICAgICBvdXQucHJpbnQo
IlZlY3Rvckxlbmd0aFBMb2MiKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTcHJlYWRQ
TG9jOgorICAgICAgICBvdXQucHJpbnQoIlNwcmVhZFBMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2M6CisgICAgICAgIG91dC5w
cmludCgiTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOSBAQCBlbnVt
IFByb21vdGVkTG9jYXRpb25LaW5kIHsKICAgICBOYW1lZFByb3BlcnR5UExvYywKICAgICBQdWJs
aWNMZW5ndGhQTG9jLAogICAgIFN0cnVjdHVyZVBMb2MsCi0gICAgVmVjdG9yTGVuZ3RoUExvYwor
ICAgIFZlY3Rvckxlbmd0aFBMb2MsCisgICAgU3ByZWFkUExvYywKKyAgICBOZXdBcnJheVdpdGhT
cHJlYWRBcmd1bWVudFBMb2MsCiB9OwogCiBjbGFzcyBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRv
ciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsOCBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYxNiw2ICs1NjE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVuZXhwZWN0ZWQgbm9k
ZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NDAsNiArNTg0MCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBj
YXNlIEdldFN0YWNrOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAg
REZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDM5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+Y2hpbGQxKCkt
PmlzUGhhbnRvbUFsbG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgUGhhbnRvbVNwcmVhZCBvdmVyIFBoYW50
b21DcmVhdGVSZXN0LgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
PmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQ6IHsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBtX2dyYXBoLm1fZm9y
bSA9PSBTU0EpOworICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5v
ZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBQaGFudG9tU3By
ZWFkIG92ZXIgUGhhbnRvbUNyZWF0ZVJlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgIWNoaWxkLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAg
ICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzUGhhbnRvbUFsbG9jYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgYml0VmVjdG9yLT5nZXQoaSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIGNoaWxkLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9vdXQoc3RhdGUpCiAg
ICAgICAgICwgbV9wcm9jKCpzdGF0ZS5wcm9jKQorICAgICAgICAsIG1fYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcihtX2dyYXBoKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgICAg
ICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKICAgICB7CkBAIC0xMDg5LDYg
KzEwOTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9u
OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1
ZToKQEAgLTQzMzEsNiArNDMzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX2dyYXBoLmlz
V2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobV9ub2RlKSkgewogICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0
b3IgPSBtX25vZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxs
RnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gs
IFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRM
ZW5ndGhzOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5u
dW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIWJpdFZlY3Rvci0+Z2V0
KGkpKQogICAgICAgICAgICAgICAgICAgICArK3N0YXJ0TGVuZ3RoOwpAQCAtNDM0MSw4ICs0MzQ2
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9u
b2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9y
LT5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5
ID0gbG93Q2VsbCh1c2UpOwotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5hZGQo
bGVuZ3RoLCBtX291dC5sb2FkMzIoZml4ZWRBcnJheSwgbV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6
ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNlLT5vcCgpID09IFBoYW50b21TcHJlYWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9
IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgsIHNwcmVhZExlbmd0aCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
Zml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpT
Rml4ZWRBcnJheV9zaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTQzNTUsNDIgKzQzNzAsODQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIGkpOwogICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewotICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygp
OwotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNlLT5vcCgpID09IFBoYW50b21T
cHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVzZS0+Y2hp
bGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1c2UtPmNoaWxkMSgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNoaWxkMSgpLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJh
bWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbG9hZEluZGV4U3RhcnQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIo
MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXkgPSBsb3dDZWxsKHVzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuaXNaZXJvNjQobGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOwogCi0gICAg
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpeGVkSW5kZXhTdGFydCA9IG1fb3V0LmFu
Y2hvcihtX291dC5jb25zdEludFB0cigwKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGFycmF5SW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihpbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0
LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKIAotICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheVNpemUgPSBtX291dC56ZXJvRXh0UHRyKG1f
b3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYXJyYXlJbmRleCA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBhcnJheUluZGV4U3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGxvYWRJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBsb2FkSW5kZXhTdGFydCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuaXNaZXJvNjQoZml4ZWRBcnJheVNpemUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSBpdGVtID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGxvYWRJbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChpdGVtLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5p
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIHN0b3JhZ2UsIGFycmF5SW5kZXgpKTsKIAotICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxv
b3BTdGFydCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBu
ZXh0QXJyYXlJbmRleCA9IG1fb3V0LmFkZChhcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigx
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dExvYWRJbmRleCA9IG1fb3V0
LmFkZChsb2FkSW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhMb29wRm9yRmluaXNoID0gbV9vdXQuYW5j
aG9yKG5leHRBcnJheUluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYXJyYXlJ
bmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBhcnJheUluZGV4U3RhcnQpOwotICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheUluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJU
eXBlKCksIGZpeGVkSW5kZXhTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5h
ZGRJbmNvbWluZ1RvUGhpKGxvYWRJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRMb2FkSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoYXJyYXlJbmRl
eCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
TFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNGaXhl
ZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuaW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9yYWdlLCBhcnJheUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYmVsb3cobmV4dExvYWRJbmRleCwgbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwogCi0g
ICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0QXJyYXlJbmRleCA9IG1fb3V0LmFkZChhcnJh
eUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBuZXh0Rml4ZWRBcnJheUluZGV4ID0gbV9vdXQuYWRkKGZpeGVkQXJyYXlJbmRleCwgbV9vdXQu
Y29uc3RJbnRQdHIoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJh
eUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBl
KCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5pc2gpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5ID0gbG93Q2VsbCh1c2UpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaXhlZEluZGV4U3RhcnQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFy
dEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWRkSW5jb21pbmdUb1BoaShmaXhlZEFycmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0
Rml4ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5n
VG9QaGkoYXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheVNpemUgPSBtX291dC56ZXJvRXh0UHRy
KG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYmVsb3cobmV4dEZpeGVkQXJyYXlJbmRleCwgZml4ZWRBcnJheVNpemUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvb3BTdGFydCksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmaXhlZEFycmF5U2l6ZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3Rh
cnQpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNoLCBhcnJheUluZGV4TG9vcEZvckZpbmlz
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgTFZhbHVlIGFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJyYXlJ
bmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5SW5k
ZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZml4ZWRJbmRleFN0YXJ0KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4ZWRBcnJheUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KGl0ZW0sIG1fb3V0
LmJhc2VJbmRleChtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgc3RvcmFnZSwg
YXJyYXlJbmRleCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dEFycmF5
SW5kZXggPSBtX291dC5hZGQoYXJyYXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRGaXhlZEFycmF5SW5kZXggPSBtX291dC5h
ZGQoZml4ZWRBcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0
LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFkZEluY29taW5nVG9QaGkoZml4ZWRBcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEZpeGVk
QXJyYXlJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaShhcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEFycmF5SW5kZXgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmJlbG93KG5leHRGaXhlZEFycmF5SW5kZXgsIGZpeGVkQXJyYXlTaXplKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRl
eExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9
IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwogICAgICAgICAgICAgICAgICAg
ICBMVmFsdWUgaXRlbSA9IGxvd0pTVmFsdWUodXNlKTsKQEAgLTQ0MjgsNiArNDQ4NSwxMiBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU3ByZWFkKCkKICAgICB7CisgICAgICAgIC8vIEl0
IHdvdWxkIGJlIHRyaXZpYWwgdG8gc3VwcG9ydCB0aGlzLCBidXQgZm9yIG5vdywgd2UgbmV2ZXIg
Y3JlYXRlCisgICAgICAgIC8vIElSIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgdGhpcy4gVGhlIHJl
YXNvbiBpcyB0aGF0IFNwcmVhZCBpcyBvbmx5CisgICAgICAgIC8vIGNvbnN1bWVkIGJ5IE5ld0Fy
cmF5V2l0aFNwcmVhZCBhbmQgbmV2ZXIgYW55dGhpbmcgZWxzZS4gQWxzbywgYW55CisgICAgICAg
IC8vIFNwcmVhZChQaGFudG9tQ3JlYXRlUmVzdCkgd2lsbCB0dXJuIGludG8gUGhhbnRvbVNwcmVh
ZChQaGFudG9tQ3JlYXRlUmVzdCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbm9kZS0+Y2hp
bGQxKCktPm9wKCkgIT0gUGhhbnRvbUNyZWF0ZVJlc3QpOyAKKwogICAgICAgICBMVmFsdWUgYXJn
dW1lbnQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExWYWx1ZSByZXN1
bHQ7CkBAIC02MTMxLDYgKzYxOTQsMjczIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVhZCgp
CisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBMVmFsdWUganND
YWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdGhp
c0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7
CisgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsK
KyAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcnJheVdpdGhTcHJlYWQtPmJpdFZlY3Rv
cigpOworICAgICAgICB1bnNpZ25lZCBudW1Ob25TcHJlYWRQYXJhbWV0ZXJzID0gMDsKKyAgICAg
ICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKKyAgICAgICAgVmVjdG9yPExWYWx1
ZSwgOD4gcGF0Y2hwb2ludEFyZ3VtZW50czsKKyAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJh
bWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdU
Rjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5n
dGhzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQt
Pm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkp
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChh
cnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Cisg
ICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3ByZWFkLT5jaGlsZDEoKS0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApKTsKKyAgICAgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50cy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICArK251bU5vblNwcmVhZFBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAg
TFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0
aFNwcmVhZCwgaSkpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnRBcmd1bWVudHMuYXBwZW5k
KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50UHRyKG51bU5vblNwcmVh
ZFBhcmFtZXRlcnMgKyAxKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVu
Z3RocykKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRk
KGxlbmd0aCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAKKyAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJl
cDo6V2FybUFueSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgVmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRWZWN0b3JXaXRoUmVwKHBhdGNocG9pbnRBcmd1bWVudHMsIFZhbHVlUmVwOjpXYXJtQW55KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFn
VHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9u
SGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7IC8vIE5vIGlucHV0cyB3aWxsIGJlIGluIGEgdm9sYXRp
bGUgcmVnaXN0ZXIuCisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1p
bmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpT
IGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNp
emUgPQorICAgICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsK
KyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisK
KyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworCisgICAgICAgICAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9tUmVwID0gWyZdIChCMzo6VmFsdWVSZXAgcmVw
LCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lz
dGVycy5nZXQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcC5pc0NvbnN0
YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
SW1tNjQocmVwLnZhbHVlKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZTogaW4gdGhpcyBmdW5jdGlvbiwgd2Ugb25seSByZXF1ZXN0IDY0IGJpdCB2YWx1ZXMuCisgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXAuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVwLm9mZnNldEZyb21GUCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwLmlzR1BSKCkpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodXNlZFJlZ2lzdGVycy5nZXQocmVwLmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRF
eGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3Nl
bWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmln
aW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKKworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVXNlZFNsb3RzID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG9yaWdpbmFs
U3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzUmVwID0gcGFyYW1zWzNd
OworICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNSZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Vc2VkU2xvdHMgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhlIHJlcXVpcmVkIGZyYW1lIHNpemUg
aW4gUmVnaXN0ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgc2NyYXRjaEdQ
UjEgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIofihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0UHRy
KENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjEpOwor
CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworCisg
ICAgICAgICAgICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9IENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hp
bGRyZW4oKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmFt
c09mZnNldCA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdl
dChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRl
LT5ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRv
bVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3By
ZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBzcHJl
YWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFyZ3VtZW50c1RvQ29weSA9IHBhcmFtc1tw
YXJhbXNPZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZy
b21SZXAobnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNT
dGFydChpbmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBs
b29wU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3Jh
dGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjMs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNldCksIHNjcmF0Y2hHUFI0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSNCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlua1RvKGxvb3BTdGFydCwgJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Vi
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJl
cChwYXJhbXNbcGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhi
aXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3Mp
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdWYXJhcmdzVGhy
b3dpbmdQYXRoRGlkTm90VGhyb3cpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZG9udFRocm93LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVG
cmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICAgICAgZ2V0VmFs
dWVGcm9tUmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlw
ZSBjYWxsVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGlzVGFp
bENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6
VGFpbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgeworICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAg
ICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lz
dGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQor
ICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21U
YWlsQ2FsbCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkb25l
LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6
cmVnVDApOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52
bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5r
Q2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAg
IG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncygpCiAgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNjE1Nyw2
ICs2NDg3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgImJhZCBub2RlIHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZvcndhcmRpbmcgJiYgbV9ub2RlLT5jaGlsZDMoKSAmJiBtX25vZGUtPmNoaWxk
MygpLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgIGNv
bXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CiAKQEAgLTY1MzAsNiArNjg2NiwxMSBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAgICB7Cisg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpICYmIG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUZvcndhcmRW
YXJhcmdzV2l0aFNwcmVhZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpKQpAQCAtNjYxOCw2ICs2OTU5LDEzNSBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAKKyAgICBM
VmFsdWUgZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAg
eworICAgICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRz
TGVuZ3RoKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNL
bm93bikgeworICAgICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5n
dGgua25vd247CisgICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGtu
b3duTGVuZ3RoKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3Jt
IHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3Vn
aCBkeW5hbWljIG9wZXJhdGlvbnMuCisgICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5j
b25zdEludDMyKDApKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQu
YWJvdmUoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxM
ZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8SW5s
aW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+
OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVk
U3ByZWFkTGVuZ3RoczsKKworICAgICAgICBOb2RlKiBhcnJheVdpdGhTcHJlYWQgPSBtX25vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXlXaXRoU3ByZWFk
LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOworICAgICAgICBCaXRWZWN0b3Iq
IGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMgPSAwOworICAgICAgICBWZWN0b3I8TFZhbHVl
LCAyPiBzcHJlYWRMZW5ndGhzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJy
YXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChiaXRW
ZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52
YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hpbGQx
KCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwg
WyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNwcmVhZExlbmd0aEZyb21J
bmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkpOworICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgICAgICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsKKyAg
ICAgICAgfQorCisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29u
c3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOworICAgICAgICBmb3IgKExWYWx1
ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgpOworCisgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQu
Y29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
MzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsK
KworICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVT
dGFydCkudmFsdWUoKTsKKyAgICAgICAgTFZhbHVlIHN0b3JlSW5kZXggPSBtX291dC5jb25zdElu
dFB0cigwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5V2l0aFNwcmVh
ZC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQo
aSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
YXJyYXlXaXRoU3ByZWFkLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNoaWxkLT5j
aGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAgICAgICAgICAg
ICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFt
ZSwgY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJl
YWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJhbWUpKTsKKworICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc3RhcnRMb2FkSW5kZXggPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQ
dHIoMCkpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleCA9
IG1fb3V0LmFuY2hvcihzdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzdGFydFN0b3JlSW5kZXhGb3JFbmQgPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisKKyAg
ICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3ByZWFkTGVuZ3RoKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wKSk7CisKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3AsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAgICAgTFZhbHVlIGxvb3BTdG9yZUluZGV4ID0gbV9vdXQucGhpKEludDY0
LCBzdGFydFN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBsb2FkSW5kZXggPSBt
X291dC5waGkoSW50NjQsIHN0YXJ0TG9hZEluZGV4KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
dmFsdWUgPSBtX291dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRl
eChtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGxvYWRJbmRleCkpOworICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlh
YmxlcywgdGFyZ2V0U3RhcnQsIGxvb3BTdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgTFZh
bHVlIG5leHRMb2FkSW5kZXggPSBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoMSksIGxvYWRJ
bmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb2FkSW5kZXgs
IG1fb3V0LmFuY2hvcihuZXh0TG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5l
eHRTdG9yZUluZGV4ID0gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKDEpLCBsb29wU3RvcmVJ
bmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShsb29wU3RvcmVJ
bmRleCwgbV9vdXQuYW5jaG9yKG5leHRTdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbG9vcFN0b3JlSW5kZXhGb3JFbmQgPSBtX291dC5hbmNob3IobmV4dFN0b3Jl
SW5kZXgpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhuZXh0TG9h
ZEluZGV4LCBzcHJlYWRMZW5ndGgpLCB1bnN1cmUobG9vcCksIHVuc3VyZShjb250aW51YXRpb24p
KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICAgICAgICAgIHN0b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0
U3RvcmVJbmRleEZvckVuZCwgbG9vcFN0b3JlSW5kZXhGb3JFbmQpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoYXJyYXlXaXRoU3ByZWFkLCBpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRT
dGFydCwgc3RvcmVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0b3JlSW5kZXggPSBtX291dC5h
ZGQobV9vdXQuY29uc3RJbnRQdHIoMSksIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkTG9vcCA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRTdG9yZUluZGV4ID0gbV9vdXQuYW5j
aG9yKHN0b3JlSW5kZXgpOworICAgICAgICBMVmFsdWUgbG9vcEJvdW5kVmFsdWUgPSBtX291dC5j
b25zdEludFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmJlbG93KHN0b3JlSW5kZXgsIGxvb3BCb3VuZFZhbHVlKSwKKyAgICAgICAgICAgIHVu
c3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkTG9vcCwgY29udGlu
dWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGxvb3BTdG9yZUluZGV4ID0gbV9vdXQucGhpKEludDY0
LCBzdGFydFN0b3JlSW5kZXgpOworICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAorICAgICAg
ICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbG9v
cFN0b3JlSW5kZXgpKTsKKyAgICAgICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LmFkZChsb29w
U3RvcmVJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAgICAgICBtX291dC5hZGRJbmNv
bWluZ1RvUGhpKGxvb3BTdG9yZUluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KG5leHRJbmRleCwgbG9v
cEJvdW5kVmFsdWUpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShjb250aW51YXRpb24p
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICB9CisKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAgICB7CiAgICAgICAgIG1fb3V0Lmp1bXAo
bG93QmxvY2sobV9ub2RlLT50YXJnZXRCbG9jaygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJK
U0FzeW5jRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNG
aXhlZEFycmF5LmgiCiAjaW5jbHVkZSAiSlNHZW5lcmF0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAKQEAgLTg2LDYgKzg3LDggQEAgZXh0ZXJuICJDIiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUAogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3
QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICAvLyBUaG9zZSBhcmUgY29tcGxldGVseSBoYW5kbGVk
IGJ5IG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IKICAgICAgICAgYnJlYWs7CiAKQEAg
LTM5MywxNCArMzk2LDEwMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgICAgICAgICAgICAgQVNTRVJUKGZvdW5kKTsKICAgICAgICAgICAgIH0KICNlbmRp
ZgotCiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIH0KKwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQorCisgICAgY2FzZSBQaGFudG9t
U3ByZWFkOiB7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbnVsbHB0cjsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5s
b2NhdGlvbigpLmtpbmQoKSA9PSBTcHJlYWRQTG9jKSB7CisgICAgICAgICAgICAgICAgYXJyYXkg
PSBqc0Nhc3Q8SlNBcnJheSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVChhcnJheSk7CisKKyAgICAgICAgLy8gTm90ZTogaXQgaXMgc291bmQgZm9yIEpTRml4
ZWRBcnJheTo6Y3JlYXRlRnJvbUFycmF5IHRvIGNhbGwgZ2V0RGlyZWN0SW5kZXggaGVyZQorICAg
ICAgICAvLyBiZWNhdXNlIHdlJ3JlIGd1YXJhbnRlZWQgd2Ugd29uJ3QgYmUgY2FsbGluZyBhbnkg
Z2V0dGVycy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcworICAgICAgICAvLyB0aGF0IHdlIG9ubHkg
c3VwcG9ydCBQaGFudG9tU3ByZWFkIG92ZXIgQ3JlYXRlUmVzdCwgd2hpY2ggaXMgYW4gYXJyYXkg
d2UgY3JlYXRlLgorICAgICAgICAvLyBBbnkgYXR0ZW1wdHMgdG8gcHV0IGEgZ2V0dGVyIG9uIGFu
eSBpbmRpY2VzIG9uIHRoZSByZXN0IGFycmF5IHdpbGwgZXNjYXBlIHRoZSBhcnJheS4KKyAgICAg
ICAgSlNGaXhlZEFycmF5KiBmaXhlZEFycmF5ID0gSlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJy
YXkoZXhlYywgdm0sIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIGZpeGVkQXJyYXk7CisgICAgfQor
CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jaygKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQ29udGlndW91cyk7CisKKyAgICAgICAgdW5zaWduZWQgYXJyYXlTaXplID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgbnVtUHJvcGVydGllcyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5r
aW5kKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jKSB7CisgICAgICAgICAgICAg
ICAgKytudW1Qcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUodmFsdWVzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoSlNGaXhlZEFycmF5
KiBmaXhlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2YWx1ZSkpCisgICAg
ICAgICAgICAgICAgICAgIGFycmF5U2l6ZSArPSBmaXhlZEFycmF5LT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcnJheVNpemUgKz0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgYXJyYXlTaXplKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgLy8gRW5zdXJlIHdlIHNlZSBpbmRpY2VzIGZvciBldmVyeXRoaW5nIGluIHRoZSByYW5nZTog
WzAsIG51bVByb3BlcnRpZXMpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRp
ZXMoKS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZh
bHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2pdOworICAgICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJheVdpdGhT
cHJlYWRBcmd1bWVudFBMb2MgJiYgcHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkgPT0gaSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChmb3VuZCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIFZlY3RvcjxKU1ZhbHVlLCA4
PiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5ncm93KG51bVByb3BlcnRpZXMpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3Bl
cnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAo
cHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQ
TG9jKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh2
YWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmxvY2F0
aW9uKCkuaW5mbygpIDwgbnVtUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRz
W3Byb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpXSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgYXJyYXlJbmRleCA9IDA7CisgICAgICAgIGZvciAo
SlNWYWx1ZSB2YWx1ZSA6IGFyZ3VtZW50cykgeworICAgICAgICAgICAgaWYgKEpTRml4ZWRBcnJh
eSogZml4ZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNGaXhlZEFycmF5Kj4odmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpeGVkQXJyYXktPnNpemUo
KTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmaXhlZEFycmF5LT5nZXQoaSkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwgYXJyYXlJ
bmRleCwgZml4ZWRBcnJheS0+Z2V0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgKythcnJheUlu
ZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gV2UgYXJlIG5vdCBzcHJlYWRpbmcuCisgICAgICAgICAgICAgICAgcmVzdWx0LT5p
bml0aWFsaXplSW5kZXgodm0sIGFycmF5SW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAr
K2FycmF5SW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwK
ICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGZpcnN0VmFyQXJn
T2Zmc2V0KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBlbmRWYXJBcmdzLmxpbmsoJmppdCk7CiAg
ICAgfQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZSwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEFyZ3VtZW50cyAr
IDEpKSk7CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1
bWVudHMgKyAxKSkpOwogICAgIAogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNo
R1BSMSwgdHJ1ZSwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5oCShyZXZpc2lvbiAyMDkx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIC8v
IFdlIG1heSBzdGlsbCBjYWxsIGludG8gdGhpcyBmdW5jdGlvbiB3aGVuICFnbG9iYWxPYmplY3Qt
PmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSwKICAgICAgICAg
ICAgICAgICAvLyBob3dldmVyLCBpZiB3ZSBkbyB0aGF0LCB3ZSBlbnN1cmUgd2UncmUgY2FsbGlu
ZyBpbiB3aXRoIGFuIGFycmF5IHdpdGggYWxsIHNlbGYgcHJvcGVydGllcyBiZXR3ZWVuCiAgICAg
ICAgICAgICAgICAgLy8gWzAsIGxlbmd0aCkuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5
LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIG1heSBh
bHNvIGNhbGwgaW50byB0aGlzIGR1cmluZyBPU1IgZXhpdCB0byBtYXRlcmlhbGl6ZSBhIHBoYW50
b20gZml4ZWQgYXJyYXkuCisgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGJlIGNyZWF0aW5nIGEg
Zml4ZWQgYXJyYXkgZHVyaW5nIE9TUiBleGl0IGV2ZW4gYWZ0ZXIgdGhlIGl0ZXJhdG9yIHByb3Rv
Y29sIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgLy8gQnV0LCB3aGVuIHRoZSBwaGFudG9tIHdv
dWxkIGhhdmUgbG9naWNhbGx5IGJlZW4gY3JlYXRlZCwgdGhlIHByb3RvY29sIGhhZG4ndCBiZWVu
CisgICAgICAgICAgICAgICAgLy8gY2hhbmdlZC4gVGhlcmVmb3JlLCBpdCBpcyBzb3VuZCB0byBh
c3N1bWUgZW1wdHkgaW5kaWNlcyBhcmUganNVbmRlZmluZWQoKS4KICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295694</attachid>
            <date>2016-11-29 19:35:08 -0800</date>
            <delta_ts>2016-11-29 22:25:05 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>124606</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDkxMTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgzIEBACisyMDE2LTExLTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIG9wdGltaXplIHRoZSBwYXR0ZXJuIHdo
ZXJlIHdlIHNwcmVhZCBhIGZ1bmN0aW9uJ3MgcmVzdCBwYXJhbWV0ZXIgdG8gYW5vdGhlciBjYWxs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4NjUK
KworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIG1pY3JvYmVu
Y2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAo
Y3JlYXRlQ2xhc3NIaWVyYXJjaHkubGV0LmN1cnJlbnRDbGFzcyk6CisgICAgICAgIChjcmVhdGVD
bGFzc0hpZXJhcmNoeSk6CisgICAgICAgICogc3RyZXNzL2NhbGwtdmFyYXJncy1zcHJlYWQuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28p
OgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFk
LWNvbnZlcnQtdG8tc3RhdGljLWxvYWRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICog
c3RyZXNzL25ldy1hcnJheS13aXRoLXNwcmVhZC13aXRoLW5vcm1hbC1zcHJlYWQtYW5kLXBoYW50
b20tc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChmb28pOgor
ICAgICAgICAoZXNjYXBlKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogc3RyZXNzL3BoYW50
b20tbmV3LWFycmF5LXdpdGgtc3ByZWFkLW9zci1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGVmZmVjdHMp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9yd2Fy
ZC12YXJhcmdzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MS5i
YXIpOgorICAgICAgICAodGVzdDEuZm9vKToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKHRl
c3QyLmJhcik6CisgICAgICAgICh0ZXN0Mi5mb28pOgorICAgICAgICAodGVzdDMuYmF6KToKKyAg
ICAgICAgKHRlc3QzLmJhcik6CisgICAgICAgICh0ZXN0My5mb28pOgorICAgICAgICAodGVzdDQu
YmF6KToKKyAgICAgICAgKHRlc3Q0LmJhcik6CisgICAgICAgICh0ZXN0NC5mb28pOgorICAgICAg
ICAodGVzdDUuYmF6KToKKyAgICAgICAgKHRlc3Q1LmJhcik6CisgICAgICAgICh0ZXN0NS5mb28p
OgorICAgICAgICAqIHN0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAgICAg
IChlZmZlY3RzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1jYWxs
LWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKGJheik6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBz
dHJlc3Mvc3ByZWFkLWZvcndhcmQtY2FsbC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChpZGVudGl0eSk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBzdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJn
cy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wtMi5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYmF6LkFycmF5LnByb3RvdHlwZS5TeW1ib2wuaXRl
cmF0b3IpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mt
cmVzdC1wYXJhbWV0ZXItY2hhbmdlLWl0ZXJhdG9yLXByb3RvY29sLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgIChiYXouQXJyYXkucHJvdG90eXBlLlN5bWJvbC5pdGVyYXRv
cik6CisgICAgICAgIChiYXopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAg
ICAgICogc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanM6IEFk
ZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgor
CiAyMDE2LTExLTI5ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzaW1wbGUgd2F5IHRvIGltcGxlbWVudCBXYXNtIG9wcyB0aGF0IHJlcXVpcmUg
bW9yZSB0aGFuIG9uZSBCMyBvcGNvZGUKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Rl
ZmF1bHQtZGVyaXZlZC1jb25zdHJ1Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9kZWZhdWx0LWRlcml2ZWQtY29uc3RydWN0b3IuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVmYXVsdC1kZXJpdmVkLWNvbnN0cnVjdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIGNyZWF0ZUNsYXNzSGll
cmFyY2h5KGRlcHRoKSB7CisgICAgbGV0IGN1cnJlbnRDbGFzcyA9IGNsYXNzIEJhc2UgeyB9Owor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgeworICAgICAgICBjdXJyZW50Q2xh
c3MgPSBjbGFzcyBleHRlbmRzIGN1cnJlbnRDbGFzcyB7fTsKKyAgICB9CisgICAgcmV0dXJuIGN1
cnJlbnRDbGFzczsKK30KKworbGV0IGN0b3IgPSBjcmVhdGVDbGFzc0hpZXJhcmNoeSgxMCk7Cits
ZXQgc3RhcnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykg
eworICAgIGxldCB4ID0gbmV3IGN0b3Ioe30sIHt9LCAyMCwgMzAsIDQwLCA1MCwgNjAsIHt9LCA4
MCwgdHJ1ZSwgZmFsc2UpOworfQorCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9z
ZSkKKyAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mv
Y2FsbC12YXJhcmdzLXNwcmVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jYWxs
LXZhcmFyZ3Mtc3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2NhbGwt
dmFyYXJncy1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rp
b24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQgYXNzZXJ0OiAiICsgbSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlv
biBiYXIoLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQorbm9JbmxpbmUoYmFyKTsKKwor
ZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICBsZXQgeCA9IGJhciguLi5hcmdzLCA0Miwg
Li4uYXJncyk7IAorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkr
Myk7CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsx
LCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbMV0gPT09IGkrMiwgSlNPTi5zdHJp
bmdpZnkocikpOworICAgIGFzc2VydChyWzJdID09PSBpKzMsIEpTT04uc3RyaW5naWZ5KHIpKTsK
KyAgICBhc3NlcnQoclszXSA9PT0gNDIsIEpTT04uc3RyaW5naWZ5KHIpKTsKKyAgICBhc3NlcnQo
cls0XSA9PT0gaSsxLCBKU09OLnN0cmluZ2lmeShyKSk7CisgICAgYXNzZXJ0KHJbNV0gPT09IGkr
MiwgSlNPTi5zdHJpbmdpZnkocikpOworICAgIGFzc2VydChyWzZdID09PSBpKzMsIEpTT04uc3Ry
aW5naWZ5KHIpKTsKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy1vbi1uZXct
YXJyYXktd2l0aC1zcHJlYWQtY29udmVydC10by1zdGF0aWMtbG9hZHMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLW9uLW5ldy1hcnJheS13aXRoLXNwcmVhZC1j
b252ZXJ0LXRvLXN0YXRpYy1sb2Fkcy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3Mtb24tbmV3LWFycmF5LXdpdGgtc3ByZWFkLWNvbnZlcnQtdG8tc3RhdGlj
LWxvYWRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGFzc2Vy
dChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCEiKTsKK30K
K25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgcmV0dXJu
IGFyZ3M7Cit9CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJncykgeworICAgIHJldHVybiBiYXooLi4u
YXJncywgNDIsIC4uLmFyZ3MpOworfQorZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQpIHsKKyAgICBy
ZXR1cm4gYmFyKGEsIGIsIGMsIGQpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHIgPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7
CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSA3KTsKKyAgICBhc3NlcnQoclswXSA9PT0gaSsxKTsK
KyAgICBhc3NlcnQoclsxXSA9PT0gaSsyKTsKKyAgICBhc3NlcnQoclsyXSA9PT0gaSszKTsKKyAg
ICBhc3NlcnQoclszXSA9PT0gNDIpOworICAgIGFzc2VydChyWzRdID09PSBpKzEpOworICAgIGFz
c2VydChyWzVdID09PSBpKzIpOworICAgIGFzc2VydChyWzZdID09PSBpKzMpOworfQpJbmRleDog
SlNUZXN0cy9zdHJlc3MvbmV3LWFycmF5LXdpdGgtc3ByZWFkLXdpdGgtbm9ybWFsLXNwcmVhZC1h
bmQtcGhhbnRvbS1zcHJlYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvbmV3LWFy
cmF5LXdpdGgtc3ByZWFkLXdpdGgtbm9ybWFsLXNwcmVhZC1hbmQtcGhhbnRvbS1zcHJlYWQuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvbmV3LWFycmF5LXdpdGgtc3ByZWFkLXdp
dGgtbm9ybWFsLXNwcmVhZC1hbmQtcGhhbnRvbS1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpCit9Citub0lubGluZShhc3NlcnQpOwor
CitmdW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxldCByID0gWy4uLmEsIC4uLmFyZ3Nd
OworICAgIHJldHVybiByOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gZXNjYXBlKGEp
IHsgcmV0dXJuIGE7IH0KK25vSW5saW5lKGVzY2FwZSk7CitmdW5jdGlvbiBiYXIoYSwgLi4uYXJn
cykgeworICAgIGVzY2FwZShhcmdzKTsKKyAgICBsZXQgciA9IFsuLi5hLCAuLi5hcmdzXTsKKyAg
ICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTAw
MDA7IGkrKykgeworICAgIGZvciAobGV0IGYgb2YgW2ZvbywgYmFyXSkgeworICAgICAgICBsZXQg
byA9IHt9OworICAgICAgICBsZXQgYSA9IFtvLCAyMF07CisgICAgICAgIGxldCByID0gZihhLCAz
MCwgNDApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDQpOworICAgICAgICBhc3NlcnQo
clswXSA9PT0gbyk7CisgICAgICAgIGFzc2VydChyWzFdID09PSAyMCk7CisgICAgICAgIGFzc2Vy
dChyWzJdID09PSAzMCk7CisgICAgICAgIGFzc2VydChyWzNdID09PSA0MCk7CisgICAgfQorfQpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1uZXctYXJyYXktd2l0aC1zcHJlYWQtb3NyLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1uZXctYXJyYXktd2l0
aC1zcHJlYWQtb3NyLWV4aXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcGhh
bnRvbS1uZXctYXJyYXktd2l0aC1zcHJlYWQtb3NyLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7
CisKK2xldCB2YWx1ZSA9IGZhbHNlOworCitmdW5jdGlvbiBiYXooeCkgeworICAgIGlmICh0eXBl
b2YgeCAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgdmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4geDsKK30KK25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7Cisg
ICAgcmV0dXJuIGFyZ3M7Cit9CisKK2xldCBkaWRFZmZlY3RzID0gZmFsc2U7IAorZnVuY3Rpb24g
ZWZmZWN0cygpIHsgZGlkRWZmZWN0cyA9IHRydWU7IH0KK25vSW5saW5lKGVmZmVjdHMpOworCitm
dW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxldCB0aGVBcmdzID0gWy4uLmFyZ3MsIGEs
IC4uLmFyZ3NdOworICAgIGJheihhKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgZWZmZWN0
cygpOworICAgIH0KKyAgICBsZXQgciA9IGJhci5hcHBseShudWxsLCB0aGVBcmdzKTsKKyAgICBy
ZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAw
OyBpKyspIHsKKyAgICBmb28oaSwgaSsxKTsKKyAgICBhc3NlcnQoIWRpZEVmZmVjdHMpOworfQor
bGV0IG8gPSB7fTsKK2xldCBbYSwgYiwgY10gPSBmb28obywgMjApOworYXNzZXJ0KGEgPT09IDIw
KTsKK2Fzc2VydChiID09PSBvKTsKK2Fzc2VydChjID09PSAyMCk7Cithc3NlcnQoZGlkRWZmZWN0
cyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcGhhbnRvbS1zcHJlYWQtZm9yd2FyZC12
YXJhcmdzLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3BoYW50b20tc3ByZWFk
LWZvcndhcmQtdmFyYXJncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorInVz
ZSBzdHJpY3QiOworCitmdW5jdGlvbiBhc3NlcnQoYiwgbT0iIikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsgbSk7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlvbiBiYXIoYSwgYiwg
YywgZCkgeworICAgICAgICByZXR1cm4gW2EsIGIsIGMsIGRdOworICAgIH0KKyAgICBmdW5jdGlv
biBmb28oLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4uLmFyZ3MpOworICAgIH0KKyAg
ICBub0lubGluZShmb28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7
CisgICAgICAgIGxldCBbYSwgYiwgYywgZF0gPSBmb28oaSwgaSsxLCBpKzIsIGkrMyk7CisgICAg
ICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkrMSk7CisgICAgICAg
IGFzc2VydChjID09PSBpKzIpOworICAgICAgICBhc3NlcnQoZCA9PT0gaSszKSA7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAg
ICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsK
KyAgICAgICAgcmV0dXJuIGJhciguLi5hcmdzLCBhLCAuLi5hcmdzKTsKKyAgICB9CisgICAgbm9J
bmxpbmUoZm9vKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAg
ICAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSA3KTsKKyAgICAgICAgbGV0IFthLCBiLCBjLCBkLCBlLCBmLCBnXSA9IHI7CisgICAg
ICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSsyKTsKKyAgICAg
ICAgYXNzZXJ0KGMgPT09IGkrMyk7CisgICAgICAgIGFzc2VydChkID09PSBpKTsKKyAgICAgICAg
YXNzZXJ0KGUgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChmID09PSBpKzIpOworICAgICAgICBh
c3NlcnQoZyA9PT0gaSszKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBm
dW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAg
IH0KKyAgICBmdW5jdGlvbiBmb28oYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmFyKC4uLmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZv
byhpLCBpKzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgbGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKzMpOworICAg
ICAgICBhc3NlcnQoYiA9PT0gaSk7CisgICAgICAgIGFzc2VydChjID09PSBpKzMpOworICAgIH0K
K30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAgZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAg
ICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBiYXooLi4uYXJncyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGZvbyhhLCBi
LCBjLCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIoLi4uYXJncywgYSwgLi4uYXJn
cyk7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCByID0gZm9vKGksIGkrMSwgaSsyLCBpKzMpOwor
ICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoclswXSA9PT0g
aSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBiYXooYSwg
YiwgYykgeworICAgICAgICByZXR1cm4gW2EsIGIsIGNdOworICAgIH0KKyAgICBmdW5jdGlvbiBi
YXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6KC4uLmFyZ3MpOworICAgIH0KKyAgICBm
dW5jdGlvbiBmb28oYSwgYiwgYywgZCwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmFyKC4u
LmFyZ3MsIGEsIC4uLmFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGZvbyhpLCBp
KzEsIGkrMiwgaSszKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAgICAgICAg
bGV0IFthLCBiLCBjXSA9IHI7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOwor
ICAgIH0KK30KKwordGVzdDEoKTsKK3Rlc3QyKCk7Cit0ZXN0MygpOwordGVzdDQoKTsKK3Rlc3Q1
KCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9waGFudG9tLXNwcmVhZC1vc3ItZXhpdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHZhbHVlID0gZmFsc2U7CisKK2Z1bmN0aW9uIGJheih4
KSB7CisgICAgaWYgKHR5cGVvZiB4ICE9PSAibnVtYmVyIikgeworICAgICAgICB2YWx1ZSA9IHRy
dWU7CisgICAgfQorICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24g
YmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30KKworbGV0IGRpZEVmZmVjdHMgPSBm
YWxzZTsgCitmdW5jdGlvbiBlZmZlY3RzKCkgeyBkaWRFZmZlY3RzID0gdHJ1ZTsgfQorbm9Jbmxp
bmUoZWZmZWN0cyk7CisKK2Z1bmN0aW9uIGZvbyhhLCAuLi5hcmdzKSB7CisgICAgbGV0IHIgPSBi
YXIoLi4uYXJncywgYmF6KGEpLCAuLi5hcmdzKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAg
ZWZmZWN0cygpOworICAgIH0KKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBmb28oaSwgaSsxKTsKKyAgICBh
c3NlcnQoIWRpZEVmZmVjdHMpOworfQorbGV0IG8gPSB7fTsKK2xldCBbYSwgYiwgY10gPSBmb28o
bywgMjApOworYXNzZXJ0KGEgPT09IDIwKTsKK2Fzc2VydChiID09PSBvKTsKK2Fzc2VydChjID09
PSAyMCk7Cithc3NlcnQoZGlkRWZmZWN0cyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQt
Y2FsbC1jb252ZXJ0LXRvLXN0YXRpYy1jYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1jYWxsLWNvbnZlcnQtdG8tc3RhdGljLWNhbGwuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWNhbGwtY29udmVydC10by1zdGF0aWMtY2FsbC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQhIik7Cit9Citub0lubGluZShh
c3NlcnQpOworCitmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgIHJldHVybiBhcmdzOworfQor
bm9JbmxpbmUoYmF6KTsKK2Z1bmN0aW9uIGJhcihhLCAuLi5hcmdzKSB7CisgICAgcmV0dXJuIGJh
eiguLi5hcmdzLCA0MiwgLi4uYXJncyk7Cit9CitmdW5jdGlvbiBmb28oYSwgYiwgYywgZCkgewor
ICAgIHJldHVybiBiYXIoYSwgYiwgYywgZCk7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgciA9IGZvbyhpLCBpKzEsIGkrMiwg
aSszKTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IDcpOworICAgIGFzc2VydChyWzBdID09PSBp
KzEpOworICAgIGFzc2VydChyWzFdID09PSBpKzIpOworICAgIGFzc2VydChyWzJdID09PSBpKzMp
OworICAgIGFzc2VydChyWzNdID09PSA0Mik7CisgICAgYXNzZXJ0KHJbNF0gPT09IGkrMSk7Cisg
ICAgYXNzZXJ0KHJbNV0gPT09IGkrMik7CisgICAgYXNzZXJ0KHJbNl0gPT09IGkrMyk7Cit9Cklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC1jYWxsLXZhcmFyZ3Mtc3RhY2stb3Zl
cmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtY2Fs
bC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3NwcmVhZC1mb3J3YXJkLWNhbGwtdmFyYXJncy1zdGFjay1vdmVyZmxvdy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7Cit9Citub0lubGlu
ZShhc3NlcnQpOworCitmdW5jdGlvbiBpZGVudGl0eShhKSB7IHJldHVybiBhOyB9Citub0lubGlu
ZShpZGVudGl0eSk7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFyZ3M7
Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYSwgLi4uYXJncykgeworICAgIGxl
dCBhcmcgPSBpZGVudGl0eShhKTsKKyAgICB0cnkgeworICAgICAgICBsZXQgciA9IGJhciguLi5h
cmdzLCAuLi5hcmdzKTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgIHJldHVybiBhcmc7CisgICAgfQorfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAgbGV0IGFyZ3MgPSBbXTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAgICAgIGFyZ3MucHVzaChpKTsKKyAgICB9CisKKyAg
ICBsZXQgbyA9IHt9OworICAgIGxldCByID0gZm9vKG8sIC4uLmFyZ3MpOworICAgIGxldCBpID0g
MDsKKyAgICBmb3IgKGxldCBhcmcgb2YgYXJncykgeworICAgICAgICBhc3NlcnQocltpXSA9PT0g
YXJnKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBmb3IgKGxldCBhcmcgb2YgYXJncykgewor
ICAgICAgICBhc3NlcnQocltpXSA9PT0gYXJnKTsKKyAgICAgICAgaSsrOworICAgIH0KK30KKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisgICAgbGV0IHRocmV3ID0gZmFsc2U7Cisg
ICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgYXJncyA9IFtdOworICAgIGxldCBhcmdDb3VudCA9IG1h
eEFyZ3VtZW50cygpICogKDIvMyk7CisgICAgYXJnQ291bnQgPSBhcmdDb3VudCB8IDA7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgIGFyZ3MucHVzaChp
KTsKKyAgICB9CisKKyAgICBsZXQgciA9IGZvbyhvLCAuLi5hcmdzKTsKKyAgICBhc3NlcnQociA9
PT0gbyk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9yd2FyZC12YXJhcmdzLXJl
c3QtcGFyYW1ldGVyLWNoYW5nZS1pdGVyYXRvci1wcm90b2NvbC0yLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3MtcmVzdC1wYXJhbWV0ZXItY2hh
bmdlLWl0ZXJhdG9yLXByb3RvY29sLTIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJl
c3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3It
cHJvdG9jb2wtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitmdW5jdGlvbiBh
c3NlcnQoYiwgbT0iIikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgYXNzZXJ0aW9uOiAiICsgbSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitsZXQgY2FsbGVk
ID0gZmFsc2U7CitmdW5jdGlvbiBiYXooYykgeworICAgIGlmIChjKSB7CisgICAgICAgIEFycmF5
LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBh
c3NlcnQoZmFsc2UsICJzaG91bGQgbm90IGJlIGNhbGxlZCEiKTsKKyAgICAgICAgICAgIGxldCBp
ID0gMDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgbmV4dCgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAic2hvdWxkIG5vdCBiZSBjYWxsZWQhIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0KK30K
K25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgcmV0dXJuIGFy
Z3M7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oYywgLi4uYXJncykgeworICAg
IGFyZ3MgPSBbLi4uYXJnc107CisgICAgYmF6KGMpOworICAgIHJldHVybiBiYXIuYXBwbHkobnVs
bCwgYXJncyk7Cit9Citub0lubGluZShmb28pOworCitmdW5jdGlvbiB0ZXN0KGMpIHsKKyAgICBj
b25zdCBhcmdzID0gW3t9LCAyMCwgW10sIDQ1XTsKKyAgICBsZXQgciA9IGZvbyhjLCAuLi5hcmdz
KTsKKyAgICBhc3NlcnQoci5sZW5ndGggPT09IHIubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IHIubGVuZ3RoOyBpKyspCisgICAgICAgIGFzc2VydChyW2ldID09PSBhcmdzW2ldKTsK
K30KK25vSW5saW5lKHRlc3QpOworZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7Cisg
ICAgdGVzdChmYWxzZSk7Cit9Cit0ZXN0KHRydWUpOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3By
ZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9j
b2wuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJn
cy1yZXN0LXBhcmFtZXRlci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1yZXN0LXBhcmFtZXRl
ci1jaGFuZ2UtaXRlcmF0b3ItcHJvdG9jb2wuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IGNh
bGxlZCA9IGZhbHNlOworZnVuY3Rpb24gYmF6KGMpIHsKKyAgICBpZiAoYykgeworICAgICAgICBB
cnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgbGV0IGkgPSAwOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBuZXh0
KCkgeworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
ID09PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB0cnVlfTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogNDAsIGRvbmU6IGZhbHNlfTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfQorbm9Jbmxp
bmUoYmF6KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30K
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhjLCAuLi5hcmdzKSB7CisgICAgYmF6KGMp
OworICAgIHJldHVybiBiYXIoLi4uYXJncyk7Cit9Citub0lubGluZShmb28pOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBjb25zdCBjID0gZmFsc2U7CisgICAgY29u
c3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CisgICAgbGV0IHIgPSBmb28oYywgLi4uYXJncyk7
CisgICAgYXNzZXJ0KHIubGVuZ3RoID09PSByLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCByLmxlbmd0aDsgaSsrKQorICAgICAgICBhc3NlcnQocltpXSA9PT0gYXJnc1tpXSk7Cit9
CisKK2NvbnN0IGMgPSB0cnVlOworY29uc3QgYXJncyA9IFt7fSwgMjAsIFtdLCA0NV07CitsZXQg
ciA9IGZvbyhjLCAuLi5hcmdzKTsKK2Fzc2VydChyLmxlbmd0aCA9PT0gMSk7Cithc3NlcnQoclsw
XSA9PT0gNDApOwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc3ByZWFkLWZvcndhcmQtdmFyYXJncy1z
dGFjay1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zcHJlYWQtZm9y
d2FyZC12YXJhcmdzLXN0YWNrLW92ZXJmbG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL3NwcmVhZC1mb3J3YXJkLXZhcmFyZ3Mtc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorbm9JbmxpbmUo
YXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICByZXR1cm4gYXJnczsKK30K
KworZnVuY3Rpb24gZm9vKGEsIC4uLmFyZ3MpIHsKKyAgICB0cnkgeworICAgICAgICBsZXQgciA9
IGJhciguLi5hcmdzLCAuLi5hcmdzKTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfSBjYXRjaChl
KSB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCBhcmdzID0gW107CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAgICBhcmdzLnB1c2goaSk7CisgICAg
fQorCisgICAgbGV0IG8gPSB7fTsKKyAgICBsZXQgciA9IGZvbyhvLCAuLi5hcmdzKTsKKyAgICBs
ZXQgaSA9IDA7CisgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHJb
aV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgZm9yIChsZXQgYXJnIG9mIGFy
Z3MpIHsKKyAgICAgICAgYXNzZXJ0KHJbaV0gPT09IGFyZyk7CisgICAgICAgIGkrKzsKKyAgICB9
Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykgeworICAgIGxldCB0aHJldyA9IGZh
bHNlOworICAgIGxldCBvID0ge307CisgICAgbGV0IGFyZ3MgPSBbXTsKKyAgICBsZXQgYXJnQ291
bnQgPSBtYXhBcmd1bWVudHMoKSAqICgyLzMpOworICAgIGFyZ0NvdW50ID0gYXJnQ291bnQgfCAw
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAgICAgICBhcmdz
LnB1c2goaSk7CisgICAgfQorCisgICAgbGV0IHIgPSBmb28obywgLi4uYXJncyk7CisgICAgYXNz
ZXJ0KHIgPT09IG8pOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDkxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQ5IEBACisyMDE2LTExLTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIG9wdGltaXplIHRoZSBwYXR0ZXJu
IHdoZXJlIHdlIHNwcmVhZCBhIGZ1bmN0aW9uJ3MgcmVzdCBwYXJhbWV0ZXIgdG8gYW5vdGhlciBj
YWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBh
dGNoIG9wdGltaXplcyB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIHRvIHByZXZlbnQgYm90aCB0aGUg
YWxsb2NhdGlvbgorICAgICAgICBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIsIGFuZCB0aGUgZXhlY3V0
aW9uIG9mIHRoZSBpdGVyYXRvciBwcm90b2NvbDoKKyAgICAgICAgCisgICAgICAgIGBgYAorICAg
ICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICAgICAgbGV0IGFyciA9IFsuLi5h
cmdzXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYW5kCisgICAgICAgIAorICAgICAg
ICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICAgICAgYmFyKC4uLmFyZ3MpOworICAg
ICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgVG8gZG8gdGhpcywgSSd2ZSBl
eHRlbmRlZCB0aGUgYXJndW1lbnRzIGVsaW1pbmF0aW9uIHBoYXNlIHRvIHJlYXNvbgorICAgICAg
ICBhYm91dCBTcHJlYWQgYW5kIE5ld0FycmF5V2l0aFNwcmVhZC4gSSd2ZSBhZGRlZCB0d28gbmV3
IG5vZGVzLCBQaGFudG9tU3ByZWFkCisgICAgICAgIGFuZCBQaGFudG9tTmV3QXJyYXlXaXRoU3By
ZWFkLiBQaGFudG9tU3ByZWFkIGlzIG9ubHkgYWxsb3dlZCBvdmVyIHJlc3QKKyAgICAgICAgcGFy
YW1ldGVycyB0aGF0IGRvbid0IGVzY2FwZS4gSWYgdGhlIHJlc3QgcGFyYW1ldGVyICpkb2VzKiBl
c2NhcGUsIHdlIGNhbid0CisgICAgICAgIGNvbnZlcnQgdGhlIHNwcmVhZCBpbnRvIGEgcGhhbnRv
bSBiZWNhdXNlIGl0IHdvdWxkIG5vdCBiZSBzb3VuZCB3LnIudCBKUworICAgICAgICBzZW1hbnRp
Y3MgYmVjYXVzZSB3ZSB3b3VsZCBiZSByZWFkaW5nIGZyb20gdGhlIGNhbGwgZnJhbWUgZXZlbiB0
aG91Z2gKKyAgICAgICAgdGhlIHJlc3QgYXJyYXkgbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAg
CisgICAgICAgIE5vdGUgdGhhdCBOZXdBcnJheVdpdGhTcHJlYWQgYWxzbyB1bmRlcnN0YW5kcyB3
aGF0IHRvIGRvIHdoZW4gb25lIG9mIGl0cworICAgICAgICBhcmd1bWVudHMgaXMgUGhhbnRvbVNw
cmVhZChAUGhhbnRvbUNyZWF0ZVJlc3QpIGV2ZW4gaWYgaXQgaXRzZWxmIGlzIGVzY2FwZWQuCisg
ICAgICAgIAorICAgICAgICBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIGlzIG9ubHkgYWxsb3dl
ZCBvdmVyIGEgc2VyaWVzIG9mCisgICAgICAgIFBoYW50b21TcHJlYWQoQFBoYW50b21DcmVhdGVS
ZXN0KSBub2Rlcy4gTGlrZSB3aXRoIFBoYW50b21TcHJlYWQsIFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQKKyAgICAgICAgaXMgb25seSBhbGxvd2VkIGlmIG5vbmUgb2YgaXRzIGFyZ3VtZW50cyB0
aGF0IGFyZSBiZWluZyBzcHJlYWQgYXJlIGVzY2FwZWQKKyAgICAgICAgYW5kIGlmIGl0IGl0c2Vs
ZiBpcyBub3QgZXNjYXBlZC4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgdGhlcmUgaXMgYSBk
ZXBlbmRlbmN5IGJldHdlZW4gYSBub2RlIGJlaW5nIGEgY2FuZGlkYXRlIGFuZAorICAgICAgICB0
aGUgZXNjYXBlZCBzdGF0ZSBvZiB0aGUgbm9kZSdzIGNoaWxkcmVuLCBJJ3ZlIGV4dGVuZGVkIHRo
ZSBub3Rpb24KKyAgICAgICAgb2YgZXNjYXBpbmcgYSBub2RlIGluc2lkZSB0aGUgYXJndW1lbnRz
IGVsaW1pbmF0aW9uIHBoYXNlLiBOb3csIHdoZW4KKyAgICAgICAgYW55IG5vZGUgaXMgZXNjYXBl
ZCwgd2UgbXVzdCBjb25zaWRlciBhbGwgb3RoZXIgY2FuZGlkYXRlcyB0aGF0IGFyZSBtYXkKKyAg
ICAgICAgbm93IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgIEZvciBleGFt
cGxlOgorICAgICAgICAKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdz
KSB7CisgICAgICAgICAgICBlc2NhcGUoYXJncyk7CisgICAgICAgICAgICBiYXIoLi4uYXJncyk7
CisgICAgICAgIH0KKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBJbiB0aGUgYWJvdmUg
cHJvZ3JhbSwgd2UgZG9uJ3Qga25vdyBpZiB0aGUgZnVuY3Rpb24gY2FsbCB0byBlc2NhcGUoKQor
ICAgICAgICBtb2RpZmllcyBhcmdzLCB0aGVyZWZvcmUsIHRoZSBzcHJlYWQgY2FuIG5vdCBiZWNv
bWUgcGhhbnRvbSBiZWNhdXNlCisgICAgICAgIHRoZSBleGVjdXRpb24gb2YgdGhlIHNwcmVhZCBt
YXkgbm90IGJlIGFzIHNpbXBsZSBhcyByZWFkaW5nIHRoZQorICAgICAgICBhcmd1bWVudHMgZnJv
bSB0aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoZSBh
cmd1bWVudHMgZWxpbWluYXRpb24gcGhhc2UgZG9lcyBub3QgY29uc2lkZXIgY29udHJvbAorICAg
ICAgICBmbG93IHdoZW4gZG9pbmcgaXRzIGVzY2FwZSBhbmFseXNpcy4gSXQgd291bGQgYmUgZ29v
ZCB0byBpbnRlZ3JhdGUgdGhpcworICAgICAgICBwaGFzZSB3aXRoIHRoZSBvYmplY3QgYWxsb2Nh
dGlvbiBzaW5raW5nIHBoYXNlLiBUbyBzZWUgd2h5LCBjb25zaWRlcgorICAgICAgICBhbiBleGFt
cGxlIHdoZXJlIHdlIGRvbid0IGVsaW1pbmF0ZSB0aGUgc3ByZWFkIGFuZCBhbGxvY2F0aW9uIG9m
IHRoZSByZXN0CisgICAgICAgIHBhcmFtZXRlciBldmVuIHRob3VnaCB3ZSBjb3VsZDoKKyAgICAg
ICAgCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28ocmFyZUNvbmRpdGlvbiwgLi4u
YXJncykgeworICAgICAgICAgICAgYmFyKC4uLmFyZ3MpOworICAgICAgICAgICAgaWYgKHJhcmVD
b25kaXRpb24pCisgICAgICAgICAgICAgICAgYmF6KGFyZ3MpOworICAgICAgICB9CisgICAgICAg
IGBgYAorICAgICAgICAKKyAgICAgICAgVGhlcmUgYXJlIG9ubHkgYSBmZXcgdXNlcnMgb2YgdGhl
IFBoYW50b21TcHJlYWQgYW5kIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQKKyAgICAgICAgbm9k
ZXMuIFBoYW50b21TcHJlYWQgaXMgb25seSB1c2VkIGJ5IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQgYW5kIE5ld0FycmF5V2l0aFNwcmVhZC4KKyAgICAgICAgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCBpcyBvbmx5IHVzZWQgYnkgRm9yd2FyZFZhcmFyZ3MgYW5kIHRoZSB2YXJpb3VzCisgICAg
ICAgICpDYWxsKkZvcndhcmRWYXJhcmdzIG5vZGVzLiBUaGUgdXNlcnMgb2YgdGhlc2UgcGhhbnRv
bXMga25vdyBob3cgdG8gcHJvZHVjZQorICAgICAgICB3aGF0IHRoZSBwaGFudG9tIG5vZGUgd291
bGQgaGF2ZSBwcm9kdWNlZC4gRm9yIGV4YW1wbGUsIE5ld0FycmF5V2l0aFNwcmVhZAorICAgICAg
ICBrbm93cyBob3cgdG8gcHJvZHVjZSB0aGUgdmFsdWVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBy
b2R1Y2VkIGJ5IFBoYW50b21TcHJlYWQoQFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICBieSBk
aXJlY3RseSByZWFkaW5nIGZyb20gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIGlzIGEgNiUgc3BlZWR1cCBvbiBteSBNQlAgb24gRVM2U2FtcGxlQmVuY2guCisK
KyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlBcHBlbmRMZWEpOgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuaDoKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpC
dWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3Rvcik6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdGb3JBbGxLaWxscy5oOgor
ICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJp
dFZlY3Rvcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9tQWxsb2NhdGlvbik6
CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg6Cisg
ICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAg
ICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6TG93ZXJERkdUb0IzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTmV3QXJyYXlXaXRoU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVNwcmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRm9yd2FyZFZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpnZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCk6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvblBvcHVsYXRlT2Jq
ZWN0SW5PU1IpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHA6CisgICAgICAgIChK
U0M6OmVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKToKKyAgICAgICAgKiBqc2MuY3BwOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlv
bk1heEFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0ZpeGVkQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6SlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkpOgorCiAyMDE2LTExLTI5ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCBzdXBw
b3J0IENyZWF0ZVRoaXMgaW4gdGhlIEZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlz
aW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OTAsNiArOTkwLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1w
bGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAorc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRl
Kik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwog
I2VuZGlmCkBAIC0xMjQyLDYgKzEyNDQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAic2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzIiwgZnVuY3Rpb25TYW1wbGluZ1By
b2ZpbGVyU3RhY2tUcmFjZXMsIDApOwogI2VuZGlmCiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJtYXhBcmd1bWVudHMiLCBmdW5jdGlvbk1heEFyZ3VtZW50cywgMCk7CisKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5j
dGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAt
MjQ4NCw2ICsyNDg4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
YW0KIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKK3sKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7Cit9
CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHN0YXRpYyBKU1ZhbHVlIGJveChFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MjksNyArMTkyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKHZh
bHVlLT5jaGlsZCgwKSkKICAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQWRkKSB7CiAgICAgICAgICAgICBpbm5lckFkZCA9IHZhbHVlLT5jaGlsZCgwKTsKLSAgICAg
ICAgICAgIG9mZnNldCA9IHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAgICAg
b2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKTsK
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAyMDkx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3RlciBhbmQgc3RhdGVz
IHRoYXQKICAgICAgICAgLy8gdGhlIHJlZ2lzdGVyIGlzIHVzZWQgbGF0ZS4gVGhpcyBtZWFucyB0
aGF0IHRoZSByZWdpc3RlciBpcyB1c2VkIGFmdGVyIHRoZSByZXN1bHQKICAgICAgICAgLy8gaXMg
ZGVmaW5lZCAoaS5lLCB0aGUgcmVzdWx0IHdpbGwgaW50ZXJmZXJlIHdpdGggdGhpcyBhcyBhbiBp
bnB1dCkuCi0gICAgICAgIC8vIEl0J3Mgbm90IHZhbGlkIGZvciB0aGlzIHRvIGJlIHVzZWQgYXMg
YSByZXN1bHQga2luZC4KKyAgICAgICAgLy8gSXQncyBub3QgYSB2YWxpZCBvdXRwdXQgcmVwcmVz
ZW50YXRpb24uCiAgICAgICAgIExhdGVSZWdpc3RlciwKIAogICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tl
ZC4gSXQncyBub3QgYSB2YWxpZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDIwOTExMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIEJ1aWx0aW5FeGVjdXRhYmxlczo6QnVpbHRp
bkV4ZWN1dGFibGVzKFYKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0
YWJsZXM6OmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0
b3JLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGJhc2VDb25zdHJ1Y3RvckNvZGUoQVNDSUlMaXRlcmFsKCIoZnVu
Y3Rpb24gKCkgeyB9KSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5n
PiBkZXJpdmVkQ29uc3RydWN0b3JDb2RlKEFTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uICgpIHsgc3Vw
ZXIoLi4uYXJndW1lbnRzKTsgfSkiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gZGVyaXZlZENvbnN0cnVjdG9yQ29kZShBU0NJSUxpdGVyYWwoIihmdW5jdGlvbiAo
Li4uYXJncykgeyBzdXBlciguLi5hcmdzKTsgfSkiKSk7CiAKICAgICBzd2l0Y2ggKGNvbnN0cnVj
dG9yS2luZCkgewogICAgIGNhc2UgQ29uc3RydWN0b3JLaW5kOjpOb25lOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTc1
LDYgKzE5NzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgY2FzZSBCb3R0
b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2ZW50
IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0
b20uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBKdXN0IGZpbmRz
IG5vZGVzIHRoYXQgd2Uga25vdyBob3cgdG8gd29yayB3aXRoLgogICAgIHZvaWQgaWRlbnRpZnlD
YW5kaWRhdGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKQEAgLTEwOSw2
ICsxMDksMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRl
cy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2hlY2sgQXJyYXlVc2UgaGVyZSBiZWNh
dXNlIEFycmF5VXNlIGluZGljYXRlcyB0aGF0IHRoZSBpdGVyYXRvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcHJvdG9jb2wgZm9yIEFycmF5cyBpcyBub24tb2JzZXJ2YWJsZSBieSB1c2Vy
IGNvZGUgKGUuZywgaXQgaGFzbid0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGNo
YW5nZWQpLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0ICYm
IG1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBmb3IgU3ByZWFkcyB0byBi
ZSBvZiByZXN0IG5vZGVzIGZvciBub3cuCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz
T0sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09LID0gY2hpbGQtPm9wKCkgPT0gU3By
ZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0ICYmIG1fY2FuZGlkYXRl
cy5jb250YWlucyhjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNPSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBpZiBpdCB3YXNuJ3QgZm9yIHRoZSBmYWN0IHRoYXQgc2Nv
cGVkIGFyZ3VtZW50cyBhcmUKQEAgLTEyNiw2ICsxNTgsNjIgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJDYW5kaWRhdGVzOiAiLCBsaXN0RHVt
cChtX2NhbmRpZGF0ZXMpLCAiXG4iKTsKICAgICB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZENh
bmRpZGF0ZShOb2RlKiBjYW5kaWRhdGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNwcmVhZDoKKyAgICAgICAgICAgIHJldHVybiBtX2Nh
bmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCkpOworCisgICAgICAg
IGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZl
Y3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2NhbmRpZGF0ZXMuY29udGFpbnMobV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5v
ZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpCisg
ICAgeworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKiwgMT4gdG9SZW1vdmU7CisK
KyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogbV9jYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1N0aWxsVmFsaWRDYW5kaWRhdGUoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92
ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLnJlbW92ZShub2RlKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICB2b2lk
IHRyYW5zaXRpdmVseVJlbW92ZUNhbmRpZGF0ZShOb2RlKiBub2RlLCBOb2RlKiBzb3VyY2UgPSBu
dWxscHRyKQorICAgIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gbV9jYW5kaWRhdGVzLnJlbW92
ZShub2RlKTsKKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdmVyYm9zZSAmJiBzb3VyY2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGluZyBjYW5kaWRhdGU6ICIsIG5vZGUsICIgYmVjYXVz
ZSBpdCBlc2NhcGVzIGZyb206ICIsIHNvdXJjZSwgIlxuIik7CisKKyAgICAgICAgaWYgKHJlbW92
ZWQpCisgICAgICAgICAgICByZW1vdmVJbnZhbGlkQ2FuZGlkYXRlcygpOworICAgIH0KICAgICAK
ICAgICAvLyBMb29rIGZvciBlc2NhcGluZyBzaXRlcywgYW5kIHJlbW92ZSBmcm9tIHRoZSBjYW5k
aWRhdGVzIHNldCBpZiB3ZSBzZWUgYW4gZXNjYXBlLgogICAgIHZvaWQgZWxpbWluYXRlQ2FuZGlk
YXRlc1RoYXRFc2NhcGUoKQpAQCAtMTMzLDkgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGF1
dG8gZXNjYXBlID0gWyZdIChFZGdlIGVkZ2UsIE5vZGUqIHNvdXJjZSkgewogICAgICAgICAgICAg
aWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJvb2wgcmVt
b3ZlZCA9IG1fY2FuZGlkYXRlcy5yZW1vdmUoZWRnZS5ub2RlKCkpOwotICAgICAgICAgICAgaWYg
KHJlbW92ZWQgJiYgdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJlbGltaW5hdGlu
ZyBjYW5kaWRhdGU6ICIsIGVkZ2Uubm9kZSgpLCAiIGJlY2F1c2UgaXQgZXNjYXBlcyBmcm9tOiAi
LCBzb3VyY2UsICJcbiIpOworICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRl
KGVkZ2Uubm9kZSgpLCBzb3VyY2UpOwogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgYXV0
byBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlID0gWyZdIChBcnJheU1vZGUgbW9kZSwgRWRnZSBlZGdl
LCBOb2RlKiBzb3VyY2UpIHsKQEAgLTE4Nyw2ICsyNzMsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9OworCisgICAgICAgIHJlbW92
ZUludmFsaWRDYW5kaWRhdGVzKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CiAgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKQEAgLTIwMSwxMSArMjg5LDQyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlQmFzZWRPbkFycmF5TW9kZShu
b2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXQgd291bGQgbm90IGJlIGhhcmQgdG8gc3VwcG9ydCBOZXdBcnJheVdp
dGhTcHJlYWQgaGVyZSBpZiBpdCBpcyBvbmx5IG92ZXIgU3ByZWFkKENyZWF0ZVJlc3QpIG5vZGVz
LgogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCksIG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAgICAgICAgICAgICBCaXRWZWN0
b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQgPSBtX2dyYXBoLmlzV2F0Y2hp
bmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSk7IAorICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9udEVzY2FwZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbnRFc2NhcGUgPSBjaGlsZC0+b3AoKSA9PSBTcHJlYWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2hpbGQtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBB
cnJheVVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaGlsZC0+Y2hpbGQx
KCktPm9wKCkgPT0gQ3JlYXRlUmVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBpc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udEVzY2FwZSA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbnRFc2NhcGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGNoaWxkLCBub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGNhc2UgU3ByZWFkOiB7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNPSyA9IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJheVVzZSAmJiBub2RlLT5j
aGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVSZXN0OworICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
T0spCisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgbm9k
ZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CkBAIC0yMTQsNiArMzMzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShu
b2RlLT5jaGlsZDIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQgJiYgbm9kZS0+Y2hpbGQzKCktPm9wKCkg
PT0gTmV3QXJyYXlXaXRoU3ByZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMygpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrOgpAQCAtMjYzLDYgKzM4NCwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludChub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNw
cmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdI
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC0zOTAsNyArNTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBibG9jay0+c2l6ZSgpICYmIGNhbmRpZGF0ZS0+b3duZXIgIT0gYmxvY2spIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJl
Y2F1c2UgaXQgaXMgY2xvYmJlcmVkIGJ5OiAiLCBibG9jay0+YXQobm9kZUluZGV4KSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aXZlbHlSZW1vdmVDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQxNyw3ICs1NDIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coImVsaW1pbmF0aW5nIGNhbmRpZGF0ZTogIiwgY2FuZGlkYXRlLCAiIGJlY2F1c2Ug
aXQgaXMgY2xvYmJlcmVkIGJ5ICIsIGJsb2NrLT5hdChub2RlSW5kZXgpLCAiXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRpZGF0ZXMucmVtb3ZlKGNhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGl2ZWx5UmVtb3ZlQ2FuZGlkYXRlKGNh
bmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjAsMTAgKzU4NSwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNo
IGEgd2F5IHRoYXQgd2UgYXJlIGd1YXJhbnRlZWQgdG8gc2VlIGEgZGVmIGJlZm9yZSBhIHVzZS4K
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5
IHRyYW5zZm9ybWVkIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSB0aGUgdXNlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIGFuIGFsbG9jYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09
IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9u
ZWRBcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0
QXJndW1lbnRzIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
IAorCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDg4LDYgKzYxNCwyMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTcHJlYWQ6CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVh
ZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21OZXdB
cnJheVdpdGhTcHJlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
QEAgLTU5OSw5NCArNzM5LDE4NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
TG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50
b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
CiAKLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IFsmXSAodW5z
aWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5p
bnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5v
ZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
YXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0
YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0Rh
dGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25JbnQzMlVzZSkpOworICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1
ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBz
dG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRh
LmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhj
YW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2Uo
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGNhbmRp
ZGF0ZS0+Yml0VmVjdG9yKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2Fu
ZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Db252ZXJ0VG9TdGF0aWNM
b2FkU3RvcmVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlz
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
YW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUs
IGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
aGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lQXJndW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJP
ZlNwcmVhZEFyZ3VtZW50cyA9IGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU3ByZWFkQXJndW1lbnRz
ID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKz0gbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKythcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFy
YXJnc0RhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGlt
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0
YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBj
YW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdp
bi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNOb2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vz
c0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2Rl
LCBLbm93bkludDMyVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0
YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMi
LCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAw
OyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdl
IGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXgg
KyB2YXJhcmdzRGF0YS0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZElu
ZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9L
KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhkYXRhKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gc3RvcmUgYW55dGhpbmcgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3
ZSB3aWxsIHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3
ZSdsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBkZWdlbmVy
YXRlIElSOiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NzQzNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5
TWluaW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIg
bGltaXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1p
dCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1DaGlsZHJlbigpOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3It
PmdldChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0g
UGhhbnRvbVNwcmVhZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJl
c3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9h
ZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChy
ZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFs
dWUsIHN0b3JlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK3N0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdG9yZUluZGV4OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RvcmVJbmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHVuZGVmaW5lZCwgc3RvcmVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdl
IGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
dmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpT
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2Rl
LT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3Rh
Y2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9m
ZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEt
Pm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA+PSAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWlu
aW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGlt
aXQgdG8gZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29u
IGFib3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9
IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytz
dG9yZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJz
dCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBp
dCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJh
cmdzRGF0YS0+b2Zmc2V0OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5h
ZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1
c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBk
b24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Yg
c29tZXRoaW5nIHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzQz
NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpz
VW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUodmFsdWUsIHN0b3JlSW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNh
bkV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY5OCwyNyArOTI5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hp
bGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9j
YXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5j
YWxsVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0
VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCi0gICAgICAgICAgICAg
ICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2lu
LCBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydFRvU3RhdGljQXJndW1lbnRDb3VudENhbGwgPSBbJl0gKGNvbnN0IFZl
Y3RvcjxOb2RlKj4mIGFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZmlyc3RDaGlsZCA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bi5hcHBlbmQobm9kZS0+Y2hpbGQyKCkpOwpAQCAtNzQzLDI1ICs5NTUsOTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydFRvRm9yd2FyZHNDYWxsID0gWyZdICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDYWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbEZv
cndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGlu
ZWRDYWxsZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVh
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5UcmFuc2Zvcm1Ub1N0YXRpY0Fy
Z3VtZW50Q291bnRDYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdFZlY3Rv
ciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFw
aC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblRyYW5zZm9ybVRvU3RhdGljQXJn
dW1lbnRDb3VudENhbGwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuVHJhbnNmb3JtVG9TdGF0aWNBcmd1bWVudENvdW50Q2Fs
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRz
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
YW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRlLCBpKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdl
dChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxk
LT5vcCgpID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hpbGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRh
dGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1bWVudENv
dW50Q2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRm9yd2FyZHNDYWxsKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRh
KiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOworCisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0OyBpIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5v
ZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TdGF0aWNBcmd1
bWVudENvdW50Q2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRm9yd2FyZHNDYWxsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nzgs
NiArNDc4LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNl
IFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhh
bnRvbSwgaXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNl
ZCB3aXRoIGFub3RoZXIuCiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKQEAgLTExMzAs
NiArMTEzMiwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWQ6IHsKICAgICAgICAgLy8gVGhpcyBhbHNvIHJlYWRz
IGZyb20gSlNGaXhlZEFycmF5J3MgZGF0YSBzdG9yZSwgYnV0IHdlIGRvbid0IGhhdmUgYW55IHdh
eSBvZiBkZXNjcmliaW5nIHRoYXQgeWV0LgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyBp
KyspIHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
aSkubm9kZSgpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpID09IFBoYW50b21TcHJlYWQp
IHsKKyAgICAgICAgICAgICAgICByZWFkKFN0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDggQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgor
ICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzOSw2ICsxNDM5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAg
Y2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgorICAgICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgog
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZvckFsbEtpbGxzLmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBA
IHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIGZvciAoTm9kZSogbm9kZSA6IGNvbWJpbmVk
TGl2ZW5lc3MubGl2ZUF0VGFpbFtibG9ja10pCiAgICAgICAgIGZ1bmN0b3IoYmxvY2stPnNpemUo
KSwgbm9kZSk7CiAgICAgCi0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGxvY2Fs
QXZhaWxhYmlsaXR5OworICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBsb2NhbEF2
YWlsYWJpbGl0eShncmFwaCk7CiAgICAgbG9jYWxBdmFpbGFiaWxpdHkuYmVnaW5CbG9jayhibG9j
ayk7CiAgICAgLy8gU3RhcnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9y
IGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAg
IC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRl
eCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTks
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJn
dW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJl
IHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNr
ZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5
IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC00NzMsNyArNDcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKGhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRv
bURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgb3Ao
KSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgewogICAgICAg
ICAgICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9y
IHRoZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90
aGVyd2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1
dGUgYSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0
b24oKTsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIHB1YmxpYzoKIAogICAgIEJpdFZlY3RvciogYml0
VmVjdG9yKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVh
ZCk7CisgICAgICAgIEFTU0VSVChvcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBvcCgpID09
IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8
Qml0VmVjdG9yKj4oKTsKICAgICB9CiAKQEAgLTE3NjksNiArMTc2OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2Ug
UGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgog
ICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRv
bU5ld0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIw
OTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ1LDYgKzM0NSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhDcmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAg
IG1hY3JvKFBoYW50b21EaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21TcHJlYWQsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAg
ICBtYWNybyhDcmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3Jv
KENyZWF0ZUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRv
bUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUaGlz
IGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2
ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAotICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IgY2FsY3VsYXRvcjsKKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yIGNhbGN1bGF0b3IobV9ncmFwaCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgICAg
ZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw4IEBAIGJv
b2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXAKICAgICByZXR1cm4gcnVuUGhh
c2U8T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4oZ3JhcGgpOwogfQogCi1Mb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpCitM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcihHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQogewogfQogCkBAIC0xNjQs
NyArMTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAg
Y2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CkBAIC0yMDgsNiArMjA5LDE3IEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0
KFByb21vdGVkSGVhcExvY2F0aW9uKFNwcmVhZFBMb2MsIG5vZGUpLCBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQaGFudG9t
TmV3QXJyYXlXaXRoU3ByZWFkOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihOZXdBcnJheVdpdGhTcHJlYWRBcmd1
bWVudFBMb2MsIG5vZGUsIGkpLCBBdmFpbGFiaWxpdHkoY2hpbGQpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXMoR3JhcAogLy8gaGF2aW5nIHJ1biB0aGUgYXZhaWxhYmlsaXR5IGFuYWx5c2lzLgogY2xhc3Mg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIHsKIHB1YmxpYzoKLSAgICBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKKyAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3IoR3JhcGgmKTsKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKQEAgLTU0LDYgKzU0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAogICAgIEF2YWlsYWJpbGl0
eU1hcCBtX2F2YWlsYWJpbGl0eTsKKyAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNp
b24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJl
cGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAg
Ly8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIG1hdGVyaWFsaXphdGlvbiBub2Rlcy4KLSAgICAgICAg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7Cisg
ICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxh
dG9yKG1fZ3JhcGgpOwogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICAgICAgbV9oZWFwID0gbV9oZWFwQXRIZWFkW2Jsb2NrXTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQxICsxMDYsNzUg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlYWRUb3AoKQogICAgIHsKLSAgICAgICAgc3dp
dGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0g
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6IHsKLQotICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7
Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5oYXNBcmd1bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotCi0gICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5v
cCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVu
dEJ5VmFsT3V0T2ZCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb2YgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgZ3VhcmFudGVlcyB0aGF0IEdldE15QXJndW1lbnRCeVZhbCog
d2lsbCBuZXZlcgotICAgICAgICAgICAgICAgIC8vIHJlYWQgYW55IGFyZ3VtZW50cyBiZWxvdyB0
aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLiBGb3IgZXhhbXBsZSwgaWYgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgaXMgMiwKLSAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVyIHJl
YWQgYXJndW1lbnQgMCBvciBhcmd1bWVudCAxLgotICAgICAgICAgICAgICAgIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gbV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAg
ICAgICAgfQotCisgICAgICAgIGF1dG8gcmVhZEZyYW1lID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAg
ICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVh
ZCB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cyBhbmQgYXJndW1lbnQgY291bnQuCiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSk7IGkrKykKICAgICAgICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpKTsKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIG1f
cmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50KSk7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byByZWFkTmV3QXJyYXlX
aXRoU3ByZWFkTm9kZSA9IFsmXSAoTm9kZSogYXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAg
ICBBU1NFUlQoYXJyYXlXaXRoU3ByZWFkLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBh
cnJheVdpdGhTcHJlYWQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7CisgICAg
ICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFycmF5V2l0aFNwcmVhZC0+Yml0VmVjdG9y
KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFk
LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5n
ZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2hp
bGQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIGJvb2wgaXNGb3J3YXJkaW5nTm9kZSA9IGZhbHNl
OworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBD
b25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgor
ICAgICAgICAgICAgaXNGb3J3YXJkaW5nTm9kZSA9IHRydWU7CisgICAgICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6IHsKKworICAgICAgICAgICAgaWYgKGlzRm9yd2Fy
ZGluZ05vZGUgJiYgbV9ub2RlLT5oYXNBcmd1bWVudHNDaGlsZCgpICYmIG1fbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSAmJiBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVh
ZCA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgcmVh
ZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUoYXJyYXlXaXRoU3ByZWFkKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7
CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+aGFzQXJndW1lbnRzQ2hpbGQoKSAmJiBtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpCisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25v
ZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGd1YXJhbnRl
ZXMgdGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwgbmV2ZXIKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcmVhZCBhbnkgYXJndW1lbnRzIGJlbG93IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRv
IHNraXAuIEZvciBleGFtcGxlLCBpZiBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBpcyAyLAorICAg
ICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVyIHJlYWQgYXJndW1lbnQgMCBvciBhcmd1
bWVudCAxLgorICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1f
bm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZWFkRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNwcmVhZDogeworICAgICAgICAg
ICAgcmVhZE5ld0FycmF5V2l0aFNwcmVhZE5vZGUobV9ub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDkx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw2ICsxMDEyLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAg
ICAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxP
dXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDkxMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDYgKzExNCwxNCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgUHJvCiAgICAgY2FzZSBWZWN0b3JMZW5ndGhQTG9jOgogICAgICAgICBvdXQucHJpbnQo
IlZlY3Rvckxlbmd0aFBMb2MiKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTcHJlYWRQ
TG9jOgorICAgICAgICBvdXQucHJpbnQoIlNwcmVhZFBMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2M6CisgICAgICAgIG91dC5w
cmludCgiTmV3QXJyYXlXaXRoU3ByZWFkQXJndW1lbnRQTG9jIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOSBAQCBlbnVt
IFByb21vdGVkTG9jYXRpb25LaW5kIHsKICAgICBOYW1lZFByb3BlcnR5UExvYywKICAgICBQdWJs
aWNMZW5ndGhQTG9jLAogICAgIFN0cnVjdHVyZVBMb2MsCi0gICAgVmVjdG9yTGVuZ3RoUExvYwor
ICAgIFZlY3Rvckxlbmd0aFBMb2MsCisgICAgU3ByZWFkUExvYywKKyAgICBOZXdBcnJheVdpdGhT
cHJlYWRBcmd1bWVudFBMb2MsCiB9OwogCiBjbGFzcyBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRv
ciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsOCBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgIGNhc2UgUGhh
bnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYxNiw2ICs1NjE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAg
ICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVuZXhwZWN0ZWQgbm9k
ZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NDAsNiArNTg0MCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBj
YXNlIEdldFN0YWNrOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgY2FzZSBQaGFu
dG9tU3ByZWFkOgorICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZDoKICAgICAgICAg
REZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDM5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+Y2hpbGQxKCkt
PmlzUGhhbnRvbUFsbG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tU3ByZWFkOgorICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgUGhhbnRvbVNwcmVhZCBvdmVyIFBoYW50
b21DcmVhdGVSZXN0LgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
PmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQ6IHsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBtX2dyYXBoLm1fZm9y
bSA9PSBTU0EpOworICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5v
ZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBQaGFudG9tU3By
ZWFkIG92ZXIgUGhhbnRvbUNyZWF0ZVJlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgIWNoaWxkLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU3ByZWFkOiB7CisgICAgICAgICAg
ICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBpKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzUGhhbnRvbUFsbG9jYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgYml0VmVjdG9yLT5nZXQoaSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIGNoaWxkLT5vcCgp
ID09IFBoYW50b21TcHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6CisgICAgY2FzZSBQaGFudG9tTmV3QXJy
YXlXaXRoU3ByZWFkOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9vdXQoc3RhdGUpCiAg
ICAgICAgICwgbV9wcm9jKCpzdGF0ZS5wcm9jKQorICAgICAgICAsIG1fYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcihtX2dyYXBoKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgICAg
ICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKICAgICB7CkBAIC0xMDg5LDYg
KzEwOTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9u
OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbVNwcmVhZDoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1
ZToKQEAgLTQzMzEsNiArNDMzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX2dyYXBoLmlz
V2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobV9ub2RlKSkgewogICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0
b3IgPSBtX25vZGUtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxs
RnJhbWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gs
IFdURjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRM
ZW5ndGhzOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5u
dW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIWJpdFZlY3Rvci0+Z2V0
KGkpKQogICAgICAgICAgICAgICAgICAgICArK3N0YXJ0TGVuZ3RoOwpAQCAtNDM0MSw4ICs0MzQ2
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9u
b2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9y
LT5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5
ID0gbG93Q2VsbCh1c2UpOwotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5hZGQo
bGVuZ3RoLCBtX291dC5sb2FkMzIoZml4ZWRBcnJheSwgbV9oZWFwcy5KU0ZpeGVkQXJyYXlfc2l6
ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNlLT5vcCgpID09IFBoYW50b21TcHJlYWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVzZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1c2UtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9
IGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmFkZChsZW5ndGgsIHNwcmVhZExlbmd0aCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
Zml4ZWRBcnJheSA9IGxvd0NlbGwodXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpT
Rml4ZWRBcnJheV9zaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTQzNTUsNDIgKzQzNzAsODQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIGkpOwogICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewotICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygp
OwotICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNlLT5vcCgpID09IFBoYW50b21T
cHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVzZS0+Y2hp
bGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB1c2UtPmNoaWxkMSgpLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB1c2UtPmNoaWxkMSgpLT5udW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVDYWxsRnJh
bWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFy
Z3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbG9hZEluZGV4U3RhcnQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIo
MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGZpeGVkQXJyYXkgPSBsb3dDZWxsKHVzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuaXNaZXJvNjQobGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOwogCi0gICAg
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpeGVkSW5kZXhTdGFydCA9IG1fb3V0LmFu
Y2hvcihtX291dC5jb25zdEludFB0cigwKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGFycmF5SW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihpbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCA9IG1fb3V0
LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKIAotICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheVNpemUgPSBtX291dC56ZXJvRXh0UHRyKG1f
b3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYXJyYXlJbmRleCA9IG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBhcnJheUluZGV4U3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGxvYWRJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBsb2FkSW5kZXhTdGFydCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuaXNaZXJvNjQoZml4ZWRBcnJheVNpemUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSBpdGVtID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGxvYWRJbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChpdGVtLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5p
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIHN0b3JhZ2UsIGFycmF5SW5kZXgpKTsKIAotICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxv
b3BTdGFydCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBu
ZXh0QXJyYXlJbmRleCA9IG1fb3V0LmFkZChhcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigx
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dExvYWRJbmRleCA9IG1fb3V0
LmFkZChsb2FkSW5kZXgsIG1fb3V0LmNvbnN0SW50UHRyKDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhMb29wRm9yRmluaXNoID0gbV9vdXQuYW5j
aG9yKG5leHRBcnJheUluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYXJyYXlJ
bmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBhcnJheUluZGV4U3RhcnQpOwotICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheUluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJU
eXBlKCksIGZpeGVkSW5kZXhTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5h
ZGRJbmNvbWluZ1RvUGhpKGxvYWRJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRMb2FkSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoYXJyYXlJbmRl
eCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
TFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNGaXhl
ZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQoaXRlbSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuaW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzdG9yYWdlLCBhcnJheUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYmVsb3cobmV4dExvYWRJbmRleCwgbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwogCi0g
ICAgICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0QXJyYXlJbmRleCA9IG1fb3V0LmFkZChhcnJh
eUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBuZXh0Rml4ZWRBcnJheUluZGV4ID0gbV9vdXQuYWRkKGZpeGVkQXJyYXlJbmRleCwgbV9vdXQu
Y29uc3RJbnRQdHIoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJh
eUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBl
KCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRleExvb3BGb3JGaW5pc2gpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5ID0gbG93Q2VsbCh1c2UpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaXhlZEluZGV4U3RhcnQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgYXJyYXlJbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGFycmF5SW5kZXhTdGFy
dEZvckZpbmlzaCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWRkSW5jb21pbmdUb1BoaShmaXhlZEFycmF5SW5kZXgsIG1fb3V0LmFuY2hvcihuZXh0
Rml4ZWRBcnJheUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5n
VG9QaGkoYXJyYXlJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRBcnJheUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMVmFsdWUgZml4ZWRBcnJheVNpemUgPSBtX291dC56ZXJvRXh0UHRy
KG1fb3V0LmxvYWQzMihmaXhlZEFycmF5LCBtX2hlYXBzLkpTRml4ZWRBcnJheV9zaXplKSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYmVsb3cobmV4dEZpeGVkQXJyYXlJbmRleCwgZml4ZWRBcnJheVNpemUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvb3BTdGFydCksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmaXhlZEFycmF5U2l6ZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3Rh
cnQpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtX291dC5waGkocG9pbnRl
clR5cGUoKSwgYXJyYXlJbmRleFN0YXJ0Rm9yRmluaXNoLCBhcnJheUluZGV4TG9vcEZvckZpbmlz
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgTFZhbHVlIGFycmF5SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgYXJyYXlJ
bmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBmaXhlZEFycmF5SW5k
ZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZml4ZWRJbmRleFN0YXJ0KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGl0ZW0gPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMuSlNGaXhlZEFycmF5X2J1ZmZlciwgZml4ZWRBcnJheSwgZml4ZWRBcnJheUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KGl0ZW0sIG1fb3V0
LmJhc2VJbmRleChtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgc3RvcmFnZSwg
YXJyYXlJbmRleCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dEFycmF5
SW5kZXggPSBtX291dC5hZGQoYXJyYXlJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoMSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIG5leHRGaXhlZEFycmF5SW5kZXggPSBtX291dC5h
ZGQoZml4ZWRBcnJheUluZGV4LCBtX291dC5jb25zdEludFB0cigxKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBhcnJheUluZGV4TG9vcEZvckZpbmlzaCA9IG1fb3V0
LmFuY2hvcihuZXh0QXJyYXlJbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFkZEluY29taW5nVG9QaGkoZml4ZWRBcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEZpeGVk
QXJyYXlJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaShhcnJheUluZGV4LCBtX291dC5hbmNob3IobmV4dEFycmF5SW5kZXgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmJlbG93KG5leHRGaXhlZEFycmF5SW5kZXgsIGZpeGVkQXJyYXlTaXplKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG9vcFN0YXJ0KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKHBvaW50ZXJUeXBlKCksIGFycmF5SW5kZXhTdGFydEZvckZpbmlzaCwgYXJyYXlJbmRl
eExvb3BGb3JGaW5pc2gpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9
IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwogICAgICAgICAgICAgICAgICAg
ICBMVmFsdWUgaXRlbSA9IGxvd0pTVmFsdWUodXNlKTsKQEAgLTQ0MjgsNiArNDQ4NSwxMiBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlU3ByZWFkKCkKICAgICB7CisgICAgICAgIC8vIEl0
IHdvdWxkIGJlIHRyaXZpYWwgdG8gc3VwcG9ydCB0aGlzLCBidXQgZm9yIG5vdywgd2UgbmV2ZXIg
Y3JlYXRlCisgICAgICAgIC8vIElSIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgdGhpcy4gVGhlIHJl
YXNvbiBpcyB0aGF0IFNwcmVhZCBpcyBvbmx5CisgICAgICAgIC8vIGNvbnN1bWVkIGJ5IE5ld0Fy
cmF5V2l0aFNwcmVhZCBhbmQgbmV2ZXIgYW55dGhpbmcgZWxzZS4gQWxzbywgYW55CisgICAgICAg
IC8vIFNwcmVhZChQaGFudG9tQ3JlYXRlUmVzdCkgd2lsbCB0dXJuIGludG8gUGhhbnRvbVNwcmVh
ZChQaGFudG9tQ3JlYXRlUmVzdCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbm9kZS0+Y2hp
bGQxKCktPm9wKCkgIT0gUGhhbnRvbUNyZWF0ZVJlc3QpOyAKKwogICAgICAgICBMVmFsdWUgYXJn
dW1lbnQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIExWYWx1ZSByZXN1
bHQ7CkBAIC02MTMxLDYgKzYxOTQsMjcyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVhZCgp
CisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBMVmFsdWUganND
YWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdGhp
c0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCk7
CisgICAgICAgIE5vZGUqIGFycmF5V2l0aFNwcmVhZCA9IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsK
KyAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBhcnJheVdpdGhTcHJlYWQtPmJpdFZlY3Rv
cigpOworICAgICAgICB1bnNpZ25lZCBudW1Ob25TcHJlYWRQYXJhbWV0ZXJzID0gMDsKKyAgICAg
ICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKKyAgICAgICAgVmVjdG9yPExWYWx1
ZSwgOD4gcGF0Y2hwb2ludEFyZ3VtZW50czsKKyAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJh
bWUqLCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdU
Rjo6TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5n
dGhzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQt
Pm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkp
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogc3ByZWFkID0gbV9ncmFwaC52YXJBcmdDaGlsZChh
cnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcHJlYWQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Cisg
ICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3ByZWFkLT5jaGlsZDEoKS0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5n
dGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXApKTsKKyAgICAgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludEFyZ3VtZW50cy5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBzcHJlYWRMZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICArK251bU5vblNwcmVhZFBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAg
TFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0
aFNwcmVhZCwgaSkpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnRBcmd1bWVudHMuYXBwZW5k
KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50UHRyKG51bU5vblNwcmVh
ZFBhcmFtZXRlcnMgKyAxKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVu
Z3RocykKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRk
KGxlbmd0aCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAKKyAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJl
cDo6V2FybUFueSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgVmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRWZWN0b3JXaXRoUmVwKHBhdGNocG9pbnRBcmd1bWVudHMsIFZhbHVlUmVwOjpXYXJtQW55KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFn
VHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9u
SGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7IC8vIE5vIGlucHV0cyB3aWxsIGJlIGluIGEgdm9sYXRp
bGUgcmVnaXN0ZXIuCisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1p
bmltdW0gYW1vdW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpT
IGNhbGxzIGFsd2F5cyBoYXZlLgorICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNp
emUgPQorICAgICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsK
KyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisK
KyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworCisgICAgICAgICAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjQgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gZ2V0VmFsdWVGcm9tUmVwID0gWyZdIChCMzo6VmFsdWVSZXAgcmVw
LCBHUFJSZWcgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lz
dGVycy5nZXQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcC5pc0NvbnN0
YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
SW1tNjQocmVwLnZhbHVlKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZTogaW4gdGhpcyBmdW5jdGlvbiwgd2Ugb25seSByZXF1ZXN0IDY0IGJpdCB2YWx1ZXMuCisgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXAuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVwLm9mZnNldEZyb21GUCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwLmlzR1BSKCkpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodXNlZFJlZ2lzdGVycy5nZXQocmVwLmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKHJlcC5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRF
eGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3Nl
bWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmln
aW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKKworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVXNlZFNsb3RzID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG9yaWdpbmFs
U3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzUmVwID0gcGFyYW1zWzNd
OworICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZyb21SZXAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNSZXAsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjptYXhBcmd1bWVudHMgKyAxKSkpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Vc2VkU2xvdHMgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNjcmF0Y2hHUFIxIG5vdyBoYXMgdGhlIHJlcXVpcmVkIGZyYW1lIHNpemUg
aW4gUmVnaXN0ZXIgdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgc2NyYXRjaEdQ
UjEgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIofihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpIC0gMSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0UHRy
KENDYWxsSGVscGVyczo6SW1tMzIoMyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjEpOwor
CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworCisg
ICAgICAgICAgICAgICAgICAgIGludCBzdG9yZU9mZnNldCA9IENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5V2l0aFNwcmVhZC0+bnVtQ2hp
bGRyZW4oKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmFt
c09mZnNldCA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdl
dChpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNwcmVhZCA9IHN0YXRl
LT5ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcHJlYWQtPm9wKCkgPT0gUGhhbnRv
bVNwcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3By
ZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBzcHJl
YWQtPmNoaWxkMSgpLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIG51bUFyZ3VtZW50c1RvQ29weSA9IHBhcmFtc1tw
YXJhbXNPZmZzZXQgKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWx1ZUZy
b21SZXAobnVtQXJndW1lbnRzVG9Db3B5LCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxvYWRPZmZzZXQgPSAoQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNT
dGFydChpbmxpbmVDYWxsRnJhbWUpLm9mZnNldCgpICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBs
b29wU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdWJQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpLCBzY3Jh
dGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUjMs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgbG9hZE9mZnNldCksIHNjcmF0Y2hHUFI0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSNCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSMykubGlua1RvKGxvb3BTdGFydCwgJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Vi
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbHVlRnJvbVJl
cChwYXJhbXNbcGFyYW1zT2Zmc2V0ICsgaV0sIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIHN0b3JlT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhi
aXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3Mp
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdWYXJhcmdzVGhy
b3dpbmdQYXRoRGlkTm90VGhyb3cpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZG9udFRocm93LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVG
cmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICAgICAgZ2V0VmFs
dWVGcm9tUmVwKHBhcmFtc1syXSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlw
ZSBjYWxsVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGlzVGFp
bENhbGwgPSBDYWxsTGlua0luZm86OmNhbGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6
VGFpbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNr
LAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbDsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgeworICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAg
ICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lz
dGVycy5nZXQoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQor
ICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21U
YWlsQ2FsbCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkb25l
LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6
cmVnVDApOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52
bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5r
Q2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBh
dGNocG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2
b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKICAgICB7CiAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGU7CkBAIC02MTU3LDYgKzY0ODYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZm9yd2FyZGluZyAmJiBtX25vZGUt
PmNoaWxkMygpICYmIG1fbm9kZS0+Y2hpbGQzKCktPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCkgeworICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJl
YWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIAogICAgICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsK
IApAQCAtNjUzMCw2ICs2ODY1LDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkgJiYg
bV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Cisg
ICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCkBAIC02NjE4LDYgKzY5
NTgsMTM1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwogICAgIH0KIAorICAgIExWYWx1ZSBnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5l
Q2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICB7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1
bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBr
bm93bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKKyAgICAgICAgICAgIGlmIChrbm93
bkxlbmd0aCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgICAgICBrbm93
bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOworICAgICAgICB9CisKKworICAg
ICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMg
dGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KKyAgICAgICAg
aWYgKCFudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dHNMZW5ndGgudmFsdWU7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1f
b3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2Vy
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKQor
ICAgIHsKKyAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBMVmFsdWUsIFdURjo6RGVm
YXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVsbGFibGVIYXNoVHJhaXRz
PElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOworCisgICAgICAgIE5vZGUq
IGFycmF5V2l0aFNwcmVhZCA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChhcnJheVdpdGhTcHJlYWQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCk7CisgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gYXJyYXlXaXRoU3ByZWFkLT5i
aXRWZWN0b3IoKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9
IDA7CisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+IHNwcmVhZExlbmd0aHM7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVdpdGhTcHJlYWQtPm51bUNoaWxkcmVuKCk7IGkr
KykgeworICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGFycmF5V2l0aFNwcmVhZCwgaSku
bm9kZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNoaWxkMSgpLT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbGVuZ3RoID0gY2FjaGVkU3ByZWFkTGVuZ3Ro
cy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUs
IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgICAg
ICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIHNwcmVhZExlbmd0aHMu
YXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICArK251
bWJlck9mU3RhdGljQXJndW1lbnRzOworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3Vt
ZW50cyk7CisgICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCisgICAg
ICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIGxlbmd0aCk7CisKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgVmFyYXJn
c092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICBtX291dC5hYm92ZShs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2Fk
Rm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworCisgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9
IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOworICAgICAgICBMVmFsdWUg
c3RvcmVJbmRleCA9IG1fb3V0LmNvbnN0SW50UHRyKDApOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJyYXlXaXRoU3ByZWFkLT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFk
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaGlsZC0+Y2hpbGQxKCktPm9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lOworCisgICAgICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJn
dW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBjaGlsZC0+Y2hpbGQxKCktPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpOworICAgICAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBt
X291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkp
OworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdGFydExvYWRJbmRleCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc3RhcnRTdG9yZUluZGV4ID0gbV9vdXQuYW5jaG9yKHN0b3JlSW5kZXgpOworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0U3RvcmVJbmRleEZvckVuZCA9IG1fb3V0
LmFuY2hvcihzdG9yZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC5pc1plcm82NChzcHJlYWRMZW5ndGgpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGxv
b3ApKTsKKworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8obG9vcCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbG9vcFN0
b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAgICAgICAg
ICAgICAgTFZhbHVlIGxvYWRJbmRleCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRMb2FkSW5kZXgp
OworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFy
dCwgbG9hZEluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9v
dXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgbG9vcFN0b3JlSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dExvYWRJbmRleCA9IG1fb3V0LmFkZCht
X291dC5jb25zdEludFB0cigxKSwgbG9hZEluZGV4KTsKKyAgICAgICAgICAgICAgICBtX291dC5h
ZGRJbmNvbWluZ1RvUGhpKGxvYWRJbmRleCwgbV9vdXQuYW5jaG9yKG5leHRMb2FkSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgbmV4dFN0b3JlSW5kZXggPSBtX291dC5hZGQobV9vdXQu
Y29uc3RJbnRQdHIoMSksIGxvb3BTdG9yZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX291dC5h
ZGRJbmNvbWluZ1RvUGhpKGxvb3BTdG9yZUluZGV4LCBtX291dC5hbmNob3IobmV4dFN0b3JlSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsb29wU3RvcmVJbmRleEZvckVu
ZCA9IG1fb3V0LmFuY2hvcihuZXh0U3RvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmJlbG93KG5leHRMb2FkSW5kZXgsIHNwcmVhZExlbmd0aCksIHVuc3VyZShs
b29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgc3RvcmVJbmRl
eCA9IG1fb3V0LnBoaShJbnQ2NCwgc3RhcnRTdG9yZUluZGV4Rm9yRW5kLCBsb29wU3RvcmVJbmRl
eEZvckVuZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChhcnJheVdpdGhTcHJlYWQsIGkp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBzdG9yZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVJbmRleCA9IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cigxKSwgc3RvcmVJ
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMQmFzaWNCbG9jayB1
bmRlZmluZWRMb29wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
dGFydFN0b3JlSW5kZXggPSBtX291dC5hbmNob3Ioc3RvcmVJbmRleCk7CisgICAgICAgIExWYWx1
ZSBsb29wQm91bmRWYWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3coc3RvcmVJbmRleCwgbG9vcEJv
dW5kVmFsdWUpLAorICAgICAgICAgICAgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUoY29u
dGludWF0aW9uKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyh1bmRlZmluZWRMb29wLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgbG9vcFN0
b3JlSW5kZXggPSBtX291dC5waGkoSW50NjQsIHN0YXJ0U3RvcmVJbmRleCk7CisgICAgICAgIG1f
b3V0LnN0b3JlNjQoCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52
YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBsb29wU3RvcmVJbmRleCkpOworICAgICAgICBMVmFsdWUg
bmV4dEluZGV4ID0gbV9vdXQuYWRkKGxvb3BTdG9yZUluZGV4LCBtX291dC5jb25zdEludFB0cigx
KSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkobG9vcFN0b3JlSW5kZXgsIG1fb3V0
LmFuY2hvcihuZXh0SW5kZXgpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQuYmVsb3cobmV4dEluZGV4LCBsb29wQm91bmRWYWx1ZSksIHVuc3VyZSh1bmRlZmluZWRM
b29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUp1bXAoKQog
ICAgIHsKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJsb2NrKCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIklubGlu
ZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0dlbmVy
YXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKIApAQCAt
ODYsNiArODcsOCBAQCBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAg
ICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgorICAgIGNhc2UgUGhhbnRvbVNw
cmVhZDoKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQ6CiAgICAgICAgIC8vIFRo
b3NlIGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJ
bk9TUgogICAgICAgICBicmVhazsKIApAQCAtMzkzLDE0ICszOTYsMTAyIEBAIGV4dGVybiAiQyIg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgICAgICBBU1NFUlQoZm91
bmQpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0KICAgICAgICAgICAgIHJldHVybiBhcnJheTsK
ICAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICBjYXNlIFBoYW50b21TcHJlYWQ6IHsKKyAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBudWxscHRyOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24t
PnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9w
ZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwor
ICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IFNwcmVhZFBMb2Mp
IHsKKyAgICAgICAgICAgICAgICBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlc1tpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKworICAgICAgICAvLyBO
b3RlOiBpdCBpcyBzb3VuZCBmb3IgSlNGaXhlZEFycmF5OjpjcmVhdGVGcm9tQXJyYXkgdG8gY2Fs
bCBnZXREaXJlY3RJbmRleCBoZXJlCisgICAgICAgIC8vIGJlY2F1c2Ugd2UncmUgZ3VhcmFudGVl
ZCB3ZSB3b24ndCBiZSBjYWxsaW5nIGFueSBnZXR0ZXJzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlz
CisgICAgICAgIC8vIHRoYXQgd2Ugb25seSBzdXBwb3J0IFBoYW50b21TcHJlYWQgb3ZlciBDcmVh
dGVSZXN0LCB3aGljaCBpcyBhbiBhcnJheSB3ZSBjcmVhdGUuCisgICAgICAgIC8vIEFueSBhdHRl
bXB0cyB0byBwdXQgYSBnZXR0ZXIgb24gYW55IGluZGljZXMgb24gdGhlIHJlc3QgYXJyYXkgd2ls
bCBlc2NhcGUgdGhlIGFycmF5LgorICAgICAgICBKU0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBK
U0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJheShleGVjLCB2bSwgYXJyYXkpOworICAgICAgICBy
ZXR1cm4gZml4ZWRBcnJheTsKKyAgICB9CisKKyAgICBjYXNlIFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQ6IHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0
aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKworICAgICAgICB1
bnNpZ25lZCBhcnJheVNpemUgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYg
cHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBOZXdBcnJheVdpdGhTcHJlYWRBcmd1
bWVudFBMb2MpIHsKKyAgICAgICAgICAgICAgICArK251bVByb3BlcnRpZXM7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pOworICAgICAg
ICAgICAgICAgIGlmIChKU0ZpeGVkQXJyYXkqIGZpeGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpT
Rml4ZWRBcnJheSo+KHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplICs9IGZp
eGVkQXJyYXktPnNpemUoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFycmF5U2l6ZSArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
SlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3Ry
dWN0dXJlLCBhcnJheVNpemUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAvLyBFbnN1cmUgd2Ugc2VlIGluZGljZXMgZm9y
IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlOiBbMCwgbnVtUHJvcGVydGllcykKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKClbal07CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9u
KCkua2luZCgpID09IE5ld0FycmF5V2l0aFNwcmVhZEFyZ3VtZW50UExvYyAmJiBwcm9wZXJ0eS5s
b2NhdGlvbigpLmluZm8oKSA9PSBpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZvdW5kKTsKKyAgICAgICAgfQorI2VuZGlmCisK
KyAgICAgICAgVmVjdG9yPEpTVmFsdWUsIDg+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRz
Lmdyb3cobnVtUHJvcGVydGllcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25z
dCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRp
ZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSA9PSBO
ZXdBcnJheVdpdGhTcHJlYWRBcmd1bWVudFBMb2MpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkgPCBudW1Qcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICBhcmd1bWVudHNbcHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCldID0g
dmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBhcnJh
eUluZGV4ID0gMDsKKyAgICAgICAgZm9yIChKU1ZhbHVlIHZhbHVlIDogYXJndW1lbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoSlNGaXhlZEFycmF5KiBmaXhlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxK
U0ZpeGVkQXJyYXkqPih2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZml4ZWRBcnJheS0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGZpeGVkQXJyYXktPmdldChpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZUluZGV4KHZtLCBhcnJheUluZGV4LCBmaXhlZEFycmF5LT5nZXQoaSkpOworICAg
ICAgICAgICAgICAgICAgICArK2FycmF5SW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm90IHNwcmVhZGluZy4K
KyAgICAgICAgICAgICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwg
dmFsdWUpOworICAgICAgICAgICAgICAgICsrYXJyYXlJbmRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2
aXNpb24gMjA5MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBlbWl0U2V0dXBW
YXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoZmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAg
IGVuZFZhckFyZ3MubGluaygmaml0KTsKICAgICB9Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobWF4QXJndW1lbnRzICsgMSkpKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0M6Om1heEFyZ3VtZW50cyArIDEpKSk7CiAgICAgCiAgICAgZW1pdFNl
dFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCB0cnVlLCBudW1Vc2VkU2xvdHNHUFIsIHNj
cmF0Y2hHUFIyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhl
ZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
aXhlZEFycmF5LmgJKHJldmlzaW9uIDIwOTExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRml4ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGNhbGwgaW50byB0aGlzIGZ1
bmN0aW9uIHdoZW4gIWdsb2JhbE9iamVjdC0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpLAogICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGlmIHdlIGRvIHRo
YXQsIHdlIGVuc3VyZSB3ZSdyZSBjYWxsaW5nIGluIHdpdGggYW4gYXJyYXkgd2l0aCBhbGwgc2Vs
ZiBwcm9wZXJ0aWVzIGJldHdlZW4KICAgICAgICAgICAgICAgICAvLyBbMCwgbGVuZ3RoKS4KLSAg
ICAgICAgICAgICAgICBBU1NFUlQoYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpOworICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGFsc28gY2FsbCBpbnRvIHRoaXMgZHVyaW5nIE9TUiBl
eGl0IHRvIG1hdGVyaWFsaXplIGEgcGhhbnRvbSBmaXhlZCBhcnJheS4KKyAgICAgICAgICAgICAg
ICAvLyBXZSBtYXkgYmUgY3JlYXRpbmcgYSBmaXhlZCBhcnJheSBkdXJpbmcgT1NSIGV4aXQgZXZl
biBhZnRlciB0aGUgaXRlcmF0b3IgcHJvdG9jb2wgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAv
LyBCdXQsIHdoZW4gdGhlIHBoYW50b20gd291bGQgaGF2ZSBsb2dpY2FsbHkgYmVlbiBjcmVhdGVk
LCB0aGUgcHJvdG9jb2wgaGFkbid0IGJlZW4KKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkLiBU
aGVyZWZvcmUsIGl0IGlzIHNvdW5kIHRvIGFzc3VtZSBlbXB0eSBpbmRpY2VzIGFyZSBqc1VuZGVm
aW5lZCgpLgogICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0
cik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>