<?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>17125</bug_id>
          
          <creation_ts>2008-01-31 16:41:47 -0800</creation_ts>
          <short_desc>Acid3 requires Text.replaceWholeText method from DOM Level 3</short_desc>
          <delta_ts>2019-02-06 09:03:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>11387</dependson>
          <blocked>17064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>68982</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-31 16:41:47 -0800</bug_when>
    <thetext>Acid3 requires Text.wholeText method from DOM Level 3

Hyatt said that the :empty test depends on this (and once he lands his :empty) fix we&apos;ll start failing as a result.

Looks easy enough to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69000</commentid>
    <comment_count>1</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-01-31 18:45:52 -0800</bug_when>
    <thetext>It actually requires .replaceWholeText.  I&apos;d expect a patch to implement both methods.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69311</commentid>
    <comment_count>2</comment_count>
      <attachid>18899</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-03 22:11:38 -0800</bug_when>
    <thetext>Created attachment 18899
First pass at wholeText/replaceWholeText support

 LayoutTests/ChangeLog                              |   21 +++++
 .../core/textreplacewholetext01-expected.txt       |    3 +-
 .../core/textreplacewholetext02-expected.txt       |    3 +-
 .../core/textreplacewholetext03-expected.txt       |    3 +-
 .../core/textreplacewholetext04-expected.txt       |    3 +-
 .../core/textreplacewholetext05-expected.txt       |    3 +-
 .../core/textreplacewholetext06-expected.txt       |    3 +-
 .../core/textreplacewholetext07-expected.txt       |    3 +-
 .../xhtml/level3/core/textwholetext01-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext02-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext03-expected.txt |    3 +-
 .../fast/dom/Window/window-properties-expected.txt |    1 +
 WebCore/ChangeLog                                  |   17 ++++
 WebCore/dom/Node.cpp                               |    2 +-
 WebCore/dom/Text.cpp                               |   80 ++++++++++++++++++++
 WebCore/dom/Text.h                                 |    4 +
 WebCore/dom/Text.idl                               |    4 +
 17 files changed, 138 insertions(+), 21 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69346</commentid>
    <comment_count>3</comment_count>
      <attachid>18899</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-04 08:04:09 -0800</bug_when>
    <thetext>Comment on attachment 18899
First pass at wholeText/replaceWholeText support

Maciej has convinced me to improve handling of EntityReferences as part of this patch (and add some test cases to make sure we make them ReadOnly nodes).  I&apos;m gone until Wed. night, at which point I&apos;ll look at finishing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69551</commentid>
    <comment_count>4</comment_count>
      <attachid>18955</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-05 23:28:10 -0800</bug_when>
    <thetext>Created attachment 18955
Updated after Maciej&apos;s comments

 LayoutTests/ChangeLog                              |   27 ++++++
 .../core/textreplacewholetext01-expected.txt       |    3 +-
 .../core/textreplacewholetext02-expected.txt       |    3 +-
 .../core/textreplacewholetext03-expected.txt       |    3 +-
 .../core/textreplacewholetext04-expected.txt       |    3 +-
 .../core/textreplacewholetext05-expected.txt       |    3 +-
 .../core/textreplacewholetext06-expected.txt       |    3 +-
 .../core/textreplacewholetext07-expected.txt       |    3 +-
 .../xhtml/level3/core/textwholetext01-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext02-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext03-expected.txt |    3 +-
 .../readonly-exceptions-expected.txt               |   23 +++++
 .../dom/EntityReference/readonly-exceptions.html   |   13 +++
 .../dom/EntityReference/resources/TEMPLATE.html    |   13 +++
 .../resources/readonly-exceptions.js               |   33 +++++++
 .../fast/dom/Window/window-properties-expected.txt |    1 +
 WebCore/ChangeLog                                  |   23 +++++
 WebCore/dom/Document.cpp                           |    7 ++-
 WebCore/dom/Node.cpp                               |    2 +-
 WebCore/dom/Text.cpp                               |   89 ++++++++++++++++++++
 WebCore/dom/Text.h                                 |    4 +
 WebCore/dom/Text.idl                               |    4 +
 22 files changed, 247 insertions(+), 22 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69567</commentid>
    <comment_count>5</comment_count>
      <attachid>18955</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-06 06:40:09 -0800</bug_when>
    <thetext>Comment on attachment 18955
Updated after Maciej&apos;s comments

+        if (n-&gt;nodeType() == Node::ENTITY_REFERENCE_NODE) {
+            // We would need to visit EntityReference child text nodes if they existed
+            ASSERT(!n-&gt;hasChildNodes());
+            break;
+        }
+        if (!n-&gt;isTextNode())
+            break;

The code above is (slightly) unnecessarily inefficient. The code to handle EntityReference could simply be an assertion. And if not, and you want to retain the nodeType check, then it&apos;s better to not call both nodeType() and isTextNode(). If you have the node type, you can check if something&apos;s a text node without a second virtual function call.

Because DOM mutation events, specifically the DOMNodeRemovedEvent, can do arbitrary operations, the replaceWholeText function needs some work to be robust in the face of event handler functions that do strange things.

