<?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>46761</bug_id>
          
          <creation_ts>2010-09-28 15:59:44 -0700</creation_ts>
          <short_desc>Remove calls to Document::updateStyleForAllDocuments()</short_desc>
          <delta_ts>2012-01-26 14:25:02 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>mihaip</cc>
    
    <cc>pfeldman</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>286600</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-28 15:59:44 -0700</bug_when>
    <thetext>We have calls to Document::updateStyleForAllDocuments() sprinkled around, after script execution, timers etc. Now that we have timer-based style resolution and layout, we should never need to update style on a single document at these places, let alone all documents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286612</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-28 16:17:29 -0700</bug_when>
    <thetext>This is well worth doing. Someone tried this and ran into problems, but I can’t seem to find the bug report with the details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333363</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-12 15:39:06 -0800</bug_when>
    <thetext>I tried this and some layout tests ended up differing by one empty text node, so there was some parser state that changed.

It would be interesting to instrument the number of layouts, and see if removing this reduces the layout paint on some common pages (and sets of pages, since this causes interactions between tabs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333420</commentid>
    <comment_count>3</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-12 16:50:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/8856934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335570</commentid>
    <comment_count>4</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-17 16:15:23 -0800</bug_when>
    <thetext>I tried this out and I can remove all calls to Document::updateStyleForAllDocuments() except the one in ScriptControllerBase.cpp. Removing that one causes layout test failures. Attached is a test case of code that fails. We get an extra blank line at the end if we don&apos;t call updateStyleForAllDocuments.

Debugging the code, I see that the extra whitespace node is created at

#0  WebCore::Text::Text (this=0x10595f410, document=0x1060a3a00, data=@0x7fff5fbfdc70) at Text.h:48
#1  0x0000000101b4f6dc in WebCore::Text::create (document=0x1060a3a00, data=@0x7fff5fbfdc70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Text.cpp:46
#2  0x000000010136d3f4 in WebCore::HTMLConstructionSite::insertTextNode (this=0x1059601c8, characters=@0x7fff5fbfdc70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLConstructionSite.cpp:326
#3  0x00000001013e882c in WebCore::HTMLTreeBuilder::processCharacterBuffer (this=0x105960190, buffer=@0x7fff5fbfdcd0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2465
#4  0x00000001013e8ed2 in WebCore::HTMLTreeBuilder::processCharacter (this=0x105960190, token=@0x7fff5fbfdd70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2408
#5  0x00000001013e2bea in WebCore::HTMLTreeBuilder::processToken (this=0x105960190, token=@0x7fff5fbfdd70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:480
#6  0x00000001013ec070 in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken (this=0x105960190, token=@0x7fff5fbfdd70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:452
#7  0x00000001013ec14a in WebCore::HTMLTreeBuilder::constructTreeFromToken (this=0x105960190, rawToken=@0x1060a14b0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:447
#8  0x000000010137231f in WebCore::HTMLDocumentParser::pumpTokenizer (this=0x1060a1400, mode=WebCore::HTMLDocumentParser::AllowYield) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:232
#9  0x0000000101372636 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (this=0x1060a1400, mode=WebCore::HTMLDocumentParser::AllowYield) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:169
#10 0x0000000101372ad8 in WebCore::HTMLDocumentParser::append (this=0x1060a1400, source=@0x7fff5fbfded0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:320
#11 0x00000001010efbb4 in WebCore::DecodedDataDocumentParser::appendBytes (this=0x1060a1400, writer=0x1060848a8, data=0x0, length=0, shouldFlush=true) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/DecodedDataDocumentParser.cpp:54
#12 0x0000000101152190 in WebCore::DocumentWriter::addData (this=0x1060848a8, str=0x0, len=0, flush=true) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentWriter.cpp:200
#13 0x0000000101152212 in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0x1060848a8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentWriter.cpp:220
#14 0x000000010115225b in WebCore::DocumentWriter::end (this=0x1060848a8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentWriter.cpp:206
#15 0x00000001011426b8 in WebCore::DocumentLoader::finishedLoading (this=0x1060ea600) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentLoader.cpp:279
#16 0x00000001012ac961 in WebCore::FrameLoader::finishedLoading (this=0x1060846b8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/FrameLoader.cpp:2175
....

In current code the node has a NULL renderer because of this check in Text::rendererIsNeeded() which returns false.

    RenderObject *prev = previousRenderer();
    if (prev &amp;&amp; prev-&gt;isBR()) // &lt;span&gt;&lt;br/&gt; &lt;br/&gt;&lt;/span&gt;
        return false;

This works because the renderer for the BR tag is created by the call to updateStyleForAllDocuments(). Here is the stacktrace

#0  WebCore::HTMLBRElement::createRenderer (this=0x111509c50, arena=0x1059438b0, style=0x113555a20) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/HTMLBRElement.cpp:79
#1  0x00000001017e94f6 in WebCore::Node::createRendererIfNeeded (this=0x111509c50) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Node.cpp:1381
#2  0x000000010122c893 in WebCore::Element::attach (this=0x111509c50) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:918
#3  0x000000010122c0f0 in WebCore::Element::recalcStyle (this=0x111509c50, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1008
#4  0x000000010122c6dd in WebCore::Element::recalcStyle (this=0x116921350, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1071
#5  0x000000010122c6dd in WebCore::Element::recalcStyle (this=0x105943100, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1071
#6  0x0000000101112ad8 in WebCore::Document::recalcStyle (this=0x1060f5800, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:1599
#7  0x00000001011127ab in WebCore::Document::updateStyleIfNeeded (this=0x1060f5800) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:1641
#8  0x000000010110b461 in WebCore::Document::updateStyleForAllDocuments () at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:1658
#9  0x00000001019eb50c in WebCore::ScriptController::executeScript (this=0x1060ae7b8, sourceCode=@0x7fff5fbfde70, shouldAllowXSS=WebCore::DoNotAllowXSS) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/bindings/ScriptControllerBase.cpp:64
#10 0x00000001019f6c8a in WebCore::ScriptElement::executeScript (this=0x105d00e70, sourceCode=@0x7fff5fbfde70) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/ScriptElement.cpp:214
#11 0x00000001013c5fa4 in WebCore::HTMLScriptRunner::runScript (this=0x11690e7c0, script=0x105d00df0, scriptStartPosition=@0x7fff5fbfdfb0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLScriptRunner.cpp:316
...

In my updated code, if I remove the call to updateStyleForAllDocuments from ScriptControllerBase.cpp, I see my empty node&apos;s renderer being created first. At that point, BR element renderer is NULL and thus the optimization in Text::rendererIsNeeded() does not work. The BR node renderer is created later as

#0  WebCore::HTMLBRElement::createRenderer (this=0x113d917c0, arena=0x105978140, style=0x113dbc2f0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/HTMLBRElement.cpp:79
#1  0x00000001017e94fe in WebCore::Node::createRendererIfNeeded (this=0x113d917c0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Node.cpp:1381
#2  0x000000010122c89b in WebCore::Element::attach (this=0x113d917c0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:918
#3  0x000000010122c0f8 in WebCore::Element::recalcStyle (this=0x113d917c0, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1008
#4  0x000000010122c6e5 in WebCore::Element::recalcStyle (this=0x113dc3ae0, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1071
#5  0x000000010122c6e5 in WebCore::Element::recalcStyle (this=0x1059da420, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Element.cpp:1071
#6  0x0000000101112ae0 in WebCore::Document::recalcStyle (this=0x1060b1200, change=WebCore::Node::NoChange) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:1599
#7  0x00000001011127b3 in WebCore::Document::updateStyleIfNeeded (this=0x1060b1200) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:1641
#8  0x0000000101110c06 in WebCore::Document::finishedParsing (this=0x1060b1200) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:4258
#9  0x00000001013ec23c in WebCore::HTMLTreeBuilder::finished (this=0x113d475a0) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2805
#10 0x0000000101371fca in WebCore::HTMLDocumentParser::end (this=0x1060bdc00) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:332
#11 0x00000001013720b5 in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x1060bdc00) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:341
#12 0x0000000101372cce in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x1060bdc00) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:150
#13 0x0000000101371ef0 in WebCore::HTMLDocumentParser::attemptToEnd (this=0x1060bdc00) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:353
#14 0x0000000101371f28 in WebCore::HTMLDocumentParser::finish (this=0x1060bdc00) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/html/parser/HTMLDocumentParser.cpp:381
#15 0x0000000101109b78 in WebCore::Document::finishParsing (this=0x1060b1200) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/dom/Document.cpp:2290
#16 0x000000010115222e in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0x10608daa8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentWriter.cpp:221
#17 0x0000000101152263 in WebCore::DocumentWriter::end (this=0x10608daa8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentWriter.cpp:206
#18 0x00000001011426c0 in WebCore::DocumentLoader::finishedLoading (this=0x106104000) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/DocumentLoader.cpp:279
#19 0x00000001012ac969 in WebCore::FrameLoader::finishedLoading (this=0x10608d8b8) at /Volumes/Data/psolanki/sources/external/WebKit.git/Source/WebCore/loader/FrameLoader.cpp:2175
....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335572</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-17 16:21:11 -0800</bug_when>
    <thetext>Adam/Eric: so in the current state, we create an empty text node at parse time, then make a &lt;br&gt; at style resolve time, and merge it with the preceding empty text node.

After removing updateStyleForAllDocuments(), we create the text node, and then the &lt;br&gt; first (through style resolve), and fail to merge them.

Should we try harder to merge in ::attach()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335574</commentid>
    <comment_count>6</comment_count>
      <attachid>79228</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-17 16:24:34 -0800</bug_when>
    <thetext>Created attachment 79228
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335654</commentid>
    <comment_count>7</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-17 21:15:07 -0800</bug_when>
    <thetext>*** Bug 47831 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335966</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-01-18 11:43:40 -0800</bug_when>
    <thetext>I would have thought that the two nodes would get lazyAttached, which means neither should have their renderer when you finish running the script.  If lazyAttach was being defeated somehow, then yes, you&apos;d make the renderer for the text node first, since the br wouldn&apos;t even exist yet.  Then having the extra renderer would be expected.

So I guess what you should investigate is if lazyAttach is happening for the two nodes, and if it is, why is the text node getting attached before the br?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336006</commentid>
    <comment_count>9</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-18 12:33:27 -0800</bug_when>
    <thetext>Here is the DOM tree for the testcase

(gdb) call showTree(m_document)
*#document	0x106060600
	HTML	0x105925a80
		HEAD	0x1059235d0
		BODY	0x10592f960
			#text	0x105931e80 &quot;\n\n&quot;
			SCRIPT	0x1078806b0
				#text	0x1078506c0 &quot;\n\nfunction log(message) {\n    document.body.appendChild(document.createTextNode(message));\n    document.body.appendChild(document.createElement(&apos;br&apos;));\n}\n\nlog(&apos;PASS&apos;);\n&quot;
			#text	0x105943e20 &quot;PASS&quot;
			BR	0x10785a950
			#text	0x107880990 &quot;\n&quot;

The problem is the last text node (0x107880990). The &apos;PASS&apos; (0x105943e20) and BR (0x10785a950) nodes do get lazy attached. The last one, however, does not get lazy attached. The code in HTMLConstructionSite::attachAtSite() does

127	    // JavaScript run from beforeload (or DOM Mutation or event handlers)
128	    // might have removed the child, in which case we should not attach it.
129	    if (child-&gt;parentNode() &amp;&amp; site.parent-&gt;attached() &amp;&amp; !child-&gt;attached())
130	        child-&gt;attach();

Just before the attach I see

(gdb) fr
#0  WebCore::HTMLConstructionSite::attachAtSite (this=0x1059ef888, site=@0x7fff5fbfdbb0, prpChild=@0x7fff5fbfdbc0) at /Volumes/Data/psolanki/sources/external/WebKit/Source/WebCore/html/parser/HTMLConstructionSite.cpp:129
129	    if (child-&gt;parentNode() &amp;&amp; site.parent-&gt;attached() &amp;&amp; !child-&gt;attached())
(gdb) call showTree(child.m_ptr)
BODY	0x1059dd250
	#text	0x105992a10 &quot;\n\n&quot;
	SCRIPT	0x108620200
		#text	0x10862e0b0 &quot;\n\nfunction log(message) {\n    document.body.appendChild(document.createTextNode(message));\n    document.body.appendChild(document.createElement(&apos;br&apos;));\n}\n\nlog(&apos;PASS&apos;);\n&quot;
	#text	0x1059e7470 &quot;PASS&quot;
	BR	0x105d020a0
*	#text	0x10860fdc0 &quot;\n&quot;

So we are calling attach() on this textnode while the previous node (BR) is in lazy attach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336011</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 12:39:01 -0800</bug_when>
    <thetext>There was a effort to move everything to using lazyAttach last summer... but then it stalled.  I can&apos;t remember why exactly.  There were performance concerns.  I&apos;d have to look back through email threads, or perhaps others (jamesr, mjs, etc.) remember.

(That explains why we see a lot of places using lazyAttach() but many still using attach().)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336021</commentid>
    <comment_count>11</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-18 12:54:50 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; There was a effort to move everything to using lazyAttach last summer... but then it stalled.  I can&apos;t remember why exactly.  There were performance concerns.  I&apos;d have to look back through email threads, or perhaps others (jamesr, mjs, etc.) remember.

I found bug 47316. Looks like it was a perf loss.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336257</commentid>
    <comment_count>12</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2011-01-18 17:53:08 -0800</bug_when>
    <thetext>I thought making the HTML parser use lazyAttach() (bug 47316) would fix my issue. It didn&apos;t. This is because we end up with the following (partial) dom tree

*	#text	0x1059da2c0 &quot;PASS&quot;
	BR	0x1059c2c90
	#text	0x113ec25f0 &quot;\n\n&quot;

At this point all 3 nodes are attached via lazyAttach() but none have a renderer. We start by calculating style for the PASS element and we create its renderer. And then we come to Node::attach(). The loop in Node::attach() looks at the nodes siblings and decides to create the renderer for the empty text node. And since the BR node has not been created (i.e. its renderer is NULL), the optimization in Text::rendererIsNeeded() eludes us again. The order for creating renderers is 

- PASS text node
- empty text node
- BR node</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336270</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 18:21:35 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I thought making the HTML parser use lazyAttach() (bug 47316) would fix my issue. It didn&apos;t. This is because we end up with the following (partial) dom tree
&gt; 
&gt; *    #text    0x1059da2c0 &quot;PASS&quot;
&gt;     BR    0x1059c2c90
&gt;     #text    0x113ec25f0 &quot;\n\n&quot;
&gt; 
&gt; At this point all 3 nodes are attached via lazyAttach() but none have a renderer. We start by calculating style for the PASS element and we create its renderer. And then we come to Node::attach(). The loop in Node::attach() looks at the nodes siblings and decides to create the renderer for the empty text node. And since the BR node has not been created (i.e. its renderer is NULL), the optimization in Text::rendererIsNeeded() eludes us again. The order for creating renderers is 
&gt; 
&gt; - PASS text node
&gt; - empty text node
&gt; - BR node

It seems like the optimization in Text::rendererIsNeeded() is wrong and is thus being defeated here.

One &quot;fix&quot; would be to make that check require that style is resolved first (I&apos;m not sure that&apos;s safe or a good idea though).  But I&apos;m wondering why the check is needed in the first place.

Have we tested to see what Firefox&apos;s behavior here is?  Do they create an empty renderer?

I&apos;m not sure this &quot;regression&quot; matters much in practice.  If this is the worse consequence of removing updateStyleForAllDocuments() I would just remove it. :)   However I also support further investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336271</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 18:22:16 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Have we tested to see what Firefox&apos;s behavior here is?  Do they create an empty renderer?

