<?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>17252</bug_id>
          
          <creation_ts>2008-02-09 01:33:20 -0800</creation_ts>
          <short_desc>Acid3 test removing Nodes during NodeIterator walk fails (affects Acid3 test 2)</short_desc>
          <delta_ts>2008-03-25 18:10:08 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>17064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
    
    <cc>spam_hole</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>69905</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-09 01:33:20 -0800</bug_when>
    <thetext>Acid3 test removing Nodes during NodeIterator walk fails

Test 2: reached expectation 13 when expecting expectation 12

We&apos;ll need to reduce this further.

    function () {
      // test 2: Removing nodes during iteration
      var count = 0;
      var expect = function(n, node1, node2) {
        count += 1;
        assert(n == count, &quot;reached expectation &quot; + n + &quot; when expecting expectation &quot; + count);
        assertEquals(node1, node2, &quot;expectation &quot; + count + &quot; failed&quot;);
      };
      var doc = getTestDocument();
      var t1 = doc.body.appendChild(doc.createElement(&apos;t1&apos;));
      var t2 = doc.body.appendChild(doc.createElement(&apos;t2&apos;));
      var t3 = doc.body.appendChild(doc.createElement(&apos;t3&apos;));
      var t4 = doc.body.appendChild(doc.createElement(&apos;t4&apos;));
      var callCount = 0;
      var filterFunctions = [
        function (node) { expect(1, node, doc.body); return true; }, // filter 0
        function (node) { expect(3, node, t1); return true; }, // filter 1
        function (node) { expect(5, node, t2); return true; }, // filter 2
        function (node) { expect(7, node, t3); doc.body.removeChild(t4); return true; }, // filter 3
        function (node) { expect(9, node, t4); return true; }, // filter 4
        function (node) { expect(11, node, t4); doc.body.removeChild(t4); return 2 /* REJECT */; }, // filter 5
        function (node) { expect(12, node, t3); return true; }, // filter 6
        function (node) { expect(14, node, t2); doc.body.removeChild(t2); return true; }, // filter 7
        function (node) { expect(16, node, t1); return true; }, // filter 8
      ];
      var i = doc.createNodeIterator(doc.documentElement.lastChild, 0xFFFFFFFF, function (node) { return filterFunctions[callCount++](node); }, true);
      // * B 1 2 3 4
      expect(2, i.nextNode(), doc.body); // filter 0
      // [B] * 1 2 3 4     
      expect(4, i.nextNode(), t1); // filter 1
      // B [1] * 2 3 4
      expect(6, i.nextNode(), t2); // filter 2
      // B 1 [2] * 3 4
      expect(8, i.nextNode(), t3); // filter 3
      // B 1 2 [3] *
      doc.body.appendChild(t4);
      // B 1 2 [3] * 4
      expect(10, i.nextNode(), t4); // filter 4
      // B 1 2 3 [4] *
      expect(13, i.previousNode(), t3); // filters 5, 6
        // B 1 2 3 * (4) // filter 5
        // B 1 2 [3] *   // between 5 and 6
        // B 1 2 * (3)   // filter 6
      // B 1 2 * [3]
      expect(15, i.previousNode(), t2); // filter 7
        // B 1 2 * (2) [3]
        // -- spec says &quot;For instance, if a NodeFilter removes a node
        //    from a document, it can still accept the node, which
        //    means that the node may be returned by the NodeIterator
        //    or TreeWalker even though it is no longer in the subtree
        //    being traversed.&quot;
        // -- but it also says &quot;If changes to the iterated list do not
        //    remove the reference node, they do not affect the state
        //    of the NodeIterator.&quot;
      // B 1 * [3]
      expect(17, i.previousNode(), t1); // filter 8
      // B [1] * 3
      return 1;
    },</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69919</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-09 07:15:55 -0800</bug_when>
    <thetext>This could be a little challenging.

When I did my first NodeIterator/TreeWalker patch I attempted to fix this issue. However, it was quite tricky. The specification is unclear on what to do when nodes are removed inside the filter function.

- It specifies clearly what should happen to the current node when a node is removed.
- It specifies clearly what current node should be on return from NodeIterator functions.
- But it does not specify what the current node should be during execution of the NodeIterator functions.

In particular, if a function fails because it can&apos;t find, for example, a next sibling, currentNode is supposed to be left unchanged. This means that during the execution of the function we should not be changing currentNode from one candidate to another while calling the filter, because if the filter rejects all the nodes we&apos;ll have to change currentNode back to the original node.

