<?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>19524</bug_id>
          
          <creation_ts>2008-06-12 15:43:56 -0700</creation_ts>
          <short_desc>Able to move nodes across documents</short_desc>
          <delta_ts>2019-02-06 09:02:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>cdumez</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>Ms2ger</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>83131</commentid>
    <comment_count>0</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-06-12 15:43:56 -0700</bug_when>
    <thetext>Webkit currently enables a compat hack that allows you to move nodes between documents.  Here is the situation overall:

Node::checkAddChild special cases a node that is not inDocument() to be compatible with Mozilla and Mac IE.  The compatibility is because window.Option internally creates a element using document.createElement(), meaning the node&apos;s m_document is window.document.  Apparently some people would use the Options() constructor, and then try to add this node to another document (say an iframe).  Mozilla allows you to move nodes between documents, so this works, but I argue this is completely broken.  I have no idea about Mac IE.  Windows IE does not allow you to move nodes between documents, including the Options case.

Also, the hack is incorrect.  The logic really means more of &quot;wasNeverInADocument&quot; and not &quot;inDocument&quot;.  If you add a node to a document, you can remove it, and then add it to a different document, which is clearly incorrect.  Adding a wasEverInADocument flag is also not correct, since this allows any elements created via document.createElement, etc, to be attached to a different document.

Also, checkAddChild will walk the nodes and setDocument it and all the children, which is completely not the correct way to adopt a child.  checkAddChild should simply do a check, like the name implies, and no modification should happen here! (really this should be a const method).

There are other bugs involving adopting nodes, but I would like to clean up the code so there is only a single place where node adoption can occur (document.adoptNode) so that the code will be more clear and we can fix the adoption problems through a single path.  I believe this is correct in terms of the spec and the web.  I don&apos;t think there are many cases of this new Options problem, specially seeing that it doesn&apos;t work in IE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83150</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-06-12 21:45:37 -0700</bug_when>
    <thetext>Could you please attach a test case?

I suspect that this behavior is by design (as there doesn&apos;t seem to be a compelling reason to refuse moving nodes between documents), but having a test case would make the discussion more focused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83219</commentid>
    <comment_count>2</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-06-13 10:45:41 -0700</bug_when>
    <thetext>http://danceoffwithyourpantsoff.googlepages.com/webkit-adopt.html

In Mozilla and Opera, you won&apos;t get an alert, because it allows you to move nodes between documents.

In IE, you will get an alert, and then a script error, because it never allows you to move nodes between documents.

In Webkit, you will get an alert first, but then because of the compat hack, you can still move the node across documents as long as you remove it first, so you will see that div moves inside the iframe.

I would argue that you shouldn&apos;t never be able to move nodes across documents, unless you adoptNode().  This is the point of adoptNode().

If we decide that we should be able to move nodes across documents, then

1) The case of moving a connected node (which now exceptions) should be made to work, like it does in Mozilla and Opera.

2) We should not do the &quot;adopting&quot; in checkAddChild, this is clearly the wrong place to do it, and the adopting is clearly implemented incorrectly.  These paths should share the same code paths as adoptChild().  Adopting needs to be handled carefully, and it should only be done in one place so we can make sure the implementation handles this consistently.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91530</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-17 14:46:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I would argue that you shouldn&apos;t never be able to move nodes across documents,
&gt; unless you adoptNode(). This is the point of adoptNode().

Yes, that&apos;s the point of adoptNode, but, adoptNode was designed by a DOM working group that was not thinking much about the web.

It&apos;s a mistake to drive our design based on the existence of adoptNode. I think that changing the code to not allow moving nodes between documents creates unnecessary differences between WebKit and Gecko, so I&apos;d only want to do it if there was a real compelling reason other than the abstract argument.

&gt; 1) The case of moving a connected node (which now exceptions) should be made to
&gt; work, like it does in Mozilla and Opera.

OK.

&gt; 2) We should not do the &quot;adopting&quot; in checkAddChild, this is clearly the wrong
&gt; place to do it, and the adopting is clearly implemented incorrectly. These
&gt; paths should share the same code paths as adoptChild().

Sounds good.

&gt; Adopting needs to be handled carefully, 

&quot;Carefully&quot; doesn&apos;t really mean anything.

&gt; it should only be done in one place so we can make sure
&gt; the implementation handles this consistently.

What we need most are enough test cases to show whether we have this right.

How much the code is shared is driven by multiple factors; generally more sharing is better, unless certain code paths are much hotter than others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109835</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-16 02:48:04 -0800</bug_when>
    <thetext>This is mostly covered by bug 4569 and bug 12339.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270875</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-27 18:34:37 -0700</bug_when>
    <thetext>*** Bug 44639 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270892</commentid>
    <comment_count>6</comment_count>
      <attachid>65803</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-27 18:59:35 -0700</bug_when>
    <thetext>Created attachment 65803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271096</commentid>
    <comment_count>7</comment_count>
      <attachid>65803</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-28 19:41:59 -0700</bug_when>
    <thetext>Comment on attachment 65803
Patch

Change seems worthwhile. But we ought to do better than calling this a &quot;willful violation of the spec&quot;. We should bring this up in the appropriate forum and get the specifications fixed. Unless the specification in question is moribund and can&apos;t be practically revised.

&gt; +    // FIXME: Remove this code. Given the above check that the element owns this attribute.
&gt; +    // It should not be possible that it is in a different document.
&gt;      if (document() != attr-&gt;document()) {
&gt; -        ec = WRONG_DOCUMENT_ERR;
&gt; -        return 0;
&gt; +        ASSERT_NOT_REACHED();
&gt; +        document()-&gt;adoptNode(attr, ec);
&gt; +        if (ec)
&gt; +            return 0;
&gt;      }

I don&apos;t understand why you are checking in new unreachable code. There is no reason to change the unreachable code! You can remove it if you like, or leave it in if you don&apos;t want to deal with that right now, but please don&apos;t check in new untestable code!

&gt; +        if (newChild-&gt;inDocument())
&gt; +            document()-&gt;adoptNode(newChild, ec);
&gt; +        else {
&gt; +            for (Node* node = newChild; node; node = node-&gt;traverseNextNode(newChild))
&gt; +                node-&gt;setDocument(document());
&gt; +        }