I mean &quot;empty text node&quot; of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539219</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-19 18:27:04 -0800</bug_when>
    <thetext>*** Bug 76679 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539235</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-19 18:51:34 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Have we tested to see what Firefox&apos;s behavior here is?  Do they create an empty renderer?
&gt; 
&gt; I&apos;m not sure this &quot;regression&quot; matters much in practice.  If this is the worse consequence of removing updateStyleForAllDocuments() I would just remove it. :)   However I also support further investigation.

The actual DOM is the same here with or without this patch. For example on LayoutTests/fast/canvas/resize-while-save-active.html the last element of document.body.childNodes is a #text node containing three linebreaks. This is the same as Firefox.

I don&apos;t think this renderobject has any impact on the actual rendering of the page or on any APIs exposed to authors. It might have a small perf impact, but certainly the impact is a whole lot smaller than synchronously updating styles on all documents all the time! Here&apos;s a list of all tests that show this issue on a ToT chromium build:

editing/selection/caret-ltr-2-left.html
editing/selection/caret-ltr-2.html
editing/selection/caret-ltr-right.html
editing/selection/caret-ltr.html
editing/selection/caret-rtl-2-left.html
editing/selection/caret-rtl-2.html
editing/selection/caret-rtl-right.html
editing/selection/caret-rtl.html
fast/canvas/resize-while-save-active.html
fast/dom/title-directionality.html
fast/xsl/import-non-document-node.xhtml
http/tests/cache/subresource-expiration-1.html
http/tests/cache/subresource-expiration-2.html
http/tests/xmlhttprequest/send-array-buffer.html
http/tests/xmlhttprequest/send-undefined-and-null.html