All this led me to creation of a second &quot;current node&quot; that&apos;s just internal to NodeIterator. However, I was not able to get that model into working shape yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74909</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Xiao">spam_hole</who>
    <bug_when>2008-03-23 19:56:02 -0700</bug_when>
    <thetext>http://www.cafeconleche.org/books/xmljava/chapters/ch12.html says some vague stuff about &quot;The iterator’s current position is always between two nodes (or before the first node or after the last node) but never on a node. Thus it is not invalidated by deleting the current node.&quot;

I am new to this, and I realize that this source isn&apos;t the spec. I wonder if an implementation like that can be realized?

Sorry if my query sounds dumb -- I&apos;m just throwing out an idea, since it looks like this bug hasn&apos;t seen any activity for a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75225</commentid>
    <comment_count>3</comment_count>
      <attachid>20065</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-25 17:51:07 -0700</bug_when>
    <thetext>Created attachment 20065
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75229</commentid>
    <comment_count>4</comment_count>
      <attachid>20065</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-03-25 17:59:42 -0700</bug_when>
    <thetext>Comment on attachment 20065
patch


&gt;Index: LayoutTests/traversal/resources/acid3-test-2.js
&gt;===================================================================
&gt;--- LayoutTests/traversal/resources/acid3-test-2.js	(revision 0)
&gt;+++ LayoutTests/traversal/resources/acid3-test-2.js	(revision 0)
&gt;@@ -0,0 +1,73 @@
&gt;+description(&quot;Test of behavior NodeIterator when nodes are removed, from Acid3.&quot;);
&gt;+
&gt;+    var iframe = document.createElement(&quot;iframe&quot;);
&gt;+    iframe.setAttribute(&quot;src&quot;, &quot;about:blank&quot;);
&gt;+    document.body.appendChild(iframe);
&gt;+    var doc = iframe.contentDocument;
&gt;+    for (var i = doc.documentElement.childNodes.length-1; i &gt;= 0; i -= 1)
&gt;+      doc.documentElement.removeChild(doc.documentElement.childNodes[i]);
&gt;+    doc.documentElement.appendChild(doc.createElement(&apos;head&apos;));
&gt;+    doc.documentElement.firstChild.appendChild(doc.createElement(&apos;title&apos;));
&gt;+    doc.documentElement.appendChild(doc.createElement(&apos;body&apos;));
&gt;+

Indentation looks weird here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75237</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-25 18:10:08 -0700</bug_when>
    <thetext>Committed revision 31303.