It&apos;s kind of irritating that adoptNode has an out argument of an exception. Is there really any possibility of an exception here? I&apos;d prefer to see this refactored so we aren&apos;t calling our external entry point here. adoptNode would only be the external entry point.

I also don&apos;t understand exactly why, if newChild returns false to inDocument, adoptNode can&apos;t be called. Can&apos;t a node with inDocument returning false nonetheless be visible to JavaScript? If so, then doesn&apos;t it have to work if the JavaScript calls adoptNode on it?

&gt; +    if (newChild-&gt;document() != document()) {
&gt; +        if (newChild-&gt;inDocument())
&gt; +            document()-&gt;adoptNode(newChild, ec);
&gt; +        else {
&gt; +            for (Node* node = newChild; node; node = node-&gt;traverseNextNode(newChild))
&gt; +                node-&gt;setDocument(document());
&gt; +        }
&gt; +    }

Quite inelegant to have this code repeated twice. The right way to handle that is to have an inline function called in both places.

I don’t see the pattern of where you could just call adoptNode and where you needed to do more work.

The test cases don&apos;t seem to cover all the code paths. You tested each function, but there&apos;s the inDocument and non-inDocument cases, so we&apos;d need at least two tests for each of those call sites.

I&apos;m going to say review+, but I think there should be more test cases, and better factoring of the code to have a truly great fix here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271563</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-30 12:25:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Change seems worthwhile. But we ought to do better than calling this a &quot;willful violation of the spec&quot;. We should bring this up in the appropriate forum and get the specifications fixed. Unless the specification in question is moribund and can&apos;t be practically revised.

I&apos;ve sent an email to www-dom, but I&apos;m skeptical we could get this changed without putting a significant effort into this. This spec has been in the W3C recommendation state since 2004 and, as far as I know, does not currently have an active editor. http://www.w3.org/TR/DOM-Level-3-Core/

&gt; &gt; +    // FIXME: Remove this code. Given the above check that the element owns this attribute.
&gt; &gt; +    // It should not be possible that it is in a different document.
&gt; &gt;      if (document() != attr-&gt;document()) {
&gt; &gt; -        ec = WRONG_DOCUMENT_ERR;
&gt; &gt; -        return 0;
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; +        document()-&gt;adoptNode(attr, ec);
&gt; &gt; +        if (ec)
&gt; &gt; +            return 0;
&gt; &gt;      }
&gt; 
&gt; I don&apos;t understand why you are checking in new unreachable code. There is no reason to change the unreachable code! You can remove it if you like, or leave it in if you don&apos;t want to deal with that right now, but please don&apos;t check in new untestable code!

I was thinking that leaving in the assert would catch if we somehow did hit this case, but I&apos;m comfortable with just turning that whole block into an assert.

&gt; &gt; +        if (newChild-&gt;inDocument())
&gt; &gt; +            document()-&gt;adoptNode(newChild, ec);
&gt; &gt; +        else {
&gt; &gt; +            for (Node* node = newChild; node; node = node-&gt;traverseNextNode(newChild))
&gt; &gt; +                node-&gt;setDocument(document());
&gt; &gt; +        }
&gt; 
&gt; It&apos;s kind of irritating that adoptNode has an out argument of an exception. Is there really any possibility of an exception here? I&apos;d prefer to see this refactored so we aren&apos;t calling our external entry point here. adoptNode would only be the external entry point.
&gt; 
&gt; I also don&apos;t understand exactly why, if newChild returns false to inDocument, adoptNode can&apos;t be called. Can&apos;t a node with inDocument returning false nonetheless be visible to JavaScript? If so, then doesn&apos;t it have to work if the JavaScript calls adoptNode on it?

&gt; I don’t see the pattern of where you could just call adoptNode and where you needed to do more work.

adoptNode does more than just setDocument. Most notably it calls setRemainsAliveOnRemovalFromTree on iframes. I was hesitant to make that change in behavior, but now that I think about it, this should be safe since currently the appendChild/insertBefore call would throw an error. I&apos;ll change these two cases to just call adoptNode.

&gt; The test cases don&apos;t seem to cover all the code paths. You tested each function, but there&apos;s the inDocument and non-inDocument cases, so we&apos;d need at least two tests for each of those call sites.

Will add tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271564</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-30 12:25:28 -0700</bug_when>
    <thetext>www-dom discussion: http://lists.w3.org/Archives/Public/www-dom/2010JulSep/0107.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271576</commentid>
    <comment_count>10</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-30 12:45:44 -0700</bug_when>
    <thetext>Missed a comment:

&gt; &gt; +        if (newChild-&gt;inDocument())
&gt; &gt; +            document()-&gt;adoptNode(newChild, ec);
&gt; &gt; +        else {
&gt; &gt; +            for (Node* node = newChild; node; node = node-&gt;traverseNextNode(newChild))
&gt; &gt; +                node-&gt;setDocument(document());
&gt; &gt; +        }
&gt; 
&gt; It&apos;s kind of irritating that adoptNode has an out argument of an exception. Is there really any possibility of an exception here? I&apos;d prefer to see this refactored so we aren&apos;t calling our external entry point here. adoptNode would only be the external entry point.