I think we should move forward with this, rebaseline those 15 tests, and then if anyone feels motivated to optimize this so there&apos;s no 0x0 RenderText node they can feel free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539240</commentid>
    <comment_count>17</comment_count>
      <attachid>123240</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-19 19:02:00 -0800</bug_when>
    <thetext>Created attachment 123240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539255</commentid>
    <comment_count>18</comment_count>
      <attachid>123240</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-01-19 20:01:42 -0800</bug_when>
    <thetext>Comment on attachment 123240
Patch

Can we remove updateStyleForAllDocuments() itself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539270</commentid>
    <comment_count>19</comment_count>
      <attachid>123240</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-19 21:30:05 -0800</bug_when>
    <thetext>Comment on attachment 123240
Patch

Attachment 123240 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11299288

New failing tests:
fast/multicol/span/span-as-immediate-columns-child-removal.html
fast/multicol/span/span-as-immediate-child-property-removal.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539625</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-20 11:07:09 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 123240 [details])
&gt; Can we remove updateStyleForAllDocuments() itself?

There are 4 remaining callers:

*) Source/WebCore/bindings/js/JSCallbackData.cpp invokeCallback()
*) Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp lookupNamespaceURI()

These do not have direct equivalents in the V8 bindings and I&apos;m not sure exactly what they are for, so I&apos;d prefer that they be removed in a separate patch by someone with a rough understanding of when these are called. I&apos;m pretty sure the callers here were just copied from other similar callsites.


*) Source/WebCore/dom/ContainerNode.cpp setActive() synchronous repaint

This is the synchronous paint-and-sleep logic. It&apos;s also the only caller to RenderObject::repaint(true). I&apos;ve wanted to delete this section for a while, especially since it doesn&apos;t work at all in WebKit2 or Chromium, but other people want to preserve the WK1 behavior here. I think this one needs to stay, since this code bypasses the deferred style recalc/layout/paint loop.


*) Source/WebCore/svg/animation/SMILTimeContainer.cpp updateAnimations()

I haven&apos;t investigated this one at all, nor do I have much of an idea how SMIL animations are supposed to work.  I think they are fairly rare so this one has a smaller impact on performance overall.


I&apos;ll file bugs on these callsites individually and investigate the multicol failure before landing.  Thank you for the prompt review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539673</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-20 12:03:15 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 123240 [details])
&gt; Attachment 123240 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/11299288
&gt; 
&gt; New failing tests:
&gt; fast/multicol/span/span-as-immediate-columns-child-removal.html
&gt; fast/multicol/span/span-as-immediate-child-property-removal.html

These are real, bug I think we&apos;re just exposing a bug in deferred style calculations within multicol.  If I add &quot;document.body.offsetTop&quot; to strategic locations in the test HTML files, I get a different output.

I&apos;ll file a separate bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543483</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-26 14:24:24 -0800</bug_when>
    <thetext>Committed r106043: &lt;http://trac.webkit.org/changeset/106043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543484</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-26 14:25:02 -0800</bug_when>
    <thetext>Landed with new expectations for the multicol tests, since they aren&apos;t regressions (the style bugs with multicol have existed for some time). Will keep a close eye out for unexpected side effects.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>79228</attachid>
            <date>2011-01-17 16:24:34 -0800</date>
            <delta_ts>2011-01-17 16:26:45 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>test.html</filename>
            <type>text/plain</type>
            <size>216</size>
            <attacher name="Pratik Solanki">psolanki</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8L2JvZHk+CjxzY3JpcHQ+CgpmdW5jdGlvbiBsb2cobWVzc2FnZSkgewog
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNz
YWdlKSk7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2JyJykpOwp9Cgpsb2coJ1BBU1MnKTsKPC9zY3JpcHQ+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123240</attachid>
            <date>2012-01-19 19:02:00 -0800</date>
            <delta_ts>2012-01-19 21:30:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46761-20120119190159.patch</filename>
            <type>text/plain</type>
            <size>24869</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZjMjJlOWI1NDkyMTIy
