<?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>23065</bug_id>
          
          <creation_ts>2009-01-01 11:57:12 -0800</creation_ts>
          <short_desc>Enable incremental painting for canvas</short_desc>
          <delta_ts>2009-01-01 18:07:11 -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>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>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="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>mitz</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103976</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 11:57:12 -0800</bug_when>
    <thetext>Whenever something draws in a &lt;canvas&gt;, the entire canvas is repainted. This makes drawing with large canvas elements very slow.

There was an attempt to fix this in &lt;http://trac.webkit.org/changeset/29448&gt;, but it was turned off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103979</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 12:15:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/6151191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103980</commentid>
    <comment_count>2</comment_count>
      <attachid>26350</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 12:19:01 -0800</bug_when>
    <thetext>Created attachment 26350
Patch, testcase, changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103984</commentid>
    <comment_count>3</comment_count>
      <attachid>26350</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-01 12:59:49 -0800</bug_when>
    <thetext>Comment on attachment 26350
Patch, testcase, changelog.

&gt; -const char* defaultFont = &quot;10px sans-serif&quot;;
&gt; +static const char* defaultFont = &quot;10px sans-serif&quot;;

This is still not doing what the original author probably intended. This is a variable, not a constant. It should be:

    static const char defaultFont[] = 10px sans-serif&quot;;

or

    static const char* const defaultFont = 10px sans-serif&quot;;

&gt; +class CanvasStrokeStyleApplier : public StrokeStyleApplier {
&gt; +public:
&gt; +    CanvasStrokeStyleApplier(CanvasRenderingContext2D* canvasContext)
&gt; +        : m_canvasContext(canvasContext)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    virtual void strokeStyle(GraphicsContext* c)
&gt; +    {
&gt; +        c-&gt;setStrokeThickness(m_canvasContext-&gt;lineWidth());
&gt; +
&gt; +        LineCap cap;
&gt; +        if (parseLineCap(m_canvasContext-&gt;lineCap(), cap))
&gt; +            c-&gt;setLineCap(cap);
&gt; +
&gt; +        LineJoin join;
&gt; +        if (parseLineJoin(m_canvasContext-&gt;lineJoin(), join))
&gt; +            c-&gt;setLineJoin(join);
&gt; +
&gt; +        c-&gt;setMiterLimit(m_canvasContext-&gt;miterLimit());
&gt; +    }
&gt; +
&gt; +    CanvasRenderingContext2D* m_canvasContext;
&gt; +};

Both strokeStyle and m_canvasContext should be private, not public. Because ... because why not? I say always make things private unless they&apos;re needed publicly.

&gt; -void CanvasRenderingContext2D::willDraw(const FloatRect&amp; r)
&gt; +void CanvasRenderingContext2D::willDraw(const FloatRect&amp; r, bool applyTransform, bool applyShadow, bool applyClip)

Functions that take a bunch of booleans make the code hard to read. This should either use an enum for each boolean or a flags word. Either is easier to read at the call site because of the use of named constants.

&gt; +    if (fill)
&gt; +        m_canvas-&gt;willDraw(textRect);
&gt; +    else
&gt; +        // When stroking text, pointy miters can extend outside of textRect, so we
&gt; +        // punt and dirty the whole canvas.
&gt; +        m_canvas-&gt;willDraw(FloatRect(0, 0, m_canvas-&gt;width(), m_canvas-&gt;height()));

Need braces around multi-line else body here (number of lines includes things like comments).

Would be better to have a helper function for &quot;will draw the entire canvas&quot;. Code that constructs the rectangle is confusing.

&gt;      CanvasStyle* drawStyle = fill ? state().m_fillStyle.get() : state().m_strokeStyle.get();
&gt;      if (drawStyle-&gt;canvasGradient() || drawStyle-&gt;canvasPattern()) {
&gt; +        // FIXME The rect is not big enough for miters on stroked text

We should have a colon after the FIXME. We should have a period at the end of the sentence.

I don&apos;t understand why it&apos;s OK to check in with this FIXME. Will this result in incorrect canvas drawing?

&gt; +// Map rect r from srcRect to an equivalent rect in destRect

Sentence-capitalized comment needs a period.

&gt; +inline FloatRect mapRect(const FloatRect&amp; r, const FloatRect&amp; srcRect, const FloatRect&amp; destRect)
&gt; +{
&gt; +    float widthScale = destRect.width() / srcRect.width();
&gt; +    float heightScale = destRect.height() / srcRect.height();
&gt; +    return FloatRect(destRect.x() + (r.x() - srcRect.x()) * widthScale,
&gt; +                     destRect.y() + (r.y() - srcRect.y()) * heightScale,
&gt; +                     r.width() * widthScale, r.height() * heightScale);
&gt; +}

Why is this inline? Is the behavior with 0 width and 0 height acceptable?

Does this really work reliably? Our previous attempts to turn this on have had bad results. Is the test you added extensive enough to prove we won&apos;t have trouble? Did you test with the sites that exercise canvas heavily, like the one that does the 3D Doom-style game?

I&apos;m going to say r=em, because none of these comments seem like showstoppers to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103989</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-01-01 13:57:58 -0800</bug_when>
    <thetext>+        LineCap cap;
+        if (parseLineCap(m_canvasContext-&gt;lineCap(), cap))
+            c-&gt;setLineCap(cap);
+
+        LineJoin join;
+        if (parseLineJoin(m_canvasContext-&gt;lineJoin(), join))
+            c-&gt;setLineJoin(join);

It seems a little silly to call these parse methods here, since we store the LineCap and LineJoin data internally already.  For instance, m_canvasContext-&gt;lineCap() calls lineCapName(state().m_lineCap) for the sake of the API.  We can just add accessors that get at the data directly to avoid this round trip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103991</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 13:58:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 26350 [review])