+    for (Node* n = startText; n != this;) {

This loop variable needs to be a RefPtr. The removeChild function could remove the last reference to the parent, so the node &quot;n&quot; could be deleted unless someone has ref&apos;d it.

Similarly, the current node (&quot;this&quot;) needs to go into a RefPtr before calling functions that can in turn invoke mutation event handlers.

+        parentNode()-&gt;removeChild(nodeToRemove, ignored);
+        ASSERT(!ignored);

This assertion is incorrect. For example, the mutation function could remove the node inside the function, which will result in a NOT_FOUND_ERR. So it may be OK to ignore the error, but it&apos;s not OK to assert there was no error.

+        Node* onePastEndText = endText-&gt;nextSibling();
+        for (Node* n = nextSibling(); n != onePastEndText;) {

Same thing here. Both onePastEndText and n need to be RefPtr.

+            parentNode()-&gt;removeChild(nodeToRemove, ignored);
+            ASSERT(!ignored);

And this assertion is also incorrect.

+    setData(newText, ignored);
+    ASSERT(!ignored);

To make this assertion correct, you&apos;ll need to reset &quot;ignored&quot; to 0 just before calling setData since the earlier functions could have changed ignored to a non-0 value. Or you could remove the assertion. If you removed all the assertions, then you could leave ignored uninitialized.

+    Text* replaceWholeText(const String&amp;, ExceptionCode&amp;);

The return value of the function needs to be a PassRefPtr. It&apos;s possible that mutation event handlers will remove the text node from tree. If they do, it&apos;s important that we don&apos;t return a deleted object. The usual way we fix this elsewhere is to use PassRefPtr even though in the normal case the object will be in the DOM tree. This is why the return value from Node::appendChild, for example, is PassRefPtr and not a raw pointer.

+    String wholeText();

Could we make this a const member?

+shouldBe(&quot;entityReference.textContent&quot;, &quot;&apos;&apos;&quot;); // change to &apos;&lt;&apos; when we support EntityReference nodes
+shouldBe(&quot;childrenBeforeFailedAppend&quot;, &quot;0&quot;); // Change to 1 if Entity node support is added.
+shouldBe(&quot;childrenBeforeFailedAppend&quot;, &quot;0&quot;); // Change to 1 if Entity node support is added.

I&apos;d prefer that the shouldBe results reflect correct behavior, rather than the current behavior of our engine. The expected test results will still regression-test our current behavior, because FAIL and the current values will be in the test output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69731</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:10:51 -0800</bug_when>
    <thetext>+        Node* onePastEndText = endText-&gt;nextSibling();
+        for (Node* n = nextSibling(); n != onePastEndText;) {

Same thing here. Both onePastEndText and n need to be RefPtr.

If we&apos;re protecting ourselves from insane mutation event handlers... couldn&apos;t a mutation event handler end up removing onePastEndText from the sibling list?  Thus if onePastEndText != 0, we&apos;d crash, no?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69732</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:15:15 -0800</bug_when>
    <thetext>Bah!  This is insane.  Mutation event handlers could do all sorts of crazy things, including transplanting the node we&apos;re next going to traverse to somewhere else in the document.  Thus making it impossible to simply traverse the sibling list.  We&apos;d end up just removing random nodes until we walked off the end of whatever node-list we got transplanted into!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69733</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:15:43 -0800</bug_when>
    <thetext>CCing darin so he can see my comments about the insanity that is trying to protect ourselves from rogue mutation event handlers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69735</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:49:44 -0800</bug_when>
    <thetext>I originally had wholeText() const, but thought all the const and const_cast crud was ugly.  I added it back in my forthcoming patch however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69736</commentid>
    <comment_count>10</comment_count>
      <attachid>18996</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:52:25 -0800</bug_when>
    <thetext>Created attachment 18996
Address Darin&apos;s concerns (delta from previous patch)

 .../readonly-exceptions-expected.txt               |    6 +-
 .../resources/readonly-exceptions.js               |    6 +-
 WebCore/dom/Text.cpp                               |   70 +++++++++++---------
 WebCore/dom/Text.h                                 |    4 +-
 4 files changed, 46 insertions(+), 40 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69737</commentid>
    <comment_count>11</comment_count>
      <attachid>18996</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-07 23:57:31 -0800</bug_when>
    <thetext>Comment on attachment 18996
Address Darin&apos;s concerns (delta from previous patch)

I can upload a combined patch if you need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69741</commentid>
    <comment_count>12</comment_count>
      <attachid>18997</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 00:05:23 -0800</bug_when>
    <thetext>Created attachment 18997
Address Darin&apos;s concerns (delta from previous patch)

 .../readonly-exceptions-expected.txt               |    6 +-
 .../resources/readonly-exceptions.js               |    6 +-
 WebCore/dom/Text.cpp                               |   70 +++++++++++---------
 WebCore/dom/Text.h                                 |    4 +-
 4 files changed, 46 insertions(+), 40 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69742</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-08 00:08:46 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; If we&apos;re protecting ourselves from insane mutation event handlers... couldn&apos;t a
&gt; mutation event handler end up removing onePastEndText from the sibling list? 
&gt; Thus if onePastEndText != 0, we&apos;d crash, no?

Our goal is to protect ourselves well enough from insane event handlers to prevent them from causing a crash or infinite loop. That may be an impossible challenge though. We should at least do the basics for now and think more deeply about how to handle the tougher issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69743</commentid>
    <comment_count>14</comment_count>
      <attachid>18997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-08 00:14:46 -0800</bug_when>
    <thetext>Comment on attachment 18997
Address Darin&apos;s concerns (delta from previous patch)

I would have preferred to review a combined patch:

+        case Node::CDATA_SECTION_NODE:
+            t = static_cast&lt;const Text*&gt;(n);

The above is incorrect. A CDATA section will be a CharacterData node and *not* a Text node. So it&apos;s an error to cast to Text*. Text is derived from CharacterData, so if we want to handle both we should be using the type CharacterData everywhere, and not Text.

I feel bad for spreading the const disease into this code with my suggestion of marking wholeText() const. Sorry. I probably would have put the const_cast calls at the call sites inside Text::wholeText and left the helper functions themselves alone.

+            RefPtr&lt;Node&gt; nodeToRemove(n.release());
             n = n-&gt;nextSibling();

This doesn&apos;t look like it will work. Calling release() will set n to 0 and you&apos;ll crash on the n-&gt;nextSibling() call. You should re-run the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69745</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 00:18:48 -0800</bug_when>
    <thetext>Yes, the RefPtr nodeToRemove(n.release()) was bogus.  I&apos;ll fix.

I think you&apos;re confused about CDATA_SECTION_NODE.  That means its a CDataSection, which is a subclass of Text (which is a subclass of CharacterData).

class CDATASection : public Text


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69747</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-08 00:22:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think you&apos;re confused about CDATA_SECTION_NODE.  That means its a
&gt; CDataSection, which is a subclass of Text (which is a subclass of
&gt; CharacterData).
&gt; 
&gt; class CDATASection : public Text

Got it. My bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69748</commentid>
    <comment_count>17</comment_count>
      <attachid>18999</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 00:26:16 -0800</bug_when>
    <thetext>Created attachment 18999
Add wholeText/replaceWholeText support (final squashed patch, tests all pass)

 LayoutTests/ChangeLog                              |   27 ++++++
 .../core/textreplacewholetext01-expected.txt       |    3 +-
 .../core/textreplacewholetext02-expected.txt       |    3 +-
 .../core/textreplacewholetext03-expected.txt       |    3 +-
 .../core/textreplacewholetext04-expected.txt       |    3 +-
 .../core/textreplacewholetext05-expected.txt       |    3 +-
 .../core/textreplacewholetext06-expected.txt       |    3 +-
 .../core/textreplacewholetext07-expected.txt       |    3 +-
 .../xhtml/level3/core/textwholetext01-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext02-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext03-expected.txt |    3 +-
 .../readonly-exceptions-expected.txt               |   23 +++++
 .../dom/EntityReference/readonly-exceptions.html   |   13 +++
 .../dom/EntityReference/resources/TEMPLATE.html    |   13 +++
 .../resources/readonly-exceptions.js               |   33 +++++++
 .../fast/dom/Window/window-properties-expected.txt |    1 +
 WebCore/ChangeLog                                  |   23 +++++
 WebCore/dom/Document.cpp                           |    7 ++-
 WebCore/dom/Node.cpp                               |    2 +-
 WebCore/dom/Text.cpp                               |   95 ++++++++++++++++++++
 WebCore/dom/Text.h                                 |    4 +
 WebCore/dom/Text.idl                               |    4 +
 22 files changed, 253 insertions(+), 22 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69751</commentid>
    <comment_count>18</comment_count>
      <attachid>19000</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 00:53:38 -0800</bug_when>
    <thetext>Created attachment 19000
Add wholeText/replaceWholeText support (final squashed patch, tests all pass)

 LayoutTests/ChangeLog                              |   33 +++++++
 .../core/textreplacewholetext01-expected.txt       |    3 +-
 .../core/textreplacewholetext02-expected.txt       |    3 +-
 .../core/textreplacewholetext03-expected.txt       |    3 +-
 .../core/textreplacewholetext04-expected.txt       |    3 +-
 .../core/textreplacewholetext05-expected.txt       |    3 +-
 .../core/textreplacewholetext06-expected.txt       |    3 +-
 .../core/textreplacewholetext07-expected.txt       |    3 +-
 .../xhtml/level3/core/textwholetext01-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext02-expected.txt |    3 +-
 .../xhtml/level3/core/textwholetext03-expected.txt |    3 +-
 .../readonly-exceptions-expected.txt               |   23 +++++
 .../dom/EntityReference/readonly-exceptions.html   |   13 +++
 .../dom/EntityReference/resources/TEMPLATE.html    |   13 +++
 .../resources/readonly-exceptions.js               |   33 +++++++
 .../fast/dom/Text/replaceWholeText-expected.txt    |   13 +++
 LayoutTests/fast/dom/Text/replaceWholeText.html    |   13 +++
 LayoutTests/fast/dom/Text/resources/TEMPLATE.html  |   13 +++
 .../fast/dom/Text/resources/replaceWholeText.js    |   16 ++++
 .../fast/dom/Window/window-properties-expected.txt |    1 +
 WebCore/ChangeLog                                  |   23 +++++
 WebCore/dom/Document.cpp                           |    7 ++-
 WebCore/dom/Node.cpp                               |    2 +-
 WebCore/dom/Text.cpp                               |   91 ++++++++++++++++++++
 WebCore/dom/Text.h                                 |    4 +
 WebCore/dom/Text.idl                               |    4 +
 26 files changed, 310 insertions(+), 22 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69752</commentid>
    <comment_count>19</comment_count>
      <attachid>19000</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-08 00:57:55 -0800</bug_when>
    <thetext>Comment on attachment 19000
Add wholeText/replaceWholeText support (final squashed patch, tests all pass)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69753</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 01:05:55 -0800</bug_when>
    <thetext>Landed in r30088.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503033</commentid>
    <comment_count>21</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:46 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18899</attachid>
            <date>2008-02-03 22:11:38 -0800</date>
            <delta_ts>2008-02-05 23:29:50 -0800</delta_ts>
            <desc>First pass at wholeText/replaceWholeText support</desc>
            <filename>First-pass-at-wholeText-replaceWholeText-support.patch</filename>
            <type>text/plain</type>
            <size>12709</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MGI3NDNhMjYzNDczMmQ1MWZmMTViZTRlZDZjMTRkYjdjYTEzZWI2OQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM3NGM2ODEu
LmRiNTA1NzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAwOC0wMi0wMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRleHQud2hvbGVUZXh0IGFuZCBUZXh0LnJlcGxh
Y2VXaG9sZVRleHQgZnJvbSBET00gTGV2ZWwgMyBDb3JlLgorICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEyNQorCisgICAgICAgIEFsbCBvZiB0aGVzZSB0
ZXN0cyBub3cgcGFzcy4KKworICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVw
bGFjZXdob2xldGV4dDAxLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwz
L2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9t
L3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA0LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3
aG9sZXRleHQwNS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3Jl
L3RleHRyZXBsYWNld2hvbGV0ZXh0MDYtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRt
bC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAxLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAzLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0OiB1cGRhdGVkIHRvIHJlZmxlY3QgYWRkaXRpb24gb2YgcmVwbGFjZVdob2xl
VGV4dAorCiAyMDA4LTAyLTAzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhw
ZWN0ZWQudHh0CmluZGV4IDE4ZDBlYmUuLmMyMzNhMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9s
ZXRleHQwMS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
MQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1
bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0
LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAyLWV4cGVjdGVkLnR4
dAppbmRleCBkNWI5MzZhLi5mOTQ5NDFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDIt
ZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDIKLVN0YXR1
cwllcnJvcgotTWVzc2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVuZGVmaW5lZCAocmVzdWx0IG9mIGV4
cHJlc3Npb24gdGV4dE5vZGUucmVwbGFjZVdob2xlVGV4dCkgaXMgbm90IG9iamVjdC4KK1N0YXR1
cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
dGV4dHJlcGxhY2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKaW5kZXgg
MGZmNDZmOC4uMGU5YzI3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAzLWV4cGVjdGVk
LnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAzCi1TdGF0dXMJZXJyb3IK
LU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9u
IHRleHROb2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2Vz
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQudHh0CmluZGV4IGQ1ODBlNzcu
LmM2YjEzMGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90
ZXh0cmVwbGFjZXdob2xldGV4dDA0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNC1leHBlY3RlZC50eHQKQEAg
LTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
bGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNAotU3RhdHVzCWVycm9yCi1NZXNzYWdl
CVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9k
ZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDA1LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90
ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4cGVjdGVkLnR4dAppbmRleCA1YzA0NzRlLi5iOWIyY2Fl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxh
Y2V3aG9sZXRleHQwNS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDUtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEs
MiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9j
b3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDUKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlUeXBlRXJy
b3I6IFZhbHVlIHVuZGVmaW5lZCAocmVzdWx0IG9mIGV4cHJlc3Npb24gdGV4dE5vZGUucmVwbGFj
ZVdob2xlVGV4dCkgaXMgbm90IG9iamVjdC4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxh
Y2V3aG9sZXRleHQwNi1leHBlY3RlZC50eHQKaW5kZXggOTY2ODZiZC4uOTI1YTM4MCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0
ZXh0MDYtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS90ZXh0cmVwbGFjZXdob2xldGV4dDA2LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRl
c3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0
cmVwbGFjZXdob2xldGV4dDA2Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1
ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJlcGxhY2VXaG9sZVRl
eHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0
ZXh0MDctZXhwZWN0ZWQudHh0CmluZGV4IGMwMTIyZTQuLjEwNzVlY2IgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJl
cGxhY2V3aG9sZXRleHQwNy1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3
aG9sZXRleHQwNwotU3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZp
bmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBu
b3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKaW5k
ZXggN2MxYmY1Yy4uZjNkYWE0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKQEAgLTEs
MyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2
ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAxCi1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQl0ZXh0d2hv
bGV0ZXh0MDE6IGFzc2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCBudWxsLCBleHBlY3RlZCBNYXJn
YXJldCBNYXJ0aW4uCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMi1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dApp
bmRleCA2MjM2ODgzLi5hYmY5Mzk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dApAQCAt
MSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9s
ZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDIKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3
aG9sZXRleHQwMjogYXNzZXJ0RXF1YWxzIGZhaWxlZCwgYWN0dWFsIG51bGwsIGV4cGVjdGVkIE1h
cmdhcmV0IE1hcnRpbk5ldyBUZXh0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBl
Y3RlZC50eHQKaW5kZXggYjA5OWQ5NC4uYWU2OGY3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3Rl
ZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAzCi1TdGF0dXMJZmFpbHVyZQotTWVz
c2FnZQl0ZXh0d2hvbGV0ZXh0MDM6IGFzc2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCBudWxsLCBl
eHBlY3RlZCBUZXh0IEkgVGV4dCBJSS4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4
dAppbmRleCBiNDkzNWI5Li5iMzg2MDlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTY4LDYg
KzY4LDcgQEAgd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgW2Z1bmN0
aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciBb
ZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgW2Z1
bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVwbGFjZURhdGEgW2Z1bmN0
aW9uXQord2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVwbGFjZVdob2xlVGV4dCBbZnVu
Y3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5zcGxpdFRleHQgW2Z1bmN0aW9u
XQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuc3Vic3RyaW5nRGF0YSBbZnVuY3Rpb25d
CiB3aW5kb3cuQ1NTQ2hhcnNldFJ1bGUgW29iamVjdCBDU1NDaGFyc2V0UnVsZUNvbnN0cnVjdG9y
XQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwOTNhNDJhLi44MTEzNDJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDA4LTAyLTAzICBFcmljIFNlaWRl
bCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgVGV4dC53aG9sZVRleHQgYW5kIFRleHQucmVw
bGFjZVdob2xlVGV4dAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzEyNQorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6dGV4dENvbnRlbnQpOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHQ6Ondob2xlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZXBsYWNlV2hvbGVU
ZXh0KToKKyAgICAgICAgKiBkb20vVGV4dC5oOgorICAgICAgICAqIGRvbS9UZXh0LmlkbDoKKwog
MjAwOC0wMi0wMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hY2llai4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKaW5kZXggNGI5MjY3OC4uZTUzZDMwZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE1MzYsNyAr
MTUzNiw3IEBAIFN0cmluZyBOb2RlOjp0ZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNUb05ld2xp
bmVzKSBjb25zdAogICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgY2Fz
ZSBOT1RBVElPTl9OT0RFOgogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9XZWJDb3JlL2RvbS9UZXh0
LmNwcAppbmRleCA4NDgzYzEwLi4zODE4YmZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtODcsNiArODcsODYgQEAgUGFzc1Jl
ZlB0cjxUZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICByZXR1cm4gbmV3VGV4dC5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBUZXh0KiBl
YXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoVGV4dCogdCkKK3sKKyAgICB3aGlsZSAo
Tm9kZSogcHJldmlvdXNOb2RlID0gdC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYg
KCFwcmV2aW91c05vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzTm9kZSk7CisgICAgfQorICAgIHJldHVy
biB0OworfQorCitzdGF0aWMgVGV4dCogbGF0ZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZShU
ZXh0KiB0KQoreworICAgIHdoaWxlIChOb2RlKiBuZXh0Tm9kZSA9IHQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKCFuZXh0Tm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dE5vZGUpOworICAgIH0KKyAg
ICByZXR1cm4gdDsKK30KKworU3RyaW5nIFRleHQ6Ondob2xlVGV4dCgpCit7CisgICAgLy8gU3Bl
YzogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9jb3JlLmh0bWwjVGV4dDMt
d2hvbGVUZXh0CisgICAgLy8gRE9NIENvcmUgMyBkZWZpbmVzICJsb2dpY2FseS1hZGphY2VudCB0
ZXh0IG5vZGUiIHN1Y2ggdGhhdCB3aG9sZVRleHQgc2hvdWxkIGluY2x1ZGUgY2hpbGQKKyAgICAv
LyB0ZXh0IG5vZGVzIG9mIEVudGl0eVJlZmVyZW5jZSBub2Rlcy4gIEhvd2V2ZXIsIHNpbmNlIHdl
IGV4cGFuZCBlbnRpdGllcyBpbiB0aGUgcGFyc2VyCisgICAgLy8gYW5kIGRvIG5vdCBzdXBwb3J0
IEVudGl0eSBub2RlcyBpbiB0aGUgRE9NLCB3ZSBjYW4gb25seSBib3RoZXIgd2Fsa2luZyBzaWJs
aW5nIHRleHQgbm9kZXMuCisKKyAgICBUZXh0KiBzdGFydFRleHQgPSBlYXJsaWVzdExvZ2ljYWxs
eUFkamFjZW50VGV4dE5vZGUodGhpcyk7CisgICAgVGV4dCogZW5kVGV4dCA9IGxhdGVzdExvZ2lj
YWxseUFkamFjZW50VGV4dE5vZGUodGhpcyk7CisKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsK
KyAgICBmb3IgKFRleHQqIHQgPSBzdGFydFRleHQ7IHQgIT0gZW5kVGV4dDsgdCA9IHN0YXRpY19j
YXN0PFRleHQqPih0LT5uZXh0U2libGluZygpKSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIGRh
dGEgPSB0LT5kYXRhKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCks
IGRhdGEubGVuZ3RoKCkpOworICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKGVuZFRleHQtPmRhdGEo
KS5jaGFyYWN0ZXJzKCksIGVuZFRleHQtPmRhdGEoKS5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitUZXh0KiBUZXh0OjpyZXBsYWNlV2hvbGVUZXh0
KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCAicmVhZC1vbmx5IiB0ZXh0IG5vZGVzIChubyBlbnRpdHkgc3VwcG9ydCkKKyAg
ICAvLyBzbyB3ZSBhbHdheXMgcmVwbGFjZSB0aGUgY3VycmVudCBub2RlIHRoZSBuZXcgd2hvbGVU
ZXh0IGFuZCByZW1vdmUKKyAgICAvLyBhbGwgc2libGluZyB0ZXh0IG5vZGVzLgorICAgIEFTU0VS
VCghaXNSZWFkT25seU5vZGUoKSk7CisgICAgLy8gVGhpcyBtZXRob2Qgb25seSByYWlzZXMgZXhj
ZXB0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBFbnRpdHkgbm9kZXMgKHdoaWNoIHdlIGRvbid0IHN1
cHBvcnQpCisKKyAgICBUZXh0KiBzdGFydFRleHQgPSBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50
VGV4dE5vZGUodGhpcyk7CisgICAgVGV4dCogZW5kVGV4dCA9IGxhdGVzdExvZ2ljYWxseUFkamFj
ZW50VGV4dE5vZGUodGhpcyk7CisKKyAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWQgPSAwOworICAg
IGZvciAoTm9kZSogbiA9IHN0YXJ0VGV4dDsgbiAhPSB0aGlzOykgeworICAgICAgICBOb2RlKiBu
b2RlVG9SZW1vdmUgPSBuOworICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAg
cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlVG9SZW1vdmUsIGlnbm9yZWQpOworICAgICAg
ICBBU1NFUlQoIWlnbm9yZWQpOworICAgIH0KKworICAgIGlmICh0aGlzICE9IGVuZFRleHQpIHsK
KyAgICAgICAgTm9kZSogb25lUGFzdEVuZFRleHQgPSBlbmRUZXh0LT5uZXh0U2libGluZygpOwor
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBuZXh0U2libGluZygpOyBuICE9IG9uZVBhc3RFbmRUZXh0
OykgeworICAgICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbjsKKyAgICAgICAgICAgIG4g
PSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgcGFyZW50Tm9kZSgpLT5yZW1vdmVDaGls
ZChub2RlVG9SZW1vdmUsIGlnbm9yZWQpOworICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXdUZXh0LmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAocGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgcGFyZW50Tm9kZSgpLT5yZW1vdmVDaGls
ZCh0aGlzLCBpZ25vcmVkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2V0RGF0
YShuZXdUZXh0LCBpZ25vcmVkKTsKKyAgICBBU1NFUlQoIWlnbm9yZWQpOworICAgIHJldHVybiB0
aGlzOworfQorCiBTdHJpbmcgVGV4dDo6bm9kZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiB0
ZXh0QXRvbS5kb21TdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RleHQuaCBiL1dl
YkNvcmUvZG9tL1RleHQuaAppbmRleCAyMGVhNTRhLi4xOTc0Y2Q1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9UZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vVGV4dC5oCkBAIC0zOSw2ICszOSwxMCBA
QCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFRleHQ+IHNwbGl0VGV4dCh1bnNpZ25lZCBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIC8vIERPTSBMZXZlbCAzOiBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2NvcmUuaHRtbCNJRC0xMzEyMjk1NzcyCisgICAgU3Ry
aW5nIHdob2xlVGV4dCgpOworICAgIFRleHQqIHJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9t
IHBhcmVudCBjbGFzc2VzCiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5pZGwgYi9XZWJDb3JlL2RvbS9UZXh0LmlkbApp
bmRleCBjMDQyNmVhLi4xYjAwMDlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0LmlkbAor
KysgYi9XZWJDb3JlL2RvbS9UZXh0LmlkbApAQCAtMzAsNiArMzAsMTAgQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICBUZXh0IHNwbGl0VGV4dChpbiBbSXNJbmRleF0gdW5zaWduZWQgbG9uZyBvZmZz
ZXQpCiAgICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyAgICAgICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMzoKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyAgICAgICB3aG9sZVRleHQ7CisgICAgICAgIFRleHQgICAgICAgICAgICAgICByZXBsYWNl
V2hvbGVUZXh0KGluIERPTVN0cmluZyBjb250ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18955</attachid>
            <date>2008-02-05 23:28:10 -0800</date>
            <delta_ts>2008-02-08 00:27:30 -0800</delta_ts>
            <desc>Updated after Maciej&apos;s comments</desc>
            <filename>First-pass-at-wholeText-replaceWholeText-support.patch</filename>
            <type>text/plain</type>
            <size>19013</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OGMxNDVkMWY0YWQ4NmU4NGM4ZmMwODVkNzk5ZTVjMWM4MjlkN2NkNQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM3NGM2ODEu
LjUwOTIyNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAwOC0wMi0wMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRleHQud2hvbGVUZXh0IGFuZCBUZXh0LnJlcGxh
Y2VXaG9sZVRleHQgZnJvbSBET00gTGV2ZWwgMyBDb3JlLgorICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEyNQorICAgICAgICAKKyAgICAgICAgVGVzdCB0
byBtYWtlIHN1cmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBy
ZWFkLW9ubHkuCisKKyAgICAgICAgQWxsIG9mIHRoZXNlIHRlc3RzIG5vdyBwYXNzLgorCisgICAg
ICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDAyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4
dHJlcGxhY2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
Ni1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMv
Y29yZS90ZXh0d2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25z
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRW50aXR5UmVmZXJlbmNl
L3Jlc291cmNlcy9URU1QTEFURS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbnRp
dHlSZWZlcmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanM6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6IHVw
ZGF0ZWQgdG8gcmVmbGVjdCBhZGRpdGlvbiBvZiByZXBsYWNlV2hvbGVUZXh0CisKIDIwMDgtMDIt
MDMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBNYWNpZWouCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
dGV4dHJlcGxhY2V3aG9sZXRleHQwMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKaW5kZXgg
MThkMGViZS4uYzIzM2EzMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxLWV4cGVjdGVk
LnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxCi1TdGF0dXMJZXJyb3IK
LU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9u
IHRleHROb2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2Vz
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CmluZGV4IGQ1YjkzNmEu
LmY5NDk0MWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90
ZXh0cmVwbGFjZXdob2xldGV4dDAyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQKQEAg
LTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
bGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMgotU3RhdHVzCWVycm9yCi1NZXNzYWdl
CVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9k
ZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDAzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90
ZXh0cmVwbGFjZXdob2xldGV4dDAzLWV4cGVjdGVkLnR4dAppbmRleCAwZmY0NmY4Li4wZTljMjdh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxh
Y2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEs
MiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9j
b3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDMKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlUeXBlRXJy
b3I6IFZhbHVlIHVuZGVmaW5lZCAocmVzdWx0IG9mIGV4cHJlc3Npb24gdGV4dE5vZGUucmVwbGFj
ZVdob2xlVGV4dCkgaXMgbm90IG9iamVjdC4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxh
Y2V3aG9sZXRleHQwNC1leHBlY3RlZC50eHQKaW5kZXggZDU4MGU3Ny4uYzZiMTMwYiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0
ZXh0MDQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS90ZXh0cmVwbGFjZXdob2xldGV4dDA0LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRl
c3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0
cmVwbGFjZXdob2xldGV4dDA0Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1
ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJlcGxhY2VXaG9sZVRl
eHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0
ZXh0MDUtZXhwZWN0ZWQudHh0CmluZGV4IDVjMDQ3NGUuLmI5YjJjYWUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJl
cGxhY2V3aG9sZXRleHQwNS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3
aG9sZXRleHQwNQotU3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZp
bmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBu
b3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA2LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA2LWV4
cGVjdGVkLnR4dAppbmRleCA5NjY4NmJkLi45MjVhMzgwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNi1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hv
bGV0ZXh0MDYtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0
MDYKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVuZGVmaW5lZCAocmVz
dWx0IG9mIGV4cHJlc3Npb24gdGV4dE5vZGUucmVwbGFjZVdob2xlVGV4dCkgaXMgbm90IG9iamVj
dC4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNy1leHBlY3RlZC50
eHQKaW5kZXggYzAxMjJlNC4uMTA3NWVjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3
LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3Ci1TdGF0
dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBl
eHByZXNzaW9uIHRleHROb2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0
dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAxLWV4cGVjdGVkLnR4dAppbmRleCA3YzFiZjVjLi5mM2Rh
YTRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdo
b2xldGV4dDAxLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvdGV4dHdob2xldGV4dDAxLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJ
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0d2hv
bGV0ZXh0MDEKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3aG9sZXRleHQwMTogYXNzZXJ0
RXF1YWxzIGZhaWxlZCwgYWN0dWFsIG51bGwsIGV4cGVjdGVkIE1hcmdhcmV0IE1hcnRpbi4KK1N0
YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CmluZGV4IDYyMzY4ODMuLmFi
ZjkzOTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0
d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZl
bDMvY29yZS90ZXh0d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVz
dAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHR3
aG9sZXRleHQwMgotU3RhdHVzCWZhaWx1cmUKLU1lc3NhZ2UJdGV4dHdob2xldGV4dDAyOiBhc3Nl
cnRFcXVhbHMgZmFpbGVkLCBhY3R1YWwgbnVsbCwgZXhwZWN0ZWQgTWFyZ2FyZXQgTWFydGluTmV3
IFRleHQuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAzLWV4cGVjdGVkLnR4dAppbmRleCBi
MDk5ZDk0Li5hZTY4ZjdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvdGV4dHdob2xldGV4dDAzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAzLWV4cGVjdGVkLnR4dApAQCAtMSwzICsx
LDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMv
Y29yZS90ZXh0d2hvbGV0ZXh0MDMKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3aG9sZXRl
eHQwMzogYXNzZXJ0RXF1YWxzIGZhaWxlZCwgYWN0dWFsIG51bGwsIGV4cGVjdGVkIFRleHQgSSBU
ZXh0IElJLgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNkMmNlCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRv
bmx5LWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1Rlc3QgdG8gbWFr
ZSBzdXJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBhcmUgYWx3YXlzIHRyZWF0ZWQgcmVhZG9ubHkK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgeG1sRG9jMi5hZG9wdE5vZGUo
ZW50aXR5UmVmZXJlbmNlKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjogRE9NIEV4Y2VwdGlvbiA3LgorUEFTUyBlbnRpdHlSZWZlcmVuY2Uub3duZXJE
b2N1bWVudCBpcyB4bWxEb2MKK1BBU1MgZW50aXR5UmVmZXJlbmNlLm5vZGVWYWx1ZSA9ICdmb28n
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBET00g
RXhjZXB0aW9uIDcuCitQQVNTIGVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgaXMgbnVsbAorUEFT
UyBlbnRpdHlSZWZlcmVuY2UucHJlZml4ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBO
QU1FU1BBQ0VfRVJSOiBET00gRXhjZXB0aW9uIDE0LgorUEFTUyBlbnRpdHlSZWZlcmVuY2UucHJl
Zml4IGlzIG51bGwKK1BBU1MgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50ID0gJ2ZvbycgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNl
cHRpb24gNy4KK1BBU1MgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IGlzICcnCitQQVNTIGNo
aWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIGlzIDAKK1BBU1MgZW50aXR5UmVmZXJlbmNlLmFwcGVu
ZENoaWxkKHRleHQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOiBET00gRXhjZXB0aW9uIDcuCitQQVNTIGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVz
Lmxlbmd0aCBpcyBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZAorUEFTUyBjaGlsZHJlbkJlZm9y
ZUZhaWxlZEFwcGVuZCBpcyAwCitQQVNTIGVudGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4
dCwgZW50aXR5UmVmZXJlbmNlLmZpcnN0Q2hpbGQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBET00gRXhjZXB0aW9uIDcuCitQQVNTIGVudGl0eVJl
ZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCBpcyBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNl
cHRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVhZG9u
bHktZXhjZXB0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdj
OTliYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZl
cmVuY2UvcmVhZG9ubHktZXhjZXB0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVhZG9ubHkt
ZXhjZXB0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL1RFTVBMQVRF
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL1RF
TVBMQVRFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MWM0Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9y
ZXNvdXJjZXMvVEVNUExBVEUuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iWU9VUl9KU19GSUxFX0hFUkUiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
RW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25seS1leGNlcHRp
b25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTEzNTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3Vy
Y2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMKQEAgLTAsMCArMSwzMyBAQAorZGVzY3JpcHRpb24o
IlRlc3QgdG8gbWFrZSBzdXJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBhcmUgYWx3YXlzIHRyZWF0
ZWQgcmVhZG9ubHkiKQorCit2YXIgeG1sRG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3Jl
YXRlRG9jdW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCAiaHRtbCIsIG51bGwp
OwordmFyIHhtbERvYzIgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgi
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJodG1sIiwgbnVsbCk7Cit2YXIgZW50aXR5
UmVmZXJlbmNlID0geG1sRG9jLmNyZWF0ZUVudGl0eVJlZmVyZW5jZSgiZ3QiKTsKKworc2hvdWxk
VGhyb3coInhtbERvYzIuYWRvcHROb2RlKGVudGl0eVJlZmVyZW5jZSkiKTsKK3Nob3VsZEJlKCJl
bnRpdHlSZWZlcmVuY2Uub3duZXJEb2N1bWVudCIsICJ4bWxEb2MiKQorCisvLyBub2RlVmFsdWUg
aXMgZGVmaW5lZCB0byBiZSBudWxsIGZvciBFbnRpdHkgUmVmZXJlbmNlIG5vZGVzLCBhbmQgdGh1
cyBzaG91bGQgc2lsZW50bHkgZmFpbCB0byBtb2RpZnkKKy8vIFNwZWMgaXMgYW1iaWdpb3VzIGFz
IHRvIGlmIHdlIHNob3VsZCB0aHJvdyBoZXJlIG9yIG5vdC4gIEkndmUgcmVxdWVzdGVkIGNsYXJp
ZmljYXRpb246CisvLyBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9t
LzIwMDhKYW5NYXIvMDAwOS5odG1sCitzaG91bGRUaHJvdygiZW50aXR5UmVmZXJlbmNlLm5vZGVW
YWx1ZSA9ICdmb28nIik7CitzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLm5vZGVWYWx1ZSIsICJu
dWxsIik7CisKK3Nob3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2UucHJlZml4ID0gJ2ZvbyciKTsK
K3Nob3VsZEJlKCJlbnRpdHlSZWZlcmVuY2UucHJlZml4IiwgIm51bGwiKTsKKworc2hvdWxkVGhy
b3coImVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCA9ICdmb28nIik7CitzaG91bGRCZSgiZW50
aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IiwgIicnIik7IC8vIGNoYW5nZSB0byAnPCcgd2hlbiB3
ZSBzdXBwb3J0IEVudGl0eVJlZmVyZW5jZSBub2RlcworCit2YXIgY2hpbGRyZW5CZWZvcmVGYWls
ZWRBcHBlbmQgPSBlbnRpdHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGg7CitzaG91bGRCZSgi
Y2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQiLCAiMCIpOyAvLyBDaGFuZ2UgdG8gMSBpZiBFbnRp
dHkgbm9kZSBzdXBwb3J0IGlzIGFkZGVkLgordmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiRkFJTCIpOworc2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0
ZXh0KSIpOworc2hvdWxkQmUoImVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCIsICJj
aGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCIpOworCitjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVu
ZCA9IGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKK3Nob3VsZEJlKCJjaGlsZHJl
bkJlZm9yZUZhaWxlZEFwcGVuZCIsICIwIik7IC8vIENoYW5nZSB0byAxIGlmIEVudGl0eSBub2Rl
IHN1cHBvcnQgaXMgYWRkZWQuCitzaG91bGRUaHJvdygiZW50aXR5UmVmZXJlbmNlLmluc2VydEJl
Zm9yZSh0ZXh0LCBlbnRpdHlSZWZlcmVuY2UuZmlyc3RDaGlsZCkiKTsKK3Nob3VsZEJlKCJlbnRp
dHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGgiLCAiY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBl
bmQiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4
dAppbmRleCBiNDkzNWI5Li5iMzg2MDlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTY4LDYg
KzY4LDcgQEAgd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgW2Z1bmN0
aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciBb
ZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgW2Z1
bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVwbGFjZURhdGEgW2Z1bmN0
aW9uXQord2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVwbGFjZVdob2xlVGV4dCBbZnVu
Y3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5zcGxpdFRleHQgW2Z1bmN0aW9u
XQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuc3Vic3RyaW5nRGF0YSBbZnVuY3Rpb25d
CiB3aW5kb3cuQ1NTQ2hhcnNldFJ1bGUgW29iamVjdCBDU1NDaGFyc2V0UnVsZUNvbnN0cnVjdG9y
XQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwOTNhNDJhLi41MGUwZGRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA4LTAyLTAzICBFcmljIFNlaWRl
bCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgVGV4dC53aG9sZVRleHQgYW5kIFRleHQucmVw
bGFjZVdob2xlVGV4dAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzEyNQorCisgICAgICAgIFRlc3QgRW50aXR5UmVmZXJlbmNlcyB0byBtYWtlIHN1cmUg
dGhleSdyZSBhbHdheXMgdHJlYXRlZCBhcyByZWFkLW9ubHkKKyAgICAgICAgSW4gZG9pbmcgc28g
SSBkaXNjb3ZlcmVkIGEgYnVnIGluIGRvY3VtZW50LmFkb3B0Tm9kZShyZWFkb25seU5vZGUpIChh
bmQgZml4ZWQgaXQpCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmFkb3B0Tm9kZSk6IHRocm93IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB3aGVuIHBhc3NlZCBhIHJlYWRvbmx5IG5vZGUKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dGV4dENv
bnRlbnQpOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVhcmxp
ZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXRlc3RM
b2dpY2FsbHlBZGphY2VudFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6Ondob2xl
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZXBsYWNlV2hvbGVUZXh0KToKKyAgICAg
ICAgKiBkb20vVGV4dC5oOgorICAgICAgICAqIGRvbS9UZXh0LmlkbDoKKwogMjAwOC0wMi0wMyAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
Y2llai4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCA1NzUxMDBlLi44ODY5MWMzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02NzMs
NyArNjczLDEyIEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmFkb3B0Tm9kZShQYXNzUmVm
UHRyPE5vZGU+IHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gTk9UX1NV
UFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKworICAgIGlmIChz
b3VyY2UtPmlzUmVhZE9ubHlOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHN3aXRjaCAoc291
cmNlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRU5USVRZX05PREU6CiAgICAgICAgIGNh
c2UgTk9UQVRJT05fTk9ERToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKaW5kZXggNGI5MjY3OC4uZTUzZDMwZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE1MzYsNyAr
MTUzNiw3IEBAIFN0cmluZyBOb2RlOjp0ZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNUb05ld2xp
bmVzKSBjb25zdAogICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgY2Fz
ZSBOT1RBVElPTl9OT0RFOgogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9XZWJDb3JlL2RvbS9UZXh0
LmNwcAppbmRleCA4NDgzYzEwLi5hZjk5MDc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtODcsNiArODcsOTUgQEAgUGFzc1Jl
ZlB0cjxUZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICByZXR1cm4gbmV3VGV4dC5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBUZXh0KiBl
YXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoVGV4dCogdCkKK3sKKyAgICBOb2RlKiBu
ID0gdDsKKyAgICB3aGlsZSAoKG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSkpIHsKKyAgICAgICAg
aWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKSB7CisgICAg
ICAgICAgICAvLyBXZSB3b3VsZCBuZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBjaGlsZCB0
ZXh0IG5vZGVzIGlmIHRoZXkgZXhpc3RlZAorICAgICAgICAgICAgQVNTRVJUKCFuLT5oYXNDaGls
ZE5vZGVzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFu
LT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdCA9IHN0YXRpY19j
YXN0PFRleHQqPihuKTsKKyAgICB9CisgICAgcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBUZXh0KiBs
YXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKFRleHQqIHQpCit7CisgICAgTm9kZSogbiA9
IHQ7CisgICAgd2hpbGUgKChuID0gbi0+bmV4dFNpYmxpbmcoKSkpIHsKKyAgICAgICAgaWYgKG4t
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKSB7CisgICAgICAgICAg
ICAvLyBXZSB3b3VsZCBuZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBjaGlsZCB0ZXh0IG5v
ZGVzIGlmIHRoZXkgZXhpc3RlZAorICAgICAgICAgICAgQVNTRVJUKCFuLT5oYXNDaGlsZE5vZGVz
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFuLT5pc1Rl
eHROb2RlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdCA9IHN0YXRpY19jYXN0PFRl
eHQqPihuKTsKKyAgICB9CisgICAgcmV0dXJuIHQ7Cit9CisKK1N0cmluZyBUZXh0Ojp3aG9sZVRl
eHQoKQoreworICAgIFRleHQqIHN0YXJ0VGV4dCA9IGVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRU
ZXh0Tm9kZSh0aGlzKTsKKyAgICBUZXh0KiBlbmRUZXh0ID0gbGF0ZXN0TG9naWNhbGx5QWRqYWNl
bnRUZXh0Tm9kZSh0aGlzKTsKKworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIE5vZGUq
IG9uZVBhc3RFbmRUZXh0ID0gZW5kVGV4dC0+bmV4dFNpYmxpbmcoKTsKKyAgICBmb3IgKE5vZGUq
IG4gPSBzdGFydFRleHQ7IG4gIT0gb25lUGFzdEVuZFRleHQ7IG4gPSBuLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIGlmICghbi0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgZGF0YSA9IHQtPmRhdGEoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkYXRhLmNo
YXJhY3RlcnMoKSwgZGF0YS5sZW5ndGgoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQocmVzdWx0KTsKK30KKworVGV4dCogVGV4dDo6cmVwbGFjZVdob2xlVGV4dChjb25zdCBT
dHJpbmcmIG5ld1RleHQsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIC8vIFdlIGRvbid0IHN1cHBv
cnQgInJlYWQtb25seSIgdGV4dCBub2RlcyAobm8gRW50aXR5IG5vZGUgc3VwcG9ydCkKKyAgICAv
LyBUaHVzLCB3ZSByZW1vdmUgYWxsIGFkamFjZW50IHRleHQgbm9kZXMsIGFuZCByZXBsYWNlIHRo
ZSBjb250ZW50cyBvZiB0aGlzIG9uZS4KKyAgICBBU1NFUlQoIWlzUmVhZE9ubHlOb2RlKCkpOwor
ICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgcmFpc2VzIGV4Y2VwdGlvbnMgd2hlbiBkZWFsaW5nIHdp
dGggRW50aXR5IG5vZGVzICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0KQorCisgICAgVGV4dCogc3Rh
cnRUZXh0ID0gZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworICAgIFRl
eHQqIGVuZFRleHQgPSBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworCisg
ICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkID0gMDsKKyAgICBmb3IgKE5vZGUqIG4gPSBzdGFydFRl
eHQ7IG4gIT0gdGhpczspIHsKKyAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbjsKKyAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hp
bGQobm9kZVRvUmVtb3ZlLCBpZ25vcmVkKTsKKyAgICAgICAgQVNTRVJUKCFpZ25vcmVkKTsKKyAg
ICB9CisKKyAgICBpZiAodGhpcyAhPSBlbmRUZXh0KSB7CisgICAgICAgIE5vZGUqIG9uZVBhc3RF
bmRUZXh0ID0gZW5kVGV4dC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgZm9yIChOb2RlKiBuID0g
bmV4dFNpYmxpbmcoKTsgbiAhPSBvbmVQYXN0RW5kVGV4dDspIHsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGVUb1JlbW92ZSA9IG47CisgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZVRvUmVtb3ZlLCBpZ25vcmVk
KTsKKyAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobmV3VGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUoKSkKKyAg
ICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQodGhpcywgaWdub3JlZCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHNldERhdGEobmV3VGV4dCwgaWdub3JlZCk7Cisg
ICAgQVNTRVJUKCFpZ25vcmVkKTsKKyAgICByZXR1cm4gdGhpczsKK30KKwogU3RyaW5nIFRleHQ6
Om5vZGVOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gdGV4dEF0b20uZG9tU3RyaW5nKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmggYi9XZWJDb3JlL2RvbS9UZXh0LmgKaW5kZXgg
MjBlYTU0YS4uMTk3NGNkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5oCisrKyBiL1dl
YkNvcmUvZG9tL1RleHQuaApAQCAtMzksNiArMzksMTAgQEAgcHVibGljOgogCiAgICAgUGFzc1Jl
ZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAK
KyAgICAvLyBET00gTGV2ZWwgMzogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29y
ZS9jb3JlLmh0bWwjSUQtMTMxMjI5NTc3MgorICAgIFN0cmluZyB3aG9sZVRleHQoKTsKKyAgICBU
ZXh0KiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKwog
ICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSBwYXJlbnQgY2xhc3NlcwogCiAgICAg
dmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1RleHQuaWRsIGIvV2ViQ29yZS9kb20vVGV4dC5pZGwKaW5kZXggYzA0MjZlYS4uMWIwMDA5ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5pZGwKKysrIGIvV2ViQ29yZS9kb20vVGV4dC5p
ZGwKQEAgLTMwLDYgKzMwLDEwIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgVGV4dCBzcGxpdFRl
eHQoaW4gW0lzSW5kZXhdIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogICAgICAgICAgICAgcmFpc2Vz
IChET01FeGNlcHRpb24pOwogCisgICAgICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgd2hvbGVUZXh0Owor
ICAgICAgICBUZXh0ICAgICAgICAgICAgICAgcmVwbGFjZVdob2xlVGV4dChpbiBET01TdHJpbmcg
Y29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIAogfQo=
</data>
<flag name="review"
          id="8281"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18996</attachid>
            <date>2008-02-07 23:52:25 -0800</date>
            <delta_ts>2008-02-08 00:05:58 -0800</delta_ts>
            <desc>Address Darin&apos;s concerns (delta from previous patch)</desc>
            <filename>Address-Darin-s-concerns.patch</filename>
            <type>text/plain</type>
            <size>8476</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NTNiOGUwYTY1OWMwNGEzNTc0YWIxNThlZWViMjY2NzJiMzhmYWQwYgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5
LWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDljM2QyY2UuLjQxY2IzNmQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRp
b25zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVu
Y2UvcmVhZG9ubHktZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKQEAgLTEwLDExICsxMCwxMSBAQCBQ
QVNTIGVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgaXMgbnVsbAogUEFTUyBlbnRpdHlSZWZlcmVu
Y2UucHJlZml4ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOQU1FU1BBQ0VfRVJSOiBE
T00gRXhjZXB0aW9uIDE0LgogUEFTUyBlbnRpdHlSZWZlcmVuY2UucHJlZml4IGlzIG51bGwKIFBB
U1MgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4KLVBBU1Mg
ZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IGlzICcnCi1QQVNTIGNoaWxkcmVuQmVmb3JlRmFp
bGVkQXBwZW5kIGlzIDAKK0ZBSUwgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IHNob3VsZCBi
ZSA+LiBXYXMgLgorRkFJTCBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCBzaG91bGQgYmUgMS4g
V2FzIDAuCiBQQVNTIGVudGl0eVJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0ZXh0KSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogRE9NIEV4Y2VwdGlvbiA3
LgogUEFTUyBlbnRpdHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGggaXMgY2hpbGRyZW5CZWZv
cmVGYWlsZWRBcHBlbmQKLVBBU1MgY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQgaXMgMAorRkFJ
TCBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCBzaG91bGQgYmUgMS4gV2FzIDAuCiBQQVNTIGVu
dGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4dCwgZW50aXR5UmVmZXJlbmNlLmZpcnN0Q2hp
bGQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBE
T00gRXhjZXB0aW9uIDcuCiBQQVNTIGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCBp
cyBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3Jl
c291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50
aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzCmluZGV4IDA4ZTEz
NTEuLmU5Nzg3MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVy
ZW5jZS9yZXNvdXJjZXMvcmVhZG9ubHktZXhjZXB0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMK
QEAgLTE3LDE2ICsxNywxNiBAQCBzaG91bGRUaHJvdygiZW50aXR5UmVmZXJlbmNlLnByZWZpeCA9
ICdmb28nIik7CiBzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLnByZWZpeCIsICJudWxsIik7CiAK
IHNob3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2UudGV4dENvbnRlbnQgPSAnZm9vJyIpOwotc2hv
dWxkQmUoImVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCIsICInJyIpOyAvLyBjaGFuZ2UgdG8g
JzwnIHdoZW4gd2Ugc3VwcG9ydCBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMKK3Nob3VsZEJlKCJlbnRp
dHlSZWZlcmVuY2UudGV4dENvbnRlbnQiLCAiJz4nIik7CiAKIHZhciBjaGlsZHJlbkJlZm9yZUZh
aWxlZEFwcGVuZCA9IGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKLXNob3VsZEJl
KCJjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCIsICIwIik7IC8vIENoYW5nZSB0byAxIGlmIEVu
dGl0eSBub2RlIHN1cHBvcnQgaXMgYWRkZWQuCitzaG91bGRCZSgiY2hpbGRyZW5CZWZvcmVGYWls
ZWRBcHBlbmQiLCAiMSIpOwogdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiRkFJ
TCIpOwogc2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0ZXh0KSIpOwog
c2hvdWxkQmUoImVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCIsICJjaGlsZHJlbkJl
Zm9yZUZhaWxlZEFwcGVuZCIpOwogCiBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCA9IGVudGl0
eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKLXNob3VsZEJlKCJjaGlsZHJlbkJlZm9yZUZh
aWxlZEFwcGVuZCIsICIwIik7IC8vIENoYW5nZSB0byAxIGlmIEVudGl0eSBub2RlIHN1cHBvcnQg
aXMgYWRkZWQuCitzaG91bGRCZSgiY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQiLCAiMSIpOwog
c2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4dCwgZW50aXR5UmVm
ZXJlbmNlLmZpcnN0Q2hpbGQpIik7CiBzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLmNoaWxkTm9k
ZXMubGVuZ3RoIiwgImNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIik7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggYWY5OTA3
NC4uOWM5YTRjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vVGV4dC5jcHAKQEAgLTg3LDQ5ICs4Nyw1NSBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6
OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBuZXdUZXh0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFRleHQqIGVhcmxpZXN0TG9naWNhbGx5
QWRqYWNlbnRUZXh0Tm9kZShUZXh0KiB0KQorc3RhdGljIGNvbnN0IFRleHQqIGVhcmxpZXN0TG9n
aWNhbGx5QWRqYWNlbnRUZXh0Tm9kZShjb25zdCBUZXh0KiB0KQogewotICAgIE5vZGUqIG4gPSB0
OworICAgIGNvbnN0IE5vZGUqIG4gPSB0OwogICAgIHdoaWxlICgobiA9IG4tPnByZXZpb3VzU2li
bGluZygpKSkgewotICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTlRJVFlfUkVG
RVJFTkNFX05PREUpIHsKKyAgICAgICAgc3dpdGNoKG4tPm5vZGVUeXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAgICAgICAvLyBXZSB3b3Vs
ZCBuZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBjaGlsZCB0ZXh0IG5vZGVzIGlmIHRoZXkg
ZXhpc3RlZAogICAgICAgICAgICAgQVNTRVJUKCFuLT5oYXNDaGlsZE5vZGVzKCkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkpCisg
ICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NF
Q1RJT05fTk9ERToKKyAgICAgICAgICAgIHQgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obik7
CisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgdCA9IHN0YXRp
Y19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdDsKIH0KIAot
c3RhdGljIFRleHQqIGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoVGV4dCogdCkKK3N0
YXRpYyBjb25zdCBUZXh0KiBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKGNvbnN0IFRl
eHQqIHQpCiB7Ci0gICAgTm9kZSogbiA9IHQ7CisgICAgY29uc3QgTm9kZSogbiA9IHQ7CiAgICAg
d2hpbGUgKChuID0gbi0+bmV4dFNpYmxpbmcoKSkpIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKSB7CisgICAgICAgIHN3aXRjaChuLT5u
b2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgog
ICAgICAgICAgICAgLy8gV2Ugd291bGQgbmVlZCB0byB2aXNpdCBFbnRpdHlSZWZlcmVuY2UgY2hp
bGQgdGV4dCBub2RlcyBpZiB0aGV5IGV4aXN0ZWQKICAgICAgICAgICAgIEFTU0VSVCghbi0+aGFz
Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghbi0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAg
ICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgICAgICB0ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOworICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIHQ7CiB9CiAKLVN0cmluZyBUZXh0Ojp3aG9sZVRleHQoKQorU3RyaW5nIFRl
eHQ6Ondob2xlVGV4dCgpIGNvbnN0CiB7Ci0gICAgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RM
b2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwotICAgIFRleHQqIGVuZFRleHQgPSBsYXRl
c3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworICAgIGNvbnN0IFRleHQqIHN0YXJ0
VGV4dCA9IGVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSh0aGlzKTsKKyAgICBjb25z
dCBUZXh0KiBlbmRUZXh0ID0gbGF0ZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSh0aGlzKTsK
IAogICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwogICAgIE5vZGUqIG9uZVBhc3RFbmRUZXh0ID0g
ZW5kVGV4dC0+bmV4dFNpYmxpbmcoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydFRleHQ7IG4g
IT0gb25lUGFzdEVuZFRleHQ7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChjb25z
dCBOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IG9uZVBhc3RFbmRUZXh0OyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAoIW4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOworICAgICAg
ICBjb25zdCBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOwogICAgICAgICBj
b25zdCBTdHJpbmcmIGRhdGEgPSB0LT5kYXRhKCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0
YS5jaGFyYWN0ZXJzKCksIGRhdGEubGVuZ3RoKCkpOwogICAgIH0KQEAgLTEzNyw0MyArMTQzLDQz
IEBAIFN0cmluZyBUZXh0Ojp3aG9sZVRleHQoKQogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdCk7CiB9CiAKLVRleHQqIFRleHQ6OnJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3RyaW5nJiBu
ZXdUZXh0LCBFeGNlcHRpb25Db2RlJikKK1Bhc3NSZWZQdHI8VGV4dD4gVGV4dDo6cmVwbGFjZVdo
b2xlVGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgInJlYWQtb25seSIgdGV4dCBub2RlcyAobm8gRW50aXR5IG5vZGUg
c3VwcG9ydCkKICAgICAvLyBUaHVzLCB3ZSByZW1vdmUgYWxsIGFkamFjZW50IHRleHQgbm9kZXMs
IGFuZCByZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGlzIG9uZS4KICAgICBBU1NFUlQoIWlzUmVh
ZE9ubHlOb2RlKCkpOwogICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgcmFpc2VzIGV4Y2VwdGlvbnMg
d2hlbiBkZWFsaW5nIHdpdGggRW50aXR5IG5vZGVzICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0KQog
Ci0gICAgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2Rl
KHRoaXMpOwotICAgIFRleHQqIGVuZFRleHQgPSBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHRO
b2RlKHRoaXMpOworICAgIC8vIFByb3RlY3Qgc3RhcnRUZXh0IGFuZCBlbmRUZXh0IGFnYWluc3Qg
bXV0YXRpb24gZXZlbnQgaGFuZGxlcnMgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmCisgICAgUmVmUHRy
PFRleHQ+IHN0YXJ0VGV4dCA9IGNvbnN0X2Nhc3Q8VGV4dCo+KGVhcmxpZXN0TG9naWNhbGx5QWRq
YWNlbnRUZXh0Tm9kZSh0aGlzKSk7CisgICAgUmVmUHRyPFRleHQ+IGVuZFRleHQgPSBjb25zdF9j
YXN0PFRleHQqPihsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpKTsKIAorICAg
IFJlZlB0cjxUZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOyAvLyBNdXRhdGlvbiBldmVudCBoYW5k
bGVycyBjb3VsZCBjYXVzZSBvdXIgbGFzdCByZWYgdG8gZ28gYXdheQorICAgIE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2FpbnN0IG11dGF0aW9uIGhhbmRsZXJzIG1v
dmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAogICAgIEV4Y2VwdGlvbkNvZGUgaWdub3Jl
ZCA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IHRoaXM7KSB7Ci0gICAg
ICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG47CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbiA9IHN0
YXJ0VGV4dDsgbiAhPSB0aGlzICYmIG4tPmlzVGV4dE5vZGUoKSAmJiBwYXJlbnROb2RlKCkgPT0g
cGFyZW50OykgeworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZVRvUmVtb3ZlKG4ucmVsZWFzZSgp
KTsKICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+
cmVtb3ZlQ2hpbGQobm9kZVRvUmVtb3ZlLCBpZ25vcmVkKTsKLSAgICAgICAgQVNTRVJUKCFpZ25v
cmVkKTsKKyAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlVG9SZW1vdmUuZ2V0KCksIGln
bm9yZWQpOwogICAgIH0KIAogICAgIGlmICh0aGlzICE9IGVuZFRleHQpIHsKICAgICAgICAgTm9k
ZSogb25lUGFzdEVuZFRleHQgPSBlbmRUZXh0LT5uZXh0U2libGluZygpOwotICAgICAgICBmb3Ig
KE5vZGUqIG4gPSBuZXh0U2libGluZygpOyBuICE9IG9uZVBhc3RFbmRUZXh0OykgewotICAgICAg
ICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbjsKKyAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4g
biA9IG5leHRTaWJsaW5nKCk7IG4gJiYgbi0+aXNUZXh0Tm9kZSgpICYmIChuICE9IG9uZVBhc3RF
bmRUZXh0KSAmJiBwYXJlbnROb2RlKCkgPT0gcGFyZW50OykgeworICAgICAgICAgICAgUmVmUHRy
PE5vZGU+IG5vZGVUb1JlbW92ZShuLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZVRv
UmVtb3ZlLCBpZ25vcmVkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZCk7CisgICAgICAg
ICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGVUb1JlbW92ZS5nZXQoKSwgaWdub3JlZCk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobmV3VGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKHBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQo
dGhpcywgaWdub3JlZCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50Tm9kZSgpID09IHBh
cmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQodGhpcywgaWdub3JlZCk7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHNldERhdGEobmV3VGV4dCwgaWdub3JlZCk7
Ci0gICAgQVNTRVJUKCFpZ25vcmVkKTsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gcHJv
dGVjdGVkVGhpcy5yZWxlYXNlKCk7CiB9CiAKIFN0cmluZyBUZXh0Ojpub2RlTmFtZSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmggYi9XZWJDb3JlL2RvbS9UZXh0LmgKaW5k
ZXggMTk3NGNkNS4uNDMzZDNlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5oCisrKyBi
L1dlYkNvcmUvZG9tL1RleHQuaApAQCAtNDAsOCArNDAsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBET00gTGV2ZWwgMzogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29y
ZS9jb3JlLmh0bWwjSUQtMTMxMjI5NTc3MgotICAgIFN0cmluZyB3aG9sZVRleHQoKTsKLSAgICBU
ZXh0KiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBTdHJpbmcgd2hvbGVUZXh0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUZXh0PiByZXBsYWNl
V2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIERPTSBt
ZXRob2RzIG92ZXJyaWRkZW4gZnJvbSBwYXJlbnQgY2xhc3NlcwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18997</attachid>
            <date>2008-02-08 00:05:23 -0800</date>
            <delta_ts>2008-02-08 00:26:57 -0800</delta_ts>
            <desc>Address Darin&apos;s concerns (delta from previous patch)</desc>
            <filename>Address-Darin-s-concerns-delta-from-previous-patch-.patch</filename>
            <type>text/plain</type>
            <size>8485</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OGMyZWQxZDc4NjdiNmNjODUyOGJkM2NhY2U1NmRmYjNiNzNlMDE3ZgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5
LWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDljM2QyY2UuLjQxY2IzNmQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRp
b25zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVu
Y2UvcmVhZG9ubHktZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKQEAgLTEwLDExICsxMCwxMSBAQCBQ
QVNTIGVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgaXMgbnVsbAogUEFTUyBlbnRpdHlSZWZlcmVu
Y2UucHJlZml4ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOQU1FU1BBQ0VfRVJSOiBE
T00gRXhjZXB0aW9uIDE0LgogUEFTUyBlbnRpdHlSZWZlcmVuY2UucHJlZml4IGlzIG51bGwKIFBB
U1MgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4KLVBBU1Mg
ZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IGlzICcnCi1QQVNTIGNoaWxkcmVuQmVmb3JlRmFp
bGVkQXBwZW5kIGlzIDAKK0ZBSUwgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IHNob3VsZCBi
ZSA+LiBXYXMgLgorRkFJTCBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCBzaG91bGQgYmUgMS4g
V2FzIDAuCiBQQVNTIGVudGl0eVJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0ZXh0KSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogRE9NIEV4Y2VwdGlvbiA3
LgogUEFTUyBlbnRpdHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGggaXMgY2hpbGRyZW5CZWZv
cmVGYWlsZWRBcHBlbmQKLVBBU1MgY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQgaXMgMAorRkFJ
TCBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCBzaG91bGQgYmUgMS4gV2FzIDAuCiBQQVNTIGVu
dGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4dCwgZW50aXR5UmVmZXJlbmNlLmZpcnN0Q2hp
bGQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBE
T00gRXhjZXB0aW9uIDcuCiBQQVNTIGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCBp
cyBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3Jl
c291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50
aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzCmluZGV4IDA4ZTEz
NTEuLmU5Nzg3MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVy
ZW5jZS9yZXNvdXJjZXMvcmVhZG9ubHktZXhjZXB0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMK
QEAgLTE3LDE2ICsxNywxNiBAQCBzaG91bGRUaHJvdygiZW50aXR5UmVmZXJlbmNlLnByZWZpeCA9
ICdmb28nIik7CiBzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLnByZWZpeCIsICJudWxsIik7CiAK
IHNob3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2UudGV4dENvbnRlbnQgPSAnZm9vJyIpOwotc2hv
dWxkQmUoImVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCIsICInJyIpOyAvLyBjaGFuZ2UgdG8g
JzwnIHdoZW4gd2Ugc3VwcG9ydCBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMKK3Nob3VsZEJlKCJlbnRp
dHlSZWZlcmVuY2UudGV4dENvbnRlbnQiLCAiJz4nIik7CiAKIHZhciBjaGlsZHJlbkJlZm9yZUZh
aWxlZEFwcGVuZCA9IGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKLXNob3VsZEJl
KCJjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCIsICIwIik7IC8vIENoYW5nZSB0byAxIGlmIEVu
dGl0eSBub2RlIHN1cHBvcnQgaXMgYWRkZWQuCitzaG91bGRCZSgiY2hpbGRyZW5CZWZvcmVGYWls
ZWRBcHBlbmQiLCAiMSIpOwogdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiRkFJ
TCIpOwogc2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0ZXh0KSIpOwog
c2hvdWxkQmUoImVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCIsICJjaGlsZHJlbkJl
Zm9yZUZhaWxlZEFwcGVuZCIpOwogCiBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCA9IGVudGl0
eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKLXNob3VsZEJlKCJjaGlsZHJlbkJlZm9yZUZh
aWxlZEFwcGVuZCIsICIwIik7IC8vIENoYW5nZSB0byAxIGlmIEVudGl0eSBub2RlIHN1cHBvcnQg
aXMgYWRkZWQuCitzaG91bGRCZSgiY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQiLCAiMSIpOwog
c2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4dCwgZW50aXR5UmVm
ZXJlbmNlLmZpcnN0Q2hpbGQpIik7CiBzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLmNoaWxkTm9k
ZXMubGVuZ3RoIiwgImNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIik7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggYWY5OTA3
NC4uOTc5MGJmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vVGV4dC5jcHAKQEAgLTg3LDQ5ICs4Nyw1NSBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6
OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBuZXdUZXh0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFRleHQqIGVhcmxpZXN0TG9naWNhbGx5
QWRqYWNlbnRUZXh0Tm9kZShUZXh0KiB0KQorc3RhdGljIGNvbnN0IFRleHQqIGVhcmxpZXN0TG9n
aWNhbGx5QWRqYWNlbnRUZXh0Tm9kZShjb25zdCBUZXh0KiB0KQogewotICAgIE5vZGUqIG4gPSB0
OworICAgIGNvbnN0IE5vZGUqIG4gPSB0OwogICAgIHdoaWxlICgobiA9IG4tPnByZXZpb3VzU2li
bGluZygpKSkgewotICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTlRJVFlfUkVG
RVJFTkNFX05PREUpIHsKKyAgICAgICAgc3dpdGNoKG4tPm5vZGVUeXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAgICAgICAvLyBXZSB3b3Vs
ZCBuZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBjaGlsZCB0ZXh0IG5vZGVzIGlmIHRoZXkg
ZXhpc3RlZAogICAgICAgICAgICAgQVNTRVJUKCFuLT5oYXNDaGlsZE5vZGVzKCkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkpCisg
ICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NF
Q1RJT05fTk9ERToKKyAgICAgICAgICAgIHQgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obik7
CisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgdCA9IHN0YXRp
Y19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdDsKIH0KIAot
c3RhdGljIFRleHQqIGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoVGV4dCogdCkKK3N0
YXRpYyBjb25zdCBUZXh0KiBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKGNvbnN0IFRl
eHQqIHQpCiB7Ci0gICAgTm9kZSogbiA9IHQ7CisgICAgY29uc3QgTm9kZSogbiA9IHQ7CiAgICAg
d2hpbGUgKChuID0gbi0+bmV4dFNpYmxpbmcoKSkpIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKSB7CisgICAgICAgIHN3aXRjaChuLT5u
b2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgog
ICAgICAgICAgICAgLy8gV2Ugd291bGQgbmVlZCB0byB2aXNpdCBFbnRpdHlSZWZlcmVuY2UgY2hp
bGQgdGV4dCBub2RlcyBpZiB0aGV5IGV4aXN0ZWQKICAgICAgICAgICAgIEFTU0VSVCghbi0+aGFz
Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghbi0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAg
ICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgICAgICB0ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOworICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CisgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIHQ7CiB9CiAKLVN0cmluZyBUZXh0Ojp3aG9sZVRleHQoKQorU3RyaW5nIFRl
eHQ6Ondob2xlVGV4dCgpIGNvbnN0CiB7Ci0gICAgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RM
b2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwotICAgIFRleHQqIGVuZFRleHQgPSBsYXRl
c3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworICAgIGNvbnN0IFRleHQqIHN0YXJ0
VGV4dCA9IGVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSh0aGlzKTsKKyAgICBjb25z
dCBUZXh0KiBlbmRUZXh0ID0gbGF0ZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSh0aGlzKTsK
IAogICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwogICAgIE5vZGUqIG9uZVBhc3RFbmRUZXh0ID0g
ZW5kVGV4dC0+bmV4dFNpYmxpbmcoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydFRleHQ7IG4g
IT0gb25lUGFzdEVuZFRleHQ7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChjb25z
dCBOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IG9uZVBhc3RFbmRUZXh0OyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAoIW4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOworICAgICAg
ICBjb25zdCBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOwogICAgICAgICBj
b25zdCBTdHJpbmcmIGRhdGEgPSB0LT5kYXRhKCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0
YS5jaGFyYWN0ZXJzKCksIGRhdGEubGVuZ3RoKCkpOwogICAgIH0KQEAgLTEzNyw0MyArMTQzLDQz
IEBAIFN0cmluZyBUZXh0Ojp3aG9sZVRleHQoKQogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJl
c3VsdCk7CiB9CiAKLVRleHQqIFRleHQ6OnJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3RyaW5nJiBu
ZXdUZXh0LCBFeGNlcHRpb25Db2RlJikKK1Bhc3NSZWZQdHI8VGV4dD4gVGV4dDo6cmVwbGFjZVdo
b2xlVGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgInJlYWQtb25seSIgdGV4dCBub2RlcyAobm8gRW50aXR5IG5vZGUg
c3VwcG9ydCkKICAgICAvLyBUaHVzLCB3ZSByZW1vdmUgYWxsIGFkamFjZW50IHRleHQgbm9kZXMs
IGFuZCByZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGlzIG9uZS4KICAgICBBU1NFUlQoIWlzUmVh
ZE9ubHlOb2RlKCkpOwogICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgcmFpc2VzIGV4Y2VwdGlvbnMg
d2hlbiBkZWFsaW5nIHdpdGggRW50aXR5IG5vZGVzICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0KQog
Ci0gICAgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2Rl
KHRoaXMpOwotICAgIFRleHQqIGVuZFRleHQgPSBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHRO
b2RlKHRoaXMpOworICAgIC8vIFByb3RlY3Qgc3RhcnRUZXh0IGFuZCBlbmRUZXh0IGFnYWluc3Qg
bXV0YXRpb24gZXZlbnQgaGFuZGxlcnMgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmCisgICAgUmVmUHRy
PFRleHQ+IHN0YXJ0VGV4dCA9IGNvbnN0X2Nhc3Q8VGV4dCo+KGVhcmxpZXN0TG9naWNhbGx5QWRq
YWNlbnRUZXh0Tm9kZSh0aGlzKSk7CisgICAgUmVmUHRyPFRleHQ+IGVuZFRleHQgPSBjb25zdF9j
YXN0PFRleHQqPihsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpKTsKIAorICAg
IFJlZlB0cjxUZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOyAvLyBNdXRhdGlvbiBldmVudCBoYW5k
bGVycyBjb3VsZCBjYXVzZSBvdXIgbGFzdCByZWYgdG8gZ28gYXdheQorICAgIE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2FpbnN0IG11dGF0aW9uIGhhbmRsZXJzIG1v
dmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAogICAgIEV4Y2VwdGlvbkNvZGUgaWdub3Jl
ZCA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IHRoaXM7KSB7Ci0gICAg
ICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG47CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbiA9IHN0
YXJ0VGV4dDsgbiAmJiBuICE9IHRoaXMgJiYgbi0+aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVudE5v
ZGUoKSA9PSBwYXJlbnQ7KSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlVG9SZW1vdmUobi5y
ZWxlYXNlKCkpOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50
Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlVG9SZW1vdmUsIGlnbm9yZWQpOwotICAgICAgICBBU1NF
UlQoIWlnbm9yZWQpOworICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGVUb1JlbW92ZS5n
ZXQoKSwgaWdub3JlZCk7CiAgICAgfQogCiAgICAgaWYgKHRoaXMgIT0gZW5kVGV4dCkgewogICAg
ICAgICBOb2RlKiBvbmVQYXN0RW5kVGV4dCA9IGVuZFRleHQtPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgIGZvciAoTm9kZSogbiA9IG5leHRTaWJsaW5nKCk7IG4gIT0gb25lUGFzdEVuZFRleHQ7KSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBuOworICAgICAgICBmb3IgKFJlZlB0
cjxOb2RlPiBuID0gbmV4dFNpYmxpbmcoKTsgbiAmJiBuICE9IG9uZVBhc3RFbmRUZXh0ICYmIG4t
PmlzVGV4dE5vZGUoKSAmJiBuLT5wYXJlbnROb2RlKCkgPT0gcGFyZW50OykgeworICAgICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5vZGVUb1JlbW92ZShuLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBu
ID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hp
bGQobm9kZVRvUmVtb3ZlLCBpZ25vcmVkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZCk7
CisgICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGVUb1JlbW92ZS5nZXQoKSwgaWdu
b3JlZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobmV3VGV4dC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKHBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHBhcmVudE5vZGUoKS0+cmVt
b3ZlQ2hpbGQodGhpcywgaWdub3JlZCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50Tm9k
ZSgpID09IHBhcmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQodGhpcywgaWdu
b3JlZCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHNldERhdGEobmV3VGV4dCwg
aWdub3JlZCk7Ci0gICAgQVNTRVJUKCFpZ25vcmVkKTsKLSAgICByZXR1cm4gdGhpczsKKyAgICBy
ZXR1cm4gcHJvdGVjdGVkVGhpcy5yZWxlYXNlKCk7CiB9CiAKIFN0cmluZyBUZXh0Ojpub2RlTmFt
ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmggYi9XZWJDb3JlL2RvbS9U
ZXh0LmgKaW5kZXggMTk3NGNkNS4uNDMzZDNlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4
dC5oCisrKyBiL1dlYkNvcmUvZG9tL1RleHQuaApAQCAtNDAsOCArNDAsOCBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICAvLyBET00gTGV2ZWwgMzogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxl
dmVsLTMtQ29yZS9jb3JlLmh0bWwjSUQtMTMxMjI5NTc3MgotICAgIFN0cmluZyB3aG9sZVRleHQo
KTsKLSAgICBUZXh0KiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBTdHJpbmcgd2hvbGVUZXh0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUZXh0
PiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAg
IC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSBwYXJlbnQgY2xhc3NlcwogCg==
</data>
<flag name="review"
          id="8300"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18999</attachid>
            <date>2008-02-08 00:26:16 -0800</date>
            <delta_ts>2008-02-08 00:53:51 -0800</delta_ts>
            <desc>Add wholeText/replaceWholeText support (final squashed patch, tests all pass)</desc>
            <filename>Add-wholeText-replaceWholeText-support-final-squashed-patch-tests-all-pass-.patch</filename>
            <type>text/plain</type>
            <size>19646</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZmYxMjYyMzMzZWVkOGFiNmRmMjIzMWRkOTdmZTRlYjJjMjA4NWY3ZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRhZDY0ODcu
LjBmOWNhMmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAwOC0wMi0wMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRleHQud2hvbGVUZXh0IGFuZCBUZXh0LnJlcGxh
Y2VXaG9sZVRleHQgZnJvbSBET00gTGV2ZWwgMyBDb3JlLgorICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEyNQorICAgICAgICAKKyAgICAgICAgVGVzdCB0
byBtYWtlIHN1cmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBy
ZWFkLW9ubHkuCisKKyAgICAgICAgQWxsIG9mIHRoZXNlIHRlc3RzIG5vdyBwYXNzLgorCisgICAg
ICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDAyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4
dHJlcGxhY2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
Ni1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMv
Y29yZS90ZXh0d2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25z
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRW50aXR5UmVmZXJlbmNl
L3Jlc291cmNlcy9URU1QTEFURS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbnRp
dHlSZWZlcmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanM6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6IHVw
ZGF0ZWQgdG8gcmVmbGVjdCBhZGRpdGlvbiBvZiByZXBsYWNlV2hvbGVUZXh0CisKIDIwMDgtMDIt
MDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9j
b3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9t
L3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0Cmlu
ZGV4IDE4ZDBlYmUuLmMyMzNhMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMS1leHBl
Y3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9N
LVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMQotU3RhdHVzCWVy
cm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1bHQgb2YgZXhwcmVz
c2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0LgorU3RhdHVzCVN1
Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0
cmVwbGFjZXdob2xldGV4dDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAyLWV4cGVjdGVkLnR4dAppbmRleCBkNWI5
MzZhLi5mOTQ5NDFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0
CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDIKLVN0YXR1cwllcnJvcgotTWVz
c2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVuZGVmaW5lZCAocmVzdWx0IG9mIGV4cHJlc3Npb24gdGV4
dE5vZGUucmVwbGFjZVdob2xlVGV4dCkgaXMgbm90IG9iamVjdC4KK1N0YXR1cwlTdWNjZXNzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3
aG9sZXRleHQwMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKaW5kZXggMGZmNDZmOC4uMGU5
YzI3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRy
ZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRt
bC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAzLWV4cGVjdGVkLnR4dApAQCAtMSwz
ICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZl
bDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAzCi1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlw
ZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJl
cGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0
MDQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRy
ZXBsYWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQudHh0CmluZGV4IGQ1ODBlNzcuLmM2YjEzMGIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdo
b2xldGV4dDA0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNC1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBA
CiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUv
dGV4dHJlcGxhY2V3aG9sZXRleHQwNAotU3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjog
VmFsdWUgdW5kZWZpbmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hv
bGVUZXh0KSBpcyBub3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdo
b2xldGV4dDA1LWV4cGVjdGVkLnR4dAppbmRleCA1YzA0NzRlLi5iOWIyY2FlIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
NS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3Rl
eHRyZXBsYWNld2hvbGV0ZXh0MDUtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDUKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVu
ZGVmaW5lZCAocmVzdWx0IG9mIGV4cHJlc3Npb24gdGV4dE5vZGUucmVwbGFjZVdob2xlVGV4dCkg
aXMgbm90IG9iamVjdC4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9k
b20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNi1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
Ni1leHBlY3RlZC50eHQKaW5kZXggOTY2ODZiZC4uOTI1YTM4MCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDYtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFj
ZXdob2xldGV4dDA2LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDA2Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQg
KHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBv
YmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDctZXhwZWN0
ZWQudHh0CmluZGV4IGMwMTIyZTQuLjEwNzVlY2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRl
eHQwNy1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNwot
U3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1bHQg
b2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0Lgor
U3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMv
Y29yZS90ZXh0d2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1s
L2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKaW5kZXggN2MxYmY1Yy4u
ZjNkYWE0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3Rl
eHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBU
ZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4
dHdob2xldGV4dDAxCi1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQl0ZXh0d2hvbGV0ZXh0MDE6IGFz
c2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCBudWxsLCBleHBlY3RlZCBNYXJnYXJldCBNYXJ0aW4u
CitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHR3aG9sZXRleHQwMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0
bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dAppbmRleCA2MjM2ODgz
Li5hYmY5Mzk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
dGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAK
IFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90
ZXh0d2hvbGV0ZXh0MDIKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3aG9sZXRleHQwMjog
YXNzZXJ0RXF1YWxzIGZhaWxlZCwgYWN0dWFsIG51bGwsIGV4cGVjdGVkIE1hcmdhcmV0IE1hcnRp
bk5ldyBUZXh0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKaW5k
ZXggYjA5OWQ5NC4uYWU2OGY3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQKQEAgLTEs
MyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2
ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAzCi1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQl0ZXh0d2hv
bGV0ZXh0MDM6IGFzc2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCBudWxsLCBleHBlY3RlZCBUZXh0
IEkgVGV4dCBJSS4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVhZG9ubHktZXhjZXB0aW9ucy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVhZG9ubHktZXhjZXB0aW9ucy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjYjM2ZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9y
ZWFkb25seS1leGNlcHRpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACitUZXN0IHRv
IG1ha2Ugc3VyZSBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMgYXJlIGFsd2F5cyB0cmVhdGVkIHJlYWRv
bmx5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHhtbERvYzIuYWRvcHRO
b2RlKGVudGl0eVJlZmVyZW5jZSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4KK1BBU1MgZW50aXR5UmVmZXJlbmNlLm93
bmVyRG9jdW1lbnQgaXMgeG1sRG9jCitQQVNTIGVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgPSAn
Zm9vJyB0aHJldyBleGNlcHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjog
RE9NIEV4Y2VwdGlvbiA3LgorUEFTUyBlbnRpdHlSZWZlcmVuY2Uubm9kZVZhbHVlIGlzIG51bGwK
K1BBU1MgZW50aXR5UmVmZXJlbmNlLnByZWZpeCA9ICdmb28nIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogTkFNRVNQQUNFX0VSUjogRE9NIEV4Y2VwdGlvbiAxNC4KK1BBU1MgZW50aXR5UmVmZXJlbmNl
LnByZWZpeCBpcyBudWxsCitQQVNTIGVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCA9ICdmb28n
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBET00g
RXhjZXB0aW9uIDcuCitGQUlMIGVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCBzaG91bGQgYmUg
Pi4gV2FzIC4KK0ZBSUwgY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQgc2hvdWxkIGJlIDEuIFdh
cyAwLgorUEFTUyBlbnRpdHlSZWZlcmVuY2UuYXBwZW5kQ2hpbGQodGV4dCkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4K
K1BBU1MgZW50aXR5UmVmZXJlbmNlLmNoaWxkTm9kZXMubGVuZ3RoIGlzIGNoaWxkcmVuQmVmb3Jl
RmFpbGVkQXBwZW5kCitGQUlMIGNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIHNob3VsZCBiZSAx
LiBXYXMgMC4KK1BBU1MgZW50aXR5UmVmZXJlbmNlLmluc2VydEJlZm9yZSh0ZXh0LCBlbnRpdHlS
ZWZlcmVuY2UuZmlyc3RDaGlsZCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4KK1BBU1MgZW50aXR5UmVmZXJlbmNlLmNo
aWxkTm9kZXMubGVuZ3RoIGlzIGNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRp
b25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5OWJiYwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZWFk
b25seS1leGNlcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWFkb25seS1leGNlcHRpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZXNvdXJjZXMvVEVNUExBVEUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUxYzQzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9U
RU1QTEFURS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJZT1VSX0pTX0ZJTEVfSEVSRSI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbnRpdHlSZWZl
cmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3ODcyOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZXNvdXJjZXMvcmVhZG9u
bHktZXhjZXB0aW9ucy5qcwpAQCAtMCwwICsxLDMzIEBACitkZXNjcmlwdGlvbigiVGVzdCB0byBt
YWtlIHN1cmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGFyZSBhbHdheXMgdHJlYXRlZCByZWFkb25s
eSIpCisKK3ZhciB4bWxEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVu
dCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJodG1sIiwgbnVsbCk7Cit2YXIgeG1s
RG9jMiA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiwgImh0bWwiLCBudWxsKTsKK3ZhciBlbnRpdHlSZWZlcmVuY2Ug
PSB4bWxEb2MuY3JlYXRlRW50aXR5UmVmZXJlbmNlKCJndCIpOworCitzaG91bGRUaHJvdygieG1s
RG9jMi5hZG9wdE5vZGUoZW50aXR5UmVmZXJlbmNlKSIpOworc2hvdWxkQmUoImVudGl0eVJlZmVy
ZW5jZS5vd25lckRvY3VtZW50IiwgInhtbERvYyIpCisKKy8vIG5vZGVWYWx1ZSBpcyBkZWZpbmVk
IHRvIGJlIG51bGwgZm9yIEVudGl0eSBSZWZlcmVuY2Ugbm9kZXMsIGFuZCB0aHVzIHNob3VsZCBz
aWxlbnRseSBmYWlsIHRvIG1vZGlmeQorLy8gU3BlYyBpcyBhbWJpZ2lvdXMgYXMgdG8gaWYgd2Ug
c2hvdWxkIHRocm93IGhlcmUgb3Igbm90LiAgSSd2ZSByZXF1ZXN0ZWQgY2xhcmlmaWNhdGlvbjoK
Ky8vIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAwOEphbk1h
ci8wMDA5Lmh0bWwKK3Nob3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2Uubm9kZVZhbHVlID0gJ2Zv
byciKTsKK3Nob3VsZEJlKCJlbnRpdHlSZWZlcmVuY2Uubm9kZVZhbHVlIiwgIm51bGwiKTsKKwor
c2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5wcmVmaXggPSAnZm9vJyIpOworc2hvdWxkQmUo
ImVudGl0eVJlZmVyZW5jZS5wcmVmaXgiLCAibnVsbCIpOworCitzaG91bGRUaHJvdygiZW50aXR5
UmVmZXJlbmNlLnRleHRDb250ZW50ID0gJ2ZvbyciKTsKK3Nob3VsZEJlKCJlbnRpdHlSZWZlcmVu
Y2UudGV4dENvbnRlbnQiLCAiJz4nIik7CisKK3ZhciBjaGlsZHJlbkJlZm9yZUZhaWxlZEFwcGVu
ZCA9IGVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aDsKK3Nob3VsZEJlKCJjaGlsZHJl
bkJlZm9yZUZhaWxlZEFwcGVuZCIsICIxIik7Cit2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJGQUlMIik7CitzaG91bGRUaHJvdygiZW50aXR5UmVmZXJlbmNlLmFwcGVuZENoaWxk
KHRleHQpIik7CitzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLmNoaWxkTm9kZXMubGVuZ3RoIiwg
ImNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIik7CisKK2NoaWxkcmVuQmVmb3JlRmFpbGVkQXBw
ZW5kID0gZW50aXR5UmVmZXJlbmNlLmNoaWxkTm9kZXMubGVuZ3RoOworc2hvdWxkQmUoImNoaWxk
cmVuQmVmb3JlRmFpbGVkQXBwZW5kIiwgIjEiKTsKK3Nob3VsZFRocm93KCJlbnRpdHlSZWZlcmVu
Y2UuaW5zZXJ0QmVmb3JlKHRleHQsIGVudGl0eVJlZmVyZW5jZS5maXJzdENoaWxkKSIpOworc2hv
dWxkQmUoImVudGl0eVJlZmVyZW5jZS5jaGlsZE5vZGVzLmxlbmd0aCIsICJjaGlsZHJlbkJlZm9y
ZUZhaWxlZEFwcGVuZCIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CmluZGV4IGI0OTM1YjkuLmIzODYwOWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4
dApAQCAtNjgsNiArNjgsNyBAQCB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZW1vdmVD
aGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZW1vdmVFdmVu
dExpc3RlbmVyIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnJlcGxh
Y2VDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZXBsYWNl
RGF0YSBbZnVuY3Rpb25dCit3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5yZXBsYWNlV2hv
bGVUZXh0IFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnNwbGl0VGV4
dCBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5zdWJzdHJpbmdEYXRh
IFtmdW5jdGlvbl0KIHdpbmRvdy5DU1NDaGFyc2V0UnVsZSBbb2JqZWN0IENTU0NoYXJzZXRSdWxl
Q29uc3RydWN0b3JdCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDM4ZmY2MjguLjJkODY3OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDItMDMg
IEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBUZXh0Lndob2xlVGV4dCBh
bmQgVGV4dC5yZXBsYWNlV2hvbGVUZXh0CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MTI1CisKKyAgICAgICAgVGVzdCBFbnRpdHlSZWZlcmVuY2VzIHRv
IG1ha2Ugc3VyZSB0aGV5J3JlIGFsd2F5cyB0cmVhdGVkIGFzIHJlYWQtb25seQorICAgICAgICBJ
biBkb2luZyBzbyBJIGRpc2NvdmVyZWQgYSBidWcgaW4gZG9jdW1lbnQuYWRvcHROb2RlKHJlYWRv
bmx5Tm9kZSkgKGFuZCBmaXhlZCBpdCkKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRvcHROb2RlKTogdGhyb3cgTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSIHdoZW4gcGFzc2VkIGEgcmVhZG9ubHkgbm9kZQorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjp0ZXh0Q29udGVudCk6CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dDo6d2hvbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OnJlcGxhY2VXaG9sZVRl
eHQpOgorICAgICAgICAqIGRvbS9UZXh0Lmg6CisgICAgICAgICogZG9tL1RleHQuaWRsOgorCiAy
MDA4LTAyLTA3ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBRdCBi
dWlsZCBmaXgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYTk5OTBkLi40NjE3MTMzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02
NzIsNyArNjcyLDEyIEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmFkb3B0Tm9kZShQYXNz
UmVmUHRyPE5vZGU+IHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKworICAgIGlm
IChzb3VyY2UtPmlzUmVhZE9ubHlOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHN3aXRjaCAo
c291cmNlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRU5USVRZX05PREU6CiAgICAgICAg
IGNhc2UgTk9UQVRJT05fTk9ERToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIv
V2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNGI5MjY3OC4uZTUzZDMwZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE1MzYs
NyArMTUzNiw3IEBAIFN0cmluZyBOb2RlOjp0ZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNUb05l
d2xpbmVzKSBjb25zdAogICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAg
Y2FzZSBOT1RBVElPTl9OT0RFOgogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9XZWJDb3JlL2RvbS9U
ZXh0LmNwcAppbmRleCA4NDgzYzEwLi5mYTAzODAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9U
ZXh0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtODcsNiArODcsMTAxIEBAIFBh
c3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgcmV0dXJuIG5ld1RleHQucmVsZWFzZSgpOwogfQogCitzdGF0aWMgY29u
c3QgVGV4dCogZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKGNvbnN0IFRleHQqIHQp
Cit7CisgICAgY29uc3QgTm9kZSogbiA9IHQ7CisgICAgd2hpbGUgKChuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCkpKSB7CisgICAgICAgIHN3aXRjaChuLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNh
c2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgLy8gV2Ugd291bGQg
bmVlZCB0byB2aXNpdCBFbnRpdHlSZWZlcmVuY2UgY2hpbGQgdGV4dCBub2RlcyBpZiB0aGV5IGV4
aXN0ZWQKKyAgICAgICAgICAgIEFTU0VSVCghbi0+aGFzQ2hpbGROb2RlcygpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgY2FzZSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgICAgICB0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVGV4dCo+KG4pOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBjb25zdCBUZXh0KiBsYXRl
c3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKGNvbnN0IFRleHQqIHQpCit7CisgICAgY29uc3Qg
Tm9kZSogbiA9IHQ7CisgICAgd2hpbGUgKChuID0gbi0+bmV4dFNpYmxpbmcoKSkpIHsKKyAgICAg
ICAgc3dpdGNoKG4tPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVG
RVJFTkNFX05PREU6CisgICAgICAgICAgICAvLyBXZSB3b3VsZCBuZWVkIHRvIHZpc2l0IEVudGl0
eVJlZmVyZW5jZSBjaGlsZCB0ZXh0IG5vZGVzIGlmIHRoZXkgZXhpc3RlZAorICAgICAgICAgICAg
QVNTRVJUKCFuLT5oYXNDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05f
Tk9ERToKKyAgICAgICAgICAgIHQgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obik7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdDsKK30KKworU3RyaW5nIFRleHQ6Ondob2xlVGV4dCgpIGNvbnN0Cit7CisgICAgY29u
c3QgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRo
aXMpOworICAgIGNvbnN0IFRleHQqIGVuZFRleHQgPSBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRl
eHROb2RlKHRoaXMpOworCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgTm9kZSogb25l
UGFzdEVuZFRleHQgPSBlbmRUZXh0LT5uZXh0U2libGluZygpOworICAgIGZvciAoY29uc3QgTm9k
ZSogbiA9IHN0YXJ0VGV4dDsgbiAhPSBvbmVQYXN0RW5kVGV4dDsgbiA9IG4tPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgY29uc3QgVGV4dCogdCA9IHN0YXRpY19jYXN0PGNvbnN0IFRleHQqPihuKTsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhID0gdC0+ZGF0YSgpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGRhdGEuY2hhcmFjdGVycygpLCBkYXRhLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitQYXNzUmVmUHRyPFRleHQ+IFRleHQ6
OnJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBFeGNlcHRpb25Db2RlJikK
K3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0ICJyZWFkLW9ubHkiIHRleHQgbm9kZXMgKG5vIEVu
dGl0eSBub2RlIHN1cHBvcnQpCisgICAgLy8gVGh1cywgd2UgcmVtb3ZlIGFsbCBhZGphY2VudCB0
ZXh0IG5vZGVzLCBhbmQgcmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhpcyBvbmUuCisgICAgQVNT
RVJUKCFpc1JlYWRPbmx5Tm9kZSgpKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHJhaXNlcyBl
eGNlcHRpb25zIHdoZW4gZGVhbGluZyB3aXRoIEVudGl0eSBub2RlcyAod2hpY2ggd2UgZG9uJ3Qg
c3VwcG9ydCkKKworICAgIC8vIFByb3RlY3Qgc3RhcnRUZXh0IGFuZCBlbmRUZXh0IGFnYWluc3Qg
bXV0YXRpb24gZXZlbnQgaGFuZGxlcnMgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmCisgICAgUmVmUHRy
PFRleHQ+IHN0YXJ0VGV4dCA9IGNvbnN0X2Nhc3Q8VGV4dCo+KGVhcmxpZXN0TG9naWNhbGx5QWRq
YWNlbnRUZXh0Tm9kZSh0aGlzKSk7CisgICAgUmVmUHRyPFRleHQ+IGVuZFRleHQgPSBjb25zdF9j
YXN0PFRleHQqPihsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpKTsKKworICAg
IFJlZlB0cjxUZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOyAvLyBNdXRhdGlvbiBldmVudCBoYW5k
bGVycyBjb3VsZCBjYXVzZSBvdXIgbGFzdCByZWYgdG8gZ28gYXdheQorICAgIE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2FpbnN0IG11dGF0aW9uIGhhbmRsZXJzIG1v
dmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAorICAgIEV4Y2VwdGlvbkNvZGUgaWdub3Jl
ZCA9IDA7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbiA9IHN0YXJ0VGV4dDsgbiAmJiBuICE9IHRo
aXMgJiYgbi0+aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVudE5vZGUoKSA9PSBwYXJlbnQ7KSB7Cisg
ICAgICAgIFJlZlB0cjxOb2RlPiBub2RlVG9SZW1vdmUobi5yZWxlYXNlKCkpOworICAgICAgICBu
ID0gbm9kZVRvUmVtb3ZlLT5uZXh0U2libGluZygpOworICAgICAgICBwYXJlbnQtPnJlbW92ZUNo
aWxkKG5vZGVUb1JlbW92ZS5nZXQoKSwgaWdub3JlZCk7CisgICAgfQorCisgICAgaWYgKHRoaXMg
IT0gZW5kVGV4dCkgeworICAgICAgICBOb2RlKiBvbmVQYXN0RW5kVGV4dCA9IGVuZFRleHQtPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IG4gPSBuZXh0U2libGluZygp
OyBuICYmIG4gIT0gb25lUGFzdEVuZFRleHQgJiYgbi0+aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVu
dE5vZGUoKSA9PSBwYXJlbnQ7KSB7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZVRvUmVt
b3ZlKG4ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG4gPSBub2RlVG9SZW1vdmUtPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGVUb1JlbW92ZS5nZXQo
KSwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmV3VGV4dC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnROb2RlKCkgPT0gcGFyZW50KQorICAg
ICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZCh0aGlzLCBpZ25vcmVkKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgc2V0RGF0YShuZXdUZXh0LCBpZ25vcmVkKTsKKyAgICByZXR1
cm4gcHJvdGVjdGVkVGhpcy5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBUZXh0Ojpub2RlTmFtZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHRleHRBdG9tLmRvbVN0cmluZygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vVGV4dC5oIGIvV2ViQ29yZS9kb20vVGV4dC5oCmluZGV4IDIwZWE1NGEuLjQz
M2QzZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RleHQuaAorKysgYi9XZWJDb3JlL2RvbS9U
ZXh0LmgKQEAgLTM5LDYgKzM5LDEwIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8VGV4dD4g
c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgLy8gRE9N
IExldmVsIDM6IGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUNvcmUvY29yZS5odG1s
I0lELTEzMTIyOTU3NzIKKyAgICBTdHJpbmcgd2hvbGVUZXh0KCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxUZXh0PiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKwogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSBwYXJlbnQgY2xhc3Nlcwog
CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL1RleHQuaWRsIGIvV2ViQ29yZS9kb20vVGV4dC5pZGwKaW5kZXggYzA0MjZlYS4uMWIw
MDA5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5pZGwKKysrIGIvV2ViQ29yZS9kb20v
VGV4dC5pZGwKQEAgLTMwLDYgKzMwLDEwIEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgVGV4dCBz
cGxpdFRleHQoaW4gW0lzSW5kZXhdIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogICAgICAgICAgICAg
cmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExl
dmVsIDM6CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgd2hvbGVU
ZXh0OworICAgICAgICBUZXh0ICAgICAgICAgICAgICAgcmVwbGFjZVdob2xlVGV4dChpbiBET01T
dHJpbmcgY29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19000</attachid>
            <date>2008-02-08 00:53:38 -0800</date>
            <delta_ts>2008-02-08 00:57:55 -0800</delta_ts>
            <desc>Add wholeText/replaceWholeText support (final squashed patch, tests all pass)</desc>
            <filename>Add-wholeText-replaceWholeText-support-final-squashed-patch-tests-all-pass-.patch</filename>
            <type>text/plain</type>
            <size>22577</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YmRjNDU1ZGZkMjc3Y2EwOTdiYTIyODA3ZWVlODllNjc0ZTg1ZDA2OQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRhZDY0ODcu
LjM0MTg0YTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOC0wMi0wOCAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRleHQud2hvbGVUZXh0IGFuZCBUZXh0LnJlcGxh
Y2VXaG9sZVRleHQgZnJvbSBET00gTGV2ZWwgMyBDb3JlLgorICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEyNQorICAgICAgICAKKyAgICAgICAgVGVzdCB0
byBtYWtlIHN1cmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBy
ZWFkLW9ubHkuCisKKyAgICAgICAgQWRkZWQgZmFzdC9kb20vVGV4dC9yZXBsYWNlV2hvbGVUZXh0
Lmh0bWwgdG8gY2F0Y2ggYSBjYXNlIHRoZSBXM0MgbWlzc2VkLgorCisgICAgICAgIEFsbCBvZiB0
aGVzZSB0ZXN0cyBub3cgcGFzcy4KKworICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90
ZXh0cmVwbGFjZXdob2xldGV4dDAxLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwv
bGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4
dDA0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJl
cGxhY2V3aG9sZXRleHQwNS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVs
My9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDYtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRv
bS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAxLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAyLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4
dDAzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVh
ZG9ubHktZXhjZXB0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25s
eS1leGNlcHRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9UZXh0L3JlcGxhY2VX
aG9sZVRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9UZXh0L3Jl
cGxhY2VXaG9sZVRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vVGV4dC9yZXNv
dXJjZXMvVEVNUExBVEUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vVGV4dC9yZXNv
dXJjZXMvcmVwbGFjZVdob2xlVGV4dC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDogdXBkYXRlZCB0byByZWZsZWN0IGFk
ZGl0aW9uIG9mIHJlcGxhY2VXaG9sZVRleHQKKwogMjAwOC0wMi0wNyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9s
ZXRleHQwMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUv
dGV4dHJlcGxhY2V3aG9sZXRleHQwMS1leHBlY3RlZC50eHQKaW5kZXggMThkMGViZS4uYzIzM2Ez
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDEtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxLWV4cGVjdGVkLnR4dApAQCAtMSwzICsx
LDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMv
Y29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAxCi1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVy
cm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJlcGxh
Y2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBs
YWNld2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CmluZGV4IGQ1YjkzNmEuLmY5NDk0MWQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDAyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMi1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBU
ZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4
dHJlcGxhY2V3aG9sZXRleHQwMgotU3RhdHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFs
dWUgdW5kZWZpbmVkIChyZXN1bHQgb2YgZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVU
ZXh0KSBpcyBub3Qgb2JqZWN0LgorU3RhdHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDAzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xl
dGV4dDAzLWV4cGVjdGVkLnR4dAppbmRleCAwZmY0NmY4Li4wZTljMjdhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwMy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRy
ZXBsYWNld2hvbGV0ZXh0MDMtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHRyZXBsYWNl
d2hvbGV0ZXh0MDMKLVN0YXR1cwllcnJvcgotTWVzc2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVuZGVm
aW5lZCAocmVzdWx0IG9mIGV4cHJlc3Npb24gdGV4dE5vZGUucmVwbGFjZVdob2xlVGV4dCkgaXMg
bm90IG9iamVjdC4KK1N0YXR1cwlTdWNjZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20v
eGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNC1l
eHBlY3RlZC50eHQKaW5kZXggZDU4MGU3Ny4uYzZiMTMwYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDQtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdo
b2xldGV4dDA0LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53
My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4
dDA0Ci1TdGF0dXMJZXJyb3IKLU1lc3NhZ2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJl
c3VsdCBvZiBleHByZXNzaW9uIHRleHROb2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmpl
Y3QuCitTdGF0dXMJU3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xl
dmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDUtZXhwZWN0ZWQu
dHh0CmluZGV4IDVjMDQ3NGUuLmI5YjJjYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA1LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQw
NS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwyIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNQotU3Rh
dHVzCWVycm9yCi1NZXNzYWdlCVR5cGVFcnJvcjogVmFsdWUgdW5kZWZpbmVkIChyZXN1bHQgb2Yg
ZXhwcmVzc2lvbiB0ZXh0Tm9kZS5yZXBsYWNlV2hvbGVUZXh0KSBpcyBub3Qgb2JqZWN0LgorU3Rh
dHVzCVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29y
ZS90ZXh0cmVwbGFjZXdob2xldGV4dDA2LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94
aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA2LWV4cGVjdGVkLnR4dAppbmRl
eCA5NjY4NmJkLi45MjVhMzgwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDYtZXhwZWN0
ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHRyZXBsYWNld2hvbGV0ZXh0MDYKLVN0YXR1cwllcnJv
cgotTWVzc2FnZQlUeXBlRXJyb3I6IFZhbHVlIHVuZGVmaW5lZCAocmVzdWx0IG9mIGV4cHJlc3Np
b24gdGV4dE5vZGUucmVwbGFjZVdob2xlVGV4dCkgaXMgbm90IG9iamVjdC4KK1N0YXR1cwlTdWNj
ZXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHJl
cGxhY2V3aG9sZXRleHQwNy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2
ZWwzL2NvcmUvdGV4dHJlcGxhY2V3aG9sZXRleHQwNy1leHBlY3RlZC50eHQKaW5kZXggYzAxMjJl
NC4uMTA3NWVjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3Jl
L3RleHRyZXBsYWNld2hvbGV0ZXh0MDctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3LWV4cGVjdGVkLnR4dApA
QCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9sZXZlbDMvY29yZS90ZXh0cmVwbGFjZXdob2xldGV4dDA3Ci1TdGF0dXMJZXJyb3IKLU1lc3Nh
Z2UJVHlwZUVycm9yOiBWYWx1ZSB1bmRlZmluZWQgKHJlc3VsdCBvZiBleHByZXNzaW9uIHRleHRO
b2RlLnJlcGxhY2VXaG9sZVRleHQpIGlzIG5vdCBvYmplY3QuCitTdGF0dXMJU3VjY2VzcwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQw
MS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdo
b2xldGV4dDAxLWV4cGVjdGVkLnR4dAppbmRleCA3YzFiZjVjLi5mM2RhYTRkIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4dDAxLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xl
dGV4dDAxLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDEKLVN0YXR1
cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3aG9sZXRleHQwMTogYXNzZXJ0RXF1YWxzIGZhaWxlZCwg
YWN0dWFsIG51bGwsIGV4cGVjdGVkIE1hcmdhcmV0IE1hcnRpbi4KK1N0YXR1cwlTdWNjZXNzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xldGV4
dDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0
d2hvbGV0ZXh0MDItZXhwZWN0ZWQudHh0CmluZGV4IDYyMzY4ODMuLmFiZjkzOTYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hvbGV0ZXh0MDItZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS90ZXh0d2hv
bGV0ZXh0MDItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMiBAQAogVGVzdAlodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL3RleHR3aG9sZXRleHQwMgotU3Rh
dHVzCWZhaWx1cmUKLU1lc3NhZ2UJdGV4dHdob2xldGV4dDAyOiBhc3NlcnRFcXVhbHMgZmFpbGVk
LCBhY3R1YWwgbnVsbCwgZXhwZWN0ZWQgTWFyZ2FyZXQgTWFydGluTmV3IFRleHQuCitTdGF0dXMJ
U3VjY2VzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL3Rl
eHR3aG9sZXRleHQwMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwz
L2NvcmUvdGV4dHdob2xldGV4dDAzLWV4cGVjdGVkLnR4dAppbmRleCBiMDk5ZDk0Li5hZTY4Zjdj
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvdGV4dHdob2xl
dGV4dDAzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2Nv
cmUvdGV4dHdob2xldGV4dDAzLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDIgQEAKIFRlc3QJaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDMvY29yZS90ZXh0d2hvbGV0
ZXh0MDMKLVN0YXR1cwlmYWlsdXJlCi1NZXNzYWdlCXRleHR3aG9sZXRleHQwMzogYXNzZXJ0RXF1
YWxzIGZhaWxlZCwgYWN0dWFsIG51bGwsIGV4cGVjdGVkIFRleHQgSSBUZXh0IElJLgorU3RhdHVz
CVN1Y2Nlc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5j
ZS9yZWFkb25seS1leGNlcHRpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0VudGl0eVJlZmVyZW5jZS9yZWFkb25seS1leGNlcHRpb25zLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNiMzZkCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1Rlc3QgdG8gbWFrZSBzdXJlIEVudGl0eVJl
ZmVyZW5jZSBub2RlcyBhcmUgYWx3YXlzIHRyZWF0ZWQgcmVhZG9ubHkKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgeG1sRG9jMi5hZG9wdE5vZGUoZW50aXR5UmVmZXJlbmNl
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogRE9N
IEV4Y2VwdGlvbiA3LgorUEFTUyBlbnRpdHlSZWZlcmVuY2Uub3duZXJEb2N1bWVudCBpcyB4bWxE
b2MKK1BBU1MgZW50aXR5UmVmZXJlbmNlLm5vZGVWYWx1ZSA9ICdmb28nIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBET00gRXhjZXB0aW9uIDcuCitQ
QVNTIGVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgaXMgbnVsbAorUEFTUyBlbnRpdHlSZWZlcmVu
Y2UucHJlZml4ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOQU1FU1BBQ0VfRVJSOiBE
T00gRXhjZXB0aW9uIDE0LgorUEFTUyBlbnRpdHlSZWZlcmVuY2UucHJlZml4IGlzIG51bGwKK1BB
U1MgZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50ID0gJ2ZvbycgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNy4KK0ZBSUwg
ZW50aXR5UmVmZXJlbmNlLnRleHRDb250ZW50IHNob3VsZCBiZSA+LiBXYXMgLgorRkFJTCBjaGls
ZHJlbkJlZm9yZUZhaWxlZEFwcGVuZCBzaG91bGQgYmUgMS4gV2FzIDAuCitQQVNTIGVudGl0eVJl
ZmVyZW5jZS5hcHBlbmRDaGlsZCh0ZXh0KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjogRE9NIEV4Y2VwdGlvbiA3LgorUEFTUyBlbnRpdHlSZWZlcmVu
Y2UuY2hpbGROb2Rlcy5sZW5ndGggaXMgY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQKK0ZBSUwg
Y2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQgc2hvdWxkIGJlIDEuIFdhcyAwLgorUEFTUyBlbnRp
dHlSZWZlcmVuY2UuaW5zZXJ0QmVmb3JlKHRleHQsIGVudGl0eVJlZmVyZW5jZS5maXJzdENoaWxk
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogRE9N
IEV4Y2VwdGlvbiA3LgorUEFTUyBlbnRpdHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGggaXMg
Y2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bnRpdHlSZWZlcmVuY2UvcmVhZG9ubHktZXhjZXB0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk5YmJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5UmVmZXJlbmNlL3JlYWRvbmx5LWV4Y2VwdGlvbnMuaHRt
bApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlYWRvbmx5LWV4Y2VwdGlvbnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRW50aXR5
UmVmZXJlbmNlL3Jlc291cmNlcy9URU1QTEFURS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
RW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9URU1QTEFURS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE5NTFjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbnRpdHlSZWZlcmVuY2UvcmVzb3VyY2VzL1RFTVBMQVRFLmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9
IllPVVJfSlNfRklMRV9IRVJFIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5jZS9yZXNvdXJjZXMvcmVh
ZG9ubHktZXhjZXB0aW9ucy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VudGl0eVJlZmVyZW5j
ZS9yZXNvdXJjZXMvcmVhZG9ubHktZXhjZXB0aW9ucy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lOTc4NzI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vRW50aXR5UmVmZXJlbmNlL3Jlc291cmNlcy9yZWFkb25seS1leGNlcHRpb25zLmpzCkBA
IC0wLDAgKzEsMzMgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHRvIG1ha2Ugc3VyZSBFbnRpdHlSZWZl
cmVuY2Ugbm9kZXMgYXJlIGFsd2F5cyB0cmVhdGVkIHJlYWRvbmx5IikKKwordmFyIHhtbERvYyA9
IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiwgImh0bWwiLCBudWxsKTsKK3ZhciB4bWxEb2MyID0gZG9jdW1lbnQuaW1w
bGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
LCAiaHRtbCIsIG51bGwpOwordmFyIGVudGl0eVJlZmVyZW5jZSA9IHhtbERvYy5jcmVhdGVFbnRp
dHlSZWZlcmVuY2UoImd0Iik7CisKK3Nob3VsZFRocm93KCJ4bWxEb2MyLmFkb3B0Tm9kZShlbnRp
dHlSZWZlcmVuY2UpIik7CitzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLm93bmVyRG9jdW1lbnQi
LCAieG1sRG9jIikKKworLy8gbm9kZVZhbHVlIGlzIGRlZmluZWQgdG8gYmUgbnVsbCBmb3IgRW50
aXR5IFJlZmVyZW5jZSBub2RlcywgYW5kIHRodXMgc2hvdWxkIHNpbGVudGx5IGZhaWwgdG8gbW9k
aWZ5CisvLyBTcGVjIGlzIGFtYmlnaW91cyBhcyB0byBpZiB3ZSBzaG91bGQgdGhyb3cgaGVyZSBv
ciBub3QuICBJJ3ZlIHJlcXVlc3RlZCBjbGFyaWZpY2F0aW9uOgorLy8gaHR0cDovL2xpc3RzLncz
Lm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDA4SmFuTWFyLzAwMDkuaHRtbAorc2hvdWxk
VGhyb3coImVudGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUgPSAnZm9vJyIpOworc2hvdWxkQmUoImVu
dGl0eVJlZmVyZW5jZS5ub2RlVmFsdWUiLCAibnVsbCIpOworCitzaG91bGRUaHJvdygiZW50aXR5
UmVmZXJlbmNlLnByZWZpeCA9ICdmb28nIik7CitzaG91bGRCZSgiZW50aXR5UmVmZXJlbmNlLnBy
ZWZpeCIsICJudWxsIik7CisKK3Nob3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2UudGV4dENvbnRl
bnQgPSAnZm9vJyIpOworc2hvdWxkQmUoImVudGl0eVJlZmVyZW5jZS50ZXh0Q29udGVudCIsICIn
PiciKTsKKwordmFyIGNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kID0gZW50aXR5UmVmZXJlbmNl
LmNoaWxkTm9kZXMubGVuZ3RoOworc2hvdWxkQmUoImNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5k
IiwgIjEiKTsKK3ZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkZBSUwiKTsKK3No
b3VsZFRocm93KCJlbnRpdHlSZWZlcmVuY2UuYXBwZW5kQ2hpbGQodGV4dCkiKTsKK3Nob3VsZEJl
KCJlbnRpdHlSZWZlcmVuY2UuY2hpbGROb2Rlcy5sZW5ndGgiLCAiY2hpbGRyZW5CZWZvcmVGYWls
ZWRBcHBlbmQiKTsKKworY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBlbmQgPSBlbnRpdHlSZWZlcmVu
Y2UuY2hpbGROb2Rlcy5sZW5ndGg7CitzaG91bGRCZSgiY2hpbGRyZW5CZWZvcmVGYWlsZWRBcHBl
bmQiLCAiMSIpOworc2hvdWxkVGhyb3coImVudGl0eVJlZmVyZW5jZS5pbnNlcnRCZWZvcmUodGV4
dCwgZW50aXR5UmVmZXJlbmNlLmZpcnN0Q2hpbGQpIik7CitzaG91bGRCZSgiZW50aXR5UmVmZXJl
bmNlLmNoaWxkTm9kZXMubGVuZ3RoIiwgImNoaWxkcmVuQmVmb3JlRmFpbGVkQXBwZW5kIik7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vVGV4dC9yZXBsYWNlV2hvbGVUZXh0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1RleHQvcmVwbGFjZVdob2xlVGV4dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMWVjNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1RleHQvcmVwbGFjZVdob2xlVGV4dC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAorVGVzdCB3aG9sZVRleHQgYW5kIHJlcGxhY2VXaG9sZVRleHQKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdGV4dEIud2hvbGVUZXh0IGlzICdBQicKK1BB
U1MgcGFyYS50ZXh0Q29udGVudCBpcyAnQUJDJworUEFTUyB0ZXh0Qi53aG9sZVRleHQgaXMgJ1hZ
WicKK1BBU1MgcGFyYS50ZXh0Q29udGVudCBpcyAnWFlaQycKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9UZXh0L3JlcGxhY2VXaG9sZVRleHQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1RleHQvcmVwbGFjZVdob2xlVGV4dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjliMzk3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9U
ZXh0L3JlcGxhY2VXaG9sZVRleHQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlcGxhY2VXaG9sZVRl
eHQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vVGV4dC9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1RleHQvcmVzb3VyY2VzL1RFTVBMQVRFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTk1MWM0MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1RleHQvcmVzb3VyY2VzL1RFTVBMQVRFLmh0bWwKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9IllPVVJfSlNfRklM
RV9IRVJFIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1RleHQvcmVzb3VyY2VzL3JlcGxhY2VXaG9sZVRleHQuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9UZXh0L3Jlc291cmNlcy9yZXBsYWNlV2hvbGVUZXh0LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjZkYzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9UZXh0L3Jlc291cmNlcy9yZXBsYWNlV2hvbGVUZXh0Lmpz
CkBAIC0wLDAgKzEsMTYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHdob2xlVGV4dCBhbmQgcmVwbGFj
ZVdob2xlVGV4dCIpCisKK3ZhciBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwor
cGFyYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQScpKTsKK3ZhciB0ZXh0
QiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdCJyk7CitwYXJhLmFwcGVuZENoaWxkKHRleHRC
KTsKK3BhcmEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpKTsKK3BhcmEu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0MnKSk7CisKK3Nob3VsZEJlKCJ0
ZXh0Qi53aG9sZVRleHQiLCAiJ0FCJyIpOworc2hvdWxkQmUoInBhcmEudGV4dENvbnRlbnQiLCAi
J0FCQyciKTsKK3RleHRCLnJlcGxhY2VXaG9sZVRleHQoIlhZWiIpOworc2hvdWxkQmUoInRleHRC
Lndob2xlVGV4dCIsICInWFlaJyIpOworc2hvdWxkQmUoInBhcmEudGV4dENvbnRlbnQiLCAiJ1hZ
WkMnIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50
eHQKaW5kZXggYjQ5MzViOS4uYjM4NjA5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC02OCw2
ICs2OCw3IEBAIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnJlbW92ZUNoaWxkIFtmdW5j
dGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIg
W2Z1bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUucmVwbGFjZUNoaWxkIFtm
dW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnJlcGxhY2VEYXRhIFtmdW5j
dGlvbl0KK3dpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnJlcGxhY2VXaG9sZVRleHQgW2Z1
bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuc3BsaXRUZXh0IFtmdW5jdGlv
bl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLnN1YnN0cmluZ0RhdGEgW2Z1bmN0aW9u
XQogd2luZG93LkNTU0NoYXJzZXRSdWxlIFtvYmplY3QgQ1NTQ2hhcnNldFJ1bGVDb25zdHJ1Y3Rv
cl0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMzhmZjYyOC4uZDVjMzgyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAwOC0wMi0wOCAgRXJpYyBTZWlk
ZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFRleHQud2hvbGVUZXh0IGFuZCBUZXh0LnJl
cGxhY2VXaG9sZVRleHQKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxMjUKKworICAgICAgICBUZXN0IEVudGl0eVJlZmVyZW5jZXMgdG8gbWFrZSBzdXJl
IHRoZXkncmUgYWx3YXlzIHRyZWF0ZWQgYXMgcmVhZC1vbmx5CisgICAgICAgIEluIGRvaW5nIHNv
IEkgZGlzY292ZXJlZCBhIGJ1ZyBpbiBkb2N1bWVudC5hZG9wdE5vZGUocmVhZG9ubHlOb2RlKSAo
YW5kIGZpeGVkIGl0KQorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOiB0aHJvdyBOT19NT0RJRklDQVRJT05fQUxMT1dF
RF9FUlIgd2hlbiBwYXNzZWQgYSByZWFkb25seSBub2RlCisgICAgICAgICogZG9tL05vZGUuY3Bw
OgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRleHRD
b250ZW50KToKKyAgICAgICAgKiBkb20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplYXJs
aWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6bGF0ZXN0
TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Ojp3aG9s
ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6cmVwbGFjZVdob2xlVGV4dCk6CisgICAg
ICAgICogZG9tL1RleHQuaDoKKyAgICAgICAgKiBkb20vVGV4dC5pZGw6CisKIDIwMDgtMDItMDcg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFF0IGJ1aWxkIGZpeApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IGNhOTk5MGQuLjQ2MTcxMzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTY3Miw3ICs2NzIs
MTIgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6YWRvcHROb2RlKFBhc3NSZWZQdHI8Tm9k
ZT4gc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCisgICAgaWYgKHNvdXJjZS0+
aXNSZWFkT25seU5vZGUoKSkgeworICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgc3dpdGNoIChzb3VyY2UtPm5v
ZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBFTlRJVFlfTk9ERToKICAgICAgICAgY2FzZSBOT1RB
VElPTl9OT0RFOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCA0YjkyNjc4Li5lNTNkMzBmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTUzNiw3ICsxNTM2LDcg
QEAgU3RyaW5nIE5vZGU6OnRleHRDb250ZW50KGJvb2wgY29udmVydEJSc1RvTmV3bGluZXMpIGNv
bnN0CiAgICAgICAgIGNhc2UgRE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICBjYXNlIE5PVEFU
SU9OX05PREU6CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1RleHQuY3BwCmlu
ZGV4IDg0ODNjMTAuLjU3OTQ4MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RleHQuY3BwCisr
KyBiL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC04Nyw2ICs4Nyw5NyBAQCBQYXNzUmVmUHRyPFRl
eHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIHJldHVybiBuZXdUZXh0LnJlbGVhc2UoKTsKIH0KIAorc3RhdGljIGNvbnN0IFRleHQqIGVh
cmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZShjb25zdCBUZXh0KiB0KQoreworICAgIGNv
bnN0IE5vZGUqIG4gPSB0OworICAgIHdoaWxlICgobiA9IG4tPnByZXZpb3VzU2libGluZygpKSkg
eworICAgICAgICBOb2RlOjpOb2RlVHlwZSB0eXBlID0gbi0+bm9kZVR5cGUoKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IHR5cGUgPT0gTm9kZTo6Q0RBVEFfU0VDVElP
Tl9OT0RFKSB7CisgICAgICAgICAgICB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB3b3VsZCBu
ZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBjaGlsZCB0ZXh0IG5vZGVzIGlmIHRoZXkgZXhp
c3RlZAorICAgICAgICBBU1NFUlQodHlwZSAhPSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREUg
fHwgIW4tPmhhc0NoaWxkTm9kZXMoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gdDsKK30KKworc3RhdGljIGNvbnN0IFRleHQqIGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4
dE5vZGUoY29uc3QgVGV4dCogdCkKK3sKKyAgICBjb25zdCBOb2RlKiBuID0gdDsKKyAgICB3aGls
ZSAoKG4gPSBuLT5uZXh0U2libGluZygpKSkgeworICAgICAgICBOb2RlOjpOb2RlVHlwZSB0eXBl
ID0gbi0+bm9kZVR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gTm9kZTo6VEVYVF9OT0RFIHx8
IHR5cGUgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSB7CisgICAgICAgICAgICB0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSB3b3VsZCBuZWVkIHRvIHZpc2l0IEVudGl0eVJlZmVyZW5jZSBj
aGlsZCB0ZXh0IG5vZGVzIGlmIHRoZXkgZXhpc3RlZAorICAgICAgICBBU1NFUlQodHlwZSAhPSBO
b2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREUgfHwgIW4tPmhhc0NoaWxkTm9kZXMoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdDsKK30KKworU3RyaW5nIFRleHQ6Ondob2xl
VGV4dCgpIGNvbnN0Cit7CisgICAgY29uc3QgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RMb2dp
Y2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworICAgIGNvbnN0IFRleHQqIGVuZFRleHQgPSBs
YXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOworCisgICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7CisgICAgTm9kZSogb25lUGFzdEVuZFRleHQgPSBlbmRUZXh0LT5uZXh0U2libGlu
ZygpOworICAgIGZvciAoY29uc3QgTm9kZSogbiA9IHN0YXJ0VGV4dDsgbiAhPSBvbmVQYXN0RW5k
VGV4dDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFuLT5pc1RleHROb2Rl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgVGV4dCogdCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFRleHQqPihuKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhID0gdC0+
ZGF0YSgpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGEuY2hhcmFjdGVycygpLCBkYXRhLmxl
bmd0aCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworfQor
CitQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3RyaW5nJiBu
ZXdUZXh0LCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0ICJyZWFk
LW9ubHkiIHRleHQgbm9kZXMgKG5vIEVudGl0eSBub2RlIHN1cHBvcnQpCisgICAgLy8gVGh1cywg
d2UgcmVtb3ZlIGFsbCBhZGphY2VudCB0ZXh0IG5vZGVzLCBhbmQgcmVwbGFjZSB0aGUgY29udGVu
dHMgb2YgdGhpcyBvbmUuCisgICAgQVNTRVJUKCFpc1JlYWRPbmx5Tm9kZSgpKTsKKyAgICAvLyBU
aGlzIG1ldGhvZCBvbmx5IHJhaXNlcyBleGNlcHRpb25zIHdoZW4gZGVhbGluZyB3aXRoIEVudGl0
eSBub2RlcyAod2hpY2ggd2UgZG9uJ3Qgc3VwcG9ydCkKKworICAgIC8vIFByb3RlY3Qgc3RhcnRU
ZXh0IGFuZCBlbmRUZXh0IGFnYWluc3QgbXV0YXRpb24gZXZlbnQgaGFuZGxlcnMgcmVtb3Zpbmcg
dGhlIGxhc3QgcmVmCisgICAgUmVmUHRyPFRleHQ+IHN0YXJ0VGV4dCA9IGNvbnN0X2Nhc3Q8VGV4
dCo+KGVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSh0aGlzKSk7CisgICAgUmVmUHRy
PFRleHQ+IGVuZFRleHQgPSBjb25zdF9jYXN0PFRleHQqPihsYXRlc3RMb2dpY2FsbHlBZGphY2Vu
dFRleHROb2RlKHRoaXMpKTsKKworICAgIFJlZlB0cjxUZXh0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OyAvLyBNdXRhdGlvbiBldmVudCBoYW5kbGVycyBjb3VsZCBjYXVzZSBvdXIgbGFzdCByZWYgdG8g
Z28gYXdheQorICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgLy8gUHJvdGVjdCBhZ2Fp
bnN0IG11dGF0aW9uIGhhbmRsZXJzIG1vdmluZyB0aGlzIG5vZGUgZHVyaW5nIHRyYXZlcnNhbAor
ICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZCA9IDA7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbiA9
IHN0YXJ0VGV4dDsgbiAmJiBuICE9IHRoaXMgJiYgbi0+aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVu
dE5vZGUoKSA9PSBwYXJlbnQ7KSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlVG9SZW1vdmUo
bi5yZWxlYXNlKCkpOworICAgICAgICBuID0gbm9kZVRvUmVtb3ZlLT5uZXh0U2libGluZygpOwor
ICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGVUb1JlbW92ZS5nZXQoKSwgaWdub3JlZCk7
CisgICAgfQorCisgICAgaWYgKHRoaXMgIT0gZW5kVGV4dCkgeworICAgICAgICBOb2RlKiBvbmVQ
YXN0RW5kVGV4dCA9IGVuZFRleHQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGZvciAoUmVmUHRy
PE5vZGU+IG4gPSBuZXh0U2libGluZygpOyBuICYmIG4gIT0gb25lUGFzdEVuZFRleHQgJiYgbi0+
aXNUZXh0Tm9kZSgpICYmIG4tPnBhcmVudE5vZGUoKSA9PSBwYXJlbnQ7KSB7CisgICAgICAgICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZVRvUmVtb3ZlKG4ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG4g
PSBub2RlVG9SZW1vdmUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBwYXJlbnQtPnJlbW92
ZUNoaWxkKG5vZGVUb1JlbW92ZS5nZXQoKSwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobmV3VGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJl
bnROb2RlKCkgPT0gcGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZCh0aGlz
LCBpZ25vcmVkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2V0RGF0YShuZXdU
ZXh0LCBpZ25vcmVkKTsKKyAgICByZXR1cm4gcHJvdGVjdGVkVGhpcy5yZWxlYXNlKCk7Cit9CisK
IFN0cmluZyBUZXh0Ojpub2RlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRleHRBdG9tLmRv
bVN0cmluZygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dC5oIGIvV2ViQ29yZS9kb20v
VGV4dC5oCmluZGV4IDIwZWE1NGEuLjQzM2QzZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Rl
eHQuaAorKysgYi9XZWJDb3JlL2RvbS9UZXh0LmgKQEAgLTM5LDYgKzM5LDEwIEBAIHB1YmxpYzoK
IAogICAgIFBhc3NSZWZQdHI8VGV4dD4gc3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYpOwogCisgICAgLy8gRE9NIExldmVsIDM6IGh0dHA6Ly93d3cudzMub3JnL1RSL0RP
TS1MZXZlbC0zLUNvcmUvY29yZS5odG1sI0lELTEzMTIyOTU3NzIKKyAgICBTdHJpbmcgd2hvbGVU
ZXh0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUZXh0PiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRk
ZW4gZnJvbSBwYXJlbnQgY2xhc3NlcwogCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RleHQuaWRsIGIvV2ViQ29yZS9kb20vVGV4
dC5pZGwKaW5kZXggYzA0MjZlYS4uMWIwMDA5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4
dC5pZGwKKysrIGIvV2ViQ29yZS9kb20vVGV4dC5pZGwKQEAgLTMwLDYgKzMwLDEwIEBAIG1vZHVs
ZSBjb3JlIHsKICAgICAgICAgVGV4dCBzcGxpdFRleHQoaW4gW0lzSW5kZXhdIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAg
IC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgd2hvbGVUZXh0OworICAgICAgICBUZXh0ICAgICAgICAgICAgICAg
cmVwbGFjZVdob2xlVGV4dChpbiBET01TdHJpbmcgY29udGVudCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsK
IAogfQo=
</data>
<flag name="review"
          id="8303"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>