<?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>57743</bug_id>
          
          <creation_ts>2011-04-04 00:13:39 -0700</creation_ts>
          <short_desc>REGRESSION(r81887): Crash in SplitElement</short_desc>
          <delta_ts>2011-04-08 13:19:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>58074</dependson>
    
    <dependson>58078</dependson>
    
    <dependson>58081</dependson>
          <blocked>58158</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>378676</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-04 00:13:39 -0700</bug_when>
    <thetext>We&apos;re getting a lot of null pointer crash reports with the following stack trace and it&apos;s a release blocker for us:
0x6caeb8da	 [chrome.dll	 - splitelementcommand.cpp:47]	WebCore::SplitElementCommand::executeApply()
0x6caeba30	 [chrome.dll	 - splitelementcommand.cpp:76]	WebCore::SplitElementCommand::doApply()
0x6ca94f52	 [chrome.dll	 - editcommand.cpp:92]	WebCore::EditCommand::apply()
0x6ca81533	 [chrome.dll	 - compositeeditcommand.cpp:102]	WebCore::CompositeEditCommand::applyCommandToComposite(WTF::PassRefPtr&lt;WebCore::EditCommand&gt;)
0x6ca81d53	 [chrome.dll	 - compositeeditcommand.cpp:270]	WebCore::CompositeEditCommand::splitElement(WTF::PassRefPtr&lt;WebCore::Element&gt;,WTF::PassRefPtr&lt;WebCore::Node&gt;)
0x6ca994a5	 [chrome.dll	 - replaceselectioncommand.cpp:965]	WebCore::ReplaceSelectionCommand::doApply()
0x6ca94f52	 [chrome.dll	 - editcommand.cpp:92]	WebCore::EditCommand::apply()
0x6ca950db	 [chrome.dll	 - editcommand.cpp:224]	WebCore::applyCommand(WTF::PassRefPtr&lt;WebCore::EditCommand&gt;)
0x6c9f4964	 [chrome.dll	 - editor.cpp:438]	WebCore::Editor::replaceSelectionWithFragment(WTF::PassRefPtr&lt;WebCore::DocumentFragment&gt;,bool,bool,bool)
0x6c9f40c8	 [chrome.dll	 - editor.cpp:195]	WebCore::Editor::handleTextEvent(WebCore::TextEvent *)
0x6c9cf16d	 [chrome.dll	 - node.cpp:3074]	WebCore::Node::defaultEventHandler(WebCore::Event *)
0x6c9ce60c	 [chrome.dll	 - node.cpp:2768]	WebCore::Node::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;)
0x6ca642a3	 [chrome.dll	 - eventtarget.cpp:297]	WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;,int &amp;)
0x6c9f4605	 [chrome.dll	 - editor.cpp:381]	WebCore::Editor::pasteAsFragment(WTF::PassRefPtr&lt;WebCore::DocumentFragment&gt;,bool,bool)
0x6c9f479a	 [chrome.dll	 - editor.cpp:403]	WebCore::Editor::pasteWithPasteboard(WebCore::Pasteboard *,bool)
0x6c9f698a	 [chrome.dll	 - editor.cpp:1300]	WebCore::Editor::paste()

As far as I can tell, node after positon is null in:
splitElement(static_cast&lt;Element*&gt;(parentNode), insertionPos.computeNodeAfterPosition());

See: http://trac.webkit.org/changeset/81887/trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp

http://crbug.com/77685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378735</commentid>
    <comment_count>1</comment_count>
      <attachid>88051</attachid>
    <who name="Berend-Jan Wever">skylined</who>
    <bug_when>2011-04-04 04:54:44 -0700</bug_when>
    <thetext>Created attachment 88051
Repro