&gt; &gt;      CanvasStyle* drawStyle = fill ? state().m_fillStyle.get() : state().m_strokeStyle.get();
&gt; &gt;      if (drawStyle-&gt;canvasGradient() || drawStyle-&gt;canvasPattern()) {
&gt; &gt; +        // FIXME The rect is not big enough for miters on stroked text
&gt; 
&gt; We should have a colon after the FIXME. We should have a period at the end of
&gt; the sentence.
&gt; 
&gt; I don&apos;t understand why it&apos;s OK to check in with this FIXME. Will this result in
&gt; incorrect canvas drawing?

This is not a new issue with this patch; it&apos;s an existing problem. I filed bug 23067.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103995</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 15:51:13 -0800</bug_when>
    <thetext>Test sites:
http://jsmsxdemo.googlepages.com/jsmsx.html
http://caimansys.com/painter/
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103996</commentid>
    <comment_count>7</comment_count>
      <attachid>26353</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 16:22:29 -0800</bug_when>
    <thetext>Created attachment 26353
Final patch

Final patch for reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103997</commentid>
    <comment_count>8</comment_count>
      <attachid>26353</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-01 16:30:41 -0800</bug_when>
    <thetext>Comment on attachment 26353
Final patch

Instead of &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt; use &lt;!DOCTYPE html&gt;

otherwise r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104006</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 18:07:11 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/canvas/canvas-incremental-repaint.html
	A	LayoutTests/platform/mac/fast/canvas/canvas-incremental-repaint-expected.checksum
	A	LayoutTests/platform/mac/fast/canvas/canvas-incremental-repaint-expected.png
	A	LayoutTests/platform/mac/fast/canvas/canvas-incremental-repaint-expected.txt
	M	WebCore/ChangeLog
	M	WebCore/html/CanvasRenderingContext2D.cpp
	M	WebCore/html/CanvasRenderingContext2D.h
	M	WebCore/html/HTMLCanvasElement.cpp
	M	WebCore/platform/graphics/FloatRect.cpp
	M	WebCore/platform/graphics/FloatRect.h
Committed r39538
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26350</attachid>
            <date>2009-01-01 12:19:01 -0800</date>
            <delta_ts>2009-01-01 12:59:49 -0800</delta_ts>
            <desc>Patch, testcase, changelog.</desc>
            <filename>23065_patch.txt</filename>
            <type>text/plain</type>
            <size>18160</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNTY4YjBhLi5jMDY4YTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDEt
MDEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMDY1CisKKyAgICAgICAgUmVwYWludCB0ZXN0IGZvciBpbmNy
ZW1lbnRhbCBwYWludGluZyBpbiBjYW52YXMuCisgICAgICAgIAorICAgICAgICAqIGZhc3QvY2Fu
dmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWludC1leHBlY3Rl
ZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL2Nh
bnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisKIDIwMDgtMTItMzEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmlj
aEB1d2F0ZXJsb28uY2E+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWlu
dC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFp
bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE3YWNkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFs
LXJlcGFpbnQuaHRtbApAQCAtMCwwICsxLDE5MSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICIt
Ly9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICJodHRwOi8vd3d3Lncz
Lm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorCis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAg
PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJz
ZXQ9dXRmLTgiPgorICA8dGl0bGU+Q2FudmFzIEluY3JlbWVudGFsIFJlcGFpbnQ8L3RpdGxlPgor
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIGNhbnZhcyB7Cisg
ICAgICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDE1MHB4OworICAgICAgYm9yZGVyOiAy
MHB4IHNvbGlkIGJsYWNrOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisKKyAgICB2YXIgYXBwbGVJbWFnZTsKKyAgICBmdW5jdGlvbiBydW5SZXBhaW50VGVzdCgpCisg
ICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmRpc3BsYXkoKTsKKyAgICAgICAgICAgIHJlcGFpbnRUZXN0KCk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzZXRUaW1lb3V0KHJlcGFpbnRUZXN0LCAwKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBpbml0aWFsaXplQ2FudmFzKCkKKyAgICB7CisgICAgICB2YXIg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhczEnKTsKKyAgICAgIGNhbnZh
cy53aWR0aCA9IDE3MDsgLy8gZGVsaWJlcmF0ZWx5IGRpZmZlcmVudCBmcm9tIGVsZW1lbnQgc2l6
ZSwgZm9yIHNjYWxpbmcKKyAgICAgIGNhbnZhcy5oZWlnaHQgPSAxMjU7CisKKyAgICAgIC8vIHBy
ZXAgZm9yIGNsZWFyUmVjdCB0ZXN0CisgICAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY2FudmFzMicpOworICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcp
OworICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjODg4ODg4JzsgCisgICAgICBjdHguZmlsbFJlY3Qo
MCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biByZXBhaW50VGVzdCgpCisgICAgeworICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjYW52YXMxJyk7CisgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQo
JzJkJyk7CisKKyAgICAgIC8vIFRlc3Qgd2l0aCBkZWZhdWx0IENUTQorICAgICAgY3R4LmZpbGxT
dHlsZSA9ICdibGFjayc7IAorICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJ2dyZWVuJzsgCisgICAg
ICBjdHgubGluZVdpZHRoID0gMTI7IAorICAgICAgCisgICAgICBjdHguc2F2ZSgpOworICAgICAg
Y3R4LnNjYWxlKDEuNSwgMC44KTsKKyAgICAgIGN0eC5maWxsUmVjdCgzMCwgNDAsIDcwLCA4MCk7
CisgICAgICBjdHguc3Ryb2tlUmVjdCgzMCwgNDAsIDcwLCA4MCk7CisgICAgICBjdHgucmVzdG9y
ZSgpOworCisgICAgICAvLyBUZXN0IGNsZWFyUmVjdAorICAgICAgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NhbnZhczInKTsKKyAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0
KCcyZCcpOworICAgICAgLy8gY2xlYXJSZWN0IGlzIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm0s
IGFuZCBkb2VzIHNoYWRvd3MKKyAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMjA7CisgICAgICBj
dHguc2hhZG93T2Zmc2V0WSA9IDIwOworICAgICAgY3R4LnNoYWRvd0JsdXIgPSA0MDsKKyAgICAg
IGN0eC5zaGFkb3dDb2xvciA9ICcjMDAwMEFBJzsKKyAgICAgIGN0eC50cmFuc2xhdGUoNTAsIDEw
KTsKKyAgICAgIGN0eC5jbGVhclJlY3QoMTAsIDEwLCA4MCwgODApOworCisgICAgICAvLyBUZXN0
IHdpdGggc3Ryb2tlCisgICAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Fu
dmFzMycpOworICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgICAKKyAg
ICAgIGN0eC5iZWdpblBhdGgoKTsKKyAgICAgIGN0eC5tb3ZlVG8oMTAwLCAyMCk7CisgICAgICBj
dHguYmV6aWVyQ3VydmVUbygxNTAsIDIwLCAxNTAsIDEyMCwgMTAwLCAxMjApOworICAgICAgY3R4
LmJlemllckN1cnZlVG8oNTAsIDEyMCwgNTAsIDIwLCAxMDAsIDIwKTsKKyAgICAgIGN0eC5jbG9z
ZVBhdGgoKTsKKyAgICAgIGN0eC5saW5lV2lkdGggPSAyMDsKKyAgICAgIGN0eC5zdHJva2VTdHls
ZSA9ICdibGFjayc7IAorICAgICAgY3R4LnN0cm9rZSgpOworCisgICAgICAvLyBUZXN0IHdpdGgg
dGhpY2sgc3Ryb2tlIGFuZCB0cmFuc2Zvcm0sIGFuZCBzaGFkb3cKKyAgICAgIGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYW52YXM0Jyk7CisgICAgICBjdHggPSBjYW52YXMuZ2V0
Q29udGV4dCgnMmQnKTsKKyAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMjA7CisgICAgICBjdHgu
c2hhZG93T2Zmc2V0WSA9IDIwOworICAgICAgY3R4LnNoYWRvd0JsdXIgPSA0MDsKKyAgICAgIGN0
eC5zaGFkb3dDb2xvciA9ICdibHVlJworICAgICAgY3R4LmxpbmVXaWR0aCA9IDUwOworICAgICAg
Y3R4LnJvdGF0ZShNYXRoLlBJIC8gNSk7CisgICAgICBjdHguc2NhbGUoMS4yLCAxLjIpOworICAg
ICAgY3R4LnN0cm9rZVJlY3QoMTAwLCAwLCAxLCAxKTsKKworICAgICAgLy8gTWl0cmUgdGVzdAor
ICAgICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhczUnKTsKKyAgICAg
IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworICAgICAgY3R4Lm1vdmVUbygxNSwgNDAp
OworICAgICAgY3R4LmxpbmVUbygxOTAsIDYwKTsKKyAgICAgIGN0eC5saW5lVG8oMTUsIDgwKTsK
KworICAgICAgY3R4LmxpbmVXaWR0aCA9IDIwOworICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyMy
MjIyMjInOyAKKyAgICAgIGN0eC5zdHJva2UoKTsKKworICAgICAgLy8gVGV4dCB0ZXN0CisgICAg
ICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzNicpOworICAgICAgY3R4
ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgICBjdHguZm9udCA9ICI4MHB4ICdUaW1l
cyBOZXcgUm9tYW4nIjsKKyAgICAgIGN0eC5saW5lV2lkdGggPSA0MDsKKyAgICAgIGN0eC5zY2Fs
ZSgxLCAwLjkpOworICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJ2JsYWNrJzsKKyAgICAgIGN0eC5z
dHJva2VUZXh0KCJXZWJLaXQiLCAyMCwgMTAwKTsKKyAgICAgIGN0eC5maWxsU3R5bGUgPSAnZ3Jl
ZW4nOyAKKyAgICAgIGN0eC5maWxsVGV4dCgiV2ViS2l0IiwgMjAsIDEwMCk7CisKKyAgICAgIC8v
IGRyYXdJbWFnZSB0ZXN0CisgICAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y2FudmFzNycpOworICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgICBj
dHguc2hhZG93T2Zmc2V0WCA9IDIwOworICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAyMDsKKyAg
ICAgIGN0eC5zaGFkb3dCbHVyID0gNDA7CisgICAgICBjdHguc2hhZG93Q29sb3IgPSAnYmx1ZSc7
CisgICAgICBjdHgudHJhbnNsYXRlKDYwLCAwKTsKKyAgICAgIGN0eC5kcmF3SW1hZ2UoYXBwbGVJ
bWFnZSwgMTAsIDEwLCAxMDAsIDEwMCk7CisgICAgICAKKyAgICAgIC8vIGNsaXAgdGVzdAorICAg
ICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhczgnKTsKKyAgICAgIGN0
eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAy
MDsKKyAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMjA7CisgICAgICBjdHguc2hhZG93Qmx1ciA9
IDQwOworICAgICAgY3R4LnNoYWRvd0NvbG9yID0gJ2JsdWUnOworICAgICAgCisgICAgICBjdHgu
YmVnaW5QYXRoKCk7CisgICAgICBjdHgucmVjdCg1MCwgMzAsIDgwLCA4MCk7CisgICAgICBjdHgu
Y2xvc2VQYXRoKCk7CisgICAgICBjdHguY2xpcCgpOworICAgICAgCisgICAgICBjdHgudHJhbnNs
YXRlKDQwLCAwKTsKKyAgICAgIGN0eC5kcmF3SW1hZ2UoYXBwbGVJbWFnZSwgMTAsIDEwLCAxMDAs
IDEwMCk7CisgICAgICAKKyAgICAgIC8vIEltYWdlRGF0YSB0ZXN0CisgICAgICBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzOScpOworICAgICAgY3R4ID0gY2FudmFzLmdl
dENvbnRleHQoJzJkJyk7CisgICAgICBjdHguZHJhd0ltYWdlKGFwcGxlSW1hZ2UsIDEwLCAxMCwg
MTAwLCAxMDApOworICAgICAgCisgICAgICB2YXIgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0
YSgxNSwgMTUsIDkwLCA5MCk7CisKKyAgICAgIC8vIHB1dEltYWdlRGF0YSBpZ25vcmVzIHNoYWRv
dywgdHJhbnNmb3JtIGFuZCBjbGlwLCBidXQgc2V0IHRoZSB0byB0ZXN0CisgICAgICBjdHguc2hh
ZG93T2Zmc2V0WCA9IDIwOworICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAyMDsKKyAgICAgIGN0
eC5zaGFkb3dCbHVyID0gNDA7CisgICAgICBjdHgudHJhbnNsYXRlKDE2MCwgNTApOworICAgICAg
Y3R4LmJlZ2luUGF0aCgpOworICAgICAgY3R4LnJlY3QoNTAsIDMwLCA4MCwgODApOworICAgICAg
Y3R4LmNsb3NlUGF0aCgpOworICAgICAgY3R4LmNsaXAoKTsKKworICAgICAgY3R4LnB1dEltYWdl
RGF0YShpbWFnZURhdGEsIDE1MCwgMjApOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBwYWdl
TG9hZGVkKCkKKyAgICB7CisgICAgICBpbml0aWFsaXplQ2FudmFzKCk7CisKKyAgICAgIGFwcGxl
SW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAgIGFwcGxlSW1hZ2Uub25sb2FkID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJ1blJlcGFpbnRUZXN0KCk7CisgICAgICB9CisgICAgICBhcHBsZUltYWdl
LnNyYyA9ICJyZXNvdXJjZXMvYXBwbGUuZ2lmIjsKKyAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJwYWdlTG9hZGVkKCkiPgorCis8Y2FudmFzIGlkPSJjYW52YXMxIj48
L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczIiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iY2Fu
dmFzMyI+PC9jYW52YXM+PGJyPgorPGNhbnZhcyBpZD0iY2FudmFzNCI+PC9jYW52YXM+Cis8Y2Fu
dmFzIGlkPSJjYW52YXM1Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczYiPjwvY2FudmFz
Pjxicj4KKzxjYW52YXMgaWQ9ImNhbnZhczciPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iY2FudmFz
OCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXM5Ij48L2NhbnZhcz4KKworPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFz
L2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4
cGVjdGVkLmNoZWNrc3VtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDAy
N2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52
YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQuY2hlY2tzdW0KQEAgLTAsMCAr
MSBAQAorNDk1NjkxNzUzZTYwNjYwMzBmYjIxZDA1MzFhNGQ0MDUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52
YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVj
dGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQxOTdiCkJpbmFy
eSBmaWxlcyAvZGV2L251bGwgYW5kIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2Fu
dmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVjdGVkLnBuZyBkaWZmZXIKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVt
ZW50YWwtcmVwYWludC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjU4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJl
cGFpbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzEgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NTk4CisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg1
OTgKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODIKKyAgICAgIFJl
bmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgy
MHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyNDAsMTc2
KSBzaXplIDR4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDI0MCwxNzYpIHdpZHRoIDQ6ICIgIgor
ICAgICAgUmVuZGVySFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAoMjQ0LDApIHNpemUgMjQweDE5MCBb
Ym9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoNDg0LDE3Nikgc2l6ZSA0eDE4CisgICAgICAgIHRleHQgcnVuIGF0ICg0ODQsMTc2KSB3aWR0
aCA0OiAiICIKKyAgICAgIFJlbmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDQ4OCwwKSBzaXpl
IDI0MHgxOTAgW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisgICAgICBSZW5kZXJCUiB7
QlJ9IGF0ICg3MjgsMTkwKSBzaXplIDB4MAorICAgICAgUmVuZGVySFRNTENhbnZhcyB7Q0FOVkFT
fSBhdCAoMCwxOTQpIHNpemUgMjQweDE5MCBbYm9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0K
KyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjQwLDM3MCkgc2l6ZSA0eDE4CisgICAgICAg
IHRleHQgcnVuIGF0ICgyNDAsMzcwKSB3aWR0aCA0OiAiICIKKyAgICAgIFJlbmRlckhUTUxDYW52
YXMge0NBTlZBU30gYXQgKDI0NCwxOTQpIHNpemUgMjQweDE5MCBbYm9yZGVyOiAoMjBweCBzb2xp
ZCAjMDAwMDAwKV0KKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDg0LDM3MCkgc2l6ZSA0
eDE4CisgICAgICAgIHRleHQgcnVuIGF0ICg0ODQsMzcwKSB3aWR0aCA0OiAiICIKKyAgICAgIFJl
bmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDQ4OCwxOTQpIHNpemUgMjQweDE5MCBbYm9yZGVy
OiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDcyOCwzODQp
IHNpemUgMHgwCisgICAgICBSZW5kZXJIVE1MQ2FudmFzIHtDQU5WQVN9IGF0ICgwLDM4OCkgc2l6
ZSAyNDB4MTkwIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgyNDAsNTY0KSBzaXplIDR4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDI0
MCw1NjQpIHdpZHRoIDQ6ICIgIgorICAgICAgUmVuZGVySFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAo
MjQ0LDM4OCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQorICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0ODQsNTY0KSBzaXplIDR4MTgKKyAgICAgICAgdGV4
dCBydW4gYXQgKDQ4NCw1NjQpIHdpZHRoIDQ6ICIgIgorICAgICAgUmVuZGVySFRNTENhbnZhcyB7
Q0FOVkFTfSBhdCAoNDg4LDM4OCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgyMHB4IHNvbGlkICMw
MDAwMDApXQorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1Y2FkOWM4Li41NjljYzY5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBA
CisyMDA5LTAxLTAxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA2NQorICAgICAgICAKKyAgICAgICAgRW5h
YmxlIGluY3JlbWVudGFsIHBhaW50aW5nIG9mIGNhbnZhcy4gVGhpcyB0dXJucyBpbmNyZW1lbnRh
bCBwYWludGluZworICAgICAgICBiYWNrIG9uLCBhbmQgZml4ZXMgaXNzdWVzIHdpdGggc3Ryb2tl
IHdpZHRoIGFuZCBtaXRlcnMsIGNhbGxpbmcgd2lsbERyYXcoKQorICAgICAgICBmb3Igc3Ryb2tl
VGV4dCBhbmQgZmlsbFRleHQsIGFuZCB0YWtpbmcgc2hhZG93cyBpbnRvIGFjY291bnQuCisgICAg
ICAgIAorICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWlu
dC5odG1sCisKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHJva2VTdHlsZUFwcGxpZXI6OkNhbnZhc1N0cm9rZVN0
eWxlQXBwbGllcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHJva2VTdHlsZUFwcGxpZXI6
OnN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEludGVybmFsKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcFJlY3QpOiBuZXcg
bWV0aG9kIHRvIG1hcCBhIHJlY3QgY29udGFpbmVkCisgICAgICAgIGluIG9uZSByZWN0IHRvIGFu
IGVxdWl2YWxlbnQgcmVjdCBpbnNpZGUgYW5vdGhlciByZWN0LgorCiAyMDA4LTEyLTMxICBMYXN6
bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBIb2xnZXIgRnJleXRoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCmluZGV4IDhkZGE2YzkuLmZiNzM3Y2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySFRN
TENhbnZhcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKICNpbmNsdWRlICJUZXh0TWV0
cmljcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
QEAgLTY1LDcgKzY2LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotY29uc3QgY2hhciogZGVmYXVsdEZvbnQgPSAiMTBweCBzYW5zLXNlcmlm
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0Rm9udCA9ICIxMHB4IHNhbnMtc2VyaWYiOwor
CisKK2NsYXNzIENhbnZhc1N0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFw
cGxpZXIgeworcHVibGljOgorICAgIENhbnZhc1N0cm9rZVN0eWxlQXBwbGllcihDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGNhbnZhc0NvbnRleHQpCisgICAgICAgIDogbV9jYW52YXNDb250ZXh0
KGNhbnZhc0NvbnRleHQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBjKQorICAgIHsKKyAgICAgICAgYy0+c2V0U3Ryb2tl
VGhpY2tuZXNzKG1fY2FudmFzQ29udGV4dC0+bGluZVdpZHRoKCkpOworCisgICAgICAgIExpbmVD
YXAgY2FwOworICAgICAgICBpZiAocGFyc2VMaW5lQ2FwKG1fY2FudmFzQ29udGV4dC0+bGluZUNh
cCgpLCBjYXApKQorICAgICAgICAgICAgYy0+c2V0TGluZUNhcChjYXApOworCisgICAgICAgIExp
bmVKb2luIGpvaW47CisgICAgICAgIGlmIChwYXJzZUxpbmVKb2luKG1fY2FudmFzQ29udGV4dC0+
bGluZUpvaW4oKSwgam9pbikpCisgICAgICAgICAgICBjLT5zZXRMaW5lSm9pbihqb2luKTsKKwor
ICAgICAgICBjLT5zZXRNaXRlckxpbWl0KG1fY2FudmFzQ29udGV4dC0+bWl0ZXJMaW1pdCgpKTsK
KyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIG1fY2FudmFzQ29udGV4dDsK
K307CisKKwogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQpA
QCAtNjM4LDExICs2NjcsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tl
KCkKICAgICAgICAgYy0+YmVnaW5QYXRoKCk7CiAgICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsK
IAotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbnN1ZmZpY2llbnQsIG5lZWQgdG8gdXNlIENH
Q29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoIHRvIGV4cGFuZCB0byByZXF1aXJlZCBi
b3VuZHMKLSAgICAgICAgZmxvYXQgbGluZVdpZHRoID0gc3RhdGUoKS5tX2xpbmVXaWR0aDsKLSAg
ICAgICAgZmxvYXQgaW5zZXQgPSBsaW5lV2lkdGggLyAyOwotICAgICAgICBGbG9hdFJlY3QgYm91
bmRpbmdSZWN0ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwotICAgICAgICBib3VuZGluZ1JlY3Qu
aW5mbGF0ZShpbnNldCk7CisgICAgICAgIENhbnZhc1N0cm9rZVN0eWxlQXBwbGllciBzdHJva2VB
cHBsaWVyKHRoaXMpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gbV9wYXRoLnN0
cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlQXBwbGllcik7CiAgICAgICAgIHdpbGxEcmF3KGJvdW5k
aW5nUmVjdCk7CiAKICAgICAgICAgYy0+c3Ryb2tlUGF0aCgpOwpAQCAtMTExMyw3ICsxMTM5LDcg
QEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW0KICAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3Jl
YXRlKGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+
b3JpZ2luQ2xlYW4oKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxs
RHJhdyhjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCBib29sIGFwcGx5VHJhbnNmb3JtLCBib29sIGFw
cGx5U2hhZG93LCBib29sIGFwcGx5Q2xpcCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKQEAgLTExMjEsNyArMTE0NywyNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByKQog
ICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fY2FudmFzLT53aWxsRHJhdyhjLT5nZXRDVE0oKS5tYXBSZWN0KHIpKTsKKyAgICBGbG9hdFJl
Y3QgZGlydHlSZWN0ID0gcjsKKyAgICBpZiAoYXBwbHlUcmFuc2Zvcm0pIHsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgICAgIGRpcnR5UmVj
dCA9IGN0bS5tYXBSZWN0KHIpOworICAgIH0KKyAgICAKKyAgICBpZiAoYXBwbHlTaGFkb3cpIHsK
KyAgICAgICAgLy8gVGhlIHNoYWRvdyBnZXRzIGFwcGxpZWQgYWZ0ZXIgdHJhbnNmb3JtYXRpb24K
KyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgc2hhZG93
UmVjdC5tb3ZlKHN0YXRlKCkubV9zaGFkb3dPZmZzZXQpOworICAgICAgICBzaGFkb3dSZWN0Lmlu
ZmxhdGUoc3RhdGUoKS5tX3NoYWRvd0JsdXIpOworICAgICAgICBkaXJ0eVJlY3QudW5pdGUoc2hh
ZG93UmVjdCk7CisgICAgfQorICAgIAorICAgIGlmIChhcHBseUNsaXApIHsKKyAgICAgICAgLy8g
RklYTUU6IGFwcGx5IHRoZSBjdXJyZW50IGNsaXAgdG8gdGhlIHJlY3RhbmdsZS4gVW5mb3J0dW5h
dGVseSB3ZSBjYW4ndCBnZXQgdGhlIGNsaXAKKyAgICAgICAgLy8gYmFjayBvdXQgb2YgdGhlIEdy
YXBoaWNzQ29udGV4dCwgc28gdG8gdGFrZSBjbGlwIGludG8gYWNjb3VudCBmb3IgaW5jcmVtZW50
YWwgcGFpbnRpbmcsCisgICAgICAgIC8vIHdlJ2QgaGF2ZSB0byBrZWVwIHRoZSBjbGlwIHBhdGgg
YXJvdW5kLgorICAgIH0KKyAgICAKKyAgICBtX2NhbnZhcy0+d2lsbERyYXcoZGlydHlSZWN0KTsK
IH0KIAogR3JhcGhpY3NDb250ZXh0KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdpbmdD
b250ZXh0KCkgY29uc3QKQEAgLTEyMTEsNyArMTI1Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQg
ZHksCiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXIt
PnNpemUoKSkpOwogICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHdpbGxEcmF3KHNvdXJjZVJlY3QpOworICAgIHdpbGxEcmF3KHNvdXJjZVJlY3QsIGZh
bHNlLCBmYWxzZSwgZmFsc2UpOyAgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlw
CiAgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKICAgICBJbnRQb2ludCBkZXN0UG9p
bnQoZGVzdE9mZnNldC53aWR0aCgpLCBkZXN0T2Zmc2V0LmhlaWdodCgpKTsKICAgICAKQEAgLTEz
NzUsOSArMTQyMSwxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsbwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCArIGZvbnQuaGVpZ2h0KCksIGZvbnQubGluZVNwYWNp
bmcoKSk7CiAgICAgaWYgKCFmaWxsKQogICAgICAgICB0ZXh0UmVjdC5pbmZsYXRlKGMtPnN0cm9r
ZVRoaWNrbmVzcygpIC8gMik7Ci0gICAgICAgIAorCisgICAgaWYgKGZpbGwpCisgICAgICAgIG1f
Y2FudmFzLT53aWxsRHJhdyh0ZXh0UmVjdCk7CisgICAgZWxzZQorICAgICAgICAvLyBXaGVuIHN0
cm9raW5nIHRleHQsIHBvaW50eSBtaXRlcnMgY2FuIGV4dGVuZCBvdXRzaWRlIG9mIHRleHRSZWN0
LCBzbyB3ZQorICAgICAgICAvLyBwdW50IGFuZCBkaXJ0eSB0aGUgd2hvbGUgY2FudmFzLgorICAg
ICAgICBtX2NhbnZhcy0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIG1fY2FudmFzLT53aWR0aCgp
LCBtX2NhbnZhcy0+aGVpZ2h0KCkpKTsKKwogICAgIENhbnZhc1N0eWxlKiBkcmF3U3R5bGUgPSBm
aWxsID8gc3RhdGUoKS5tX2ZpbGxTdHlsZS5nZXQoKSA6IHN0YXRlKCkubV9zdHJva2VTdHlsZS5n
ZXQoKTsKICAgICBpZiAoZHJhd1N0eWxlLT5jYW52YXNHcmFkaWVudCgpIHx8IGRyYXdTdHlsZS0+
Y2FudmFzUGF0dGVybigpKSB7CisgICAgICAgIC8vIEZJWE1FIFRoZSByZWN0IGlzIG5vdCBiaWcg
ZW5vdWdoIGZvciBtaXRlcnMgb24gc3Ryb2tlZCB0ZXh0CiAgICAgICAgIEludFJlY3QgbWFza1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIAogICAgICAgICBhdXRvX3B0cjxJbWFn
ZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCks
IGZhbHNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCBjZWU4
ZmFmLi45ZGU4ZjQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBA
IC0yMjcsNyArMjI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgYXBw
bHlTaGFkb3coKTsKIAotICAgICAgICB2b2lkIHdpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgICAgICB2b2lkIHdpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgYXBwbHlUcmFuc2Zv
cm0gPSB0cnVlLCBib29sIGFwcGx5U2hhZG93ID0gdHJ1ZSwgYm9vbCBhcHBseUNsaXAgPSB0cnVl
KTsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDkzMzc0NWYuLmUzM2ExMzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMTU2LDE0ICsxNTYsOSBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9pbWFn
ZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwogICAgIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJvID0g
cmVuZGVyZXIoKSkgewotI2lmZGVmIENBTlZBU19JTkNSRU1FTlRBTF9SRVBBSU5UCi0gICAgICAg
IC8vIEhhbmRsZSBDU1MgdHJpZ2dlcmVkIHNjYWxpbmcKLSAgICAgICAgZmxvYXQgd2lkdGhTY2Fs
ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihyby0+d2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9zaXplLndpZHRoKCkpOwotICAgICAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IHN0YXRpY19jYXN0
PGZsb2F0Pihyby0+aGVpZ2h0KCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCByKHJlY3QueCgpICogd2lkdGhTY2FsZSwgcmVjdC55KCkg
KiBoZWlnaHRTY2FsZSwgcmVjdC53aWR0aCgpICogd2lkdGhTY2FsZSwgcmVjdC5oZWlnaHQoKSAq
IGhlaWdodFNjYWxlKTsKLSNlbHNlCi0gICAgICAgIEZsb2F0UmVjdCByKDAsIDAsIHJvLT53aWR0
aCgpLCByby0+aGVpZ2h0KCkpOyAgCi0jZW5kaWYKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gcm8tPmNvbnRlbnRCb3goKTsKKyAgICAgICAgRmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3Qs
IEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgZGVzdFJl
Y3QpOworICAgICAgICByLmludGVyc2VjdChkZXN0UmVjdCk7CiAgICAgICAgIGlmIChtX2RpcnR5
UmVjdC5jb250YWlucyhyKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggMTFlMzc5MS4uOTQzMWQxNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0xNjcsNiArMTY3LDE2IEBAIGlubGluZSBGbG9hdFJl
Y3QgdW5pb25SZWN0KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0JiBiKQogICAg
IHJldHVybiBjOwogfQogCisvLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0byBhbiBlcXVpdmFs
ZW50IHJlY3QgaW4gZGVzdFJlY3QKK2lubGluZSBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKK3sKKyAgICBmbG9hdCB3aWR0aFNjYWxlID0gZGVzdFJlY3Qud2lkdGgoKSAvIHNyY1Jl
Y3Qud2lkdGgoKTsKKyAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IGRlc3RSZWN0LmhlaWdodCgpIC8g
c3JjUmVjdC5oZWlnaHQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KGRlc3RSZWN0LngoKSArIChy
LngoKSAtIHNyY1JlY3QueCgpKSAqIHdpZHRoU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICBk
ZXN0UmVjdC55KCkgKyAoci55KCkgLSBzcmNSZWN0LnkoKSkgKiBoZWlnaHRTY2FsZSwKKyAgICAg
ICAgICAgICAgICAgICAgIHIud2lkdGgoKSAqIHdpZHRoU2NhbGUsIHIuaGVpZ2h0KCkgKiBoZWln
aHRTY2FsZSk7Cit9CisKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRmxvYXRSZWN0JiBh
LCBjb25zdCBGbG9hdFJlY3QmIGIpCiB7CiAgICAgcmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxv
Y2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cg==
</data>
<flag name="review"
          id="12490"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26353</attachid>
            <date>2009-01-01 16:22:29 -0800</date>
            <delta_ts>2009-01-01 16:30:41 -0800</delta_ts>
            <desc>Final patch</desc>
            <filename>23065_final.txt</filename>
            <type>text/plain</type>
            <size>19330</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNTY4YjBhLi5iYmY5ODgwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDEt
MDEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMwNjUKKworICAgICAgICBSZXBhaW50IHRlc3QgZm9yIGluY3JlbWVu
dGFsIHBhaW50aW5nIGluIGNhbnZhcy4KKyAgICAgICAgCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50LWV4cGVjdGVkLmNo
ZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2FudmFz
LWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKwogMjAwOC0xMi0zMSAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3
YXRlcmxvby5jYT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRhbC1yZXBhaW50Lmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWludC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTdhY2QKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVw
YWludC5odG1sCkBAIC0wLDAgKzEsMTkxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93d3cudzMub3Jn
L1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8bWV0
YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11
dGYtOCI+CisgIDx0aXRsZT5DYW52YXMgSW5jcmVtZW50YWwgUmVwYWludDwvdGl0bGU+CisgIDxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgY2FudmFzIHsKKyAgICAg
IHdpZHRoOiAyMDBweDsKKyAgICAgIGhlaWdodDogMTUwcHg7CisgICAgICBib3JkZXI6IDIwcHgg
c29saWQgYmxhY2s7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwor
ICAgIHZhciBhcHBsZUltYWdlOworICAgIGZ1bmN0aW9uIHJ1blJlcGFpbnRUZXN0KCkKKyAgICB7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZGlzcGxheSgpOworICAgICAgICAgICAgcmVwYWludFRlc3QoKTsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHNldFRpbWVvdXQocmVwYWludFRlc3QsIDApOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGZ1bmN0aW9uIGluaXRpYWxpemVDYW52YXMoKQorICAgIHsKKyAgICAgIHZhciBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzMScpOworICAgICAgY2FudmFzLndp
ZHRoID0gMTcwOyAvLyBkZWxpYmVyYXRlbHkgZGlmZmVyZW50IGZyb20gZWxlbWVudCBzaXplLCBm
b3Igc2NhbGluZworICAgICAgY2FudmFzLmhlaWdodCA9IDEyNTsKKworICAgICAgLy8gcHJlcCBm
b3IgY2xlYXJSZWN0IHRlc3QKKyAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjYW52YXMyJyk7CisgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7Cisg
ICAgICBjdHguZmlsbFN0eWxlID0gJyM4ODg4ODgnOyAKKyAgICAgIGN0eC5maWxsUmVjdCgwLCAw
LCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJl
cGFpbnRUZXN0KCkKKyAgICB7CisgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NhbnZhczEnKTsKKyAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQn
KTsKKworICAgICAgLy8gVGVzdCB3aXRoIGRlZmF1bHQgQ1RNCisgICAgICBjdHguZmlsbFN0eWxl
ID0gJ2JsYWNrJzsgCisgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnZ3JlZW4nOyAKKyAgICAgIGN0
eC5saW5lV2lkdGggPSAxMjsgCisgICAgICAKKyAgICAgIGN0eC5zYXZlKCk7CisgICAgICBjdHgu
c2NhbGUoMS41LCAwLjgpOworICAgICAgY3R4LmZpbGxSZWN0KDMwLCA0MCwgNzAsIDgwKTsKKyAg
ICAgIGN0eC5zdHJva2VSZWN0KDMwLCA0MCwgNzAsIDgwKTsKKyAgICAgIGN0eC5yZXN0b3JlKCk7
CisKKyAgICAgIC8vIFRlc3QgY2xlYXJSZWN0CisgICAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY2FudmFzMicpOworICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJk
Jyk7CisgICAgICAvLyBjbGVhclJlY3QgaXMgYWZmZWN0ZWQgYnkgdGhlIHRyYW5zZm9ybSwgYW5k
IGRvZXMgc2hhZG93cworICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAyMDsKKyAgICAgIGN0eC5z
aGFkb3dPZmZzZXRZID0gMjA7CisgICAgICBjdHguc2hhZG93Qmx1ciA9IDQwOworICAgICAgY3R4
LnNoYWRvd0NvbG9yID0gJyMwMDAwQUEnOworICAgICAgY3R4LnRyYW5zbGF0ZSg1MCwgMTApOwor
ICAgICAgY3R4LmNsZWFyUmVjdCgxMCwgMTAsIDgwLCA4MCk7CisKKyAgICAgIC8vIFRlc3Qgd2l0
aCBzdHJva2UKKyAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYW52YXMz
Jyk7CisgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgIAorICAgICAg
Y3R4LmJlZ2luUGF0aCgpOworICAgICAgY3R4Lm1vdmVUbygxMDAsIDIwKTsKKyAgICAgIGN0eC5i
ZXppZXJDdXJ2ZVRvKDE1MCwgMjAsIDE1MCwgMTIwLCAxMDAsIDEyMCk7CisgICAgICBjdHguYmV6
aWVyQ3VydmVUbyg1MCwgMTIwLCA1MCwgMjAsIDEwMCwgMjApOworICAgICAgY3R4LmNsb3NlUGF0
aCgpOworICAgICAgY3R4LmxpbmVXaWR0aCA9IDIwOworICAgICAgY3R4LnN0cm9rZVN0eWxlID0g
J2JsYWNrJzsgCisgICAgICBjdHguc3Ryb2tlKCk7CisKKyAgICAgIC8vIFRlc3Qgd2l0aCB0aGlj
ayBzdHJva2UgYW5kIHRyYW5zZm9ybSwgYW5kIHNoYWRvdworICAgICAgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhczQnKTsKKyAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250
ZXh0KCcyZCcpOworICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAyMDsKKyAgICAgIGN0eC5zaGFk
b3dPZmZzZXRZID0gMjA7CisgICAgICBjdHguc2hhZG93Qmx1ciA9IDQwOworICAgICAgY3R4LnNo
YWRvd0NvbG9yID0gJ2JsdWUnCisgICAgICBjdHgubGluZVdpZHRoID0gNTA7CisgICAgICBjdHgu
cm90YXRlKE1hdGguUEkgLyA1KTsKKyAgICAgIGN0eC5zY2FsZSgxLjIsIDEuMik7CisgICAgICBj
dHguc3Ryb2tlUmVjdCgxMDAsIDAsIDEsIDEpOworCisgICAgICAvLyBNaXRyZSB0ZXN0CisgICAg
ICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzNScpOworICAgICAgY3R4
ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgICBjdHgubW92ZVRvKDE1LCA0MCk7Cisg
ICAgICBjdHgubGluZVRvKDE5MCwgNjApOworICAgICAgY3R4LmxpbmVUbygxNSwgODApOworCisg
ICAgICBjdHgubGluZVdpZHRoID0gMjA7CisgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzIyMjIy
Mic7IAorICAgICAgY3R4LnN0cm9rZSgpOworCisgICAgICAvLyBUZXh0IHRlc3QKKyAgICAgIGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYW52YXM2Jyk7CisgICAgICBjdHggPSBj
YW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgIGN0eC5mb250ID0gIjgwcHggJ1RpbWVzIE5l
dyBSb21hbiciOworICAgICAgY3R4LmxpbmVXaWR0aCA9IDQwOworICAgICAgY3R4LnNjYWxlKDEs
IDAuOSk7CisgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnYmxhY2snOworICAgICAgY3R4LnN0cm9r
ZVRleHQoIldlYktpdCIsIDIwLCAxMDApOworICAgICAgY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7
IAorICAgICAgY3R4LmZpbGxUZXh0KCJXZWJLaXQiLCAyMCwgMTAwKTsKKworICAgICAgLy8gZHJh
d0ltYWdlIHRlc3QKKyAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYW52
YXM3Jyk7CisgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgIGN0eC5z
aGFkb3dPZmZzZXRYID0gMjA7CisgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDIwOworICAgICAg
Y3R4LnNoYWRvd0JsdXIgPSA0MDsKKyAgICAgIGN0eC5zaGFkb3dDb2xvciA9ICdibHVlJzsKKyAg
ICAgIGN0eC50cmFuc2xhdGUoNjAsIDApOworICAgICAgY3R4LmRyYXdJbWFnZShhcHBsZUltYWdl
LCAxMCwgMTAsIDEwMCwgMTAwKTsKKyAgICAgIAorICAgICAgLy8gY2xpcCB0ZXN0CisgICAgICBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzOCcpOworICAgICAgY3R4ID0g
Y2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDIwOwor
ICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAyMDsKKyAgICAgIGN0eC5zaGFkb3dCbHVyID0gNDA7
CisgICAgICBjdHguc2hhZG93Q29sb3IgPSAnYmx1ZSc7CisgICAgICAKKyAgICAgIGN0eC5iZWdp
blBhdGgoKTsKKyAgICAgIGN0eC5yZWN0KDUwLCAzMCwgODAsIDgwKTsKKyAgICAgIGN0eC5jbG9z
ZVBhdGgoKTsKKyAgICAgIGN0eC5jbGlwKCk7CisgICAgICAKKyAgICAgIGN0eC50cmFuc2xhdGUo
NDAsIDApOworICAgICAgY3R4LmRyYXdJbWFnZShhcHBsZUltYWdlLCAxMCwgMTAsIDEwMCwgMTAw
KTsKKyAgICAgIAorICAgICAgLy8gSW1hZ2VEYXRhIHRlc3QKKyAgICAgIGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjYW52YXM5Jyk7CisgICAgICBjdHggPSBjYW52YXMuZ2V0Q29u
dGV4dCgnMmQnKTsKKyAgICAgIGN0eC5kcmF3SW1hZ2UoYXBwbGVJbWFnZSwgMTAsIDEwLCAxMDAs
IDEwMCk7CisgICAgICAKKyAgICAgIHZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDE1
LCAxNSwgOTAsIDkwKTsKKworICAgICAgLy8gcHV0SW1hZ2VEYXRhIGlnbm9yZXMgc2hhZG93LCB0
cmFuc2Zvcm0gYW5kIGNsaXAsIGJ1dCBzZXQgdGhlIHRvIHRlc3QKKyAgICAgIGN0eC5zaGFkb3dP
ZmZzZXRYID0gMjA7CisgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDIwOworICAgICAgY3R4LnNo
YWRvd0JsdXIgPSA0MDsKKyAgICAgIGN0eC50cmFuc2xhdGUoMTYwLCA1MCk7CisgICAgICBjdHgu
YmVnaW5QYXRoKCk7CisgICAgICBjdHgucmVjdCg1MCwgMzAsIDgwLCA4MCk7CisgICAgICBjdHgu
Y2xvc2VQYXRoKCk7CisgICAgICBjdHguY2xpcCgpOworCisgICAgICBjdHgucHV0SW1hZ2VEYXRh
KGltYWdlRGF0YSwgMTUwLCAyMCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHBhZ2VMb2Fk
ZWQoKQorICAgIHsKKyAgICAgIGluaXRpYWxpemVDYW52YXMoKTsKKworICAgICAgYXBwbGVJbWFn
ZSA9IG5ldyBJbWFnZSgpOworICAgICAgYXBwbGVJbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcnVuUmVwYWludFRlc3QoKTsKKyAgICAgIH0KKyAgICAgIGFwcGxlSW1hZ2Uuc3Jj
ID0gInJlc291cmNlcy9hcHBsZS5naWYiOworICAgIH0KKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InBhZ2VMb2FkZWQoKSI+CisKKzxjYW52YXMgaWQ9ImNhbnZhczEiPjwvY2Fu
dmFzPgorPGNhbnZhcyBpZD0iY2FudmFzMiI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXMz
Ij48L2NhbnZhcz48YnI+Cis8Y2FudmFzIGlkPSJjYW52YXM0Ij48L2NhbnZhcz4KKzxjYW52YXMg
aWQ9ImNhbnZhczUiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iY2FudmFzNiI+PC9jYW52YXM+PGJy
PgorPGNhbnZhcyBpZD0iY2FudmFzNyI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXM4Ij48
L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczkiPjwvY2FudmFzPgorCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2Fu
dmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQuY2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0
ZWQuY2hlY2tzdW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0MDI3Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2NhbnZhcy9j
YW52YXMtaW5jcmVtZW50YWwtcmVwYWludC1leHBlY3RlZC5jaGVja3N1bQpAQCAtMCwwICsxIEBA
Cis0OTU2OTE3NTNlNjA2NjAzMGZiMjFkMDUzMWE0ZDQwNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2NhbnZhcy9j
YW52YXMtaW5jcmVtZW50YWwtcmVwYWludC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQu
cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNDE5N2IKQmluYXJ5IGZp
bGVzIC9kZXYvbnVsbCBhbmQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMv
Y2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQtZXhwZWN0ZWQucG5nIGRpZmZlcgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL2NhbnZhcy1pbmNyZW1lbnRh
bC1yZXBhaW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nh
bnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWludC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViNTg4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2NhbnZhcy9jYW52YXMtaW5jcmVtZW50YWwtcmVwYWlu
dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg1OTgKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDU5OAor
ICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4MgorICAgICAgUmVuZGVy
SFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAoMCwwKSBzaXplIDI0MHgxOTAgW2JvcmRlcjogKDIwcHgg
c29saWQgIzAwMDAwMCldCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI0MCwxNzYpIHNp
emUgNHgxOAorICAgICAgICB0ZXh0IHJ1biBhdCAoMjQwLDE3Nikgd2lkdGggNDogIiAiCisgICAg
ICBSZW5kZXJIVE1MQ2FudmFzIHtDQU5WQVN9IGF0ICgyNDQsMCkgc2l6ZSAyNDB4MTkwIFtib3Jk
ZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0
ODQsMTc2KSBzaXplIDR4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDQ4NCwxNzYpIHdpZHRoIDQ6
ICIgIgorICAgICAgUmVuZGVySFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAoNDg4LDApIHNpemUgMjQw
eDE5MCBbYm9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgIFJlbmRlckJSIHtCUn0g
YXQgKDcyOCwxOTApIHNpemUgMHgwCisgICAgICBSZW5kZXJIVE1MQ2FudmFzIHtDQU5WQVN9IGF0
ICgwLDE5NCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQorICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyNDAsMzcwKSBzaXplIDR4MTgKKyAgICAgICAgdGV4
dCBydW4gYXQgKDI0MCwzNzApIHdpZHRoIDQ6ICIgIgorICAgICAgUmVuZGVySFRNTENhbnZhcyB7
Q0FOVkFTfSBhdCAoMjQ0LDE5NCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgyMHB4IHNvbGlkICMw
MDAwMDApXQorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0ODQsMzcwKSBzaXplIDR4MTgK
KyAgICAgICAgdGV4dCBydW4gYXQgKDQ4NCwzNzApIHdpZHRoIDQ6ICIgIgorICAgICAgUmVuZGVy
SFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAoNDg4LDE5NCkgc2l6ZSAyNDB4MTkwIFtib3JkZXI6ICgy
MHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoNzI4LDM4NCkgc2l6
ZSAweDAKKyAgICAgIFJlbmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDAsMzg4KSBzaXplIDI0
MHgxOTAgW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDI0MCw1NjQpIHNpemUgNHgxOAorICAgICAgICB0ZXh0IHJ1biBhdCAoMjQwLDU2
NCkgd2lkdGggNDogIiAiCisgICAgICBSZW5kZXJIVE1MQ2FudmFzIHtDQU5WQVN9IGF0ICgyNDQs
Mzg4KSBzaXplIDI0MHgxOTAgW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQ4NCw1NjQpIHNpemUgNHgxOAorICAgICAgICB0ZXh0IHJ1
biBhdCAoNDg0LDU2NCkgd2lkdGggNDogIiAiCisgICAgICBSZW5kZXJIVE1MQ2FudmFzIHtDQU5W
QVN9IGF0ICg0ODgsMzg4KSBzaXplIDI0MHgxOTAgW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAw
MCldCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMHgwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVjYWQ5YzguLjlmZWU4MzkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIw
MDktMDEtMDEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjUKKyAgICAgICAgCisgICAgICAgIEVuYWJsZSBpbmNy
ZW1lbnRhbCBwYWludGluZyBvZiBjYW52YXMuIFRoaXMgdHVybnMgaW5jcmVtZW50YWwgcGFpbnRp
bmcKKyAgICAgICAgYmFjayBvbiwgYW5kIGZpeGVzIGlzc3VlcyB3aXRoIHN0cm9rZSB3aWR0aCBh
bmQgbWl0ZXJzLCBjYWxsaW5nIHdpbGxEcmF3KCkKKyAgICAgICAgZm9yIHN0cm9rZVRleHQgYW5k
IGZpbGxUZXh0LCBhbmQgdGFraW5nIHNoYWRvd3MgaW50byBhY2NvdW50LgorICAgICAgICAKKyAg
ICAgICAgVGVzdDogZmFzdC9jYW52YXMvY2FudmFzLWluY3JlbWVudGFsLXJlcGFpbnQuaHRtbAor
CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzU3Ryb2tlU3R5bGVBcHBsaWVyOjpDYW52YXNTdHJva2VTdHlsZUFwcGxp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3Ryb2tlU3R5bGVBcHBsaWVyOjpzdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9r
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjptYXBSZWN0KTogbmV3IG1ldGhvZCB0
byBtYXAgYSByZWN0IGNvbnRhaW5lZAorICAgICAgICBpbiBvbmUgcmVjdCB0byBhbiBlcXVpdmFs
ZW50IHJlY3QgaW5zaWRlIGFub3RoZXIgcmVjdC4KKwogMjAwOC0xMi0zMSAgTGFzemxvIEdvbWJv
cyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9s
Z2VyIEZyZXl0aGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApp
bmRleCA4ZGRhNmM5Li5jOGVmYWMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIK
ICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC02NSw3
ICs2NiwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLWNvbnN0IGNoYXIqIGRlZmF1bHRGb250ID0gIjEwcHggc2Fucy1zZXJpZiI7CitzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdEZvbnQgPSAiMTBweCBzYW5zLXNlcmlmIjsKKwor
CitjbGFzcyBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBs
aWVyIHsKK3B1YmxpYzoKKyAgICBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKiBjYW52YXNDb250ZXh0KQorICAgICAgICA6IG1fY2FudmFzQ29udGV4dChj
YW52YXNDb250ZXh0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN0cm9r
ZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogYykKKyAgICB7CisgICAgICAgIGMtPnNldFN0cm9rZVRo
aWNrbmVzcyhtX2NhbnZhc0NvbnRleHQtPmxpbmVXaWR0aCgpKTsKKyAgICAgICAgYy0+c2V0TGlu
ZUNhcChtX2NhbnZhc0NvbnRleHQtPmdldExpbmVDYXAoKSk7CisgICAgICAgIGMtPnNldExpbmVK
b2luKG1fY2FudmFzQ29udGV4dC0+Z2V0TGluZUpvaW4oKSk7CisgICAgICAgIGMtPnNldE1pdGVy
TGltaXQobV9jYW52YXNDb250ZXh0LT5taXRlckxpbWl0KCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIG1fY2FudmFzQ29udGV4dDsKK307CisKKwog
CiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQpAQCAtNjM4LDEx
ICs2NjEsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAg
ICAgYy0+YmVnaW5QYXRoKCk7CiAgICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKIAotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBpbnN1ZmZpY2llbnQsIG5lZWQgdG8gdXNlIENHQ29udGV4dFJl
cGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoIHRvIGV4cGFuZCB0byByZXF1aXJlZCBib3VuZHMKLSAg
ICAgICAgZmxvYXQgbGluZVdpZHRoID0gc3RhdGUoKS5tX2xpbmVXaWR0aDsKLSAgICAgICAgZmxv
YXQgaW5zZXQgPSBsaW5lV2lkdGggLyAyOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0
ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwotICAgICAgICBib3VuZGluZ1JlY3QuaW5mbGF0ZShp
bnNldCk7CisgICAgICAgIENhbnZhc1N0cm9rZVN0eWxlQXBwbGllciBzdHJva2VBcHBsaWVyKHRo
aXMpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gbV9wYXRoLnN0cm9rZUJvdW5k
aW5nUmVjdCgmc3Ryb2tlQXBwbGllcik7CiAgICAgICAgIHdpbGxEcmF3KGJvdW5kaW5nUmVjdCk7
CiAKICAgICAgICAgYy0+c3Ryb2tlUGF0aCgpOwpAQCAtMTExMyw3ICsxMTMzLDcgQEAgUGFzc1Jl
ZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRl
cm4oSFRNTENhbnZhc0VsZW0KICAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZh
cy0+YnVmZmVyKCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xl
YW4oKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25z
dCBGbG9hdFJlY3QmIHIpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXco
Y29uc3QgRmxvYXRSZWN0JiByLCB1bnNpZ25lZCBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQpAQCAtMTEyMSw3ICsxMTQx
LDI3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBGbG9h
dFJlY3QmIHIpCiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9jYW52YXMtPndpbGxEcmF3KGMtPmdldENUTSgpLm1hcFJlY3QocikpOwor
ICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSByOworICAgIGlmIChvcHRpb25zICYgQ2FudmFzV2ls
bERyYXdBcHBseVRyYW5zZm9ybSkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gc3Rh
dGUoKS5tX3RyYW5zZm9ybTsKKyAgICAgICAgZGlydHlSZWN0ID0gY3RtLm1hcFJlY3Qocik7Cisg
ICAgfQorICAgIAorICAgIGlmIChvcHRpb25zICYgQ2FudmFzV2lsbERyYXdBcHBseVNoYWRvdykg
eworICAgICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0cmFuc2Zvcm1hdGlv
bgorICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOworICAgICAgICBzaGFk
b3dSZWN0Lm1vdmUoc3RhdGUoKS5tX3NoYWRvd09mZnNldCk7CisgICAgICAgIHNoYWRvd1JlY3Qu
aW5mbGF0ZShzdGF0ZSgpLm1fc2hhZG93Qmx1cik7CisgICAgICAgIGRpcnR5UmVjdC51bml0ZShz
aGFkb3dSZWN0KTsKKyAgICB9CisgICAgCisgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxsRHJh
d0FwcGx5Q2xpcCkgeworICAgICAgICAvLyBGSVhNRTogYXBwbHkgdGhlIGN1cnJlbnQgY2xpcCB0
byB0aGUgcmVjdGFuZ2xlLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGdldCB0aGUgY2xpcAorICAg
ICAgICAvLyBiYWNrIG91dCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0byB0YWtlIGNsaXAg
aW50byBhY2NvdW50IGZvciBpbmNyZW1lbnRhbCBwYWludGluZywKKyAgICAgICAgLy8gd2UnZCBo
YXZlIHRvIGtlZXAgdGhlIGNsaXAgcGF0aCBhcm91bmQuCisgICAgfQorICAgIAorICAgIG1fY2Fu
dmFzLT53aWxsRHJhdyhkaXJ0eVJlY3QpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdApAQCAtMTIxMSw3ICsxMjUx
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEqIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwKICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJ
bnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+c2l6ZSgpKSk7CiAgICAgaWYgKHNvdXJjZVJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgd2lsbERyYXcoc291cmNlUmVjdCk7Cisg
ICAgd2lsbERyYXcoc291cmNlUmVjdCwgMCk7ICAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cg
YW5kIGNsaXAKICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRlc3RPZmZzZXQpOwogICAgIEludFBvaW50
IGRlc3RQb2ludChkZXN0T2Zmc2V0LndpZHRoKCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOwogICAg
IApAQCAtMTM3NSw5ICsxNDE1LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICsgZm9udC5oZWlnaHQoKSwgZm9udC5s
aW5lU3BhY2luZygpKTsKICAgICBpZiAoIWZpbGwpCiAgICAgICAgIHRleHRSZWN0LmluZmxhdGUo
Yy0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAyKTsKLSAgICAgICAgCisKKyAgICBpZiAoZmlsbCkKKyAg
ICAgICAgbV9jYW52YXMtPndpbGxEcmF3KHRleHRSZWN0KTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gV2hlbiBzdHJva2luZyB0ZXh0LCBwb2ludHkgbWl0ZXJzIGNhbiBleHRlbmQgb3V0c2lkZSBv
ZiB0ZXh0UmVjdCwgc28gd2UKKyAgICAgICAgLy8gcHVudCBhbmQgZGlydHkgdGhlIHdob2xlIGNh
bnZhcy4KKyAgICAgICAgbV9jYW52YXMtPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBtX2NhbnZh
cy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpKSk7CisgICAgfQorICAgIAogICAgIENhbnZh
c1N0eWxlKiBkcmF3U3R5bGUgPSBmaWxsID8gc3RhdGUoKS5tX2ZpbGxTdHlsZS5nZXQoKSA6IHN0
YXRlKCkubV9zdHJva2VTdHlsZS5nZXQoKTsKICAgICBpZiAoZHJhd1N0eWxlLT5jYW52YXNHcmFk
aWVudCgpIHx8IGRyYXdTdHlsZS0+Y2FudmFzUGF0dGVybigpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBUaGUgcmVjdCBpcyBub3QgYmlnIGVub3VnaCBmb3IgbWl0ZXJzIG9uIHN0cm9rZWQgdGV4dC4K
ICAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwog
CiAgICAgICAgIGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCmluZGV4IGNlZThmYWYuLmE2MzY3ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTE5NCw2ICsxOTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc3Ryb2tlVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IG1heFdpZHRoKTsKICAgICAgICAgUGFzc1JlZlB0cjxUZXh0TWV0cmlj
cz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAorICAgICAgICBMaW5lQ2FwIGdl
dExpbmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLm1fbGluZUNhcDsgfQorICAgICAgICBM
aW5lSm9pbiBnZXRMaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkubV9saW5lSm9pbjsg
fQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IFN0YXRlIHsKICAgICAgICAgICAgIFN0
YXRlKCk7CkBAIC0yMjcsNyArMjMwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2b2lkIGFwcGx5U2hhZG93KCk7CiAKLSAgICAgICAgdm9pZCB3aWxsRHJhdyhjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICAgICAgZW51bSBDYW52YXNXaWxsRHJhd09wdGlvbiB7CisgICAgICAgICAg
ICBDYW52YXNXaWxsRHJhd0FwcGx5VHJhbnNmb3JtID0gMSwKKyAgICAgICAgICAgIENhbnZhc1dp
bGxEcmF3QXBwbHlTaGFkb3cgPSAxIDw8IDEsCisgICAgICAgICAgICBDYW52YXNXaWxsRHJhd0Fw
cGx5Q2xpcCA9IDEgPDwgMiwKKyAgICAgICAgICAgIENhbnZhc1dpbGxEcmF3QXBwbHlBbGwgPSAw
eGZmZmZmZmZmCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB2b2lkIHdpbGxEcmF3KGNv
bnN0IEZsb2F0UmVjdCYsIHVuc2lnbmVkIG9wdGlvbnMgPSBDYW52YXNXaWxsRHJhd0FwcGx5QWxs
KTsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDkzMzc0NWYuLmUzM2ExMzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMTU2LDE0ICsxNTYsOSBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9pbWFn
ZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwogICAgIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJvID0g
cmVuZGVyZXIoKSkgewotI2lmZGVmIENBTlZBU19JTkNSRU1FTlRBTF9SRVBBSU5UCi0gICAgICAg
IC8vIEhhbmRsZSBDU1MgdHJpZ2dlcmVkIHNjYWxpbmcKLSAgICAgICAgZmxvYXQgd2lkdGhTY2Fs
ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihyby0+d2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9zaXplLndpZHRoKCkpOwotICAgICAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IHN0YXRpY19jYXN0
PGZsb2F0Pihyby0+aGVpZ2h0KCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCByKHJlY3QueCgpICogd2lkdGhTY2FsZSwgcmVjdC55KCkg
KiBoZWlnaHRTY2FsZSwgcmVjdC53aWR0aCgpICogd2lkdGhTY2FsZSwgcmVjdC5oZWlnaHQoKSAq
IGhlaWdodFNjYWxlKTsKLSNlbHNlCi0gICAgICAgIEZsb2F0UmVjdCByKDAsIDAsIHJvLT53aWR0
aCgpLCByby0+aGVpZ2h0KCkpOyAgCi0jZW5kaWYKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gcm8tPmNvbnRlbnRCb3goKTsKKyAgICAgICAgRmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3Qs
IEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgZGVzdFJl
Y3QpOworICAgICAgICByLmludGVyc2VjdChkZXN0UmVjdCk7CiAgICAgICAgIGlmIChtX2RpcnR5
UmVjdC5jb250YWlucyhyKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IGVjN2IzZmEuLjUzMmY3MTkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTExOSw0ICsxMTksMTYgQEAgSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gSW50
UmVjdChsLCB0LCByIC0gbCwgYiAtIHQpOwogfQogCitGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBG
bG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKK3sKKyAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWln
aHQoKSA9PSAwKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBmbG9hdCB3aWR0
aFNjYWxlID0gZGVzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCBo
ZWlnaHRTY2FsZSA9IGRlc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KGRlc3RSZWN0LngoKSArIChyLngoKSAtIHNyY1JlY3QueCgpKSAqIHdp
ZHRoU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC55KCkgKyAoci55KCkgLSBz
cmNSZWN0LnkoKSkgKiBoZWlnaHRTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgo
KSAqIHdpZHRoU2NhbGUsIHIuaGVpZ2h0KCkgKiBoZWlnaHRTY2FsZSk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDExZTM3OTEuLmE4N2M5NDkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIGlubGlu
ZSBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0
JiBiKQogICAgIHJldHVybiBjOwogfQogCisKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiB7CiAgICAgcmV0dXJuIGEubG9jYXRp
b24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7CkBAIC0xNzksNiAr
MTgwLDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFJlY3QmIGEsIGNvbnN0
IEZsb2F0UmVjdCYgYikKIAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOwogCisvLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0byBhbiBlcXVpdmFsZW50IHJlY3Qg
aW4gZGVzdFJlY3QuCitGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisKIH0KIAog
I2VuZGlmCg==
</data>
<flag name="review"
          id="12492"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>