From inspecting the code, it looks like an exception could only happen if trying to move a DocumentType node across documents. I&apos;m not sure what the right behavior is there. Gecko throws an error in that case, so I was matching them for now. But maybe it makes sense to move that check higher up? I&apos;ll post a patch with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293597</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-13 12:24:52 -0700</bug_when>
    <thetext>Attachment 65803 was posted by a committer and has review+, assigning to Ojan Vafai for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293635</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-13 12:44:59 -0700</bug_when>
    <thetext>Ojan, could you please update bug 4569 and bug 12339 with current status once you land this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293648</commentid>
    <comment_count>13</comment_count>
    <who name="Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
    <bug_when>2010-10-13 12:55:41 -0700</bug_when>
    <thetext>You can drop &quot;This is a violation of the DOM spec&quot;, by the way; the new spec (&lt;http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html&gt;) is more web-compatible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324813</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 22:40:51 -0800</bug_when>
    <thetext>@ojan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327470</commentid>
    <comment_count>15</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-28 19:29:45 -0800</bug_when>
    <thetext>Sorry, this needs a new patch. I realized that this patch doesn&apos;t deal well with mutation events. There are crashes with mutation events currently that this patch gives more code paths to. Now that we can scope mutation events though it should be straightforward to address this. I&apos;ll try to post a new patch next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365020</commentid>
    <comment_count>16</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-03-10 00:03:50 -0800</bug_when>
    <thetext>Due to Dimitri&apos;s refactoring of setDocument --&gt; setDocumentRecursively, we can now call setDocumentRecursively instead of adoptNode (addressing Darin&apos;s factoring concerns) and mutation events are properly handled. I&apos;ve added a bunch more more tests. Will commit shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365027</commentid>
    <comment_count>17</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-03-10 00:33:33 -0800</bug_when>
    <thetext>Committed r80696: &lt;http://trac.webkit.org/changeset/80696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502837</commentid>
    <comment_count>18</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:45 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65803</attachid>
            <date>2010-08-27 18:59:35 -0700</date>
            <delta_ts>2010-08-28 19:41:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-19524-20100827185933.patch</filename>
            <type>text/plain</type>
            <size>17884</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MzFiNjhlMzVhNTdlOTBlN2JkYWQ2YTU3MGE2ZTU2ODExNWE1YmU4Li4wMmM3ZGI1