I think I hit this during fuzzing, repro:
&lt;pre id=&quot;x&quot;&gt;&lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/x&gt;&lt;/pre&gt;
&lt;script&gt;
  var x = document.getElementById(&quot;x&quot;);
  document.execCommand(&quot;selectall&quot;,false);
  document.designMode=&quot;on&quot;;
  console.log(x.innerHTML);             // &lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/x&gt;
  document.execCommand(&quot;InsertImage&quot;);  // replace &lt;br&gt; with &lt;img&gt; and set some state: simply changing the original
                                        // html does not reproduce the issue.
  console.log(x.innerHTML);             // &lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;img&gt;&lt;/x&gt;
  document.execCommand(&quot;InsertImage&quot;);
  console.log(x.innerHTML);             // &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &apos;Times New Roman&apos;; white-space: normal; &quot;&gt;&lt;img&gt;&lt;/span&gt;&lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;img&gt;&lt;/x&gt;
  document.execCommand(&quot;InsertImage&quot;);  // crash
  console.log(x.innerHTML);
&lt;/script&gt;

id:             chrome.dll!WebCore::SplitElementCommand::executeApply ReadAV@NULL (3a063a704d2ab72ff3cb23ae09a074fa)
description:    Attempt to read from unallocated NULL pointer+0x24 in chrome.dll!WebCore::SplitElementCommand::executeApply
stack:          chrome.dll!WebCore::SplitElementCommand::executeApply
                chrome.dll!WebCore::CompositeEditCommand::applyCommandToComposite
                chrome.dll!WebCore::CompositeEditCommand::splitElement
                chrome.dll!WebCore::ReplaceSelectionCommand::doApply
                chrome.dll!WebCore::EditCommand::apply
                chrome.dll!WebCore::CompositeEditCommand::applyCommandToComposite
                chrome.dll!WebCore::CompositeEditCommand::moveParagraphs
                chrome.dll!WebCore::ReplaceSelectionCommand::doApply
                chrome.dll!WebCore::EditCommand::apply
                chrome.dll!WebCore::applyCommand
                chrome.dll!WebCore::executeInsertFragment
                chrome.dll!WebCore::executeInsertNode
                chrome.dll!WebCore::executeInsertImage
                chrome.dll!WebCore::Editor::Command::execute
                chrome.dll!WebCore::Document::execCommand
                chrome.dll!WebCore::DocumentInternal::execCommandCallback
                chrome.dll!v8::internal::Invoke
                chrome.dll!v8::internal::Execution::Call
                ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381348</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-07 08:11:34 -0700</bug_when>
    <thetext>Sorry, wrong revision number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382304</commentid>
    <comment_count>3</comment_count>
      <attachid>88833</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 09:47:22 -0700</bug_when>
    <thetext>Created attachment 88833
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382306</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 09:49:13 -0700</bug_when>
    <thetext>This is currently one of top crashers and blocks Chromium release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382318</commentid>
    <comment_count>5</comment_count>
      <attachid>88833</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-08 09:59:45 -0700</bug_when>
    <thetext>Comment on attachment 88833
fixes the bug

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:1220
&gt;  PassRefPtr&lt;Node&gt; CompositeEditCommand::splitTreeToNode(Node* start, Node* end, bool splitAncestor)

Nit: Can we rename splitAncestor to shouldSplitAncestor?

&gt; LayoutTests/editing/inserting/insert-images-in-pre-x-crash.html:1
&gt; +&lt;pre id=&quot;x&quot;&gt;&lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/x&gt;&lt;/pre&gt;

Did you mean to include &lt;html&gt; and &lt;body&gt; here?  Maybe a doctype too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382321</commentid>
    <comment_count>6</comment_count>
      <attachid>88833</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-08 10:00:32 -0700</bug_when>
    <thetext>Comment on attachment 88833
