<?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>89102</bug_id>
          
          <creation_ts>2012-06-14 07:54:33 -0700</creation_ts>
          <short_desc>document.write of scripts that also document.write sometimes writes async</short_desc>
          <delta_ts>2012-07-10 00:27:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://tipsmc.com/index/application_form/0-23</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90845</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maxim">sailormax</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>rafaelw</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>649174</commentid>
    <comment_count>0</comment_count>
    <who name="Maxim">sailormax</who>
    <bug_when>2012-06-14 07:54:33 -0700</bug_when>
    <thetext>steps:
1. load the page
2. press on link &quot;Анкета абитуриента&quot; at left column in block &quot;ЗАЯВКА НА ОБУЧЕНИЕ&quot;

What do I expect to happen?
Page reloading

What actually happens?
Page reloading without iframe. After reloading, iframe is empty.
Iframe generated by script: &apos;document.write(...)&apos;.
After that same script trying to get access to new iframe by ID, but can&apos;t, because in this type of reloading Safari create iframe _after_ script finished work :(

tested on Safari 5.1.7 and Night Build 7534.57.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649233</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-14 09:35:22 -0700</bug_when>
    <thetext>I cannot reproduce this as described. I do see that main content is sometimes missing, but given the bug description, it&apos;s likely a mistake in site code.

Can you make a reduced test case for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650033</commentid>
    <comment_count>2</comment_count>
    <who name="Maxim">sailormax</who>
    <bug_when>2012-06-15 02:20:13 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I cannot reproduce this as described.

Author of the site added &quot;onclick&quot; workaround.

But you can use another method:
1. load the page
2. put cursor in address field and press &quot;enter&quot;

second load will be &quot;smart&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650315</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-15 10:39:01 -0700</bug_when>
    <thetext>We need to make a reduced test case to investigate this. Unfortunately, I cannot work on one any time soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654904</commentid>
    <comment_count>4</comment_count>
      <attachid>148892</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-06-21 14:56:40 -0700</bug_when>
    <thetext>Created attachment 148892
Script executed with document.write</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654918</commentid>
    <comment_count>5</comment_count>
      <attachid>148896</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-06-21 15:05:46 -0700</bug_when>
    <thetext>Created attachment 148896
Reduction

Reduction that shows what&apos;s needed to see this bug. The problem is when a script is inserted into the document with document.write and then it also does a document.write of new elements and tries to access them immediately sometimes the writes haven&apos;t happened yet.

given:

- index.html
  document.write(&apos;&lt;script src=example.js&gt;&lt;/script&gt;&quot;);

- example.js
   document.write(&apos;&lt;div&gt;&lt;/div&gt;&apos;);
   var div = document.querySelector(&apos;div&apos;);
   document.body.appendChild(document.createTextNode(div ? &apos;Exists&apos;, &apos;Missing&apos;);

When doing a full page refresh with Apple+R the div is always defined because the document.write happened immediately. Sometimes, but not always, when you put your cursor in the url bar and hit enter (cached refresh) the document.write happens _after_ the example.js is complete yielding two different DOMs:

&lt;script&gt;&lt;/script&gt;
&lt;div&gt;&lt;/div&gt;
Exists

OR

&lt;script&gt;&lt;/script&gt;
Missing
&lt;div&gt;&lt;/div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654920</commentid>
    <comment_count>6</comment_count>
      <attachid>148897</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-06-21 15:11:34 -0700</bug_when>
    <thetext>Created attachment 148897
Zipped Reduction

This bug is a race condition and it seems that the webkit.org server is slow enough that it never reproduces (ex. by just clicking the Reduction link in attachments). This contains the reduction zipped together so you can load the reduction.html locally and then cached load it repeatedly to see the Failure.

I&apos;m not able to reproduce this when loading from the webkit.org server, but it happens quite frequently when loaded locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655636</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-22 11:24:09 -0700</bug_when>
    <thetext>Is the use of document.querySelector essential?  What happens if you just craw the firstChild, nextSibling links in the DOM?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655642</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-06-22 11:26:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Is the use of document.querySelector essential?  What happens if you just craw the firstChild, nextSibling links in the DOM?

No that was just a quick way to write the test. The document.write hasn&apos;t actually happened yet at that point so document.documentElement.innerHTML or firstChild etc. would show that the div is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655650</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-22 11:30:32 -0700</bug_when>
    <thetext>Very interesting.  We should look at this in the debugger to see what&apos;s going on.

If you&apos;re having trouble triggering the race, you might try a data URL because that will load much faster.

I wonder if the problem is arising only when the script is in the MemoryCache.  In that case, we&apos;ll get the script back synchronously and might get confused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655988</commentid>
    <comment_count>10</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-06-22 18:36:02 -0700</bug_when>
    <thetext>This race condition has been really difficult to debug. I&apos;ve traced it down to the parser being paused, so HTMLContructionSite queues the node creation which then happens later.

This seems to be the result of runScriptsForPausedTreeBuilder() which called HTMLScriptRunner-&gt;execute which then returned false. We then do setPaused(true) in HTMLDocumentParser::canTakeNextToken.

Super confusingly if I set breakpoints at ::execute, setPaused and ::canTakenNextToken I can get my above example to print &quot;FailureFailure&quot; (even if I step through the breakpoints very fast) so I don&apos;t quite understand how setTimeout() in JS and the scheduling code in the parser interacts.

Adam can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655995</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-22 19:06:54 -0700</bug_when>
    <thetext>&gt; Adam can you take a look?

Yes, I&apos;ll take a look.  I appreciate the work you&apos;ve put into reducing and studying this issue.  I can&apos;t promise when I&apos;ll have time to look at it, but it does sound like an interesting bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656680</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-25 10:22:41 -0700</bug_when>
    <thetext>Adam and I looked at this for a while this morning.  We don&apos;t have an exact answer for you yet, but this comes from whether the script is in the cache or not.

We&apos;ve learned that the inner script is always running after the outer script complets, but for some reason the inner document.write is sometimes not executing immediately (presumably getting queued in the tokenizer).  Unclear exactly what branch of code this is yet, as we haven&apos;t pulled this up in a debugger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661848</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-02 18:04:09 -0700</bug_when>
    <thetext>OK.  Adam and I spent the last hour staring at this in the debugger, and I believe we understand what&apos;s going on.

As mentioned before, the root difference in behavior comes from when the script is already in the MemoryCache, so the load completes immediately (&quot;notifyFinished&quot; is called on the client from within the load function.)

The outer (inline) script runs, through HTMLScriptRunner::execute, which calls HTMLScriptRunner::runScript, which in turn calls ScriptElement::prepareScript, which because the script is inline (has no src attribute), actually runs the script.

As part of that outer (inline) script running, it document.write&apos;s a &lt;script&gt; tag to the (external) script, which pumps the parser, and then makes a nested call to HTMLScriptRunner::runScript:
http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLScriptRunner.cpp#L276
It is not inline, so it is not executed as part of ScriptElement::prepareScript, but rather made the m_parserBlockingScript by requestParsingBlockingScript at the end of the nested runScript call.

However, when the outer (inline) script&apos;s runScript completes, and unrolls to the outer HTMLScriptRunner::execute, this is where we get in trouble.  We now have parser blocking script:
http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLScriptRunner.cpp#L172
and so we try to execute it.  However, this branch does *not* unpause the treebuilder, as would be the case were we to wait for the script to complete from the network:
http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp#L500
(note the setPause(false) there.)

This is a (my) design error, as part of making the HTMLScriptRunner a &quot;leaf&quot; in this object graph.  Ideally the HTMLScriptRunner would know nothing about the HTMLTreeBuilder and the HTMLTreeBuilder would know nothing about the HTMLScriptRunner.  All communication/coordination is done through the HTMLDocumentParser who is actually in charge.

So one theory that Adam and I have come up with for fixing this, is to remove this isPaused bool on the HTMLTreeBuilder (as it is really just a proxy for HTMLTreeBuilder::m_scriptToProcess), and instead add a HTMLDocumentParser::shouldContinueParsing() function which knows how to check both HTMLTreeBuilder::m_scriptToProcess and HTMLScriptRunner::m_parseBlockingScript.  This would make it so that when the document parser passes the script from the tree builder to the script runner, the treebuilder would automatically &quot;un-pause&quot; (in the old parlance), but that parsing would not continue until the script runner no longer thought it had a parsing blocking script (which is cleared right as we start executing a script).

During this investigation, we also discovered some oddness for handling the cases of inline scripts which are blocked on stylesheet loads.  There may be some bugs similar to this one in that handling:
http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLScriptRunner.cpp#L303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664680</commentid>
    <comment_count>14</comment_count>
      <attachid>151193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-08 23:49:16 -0700</bug_when>
    <thetext>Created attachment 151193
not quite ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664681</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-08 23:49:34 -0700</bug_when>
    <thetext>I&apos;ll write a nice long ChangeLog when I&apos;m less tired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664899</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-09 08:48:43 -0700</bug_when>
    <thetext>Looks like a solid approach.  I&apos;m glad you were able to reduce the total amount of state in the machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664904</commentid>
    <comment_count>17</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2012-07-09 09:10:46 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Looks like a solid approach.  I&apos;m glad you were able to reduce the total amount of state in the machine.

lgtm too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665129</commentid>
    <comment_count>18</comment_count>
      <attachid>151309</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-09 13:44:52 -0700</bug_when>
    <thetext>Created attachment 151309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665185</commentid>
    <comment_count>19</comment_count>
      <attachid>151309</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-09 14:34:12 -0700</bug_when>
    <thetext>Comment on attachment 151309
Patch

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

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:468
&gt; +    return m_treeBuilder-&gt;hasParserBlockingScript() || (m_scriptRunner &amp;&amp; m_scriptRunner-&gt;hasParserBlockingScript());

Should we ASSERT that the &amp;&amp; of these conditions never holds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665196</commentid>
    <comment_count>20</comment_count>
      <attachid>151323</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-09 14:48:35 -0700</bug_when>
    <thetext>Created attachment 151323
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665311</commentid>
    <comment_count>21</comment_count>
      <attachid>151323</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 16:48:33 -0700</bug_when>
    <thetext>Comment on attachment 151323
Patch for landing

Clearing flags on attachment: 151323

Committed r122168: &lt;http://trac.webkit.org/changeset/122168&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665312</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 16:48:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665524</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-10 00:27:11 -0700</bug_when>
    <thetext>This appears to have caused test flakiness.  I&apos;ll look tomorrow, but I may have to roll this out until I can figure out why.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>148892</attachid>
            <date>2012-06-21 14:56:40 -0700</date>
            <delta_ts>2012-06-21 14:56:40 -0700</delta_ts>
            <desc>Script executed with document.write</desc>
            <filename>embed.js</filename>
            <type>application/x-javascript</type>
            <size>554</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">Ly8gV3JpdGUgYSBuZXcgZWxlbWVudC4KZG9jdW1lbnQud3JpdGUoJzxkaXY+PC9kaXY+Jyk7Cgov
LyBOb3cgdHJ5IHRvIGltbWVkaWF0ZWx5IGFjY2VzcyB0aGlzLiBUaGVyZSBhcHBlYXJzIHRvIGJl
IGEgcmFjZSBjb25kaXRpb24gaGVyZQovLyB3aGVyZSB0aGUgZG9jdW1lbnQud3JpdGUgc29tZXRp
bWVzIGhhcHBlbnMgaW5zdGFudGx5IGFuZCBzb21ldGltZXMgaXMgCi8vIGRlbGF5ZWQgdW50aWwg
YWZ0ZXIgdGhpcyBzY3JpcHQgaXMgY29tcGxldGUuCmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
CiAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYn
KSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJykpOwoKc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAg
IC8vIEFzeW5jIHdpbGwgYWx3YXlzIHdvcmsuCiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KAogICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J2RpdicpID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnKSk7Cn0sIDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>148896</attachid>
            <date>2012-06-21 15:05:46 -0700</date>
            <delta_ts>2012-06-21 15:05:46 -0700</delta_ts>
            <desc>Reduction</desc>
            <filename>reduction.html</filename>
            <type>text/html</type>
            <size>357</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cjxib2R5PgogICAgPHNjcmlwdD4KICAgICAgICAvLyBNdXN0IHdyaXRl
IHRoZSBmaXJzdCBzY3JpcHQgdGhyb3VnaCBkb2N1bWVudC53cml0ZSBmb3IgdGhpcyBidWcgdG8K
ICAgICAgICAvLyBhcHBlYXIuIEZvciBpbnN0YW5jZSBpZiB3ZSBkaWQgPHNjcmlwdCBzcmM9ZW1i
ZWQuanMiPiB0aGUgYnVnIGRvZXNuJ3QKICAgICAgICAvLyBoYXBwZW4uCiAgICAgICAgZG9jdW1l
bnQud3JpdGUoIjxzY3JpcHQgc3JjPSdodHRwOi8vYnVnLTg5MTAyLWF0dGFjaG1lbnRzLndlYmtp
dC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MTQ4ODkyJz48LyIgKyAic2NyaXB0PiIpOwogICAgPC9z
Y3JpcHQ+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>148897</attachid>
            <date>2012-06-21 15:11:34 -0700</date>
            <delta_ts>2012-06-21 15:11:34 -0700</delta_ts>
            <desc>Zipped Reduction</desc>
            <filename>Reduction.zip</filename>
            <type>application/zip</type>
            <size>1271</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">UEsDBBQACAAIAKZ21UAAAAAAAAAAAAAAAAAIABAAZW1iZWQuanNVWAwAdZvjT8eX40/Iz4gTtZBB
S8QwFITv/RVzSwvSetZFEcHjXnbBczZ50odpUpMXaxH/u0kPyy54NYck5A0zX2YY8BpZCBqeFpCj
ibz0jQ0mb7elTlu1s/z5sBvqrrr7phkG7MMCiSskgKeJLGsht0IbQylBRk49jiPF4j3PpGOqylNN
itoQTPCWhYNH1VTDZRPLSLhORwoTCU+UMFYrn8A+ifZS47y9mHNCdbLk9EoW2Qs76DehuAEhmciz
VJkJ0+xI6OKrp2DXfguwzyM72zYo6zw2kcoPj/Ql+2CpPb9/ZIrroTRnJMRWlYpUh0eoQ96aULiD
etHsciTV1e4SybHQhiztW/amdtB2+N7SCvxTWr3Bwq6Qu0WvCUuI7/01zN+s/8L7c4PbcvwCUEsH
CFo3B7wdAQAAKgIAAFBLAwQUAAgACAAMedVAAAAAAAAAAAAAAAAADgAQAHJlZHVjdGlvbi5odG1s
VVgMAGqb409Ym+NPyM+IE1WQPQ7CMAyFd05hshSE1ByAkIWfDcHAwtg2bhtEkypxVHF7UkJR8ebn
p8/PFsvDZX+7X4/QUveUC1Fa9ZILiCV85XRPqRmLczgHTzA4TQjUItTaxT75ouBsaFpQtgodGsqT
r7YujrSHMjRAdk4r+h4Ll8MpWrTxVJgKQdcwICitpgDgXbXDrkSVPzyTn8UjS1n0JqM5sB2JJv9J
/1FWbE7MJmQmBWewAfa9l6236X4+PUDw9JU3UEsHCFqZAEO2AAAALQEAAFBLAwQKAAAAAAAdedVA
AAAAAAAAAAAAAAAACQAQAF9fTUFDT1NYL1VYDAB6m+NPepvjT8jPiBNQSwMEFAAIAAgADHnVQAAA
AAAAAAAAAAAAABkAEABfX01BQ09TWC8uX3JlZHVjdGlvbi5odG1sVVgMAGqb409Ym+NPyM+IE2Ng
FWNnYGJg8E1MVvAPVohQgAKQGAMnEBsxMDDaA2kgn7GQgSjgGBISBGGBddwB4qloSpig4qYMDJrJ
+bl6iQUFOal6uakliSmJJYlW2b4uniWpuS755Xk5+YkpqSkuiSWpIPMEgUQCA4Mqbj3hGalFqW5F
+bnFDEkFOZnFJQYGCxmNHbdOPubRuPEmBxfUYYxIDkEGwghN8QKGGSUlBVb6+iWZBcW5yXpAS/Uz
81JSK/RBVmcmJ5Zk5ufFp6aUxqflF+XqG+gaGRM03w4AUEsHCEAt1hfOAAAAcQEAAFBLAQIVAxQA
CAAIAKZ21UBaNwe8HQEAACoCAAAIAAwAAAAAAAAAAECkgQAAAABlbWJlZC5qc1VYCAB1m+NPx5fj
T1BLAQIVAxQACAAIAAx51UBamQBDtgAAAC0BAAAOAAwAAAAAAAAAAECkgWMBAAByZWR1Y3Rpb24u
aHRtbFVYCABqm+NPWJvjT1BLAQIVAwoAAAAAAB151UAAAAAAAAAAAAAAAAAJAAwAAAAAAAAAAED9
QWUCAABfX01BQ09TWC9VWAgAepvjT3qb409QSwECFQMUAAgACAAMedVAQC3WF84AAABxAQAAGQAM
AAAAAAAAAABApIGcAgAAX19NQUNPU1gvLl9yZWR1Y3Rpb24uaHRtbFVYCABqm+NPWJvjT1BLBQYA
AAAABAAEACABAADBAwAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151193</attachid>
            <date>2012-07-08 23:49:16 -0700</date>
            <delta_ts>2012-07-09 13:44:48 -0700</delta_ts>
            <desc>not quite ready for review</desc>
            <filename>bug-89102-20120708234915.patch</filename>
            <type>text/plain</type>
            <size>20603</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU3OTVlMGE5NzdjNGNh
YjIwOWRhZmFhN2M4NDUzNDU5MWM1ZDExNy4uNjI3ZDk4MzA0NGExY2I0M2UwMjNiM2FmN2ZhZDA0
ZDc4OWY5YTBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA3LTA4ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBvZiBz
Y3JpcHRzIHRoYXQgYWxzbyBkb2N1bWVudC53cml0ZSBzb21ldGltZXMgd3JpdGVzIGFzeW5jCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
cGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuaHRtbAorCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
b2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcklmUG9zc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpjYW5UYWtlTmV4dFRva2VuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0
cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdB
ZnRlclNjcmlwdEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJz
ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNl
cjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dFJ1bm5lcjo6ZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3Jp
cHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1
ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oOgorICAgICAgICAoSFRNTFNjcmlwdFJ1bm5lcik6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6dGFr
ZVNjcmlwdFRvUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
VG9rZW5JbkZvcmVpZ25Db250ZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaDoKKyAgICAgICAgKEhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToKKwogMjAxMi0wNy0wMiAg
Tm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtR
dF0gR2V0IHJpZCBvZiBHcmFwaGljc0xheWVyUXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDdhMDZiNDIzOTY5MTNkOWQ5NmQ0
ZTU3MWQ1YjIzM2E5MjM3MDQyOTUuLjIyMzYwZWIzMzhiN2NlOTkwMGY3YmFjM2EwMjNmYzBkN2Fh
NzcwYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpw
cm9jZXNzaW5nRGF0YSgpIGNvbnN0CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9r
ZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01vZGUgbW9kZSkKIHsKLSAgICBpZiAoaXNTdG9w
cGVkKCkgfHwgbV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSkKKyAgICBpZiAoaXNTdG9wcGVkKCkg
fHwgaXNXYWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPbmNl
IGEgcmVzdW1lIGlzIHNjaGVkdWxlZCwgSFRNTFBhcnNlclNjaGVkdWxlciBjb250cm9scyB3aGVu
IHdlIG5leHQgcHVtcC4KQEAgLTE5Nyw4ICsxOTcsNiBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6cmVzdW1lUGFyc2luZ0FmdGVyWWllbGQoKQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6
cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKLSAgICBBU1NFUlQobV90cmVlQnVp
bGRlci0+aXNQYXVzZWQoKSk7Ci0KICAgICBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQb3NpdGlv
biA9IFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CiAgICAgUmVmUHRyPEVsZW1l
bnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNj
cmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIC8vIFdlIHdpbGwgbm90IGhhdmUgYSBzY3JpcHRSdW5u
ZXIgd2hlbiBwYXJzaW5nIGEgRG9jdW1lbnRGcmFnbWVudC4KQEAgLTIxMiw4ICsyMTAsNyBAQCBi
b29sIEhUTUxEb2N1bWVudFBhcnNlcjo6Y2FuVGFrZU5leHRUb2tlbihTeW5jaHJvbm91c01vZGUg
bW9kZSwgUHVtcFNlc3Npb24mIHNlcwogICAgIGlmIChpc1N0b3BwZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgLy8gVGhlIHBhcnNlciB3aWxsIHBhdXNlIGl0c2VsZiB3aGVuIHdh
aXRpbmcgb24gYSBzY3JpcHQgdG8gbG9hZCBvciBydW4uCi0gICAgaWYgKG1fdHJlZUJ1aWxkZXIt
PmlzUGF1c2VkKCkpIHsKKyAgICBpZiAoaXNXYWl0aW5nRm9yU2NyaXB0cygpKSB7CiAgICAgICAg
IGlmIChtb2RlID09IEFsbG93WWllbGQpCiAgICAgICAgICAgICBtX3BhcnNlclNjaGVkdWxlci0+
Y2hlY2tGb3JZaWVsZEJlZm9yZVNjcmlwdChzZXNzaW9uKTsKIApAQCAtMjIyLDkgKzIxOSw4IEBA
IGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjYW5UYWtlTmV4dFRva2VuKFN5bmNocm9ub3VzTW9k
ZSBtb2RlLCBQdW1wU2Vzc2lvbiYgc2VzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgLy8gSWYgd2UncmUgcGF1c2VkIHdhaXRpbmcgZm9yIGEgc2NyaXB0LCB3ZSB0cnkgdG8g
ZXhlY3V0ZSBzY3JpcHRzIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICBib29sIHNob3VsZENv
bnRpbnVlUGFyc2luZyA9IHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpOwotICAgICAg
ICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7Ci0gICAg
ICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nIHx8IGlzU3RvcHBlZCgpKQorICAgICAgICBy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKKyAgICAgICAgaWYgKGlzV2FpdGluZ0Zv
clNjcmlwdHMoKSB8fCBpc1N0b3BwZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKQEAgLTQ2MywxMyArNDU5LDE4IEBAIFRleHRQb3NpdGlvbiBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0CiAKIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjppc1dh
aXRpbmdGb3JTY3JpcHRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90cmVlQnVpbGRlci0+aXNQ
YXVzZWQoKTsKKyAgICAvLyBXaGVuIHRoZSBUcmVlQnVpbGRlciBlbmNvdW50ZXJzIGEgPC9zY3Jp
cHQ+IHRhZywgaXQgcmV0dXJucyB0byB0aGUgSFRNTERvY3VtZW50UGFyc2VyCisgICAgLy8gd2hl
cmUgdGhlIHNjcmlwdCBpcyB0cmFuc2ZlcmVkIGZyb20gdGhlIHRyZWVidWlsZGVyIHRvIHRoZSBz
Y3JpcHQgcnVubmVyLgorICAgIC8vIFRoZSBzY3JpcHQgcnVubmVyIHdpbGwgaG9sZCB0aGUgc2Ny
aXB0IHVudGlsIGl0cyBsb2FkZWQgYW5kIHJ1bi4gRHVyaW5nCisgICAgLy8gYW55IG9mIHRoaXMg
dGltZSwgd2Ugd2FudCB0byBjb3VudCBvdXJzZWx2ZXMgYXMgIndhaXRpbmcgZm9yIGEgc2NyaXB0
IiBhbmQgdGh1cworICAgIC8vIHJ1biB0aGUgcHJlbG9hZCBzY2FubmVyLCBhcyB3ZWxsIGFzIGRl
bGF5IGNvbXBsZXRpb24gb2YgcGFyc2luZy4KKyAgICByZXR1cm4gbV90cmVlQnVpbGRlci0+aGFz
UGFyc2VyQmxvY2tpbmdTY3JpcHQoKSB8fCAobV9zY3JpcHRSdW5uZXIgJiYgbV9zY3JpcHRSdW5u
ZXItPmhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBh
cnNlcjo6cmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCkKIHsKICAgICBBU1NFUlQo
IWlzRXhlY3V0aW5nU2NyaXB0KCkpOwotICAgIEFTU0VSVCghbV90cmVlQnVpbGRlci0+aXNQYXVz
ZWQoKSk7CisgICAgQVNTRVJUKCFpc1dhaXRpbmdGb3JTY3JpcHRzKCkpOwogCiAgICAgbV9pbnNl
cnRpb25QcmVsb2FkU2Nhbm5lci5jbGVhcigpOwogICAgIHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxl
KEFsbG93WWllbGQpOwpAQCAtNTEwLDEzICs1MTEsOCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkp
OwotICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1l
LCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCi0gICAgLy8gaXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRp
bmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgotICAgIG1fdHJlZUJ1aWxk
ZXItPnNldFBhdXNlZChmYWxzZSk7Ci0gICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBt
X3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChjYWNoZWRSZXNvdXJj
ZSk7Ci0gICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBhcnNpbmcp
OwotICAgIGlmIChzaG91bGRDb250aW51ZVBhcnNpbmcpCisgICAgbV9zY3JpcHRSdW5uZXItPmV4
ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoY2FjaGVkUmVzb3VyY2UpOworICAgIGlmICghaXNX
YWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICByZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVj
dXRpb24oKTsKIH0KIApAQCAtNTM0LDE1ICs1MzAsOCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKQogICAgIC8vIHB1bXBUb2tl
bml6ZXIgY2FuIGNhdXNlIHRoaXMgcGFyc2VyIHRvIGJlIGRldGFjaGVkIGZyb20gdGhlIERvY3Vt
ZW50LAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSBpdCBpc24ndCBkZWxldGVkIHlldC4K
ICAgICBSZWZQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgQVNT
RVJUKCFtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUKG1f
dHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwotICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0
IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCi0gICAgLy8g
aXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBi
dWlsZGVyLgotICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7Ci0gICAgYm9vbCBz
aG91bGRDb250aW51ZVBhcnNpbmcgPSBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMoKTsKLSAgICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3Vs
ZENvbnRpbnVlUGFyc2luZyk7Ci0gICAgaWYgKHNob3VsZENvbnRpbnVlUGFyc2luZykKKyAgICBt
X3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKKyAg
ICBpZiAoIWlzV2FpdGluZ0ZvclNjcmlwdHMoKSkKICAgICAgICAgcmVzdW1lUGFyc2luZ0FmdGVy
U2NyaXB0RXhlY3V0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggZDE0ZDY5ZDFkNjM3ZGIzYjE5ZmVmZGJkMDBiZTUx
MDQ1YjQwMDQ4ZC4uNGFlYjJiYThkODMyNDFhM2M5YzczN2VlYzQ1OTA5ZGIxZjYzNjJmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAg
LTU3LDggKzU3LDggQEAgSFRNTFNjcmlwdFJ1bm5lcjo6SFRNTFNjcmlwdFJ1bm5lcihEb2N1bWVu
dCogZG9jdW1lbnQsIEhUTUxTY3JpcHRSdW5uZXJIb3N0KiBob3MKIEhUTUxTY3JpcHRSdW5uZXI6
On5IVE1MU2NyaXB0UnVubmVyKCkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJlIHBhc3Nl
ZCBhICJkb25lIGxvYWRpbmcvcGFyc2luZyIgY2FsbGJhY2sgc29vbmVyIHRoYW4gZGVzdHJ1Y3Rp
b24/Ci0gICAgaWYgKG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIG1f
cGFyc2luZ0Jsb2NraW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQotICAgICAgICBzdG9wV2F0
Y2hpbmdGb3JMb2FkKG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAobV9wYXJzZXJC
bG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0Lndh
dGNoaW5nRm9yTG9hZCgpKQorICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2VyQmxv
Y2tpbmdTY3JpcHQpOwogCiAgICAgd2hpbGUgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNp
bmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFBlbmRpbmdTY3JpcHQgcGVuZGluZ1NjcmlwdCA9IG1f
c2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKQEAgLTExMiwxMCArMTEy
LDEwIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1Njcmlw
dCgpCiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVCghbV9zY3JpcHROZXN0aW5n
TGV2ZWwpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7
Ci0gICAgQVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0
KSk7CisgICAgQVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KG1fcGFyc2VyQmxvY2tpbmdTY3Jp
cHQpKTsKIAogICAgIEluc2VydGlvblBvaW50UmVjb3JkIGluc2VydGlvblBvaW50UmVjb3JkKG1f
aG9zdC0+aW5wdXRTdHJlYW0oKSk7Ci0gICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRj
aEV2ZW50KG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0KTsKKyAgICBleGVjdXRlUGVuZGluZ1Njcmlw
dEFuZERpc3BhdGNoRXZlbnQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CiB9CiAKIHZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRp
bmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCkBAIC0xNjksNyArMTY5LDcgQEAgYm9vbCBIVE1MU2Ny
aXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29u
c3QgVGV4dFBvc2kKICAgICAvLyBUcnkgdG8gZXhlY3V0ZSB0aGUgc2NyaXB0IGdpdmVuIHRvIHVz
LgogICAgIHJ1blNjcmlwdChzY3JpcHRFbGVtZW50LmdldCgpLCBzY3JpcHRTdGFydFBvc2l0aW9u
KTsKIAotICAgIGlmIChoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpIHsKKyAgICBpZiAoaGFz
UGFyc2VyQmxvY2tpbmdTY3JpcHQoKSkgewogICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2
ZWwpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEJsb2NrIHRoZSBwYXJzZXIuICBVbndp
bmQgdG8gdGhlIG91dGVybW9zdCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlIGJlZm9yZSBjb250
aW51aW5nIHBhcnNpbmcuCiAgICAgICAgIC8vIElmIHByZWxvYWQgc2Nhbm5lciBnb3QgY3JlYXRl
ZCwgaXQgaXMgbWlzc2luZyB0aGUgc291cmNlIGFmdGVyIHRoZSBjdXJyZW50IGluc2VydGlvbiBw
b2ludC4gQXBwZW5kIGl0IGFuZCBzY2FuLgpAQCAtMTgxLDE2ICsxODEsMTYgQEAgYm9vbCBIVE1M
U2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwg
Y29uc3QgVGV4dFBvc2kKICAgICByZXR1cm4gdHJ1ZTsgLy8gU2NyaXB0cyBleGVjdXRlZCBhcyBl
eHBlY3RlZCwgY29udGludWUgcGFyc2luZy4KIH0KIAotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpo
YXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkgY29uc3QKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6
aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdAogewotICAgIHJldHVybiAhIW1fcGFyc2lu
Z0Jsb2NraW5nU2NyaXB0LmVsZW1lbnQoKTsKKyAgICByZXR1cm4gISFtX3BhcnNlckJsb2NraW5n
U2NyaXB0LmVsZW1lbnQoKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFy
c2luZ0Jsb2NraW5nU2NyaXB0cygpCiB7Ci0gICAgd2hpbGUgKGhhdmVQYXJzaW5nQmxvY2tpbmdT
Y3JpcHQoKSkgeworICAgIHdoaWxlIChoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKSB7CiAgICAg
ICAgIC8vIFdlIG9ubHkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb25jZS4KLSAgICAgICAgaWYgKCFp
c1BlbmRpbmdTY3JpcHRSZWFkeShtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdCkpCisgICAgICAgIGlm
ICghaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQo
KTsKICAgICB9CkBAIC0yMDAsOSArMjAwLDkgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVj
dXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKIHsK
ICAgICBBU1NFUlQoIW1fc2NyaXB0TmVzdGluZ0xldmVsKTsKLSAgICBBU1NFUlQoaGF2ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9w
YXJzaW5nQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0KTsKLSAg
ICBBU1NFUlQobV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVk
KCkpOworICAgIEFTU0VSVChoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQo
KSA9PSBjYWNoZWRTY3JpcHQpOworICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNh
Y2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKTsKICAgICByZXR1cm4gZXhlY3V0ZVBhcnNpbmdCbG9j
a2luZ1NjcmlwdHMoKTsKIH0KIApAQCAtMjIxLDcgKzIyMSw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpCiB7CiAgICAgd2hpbGUgKCFt
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VS
VCghbV9zY3JpcHROZXN0aW5nTGV2ZWwpOwotICAgICAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxv
Y2tpbmdTY3JpcHQoKSk7CisgICAgICAgIEFTU0VSVCghaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQo
KSk7CiAgICAgICAgIEFTU0VSVChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3Qo
KS5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIGlmICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQ
YXJzaW5nLmZpcnN0KCkuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpIHsKICAgICAgICAgICAg
IHdhdGNoRm9yTG9hZChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKSk7CkBA
IC0yMzcsMTYgKzIzNywxNiBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvclBhcnNpbmcoKQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJz
aW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIXJlcXVlc3RQ
ZW5kaW5nU2NyaXB0KG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LCBlbGVtZW50KSkKKyAgICBpZiAo
IXJlcXVlc3RQZW5kaW5nU2NyaXB0KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQsIGVsZW1lbnQpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuY2Fj
aGVkU2NyaXB0KCkpOworICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNj
cmlwdCgpKTsKIAogICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBhIGxvYWQgY2FsbGJhY2sgaWYg
Y2FjaGVkU2NyaXB0IGlzIG5vdCBhbHJlYWR5Ci0gICAgLy8gaW4gdGhlIGNhY2hlLiAgQ2FsbGVy
cyB3aWxsIGF0dGVtcHQgdG8gcnVuIHRoZSBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdAorICAgIC8v
IGluIHRoZSBjYWNoZS4gQ2FsbGVycyB3aWxsIGF0dGVtcHQgdG8gcnVuIHRoZSBtX3BhcnNlckJs
b2NraW5nU2NyaXB0CiAgICAgLy8gaWYgcG9zc2libGUgYmVmb3JlIHJldHVybmluZyBjb250cm9s
IHRvIHRoZSBwYXJzZXIuCi0gICAgaWYgKCFtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5jYWNoZWRT
Y3JpcHQoKS0+aXNMb2FkZWQoKSkKLSAgICAgICAgd2F0Y2hGb3JMb2FkKG1fcGFyc2luZ0Jsb2Nr
aW5nU2NyaXB0KTsKKyAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0
KCktPmlzTG9hZGVkKCkpCisgICAgICAgIHdhdGNoRm9yTG9hZChtX3BhcnNlckJsb2NraW5nU2Ny
aXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0RGVmZXJyZWRTY3JpcHQo
RWxlbWVudCogZWxlbWVudCkKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5u
ZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVs
ZW1lbgogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBj
b25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1f
ZG9jdW1lbnQpOwotICAgIEFTU0VSVCghaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKTsKKyAg
ICBBU1NFUlQoIWhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkpOwogICAgIHsKICAgICAgICAgSW5z
ZXJ0aW9uUG9pbnRSZWNvcmQgaW5zZXJ0aW9uUG9pbnRSZWNvcmQobV9ob3N0LT5pbnB1dFN0cmVh
bSgpKTsKICAgICAgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgbmVzdGluZ0xldmVsSW5jcmVt
ZW50ZXIobV9zY3JpcHROZXN0aW5nTGV2ZWwpOwpAQCAtMzAyLDggKzMwMiw4IEBAIHZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0
aW9uJiBzY3JpcHRTdGFyCiAgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0
KTsKICAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0
ZWQoKSkgewogICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAg
ICAgICAgICAgICAgICBtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7
Ci0gICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0U3RhcnRpbmdQb3Np
dGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlckJs
b2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc291
cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0
aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBz
Y3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCmluZGV4IDc3YWFkOGM5YzAzN2Y1ZjI5
NjFkNWFjNGM4YzFlYjU4ZjIxOGU1NWYuLmQ1ZWNiMGZmMmU0ZjFlYzQ0NWEwMjc4MjIyOGE2MTg3
YzU4NDVmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmgKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICBib29sIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0Zv
clBhcnNpbmcoKTsKIAorICAgIGJvb2wgaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdDsK
ICAgICBib29sIGlzRXhlY3V0aW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gISFtX3NjcmlwdE5l
c3RpbmdMZXZlbDsgfQogCiBwcml2YXRlOgpAQCAtNjksNyArNzAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCk7CiAgICAgdm9pZCBleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYpOwotICAgIGJvb2wg
aGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpIGNvbnN0OwogICAgIGJvb2wgZXhlY3V0ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdHMoKTsKIAogICAgIHZvaWQgcmVxdWVzdFBhcnNpbmdCbG9ja2luZ1Nj
cmlwdChFbGVtZW50Kik7CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKICAgICBIVE1MU2NyaXB0UnVubmVySG9zdCogbV9ob3N0OwotICAgIFBl
bmRpbmdTY3JpcHQgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQ7CisgICAgUGVuZGluZ1NjcmlwdCBt
X3BhcnNlckJsb2NraW5nU2NyaXB0OwogICAgIERlcXVlPFBlbmRpbmdTY3JpcHQ+IG1fc2NyaXB0
c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLXdo
ZW4tdGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCiAgICAgdW5zaWduZWQgbV9zY3Jp
cHROZXN0aW5nTGV2ZWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCmluZGV4IGZkMGQwMDNmNWJhZTMxYTI4NTQ1ZTU4OTc1MDZiMjMyNmQ1MjZm
MTUuLjUzYzVkZjNmZTQzOWUxNjZmMTVmM2EwZGJlNTNmYjU2NDg3ZTJkZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzUxLDcgKzM1
MSw2IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90cmVlKGRvY3VtZW50LCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgICwgbV9y
ZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQotICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAs
IG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25N
b2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUoZmFsc2Up
CkBAIC0zNzAsNyArMzY5LDYgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICAsIG1fZG9j
dW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3RyZWUoZnJhZ21lbnQsIHNjcmlw
dGluZ1Blcm1pc3Npb24sIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBtX3JlcG9ydEVycm9y
cyhmYWxzZSkgLy8gRklYTUU6IFdoeSBub3QgcmVwb3J0IGVycm9ycyBpbiBmcmFnbWVudHM/Ci0g
ICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRpYWxNb2Rl
KQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3No
b3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTQyNywxMSArNDI1LDExIEBAIEhUTUxU
cmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRl
eHQoKQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRv
UHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7CisgICAgQVNTRVJU
KG1fc2NyaXB0VG9Qcm9jZXNzKTsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBt
YXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8gVGhl
IEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5z
aWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJzZXIgdG8gZXhp
dCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUKICAgICAvLyBiZWZvcmUgcnVubmlu
ZyBzY3JpcHRzLgotICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKICAgICBzY3JpcHRTdGFydFBvc2l0
aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOwogICAgIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpOwogICAgIHJl
dHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNlKCk7CkBAIC0yMTI5LDcgKzIxMjcsNiBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgIGNhc2UgVGV4dE1vZGU6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0
VGFnKSB7CiAgICAgICAgICAgICAvLyBQYXVzZSBvdXJzZWx2ZXMgc28gdGhhdCBwYXJzaW5nIHN0
b3BzIHVudGlsIHRoZSBzY3JpcHQgY2FuIGJlIHByb2Nlc3NlZCBieSB0aGUgY2FsbGVyLgotICAg
ICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1
cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3Nj
cmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwogICAgICAgICAgICAgbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9z
aXRpb247CkBAIC0yNzU1LDcgKzI3NTIsNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAg
ICAgYWRqdXN0U1ZHVGFnTmFtZUNhc2UodG9rZW4pOwogCiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnNjcmlwdFRhZyAmJiBtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFn
TmFtZShTVkdOYW1lczo6c2NyaXB0VGFnKSkgewotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRy
dWU7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVu
dCgpOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmgKaW5kZXggMTliYmU5NTE5ZmZiZjVhNzY1ZmZiZTRjMzRkNzU4YmFiZmIzZGEzNC4uMGIxNzQ2
NjhjZTc0ZTMwYzkwNjkwMDU3ZjBiMmRiYjU0MGZjNTM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTcwLDE0ICs3MCwxMiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRldGFjaCgpOwogCi0gICAgdm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQp
IHsgbV9pc1BhdXNlZCA9IHBhdXNlZDsgfQotICAgIGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzUGF1c2VkOyB9Ci0KICAgICAvLyBUaGUgdG9rZW4gcmVhbGx5IHNob3VsZCBiZSBw
YXNzZWQgYXMgYSBjb25zdCYgc2luY2UgaXQncyBuZXZlciBtb2RpZmllZC4KICAgICB2b2lkIGNv
bnN0cnVjdFRyZWVGcm9tVG9rZW4oSFRNTFRva2VuJik7CiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVl
RnJvbUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwogCi0gICAgLy8gTXVzdCBiZSBjYWxs
ZWQgd2hlbiBwYXJzZXIgaXMgcGF1c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4u
CisgICAgYm9vbCBoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9z
Y3JpcHRUb1Byb2Nlc3M7IH0KKyAgICAvLyBNdXN0IGJlIGNhbGxlZCB0byB0YWtlIHRoZSBwYXJz
ZXItYmxvY2tpbmcgc2NyaXB0IGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCiAgICAg
UGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbiYgc2Ny
aXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9zZSBhbnkgb3BlbiB0YWdzLCBl
dGMuCkBAIC0yMTYsNyArMjE0LDYgQEAgcHJpdmF0ZToKICAgICBIVE1MQ29uc3RydWN0aW9uU2l0
ZSBtX3RyZWU7CiAKICAgICBib29sIG1fcmVwb3J0RXJyb3JzOwotICAgIGJvb2wgbV9pc1BhdXNl
ZDsKIAogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNpbnNlcnRpb24tbW9kZQogICAgIEluc2VydGlv
bk1vZGUgbV9pbnNlcnRpb25Nb2RlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzNjcwYzQ1MDY3NmVmYTk1ZDc2YjMxZjQ1
YTAzMmRkZjQwNjI0OTEuLjM5M2IxMTIwNmRkMThhYmE5NWIxNGQ2NmE2MjI3NDU3ZTI1NzM5ZGEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0wOCAgRXJpYyBTZWlkZWwgIDxlcmljQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgZG9jdW1lbnQud3JpdGUgb2Ygc2NyaXB0cyB0aGF0IGFsc28g
ZG9jdW1lbnQud3JpdGUgc29tZXRpbWVzIHdyaXRlcyBhc3luYworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQt
ZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3BhcnNl
ci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvcGFyc2VyL3Jlc291cmNlcy9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmpzOiBBZGRl
ZC4KKwogMjAxMi0wNy0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEFub3RoZXIgY3Jhc2hpbmcgdGVzdCBvbiB0aGUgRVdTLiBXZSB0aGluayB0aGlzIGlzIGJl
Y2F1c2Ugb2YgdGhlIGZsYXNoCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9j
YWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdlZjIyZTlhNDMxYWQwMjcyNzEzYjcxZmRjODc5NDAxNmM4ZWYxMmYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50
LXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjhlYTU4MzRhY2Y5ZjNhNTc4OWE1NmQ3N2VlNTMyNTU0ZTdhMTk1MQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9j
dW1lbnQtd3JpdGUuaHRtbApAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7Cit3aW5kb3cuaXNUZXN0U2NyaXB0Q2FjaGVkID0gdHJ1ZTsKK2Rv
Y3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0ncmVzb3VyY2VzL2NhY2hlZC1zY3JpcHQtZG9jdW1l
bnQtd3JpdGUuanMnPjwvIiArICJzY3JpcHQ+Iik7Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3Jlc291cmNlcy9jYWNoZWQtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvcmVzb3VyY2VzL2NhY2hl
ZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMzNDM5M2Q4OWZhNDRkZDQz
ZmU1NWFiMjA5NGUyYjcxMDlkZjZlOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvcGFyc2VyL3Jlc291cmNlcy9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmpzCkBAIC0w
LDAgKzEsNCBAQAoraWYgKHdpbmRvdy5wYXJlbnQuaXNUZXN0U2NyaXB0Q2FjaGVkKSB7CisgICAg
ZG9jdW1lbnQud3JpdGUoJzxkaXY+PC9kaXY+Jyk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYn
KSA/ICdQQVNTJyA6ICdGQUlMJykpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151309</attachid>
            <date>2012-07-09 13:44:52 -0700</date>
            <delta_ts>2012-07-09 14:48:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89102-20120709134451.patch</filename>
            <type>text/plain</type>
            <size>26324</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyYTk0YmNiNmJmNjI0
YTM4NDM0MTQ3ZWNlODIxNTFjZTk0Y2EyYy4uMTllNWUzMjc3ZDVkNDg5MzkyYzlmN2EwYTllYzcz
NDA5ODM5ZjJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA3LTA4ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBvZiBz
Y3JpcHRzIHRoYXQgYWxzbyBkb2N1bWVudC53cml0ZSBzb21ldGltZXMgd3JpdGVzIGFzeW5jCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gYSBzY3Jp
cHQgdGFnIGlzIGZpcnN0IGVuY291bnRlcmVkLCB0aGUgVHJlZUJ1aWxkZXIgaG9sZHMgdGhlIGVs
ZW1lbnQgYW5kIHJldHVybnMKKyAgICAgICAgb3V0IHRvIHRoZSBvdXRlciBIVE1MRG9jdW1lbnRQ
YXJzZXIgcGFyc2UgbG9vcC4gIFRoZSBIVE1MRG9jdW1lbnRQYXJzZXIgdGhlbiB0YWtlcworICAg
ICAgICB0aGUgc2NyaXB0IGVsZW1lbnQgYW5kIHBhc3NlcyBpdCB0byB0aGUgSFRNTFNjcmlwdFJ1
bm5lciBmb3IgZXhlY3V0aW9uLiBIb3dldmVyLCBpZiB0aGUKKyAgICAgICAgc2NyaXB0IGlzIGFu
ICJleHRlcm5hbCBzY3JpcHQiIHRoZSBIVE1MU2NyaXB0UnVubmVyIG1heSBoYXZlIHRvIHdhaXQg
Zm9yIHRoYXQgcGFyc2VyCisgICAgICAgIGJsb2NraW5nIHNjcmlwdCB0byBsb2FkLCBhbmQgbWF5
IHN0b3JlIHRoZSBzY3JpcHQgaW4gaXRzIG93biBtX3BhcnNlckJsb2NraW5nU2NyaXB0IG1lbWJl
ci4KKworICAgICAgICBXaGlsZSB0aGUgSFRNTFNjcmlwdFJ1bm5lciBoYXMgdGhpcyBub3QteWV0
LWxvYWRlZC1zY3JpcHQgdGhlIHBhcnNlciBpcyBhbHNvIGJsb2NrZWQuCisgICAgICAgIEJlY2F1
c2UgdGhlICJwYXVzZWQiIHN0YXRlIG9mIHRoZSBwYXJzZXIgd2FzIGhlbGQgYXMgYSBzZXBhcmF0
ZSBib29sIG9uIHRoZSBUcmVlQnVpbGRlcgorICAgICAgICB3ZSdkIGhhdmUgdG8gYmUgY2FyZWZ1
bCB0byB1cGRhdGUgaXQgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHBlbmRp
bmcgc2NyaXB0CisgICAgICAgIG9uIHRoZSBIVE1MU2NyaXB0UnVubmVyLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVtb3ZlcyB0aGlzIHNlcGFyYXRlICJwYXVzZWQiIGJvb2wgYW5kIG1ha2VzIHRo
ZSBIVE1MRG9jdW1lbnRQYXJzZXIgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHRoZSAicGF1c2Vk
IiBzdGF0ZSBvZiB0aGUgcGFyc2VyIHRocm91Z2ggdGhlIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBm
dW5jdGlvbiB3aGljaAorICAgICAgICBrbm93cyBob3cgdG8gY2hlY2sgYm90aCB0aGUgVHJlZUJ1
aWxkZXIgYW5kIHRoZSBTY3JpcHRSdW5uZXIgZm9yIHBvc3NpYmxlIHBhcnNlci1ibG9ja2luZyBz
Y3JpcHRzLgorCisgICAgICAgIEkgc3VzcGVjdCB0aGlzIGNoYW5nZSBtYXkgYWN0dWFsbHkgZml4
IGEgYnVuY2ggb2YgZWRnZSBjYXNlcyB3aGVyZSB3ZSB3ZXJlIG5vdAorICAgICAgICBjaGVja2lu
ZyBmb3IgdGhlIEhUTUxTY3JpcHRSdW5uZXIncyBwYXJzZXIgYmxvY2tpbmcgc2NyaXB0IGFuZCB0
aHVzIGluY29ycmVjdGx5IGVuZGluZworICAgICAgICB0aGUgcGFyc2VyLCBvciBub3Qgc3RhcnRp
bmcgdGhlIHByZS1sb2FkIHNjYW5uZXIsIGV0Yy4KKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMg
Y2hhbmdlIEkgYWxzbyByZW5hbWVkIG1faGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCBpbiBIVE1M
U2NyaXB0UnVubmVyIHRvIG1hdGNoCisgICAgICAgIHRoZSBuYW1pbmcgc3R5bGUgdXNlZCBlbHNl
d2hlcmUgaW4gdGhlIHBhcnNlciwgYXMgd2VsbCBhcyByZW1vdmVkIGFsbCB0aGUgImJvb2wiIHJl
dHVybiB2YWx1ZXMKKyAgICAgICAgZm9yIHRoZXNlIHBhcnNlL2V4ZWN1dGUgZnVuY3Rpb25zIGFz
IHRoZXkgYXJlIG5vIGxvbmdlciB1c2VmdWwgKG9yIGNvcnJlY3QpLiBUaGUgY29ycmVjdCB3YXkK
KyAgICAgICAgaXMgYWx3YXlzIHRvIGNoZWNrIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5n
Rm9yU2NyaXB0cygpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQt
ZG9jdW1lbnQtd3JpdGUuaHRtbAorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRv
a2VuaXplcklmUG9zc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TERvY3VtZW50UGFyc2VyOjpjYW5UYWtlTmV4dFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRS
dW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJs
b2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRS
dW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdCk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAoSFRNTFNj
cmlwdFJ1bm5lcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKEhU
TUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omhhc1Bh
cnNlckJsb2NraW5nU2NyaXB0KToKKwogMjAxMi0wNy0wOCAgWW9zaGlmdW1pIElub3VlICA8eW9z
aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtQbGF0Zm9ybS1NYWNdIERlcml2ZSBMb2NhbGVN
YWMue2NwcCxofSBhbmQgTG9jYWxpemVkRGF0ZU1hYy5jcHAgZnJvbSBMb2NhbGVXaW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4
IGI5ZjE3MDE4MGQwY2E5OGY3NDg0NzRiYWY3Y2Y5MDE4ZjMyMGE3YmIuLjU5Y2ZkYmYyODA5Zjky
NmZjNGJjMjliZWNjYjkwZTg4ZWU4NjIyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wg
SFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nRGF0YSgpIGNvbnN0CiAKIHZvaWQgSFRNTERv
Y3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01vZGUgbW9k
ZSkKIHsKLSAgICBpZiAoaXNTdG9wcGVkKCkgfHwgbV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSkK
KyAgICBpZiAoaXNTdG9wcGVkKCkgfHwgaXNXYWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBPbmNlIGEgcmVzdW1lIGlzIHNjaGVkdWxlZCwgSFRNTFBhcnNlclNj
aGVkdWxlciBjb250cm9scyB3aGVuIHdlIG5leHQgcHVtcC4KQEAgLTE5NSwxNiArMTk1LDEzIEBA
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgpCiAgICAg
ZW5kSWZEZWxheWVkKCk7CiB9CiAKLWJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRz
Rm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlw
dHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpCiB7Ci0gICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlz
UGF1c2VkKCkpOwotCiAgICAgVGV4dFBvc2l0aW9uIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBUZXh0
UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpOwogICAgIFJlZlB0cjxFbGVtZW50PiBzY3Jp
cHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFy
dFBvc2l0aW9uKTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4g
cGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCi0gICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNj
cmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICBpZiAobV9z
Y3JpcHRSdW5uZXIpCisgICAgICAgIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1l
bnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAogYm9vbCBIVE1MRG9jdW1l
bnRQYXJzZXI6OmNhblRha2VOZXh0VG9rZW4oU3luY2hyb25vdXNNb2RlIG1vZGUsIFB1bXBTZXNz
aW9uJiBzZXNzaW9uKQpAQCAtMjEyLDggKzIwOSw3IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2Vy
OjpjYW5UYWtlTmV4dFRva2VuKFN5bmNocm9ub3VzTW9kZSBtb2RlLCBQdW1wU2Vzc2lvbiYgc2Vz
CiAgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBU
aGUgcGFyc2VyIHdpbGwgcGF1c2UgaXRzZWxmIHdoZW4gd2FpdGluZyBvbiBhIHNjcmlwdCB0byBs
b2FkIG9yIHJ1bi4KLSAgICBpZiAobV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSkgeworICAgIGlm
IChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKICAgICAgICAgaWYgKG1vZGUgPT0gQWxsb3dZaWVs
ZCkKICAgICAgICAgICAgIG1fcGFyc2VyU2NoZWR1bGVyLT5jaGVja0ZvcllpZWxkQmVmb3JlU2Ny
aXB0KHNlc3Npb24pOwogCkBAIC0yMjIsOSArMjE4LDggQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OmNhblRha2VOZXh0VG9rZW4oU3luY2hyb25vdXNNb2RlIG1vZGUsIFB1bXBTZXNzaW9uJiBz
ZXMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBwYXVz
ZWQgd2FpdGluZyBmb3IgYSBzY3JpcHQsIHdlIHRyeSB0byBleGVjdXRlIHNjcmlwdHMgYmVmb3Jl
IGNvbnRpbnVpbmcuCi0gICAgICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gcnVuU2Ny
aXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCk7Ci0gICAgICAgIG1fdHJlZUJ1aWxkZXItPnNldFBh
dXNlZCghc2hvdWxkQ29udGludWVQYXJzaW5nKTsKLSAgICAgICAgaWYgKCFzaG91bGRDb250aW51
ZVBhcnNpbmcgfHwgaXNTdG9wcGVkKCkpCisgICAgICAgIHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVl
QnVpbGRlcigpOworICAgICAgICBpZiAoaXNXYWl0aW5nRm9yU2NyaXB0cygpIHx8IGlzU3RvcHBl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzg1LDggKzM4MCwx
MSBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YXR0ZW1wdFRvUnVuRGVmZXJyZWRTY3JpcHRz
QW5kRW5kKCkKIHsKICAgICBBU1NFUlQoaXNTdG9wcGluZygpKTsKICAgICBBU1NFUlQoIWhhc0lu
c2VydGlvblBvaW50KCkpOwotICAgIGlmIChtX3NjcmlwdFJ1bm5lciAmJiAhbV9zY3JpcHRSdW5u
ZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclBhcnNpbmcoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX3NjcmlwdFJ1bm5lcikgeworICAgICAgICBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0
ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpOworICAgICAgICBpZiAoaXNXYWl0aW5nRm9yU2Ny
aXB0cygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBlbmQoKTsKIH0KIApAQCAt
NDYyLDEzICs0NjAsMTggQEAgVGV4dFBvc2l0aW9uIEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBv
c2l0aW9uKCkgY29uc3QKIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNj
cmlwdHMoKSBjb25zdAogewotICAgIHJldHVybiBtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpOwor
ICAgIC8vIFdoZW4gdGhlIFRyZWVCdWlsZGVyIGVuY291bnRlcnMgYSA8L3NjcmlwdD4gdGFnLCBp
dCByZXR1cm5zIHRvIHRoZSBIVE1MRG9jdW1lbnRQYXJzZXIKKyAgICAvLyB3aGVyZSB0aGUgc2Ny
aXB0IGlzIHRyYW5zZmVyZWQgZnJvbSB0aGUgdHJlZWJ1aWxkZXIgdG8gdGhlIHNjcmlwdCBydW5u
ZXIuCisgICAgLy8gVGhlIHNjcmlwdCBydW5uZXIgd2lsbCBob2xkIHRoZSBzY3JpcHQgdW50aWwg
aXRzIGxvYWRlZCBhbmQgcnVuLiBEdXJpbmcKKyAgICAvLyBhbnkgb2YgdGhpcyB0aW1lLCB3ZSB3
YW50IHRvIGNvdW50IG91cnNlbHZlcyBhcyAid2FpdGluZyBmb3IgYSBzY3JpcHQiIGFuZCB0aHVz
CisgICAgLy8gcnVuIHRoZSBwcmVsb2FkIHNjYW5uZXIsIGFzIHdlbGwgYXMgZGVsYXkgY29tcGxl
dGlvbiBvZiBwYXJzaW5nLgorICAgIHJldHVybiBtX3RyZWVCdWlsZGVyLT5oYXNQYXJzZXJCbG9j
a2luZ1NjcmlwdCgpIHx8IChtX3NjcmlwdFJ1bm5lciAmJiBtX3NjcmlwdFJ1bm5lci0+aGFzUGFy
c2VyQmxvY2tpbmdTY3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpyZXN1
bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogewogICAgIEFTU0VSVCghaXNFeGVjdXRp
bmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKKyAg
ICBBU1NFUlQoIWlzV2FpdGluZ0ZvclNjcmlwdHMoKSk7CiAKICAgICBtX2luc2VydGlvblByZWxv
YWRTY2FubmVyLmNsZWFyKCk7CiAgICAgcHVtcFRva2VuaXplcklmUG9zc2libGUoQWxsb3dZaWVs
ZCk7CkBAIC01MDksMTMgKzUxMiw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlG
aW5pc2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSk7Ci0gICAgLy8g
Tm90ZTogV2Ugb25seSBldmVyIHdhaXQgb24gb25lIHNjcmlwdCBhdCBhIHRpbWUsIHNvIHdlIGFs
d2F5cyBrbm93IHRoaXMKLSAgICAvLyBpcyB0aGUgb25lIHdlIHdlcmUgd2FpdGluZyBvbiBhbmQg
Y2FuIHVuLXBhdXNlIHRoZSB0cmVlIGJ1aWxkZXIuCi0gICAgbV90cmVlQnVpbGRlci0+c2V0UGF1
c2VkKGZhbHNlKTsKLSAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IG1fc2NyaXB0UnVu
bmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKGNhY2hlZFJlc291cmNlKTsKLSAgICBt
X3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7Ci0gICAgaWYg
KHNob3VsZENvbnRpbnVlUGFyc2luZykKKyAgICBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yTG9hZChjYWNoZWRSZXNvdXJjZSk7CisgICAgaWYgKCFpc1dhaXRpbmdGb3JT
Y3JpcHRzKCkpCiAgICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwog
fQogCkBAIC01MzMsMTUgKzUzMSw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRl
U2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpCiAgICAgLy8gcHVtcFRva2VuaXplciBjYW4g
Y2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAg
Ly8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgogICAgIFJlZlB0
cjxIVE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBBU1NFUlQoIW1fc2Ny
aXB0UnVubmVyLT5pc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICBBU1NFUlQobV90cmVlQnVpbGRl
ci0+aXNQYXVzZWQoKSk7Ci0gICAgLy8gTm90ZTogV2Ugb25seSBldmVyIHdhaXQgb24gb25lIHNj
cmlwdCBhdCBhIHRpbWUsIHNvIHdlIGFsd2F5cyBrbm93IHRoaXMKLSAgICAvLyBpcyB0aGUgb25l
IHdlIHdlcmUgd2FpdGluZyBvbiBhbmQgY2FuIHVuLXBhdXNlIHRoZSB0cmVlIGJ1aWxkZXIuCi0g
ICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKGZhbHNlKTsKLSAgICBib29sIHNob3VsZENvbnRp
bnVlUGFyc2luZyA9IG1fc2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHls
ZXNoZWV0cygpOwotICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZCghc2hvdWxkQ29udGludWVQ
YXJzaW5nKTsKLSAgICBpZiAoc2hvdWxkQ29udGludWVQYXJzaW5nKQorICAgIG1fc2NyaXB0UnVu
bmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOworICAgIGlmICghaXNX
YWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICByZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVj
dXRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuaAppbmRleCAyZmI5ZjJiZjM1OTQzYjc1NDNhNWNjYzkxNDFiMWU0OTRlYzMzMmZm
Li40ZTI2YzU3MjY3Y2ZjN2M0ZGJlNGZiZDY4NWQ5N2JhNTAyOTAyMTNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMTI0LDcgKzEy
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSk7
CiAgICAgdm9pZCBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01vZGUpOwogCi0g
ICAgYm9vbCBydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKKyAgICB2b2lkIHJ1blNj
cmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpOwogICAgIHZvaWQgcmVzdW1lUGFyc2luZ0FmdGVy
U2NyaXB0RXhlY3V0aW9uKCk7CiAKICAgICB2b2lkIGF0dGVtcHRUb0VuZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBkMTRkNjlk
MWQ2MzdkYjNiMTlmZWZkYmQwMGJlNTEwNDViNDAwNDhkLi5kMjcwOWU4MzEyYzkxOGFkOGEzNGYw
ZDVkNTE3OTBmZThlODg1NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmNwcApAQCAtNTcsOCArNTcsOCBAQCBIVE1MU2NyaXB0UnVubmVyOjpI
VE1MU2NyaXB0UnVubmVyKERvY3VtZW50KiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1bm5lckhvc3Qq
IGhvcwogSFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewogICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgYmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5nIiBjYWxsYmFj
ayBzb29uZXIgdGhhbiBkZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzaW5nQmxvY2tpbmdTY3Jp
cHQuY2FjaGVkU2NyaXB0KCkgJiYgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQud2F0Y2hpbmdGb3JM
b2FkKCkpCi0gICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQobV9wYXJzaW5nQmxvY2tpbmdTY3Jp
cHQpOworICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIG1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgICAgIHN0b3BXYXRj
aGluZ0ZvckxvYWQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CiAKICAgICB3aGlsZSAoIW1fc2Ny
aXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKICAgICAgICAgUGVuZGluZ1Nj
cmlwdCBwZW5kaW5nU2NyaXB0ID0gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VG
aXJzdCgpOwpAQCAtMTEyLDEwICsxMTIsMTAgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVj
dXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAg
QVNTRVJUKCFtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKLSAgICBBU1NFUlQoaXNQZW5kaW5nU2NyaXB0UmVhZHko
bV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQpKTsKKyAgICBBU1NFUlQoaXNQZW5kaW5nU2NyaXB0UmVh
ZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpOwogCiAgICAgSW5zZXJ0aW9uUG9pbnRSZWNvcmQg
aW5zZXJ0aW9uUG9pbnRSZWNvcmQobV9ob3N0LT5pbnB1dFN0cmVhbSgpKTsKLSAgICBleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQobV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQpOwor
ICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChtX3BhcnNlckJsb2NraW5n
U2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1Njcmlw
dEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKQEAgLTE1OSw1
NCArMTU5LDQ3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChQ
ZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBt
YXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAv
LyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAg
dGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBh
c3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3Jp
cHRTdGFydFBvc2l0aW9uKQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQ
dHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFy
dFBvc2l0aW9uKQogewogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAvLyBGSVhNRTog
SWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCByZXR1cm4gdHJ1ZTsKKyAgICAv
LyBGSVhNRTogSWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCByZXR1cm4uCiAK
ICAgICBib29sIGhhZFByZWxvYWRTY2FubmVyID0gbV9ob3N0LT5oYXNQcmVsb2FkU2Nhbm5lcigp
OwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBnaXZlbiB0byB1cy4KICAgICBy
dW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKLSAg
ICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CisgICAgaWYgKGhhc1BhcnNlckJs
b2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBCbG9jayB0aGUgcGFyc2VyLiAgVW53aW5kIHRvIHRo
ZSBvdXRlcm1vc3QgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZSBiZWZvcmUgY29udGludWluZyBw
YXJzaW5nLgorICAgICAgICAgICAgcmV0dXJuOyAvLyBVbndpbmQgdG8gdGhlIG91dGVybW9zdCBI
VE1MU2NyaXB0UnVubmVyOjpleGVjdXRlIGJlZm9yZSBjb250aW51aW5nIHBhcnNpbmcuCiAgICAg
ICAgIC8vIElmIHByZWxvYWQgc2Nhbm5lciBnb3QgY3JlYXRlZCwgaXQgaXMgbWlzc2luZyB0aGUg
c291cmNlIGFmdGVyIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludC4gQXBwZW5kIGl0IGFuZCBz
Y2FuLgogICAgICAgICBpZiAoIWhhZFByZWxvYWRTY2FubmVyICYmIG1faG9zdC0+aGFzUHJlbG9h
ZFNjYW5uZXIoKSkKICAgICAgICAgICAgIG1faG9zdC0+YXBwZW5kQ3VycmVudElucHV0U3RyZWFt
VG9QcmVsb2FkU2Nhbm5lckFuZFNjYW4oKTsKLSAgICAgICAgaWYgKCFleGVjdXRlUGFyc2luZ0Js
b2NraW5nU2NyaXB0cygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBXZSBzdGlsbCBo
YXZlIGEgcGFyc2luZyBibG9ja2luZyBzY3JpcHQsIGJsb2NrIHRoZSBwYXJzZXIuCisgICAgICAg
IGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7CiAgICAgfQotICAgIHJldHVybiB0cnVl
OyAvLyBTY3JpcHRzIGV4ZWN1dGVkIGFzIGV4cGVjdGVkLCBjb250aW51ZSBwYXJzaW5nLgogfQog
Ci1ib29sIEhUTUxTY3JpcHRSdW5uZXI6OmhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSBjb25z
dAorYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICEhbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuZWxlbWVudCgpOworICAg
IHJldHVybiAhIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuZWxlbWVudCgpOwogfQogCi1ib29sIEhU
TUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCkKK3ZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKQogewotICAgIHdo
aWxlIChoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpIHsKLSAgICAgICAgLy8gV2Ugb25seSBy
ZWFsbHkgbmVlZCB0byBjaGVjayBvbmNlLgotICAgICAgICBpZiAoIWlzUGVuZGluZ1NjcmlwdFJl
YWR5KG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB3aGlsZSAoaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSAmJiBpc1BlbmRpbmdTY3JpcHRS
ZWFkeShtX3BhcnNlckJsb2NraW5nU2NyaXB0KSkKICAgICAgICAgZXhlY3V0ZVBhcnNpbmdCbG9j
a2luZ1NjcmlwdCgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MU2Ny
aXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKiBj
YWNoZWRTY3JpcHQpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBBU1NFUlQoIW1f
c2NyaXB0TmVzdGluZ0xldmVsKTsKLSAgICBBU1NFUlQoaGF2ZVBhcnNpbmdCbG9ja2luZ1Njcmlw
dCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9wYXJzaW5nQmxvY2tpbmdT
Y3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wYXJz
aW5nQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpOwotICAgIHJldHVy
biBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOworICAgIEFTU0VSVChoYXNQYXJzZXJC
bG9ja2luZ1NjcmlwdCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSA9PSBjYWNoZWRTY3JpcHQpOworICAgIEFT
U0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKTsK
KyAgICBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogfQogCi1ib29sIEhUTUxTY3Jp
cHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKK3ZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKQogewog
ICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICAvLyBDYWxsZXJzIHNob3VsZCBjaGVjayBoYXNT
Y3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkgYmVmb3JlIGNhbGxpbmcKQEAgLTIxNCwzOSAr
MjA3LDM5IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHMoKQogICAgIEFTU0VSVChoYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KCkpOwogICAgIEFTU0VSVCghbV9zY3JpcHROZXN0aW5nTGV2ZWwpOwogICAgIEFTU0VSVChtX2Rv
Y3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7Ci0gICAgcmV0dXJuIGV4ZWN1dGVQYXJz
aW5nQmxvY2tpbmdTY3JpcHRzKCk7CisgICAgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMo
KTsKIH0KIAotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQ
YXJzaW5nKCkKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
UGFyc2luZygpCiB7CiAgICAgd2hpbGUgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcu
aXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVCghbV9zY3JpcHROZXN0aW5nTGV2ZWwpOwotICAg
ICAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSk7CisgICAgICAgIEFTU0VS
VCghaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSk7CiAgICAgICAgIEFTU0VSVChtX3NjcmlwdHNU
b0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIGlm
ICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkuY2FjaGVkU2NyaXB0KCkt
PmlzTG9hZGVkKCkpIHsKICAgICAgICAgICAgIHdhdGNoRm9yTG9hZChtX3NjcmlwdHNUb0V4ZWN1
dGVBZnRlclBhcnNpbmcuZmlyc3QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUGVuZGluZ1NjcmlwdCBmaXJzdCA9
IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKICAgICAgICAgZXhl
Y3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KGZpcnN0KTsKKyAgICAgICAgLy8gRklY
TUU6IFdoYXQgaXMgdGhpcyBtX2RvY3VtZW50IGNoZWNrIGZvcj8KICAgICAgICAgaWYgKCFtX2Rv
Y3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1
ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFy
ZXF1ZXN0UGVuZGluZ1NjcmlwdChtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdCwgZWxlbWVudCkpCisg
ICAgaWYgKCFyZXF1ZXN0UGVuZGluZ1NjcmlwdChtX3BhcnNlckJsb2NraW5nU2NyaXB0LCBlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcGFyc2luZ0Jsb2NraW5nU2Ny
aXB0LmNhY2hlZFNjcmlwdCgpKTsKKyAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5j
YWNoZWRTY3JpcHQoKSk7CiAKICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBsb2FkIGNhbGxi
YWNrIGlmIGNhY2hlZFNjcmlwdCBpcyBub3QgYWxyZWFkeQotICAgIC8vIGluIHRoZSBjYWNoZS4g
IENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQK
KyAgICAvLyBpbiB0aGUgY2FjaGUuIENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgbV9w
YXJzZXJCbG9ja2luZ1NjcmlwdAogICAgIC8vIGlmIHBvc3NpYmxlIGJlZm9yZSByZXR1cm5pbmcg
Y29udHJvbCB0byB0aGUgcGFyc2VyLgotICAgIGlmICghbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQu
Y2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9hZChtX3BhcnNp
bmdCbG9ja2luZ1NjcmlwdCk7CisgICAgaWYgKCFtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hl
ZFNjcmlwdCgpLT5pc0xvYWRlZCgpKQorICAgICAgICB3YXRjaEZvckxvYWQobV9wYXJzZXJCbG9j
a2luZ1NjcmlwdCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVk
U2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0yNzgsNyArMjcxLDcgQEAgYm9vbCBIVE1MU2Ny
aXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2Ny
aXB0LCBFbGVtZW4KIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNj
cmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFT
U0VSVChtX2RvY3VtZW50KTsKLSAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQo
KSk7CisgICAgQVNTRVJUKCFoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKICAgICB7CiAgICAg
ICAgIEluc2VydGlvblBvaW50UmVjb3JkIGluc2VydGlvblBvaW50UmVjb3JkKG1faG9zdC0+aW5w
dXRTdHJlYW0oKSk7CiAgICAgICAgIE5lc3RpbmdMZXZlbEluY3JlbWVudGVyIG5lc3RpbmdMZXZl
bEluY3JlbWVudGVyKG1fc2NyaXB0TmVzdGluZ0xldmVsKTsKQEAgLTMwMiw4ICsyOTUsOCBAQCB2
b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGNvbnN0IFRl
eHRQb3NpdGlvbiYgc2NyaXB0U3RhcgogICAgICAgICAgICAgcmVxdWVzdERlZmVycmVkU2NyaXB0
KHNjcmlwdCk7CiAgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNl
ckV4ZWN1dGVkKCkpIHsKICAgICAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0RWxlbWVudChz
Y3JpcHQpOwotICAgICAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0LnNldFN0YXJ0
aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7CisgICAgICAgICAgICAgICAgbV9w
YXJzZXJCbG9ja2luZ1NjcmlwdC5zZXRTdGFydGluZ1Bvc2l0aW9uKHNjcmlwdFN0YXJ0UG9zaXRp
b24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTY3JpcHRTb3VyY2VD
b2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlw
dEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgICAgICAg
ICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCA3N2FhZDhjOWMw
MzdmNWYyOTYxZDVhYzRjOGMxZWI1OGYyMThlNTVmLi5mZGIzNWFhMTdkOGRmZDdhY2MzZDBhYTI1
NWZlMWI0ZDI5NDhlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5oCkBAIC01MywxMyArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNo
KCk7CiAKICAgICAvLyBQcm9jZXNzZXMgdGhlIHBhc3NlZCBpbiBzY3JpcHQgYW5kIGFueSBwZW5k
aW5nIHNjcmlwdHMgaWYgcG9zc2libGUuCi0gICAgYm9vbCBleGVjdXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9z
aXRpb24pOworICAgIHZvaWQgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJv
Y2VzcywgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAotICAgIGJv
b2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOworICAgIHZv
aWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJv
b2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
U2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQotICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKLSAgICBib29sIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0Zv
clBhcnNpbmcoKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KCk7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCk7CiAKKyAgICBi
b29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0V4ZWN1dGlu
Z1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY3JpcHROZXN0aW5nTGV2ZWw7IH0KIAogcHJp
dmF0ZToKQEAgLTY5LDggKzcwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZXhlY3V0ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCgpOwogICAgIHZvaWQgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNw
YXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmKTsKLSAgICBib29sIGhhdmVQYXJzaW5nQmxvY2tpbmdT
Y3JpcHQoKSBjb25zdDsKLSAgICBib29sIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7
CisgICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogCiAgICAgdm9pZCBy
ZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqKTsKICAgICB2b2lkIHJlcXVlc3RE
ZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIVE1MU2NyaXB0UnVubmVySG9zdCogbV9ob3N0
OwotICAgIFBlbmRpbmdTY3JpcHQgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQ7CisgICAgUGVuZGlu
Z1NjcmlwdCBtX3BhcnNlckJsb2NraW5nU2NyaXB0OwogICAgIERlcXVlPFBlbmRpbmdTY3JpcHQ+
IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1l
eGVjdXRlLXdoZW4tdGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCiAgICAgdW5zaWdu
ZWQgbV9zY3JpcHROZXN0aW5nTGV2ZWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDdmMGFhMmI5YmM3MzFjOTdlYTE4YWFmMDA0NGE3
YmJhOTIxZDIwOTYuLmNiZGM0MzUyZmYxYzdiMWUwNTI4ZWU2NGI2MWNkYmMwZWE3NzMzMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAt
MzUxLDcgKzM1MSw2IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1
bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX2RvY3VtZW50
KGRvY3VtZW50KQogICAgICwgbV90cmVlKGRvY3VtZW50LCBtYXhpbXVtRE9NVHJlZURlcHRoKQog
ICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQotICAgICwgbV9pc1BhdXNlZChmYWxz
ZSkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJ
bnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xp
bmUoZmFsc2UpCkBAIC0zNjksNyArMzY4LDYgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1
aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKICAg
ICAsIG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3RyZWUoZnJhZ21l
bnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBtX3Jl
cG9ydEVycm9ycyhmYWxzZSkgLy8gRklYTUU6IFdoeSBub3QgcmVwb3J0IGVycm9ycyBpbiBmcmFn
bWVudHM/Ci0gICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAg
ICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTQyNSwxMSArNDIzLDEx
IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdtZW50UGFy
c2luZ0NvbnRleHQoKQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFr
ZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pCiB7Cisg
ICAgQVNTRVJUKG1fc2NyaXB0VG9Qcm9jZXNzKTsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywg
Y2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAg
ICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhl
Y3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBhdXNlIHRoZSBwYXJz
ZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUKICAgICAvLyBiZWZv
cmUgcnVubmluZyBzY3JpcHRzLgotICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKICAgICBzY3JpcHRT
dGFydFBvc2l0aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOwogICAgIG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgp
OwogICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNlKCk7CkBAIC0yMTI3LDcgKzIx
MjUsNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgIGNhc2UgVGV4dE1vZGU6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICAvLyBQYXVzZSBvdXJzZWx2ZXMgc28gdGhhdCBw
YXJzaW5nIHN0b3BzIHVudGlsIHRoZSBzY3JpcHQgY2FuIGJlIHByb2Nlc3NlZCBieSB0aGUgY2Fs
bGVyLgotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICBBU1NFUlQo
bV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAg
ICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwogICAgICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKQEAgLTI3NTAsNyArMjc0Nyw2IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSh0b2tl
bik7CiAKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6c2NyaXB0VGFnICYm
IG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7
Ci0gICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Q
cm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCAwYmQ0NmU4ZGZiYjAwYmYxNDhl
ODhlY2M2M2UxNmU2MGU0ZTdmYzI4Li5lN2M2ODkwODRjZTg3OGJkY2Q4ZDFlZWI3MjEwZTc1ZWVi
Y2M5YjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
aApAQCAtNzAsMTQgKzcwLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0YWNoKCk7CiAKLSAg
ICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX2lzUGF1c2VkID0gcGF1c2VkOyB9Ci0g
ICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYXVzZWQ7IH0KLQogICAgIC8v
IFRoZSB0b2tlbiByZWFsbHkgc2hvdWxkIGJlIHBhc3NlZCBhcyBhIGNvbnN0JiBzaW5jZSBpdCdz
IG5ldmVyIG1vZGlmaWVkLgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21Ub2tlbihIVE1MVG9r
ZW4mKTsKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRv
a2VuJik7CiAKLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVm
b3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KKyAgICBib29sIGhhc1BhcnNlckJsb2NraW5n
U2NyaXB0KCkgY29uc3QgeyByZXR1cm4gISFtX3NjcmlwdFRvUHJvY2VzczsgfQorICAgIC8vIE11
c3QgYmUgY2FsbGVkIHRvIHRha2UgdGhlIHBhcnNlci1ibG9ja2luZyBzY3JpcHQgYmVmb3JlIGNh
bGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3Jp
cHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIC8v
IERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KQEAgLTIxNiw3ICsyMTQsNiBAQCBwcml2
YXRlOgogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlIG1fdHJlZTsKIAogICAgIGJvb2wgbV9yZXBv
cnRFcnJvcnM7Ci0gICAgYm9vbCBtX2lzUGF1c2VkOwogCiAgICAgLy8gaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1s
I2luc2VydGlvbi1tb2RlCiAgICAgSW5zZXJ0aW9uTW9kZSBtX2luc2VydGlvbk1vZGU7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNTIyNjA4OWFhNjE5MTRjMDNjYmNiNmRhNTI1OTdhYjg5NjdlZDFlMS4uNDRmNTJlNTI3MWY3
NWM3MTJiNzdmY2FlMjQyZjgzN2M4ZTRlMmVhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEy
LTA3LTA4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBkb2N1bWVu
dC53cml0ZSBvZiBzY3JpcHRzIHRoYXQgYWxzbyBkb2N1bWVudC53cml0ZSBzb21ldGltZXMgd3Jp
dGVzIGFzeW5jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTEwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9wYXJzZXIvY2FjaGVkLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3Jp
dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9wYXJzZXIvcmVzb3VyY2VzL2NhY2hlZC1z
Y3JpcHQtZG9jdW1lbnQtd3JpdGUuanM6IEFkZGVkLgorCiAyMDEyLTA3LTA5ICBLcmlzdMOzZiBL
b3N6dHnDsyAgPGtrcmlzdG9mQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLiBTa2lwIHRoZSBmYWlsaW5nIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3Jp
dGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYWQwMjcyNzEzYjcxZmRjODc5
NDAxNmM4ZWYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9j
YWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQ
QVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0
LWRvY3VtZW50LXdyaXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhlYTU4MzRhY2Y5ZjNhNTc4OWE1NmQ3
N2VlNTMyNTU0ZTdhMTk1MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcGFy
c2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuaHRtbApAQCAtMCwwICsxLDEwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jYWNoZWQtc2Ny
aXB0LWRvY3VtZW50LXdyaXRlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit3aW5kb3cuaXNUZXN0U2Ny
aXB0Q2FjaGVkID0gdHJ1ZTsKK2RvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0ncmVzb3VyY2Vz
L2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuanMnPjwvIiArICJzY3JpcHQ+Iik7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3Jlc291
cmNlcy9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9w
YXJzZXIvcmVzb3VyY2VzL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzMzNDM5M2Q4OWZhNDRkZDQzZmU1NWFiMjA5NGUyYjcxMDlkZjZlOQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3Jlc291cmNlcy9jYWNoZWQtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLmpzCkBAIC0wLDAgKzEsNCBAQAoraWYgKHdpbmRvdy5wYXJlbnQuaXNUZXN0
U2NyaXB0Q2FjaGVkKSB7CisgICAgZG9jdW1lbnQud3JpdGUoJzxkaXY+PC9kaXY+Jyk7CisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCdkaXYnKSA/ICdQQVNTJyA6ICdGQUlMJykpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151323</attachid>
            <date>2012-07-09 14:48:35 -0700</date>
            <delta_ts>2012-07-09 16:48:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-89102-20120709144834.patch</filename>
            <type>text/plain</type>
            <size>26785</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyYTk0YmNiNmJmNjI0
YTM4NDM0MTQ3ZWNlODIxNTFjZTk0Y2EyYy4uYWVlNDMyN2IxZWVhNjYxZTcyOTk2NDlmMzlhYTMz
OTFlNTNkY2NiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA3LTA4ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBvZiBz
Y3JpcHRzIHRoYXQgYWxzbyBkb2N1bWVudC53cml0ZSBzb21ldGltZXMgd3JpdGVzIGFzeW5jCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgV2hlbiBhIHNjcmlwdCB0
YWcgaXMgZmlyc3QgZW5jb3VudGVyZWQsIHRoZSBUcmVlQnVpbGRlciBob2xkcyB0aGUgZWxlbWVu
dCBhbmQgcmV0dXJucworICAgICAgICBvdXQgdG8gdGhlIG91dGVyIEhUTUxEb2N1bWVudFBhcnNl
ciBwYXJzZSBsb29wLiAgVGhlIEhUTUxEb2N1bWVudFBhcnNlciB0aGVuIHRha2VzCisgICAgICAg
IHRoZSBzY3JpcHQgZWxlbWVudCBhbmQgcGFzc2VzIGl0IHRvIHRoZSBIVE1MU2NyaXB0UnVubmVy
IGZvciBleGVjdXRpb24uIEhvd2V2ZXIsIGlmIHRoZQorICAgICAgICBzY3JpcHQgaXMgYW4gImV4
dGVybmFsIHNjcmlwdCIgdGhlIEhUTUxTY3JpcHRSdW5uZXIgbWF5IGhhdmUgdG8gd2FpdCBmb3Ig
dGhhdCBwYXJzZXIKKyAgICAgICAgYmxvY2tpbmcgc2NyaXB0IHRvIGxvYWQsIGFuZCBtYXkgc3Rv
cmUgdGhlIHNjcmlwdCBpbiBpdHMgb3duIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQgbWVtYmVyLgor
CisgICAgICAgIFdoaWxlIHRoZSBIVE1MU2NyaXB0UnVubmVyIGhhcyB0aGlzIG5vdC15ZXQtbG9h
ZGVkLXNjcmlwdCB0aGUgcGFyc2VyIGlzIGFsc28gYmxvY2tlZC4KKyAgICAgICAgQmVjYXVzZSB0
aGUgInBhdXNlZCIgc3RhdGUgb2YgdGhlIHBhcnNlciB3YXMgaGVsZCBhcyBhIHNlcGFyYXRlIGJv
b2wgb24gdGhlIFRyZWVCdWlsZGVyCisgICAgICAgIHdlJ2QgaGF2ZSB0byBiZSBjYXJlZnVsIHRv
IHVwZGF0ZSBpdCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgcGVuZGluZyBz
Y3JpcHQKKyAgICAgICAgb24gdGhlIEhUTUxTY3JpcHRSdW5uZXIuCisKKyAgICAgICAgVGhpcyBw
YXRjaCByZW1vdmVzIHRoaXMgc2VwYXJhdGUgInBhdXNlZCIgYm9vbCBhbmQgbWFrZXMgdGhlIEhU
TUxEb2N1bWVudFBhcnNlciByZXNwb25zaWJsZQorICAgICAgICBmb3IgdGhlICJwYXVzZWQiIHN0
YXRlIG9mIHRoZSBwYXJzZXIgdGhyb3VnaCB0aGUgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGZ1bmN0
aW9uIHdoaWNoCisgICAgICAgIGtub3dzIGhvdyB0byBjaGVjayBib3RoIHRoZSBUcmVlQnVpbGRl
ciBhbmQgdGhlIFNjcmlwdFJ1bm5lciBmb3IgcG9zc2libGUgcGFyc2VyLWJsb2NraW5nIHNjcmlw
dHMuCisKKyAgICAgICAgSSBzdXNwZWN0IHRoaXMgY2hhbmdlIG1heSBhY3R1YWxseSBmaXggYSBi
dW5jaCBvZiBlZGdlIGNhc2VzIHdoZXJlIHdlIHdlcmUgbm90CisgICAgICAgIGNoZWNraW5nIGZv
ciB0aGUgSFRNTFNjcmlwdFJ1bm5lcidzIHBhcnNlciBibG9ja2luZyBzY3JpcHQgYW5kIHRodXMg
aW5jb3JyZWN0bHkgZW5kaW5nCisgICAgICAgIHRoZSBwYXJzZXIsIG9yIG5vdCBzdGFydGluZyB0
aGUgcHJlLWxvYWQgc2Nhbm5lciwgZXRjLgorCisgICAgICAgIEFzIHBhcnQgb2YgdGhpcyBjaGFu
Z2UgSSBhbHNvIHJlbmFtZWQgbV9oYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0IGluIEhUTUxTY3Jp
cHRSdW5uZXIgdG8gbWF0Y2gKKyAgICAgICAgdGhlIG5hbWluZyBzdHlsZSB1c2VkIGVsc2V3aGVy
ZSBpbiB0aGUgcGFyc2VyLCBhcyB3ZWxsIGFzIHJlbW92ZWQgYWxsIHRoZSAiYm9vbCIgcmV0dXJu
IHZhbHVlcworICAgICAgICBmb3IgdGhlc2UgcGFyc2UvZXhlY3V0ZSBmdW5jdGlvbnMgYXMgdGhl
eSBhcmUgbm8gbG9uZ2VyIHVzZWZ1bCAob3IgY29ycmVjdCkuIFRoZSBjb3JyZWN0IHdheQorICAg
ICAgICBpcyBhbHdheXMgdG8gY2hlY2sgSFRNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JT
Y3JpcHRzKCkuCisKKyAgICAgICAgVGVzdDogZmFzdC9wYXJzZXIvY2FjaGVkLXNjcmlwdC1kb2N1
bWVudC13cml0ZS5odG1sCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5p
emVySWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1
blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6OmNhblRha2VOZXh0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0cyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjp+SFRNTFNjcmlwdFJ1bm5l
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Js
b2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6aGFzUGFyc2VyQmxvY2tp
bmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBh
cnNpbmdCbG9ja2luZ1NjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5l
cjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgIChIVE1MU2NyaXB0
UnVubmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQpOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoSFRNTFRy
ZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aGFzUGFyc2Vy
QmxvY2tpbmdTY3JpcHQpOgorCiAyMDEyLTA3LTA4ICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1BsYXRmb3JtLU1hY10gRGVyaXZlIExvY2FsZU1hYy57
Y3BwLGh9IGFuZCBMb2NhbGl6ZWREYXRlTWFjLmNwcCBmcm9tIExvY2FsZVdpbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggYjlm
MTcwMTgwZDBjYTk4Zjc0ODQ3NGJhZjdjZjkwMThmMzIwYTdiYi4uNTkwMWEzZWQ3MTJkNzYxMDdm
YWYxYjdhMGE4MWM5NTFjOGQ0ZTljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKCkgY29uc3QKIAogdm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKFN5bmNocm9ub3VzTW9kZSBtb2RlKQog
ewotICAgIGlmIChpc1N0b3BwZWQoKSB8fCBtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKQorICAg
IGlmIChpc1N0b3BwZWQoKSB8fCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE9uY2UgYSByZXN1bWUgaXMgc2NoZWR1bGVkLCBIVE1MUGFyc2VyU2NoZWR1
bGVyIGNvbnRyb2xzIHdoZW4gd2UgbmV4dCBwdW1wLgpAQCAtMTk1LDE2ICsxOTUsMTMgQEAgdm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlcllpZWxkKCkKICAgICBlbmRJ
ZkRlbGF5ZWQoKTsKIH0KIAotYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQ
YXVzZWRUcmVlQnVpbGRlcigpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0Zv
clBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKLSAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVz
ZWQoKSk7Ci0KICAgICBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3Np
dGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVs
ZW1lbnQgPSBtX3RyZWVCdWlsZGVyLT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9z
aXRpb24pOwogICAgIC8vIFdlIHdpbGwgbm90IGhhdmUgYSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJz
aW5nIGEgRG9jdW1lbnRGcmFnbWVudC4KLSAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0
RWxlbWVudC5yZWxlYXNlKCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgIGlmIChtX3Njcmlw
dFJ1bm5lcikKKyAgICAgICAgbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5y
ZWxlYXNlKCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBh
cnNlcjo6Y2FuVGFrZU5leHRUb2tlbihTeW5jaHJvbm91c01vZGUgbW9kZSwgUHVtcFNlc3Npb24m
IHNlc3Npb24pCkBAIC0yMTIsOCArMjA5LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNh
blRha2VOZXh0VG9rZW4oU3luY2hyb25vdXNNb2RlIG1vZGUsIFB1bXBTZXNzaW9uJiBzZXMKICAg
ICBpZiAoaXNTdG9wcGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFRoZSBw
YXJzZXIgd2lsbCBwYXVzZSBpdHNlbGYgd2hlbiB3YWl0aW5nIG9uIGEgc2NyaXB0IHRvIGxvYWQg
b3IgcnVuLgotICAgIGlmIChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKSB7CisgICAgaWYgKGlz
V2FpdGluZ0ZvclNjcmlwdHMoKSkgewogICAgICAgICBpZiAobW9kZSA9PSBBbGxvd1lpZWxkKQog
ICAgICAgICAgICAgbV9wYXJzZXJTY2hlZHVsZXItPmNoZWNrRm9yWWllbGRCZWZvcmVTY3JpcHQo
c2Vzc2lvbik7CiAKQEAgLTIyMiw5ICsyMTgsOCBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6
Y2FuVGFrZU5leHRUb2tlbihTeW5jaHJvbm91c01vZGUgbW9kZSwgUHVtcFNlc3Npb24mIHNlcwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIHBhdXNlZCB3
YWl0aW5nIGZvciBhIHNjcmlwdCwgd2UgdHJ5IHRvIGV4ZWN1dGUgc2NyaXB0cyBiZWZvcmUgY29u
dGludWluZy4KLSAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBydW5TY3JpcHRz
Rm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKLSAgICAgICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2Vk
KCFzaG91bGRDb250aW51ZVBhcnNpbmcpOwotICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFy
c2luZyB8fCBpc1N0b3BwZWQoKSkKKyAgICAgICAgcnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWls
ZGVyKCk7CisgICAgICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkgfHwgaXNTdG9wcGVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zODUsOCArMzgwLDExIEBA
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphdHRlbXB0VG9SdW5EZWZlcnJlZFNjcmlwdHNBbmRF
bmQoKQogewogICAgIEFTU0VSVChpc1N0b3BwaW5nKCkpOwogICAgIEFTU0VSVCghaGFzSW5zZXJ0
aW9uUG9pbnQoKSk7Ci0gICAgaWYgKG1fc2NyaXB0UnVubmVyICYmICFtX3NjcmlwdFJ1bm5lci0+
ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fc2NyaXB0UnVubmVyKSB7CisgICAgICAgIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlU2Ny
aXB0c1dhaXRpbmdGb3JQYXJzaW5nKCk7CisgICAgICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRz
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogICAgIGVuZCgpOwogfQogCkBAIC00NjIs
MTMgKzQ2MCwyNCBAQCBUZXh0UG9zaXRpb24gSFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRp
b24oKSBjb25zdAogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0
cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCk7CisgICAg
Ly8gV2hlbiB0aGUgVHJlZUJ1aWxkZXIgZW5jb3VudGVycyBhIDwvc2NyaXB0PiB0YWcsIGl0IHJl
dHVybnMgdG8gdGhlIEhUTUxEb2N1bWVudFBhcnNlcgorICAgIC8vIHdoZXJlIHRoZSBzY3JpcHQg
aXMgdHJhbnNmZXJlZCBmcm9tIHRoZSB0cmVlYnVpbGRlciB0byB0aGUgc2NyaXB0IHJ1bm5lci4K
KyAgICAvLyBUaGUgc2NyaXB0IHJ1bm5lciB3aWxsIGhvbGQgdGhlIHNjcmlwdCB1bnRpbCBpdHMg
bG9hZGVkIGFuZCBydW4uIER1cmluZworICAgIC8vIGFueSBvZiB0aGlzIHRpbWUsIHdlIHdhbnQg
dG8gY291bnQgb3Vyc2VsdmVzIGFzICJ3YWl0aW5nIGZvciBhIHNjcmlwdCIgYW5kIHRodXMKKyAg
ICAvLyBydW4gdGhlIHByZWxvYWQgc2Nhbm5lciwgYXMgd2VsbCBhcyBkZWxheSBjb21wbGV0aW9u
IG9mIHBhcnNpbmcuCisgICAgYm9vbCB0cmVlQnVpbGRlckhhc0Jsb2NraW5nU2NyaXB0ID0gbV90
cmVlQnVpbGRlci0+aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKTsKKyAgICBib29sIHNjcmlwdFJ1
bm5lckhhc0Jsb2NraW5nU2NyaXB0ID0gbV9zY3JpcHRSdW5uZXIgJiYgbV9zY3JpcHRSdW5uZXIt
Pmhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCk7CisgICAgLy8gU2luY2UgdGhlIHBhcnNlciBpcyBw
YXVzZWQgd2hpbGUgYSBzY3JpcHQgcnVubmVyIGhhcyBhIGJsb2NraW5nIHNjcmlwdCwgaXQgc2hv
dWxkCisgICAgLy8gbmV2ZXIgYmUgcG9zc2libGUgdG8gZW5kIHVwIHdpdGggYm90aCBvYmplY3Rz
IGhvbGRpbmcgYSBibG9ja2luZyBzY3JpcHQuCisgICAgQVNTRVJUKCEodHJlZUJ1aWxkZXJIYXNC
bG9ja2luZ1NjcmlwdCAmJiBzY3JpcHRSdW5uZXJIYXNCbG9ja2luZ1NjcmlwdCkpOworICAgIC8v
IElmIGVpdGhlciBvYmplY3QgaGFzIGEgYmxvY2tpbmcgc2NyaXB0LCB0aGUgcGFyc2VyIHNob3Vs
ZCBiZSBwYXVzZWQuCisgICAgcmV0dXJuIHRyZWVCdWlsZGVySGFzQmxvY2tpbmdTY3JpcHQgfHwg
c2NyaXB0UnVubmVySGFzQmxvY2tpbmdTY3JpcHQ7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFy
c2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogewogICAgIEFTU0VSVCgh
aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVCdWlsZGVyLT5pc1BhdXNl
ZCgpKTsKKyAgICBBU1NFUlQoIWlzV2FpdGluZ0ZvclNjcmlwdHMoKSk7CiAKICAgICBtX2luc2Vy
dGlvblByZWxvYWRTY2FubmVyLmNsZWFyKCk7CiAgICAgcHVtcFRva2VuaXplcklmUG9zc2libGUo
QWxsb3dZaWVsZCk7CkBAIC01MDksMTMgKzUxOCw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2Vy
Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQobV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSk7
Ci0gICAgLy8gTm90ZTogV2Ugb25seSBldmVyIHdhaXQgb24gb25lIHNjcmlwdCBhdCBhIHRpbWUs
IHNvIHdlIGFsd2F5cyBrbm93IHRoaXMKLSAgICAvLyBpcyB0aGUgb25lIHdlIHdlcmUgd2FpdGlu
ZyBvbiBhbmQgY2FuIHVuLXBhdXNlIHRoZSB0cmVlIGJ1aWxkZXIuCi0gICAgbV90cmVlQnVpbGRl
ci0+c2V0UGF1c2VkKGZhbHNlKTsKLSAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IG1f
c2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKGNhY2hlZFJlc291cmNl
KTsKLSAgICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7
Ci0gICAgaWYgKHNob3VsZENvbnRpbnVlUGFyc2luZykKKyAgICBtX3NjcmlwdFJ1bm5lci0+ZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChjYWNoZWRSZXNvdXJjZSk7CisgICAgaWYgKCFpc1dh
aXRpbmdGb3JTY3JpcHRzKCkpCiAgICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1
dGlvbigpOwogfQogCkBAIC01MzMsMTUgKzUzNyw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2Vy
OjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpCiAgICAgLy8gcHVtcFRva2Vu
aXplciBjYW4gY2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1l
bnQsCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0Lgog
ICAgIFJlZlB0cjxIVE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBBU1NF
UlQoIW1fc2NyaXB0UnVubmVyLT5pc0V4ZWN1dGluZ1NjcmlwdCgpKTsKLSAgICBBU1NFUlQobV90
cmVlQnVpbGRlci0+aXNQYXVzZWQoKSk7Ci0gICAgLy8gTm90ZTogV2Ugb25seSBldmVyIHdhaXQg
b24gb25lIHNjcmlwdCBhdCBhIHRpbWUsIHNvIHdlIGFsd2F5cyBrbm93IHRoaXMKLSAgICAvLyBp
cyB0aGUgb25lIHdlIHdlcmUgd2FpdGluZyBvbiBhbmQgY2FuIHVuLXBhdXNlIHRoZSB0cmVlIGJ1
aWxkZXIuCi0gICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKGZhbHNlKTsKLSAgICBib29sIHNo
b3VsZENvbnRpbnVlUGFyc2luZyA9IG1fc2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRp
bmdGb3JTdHlsZXNoZWV0cygpOwotICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZCghc2hvdWxk
Q29udGludWVQYXJzaW5nKTsKLSAgICBpZiAoc2hvdWxkQ29udGludWVQYXJzaW5nKQorICAgIG1f
c2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOworICAg
IGlmICghaXNXYWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICByZXN1bWVQYXJzaW5nQWZ0ZXJT
Y3JpcHRFeGVjdXRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCAyZmI5ZjJiZjM1OTQzYjc1NDNhNWNjYzkxNDFiMWU0
OTRlYzMzMmZmLi40ZTI2YzU3MjY3Y2ZjN2M0ZGJlNGZiZDY4NWQ5N2JhNTAyOTAyMTNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAt
MTI0LDcgKzEyNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdW1wVG9rZW5pemVyKFN5bmNocm9u
b3VzTW9kZSk7CiAgICAgdm9pZCBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01v
ZGUpOwogCi0gICAgYm9vbCBydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKKyAgICB2
b2lkIHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpOwogICAgIHZvaWQgcmVzdW1lUGFy
c2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCk7CiAKICAgICB2b2lkIGF0dGVtcHRUb0VuZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRl
eCBkMTRkNjlkMWQ2MzdkYjNiMTlmZWZkYmQwMGJlNTEwNDViNDAwNDhkLi5kMjcwOWU4MzEyYzkx
OGFkOGEzNGYwZDVkNTE3OTBmZThlODg1NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtNTcsOCArNTcsOCBAQCBIVE1MU2NyaXB0
UnVubmVyOjpIVE1MU2NyaXB0UnVubmVyKERvY3VtZW50KiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1
bm5lckhvc3QqIGhvcwogSFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewog
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5n
IiBjYWxsYmFjayBzb29uZXIgdGhhbiBkZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzaW5nQmxv
Y2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQud2F0
Y2hpbmdGb3JMb2FkKCkpCi0gICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQobV9wYXJzaW5nQmxv
Y2tpbmdTY3JpcHQpOworICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlw
dCgpICYmIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgICAg
IHN0b3BXYXRjaGluZ0ZvckxvYWQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CiAKICAgICB3aGls
ZSAoIW1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKICAgICAgICAg
UGVuZGluZ1NjcmlwdCBwZW5kaW5nU2NyaXB0ID0gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJz
aW5nLnRha2VGaXJzdCgpOwpAQCAtMTEyLDEwICsxMTIsMTAgQEAgdm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkKICAgICBBU1NFUlQobV9kb2N1bWVu
dCk7CiAgICAgQVNTRVJUKCFtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAgQVNTRVJUKG1fZG9j
dW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKLSAgICBBU1NFUlQoaXNQZW5kaW5nU2Ny
aXB0UmVhZHkobV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQpKTsKKyAgICBBU1NFUlQoaXNQZW5kaW5n
U2NyaXB0UmVhZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpOwogCiAgICAgSW5zZXJ0aW9uUG9p
bnRSZWNvcmQgaW5zZXJ0aW9uUG9pbnRSZWNvcmQobV9ob3N0LT5pbnB1dFN0cmVhbSgpKTsKLSAg
ICBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQobV9wYXJzaW5nQmxvY2tpbmdT
Y3JpcHQpOworICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChtX3BhcnNl
ckJsb2NraW5nU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVu
ZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkK
QEAgLTE1OSw1NCArMTU5LDQ3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5n
Rm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3Nj
cmlwdCciCiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVy
IHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0
aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
KFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKLSAgICAv
LyBGSVhNRTogSWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCByZXR1cm4gdHJ1
ZTsKKyAgICAvLyBGSVhNRTogSWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLCBhbHdheXMganVzdCBy
ZXR1cm4uCiAKICAgICBib29sIGhhZFByZWxvYWRTY2FubmVyID0gbV9ob3N0LT5oYXNQcmVsb2Fk
U2Nhbm5lcigpOwogCiAgICAgLy8gVHJ5IHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBnaXZlbiB0byB1
cy4KICAgICBydW5TY3JpcHQoc2NyaXB0RWxlbWVudC5nZXQoKSwgc2NyaXB0U3RhcnRQb3NpdGlv
bik7CiAKLSAgICBpZiAoaGF2ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpKSB7CisgICAgaWYgKGhh
c1BhcnNlckJsb2NraW5nU2NyaXB0KCkpIHsKICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xl
dmVsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBCbG9jayB0aGUgcGFyc2VyLiAgVW53
aW5kIHRvIHRoZSBvdXRlcm1vc3QgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZSBiZWZvcmUgY29u
dGludWluZyBwYXJzaW5nLgorICAgICAgICAgICAgcmV0dXJuOyAvLyBVbndpbmQgdG8gdGhlIG91
dGVybW9zdCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlIGJlZm9yZSBjb250aW51aW5nIHBhcnNp
bmcuCiAgICAgICAgIC8vIElmIHByZWxvYWQgc2Nhbm5lciBnb3QgY3JlYXRlZCwgaXQgaXMgbWlz
c2luZyB0aGUgc291cmNlIGFmdGVyIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludC4gQXBwZW5k
IGl0IGFuZCBzY2FuLgogICAgICAgICBpZiAoIWhhZFByZWxvYWRTY2FubmVyICYmIG1faG9zdC0+
aGFzUHJlbG9hZFNjYW5uZXIoKSkKICAgICAgICAgICAgIG1faG9zdC0+YXBwZW5kQ3VycmVudElu
cHV0U3RyZWFtVG9QcmVsb2FkU2Nhbm5lckFuZFNjYW4oKTsKLSAgICAgICAgaWYgKCFleGVjdXRl
UGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBX
ZSBzdGlsbCBoYXZlIGEgcGFyc2luZyBibG9ja2luZyBzY3JpcHQsIGJsb2NrIHRoZSBwYXJzZXIu
CisgICAgICAgIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7CiAgICAgfQotICAgIHJl
dHVybiB0cnVlOyAvLyBTY3JpcHRzIGV4ZWN1dGVkIGFzIGV4cGVjdGVkLCBjb250aW51ZSBwYXJz
aW5nLgogfQogCi1ib29sIEhUTUxTY3JpcHRSdW5uZXI6OmhhdmVQYXJzaW5nQmxvY2tpbmdTY3Jp
cHQoKSBjb25zdAorYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpoYXNQYXJzZXJCbG9ja2luZ1Njcmlw
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuZWxlbWVu
dCgpOworICAgIHJldHVybiAhIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuZWxlbWVudCgpOwogfQog
Ci1ib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCkK
K3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKQog
ewotICAgIHdoaWxlIChoYXZlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkpIHsKLSAgICAgICAgLy8g
V2Ugb25seSByZWFsbHkgbmVlZCB0byBjaGVjayBvbmNlLgotICAgICAgICBpZiAoIWlzUGVuZGlu
Z1NjcmlwdFJlYWR5KG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB3aGlsZSAoaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSAmJiBpc1BlbmRp
bmdTY3JpcHRSZWFkeShtX3BhcnNlckJsb2NraW5nU2NyaXB0KSkKICAgICAgICAgZXhlY3V0ZVBh
cnNpbmdCbG9ja2luZ1NjcmlwdCgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJl
c291cmNlKiBjYWNoZWRTY3JpcHQpCit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBB
U1NFUlQoIW1fc2NyaXB0TmVzdGluZ0xldmVsKTsKLSAgICBBU1NFUlQoaGF2ZVBhcnNpbmdCbG9j
a2luZ1NjcmlwdCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9wYXJzaW5n
QmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0KTsKLSAgICBBU1NF
UlQobV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpOwot
ICAgIHJldHVybiBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOworICAgIEFTU0VSVCho
YXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhY2hlZFNjcmlw
dCwgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSA9PSBjYWNoZWRTY3JpcHQp
OworICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpLT5pc0xv
YWRlZCgpKTsKKyAgICBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogfQogCi1ib29s
IEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkK
K3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVl
dHMoKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICAvLyBDYWxsZXJzIHNob3VsZCBj
aGVjayBoYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkgYmVmb3JlIGNhbGxpbmcKQEAg
LTIxNCwzOSArMjA3LDM5IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yU3R5bGVzaGVldHMoKQogICAgIEFTU0VSVChoYXNTY3JpcHRzV2FpdGluZ0ZvclN0
eWxlc2hlZXRzKCkpOwogICAgIEFTU0VSVCghbV9zY3JpcHROZXN0aW5nTGV2ZWwpOwogICAgIEFT
U0VSVChtX2RvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7Ci0gICAgcmV0dXJuIGV4
ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCk7CisgICAgZXhlY3V0ZVBhcnNpbmdCbG9ja2lu
Z1NjcmlwdHMoKTsKIH0KIAotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dh
aXRpbmdGb3JQYXJzaW5nKCkKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNX
YWl0aW5nRm9yUGFyc2luZygpCiB7CiAgICAgd2hpbGUgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRl
clBhcnNpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVCghbV9zY3JpcHROZXN0aW5nTGV2
ZWwpOwotICAgICAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSk7CisgICAg
ICAgIEFTU0VSVCghaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSk7CiAgICAgICAgIEFTU0VSVCht
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKSk7CiAg
ICAgICAgIGlmICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkuY2FjaGVk
U2NyaXB0KCktPmlzTG9hZGVkKCkpIHsKICAgICAgICAgICAgIHdhdGNoRm9yTG9hZChtX3Njcmlw
dHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUGVuZGluZ1Njcmlw
dCBmaXJzdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKICAg
ICAgICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KGZpcnN0KTsKKyAgICAg
ICAgLy8gRklYTUU6IFdoYXQgaXMgdGhpcyBtX2RvY3VtZW50IGNoZWNrIGZvcj8KICAgICAgICAg
aWYgKCFtX2RvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0g
ICAgaWYgKCFyZXF1ZXN0UGVuZGluZ1NjcmlwdChtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdCwgZWxl
bWVudCkpCisgICAgaWYgKCFyZXF1ZXN0UGVuZGluZ1NjcmlwdChtX3BhcnNlckJsb2NraW5nU2Ny
aXB0LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcGFyc2luZ0Js
b2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKKyAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CiAKICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBs
b2FkIGNhbGxiYWNrIGlmIGNhY2hlZFNjcmlwdCBpcyBub3QgYWxyZWFkeQotICAgIC8vIGluIHRo
ZSBjYWNoZS4gIENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgbV9wYXJzaW5nQmxvY2tp
bmdTY3JpcHQKKyAgICAvLyBpbiB0aGUgY2FjaGUuIENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1
biB0aGUgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdAogICAgIC8vIGlmIHBvc3NpYmxlIGJlZm9yZSBy
ZXR1cm5pbmcgY29udHJvbCB0byB0aGUgcGFyc2VyLgotICAgIGlmICghbV9wYXJzaW5nQmxvY2tp
bmdTY3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9h
ZChtX3BhcnNpbmdCbG9ja2luZ1NjcmlwdCk7CisgICAgaWYgKCFtX3BhcnNlckJsb2NraW5nU2Ny
aXB0LmNhY2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKQorICAgICAgICB3YXRjaEZvckxvYWQobV9w
YXJzZXJCbG9ja2luZ1NjcmlwdCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVz
dERlZmVycmVkU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0yNzgsNyArMjcxLDcgQEAgYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBw
ZW5kaW5nU2NyaXB0LCBFbGVtZW4KIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVs
ZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQog
ewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tp
bmdTY3JpcHQoKSk7CisgICAgQVNTRVJUKCFoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKICAg
ICB7CiAgICAgICAgIEluc2VydGlvblBvaW50UmVjb3JkIGluc2VydGlvblBvaW50UmVjb3JkKG1f
aG9zdC0+aW5wdXRTdHJlYW0oKSk7CiAgICAgICAgIE5lc3RpbmdMZXZlbEluY3JlbWVudGVyIG5l
c3RpbmdMZXZlbEluY3JlbWVudGVyKG1fc2NyaXB0TmVzdGluZ0xldmVsKTsKQEAgLTMwMiw4ICsy
OTUsOCBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQs
IGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcgogICAgICAgICAgICAgcmVxdWVzdERlZmVy
cmVkU2NyaXB0KHNjcmlwdCk7CiAgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5
VG9CZVBhcnNlckV4ZWN1dGVkKCkpIHsKICAgICAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdM
ZXZlbCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQuc2V0
RWxlbWVudChzY3JpcHQpOwotICAgICAgICAgICAgICAgIG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0
LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAg
ICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7CisgICAgICAgICAg
ICAgICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5zZXRTdGFydGluZ1Bvc2l0aW9uKHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTY3Jp
cHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVS
TEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAg
ICAgICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCA3
N2FhZDhjOWMwMzdmNWYyOTYxZDVhYzRjOGMxZWI1OGYyMThlNTVmLi5mZGIzNWFhMTdkOGRmZDdh
Y2MzZDBhYTI1NWZlMWI0ZDI5NDhlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBAIC01MywxMyArNTMsMTQgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoKCk7CiAKICAgICAvLyBQcm9jZXNzZXMgdGhlIHBhc3NlZCBpbiBzY3JpcHQgYW5k
IGFueSBwZW5kaW5nIHNjcmlwdHMgaWYgcG9zc2libGUuCi0gICAgYm9vbCBleGVjdXRlKFBhc3NS
ZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlw
dFN0YXJ0UG9zaXRpb24pOworICAgIHZvaWQgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNj
cmlwdFRvUHJvY2VzcywgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
IAotICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSop
OworICAgIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSop
OwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQotICAgIGJvb2wgZXhlY3V0
ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKLSAgICBib29sIGV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvclBhcnNpbmcoKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0
eWxlc2hlZXRzKCk7CisgICAgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCk7
CiAKKyAgICBib29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3Q7CiAgICAgYm9vbCBp
c0V4ZWN1dGluZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY3JpcHROZXN0aW5nTGV2ZWw7
IH0KIAogcHJpdmF0ZToKQEAgLTY5LDggKzcwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZXhl
Y3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpOwogICAgIHZvaWQgZXhlY3V0ZVBlbmRpbmdTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmKTsKLSAgICBib29sIGhhdmVQYXJzaW5n
QmxvY2tpbmdTY3JpcHQoKSBjb25zdDsKLSAgICBib29sIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdT
Y3JpcHRzKCk7CisgICAgdm9pZCBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogCiAg
ICAgdm9pZCByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqKTsKICAgICB2b2lk
IHJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7CkBAIC04Niw3ICs4Niw3IEBAIHByaXZh
dGU6CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIVE1MU2NyaXB0UnVubmVySG9z
dCogbV9ob3N0OwotICAgIFBlbmRpbmdTY3JpcHQgbV9wYXJzaW5nQmxvY2tpbmdTY3JpcHQ7Cisg
ICAgUGVuZGluZ1NjcmlwdCBtX3BhcnNlckJsb2NraW5nU2NyaXB0OwogICAgIERlcXVlPFBlbmRp
bmdTY3JpcHQ+IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRo
YXQtd2lsbC1leGVjdXRlLXdoZW4tdGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCiAg
ICAgdW5zaWduZWQgbV9zY3JpcHROZXN0aW5nTGV2ZWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDdmMGFhMmI5YmM3MzFjOTdlYTE4
YWFmMDA0NGE3YmJhOTIxZDIwOTYuLmNiZGM0MzUyZmYxYzdiMWUwNTI4ZWU2NGI2MWNkYmMwZWE3
NzMzMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcApAQCAtMzUxLDcgKzM1MSw2IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVy
KEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV90cmVlKGRvY3VtZW50LCBtYXhpbXVtRE9NVHJl
ZURlcHRoKQogICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQotICAgICwgbV9pc1Bh
dXNlZChmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1f
b3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zaG91bGRTa2lwTGVh
ZGluZ05ld2xpbmUoZmFsc2UpCkBAIC0zNjksNyArMzY4LDYgQEAgSFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21l
bnQqIGYKICAgICAsIG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3Ry
ZWUoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIG1heGltdW1ET01UcmVlRGVwdGgpCiAg
ICAgLCBtX3JlcG9ydEVycm9ycyhmYWxzZSkgLy8gRklYTUU6IFdoeSBub3QgcmVwb3J0IGVycm9y
cyBpbiBmcmFnbWVudHM/Ci0gICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNlcnRp
b25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlh
bE1vZGUpCiAgICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTQyNSwx
MSArNDIzLDExIEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZy
YWdtZW50UGFyc2luZ0NvbnRleHQoKQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVp
bGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRp
b24pCiB7CisgICAgQVNTRVJUKG1fc2NyaXB0VG9Qcm9jZXNzKTsKICAgICAvLyBVbnBhdXNlIG91
cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMgYWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBz
Y3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgaXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0
cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVlCiAgICAgLy8gYnVpbGRlci4gIFdlIHBhdXNl
IHRoZSBwYXJzZXIgdG8gZXhpdCB0aGUgdHJlZSBidWlsZGVyLCBhbmQgdGhlbiByZXN1bWUKICAg
ICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgotICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKICAg
ICBzY3JpcHRTdGFydFBvc2l0aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOwog
ICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5pdGlhbGl6ZWRQb3NpdGlv
blZhbHVlMSgpOwogICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNlKCk7CkBAIC0y
MTI3LDcgKzIxMjUsNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgVGV4dE1vZGU6CiAgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICAvLyBQYXVzZSBvdXJzZWx2ZXMg
c28gdGhhdCBwYXJzaW5nIHN0b3BzIHVudGlsIHRoZSBzY3JpcHQgY2FuIGJlIHByb2Nlc3NlZCBi
eSB0aGUgY2FsbGVyLgotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgICAg
ICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7
CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgp
OwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKQEAgLTI3NTAsNyAr
Mjc0Nyw2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250
ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1l
Q2FzZSh0b2tlbik7CiAKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6c2Ny
aXB0VGFnICYmIG1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3Jp
cHRUYWcpKSB7Ci0gICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIG1f
c2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCAwYmQ0NmU4ZGZi
YjAwYmYxNDhlODhlY2M2M2UxNmU2MGU0ZTdmYzI4Li5lN2M2ODkwODRjZTg3OGJkY2Q4ZDFlZWI3
MjEwZTc1ZWViY2M5YjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuaApAQCAtNzAsMTQgKzcwLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0YWNo
KCk7CiAKLSAgICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX2lzUGF1c2VkID0gcGF1
c2VkOyB9Ci0gICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYXVzZWQ7IH0K
LQogICAgIC8vIFRoZSB0b2tlbiByZWFsbHkgc2hvdWxkIGJlIHBhc3NlZCBhcyBhIGNvbnN0JiBz
aW5jZSBpdCdzIG5ldmVyIG1vZGlmaWVkLgogICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21Ub2tl
bihIVE1MVG9rZW4mKTsKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRv
bWljSFRNTFRva2VuJik7CiAKLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBw
YXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KKyAgICBib29sIGhhc1BhcnNl
ckJsb2NraW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gISFtX3NjcmlwdFRvUHJvY2VzczsgfQor
ICAgIC8vIE11c3QgYmUgY2FsbGVkIHRvIHRha2UgdGhlIHBhcnNlci1ibG9ja2luZyBzY3JpcHQg
YmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IHRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
IAogICAgIC8vIERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KQEAgLTIxNiw3ICsyMTQs
NiBAQCBwcml2YXRlOgogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlIG1fdHJlZTsKIAogICAgIGJv
b2wgbV9yZXBvcnRFcnJvcnM7Ci0gICAgYm9vbCBtX2lzUGF1c2VkOwogCiAgICAgLy8gaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFy
c2luZy5odG1sI2luc2VydGlvbi1tb2RlCiAgICAgSW5zZXJ0aW9uTW9kZSBtX2luc2VydGlvbk1v
ZGU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggNTIyNjA4OWFhNjE5MTRjMDNjYmNiNmRhNTI1OTdhYjg5NjdlZDFlMS4uN2U1
MDg4NGZjMWU3OWNhNzRkOTVjZDY0YmM2YmVmNWJkNWE3ZTgyNCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTA3LTA4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBkb2N1bWVudC53cml0ZSBvZiBzY3JpcHRzIHRoYXQgYWxzbyBkb2N1bWVudC53cml0ZSBzb21l
dGltZXMgd3JpdGVzIGFzeW5jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTEwMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAg
ICAgICAgKiBmYXN0L3BhcnNlci9jYWNoZWQtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9wYXJzZXIvY2FjaGVkLXNjcmlwdC1kb2N1bWVu
dC13cml0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3BhcnNlci9yZXNvdXJjZXMvY2Fj
aGVkLXNjcmlwdC1kb2N1bWVudC13cml0ZS5qczogQWRkZWQuCisKIDIwMTItMDctMDkgIEtyaXN0
w7NmIEtvc3p0ecOzICA8a2tyaXN0b2ZAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0g
VW5yZXZpZXdlZCBnYXJkZW5pbmcuIFNraXAgdGhlIGZhaWxpbmcgdGVzdC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvY2FjaGVkLXNjcmlwdC1kb2N1bWVu
dC13cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VmMjJlOWE0MzFhZDAyNzI3MTNiNzFm
ZGM4Nzk0MDE2YzhlZjEyZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcGFy
c2VyL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEg
QEAKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2NhY2hlZC1zY3Jp
cHQtZG9jdW1lbnQtd3JpdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2NhY2hlZC1z
Y3JpcHQtZG9jdW1lbnQtd3JpdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGVhNTgzNGFjZjlmM2E1Nzg5
YTU2ZDc3ZWU1MzI1NTRlN2ExOTUxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9wYXJzZXIvY2FjaGVkLXNjcmlwdC1kb2N1bWVudC13cml0ZS5odG1sCkBAIC0wLDAgKzEsMTAg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NhY2hl
ZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK3dpbmRvdy5pc1Rl
c3RTY3JpcHRDYWNoZWQgPSB0cnVlOworZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdyZXNv
dXJjZXMvY2FjaGVkLXNjcmlwdC1kb2N1bWVudC13cml0ZS5qcyc+PC8iICsgInNjcmlwdD4iKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIv
cmVzb3VyY2VzL2NhY2hlZC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUuanMgYi9MYXlvdXRUZXN0cy9m
YXN0L3BhcnNlci9yZXNvdXJjZXMvY2FjaGVkLXNjcmlwdC1kb2N1bWVudC13cml0ZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MzM0MzkzZDg5ZmE0NGRkNDNmZTU1YWIyMDk0ZTJiNzEwOWRmNmU5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvcmVzb3VyY2VzL2NhY2hlZC1zY3Jp
cHQtZG9jdW1lbnQtd3JpdGUuanMKQEAgLTAsMCArMSw0IEBACitpZiAod2luZG93LnBhcmVudC5p
c1Rlc3RTY3JpcHRDYWNoZWQpIHsKKyAgICBkb2N1bWVudC53cml0ZSgnPGRpdj48L2Rpdj4nKTsK
KyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdicpID8gJ1BBU1MnIDogJ0ZBSUwnKSk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>