MDQzOGJmYzYxNmRlMDVhY2YyNmYzYjFmNS4uMGI0Yjc0ZTQ1MTkzOGZmMWNiOGZiYWVjZTUxOWJk
NDhmYTNmNjk3NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTE5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2Ugc2hvdWxkbid0
IHN5bmNocm9ub3VzbHkgdXBkYXRlIHN0eWxlcyBvbiBhbGwgZG9jdW1lbnRzIGFmdGVyIHJ1bm5p
bmcgc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00Njc2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEN1cnJlbnRseSB3ZSBjYWxsIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygp
IGFmdGVyIGludm9raW5nIGFueSBldmVudCBvciB0aW1lb3V0IGhhbmRsZXIuIFRoaXMgaXMKKyAg
ICAgICAgc2xvdyBzaW5jZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBlbnRpcmUgZG9jdW1lbnQgdHJl
ZSBhbmQgZGVmZWF0cyBvdXIgcmVjYWxjU3R5bGUgdGltZXIgYmF0Y2hpbmcuIEl0IGlzCisgICAg
ICAgIHVubmVjZXNzYXJ5IGFzIGFueSBjb2RlIHRoYXQgZGVwZW5kcyBvbiBzdHlsZXMgb3IgdGhl
IHJlbmRlciB0cmVlIGJlaW5nIHVwIHRvIGRhdGUgbXVzdCBjYWxsCisgICAgICAgIHVwZGF0ZVN0
eWxlSWZOZWVkZWQoKSBvbiB0aGUgZG9jdW1lbnQgaXQgaXMgYWNjZXNzaW5nLgorCisgICAgICAg
IFRoZSBmaXJzdCByZWZlcmVuY2UgSSBjYW4gZmluZCB0byB0aGlzIGNvZGUgaXMgaW4gcjc5OCBp
biB0aGUgZmlsZSBXZWJDb3JlL2todG1sL3htbC9kb21ub2RlX2ltcGwuY3BwLiBJdCdzIGJlZW4K
KyAgICAgICAgY2FyZ28gY3VsdGVkIGZvcndhcmQgZXZlciBzaW5jZS4KKworICAgICAgICAqIGJp
bmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlU2NyaXB0SW5Xb3JsZCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rp
b246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGRv
bS9TY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4
ZWN1dGVTY3JpcHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50Ojpkb0Rpc3BhdGNoTWVzc2FnZU9uRnJv
bnRlbmRQYWdlKToKKwogMjAxMi0wMS0xOSAgQ2FyeSBDbGFyayAgPGNhcnljbGFya0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFtTa2lhIE1hY10gTWF0Y2ggc3R5bGUgb2YgcGxhdGZvcm0gZXJyb3Ig
dW5kZXJsaW5lIGZvciBtaXNzcGVsbGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAppbmRleCA1NzBmOTY0Y2U5OWFjNmI4ZDA3MjhlMzBm
YTZiNjY5ZTE0ZTBlYmUxLi44NTUxNThhZmMzZWY3OTAyZjJlNjJlZTllOTZmMTVkMjg5Yzc5MGMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2Uu
Y3BwCkBAIC02MywxOSArNjMsOSBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpleGVj
dXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgaWYgKCFj
YW5FeGVjdXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkgfHwgaXNQYXVzZWQoKSkKICAg
ICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAKLSAgICBib29sIHdhc0luRXhlY3V0ZVNjcmlw
dCA9IG1faW5FeGVjdXRlU2NyaXB0OwotICAgIG1faW5FeGVjdXRlU2NyaXB0ID0gdHJ1ZTsKLQog
ICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsgLy8gU2NyaXB0IGV4ZWN1dGlvbiBj
YW4gZGVzdHJveSB0aGUgZnJhbWUsIGFuZCB0aHVzIHRoZSBTY3JpcHRDb250cm9sbGVyLgogCi0g
ICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoc291cmNlQ29kZSk7Ci0KLSAgICBpZiAo
IXdhc0luRXhlY3V0ZVNjcmlwdCkgewotICAgICAgICBtX2luRXhlY3V0ZVNjcmlwdCA9IGZhbHNl
OwotICAgICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBldmFsdWF0ZShzb3VyY2VDb2RlKTsK
IH0KIAogYm9vbCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0
IEtVUkwmIHVybCwgU2hvdWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMIHNob3VsZFJl
cGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4IDU3MmI0NTAxOTI4MTgyNDM0ZmUxN2M2MWE5
YThhOTUwM2ZkYmFlZDMuLjkwOGFkZjhhMmMyMGUyMjg3NmRhNmYwY2FiY2M1ODY2NjJlZTJjNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcApA
QCAtMTI2LDEwICsxMjYsOSBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVj
dXRlU2NyaXB0cyhBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2Z1bmN0aW9uKSB7CisgICAgaWYgKG1fZnVuY3Rpb24pCiAgICAgICAgIGV4ZWN1dGVG
dW5jdGlvbkluQ29udGV4dCh3aW5kb3csIHdpbmRvdy0+c2hlbGwoKSwgZG9jdW1lbnQpOwotICAg
ICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKLSAgICB9IGVsc2UK
KyAgICBlbHNlCiAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdEluV29ybGQo
bV9pc29sYXRlZFdvcmxkLmdldCgpLCBtX2NvZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDk1NjJmNDkyYWE3ZTRlN2M2
NzQyN2FhNTg0ZTkxZTQ1M2VlNWQ4NzkuLmMxMDcyZjg2MTEyN2IzZDlhMmRmODg0MzhlMTQxNTI2
MmNlMmFiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCkBAIC02NCw3ICs2NCw2IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpCiBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1l
KiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3NvdXJjZVVSTCgwKQotICAg
ICwgbV9pbkV4ZWN1dGVTY3JpcHQoZmFsc2UpCiAgICAgLCBtX3BhdXNlZChmYWxzZSkKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1fd2luZG93U2NyaXB0TlBPYmplY3Qo
MCkKQEAgLTQzOCwxNyArNDM3LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhl
Y3V0ZVNjcmlwdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QKICAgICBpZiAo
IWNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2NyaXB0KSB8fCBpc1BhdXNlZCgpKQog
ICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIAotICAgIGJvb2wgd2FzSW5FeGVjdXRlU2Ny
aXB0ID0gbV9pbkV4ZWN1dGVTY3JpcHQ7Ci0gICAgbV9pbkV4ZWN1dGVTY3JpcHQgPSB0cnVlOwot
Ci0gICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0gZXZhbHVhdGVJbldvcmxkKHNvdXJjZUNvZGUsIHdv
cmxkKTsKLQotICAgIGlmICghd2FzSW5FeGVjdXRlU2NyaXB0KSB7Ci0gICAgICAgIG1faW5FeGVj
dXRlU2NyaXB0ID0gZmFsc2U7Ci0gICAgICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERv
Y3VtZW50cygpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGV2YWx1
YXRlSW5Xb3JsZChzb3VyY2VDb2RlLCB3b3JsZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAppbmRl
eCA2YjY2MmRhYWMwYTJkODliNjEwMjdiNTNiMjkxYTdkYjlmZmZiZGI3Li41ZTE1MWFhZTMzZjgx
NjBlMDZkNDc4NWEyZGU5ZDA5ZGFhYWE4MjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNjgsOCArMTY4LDYgQEAgcHJpdmF0ZToKICAg
ICBGcmFtZSogbV9mcmFtZTsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNlVVJMOwogCi0gICAg
Ym9vbCBtX2luRXhlY3V0ZVNjcmlwdDsKLQogICAgIGJvb2wgbV9wYXVzZWQ7CiAKICAgICAvLyBU
aGUgcm9vdCBvYmplY3QgdXNlZCBmb3Igb2JqZWN0cyBib3VuZCBvdXRzaWRlIHRoZSBjb250ZXh0
IG9mIGEgcGx1Z2luLCBzdWNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY2hlZHVsZWRBY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1
bGVkQWN0aW9uLmNwcAppbmRleCAyYWUzM2Q4NThjODk1YzM0M2YyODA2MDFkNjE5OWE2ODA3MTIw
YTUzLi5hYzdlZDNhZTgxZmMxMmM5MjFkYzhhMTgwMTc3NTdlMTM2ODI1NDNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTEyNiwxMCAr
MTI2LDkgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoVjhQcm94eSogcHJveHkpCiAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICAvLyBGSVhNRTog
TmVlZCB0byBpbXBsZW1lbnQgdGltZW91dHMgZm9yIHByZWVtcHRpbmcgYSBsb25nLXJ1bm5pbmcg
c2NyaXB0LgotICAgIGlmICghbV9mdW5jdGlvbi5Jc0VtcHR5KCkgJiYgbV9mdW5jdGlvbi0+SXNG
dW5jdGlvbigpKSB7CisgICAgaWYgKCFtX2Z1bmN0aW9uLklzRW1wdHkoKSAmJiBtX2Z1bmN0aW9u
LT5Jc0Z1bmN0aW9uKCkpCiAgICAgICAgIHByb3h5LT5jYWxsRnVuY3Rpb24odjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2Z1bmN0aW9uKSwgdjhDb250ZXh0LT5HbG9iYWwoKSwg
bV9hcmdjLCBtX2FyZ3YpOwotICAgICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1
bWVudHMoKTsKLSAgICB9IGVsc2UKKyAgICBlbHNlCiAgICAgICAgIHByb3h5LT5ldmFsdWF0ZSht
X2NvZGUsIDApOwogCiAgICAgLy8gVGhlICdwcm94eScgbWF5IGJlIGludmFsaWQgYXQgdGhpcyBw
b2ludCBzaW5jZSBKUyBjb3VsZCBoYXZlIHJlbGVhc2VkIHRoZSBvd25pbmcgRnJhbWUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGNi
Mzc4MDlhN2JjYmE5NWIyOGZjYmQ1ZTUwZjY0YjM1MDQ2MTFmM2UuLjhkZTk1NTM3YWQ3ZjJjZmQx
YWY2NGY4MmU5ZGFkZmE4ZDI3ZGM5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMDUsNyArMTA1LDYgQEAgYm9vbCBTY3JpcHRD
b250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJhbWUpCiBTY3Jp
cHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJh
bWUoZnJhbWUpCiAgICAgLCBtX3NvdXJjZVVSTCgwKQotICAgICwgbV9pbkV4ZWN1dGVTY3JpcHQo
ZmFsc2UpCiAgICAgLCBtX3BhdXNlZChmYWxzZSkKICAgICAsIG1fcHJveHkoYWRvcHRQdHIobmV3
IFY4UHJveHkoZnJhbWUpKSkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCAyNGMxODg1
ODdkYzRjOGVkYzU3NzE2OWUwNWUwMzBmZmZkZjgyZDk0Li45ZDJlZmRlYjE4ZWRjNTI2NjFhZTk4
YzhjNjgwODU2Zjc0YzU1ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5oCkBAIC0xODcsOCArMTg3LDYgQEAgcHJpdmF0ZToKICAgICBGcmFtZSog
bV9mcmFtZTsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNlVVJMOwogCi0gICAgYm9vbCBtX2lu
RXhlY3V0ZVNjcmlwdDsKLQogICAgIGJvb2wgbV9wYXVzZWQ7CiAKICAgICBPd25QdHI8VjhQcm94
eT4gbV9wcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCA4NjAwMzMw
N2U4MTA1OGY1NmJjYmJkYTE4MTgzMjA5OWU5MGMxOWVmLi43MWMxZmNlNDI2OGExYmJjMTc1MDQ1
ZjcyMjQ4NGJkZWJiYzM5ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBA
IC0yODcsOCArMjg3LDYgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgICAgICAgICAvLyBOb3RlOiBUaGlz
IGlzIHdoZXJlIHRoZSBzY3JpcHQgaXMgY29tcGlsZWQgYW5kIGFjdHVhbGx5IGV4ZWN1dGVkLgog
ICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZShzb3VyY2VDb2RlKTsKICAgICAg
ICAgfQotCi0gICAgICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNw
cAppbmRleCAwZDU2Yjk5Mjk4ZjUzMDNkODMwOGRkMDkwYWZlN2M5NmFmMWVlNGZkLi40M2E3MzQw
ZDA5Y2UzNzkzNmNmOTk1NDZmODU3YjExYTAwZDcyMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtNTgsOCArNTgsNyBAQCBib29sIEluc3Bl
Y3RvckNsaWVudDo6ZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZShQYWdlKiBmcm9udGVu
ZFBhZ2UsIGNvbnN0CiAgICAgZGlzcGF0Y2hUb0Zyb250ZW5kICs9IG1lc3NhZ2U7CiAgICAgZGlz
cGF0Y2hUb0Zyb250ZW5kICs9ICIpOyI7CiAKLSAgICAvLyBEbyBub3QgY2FsbCBleGVjdXRlSW5X
b3JsZCBoZXJlIHNpbmNlIGl0IHdpbGwgZW5kIHVwIGNhbGxpbmcgRG9jdW1lbnQ6OnVwZGF0ZVN0
eWxlRm9yQWxsRG9jdW1lbnRzKCkuCi0gICAgLy8gQXMgYSByZXN1bHQgd2UgbWlnaHQgcmUtZW50
ZXIgQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KCkgd2hpY2ggaXMgdGVycmlibGUu
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGV4ZWN1dGUgdGhlIHNjcmlwdCBpbiB0aGUgYXBw
cm9wcmlhdGUgd29ybGQuCiAgICAgc2NyaXB0Q29udHJvbGxlci0+ZXZhbHVhdGUoU2NyaXB0U291
cmNlQ29kZShkaXNwYXRjaFRvRnJvbnRlbmQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1h
Y3RpdmUtZXhwZWN0ZWQudHh0CmluZGV4IGUzNWZmYTZkMDQxNGUwMzdjYzIwOTg2OWI2Y2E5NzBj
Yjc4MDQzZTMuLmY1NTcxMWM5ZGYyOTdmMDlkMzcwNzgwOThmNDE0NzZhNTVmZjQyMDQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNh
dmUtYWN0aXZlLWV4cGVjdGVkLnR4dApAQCAtMSArMSwzIEBACiBJZiB3ZSBnb3QgdGhpcyBmYXIg
d2l0aG91dCBhbiBhc3NlcnRpb24sIHRoaXMgdGVzdCBwYXNzZWQuCisKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vdGl0bGUtZGlyZWN0aW9uYWxpdHktZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vdGl0bGUtZGlyZWN0aW9uYWxpdHktZXhwZWN0ZWQudHh0Cmlu
ZGV4IDdkZGY4ZGRhYzc4ZGE4MGU2YzJjYmVkMjliZGVlNGYxYWQwOGYyNDEuLmIyMzI3Njg0MGFk
Y2I3ZWNlODVjMzkyNTM0YzdjOGFkZjk2YWFkMjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3RpdGxlLWRpcmVjdGlvbmFsaXR5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS90aXRsZS1kaXJlY3Rpb25hbGl0eS1leHBlY3RlZC50eHQKQEAgLTMsMyArMyw0
IEBACiA8aHRtbD48dGl0bGUgZGlyPXJ0bD5mb288L3RpdGxlPjwvaHRtbD4gc2hvdWxkIGhhdmUg
dGl0bGUgZGlyZWN0aW9uICJydGwiLiBQQVNTCiA8aHRtbCBkaXI9cnRsPjx0aXRsZT5mb288L3Rp
dGxlPjwvaHRtbD4gc2hvdWxkIGhhdmUgdGl0bGUgZGlyZWN0aW9uICJydGwiLiBQQVNTCiA8aHRt
bCBkaXI9cnRsPjx0aXRsZSBkaXI9bHRyPmZvbzwvdGl0bGU+PC9odG1sPiBzaG91bGQgaGF2ZSB0
aXRsZSBkaXJlY3Rpb24gImx0ciIuIFBBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC94c2wvaW1wb3J0LW5vbi1kb2N1bWVudC1ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QveHNsL2ltcG9ydC1ub24tZG9jdW1lbnQtbm9kZS1leHBlY3RlZC50eHQKaW5kZXggODlm
YWU5YmYyMTc0MTAyOWI4OWQ3MWZhNDdjNWNiOWJkMzM3ZDhhYy4uZDRlYmZkZGFlZjc3NmIxOGJm
MWZiNTUwYmUxN2JiNjFjZGM0MjFmNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC94c2wv
aW1wb3J0LW5vbi1kb2N1bWVudC1ub2RlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L3hzbC9pbXBvcnQtbm9uLWRvY3VtZW50LW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEs
NSBAQAogVGVzdCBpbXBvcnRpbmcgYW4geHNsOnN0eWxlc2hlZXQgbm9kZSBhcyBzdHlsZXNoZWV0
IGZvciBYU0xUUHJvY2Vzc29yLgogCiBTVUNDRVNTCisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBpcmF0aW9uLTEtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBpcmF0aW9uLTEt
ZXhwZWN0ZWQudHh0CmluZGV4IDEzOTQ0Y2EzMzQzZjY4Y2MxNDNkNmMxMDA4MTcyZjEyMGFmMWEx
MDEuLmIxZDhmODNjZjY0YmIwOGIwNjVkYjBjNDhkYjFkYjNhYWUwMWQwNTYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZXhwaXJhdGlvbi0xLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNl
LWV4cGlyYXRpb24tMS1leHBlY3RlZC50eHQKQEAgLTksMyArOSw0IEBAIENhY2hlLWNvbnRyb2w6
IG1heC1hZ2U9MTA7IChyZXN1bHQ9Q2FjaGVkIGV4cGVjdGVkPUNhY2hlZCkgUEFTUwogQ2FjaGUt
Y29udHJvbDogbWF4LWFnZT0wOyAocmVzdWx0PVVuY2FjaGVkIGV4cGVjdGVkPVVuY2FjaGVkKSBQ
QVNTCiBDYWNoZS1jb250cm9sOiBtYXgtYWdlPTE7IFtkZWxheT0xLjVzXSAocmVzdWx0PVVuY2Fj
aGVkIGV4cGVjdGVkPVVuY2FjaGVkKSBQQVNTCiBDYWNoZS1jb250cm9sOiBtYXgtYWdlPTEwLCBu
by1jYWNoZTsgKHJlc3VsdD1VbmNhY2hlZCBleHBlY3RlZD1VbmNhY2hlZCkgUEFTUworCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNlLWV4cGlyYXRp
b24tMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291
cmNlLWV4cGlyYXRpb24tMi1leHBlY3RlZC50eHQKaW5kZXggYjIyZjgzYWM0MzM2ZmQ2MjU3ZmI1
NTFmMjU1YjNkOGQxYTdlNWU1Ny4uMDcwYmQ0ZWI0ODY0YTQ3ODc0ZTYxNTBiOTZiNmFlMDQwMGNh
MWNiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJj
ZS1leHBpcmF0aW9uLTItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
Y2FjaGUvc3VicmVzb3VyY2UtZXhwaXJhdGlvbi0yLWV4cGVjdGVkLnR4dApAQCAtOSwzICs5LDQg
QEAgRXhwaXJlczogW25vdysxMHNdOyBDYWNoZS1jb250cm9sOiBtYXgtYWdlPTA7IChyZXN1bHQ9
VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQKIExhc3QtbW9kaWZpZWQ6IFtub3ctMzYwMHNdOyBb
ZGVsYXk9MS41c10gKHJlc3VsdD1DYWNoZWQgZXhwZWN0ZWQ9Q2FjaGVkKSBQQVNTCiBMYXN0LW1v
ZGlmaWVkOiBbbm93LTEwc107IFtkZWxheT0xLjVzXSAocmVzdWx0PVVuY2FjaGVkIGV4cGVjdGVk
PVVuY2FjaGVkKSBQQVNTCiBMYXN0LW1vZGlmaWVkOiBbbm93KzEwc107IChyZXN1bHQ9VW5jYWNo
ZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zZW5kLWFycmF5LWJ1ZmZlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3NlbmQtYXJyYXktYnVmZmVyLWV4
cGVjdGVkLnR4dAppbmRleCBlNWY3NDIxNWM4NTdiZjFkMjhhYzU5M2U3ZWRmYzllMmIzNTIwNjJj
Li5iZTU4ODNmZDE2NzM5ZTFjZjlmZTJjYzg3YzA2ZjEwNjE2NDYwODcyIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3NlbmQtYXJyYXktYnVmZmVyLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Nl
bmQtYXJyYXktYnVmZmVyLWV4cGVjdGVkLnR4dApAQCAtMSwyICsxLDMgQEAKIFRlc3RzIHNlbmRp
bmcgYW4gYXJyYXkgYnVmZmVyLgogMCAxIDIgNDggNDkgNTAgMTI4IDEyOSAxMzAgMjUzIDI1NCAy
NTUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9z
ZW5kLXVuZGVmaW5lZC1hbmQtbnVsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3NlbmQtdW5kZWZpbmVkLWFuZC1udWxsLWV4cGVjdGVkLnR4dApp
bmRleCA1ZTMzYTkwNGJmMzdiZjIzN2JiY2IzOTI3M2ZlZWZmNWU2OTljMzY0Li5iZjU3MGRjY2Vi
MTJlMGNlM2I0MjBiYmY1ZTE2MTZmMmE5NGYzNzA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3NlbmQtdW5kZWZpbmVkLWFuZC1udWxsLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3NlbmQtdW5k
ZWZpbmVkLWFuZC1udWxsLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDQgQEAKIFRlc3RzIHRoYXQg
c2VuZGluZyB1bmRlZmluZWQgb3IgbnVsbCByZXN1bHRzIGluIGFuIGVtcHR5IHJlcXVlc3QgYm9k
eS4KIFBBU1MgZm9yIHVuZGVmaW5lZAogUEFTUyBmb3IgbnVsbAorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRy
LTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRp
bmcvc2VsZWN0aW9uL2NhcmV0LWx0ci0yLWV4cGVjdGVkLnR4dAppbmRleCAxYWYyNDlkYTRhZmQw
YTlkYjBlZThmMjJhODdhMGQ4OGUxN2JjYmQ1Li4zNjUzMzY3ZjczMDY1NWJlNDg0NmM5NWU0NWI5
YWQyMmE2MGJkNTYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13
aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLTItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHIt
Mi1leHBlY3RlZC50eHQKQEAgLTE0LDQgKzE0LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
MTQ1CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDM4eDE5CiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzg6ICJQQVNTIgogICAgICAgICBSZW5kZXJC
UiB7QlJ9IGF0ICgzOCwwKSBzaXplIDB4MTkKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgMHgwCiBjYXJldDogcG9zaXRpb24gMCBvZiBjaGlsZCAwIHsjdGV4dH0gb2Yg
Y2hpbGQgMyB7RElWfSBvZiBib2R5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLTItbGVmdC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24v
Y2FyZXQtbHRyLTItbGVmdC1leHBlY3RlZC50eHQKaW5kZXggN2YxOTliMjMyZTNlYjM1NTllOTk2
NDIxMGMzYzY2NWRlZTBhMWY5YS4uZDg1NWNkNGIzMGYwOTJkMDk4OTNiNWYyZjNmN2Q5YTU3NjE2
Y2ZiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRp
bmcvc2VsZWN0aW9uL2NhcmV0LWx0ci0yLWxlZnQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItMi1s
ZWZ0LWV4cGVjdGVkLnR4dApAQCAtMTQsNCArMTQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHgxNDUKICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzh4MTkKICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODogIlBBU1MiCiAgICAgICAgIFJlbmRl
ckJSIHtCUn0gYXQgKDM4LDApIHNpemUgMHgxOQorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAweDAKIGNhcmV0OiBwb3NpdGlvbiA3IG9mIGNoaWxkIDAgeyN0ZXh0fSBv
ZiBjaGlsZCAzIHtESVZ9IG9mIGJvZHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0
LWx0ci1leHBlY3RlZC50eHQKaW5kZXggNzhiZWEzMDA0MTQwNGRiNjJlMzZkYjE4OTZhMmQwZWM3
ODc2MTAyNy4uNjk4ZTJmOTNjMjEzNjVlZDRhYzllYmI1NDg0MTUwMDcxMWU3Y2JkOCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRpbmcvc2VsZWN0aW9u
L2NhcmV0LWx0ci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0td2luL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci1leHBlY3RlZC50eHQKQEAgLTE0LDQg
KzE0LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MTQ1CiAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDM4eDE5CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzg6ICJQQVNTIgogICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzOCwwKSBzaXplIDB4
MTkKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiBjYXJldDog
cG9zaXRpb24gMCBvZiBjaGlsZCAwIHsjdGV4dH0gb2YgY2hpbGQgMyB7RElWfSBvZiBib2R5CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxl
Y3Rpb24vY2FyZXQtbHRyLXJpZ2h0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItcmlnaHQtZXhwZWN0ZWQu
dHh0CmluZGV4IDhjZTEzMTdhODMwNzBjZGYxZWIyMDcwMmJkZjExYWQxNjRkMWNhMmIuLmExYjM2
ZDVjMTJhMmMyNmQ1NDYzOWZlZjBjNDhhOTRhMzAxZmQxZTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItcmln
aHQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9l
ZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItcmlnaHQtZXhwZWN0ZWQudHh0CkBAIC0xNCw0ICsx
NCw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE0NQogICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAzOHgxOQogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDM4OiAiUEFTUyIKICAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzgsMCkgc2l6ZSAweDE5
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAogY2FyZXQ6IHBv
c2l0aW9uIDcgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNoaWxkIDMge0RJVn0gb2YgYm9keQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRpbmcvc2VsZWN0
aW9uL2NhcmV0LXJ0bC0yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtMi1leHBlY3RlZC50eHQKaW5kZXgg
YTQ1MGU5MGEzODA4ZjA1YTQxYzY3OWY0NTc0MjI4MWJmMGExZWE5ZC4uYTllNGU2NjU0NGJkMzA3
Yzg4ZDUxYWVjNTNkODc2OTM4NjIzM2RmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0td2luL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC0yLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rp
b24vY2FyZXQtcnRsLTItZXhwZWN0ZWQudHh0CkBAIC0xNCw0ICsxNCw1IEBAIGxheWVyIGF0ICgw
LDApIHNpemUgODAweDE0NQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzOHgxOQogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM4OiAiUEFTUyIKICAg
ICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzgsMCkgc2l6ZSAweDE5CisgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAogY2FyZXQ6IHBvc2l0aW9uIDcgb2YgY2hpbGQg
MCB7I3RleHR9IG9mIGNoaWxkIDMge0RJVn0gb2YgYm9keQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC0yLWxl
ZnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2VkaXRp
bmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC0yLWxlZnQtZXhwZWN0ZWQudHh0CmluZGV4IGNmOWVlYmJm
OTQzZmI2MTA1YjNmNWRjZjczMDdlYzAwZTg4YjM2YzIuLjE3MzU1ZjA3ZGEzNDllNTk2OTY2ODQ4
OTkxNzFiYTQ0Y2Q2YmIwZGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtMi1sZWZ0LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24v
Y2FyZXQtcnRsLTItbGVmdC1leHBlY3RlZC50eHQKQEAgLTE0LDQgKzE0LDUgQEAgbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4MTQ1CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDM4eDE5CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzg6ICJQQVNTIgog
ICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzOCwwKSBzaXplIDB4MTkKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiBjYXJldDogcG9zaXRpb24gMCBvZiBjaGls
ZCAwIHsjdGV4dH0gb2YgY2hpbGQgMyB7RElWfSBvZiBib2R5CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0aW5nL3Nl
bGVjdGlvbi9jYXJldC1ydGwtZXhwZWN0ZWQudHh0CmluZGV4IGJmMDY2NTg0NDUwOWIzNzhhMGRm
MjNiYmI1NjRlYzMwMmMxOGJkYzguLjFmOTMwNGJkMjc2ZDhjMTFhY2U0NWUxMjA1OTcwYzBkYzY2
Y2Q1YWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0
aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtLXdpbi9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtZXhwZWN0ZWQu
dHh0CkBAIC0xNCw0ICsxNCw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE0NQogICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOHgxOQogICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDApIHdpZHRoIDM4OiAiUEFTUyIKICAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAo
MzgsMCkgc2l6ZSAweDE5CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDB4MAogY2FyZXQ6IHBvc2l0aW9uIDcgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNoaWxkIDMge0RJ
Vn0gb2YgYm9keQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2lu
L2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC1yaWdodC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLXJp
Z2h0LWV4cGVjdGVkLnR4dAppbmRleCA5ZWViMmM1OTdkOWQ2N2M4NTAxOTgyOGQ3ZTdiMmFjNzEy
ZmM3YjA2Li5iMmJiY2E3OWU3NTQzZDk3Yzc0MzJiZTM1YWM0OTlkZGIyNDgyOTg5IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24v
Y2FyZXQtcnRsLXJpZ2h0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4vZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLXJpZ2h0LWV4cGVjdGVkLnR4
dApAQCAtMTQsNCArMTQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNDUKICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzh4MTkKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAzODogIlBBU1MiCiAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDM4
LDApIHNpemUgMHgxOQorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAw
eDAKIGNhcmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDAgeyN0ZXh0fSBvZiBjaGlsZCAzIHtESVZ9
IG9mIGJvZHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvc2VuZC1hcnJheS1idWZmZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zZW5k
LWFycmF5LWJ1ZmZlci1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU1Zjc0MjE1Yzg1N2JmMWQyOGFjNTkzZTdlZGZjOWUyYjM1MjA2MmMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zZW5kLWFycmF5LWJ1ZmZlci1leHBlY3Rl
ZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLVRlc3RzIHNlbmRpbmcgYW4gYXJy
YXkgYnVmZmVyLgotMCAxIDIgNDggNDkgNTAgMTI4IDEyOSAxMzAgMjUzIDI1NCAyNTUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1s
dHItMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxl
Y3Rpb24vY2FyZXQtbHRyLTItZXhwZWN0ZWQudHh0CmluZGV4IGJhODQyNWZkODVhMjY2NjAzYjRj
NzNjZDZkNDUxNjJkYThmNTQyMzYuLmU0ZGNmODBiZmQyZGE0Y2MwYTNmYWVhYjZiNjJiODUzMWM2
M2IwYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVj
dGlvbi9jYXJldC1sdHItMi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci0yLWV4cGVjdGVkLnR4dApAQCAtMTQsNCAr
MTQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxMzkKICAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMzl4MTgKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCAzOTogIlBBU1MiCiAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDM5LDApIHNpemUgMHgx
OAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKIGNhcmV0OiBw
b3NpdGlvbiAwIG9mIGNoaWxkIDAgeyN0ZXh0fSBvZiBjaGlsZCAzIHtESVZ9IG9mIGJvZHkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVjdGlvbi9jYXJl
dC1sdHItMi1sZWZ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0
aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItMi1sZWZ0LWV4cGVjdGVkLnR4dAppbmRleCA2Y2IxYWJh
MTA3Y2I0ZTI2ZDM4ZmMxZjViN2ZhNGE4MTNmZDFkOTRmLi4zMDMwNGM2YmMyMzhlMDg1ZDZkYTc3
ZDBjOTAyODk3YjAyYTliNTg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLTItbGVmdC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci0yLWxlZnQt
ZXhwZWN0ZWQudHh0CkBAIC0xNCw0ICsxNCw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDEz
OQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOXgxOAogICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM5OiAiUEFTUyIKICAgICAgICAgUmVuZGVyQlIg
e0JSfSBhdCAoMzksMCkgc2l6ZSAweDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAogY2FyZXQ6IHBvc2l0aW9uIDcgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNo
aWxkIDMge0RJVn0gb2YgYm9keQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLWV4cGVjdGVkLnR4dAppbmRl
eCA0MGM4MWQzNTZkYzdlNDg3YmY2YTlmYmRjNWE2MGIzNDFkYzViMDFhLi40Zjk1ZjFlMjg4ZDVj
OGY5NmQ2NmU3NzRiMTcyOTJmMDUzNDUwNjZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbHRyLWV4cGVj
dGVkLnR4dApAQCAtMTQsNCArMTQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxMzkKICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzl4MTgKICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTogIlBBU1MiCiAgICAgICAgIFJlbmRlckJSIHtCUn0g
YXQgKDM5LDApIHNpemUgMHgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAweDAKIGNhcmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDAgeyN0ZXh0fSBvZiBjaGlsZCAz
IHtESVZ9IG9mIGJvZHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0
aW5nL3NlbGVjdGlvbi9jYXJldC1sdHItcmlnaHQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci1yaWdodC1leHBlY3RlZC50
eHQKaW5kZXggNWI3ZTQ4MGM3NzgwMTYyYWE4NTZlNjk4OWMyMmZjYWNiMmYwZWFmNy4uOGFmMDhl
YTU3ODY2ZjY2Njk1ZTU2MGIzNWE3MTAyMjhmYTg5MDYwNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LWx0ci1yaWdodC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2Nh
cmV0LWx0ci1yaWdodC1leHBlY3RlZC50eHQKQEAgLTE0LDQgKzE0LDUgQEAgbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4MTM5CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDM5eDE4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzk6ICJQQVNTIgogICAg
ICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzOSwwKSBzaXplIDB4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiBjYXJldDogcG9zaXRpb24gNyBvZiBjaGlsZCAw
IHsjdGV4dH0gb2YgY2hpbGQgMyB7RElWfSBvZiBib2R5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLTItZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC0y
LWV4cGVjdGVkLnR4dAppbmRleCAzYjFkMDVhNjE3ZTQwODc1MzNjNWY3ZTQ5N2YzYThkMjA5ZTVi
OThjLi4yM2Y4ZjBiYjRhMDA4NzIwMWNhMWY2YzkyZTRiYjZlYTA0MWU0MzZjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLTIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVj
dGlvbi9jYXJldC1ydGwtMi1leHBlY3RlZC50eHQKQEAgLTE0LDQgKzE0LDUgQEAgbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4MTQwCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDM5eDE4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzk6ICJQQVNTIgog
ICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzOSwwKSBzaXplIDB4MTgKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiBjYXJldDogcG9zaXRpb24gNyBvZiBjaGls
ZCAwIHsjdGV4dH0gb2YgY2hpbGQgMyB7RElWfSBvZiBib2R5CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtcnRsLTItbGVmdC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2Fy
ZXQtcnRsLTItbGVmdC1leHBlY3RlZC50eHQKaW5kZXggODNlNjJhNTIxOTI1Zjk1OWExYjQyNGQx
YjA0NWRhYmQ0MjE0N2I0YS4uNjg1NWZjZjVlZTQ5Y2I4MDE2MTBiZjRlZTlhNTVjN2I0ODRmMzg1
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9u
L2NhcmV0LXJ0bC0yLWxlZnQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtMi1sZWZ0LWV4cGVjdGVkLnR4dApAQCAt
MTQsNCArMTQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNDAKICAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzl4MTgKICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAzOTogIlBBU1MiCiAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDM5LDApIHNp
emUgMHgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKIGNh
cmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDAgeyN0ZXh0fSBvZiBjaGlsZCAzIHtESVZ9IG9mIGJv
ZHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVjdGlv
bi9jYXJldC1ydGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRp
bmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC1leHBlY3RlZC50eHQKaW5kZXggMGFiMDhjNWZlMjc4YTQx
OTJmNDM0ZWM4ZmIwM2QzZWU2Y2EzOGEzMS4uYzI3MDI4YTU1ODczYWI0NDE4Yzk4NmM5MzQzMjFl
ZDE3NGVkNjI0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcv
c2VsZWN0aW9uL2NhcmV0LXJ0bC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2VkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LXJ0bC1leHBlY3RlZC50eHQKQEAgLTE0LDQg
KzE0LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MTQwCiAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDM5eDE4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzk6ICJQQVNTIgogICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzOSwwKSBzaXplIDB4
MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiBjYXJldDog
cG9zaXRpb24gNyBvZiBjaGlsZCAwIHsjdGV4dH0gb2YgY2hpbGQgMyB7RElWfSBvZiBib2R5CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9zZWxlY3Rpb24vY2Fy
ZXQtcnRsLXJpZ2h0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0
aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtcmlnaHQtZXhwZWN0ZWQudHh0CmluZGV4IGZlZTIxNTNk
YmNhOThhMGUxNTcyMTkyZjZiYTNiOTg1Njg4NGEwYWEuLjcwODhmNTlhM2ZhMDdjZjUxOTZjMjA5
OTA2NGQ5MjM4NGUxOGZjY2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9l
ZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtcmlnaHQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3NlbGVjdGlvbi9jYXJldC1ydGwtcmlnaHQtZXhw
ZWN0ZWQudHh0CkBAIC0xNCw0ICsxNCw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE0MAog
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOXgxOAogICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM5OiAiUEFTUyIKICAgICAgICAgUmVuZGVyQlIge0JS
fSBhdCAoMzksMCkgc2l6ZSAweDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDB4MAogY2FyZXQ6IHBvc2l0aW9uIDAgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNoaWxk
IDMge0RJVn0gb2YgYm9keQo=
</data>
<flag name="review"
          id="124259"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="124273"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>