fixes the bug

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:957
&gt; +        if (insertionPos.containerNode()-&gt;isTextNode() &amp;&amp; insertionPos.offsetInContainerNode() &amp;&amp; !insertionPos.atLastEditingPositionForNode()) {
&gt; +            splitTextNodeContainingElement(static_cast&lt;Text*&gt;(insertionPos.anchorNode()), insertionPos.offsetInContainerNode());

It would be clearer if we called insertionPos.containerNode() both times. To someone reading the code the cast seems dangerous since the type of insertionPos.containerNode() is checked and based on that the code does a typecast of static_cast&lt;Text*&gt;(insertionPos.anchorNode()). Someone reading should be able to see the type safety without knowing that one condition guarantees the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382323</commentid>
    <comment_count>7</comment_count>
      <attachid>88833</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-08 10:01:06 -0700</bug_when>
    <thetext>Comment on attachment 88833
fixes the bug

Oops. Review tool clobbered Tony’s review+. I’ll say review+ myself -- bugs.webkit.org doesn’t give me a way to restore his review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382329</commentid>
    <comment_count>8</comment_count>
      <attachid>88833</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-08 10:07:01 -0700</bug_when>
    <thetext>Comment on attachment 88833
fixes the bug

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:-1225
&gt; -    for (node = start; node &amp;&amp; node-&gt;parentNode() != end; node = node-&gt;parentNode()) {

I think you should add a comment here explaining the logic, something similar to what you have in the ChangeLog.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:966
&gt;          }

Does this move the insertion point also when there is nothing to split? For example, if you have &lt;b&gt;&lt;i&gt;hello&lt;/i&gt;&lt;/b&gt; and the original insertion point is at offset 0 in the text node, does it move the insertion point before the b tag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382330</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 10:07:42 -0700</bug_when>
    <thetext>Thanks for the review, Tony &amp; Darin!

(In reply to comment #5)
&gt; (From update of attachment 88833 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88833&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:1220
&gt; &gt;  PassRefPtr&lt;Node&gt; CompositeEditCommand::splitTreeToNode(Node* start, Node* end, bool splitAncestor)
&gt; 
&gt; Nit: Can we rename splitAncestor to shouldSplitAncestor?

Will do!

&gt; &gt; LayoutTests/editing/inserting/insert-images-in-pre-x-crash.html:1
&gt; &gt; +&lt;pre id=&quot;x&quot;&gt;&lt;x style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/x&gt;&lt;/pre&gt;
&gt; 
&gt; Did you mean to include &lt;html&gt; and &lt;body&gt; here?  Maybe a doctype too.

It tried but the crash doesn&apos;t reproduce if we have DOCTYPE, html, or body.  It&apos;s a really fragile test.  I&apos;ll add a comment in the test so that people don&apos;t accidentally add them in the future.

(In reply to comment #6)
&gt; (From update of attachment 88833 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88833&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:957
&gt; &gt; +        if (insertionPos.containerNode()-&gt;isTextNode() &amp;&amp; insertionPos.offsetInContainerNode() &amp;&amp; !insertionPos.atLastEditingPositionForNode()) {
&gt; &gt; +            splitTextNodeContainingElement(static_cast&lt;Text*&gt;(insertionPos.anchorNode()), insertionPos.offsetInContainerNode());
&gt; 
&gt; It would be clearer if we called insertionPos.containerNode() both times. To someone reading the code the cast seems dangerous since the type of insertionPos.containerNode() is checked and based on that the code does a typecast of static_cast&lt;Text*&gt;(insertionPos.anchorNode()). Someone reading should be able to see the type safety without knowing that one condition guarantees the other.

Oops, yeah I totally agree. I must have copied &amp; pasted from the old code and forgot to change it.  Will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382331</commentid>
    <comment_count>10</comment_count>
      <attachid>88833</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 10:09:57 -0700</bug_when>
    <thetext>Comment on attachment 88833
fixes the bug

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

Thanks for the feedback, Enrica!

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:-1225

&gt; 
&gt; I think you should add a comment here explaining the logic, something similar to what you have in the ChangeLog.

Which part of change log are you referring to?

&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:966
&gt;&gt;          }
&gt; 
&gt; Does this move the insertion point also when there is nothing to split? For example, if you have &lt;b&gt;&lt;i&gt;hello&lt;/i&gt;&lt;/b&gt; and the original insertion point is at offset 0 in the text node, does it move the insertion point before the b tag?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382333</commentid>
    <comment_count>11</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-08 10:11:10 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 88833 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88833&amp;action=review
&gt; 
&gt; Thanks for the feedback, Enrica!
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:-1225
&gt; 
&gt; &gt; 
&gt; &gt; I think you should add a comment here explaining the logic, something similar to what you have in the ChangeLog.
&gt; 
&gt; Which part of change log are you referring to?
where you explain the changes to CompositeEditCommand.cpp.
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:966
&gt; &gt;&gt;          }
&gt; &gt; 
&gt; &gt; Does this move the insertion point also when there is nothing to split? For example, if you have &lt;b&gt;&lt;i&gt;hello&lt;/i&gt;&lt;/b&gt; and the original insertion point is at offset 0 in the text node, does it move the insertion point before the b tag?
&gt; 
&gt; Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382340</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 10:18:06 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Which part of change log are you referring to?
&gt; where you explain the changes to CompositeEditCommand.cpp.

Oh you mean not to duplicate nodes?  How about this?

        if (!node-&gt;parentNode()-&gt;isElementNode())
            break;
        // Do not split a node when doing so introduces an empty node
        VisiblePosition positionInParent = firstPositionInNode(node-&gt;parentNode());
        VisiblePosition positionInNode = firstPositionInOrBeforeNode(node.get());
        if (positionInParent != positionInNode)
            splitElement(static_cast&lt;Element*&gt;(node-&gt;parentNode()), node);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382361</commentid>
    <comment_count>13</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-08 10:35:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Which part of change log are you referring to?
&gt; &gt; where you explain the changes to CompositeEditCommand.cpp.
&gt; 
&gt; Oh you mean not to duplicate nodes?  How about this?
&gt; 
&gt;         if (!node-&gt;parentNode()-&gt;isElementNode())
&gt;             break;
&gt;         // Do not split a node when doing so introduces an empty node
&gt;         VisiblePosition positionInParent = firstPositionInNode(node-&gt;parentNode());
&gt;         VisiblePosition positionInNode = firstPositionInOrBeforeNode(node.get());
&gt;         if (positionInParent != positionInNode)
&gt;             splitElement(static_cast&lt;Element*&gt;(node-&gt;parentNode()), node);

Yes, thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382452</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-08 12:29:27 -0700</bug_when>
    <thetext>Committed r83322: &lt;http://trac.webkit.org/changeset/83322&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88051</attachid>
            <date>2011-04-04 04:54:44 -0700</date>
            <delta_ts>2011-04-04 04:54:44 -0700</delta_ts>
            <desc>Repro</desc>
            <filename>repro.html</filename>
            <type>text/html</type>
            <size>865</size>
            <attacher name="Berend-Jan Wever">skylined</attacher>
            
              <data encoding="base64">PHByZSBpZD0ieCI+PHggc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPjxicj48L3g+PC9w
cmU+CjxzY3JpcHQ+CiAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieCIpOwogIGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCJzZWxlY3RhbGwiLGZhbHNlKTsKICBkb2N1bWVudC5kZXNpZ25N
b2RlPSJvbiI7CiAgY29uc29sZS5sb2coeC5pbm5lckhUTUwpOyAgICAgICAgICAgICAvLyA8eCBz
dHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyI+PGJyPjwveD4KICBkb2N1bWVudC5leGVjQ29t
bWFuZCgiSW5zZXJ0SW1hZ2UiKTsgIC8vIHJlcGxhY2UgPGJyPiB3aXRoIDxpbWc+IGFuZCBzZXQg
c29tZSBzdGF0ZTogc2ltcGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGlz
c3VlLgogIGNvbnNvbGUubG9nKHguaW5uZXJIVE1MKTsgICAgICAgICAgICAgLy8gPHggc3R5bGU9
IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPjxpbWc+PC94PgogIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCJJbnNlcnRJbWFnZSIpOwogIGNvbnNvbGUubG9nKHguaW5uZXJIVE1MKTsgICAgICAgICAgICAg
Ly8gPHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LWZhbWlseTogJ1Rp
bWVzIE5ldyBSb21hbic7IHdoaXRlLXNwYWNlOiBub3JtYWw7ICI+PGltZz48L3NwYW4+PHggc3R5
bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPjxpbWc+PC94PgogIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCJJbnNlcnRJbWFnZSIpOyAgLy8gY3Jhc2gKICBjb25zb2xlLmxvZyh4LmlubmVySFRNTCk7
Cjwvc2NyaXB0Pg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88833</attachid>
            <date>2011-04-08 09:47:22 -0700</date>
            <delta_ts>2011-04-08 10:09:57 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-57743-20110408194718.patch</filename>
            <type>text/plain</type>
            <size>8480</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDQtMDggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUkVHUkVTU0lPTihyODE4ODcpOiBDcmFzaCBpbiBTcGxpdEVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NzQz
CisKKyAgICAgICAgVGhlIGNyYXNoIHdhcyBjYXVzZWQgYnkgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkncyBjYWxsaW5nIHNwbGl0RWxlbWVudCB3aXRoIGNvbXB1dGVOb2RlQWZ0ZXJQ
b3NpdGlvbgorICAgICAgICBldmVuIHdoZW4gdGhlIHBvc2l0aW9uIHdhcyBhZnRlciB0aGUgbGFz
dCBub2RlIGluIGl0IGNvbnRhaW5lci4gU2luY2UgYWxsIHdlIGFyZSBkb2luZyBoZXJlIGlzIHRv
IHNwbGl0dGluZyB0cmVlCisgICAgICAgIHVwIHVudGlsIHRoZSBoaWdoZXN0IGFuY2VzdG9yIHdp
dGggaXNJbmxpbmVOb2RlV2l0aFN0eWxlLCByZXBsYWNlZCB0aGUgd2hpbGUgbG9vcCBieSBjYWxs
cyB0byBzcGxpdFRyZWVUb05vZGUKKyAgICAgICAgYW5kIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZU
eXBlLgorCisgICAgICAgIEFsc28gZml4ZWQgYSBidWcgaW4gc3BsaXRUcmVlVG9Ob2RlIG5vdCB0
byBjaGVjayB0aGUgZGlmZmVyZW5jZSBpbiB2aXNpYmxlIHBvc2l0aW9uIHdoZW4gc3BsaXR0aW5n
IHRoZSBhbmNlc3RvciwKKyAgICAgICAgd2hpY2ggd291bGQgaGF2ZSBpbnRyb2R1Y2VkIHVubmVj
ZXNzYXJ5IG5vZGVzIHdoZW4gc3BsaXR0aW5nIHRyZWUgYW5kIGEgYnVnIGluIGhpZ2hlc3RFbmNs
b3NpbmdOb2RlT2ZUeXBlIHRoYXQKKyAgICAgICAgaXQgaW5jb3JyZWN0bHkgY2FsbGVkIGRlcHJl
Y2F0ZWROb2RlIGluc3RlYWQgb2YgY29udGFpbmVyTm9kZS4KKworICAgICAgICBUZXN0OiBlZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtaW1hZ2VzLWluLXByZS14LWNyYXNoLmh0bWwKKworICAgICAg
ICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VHJlZVRvTm9kZSk6CisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZSk6CisK
IDIwMTEtMDQtMDUgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MzI3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjE5LDIxICsxMjE5LDI0IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpwb3NpdGlvbkEKIC8vIHRvIGRldGVybWluZSBpZiB0aGUgc3BsaXQgaXMgbmVjZXNzYXJ5
LiBSZXR1cm5zIHRoZSBsYXN0IHNwbGl0IG5vZGUuCiBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5vZGUqIGVuZCwgYm9v
bCBzcGxpdEFuY2VzdG9yKQogeworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKGVuZCk7
CiAgICAgQVNTRVJUKHN0YXJ0ICE9IGVuZCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKLSAg
ICBmb3IgKG5vZGUgPSBzdGFydDsgbm9kZSAmJiBub2RlLT5wYXJlbnROb2RlKCkgIT0gZW5kOyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKHNwbGl0QW5jZXN0b3IgJiYgZW5k
LT5wYXJlbnROb2RlKCkpCisgICAgICAgIGVuZCA9IGVuZC0+cGFyZW50Tm9kZSgpOworCisgICAg
UmVmUHRyPE5vZGU+IGVuZE5vZGUgPSBlbmQ7CisgICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGUg
JiYgbm9kZS0+cGFyZW50Tm9kZSgpICE9IGVuZE5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25JblBh
cmVudChmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUtPnBhcmVudE5vZGUoKSksIERPV05TVFJFQU0p
OwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Jbk5vZGUoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uSW5QYXJlbnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUtPnBhcmVu
dE5vZGUoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluTm9kZSA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKTsKICAgICAgICAgaWYgKHBvc2l0aW9u
SW5QYXJlbnQgIT0gcG9zaXRpb25Jbk5vZGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShTcGxpdEVsZW1lbnRDb21tYW5kOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUtPnBhcmVudE5vZGUoKSksIG5vZGUpKTsKLSAgICB9Ci0gICAgaWYgKHNwbGl0QW5jZXN0
b3IpIHsKLSAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbmQpLCBu
b2RlKTsKLSAgICAgICAgcmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHNw
bGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZS0+cGFyZW50Tm9kZSgpKSwgbm9k
ZSk7CiAgICAgfQorCiAgICAgcmV0dXJuIG5vZGUucmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAko
cmV2aXNpb24gODMyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUyLDIwICs5NTIsMTcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gV2UgY2FuIHNraXAgdGhp
cyBvcHRpbWl6YXRpb24gZm9yIGZyYWdtZW50cyBub3Qgd3JhcHBlZCBpbiBvbmUgb2YKICAgICAv
LyBvdXIgc3R5bGUgc3BhbnMgYW5kIGZvciBwb3NpdGlvbnMgaW5zaWRlIGxpc3QgaXRlbXMKICAg
ICAvLyBzaW5jZSBpbnNlcnRBc0xpc3RJdGVtcyBhbHJlYWR5IGRvZXMgdGhlIHJpZ2h0IHRoaW5n
LgotICAgIGlmICghbV9tYXRjaFN0eWxlICYmICFlbmNsb3NpbmdMaXN0KGluc2VydGlvblBvcy5h
bmNob3JOb2RlKCkpICYmIGlzU3R5bGVTcGFuKGZyYWdtZW50LmZpcnN0Q2hpbGQoKSkpIHsKLSAg
ICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IGluc2VydGlvblBvcy5hbmNob3JOb2RlKCktPnBhcmVu
dE5vZGUoKTsKLSAgICAgICAgd2hpbGUgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+cmVuZGVy
ZXIoKSAmJiBpc0lubGluZU5vZGVXaXRoU3R5bGUocGFyZW50Tm9kZSkpIHsKLSAgICAgICAgICAg
IC8vIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLCB3ZSBuZWVkIHRvIHNw
bGl0IGl0IGJlZm9yZSB3ZSBjYW4KLSAgICAgICAgICAgIC8vIG1vdmUgdGhlIGluc2VydGlvbiBw
b3NpdGlvbi4KLSAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb3MuYW5jaG9yTm9kZSgpLT5pc1Rl
eHROb2RlKCkgJiYgaW5zZXJ0aW9uUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yICYmIGluc2VydGlvblBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSAmJiAhaW5zZXJ0aW9uUG9zLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKLSAgICAg
ICAgICAgICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8VGV4
dCo+KGluc2VydGlvblBvcy5hbmNob3JOb2RlKCkpLCBpbnNlcnRpb25Qb3Mub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGUgc3R5bGUg
ZWxlbWVudCBoYXMgbW9yZSB0aGFuIG9uZSBjaGlsZCwgd2UgbmVlZCB0byBzcGxpdCBpdC4KLSAg
ICAgICAgICAgIGlmIChwYXJlbnROb2RlLT5maXJzdENoaWxkKCktPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgICAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihwYXJlbnRO
b2RlKSwgaW5zZXJ0aW9uUG9zLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaW5zZXJ0aW9uUG9zID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUocGFyZW50Tm9kZSk7Ci0gICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgIGlmICghbV9tYXRjaFN0eWxlICYmICFlbmNsb3NpbmdMaXN0KGluc2Vy
dGlvblBvcy5jb250YWluZXJOb2RlKCkpICYmIGlzU3R5bGVTcGFuKGZyYWdtZW50LmZpcnN0Q2hp
bGQoKSkpIHsKKyAgICAgICAgaWYgKGluc2VydGlvblBvcy5jb250YWluZXJOb2RlKCktPmlzVGV4
dE5vZGUoKSAmJiBpbnNlcnRpb25Qb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgJiYgIWluc2Vy
dGlvblBvcy5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpIHsKKyAgICAgICAgICAgIHNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChzdGF0aWNfY2FzdDxUZXh0Kj4oaW5zZXJ0aW9u
UG9zLmFuY2hvck5vZGUoKSksIGluc2VydGlvblBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CisgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGluc2VydGlv
blBvcy5jb250YWluZXJOb2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IGlz
SW5saW5lTm9kZVdpdGhTdHlsZSBkb2VzIG5vdCBjaGVjayBlZGl0YWJpbGl0eS4KKyAgICAgICAg
aWYgKFJlZlB0cjxOb2RlPiBub2RlVG9TcGxpdFRvID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5
cGUoaW5zZXJ0aW9uUG9zLCBpc0lubGluZU5vZGVXaXRoU3R5bGUpKSB7CisgICAgICAgICAgICBp
ZiAoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSAhPSBub2RlVG9TcGxpdFRvKQorICAgICAg
ICAgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBzcGxpdFRyZWVUb05vZGUoaW5zZXJ0aW9uUG9zLmFu
Y2hvck5vZGUoKSwgbm9kZVRvU3BsaXRUby5nZXQoKSwgdHJ1ZSkuZ2V0KCk7CisgICAgICAgICAg
ICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlVG9TcGxpdFRv
LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgzMjc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOCw3ICs2MzgsNyBAQCBOb2Rl
KiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQCiB7CiAgICAgTm9kZSogaGlnaGVz
dCA9IDA7CiAgICAgTm9kZSogcm9vdCA9IHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRh
cnkgPyBoaWdoZXN0RWRpdGFibGVSb290KHApIDogMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLmRl
cHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUq
IG4gPSBwLmNvbnRhaW5lck5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAg
ICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgz
MzA0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTEtMDQtMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUkVHUkVTU0lPTihy
ODE4ODcpOiBDcmFzaCBpbiBTcGxpdEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NzQzCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9u
IHRlc3QgZm9yIGEgY3Jhc2ggaW4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuCisKKyAgICAgICAg
KiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtaW1hZ2VzLWluLXByZS14LWNyYXNoLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWltYWdlcy1p
bi1wcmUteC1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAxMS0wNC0wOCAgU2VyZ2lvIFZpbGxhciBT
ZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBsb29rcyBs
aWtlIHRoZSB0ZXN0IGlzIHdvcmtpbmcgZmluZSBub3cuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtaW1hZ2VzLWluLXByZS14LWNyYXNoLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtaW1hZ2Vz
LWluLXByZS14LWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1pbWFnZXMtaW4tcHJlLXgtY3Jhc2gtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIFdlYktp
dCBkb2VzIG5vdCBjcmFzaC4KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNl
cnRpbmcvaW5zZXJ0LWltYWdlcy1pbi1wcmUteC1jcmFzaC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1pbWFnZXMtaW4tcHJlLXgtY3Jhc2gu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2Vy
dC1pbWFnZXMtaW4tcHJlLXgtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBA
QAorPHByZSBpZD0ieCI+PHggc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPjxicj48L3g+
PC9wcmU+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIHggPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgieCIpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdGFsbCIsZmFs
c2UpOworZG9jdW1lbnQuZGVzaWduTW9kZT0ib24iOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoIklu
c2VydEltYWdlIik7Citkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0SW1hZ2UiKTsKK2RvY3Vt
ZW50LmV4ZWNDb21tYW5kKCJJbnNlcnRJbWFnZSIpOworCitkb2N1bWVudC5vcGVuKCk7Citkb2N1
bWVudC53cml0ZWxuKCdUaGlzIHRlc3QgZW5zdXJlcyBXZWJLaXQgZG9lcyBub3QgY3Jhc2guPGJy
Pjxicj5QQVNTJyk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="81416"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>