(Blog post coming shortly.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20065</attachid>
            <date>2008-03-25 17:51:07 -0700</date>
            <delta_ts>2008-03-25 17:59:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>NodeIteratorPatch.txt</filename>
            <type>text/plain</type>
            <size>14253</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDgtMDMtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjUyCisgICAgICAgICAg
QWNpZDMgdGVzdCByZW1vdmluZyBOb2RlcyBkdXJpbmcgTm9kZUl0ZXJhdG9yIHdhbGsgZmFpbHMg
KGFmZmVjdHMgQWNpZDMgdGVzdCAyKQorCisgICAgICAgIFRlc3Q6IHRyYXZlcnNhbC9hY2lkMy10
ZXN0LTIuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKTogVXBkYXRl
IHNpbmNlIHJlc3VsdCBpcyBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRl
cmF0b3I6OnByZXZpb3VzTm9kZSk6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6IENoYW5nZWQg
cmVzdWx0IHRvIFBhc3NSZWZQdHIuIEFkZGVkIGNvZGUgdG8KKyAgICAgICAgdHJhY2sgYm90aCB0
aGUgY3VycmVudCBjYW5kaWRhdGUgKHdoaWNoIG5lZWRzIHRvIG1vdmUgYWxvbmcgdG8gdGhlIG5l
eHQgbm9kZQorICAgICAgICBpZiBjdXJyZW50IG5vZGUgaXMgZGVsZXRlZCkgYW5kIHRoZSBjdXJy
ZW50IHByb3Zpc2lvbmFsIHJlc3VsdCAocGFzc2VkIHRvIGFjY2VwdE5vZGUsCisgICAgICAgIGFu
ZCBuZWVkcyB0byBiZSByZXR1cm5lZCBldmVuIGlmIGl0J3MgZGVsZXRlZCkuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUl0ZXJhdG9yOjpub2RlV2lsbEJlUmVtb3ZlZCk6IENhbGwgdXBkYXRlRm9yTm9k
ZVJlbW92YWwgZm9yCisgICAgICAgIG1fY2FuZGlkYXRlTm9kZSBhcyB3ZWxsIGFzIG1fcmVmZXJl
bmNlTm9kZS4KKyAgICAgICAgKiBkb20vTm9kZUl0ZXJhdG9yLmg6IFVzZSBQYXNzUmVmUHRyIGZv
ciByZXR1cm4gdmFsdWVzLgorCiAyMDA4LTAzLTI1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0IHRvIGZpeCAuYmtsIGJ1aWxkIHN5c3RlbXMgYWZ0
ZXIgcmVjZW50IGFyY2hpdmUgYWRkaXRpb25zCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMzEyOTMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0CiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAg
ICBOb2RlKiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShlYywgZXhjZXB0aW9uKTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZWMsIGV4Y2VwdGlvbik7CiAgICAgaWYg
KGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpAQCAtNTAsMTQgKzUwLDE0IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZShFeGVjU3QKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9K
UyhleGVjLCBub2RlKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlLmdldCgpKTsKIH0KIAog
SlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgSlNWYWx1
ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUo
ZWMsIGV4Y2VwdGlvbik7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3Vz
Tm9kZShlYywgZXhjZXB0aW9uKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02Niw3ICs2
Niw3IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXgKICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBub2RlLmdldCgpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZUl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCShyZXZp
c2lvbiAzMTI5MykKKysrIFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDE0ICs4NSwxNCBAQCBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogICAg
IHJvb3QoKS0+ZG9jdW1lbnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwogfQogCi1Ob2Rl
KiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjLCBKU1ZhbHVlKiYgZXhj
ZXB0aW9uKQorUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlv
bkNvZGUmIGVjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIE5vZGUqIHJlc3VsdCA9IDA7CisgICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKIAog
ICAgIG1fY2FuZGlkYXRlTm9kZSA9IG1fcmVmZXJlbmNlTm9kZTsKICAgICB3aGlsZSAobV9jYW5k
aWRhdGVOb2RlLm1vdmVUb05leHQocm9vdCgpKSkgewpAQCAtMTAwLDI4ICsxMDAsMjkgQEAgTm9k
ZSogTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRpb25DbwogICAgICAgICAvLyBJbiBvdGhl
ciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIgZGVzY2VuZGFudHMKICAg
ICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxURVJfUkVKRUNUIGlzIHRo
ZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgogICAgICAgICBleGNlcHRpb24gPSAwOwotICAgICAgICBi
b29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUobV9jYW5kaWRhdGVOb2RlLm5vZGUuZ2V0
KCksIGV4Y2VwdGlvbikgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKKyAgICAgICAgUmVm
UHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7CisgICAg
ICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShwcm92aXNpb25hbFJlc3VsdC5n
ZXQoKSwgZXhjZXB0aW9uKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogICAgICAgICBp
ZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNj
ZXB0ZWQpIHsKICAgICAgICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOworICAgICAg
ICAgICAgcmVzdWx0ID0gcHJvdmlzaW9uYWxSZXN1bHQucmVsZWFzZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NhbmRpZGF0ZU5vZGUuY2xlYXIoKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1O
b2RlKiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYywgSlNWYWx1
ZSomIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05v
ZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCiB7CiAgICAgaWYgKG1f
ZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgTm9kZSogcmVzdWx0ID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4g
cmVzdWx0OwogCiAgICAgbV9jYW5kaWRhdGVOb2RlID0gbV9yZWZlcmVuY2VOb2RlOwogICAgIHdo
aWxlIChtX2NhbmRpZGF0ZU5vZGUubW92ZVRvUHJldmlvdXMocm9vdCgpKSkgewpAQCAtMTI5LDE4
ICsxMzAsMTkgQEAgTm9kZSogTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aQogICAg
ICAgICAvLyBJbiBvdGhlciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIg
ZGVzY2VuZGFudHMKICAgICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxU
RVJfUkVKRUNUIGlzIHRoZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgogICAgICAgICBleGNlcHRpb24g
PSAwOwotICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUobV9jYW5kaWRh
dGVOb2RlLm5vZGUuZ2V0KCksIGV4Y2VwdGlvbikgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVO
b2RlLm5vZGU7CisgICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShwcm92
aXNpb25hbFJlc3VsdC5nZXQoKSwgZXhjZXB0aW9uKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUND
RVBUOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAgICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1f
Y2FuZGlkYXRlTm9kZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVmZXJlbmNlTm9kZS5ub2Rl
LmdldCgpOworICAgICAgICAgICAgcmVzdWx0ID0gcHJvdmlzaW9uYWxSZXN1bHQucmVsZWFzZSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NhbmRpZGF0
ZU5vZGUuY2xlYXIoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQogCiB2b2lkIE5vZGVJdGVyYXRvcjo6ZGV0YWNoKCkKQEAgLTE1Miw2ICsxNTQs
NyBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6ZGV0YWNoKCkKIAogdm9pZCBOb2RlSXRlcmF0b3I6Om5v
ZGVXaWxsQmVSZW1vdmVkKE5vZGUqIHJlbW92ZWROb2RlKQogeworICAgIHVwZGF0ZUZvck5vZGVS
ZW1vdmFsKHJlbW92ZWROb2RlLCBtX2NhbmRpZGF0ZU5vZGUpOwogICAgIHVwZGF0ZUZvck5vZGVS
ZW1vdmFsKHJlbW92ZWROb2RlLCBtX3JlZmVyZW5jZU5vZGUpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2RvbS9Ob2RlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0
b3IuaAkocmV2aXNpb24gMzEyOTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IE5vZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNz
UmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwogICAgICAg
ICB2aXJ0dWFsIH5Ob2RlSXRlcmF0b3IoKTsKIAotICAgICAgICBOb2RlKiBuZXh0Tm9kZShFeGNl
cHRpb25Db2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgTm9kZSogcHJl
dmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmLCBLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOworICAg
ICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmLCBLSlM6OkpTVmFs
dWUqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShF
eGNlcHRpb25Db2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBk
ZXRhY2goKTsKIAogICAgICAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yZWZlcmVuY2VOb2RlLm5vZGUuZ2V0KCk7IH0KQEAgLTQ4LDggKzQ4LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqKTsKIAogICAg
ICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2Ny
aXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIE5vZGUqIG5leHROb2RlKEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IEtKUzo6SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4gbmV4dE5vZGUoZWMsIGV4
Y2VwdGlvbik7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IEtKUzo6SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4gcHJldmlvdXNOb2RlKGVjLCBleGNl
cHRpb24pOyB9CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBuZXh0Tm9kZShlYywgZXhj
ZXB0aW9uKTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNlcHRp
b25Db2RlJiBlYykgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIHByZXZpb3VzTm9k
ZShlYywgZXhjZXB0aW9uKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IE5vZGVQ
b2ludGVyIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzAyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDMtMjUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gdGVzdCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyNTIKKyAgICAgICAgICBBY2lkMyB0ZXN0IHJlbW92aW5nIE5vZGVzIGR1cmlu
ZyBOb2RlSXRlcmF0b3Igd2FsayBmYWlscyAoYWZmZWN0cyBBY2lkMyB0ZXN0IDIpCisKKyAgICAg
ICAgKiB0cmF2ZXJzYWwvYWNpZDMtdGVzdC0yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogdHJhdmVyc2FsL2FjaWQzLXRlc3QtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0cmF2ZXJz
YWwvcmVzb3VyY2VzL2FjaWQzLXRlc3QtMi5qczogQWRkZWQuCisgICAgICAgICogdHJhdmVyc2Fs
L3Jlc291cmNlcy9leGNlcHRpb24tZm9yd2FyZGluZy5qczogUmVtb3ZlZCBib2d1cyBleHRyYSBs
aW5lIG9mIGNvZGUuCisKIDIwMDgtMDMtMjQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBMYXlvdXRUZXN0cy90
cmF2ZXJzYWwvYWNpZDMtdGVzdC0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy90cmF2ZXJzYWwvYWNpZDMtdGVzdC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3RyYXZlcnNhbC9hY2lkMy10ZXN0LTItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQzIEBACitUZXN0IG9mIGJlaGF2aW9yIE5vZGVJdGVyYXRvciB3aGVu
IG5vZGVzIGFyZSByZW1vdmVkLCBmcm9tIEFjaWQzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBjb3VudCBpcyAxCitQQVNTIG5vZGVhIGlzIG5vZGViCitQQVNTIGNvdW50
IGlzIDIKK1BBU1Mgbm9kZWEgaXMgbm9kZWIKK1BBU1MgY291bnQgaXMgMworUEFTUyBub2RlYSBp
cyBub2RlYgorUEFTUyBjb3VudCBpcyA0CitQQVNTIG5vZGVhIGlzIG5vZGViCitQQVNTIGNvdW50
IGlzIDUKK1BBU1Mgbm9kZWEgaXMgbm9kZWIKK1BBU1MgY291bnQgaXMgNgorUEFTUyBub2RlYSBp
cyBub2RlYgorUEFTUyBjb3VudCBpcyA3CitQQVNTIG5vZGVhIGlzIG5vZGViCitQQVNTIGNvdW50
IGlzIDgKK1BBU1Mgbm9kZWEgaXMgbm9kZWIKK1BBU1MgY291bnQgaXMgOQorUEFTUyBub2RlYSBp
cyBub2RlYgorUEFTUyBjb3VudCBpcyAxMAorUEFTUyBub2RlYSBpcyBub2RlYgorUEFTUyBjb3Vu
dCBpcyAxMQorUEFTUyBub2RlYSBpcyBub2RlYgorUEFTUyBjb3VudCBpcyAxMgorUEFTUyBub2Rl
YSBpcyBub2RlYgorUEFTUyBjb3VudCBpcyAxMworUEFTUyBub2RlYSBpcyBub2RlYgorUEFTUyBj
b3VudCBpcyAxNAorUEFTUyBub2RlYSBpcyBub2RlYgorUEFTUyBjb3VudCBpcyAxNQorUEFTUyBu
b2RlYSBpcyBub2RlYgorUEFTUyBjb3VudCBpcyAxNgorUEFTUyBub2RlYSBpcyBub2RlYgorUEFT
UyBjb3VudCBpcyAxNworUEFTUyBub2RlYSBpcyBub2RlYgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL3RyYXZlcnNhbC9hY2lkMy10ZXN0LTItZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL3RyYXZlcnNh
bC9hY2lkMy10ZXN0LTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy90cmF2ZXJzYWwv
YWNpZDMtdGVzdC0yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy90cmF2ZXJzYWwv
YWNpZDMtdGVzdC0yLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2FjaWQz
LXRlc3QtMi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL3RyYXZlcnNhbC9hY2lkMy10ZXN0LTIuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTogc3ZuOmVvbC1zdHls
ZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL3RyYXZlcnNhbC9yZXNvdXJjZXMvYWNp
ZDMtdGVzdC0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3RyYXZlcnNhbC9yZXNvdXJj
ZXMvYWNpZDMtdGVzdC0yLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvdHJhdmVyc2Fs
L3Jlc291cmNlcy9hY2lkMy10ZXN0LTIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAK
K2Rlc2NyaXB0aW9uKCJUZXN0IG9mIGJlaGF2aW9yIE5vZGVJdGVyYXRvciB3aGVuIG5vZGVzIGFy
ZSByZW1vdmVkLCBmcm9tIEFjaWQzLiIpOworCisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoInNyYyIsICJh
Ym91dDpibGFuayIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAg
ICB2YXIgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDsKKyAgICBmb3IgKHZhciBpID0gZG9j
LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aC0xOyBpID49IDA7IGkgLT0gMSkKKyAg
ICAgIGRvYy5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9jLmRvY3VtZW50RWxlbWVudC5j
aGlsZE5vZGVzW2ldKTsKKyAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5j
cmVhdGVFbGVtZW50KCdoZWFkJykpOworICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGls
ZC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgndGl0bGUnKSk7CisgICAgZG9jLmRvY3Vt
ZW50RWxlbWVudC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgnYm9keScpKTsKKworICAv
LyB0ZXN0IDI6IFJlbW92aW5nIG5vZGVzIGR1cmluZyBpdGVyYXRpb24KKyAgdmFyIGNvdW50ID0g
MDsKKyAgdmFyIHQxID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoJ3Qx
JykpOworICB2YXIgdDIgPSBkb2MuYm9keS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgn
dDInKSk7CisgIHZhciB0MyA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50
KCd0MycpKTsKKyAgdmFyIHQ0ID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1l
bnQoJ3Q0JykpOworICB2YXIgZXhwZWN0ID0gZnVuY3Rpb24obiwgbm9kZTEsIG5vZGUyKSB7Cisg
ICAgY291bnQgKz0gMTsKKyAgICBzaG91bGRCZSgiY291bnQiLCAiIiArIG4pOworICAgIG5vZGVh
ID0gbm9kZTE7CisgICAgbm9kZWIgPSBub2RlMjsKKyAgICBzaG91bGRCZSgibm9kZWEiLCAibm9k
ZWIiKTsKKyAgfTsKKyAgdmFyIGNhbGxDb3VudCA9IDA7CisgIHZhciBmaWx0ZXJGdW5jdGlvbnMg
PSBbCisgICAgZnVuY3Rpb24gKG5vZGUpIHsgZXhwZWN0KDEsIG5vZGUsIGRvYy5ib2R5KTsgcmV0
dXJuIHRydWU7IH0sIC8vIGZpbHRlciAwCisgICAgZnVuY3Rpb24gKG5vZGUpIHsgZXhwZWN0KDMs
IG5vZGUsIHQxKTsgcmV0dXJuIHRydWU7IH0sIC8vIGZpbHRlciAxCisgICAgZnVuY3Rpb24gKG5v
ZGUpIHsgZXhwZWN0KDUsIG5vZGUsIHQyKTsgcmV0dXJuIHRydWU7IH0sIC8vIGZpbHRlciAyCisg
ICAgZnVuY3Rpb24gKG5vZGUpIHsgZXhwZWN0KDcsIG5vZGUsIHQzKTsgZG9jLmJvZHkucmVtb3Zl
Q2hpbGQodDQpOyByZXR1cm4gdHJ1ZTsgfSwgLy8gZmlsdGVyIDMKKyAgICBmdW5jdGlvbiAobm9k
ZSkgeyBleHBlY3QoOSwgbm9kZSwgdDQpOyByZXR1cm4gdHJ1ZTsgfSwgLy8gZmlsdGVyIDQKKyAg
ICBmdW5jdGlvbiAobm9kZSkgeyBleHBlY3QoMTEsIG5vZGUsIHQ0KTsgZG9jLmJvZHkucmVtb3Zl
Q2hpbGQodDQpOyByZXR1cm4gMiAvKiBSRUpFQ1QgKi87IH0sIC8vIGZpbHRlciA1CisgICAgZnVu
Y3Rpb24gKG5vZGUpIHsgZXhwZWN0KDEyLCBub2RlLCB0Myk7IHJldHVybiB0cnVlOyB9LCAvLyBm
aWx0ZXIgNgorICAgIGZ1bmN0aW9uIChub2RlKSB7IGV4cGVjdCgxNCwgbm9kZSwgdDIpOyBkb2Mu
Ym9keS5yZW1vdmVDaGlsZCh0Mik7IHJldHVybiB0cnVlOyB9LCAvLyBmaWx0ZXIgNworICAgIGZ1
bmN0aW9uIChub2RlKSB7IGV4cGVjdCgxNiwgbm9kZSwgdDEpOyByZXR1cm4gdHJ1ZTsgfSwgLy8g
ZmlsdGVyIDgKKyAgXTsKKyAgdmFyIGkgPSBkb2MuY3JlYXRlTm9kZUl0ZXJhdG9yKGRvYy5kb2N1
bWVudEVsZW1lbnQubGFzdENoaWxkLCAweEZGRkZGRkZGLCBmdW5jdGlvbiAobm9kZSkgeyByZXR1
cm4gZmlsdGVyRnVuY3Rpb25zW2NhbGxDb3VudCsrXShub2RlKTsgfSwgdHJ1ZSk7CisgIC8vICog
QiAxIDIgMyA0CisgIGV4cGVjdCgyLCBpLm5leHROb2RlKCksIGRvYy5ib2R5KTsgLy8gZmlsdGVy
IDAKKyAgLy8gW0JdICogMSAyIDMgNCAgICAgCisgIGV4cGVjdCg0LCBpLm5leHROb2RlKCksIHQx
KTsgLy8gZmlsdGVyIDEKKyAgLy8gQiBbMV0gKiAyIDMgNAorICBleHBlY3QoNiwgaS5uZXh0Tm9k
ZSgpLCB0Mik7IC8vIGZpbHRlciAyCisgIC8vIEIgMSBbMl0gKiAzIDQKKyAgZXhwZWN0KDgsIGku
bmV4dE5vZGUoKSwgdDMpOyAvLyBmaWx0ZXIgMworICAvLyBCIDEgMiBbM10gKgorICBkb2MuYm9k
eS5hcHBlbmRDaGlsZCh0NCk7CisgIC8vIEIgMSAyIFszXSAqIDQKKyAgZXhwZWN0KDEwLCBpLm5l
eHROb2RlKCksIHQ0KTsgLy8gZmlsdGVyIDQKKyAgLy8gQiAxIDIgMyBbNF0gKgorICBleHBlY3Qo
MTMsIGkucHJldmlvdXNOb2RlKCksIHQzKTsgLy8gZmlsdGVycyA1LCA2CisgICAgLy8gQiAxIDIg
MyAqICg0KSAvLyBmaWx0ZXIgNQorICAgIC8vIEIgMSAyIFszXSAqICAgLy8gYmV0d2VlbiA1IGFu
ZCA2CisgICAgLy8gQiAxIDIgKiAoMykgICAvLyBmaWx0ZXIgNgorICAvLyBCIDEgMiAqIFszXQor
ICBleHBlY3QoMTUsIGkucHJldmlvdXNOb2RlKCksIHQyKTsgLy8gZmlsdGVyIDcKKyAgICAvLyBC
IDEgKiAoMikgWzNdCisgICAgLy8gLS0gc3BlYyBzYXlzICJGb3IgaW5zdGFuY2UsIGlmIGEgTm9k
ZUZpbHRlciByZW1vdmVzIGEgbm9kZQorICAgIC8vICAgIGZyb20gYSBkb2N1bWVudCwgaXQgY2Fu
IHN0aWxsIGFjY2VwdCB0aGUgbm9kZSwgd2hpY2gKKyAgICAvLyAgICBtZWFucyB0aGF0IHRoZSBu
b2RlIG1heSBiZSByZXR1cm5lZCBieSB0aGUgTm9kZUl0ZXJhdG9yCisgICAgLy8gICAgb3IgVHJl
ZVdhbGtlciBldmVuIHRob3VnaCBpdCBpcyBubyBsb25nZXIgaW4gdGhlIHN1YnRyZWUKKyAgICAv
LyAgICBiZWluZyB0cmF2ZXJzZWQuIgorICAgIC8vIC0tIGJ1dCBpdCBhbHNvIHNheXMgIklmIGNo
YW5nZXMgdG8gdGhlIGl0ZXJhdGVkIGxpc3QgZG8gbm90CisgICAgLy8gICAgcmVtb3ZlIHRoZSBy
ZWZlcmVuY2Ugbm9kZSwgdGhleSBkbyBub3QgYWZmZWN0IHRoZSBzdGF0ZQorICAgIC8vICAgIG9m
IHRoZSBOb2RlSXRlcmF0b3IuIgorICAvLyBCIDEgKiBbM10KKyAgZXhwZWN0KDE3LCBpLnByZXZp
b3VzTm9kZSgpLCB0MSk7IC8vIGZpbHRlciA4CisgIC8vIEIgWzFdICogMworCisgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CkluZGV4OiBMYXlvdXRUZXN0cy90cmF2ZXJzYWwvcmVzb3VyY2VzL2V4Y2VwdGlvbi1mb3J3
YXJkaW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3RyYXZlcnNhbC9yZXNvdXJjZXMv
ZXhjZXB0aW9uLWZvcndhcmRpbmcuanMJKHJldmlzaW9uIDMxMjkzKQorKysgTGF5b3V0VGVzdHMv
dHJhdmVyc2FsL3Jlc291cmNlcy9leGNlcHRpb24tZm9yd2FyZGluZy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNCBAQCBzaG91bGRCZSgidy5uZXh0U2libGluZygpIiwgImRvY3VtZW50
LmJvCiBzaG91bGRCZSgidy5wcmV2aW91c1NpYmxpbmcoKSIsICJkb2N1bWVudC5ib2R5LnByZXZp
b3VzU2libGluZyIpOyAvLyAxMQogc2hvdWxkQmUoIml0ZXJhdGlvbiIsICIxMSIpOwogCi12YXIg
c3VjY2VzZnVsbHlQYXJzZWQgPSB0cnVlOwotCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsK
</data>
<flag name="review"
          id="8771"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>