NGEyZjM0MzNlNjFkY2Y2MWI1MmEwMjY5ZjhkYzQ4NzAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTAtMDgtMjcgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBYmxlIHRvIG1vdmUgbm9kZXMg
YWNyb3NzIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk1MjQKKworICAgICAgICBNYWtlcyBjcm9zcy1kb2N1bWVudCBhcHBlbmRDaGls
ZCwgaW5zZXJ0QmVmb3JlLCBSYW5nZS5pbnNlcnROb2RlIGFuZCBSYW5nZS5zdXJyb3VuZENvbnRl
bnRzIHdvcmsuCisgICAgICAgIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgdGhlIERPTSBzcGVjLCBi
dXQgaXQgbWF0Y2hlcyBHZWNrbyBhbmQgaXMgYSBiZXR0ZXIgQVBJIGZvciB0aGUgd2ViLgorICAg
ICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgUmFuZ2UgbWV0aG9kcyB3aGVyZSB3ZSBkb24ndCBt
YXRjaCBHZWNrbyBvciB0aGUgc3BlYyB0aGF0IHdpbGwKKyAgICAgICAgbmVlZCB0byBiZSB1cGRh
dGVkIGluIGEgZm9sbG93aW5nIHBhdGNoLgorCisgICAgICAgICogZG9tL2h0bWwvbGV2ZWwxL2Nv
cmUvaGNfZWxlbWVudHdyb25nZG9jdW1lbnRlcnItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRv
bS9odG1sL2xldmVsMS9jb3JlL2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnItZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDEvY29yZS9oY19lbGVtZW50d3Jvbmdk
b2N1bWVudGVyci1leHBlY3RlZC50eHQ6CisgICAgICAgICogZG9tL3hodG1sL2xldmVsMS9jb3Jl
L2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnItZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlcmVwbGFjZWNoaWxkMDMtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3QvZG9tL21vdmUtbm9kZXMtYWNyb3NzLWRvY3VtZW50cy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL21vdmUtbm9kZXMtYWNyb3NzLWRvY3VtZW50
cy5odG1sOiBBZGRlZC4KKwogMjAxMC0wOC0yNiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0aW5nIENocm9taXVtIGV4cGVj
dGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMS9jb3JlL2hj
X2VsZW1lbnR3cm9uZ2RvY3VtZW50ZXJyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2RvbS9o
dG1sL2xldmVsMS9jb3JlL2hjX2VsZW1lbnR3cm9uZ2RvY3VtZW50ZXJyLWV4cGVjdGVkLnR4dApp
bmRleCA3YjZlMzZkOWE5OTk2YmExNWE5OTg5MDJlYjhjNDQ4MjcxNTVmY2I1Li41MjNiN2RmMDkw
NWY1NjZhYjQzNDJmM2EyOTUyZTk4NjMyZTNkMTE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9k
b20vaHRtbC9sZXZlbDEvY29yZS9oY19lbGVtZW50d3Jvbmdkb2N1bWVudGVyci1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwxL2NvcmUvaGNfZWxlbWVudHdyb25n
ZG9jdW1lbnRlcnItZXhwZWN0ZWQudHh0CkBAIC0xLDIgKzEsMyBAQAotVGVzdDoJaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDEvY29yZS9oY19lbGVtZW50d3Jvbmdk
b2N1bWVudGVycgotU3RhdHVzOglTdWNjZXNzCitUZXN0OglodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL2xldmVsMS9jb3JlL2hjX2VsZW1lbnR3cm9uZ2RvY3VtZW50ZXJyCQor
U3RhdHVzOglmYWlsdXJlCitEZXRhaWw6CXRocm93X1dST05HX0RPQ1VNRU5UX0VSUjogYXNzZXJ0
VHJ1ZSBmYWlsZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMS9jb3Jl
L2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZG9tL2h0bWwvbGV2ZWwxL2NvcmUvaGNfbmFtZWRub2RlbWFwd3Jvbmdkb2N1bWVudGVyci1l
eHBlY3RlZC50eHQKaW5kZXggNjNhODhjOTU0OTMyYzg5NzNlYjZmOTQxMzE3NzI3MTk4ODFmNTc1
YS4uM2U0NTNmNmZkYmQ5M2YwMmJiZDBjNjYyNDE1YjcwMWFhNGVmM2I3NSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwxL2NvcmUvaGNfbmFtZWRub2RlbWFwd3Jvbmdkb2N1
bWVudGVyci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwxL2Nv
cmUvaGNfbmFtZWRub2RlbWFwd3Jvbmdkb2N1bWVudGVyci1leHBlY3RlZC50eHQKQEAgLTEsMiAr
MSwzIEBACi1UZXN0OglodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVs
MS9jb3JlL2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnIKLVN0YXR1czoJU3VjY2Vzcwor
VGVzdDoJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9sZXZlbDEvY29yZS9o
Y19uYW1lZG5vZGVtYXB3cm9uZ2RvY3VtZW50ZXJyCQorU3RhdHVzOglmYWlsdXJlCitEZXRhaWw6
CXRocm93X1dST05HX0RPQ1VNRU5UX0VSUjogYXNzZXJ0VHJ1ZSBmYWlsZWQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDEvY29yZS9oY19lbGVtZW50d3Jvbmdkb2N1bWVu
dGVyci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwxL2NvcmUvaGNf
ZWxlbWVudHdyb25nZG9jdW1lbnRlcnItZXhwZWN0ZWQudHh0CmluZGV4IDg2YzFkNjQzMzQwMWNm
MGU2NzYxNmEzYjczNDhmZTUxYjNkMmU3NWIuLjk4NzA4NDBhNDBhMzBkNzc3ZjZjZDg4MjZlMTJk
MmIxNjM0OTgxOGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDEvY29y
ZS9oY19lbGVtZW50d3Jvbmdkb2N1bWVudGVyci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZG9tL3hodG1sL2xldmVsMS9jb3JlL2hjX2VsZW1lbnR3cm9uZ2RvY3VtZW50ZXJyLWV4cGVj
dGVkLnR4dApAQCAtMSwyICsxLDMgQEAKIFRlc3QJaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9sZXZlbDEvY29yZS9oY19lbGVtZW50d3Jvbmdkb2N1bWVudGVycgotU3RhdHVz
CVN1Y2Nlc3MKK1N0YXR1cwlmYWlsdXJlCitNZXNzYWdlCXRocm93X1dST05HX0RPQ1VNRU5UX0VS
UjogYXNzZXJ0VHJ1ZSBmYWlsZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2RvbS94aHRtbC9s
ZXZlbDEvY29yZS9oY19uYW1lZG5vZGVtYXB3cm9uZ2RvY3VtZW50ZXJyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDEvY29yZS9oY19uYW1lZG5vZGVtYXB3cm9uZ2Rv
Y3VtZW50ZXJyLWV4cGVjdGVkLnR4dAppbmRleCBhYjAyMWUyMGFhZmUwMmI1YjVmOWFhYzY5MDc0
NDQzMTUyNDQ5MzEwLi5hZWE4MTAyMTcxMjZiMmMzMjU1YWI4YTUxMWMwZTQyMDA2MmJmZWEyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwxL2NvcmUvaGNfbmFtZWRub2Rl
bWFwd3Jvbmdkb2N1bWVudGVyci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMS9jb3JlL2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnItZXhwZWN0ZWQu
dHh0CkBAIC0xLDIgKzEsMyBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL2xldmVsMS9jb3JlL2hjX25hbWVkbm9kZW1hcHdyb25nZG9jdW1lbnRlcnIKLVN0YXR1
cwlTdWNjZXNzCitTdGF0dXMJZmFpbHVyZQorTWVzc2FnZQl0aHJvd19XUk9OR19ET0NVTUVOVF9F
UlI6IGFzc2VydFRydWUgZmFpbGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kb20veGh0bWwv
bGV2ZWwzL2NvcmUvbm9kZXJlcGxhY2VjaGlsZDAzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlcmVwbGFjZWNoaWxkMDMtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGYzNDhhNWY1NTRjNjA1M2ZmNDkxYjRkNzgwNzNjNTQxMjExNjY2OTAuLmUzZjUwYmExYTA2
Y2Q1ODgxOTgzYmM2NTdjNTU2Zjg3N2Q0ODNmYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rv
bS94aHRtbC9sZXZlbDMvY29yZS9ub2RlcmVwbGFjZWNoaWxkMDMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlcmVwbGFjZWNoaWxkMDMtZXhw
ZWN0ZWQudHh0CkBAIC0xLDIgKzEsMyBAQAogVGVzdAlodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL25vZGVyZXBsYWNlY2hpbGQwMwotU3RhdHVzCVN1Y2Nl
c3MKK1N0YXR1cwllcnJvcgorTWVzc2FnZQlFcnJvcjogTk9UX1NVUFBPUlRFRF9FUlI6IERPTSBF
eGNlcHRpb24gOQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbW92ZS1ub2Rlcy1h
Y3Jvc3MtZG9jdW1lbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL21vdmUt
bm9kZXMtYWNyb3NzLWRvY3VtZW50cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiMjBjZDg1
YTg3MTY3NzBmNjViNDU5ZTZlOWRkY2IwYWY4ZTk3MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL21vdmUtbm9kZXMtYWNyb3NzLWRvY3VtZW50cy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyNiBAQAorUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFT
UworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
Citjb21wYXJlUG9pbnQKK3NldFN0YXJ0CitzZXRFbmQKK3NldFN0YXJ0QmVmb3JlCitzZXRTdGFy
dEFmdGVyCitzZXRFbmRCZWZvcmUKK3NldEVuZEFmdGVyCitpc1BvaW50SW5SYW5nZQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9tb3ZlLW5vZGVzLWFjcm9zcy1kb2N1bWVudHMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL21vdmUtbm9kZXMtYWNyb3NzLWRvY3VtZW50cy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY2MzVlMTYzNjBjOTg5MmFmYTVkMjA3ZGIxNTE1MzBhODk2NGMxNTgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9tb3ZlLW5vZGVzLWFjcm9z
cy1kb2N1bWVudHMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPCFEb2NUeXBlIEhUTUw+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBpZnJhbWUsIGlmcmFtZURvYzsKKworZnVuY3Rp
b24gbG9nKG1zZykKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nZ2VyJykuaW5u
ZXJIVE1MICs9IG1zZyArICdcbic7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QodGVzdCwgb3B0X2V4
cGVjdGVkRXJyb3JOYW1lKQoreworICAgIHZhciBlcnJvck5hbWU7CisgICAgdHJ5IHsKKyAgICAg
ICAgdGVzdCgpOworICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgZXJyb3JOYW1lID0gZXJy
b3IubmFtZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIWVycm9yTmFtZSAmJiAhb3B0
X2V4cGVjdGVkRXJyb3JOYW1lIHx8IG9wdF9leHBlY3RlZEVycm9yTmFtZSA9PSBlcnJvck5hbWUp
CisgICAgICAgICAgICBsb2coJ1BBU1MnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9n
KCdGQUlMOiBleHBlY3RlZCAnICsgb3B0X2V4cGVjdGVkRXJyb3JOYW1lICsgJyBnb3QgJyArIChl
cnJvck5hbWUgfHwgJ25vIGVycm9yJykpOworICAgIH0KK30KKworZnVuY3Rpb24gZWxlbWVudElu
Q3VycmVudERvY3VtZW50KGh0bWwpCit7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICBub2RlLmlubmVySFRNTCA9IGh0bWwgfHwgJ2xvcmVtIGlwc3Vt
JzsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5vZGUpOworICAgIHJldHVybiBub2Rl
OworfQorCitmdW5jdGlvbiByYW5nZUluSWZyYW1lKCkKK3sKKyAgICB2YXIgcmFuZ2UgPSBpZnJh
bWVEb2MuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZXRTdGFydChpZnJhbWVEb2MuYm9keSwg
MCk7CisgICAgcmFuZ2Uuc2V0RW5kKGlmcmFtZURvYy5ib2R5LCAxKTsKKyAgICByZXR1cm4gcmFu
Z2U7Cit9CisKK2Z1bmN0aW9uIHJhbmdlSW5DdXJyZW50RG9jdW1lbnQoKQoreworICAgIHZhciBy
YW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgcmFuZ2Uuc2V0U3RhcnQoZG9jdW1l
bnQuYm9keSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKGRvY3VtZW50LmJvZHksIDEpOworICAgIHJl
dHVybiByYW5nZTsKK30KKworZnVuY3Rpb24gcnVuKCkKK3sKKyAgICBpZnJhbWUgPSBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTsKKyAgICBpZnJhbWVEb2MgPSBpZnJhbWUuY29udGVu
dERvY3VtZW50OworICAgIC8vIFRoZXNlIGFyZSB3aWxsZnVsbCB2aW9sYXRpb25zIG9mIHRoZSBz
cGVjIHRvIG1hdGNoIEdlY2tvIGFuZCBnaXZlCisgICAgLy8gYSBiZXR0ZXIgZGV2ZWxvcGVyIGV4
cGVyaWVuY2UuCisgICAgcnVuVGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgaWZyYW1lRG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoZWxlbWVudEluQ3VycmVudERvY3VtZW50KCdhcHBlbmRDaGlsZCcpKTsK
KyAgICB9KTsKKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBpZnJhbWVEb2MuYm9k
eS5pbnNlcnRCZWZvcmUoZWxlbWVudEluQ3VycmVudERvY3VtZW50KCdpbnNlcnRCZWZvcmUnKSwg
aWZyYW1lRG9jLmJvZHkuZmlyc3RDaGlsZCk7CisgICAgfSk7CisgICAgcnVuVGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgcmFuZ2VJbklmcmFtZSgpLmluc2VydE5vZGUoZWxlbWVudEluQ3VycmVu
dERvY3VtZW50KCdpbnNlcnROb2RlJykpOworICAgIH0pOworICAgIHJ1blRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHJhbmdlSW5JZnJhbWUoKS5zdXJyb3VuZENvbnRlbnRzKGVsZW1lbnRJbkN1
cnJlbnREb2N1bWVudCgnc3Vycm91bmRDb250ZW50cycpKTsKKyAgICB9KTsKKyAgICAKKyAgICBy
dW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYXR0cmlidXRlID0gZG9jdW1lbnQuY3Jl
YXRlQXR0cmlidXRlKCdhc2RmJyk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXR0cmlidXRlcy5z
ZXROYW1lZEl0ZW0oYXR0cmlidXRlKTsKKyAgICAgICAgaWZyYW1lRG9jLmJvZHkuYXR0cmlidXRl
cy5zZXROYW1lZEl0ZW0oYXR0cmlidXRlKTsKKyAgICB9LCAnSU5VU0VfQVRUUklCVVRFX0VSUicp
OworICAgIHJ1blRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmltcGxlbWVudGF0
aW9uLmNyZWF0ZURvY3VtZW50KCcnLCAnaHRtbCcsIGRvY3VtZW50LmZpcnN0Q2hpbGQpOyAKKyAg
ICB9LCAnV1JPTkdfRE9DVU1FTlRfRVJSJyk7CisgICAgcnVuVGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmFuZ2VJbklmcmFtZSgpLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5FTkRfVE9f
RU5ELCByYW5nZUluQ3VycmVudERvY3VtZW50KCkpOworICAgIH0sICdXUk9OR19ET0NVTUVOVF9F
UlInKTsKKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICByYW5nZUluSWZyYW1lKCku
Y29tcGFyZVBvaW50KGVsZW1lbnRJbkN1cnJlbnREb2N1bWVudCgnY29tcGFyZVBvaW50JyksIDAp
OworICAgIH0sICdXUk9OR19ET0NVTUVOVF9FUlInKTsKKworICAgIC8vIEZJWE1FOiBHZWNrbyB0
aHJvd3MgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIGhlcmUuIFdobyBpcyB3cm9uZz8KKyAgICBydW5U
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBpZnJhbWVEb2MuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Zmlyc3RDaGlsZCk7CisgICAgfSwgJ05PVF9TVVBQT1JURURfRVJSJyk7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IG1hdGNoIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVRy
YXZlcnNhbC1SYW5nZS9yYW5nZXMuaHRtbCNMZXZlbC0yLVJhbmdlLUNoYW5naW5nLgorICAgIC8v
IEdlY2tvIGltcGxlbWVudHMgaXQgY29ycmVjdGx5LiBXaGVuIHNldHRpbmcgYSBib3VuZGFyeSBv
ZiB0aGUgcmFuZ2UgaW4gYSBkaWZmZXJlbnQKKyAgICAvLyBkb2N1bWVudCwgdGhlIGNhbGwgc2hv
dWxkIHN1Y2NlZWQgYW5kIHRoZSByYW5nZSBzaG91bGQgYmUgY29sbGFwc2VkLgorICAgIHJ1blRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHJhbmdlSW5JZnJhbWUoKS5zZXRTdGFydChlbGVtZW50
SW5DdXJyZW50RG9jdW1lbnQoJ3NldFN0YXJ0JyksIDApOworICAgIH0sICdXUk9OR19ET0NVTUVO
VF9FUlInKTsKKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICByYW5nZUluSWZyYW1l
KCkuc2V0RW5kKGVsZW1lbnRJbkN1cnJlbnREb2N1bWVudCgnc2V0RW5kJyksIDApOworICAgIH0s
ICdXUk9OR19ET0NVTUVOVF9FUlInKTsKKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICByYW5nZUluSWZyYW1lKCkuc2V0U3RhcnRCZWZvcmUoZWxlbWVudEluQ3VycmVudERvY3VtZW50
KCdzZXRTdGFydEJlZm9yZScpLCAwKTsKKyAgICB9LCAnV1JPTkdfRE9DVU1FTlRfRVJSJyk7Cisg
ICAgcnVuVGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgcmFuZ2VJbklmcmFtZSgpLnNldFN0YXJ0
QWZ0ZXIoZWxlbWVudEluQ3VycmVudERvY3VtZW50KCdzZXRTdGFydEFmdGVyJyksIDApOworICAg
IH0sICdXUk9OR19ET0NVTUVOVF9FUlInKTsKKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAg
ICAgICByYW5nZUluSWZyYW1lKCkuc2V0RW5kQmVmb3JlKGVsZW1lbnRJbkN1cnJlbnREb2N1bWVu
dCgnc2V0RW5kQmVmb3JlJyksIDApOworICAgIH0sICdXUk9OR19ET0NVTUVOVF9FUlInKTsKKyAg
ICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICByYW5nZUluSWZyYW1lKCkuc2V0RW5kQWZ0
ZXIoZWxlbWVudEluQ3VycmVudERvY3VtZW50KCdzZXRFbmRBZnRlcicpLCAwKTsKKyAgICB9LCAn
V1JPTkdfRE9DVU1FTlRfRVJSJyk7CisKKyAgICAvLyBGSVhNRTogaXNQb2ludEluUmFuZ2UgaXNu
J3Qgc3BlY2NlZCBhbnl3aGVyZSwgYnV0IEdlY2tvIGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9u
IGhlcmUuCisgICAgLy8gSXQgZG9lc24ndCBzZWVtIGxpa2Ugd2Ugc2hvdWxkIGVpdGhlci4gR2Vj
a28gcmV0dXJucyBmYWxzZS4KKyAgICBydW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICByYW5n
ZUluSWZyYW1lKCkuaXNQb2ludEluUmFuZ2UoZWxlbWVudEluQ3VycmVudERvY3VtZW50KCdpc1Bv
aW50SW5SYW5nZScpLCAwKTsKKyAgICB9LCAnV1JPTkdfRE9DVU1FTlRfRVJSJyk7CisKK30KKzwv
c2NyaXB0PiAKKzxwcmUgaWQ9J2xvZ2dlcic+PC9wcmU+Cis8aWZyYW1lIG9ubG9hZD0ncnVuKCkn
PjwvaWZyYW1lPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmM2YyOWRkYzZmNTIxYzk3NDY5NWE5MTNjNTZmMThkMGZlZTNjN2ZmLi44YzM1
OWQ5NWExZGZmMDQ5N2MxYzg2ZjVhYjQ2ZDA5NjJlZWU0ZGI5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEw
LTA4LTI3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWJsZSB0byBtb3ZlIG5vZGVzIGFjcm9z
cyBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NTI0CisKKyAgICAgICAgTWFrZXMgY3Jvc3MtZG9jdW1lbnQgYXBwZW5kQ2hpbGQsIGlu
c2VydEJlZm9yZSwgUmFuZ2UuaW5zZXJ0Tm9kZSBhbmQgUmFuZ2Uuc3Vycm91bmRDb250ZW50cyB3
b3JrLgorICAgICAgICBUaGlzIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBET00gc3BlYywgYnV0IGl0
IG1hdGNoZXMgR2Vja28gYW5kIGlzIGEgYmV0dGVyIEFQSSBmb3IgdGhlIHdlYi4KKyAgICAgICAg
VGhlcmUgYXJlIGEgbnVtYmVyIG9mIFJhbmdlIG1ldGhvZHMgd2hlcmUgd2UgZG9uJ3QgbWF0Y2gg
R2Vja28gb3IgdGhlIHNwZWMgdGhhdCB3aWxsCisgICAgICAgIG5lZWQgdG8gYmUgdXBkYXRlZCBp
biBhIGZvbGxvd2luZyBwYXRjaC4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAqIGRv
bS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNoZWNrUmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNoZWNrQWRk
Q2hpbGQpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6aW5zZXJ0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250ZW50
cyk6CisKIDIwMTAtMDgtMjYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgR1RLKywgYWZ0ZXIgYSBiYWQgbWVyZ2UuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IDI2YmNhMjNjOTA0MzFjMDJlMGUwZDIyNzMxOTRhZjQ5YjFkNmQ3YTQuLmUxYmY2YTdh
MzI0MTcwNWI0ZTIzYzM1ZWE0OGJkOThjNzlhYWM0NjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMTk1LDkgKzEx
OTUsMTMgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0
dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY29k
ZS4gR2l2ZW4gdGhlIGFib3ZlIGNoZWNrIHRoYXQgdGhlIGVsZW1lbnQgb3ducyB0aGlzIGF0dHJp
YnV0ZS4KKyAgICAvLyBJdCBzaG91bGQgbm90IGJlIHBvc3NpYmxlIHRoYXQgaXQgaXMgaW4gYSBk
aWZmZXJlbnQgZG9jdW1lbnQuCiAgICAgaWYgKGRvY3VtZW50KCkgIT0gYXR0ci0+ZG9jdW1lbnQo
KSkgewotICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBkb2N1bWVudCgpLT5hZG9w
dE5vZGUoYXR0ciwgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9XZWJDb3JlL2RvbS9OYW1l
ZE5vZGVNYXAuY3BwCmluZGV4IDdjOTI5OGFlODEyYzU5NGQyNGVjYjk2ZmNjZjlmYjQzNjIxZWI5
ZDYuLmMwZDlkMWFkYTg1YTYwMzA2NDc5ZWQxNmNmM2FhMzhhMmFiZTY0MWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcApAQCAtMTAwLDEyICsxMDAsNiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1h
cDo6c2V0TmFtZWRJdGVtKE5vZGUqIGFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIC8vIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIGFy
ZyB3YXMgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IGRvY3VtZW50IHRoYW4gdGhlIG9uZSB0aGF0
IGNyZWF0ZWQgdGhpcyBtYXAuCi0gICAgaWYgKGFyZy0+ZG9jdW1lbnQoKSAhPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCkpIHsKLSAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQogICAgIC8vIE5vdCBtZW50aW9uZWQgaW4gc3BlYzogdGhyb3cg
YSBISUVSQVJDSFlfUkVRVUVTVF9FUlJPUiBpZiB0aGUgdXNlciBwYXNzZXMgaW4gYSBub24tYXR0
cmlidXRlIG5vZGUKICAgICBpZiAoIWFyZy0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKICAgICAgICAg
ZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY0YTgxZWQ5YjQzNDk3N2FmYmZiYWQ1
YjY0MzNiOTdjMTBlYTM4YTMuLmQ2YjJhMDgxOGIwNjUyNTI0MjcyNmE3ZGEzYmZiMWJlNTY1ZTI3
MmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0xMTAxLDI1ICsxMTAxLDYgQEAgdm9pZCBOb2RlOjpjaGVja1JlcGxhY2VDaGls
ZChOb2RlKiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkQWRvcHRDaGlsZCA9IGZh
bHNlOwotICAgIAotICAgIC8vIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIG5ld0NoaWxk
IHdhcyBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgb25lIHRoYXQK
LSAgICAvLyBjcmVhdGVkIHRoaXMgbm9kZS4KLSAgICAvLyBXZSBhc3N1bWUgdGhhdCBpZiBuZXdD
aGlsZCBpcyBhIERvY3VtZW50RnJhZ21lbnQsIGFsbCBjaGlsZHJlbiBhcmUgY3JlYXRlZCBmcm9t
IHRoZSBzYW1lIGRvY3VtZW50Ci0gICAgLy8gYXMgdGhlIGZyYWdtZW50IGl0c2VsZiAob3RoZXJ3
aXNlIHRoZXkgY291bGQgbm90IGhhdmUgYmVlbiBhZGRlZCBhcyBjaGlsZHJlbikKLSAgICBpZiAo
bmV3Q2hpbGQtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQoKSkgewotICAgICAgICAvLyBidXQgaWYg
dGhlIGNoaWxkIGlzIG5vdCBpbiBhIGRvY3VtZW50IHlldCB0aGVuIGxvb3NlbiB0aGUKLSAgICAg
ICAgLy8gcmVzdHJpY3Rpb24sIHNvIHRoYXQgZS5nLiBjcmVhdGluZyBhbiBlbGVtZW50IHdpdGgg
dGhlIE9wdGlvbigpCi0gICAgICAgIC8vIGNvbnN0cnVjdG9yIGFuZCB0aGVuIGFkZGluZyBpdCB0
byBhIGRpZmZlcmVudCBkb2N1bWVudCB3b3JrcywKLSAgICAgICAgLy8gYXMgaXQgZG9lcyBpbiBN
b3ppbGxhIGFuZCBNYWMgSUUuCi0gICAgICAgIGlmICghbmV3Q2hpbGQtPmluRG9jdW1lbnQoKSkg
ewotICAgICAgICAgICAgc2hvdWxkQWRvcHRDaGlsZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICAvLyBISUVSQVJDSFlfUkVRVUVTVF9FUlI6
IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgb2YgYSB0eXBlIHRoYXQgZG9lcyBub3QgYWxsb3cgY2hp
bGRyZW4gb2YgdGhlIHR5cGUgb2YgdGhlCiAgICAgLy8gbmV3Q2hpbGQgbm9kZSwgb3IgaWYgdGhl
IG5vZGUgdG8gYXBwZW5kIGlzIG9uZSBvZiB0aGlzIG5vZGUncyBhbmNlc3RvcnMuCiAgICAgCkBA
IC0xMTM1LDkgKzExMTYsMTQgQEAgdm9pZCBOb2RlOjpjaGVja1JlcGxhY2VDaGlsZChOb2RlKiBu
ZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KICAgICAg
ICAKICAgICAvLyBjaGFuZ2UgdGhlIGRvY3VtZW50IHBvaW50ZXIgb2YgbmV3Q2hpbGQgYW5kIGFs
bCBvZiBpdHMgY2hpbGRyZW4gdG8gYmUgdGhlIG5ldyBkb2N1bWVudAotICAgIGlmIChzaG91bGRB
ZG9wdENoaWxkKQotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBuZXdDaGlsZDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUobmV3Q2hpbGQpKQotICAgICAgICAgICAgbm9kZS0+
c2V0RG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgaWYgKG5ld0NoaWxkLT5kb2N1bWVudCgpICE9
IGRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKG5ld0NoaWxkLT5pbkRvY3VtZW50KCkpCisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5hZG9wdE5vZGUobmV3Q2hpbGQsIGVjKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBuZXdDaGlsZDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUobmV3Q2hpbGQpKQorICAgICAgICAgICAgICAgIG5vZGUt
PnNldERvY3VtZW50KGRvY3VtZW50KCkpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIE5v
ZGU6OmNoZWNrQWRkQ2hpbGQoTm9kZSAqbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MTE1NiwyNSArMTE0Miw2IEBAIHZvaWQgTm9kZTo6Y2hlY2tBZGRDaGlsZChOb2RlICpuZXdDaGls
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29s
IHNob3VsZEFkb3B0Q2hpbGQgPSBmYWxzZTsKLQotICAgIC8vIFdST05HX0RPQ1VNRU5UX0VSUjog
UmFpc2VkIGlmIG5ld0NoaWxkIHdhcyBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgZG9jdW1lbnQg
dGhhbiB0aGUgb25lIHRoYXQKLSAgICAvLyBjcmVhdGVkIHRoaXMgbm9kZS4KLSAgICAvLyBXZSBh
c3N1bWUgdGhhdCBpZiBuZXdDaGlsZCBpcyBhIERvY3VtZW50RnJhZ21lbnQsIGFsbCBjaGlsZHJl
biBhcmUgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIGRvY3VtZW50Ci0gICAgLy8gYXMgdGhlIGZyYWdt
ZW50IGl0c2VsZiAob3RoZXJ3aXNlIHRoZXkgY291bGQgbm90IGhhdmUgYmVlbiBhZGRlZCBhcyBj
aGlsZHJlbikKLSAgICBpZiAobmV3Q2hpbGQtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQoKSkgewot
ICAgICAgICAvLyBidXQgaWYgdGhlIGNoaWxkIGlzIG5vdCBpbiBhIGRvY3VtZW50IHlldCB0aGVu
IGxvb3NlbiB0aGUKLSAgICAgICAgLy8gcmVzdHJpY3Rpb24sIHNvIHRoYXQgZS5nLiBjcmVhdGlu
ZyBhbiBlbGVtZW50IHdpdGggdGhlIE9wdGlvbigpCi0gICAgICAgIC8vIGNvbnN0cnVjdG9yIGFu
ZCB0aGVuIGFkZGluZyBpdCB0byBhIGRpZmZlcmVudCBkb2N1bWVudCB3b3JrcywKLSAgICAgICAg
Ly8gYXMgaXQgZG9lcyBpbiBNb3ppbGxhIGFuZCBNYWMgSUUuCi0gICAgICAgIGlmICghbmV3Q2hp
bGQtPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgc2hvdWxkQWRvcHRDaGlsZCA9IHRydWU7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIEhJRVJBUkNI
WV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyBvZiBhIHR5cGUgdGhhdCBkb2Vz
IG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlwZSBvZiB0aGUKICAgICAvLyBuZXdDaGlsZCBu
b2RlLCBvciBpZiB0aGUgbm9kZSB0byBhcHBlbmQgaXMgb25lIG9mIHRoaXMgbm9kZSdzIGFuY2Vz
dG9ycy4KIApAQCAtMTIwMCw5ICsxMTY3LDE0IEBAIHZvaWQgTm9kZTo6Y2hlY2tBZGRDaGlsZChO
b2RlICpuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgfQogICAgIAogICAgIC8vIGNo
YW5nZSB0aGUgZG9jdW1lbnQgcG9pbnRlciBvZiBuZXdDaGlsZCBhbmQgYWxsIG9mIGl0cyBjaGls
ZHJlbiB0byBiZSB0aGUgbmV3IGRvY3VtZW50Ci0gICAgaWYgKHNob3VsZEFkb3B0Q2hpbGQpCi0g
ICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5ld0NoaWxkOyBub2RlOyBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZShuZXdDaGlsZCkpCi0gICAgICAgICAgICBub2RlLT5zZXREb2N1bWVudChk
b2N1bWVudCgpKTsKKyAgICBpZiAobmV3Q2hpbGQtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQoKSkg
eworICAgICAgICBpZiAobmV3Q2hpbGQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkb3B0Tm9kZShuZXdDaGlsZCwgZWMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA9IG5ld0NoaWxkOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZShuZXdDaGlsZCkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0RG9jdW1lbnQo
ZG9jdW1lbnQoKSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIGJvb2wgTm9kZTo6aXNEZXNjZW5k
YW50T2YoY29uc3QgTm9kZSAqb3RoZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggZDkzYTU4ZTEyNWM5OWJjMjdm
ODFmYTAzZDVlYTliYzlhMjc2MWEyNC4uNmE4MTQxYjAzNGM2OGQ2ZTM5OTE1NjFjNTQ3NGNmNjk2
NWM4OTY4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcApAQCAtOTE5LDExICs5MTksMTAgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShQYXNzUmVmUHRyPE5vZGU+IHBycE5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYg
bmV3UGFyZW50IGFuZCB0aGUgY29udGFpbmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgUmFuZ2Ugd2Vy
ZQotICAgIC8vIG5vdCBjcmVhdGVkIGZyb20gdGhlIHNhbWUgZG9jdW1lbnQuCiAgICAgaWYgKG5l
d05vZGUtPmRvY3VtZW50KCkgIT0gbV9zdGFydC5jb250YWluZXIoKS0+ZG9jdW1lbnQoKSkgewot
ICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX3N0YXJ0LmNvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5hZG9wdE5vZGUobmV3Tm9kZSwgZWMp
OworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
SElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3Rh
cnQgb2YgdGhlIFJhbmdlIGlzIG9mIGEgdHlwZSB0aGF0CkBAIC0xNDA3LDggKzE0MDYsOSBAQCB2
b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc05ld1BhcmVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgLy8gV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQg
aWYgbmV3UGFyZW50IGFuZCB0aGUgY29udGFpbmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgUmFuZ2Ug
d2VyZQogICAgIC8vIG5vdCBjcmVhdGVkIGZyb20gdGhlIHNhbWUgZG9jdW1lbnQuCiAgICAgaWYg
KG5ld1BhcmVudC0+ZG9jdW1lbnQoKSAhPSBtX3N0YXJ0LmNvbnRhaW5lcigpLT5kb2N1bWVudCgp
KSB7Ci0gICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fc3RhcnQuY29udGFpbmVyKCktPmRvY3VtZW50KCktPmFkb3B0Tm9kZShuZXdQYXJl
bnQsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFJhaXNlIGEgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIGlmIG1fc3RhcnQuY29udGFpbmVy
KCkgZG9lc24ndCBhY2NlcHQgY2hpbGRyZW4gbGlrZSBuZXdQYXJlbnQuCg==
</data>
<flag name="review"
          id="54668"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>