<?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>51559</bug_id>
          
          <creation_ts>2010-12-23 13:21:48 -0800</creation_ts>
          <short_desc>copyTexSubImage2D shouldn&apos;t have undefined pixels</short_desc>
          <delta_ts>2011-01-07 10:55:37 -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>WebGL</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>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>326257</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-23 13:21:48 -0800</bug_when>
    <thetext>if the region is beyond the currently bound fbo&apos;s bounds, we need to either clean undefined pixels to 0 or make sure they stay unchanged.  Undefined leads to potential leaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330181</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 09:23:15 -0800</bug_when>
    <thetext>After discussing it on public_webgl email list, we are going to set the undefined pixels to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330252</commentid>
    <comment_count>2</comment_count>
      <attachid>78134</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 11:26:23 -0800</bug_when>
    <thetext>Created attachment 78134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330254</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 11:26:59 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=78134) [details]
&gt; Patch

Will commit the test changes to khronos once reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330266</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-06 11:53:49 -0800</bug_when>
    <thetext>Attachment 78134 did not build on chromium:
Build output: http://queues.webkit.org/results/7374010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330291</commentid>
    <comment_count>5</comment_count>
      <attachid>78134</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-06 12:11:35 -0800</bug_when>
    <thetext>Comment on attachment 78134
Patch

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

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:725
&gt; +        long clippedX, clippedY, clippedWidth, clippedHeight;
&gt; +        clip(x, width, getBoundFramebufferWidth(), &amp;clippedX, &amp;clippedWidth);
&gt; +        clip(y, height, getBoundFramebufferHeight(), &amp;clippedY, &amp;clippedHeight);
&gt; +        if (clippedX != x || clippedY != y || clippedWidth != width || clippedHeight != height) {
&gt; +            unsigned long format = tex-&gt;getInternalFormat(target, level);

Shouldn&apos;t this huge block be a new helper function?  It could (should!) even be just static to the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330311</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-06 12:30:25 -0800</bug_when>
    <thetext>Attachment 78134 did not build on chromium:
Build output: http://queues.webkit.org/results/7401013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330441</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-06 14:49:17 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 78134 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78134&amp;action=review
&gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:725
&gt; &gt; +        long clippedX, clippedY, clippedWidth, clippedHeight;
&gt; &gt; +        clip(x, width, getBoundFramebufferWidth(), &amp;clippedX, &amp;clippedWidth);
&gt; &gt; +        clip(y, height, getBoundFramebufferHeight(), &amp;clippedY, &amp;clippedHeight);
&gt; &gt; +        if (clippedX != x || clippedY != y || clippedWidth != width || clippedHeight != height) {
&gt; &gt; +            unsigned long format = tex-&gt;getInternalFormat(target, level);
&gt; 
&gt; Shouldn&apos;t this huge block be a new helper function?  It could (should!) even be just static to the file.

I think it&apos;s fine in its current form. It isn&apos;t duplicated code, and accesses members several times (m_context, getBoundFramebufferWidth/Height) making it inconvenient to write as anything but a method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330443</commentid>
    <comment_count>8</comment_count>
      <attachid>78166</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 14:50:53 -0800</bug_when>
    <thetext>Created attachment 78166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330449</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 14:53:23 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=78166) [details]
&gt; Patch

This patch fixes the build failure on chromium.  Also, I refactor the code a little bit, adding a new function clip2D and call it in both copyTexImage2D and copyTexSubImage2D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330460</commentid>
    <comment_count>10</comment_count>
      <attachid>78166</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-06 15:02:41 -0800</bug_when>
    <thetext>Comment on attachment 78166
Patch

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

This basically looks good. One issue needing a revision.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:752
&gt; +            m_context-&gt;texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, zero.get());

The unpack alignment needs to be set to 1 before this call and restored afterward. See the various WebGLRenderingContext::texSubImage2D variants in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330813</commentid>
    <comment_count>11</comment_count>
      <attachid>78243</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 09:36:49 -0800</bug_when>
    <thetext>Created attachment 78243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330829</commentid>
    <comment_count>12</comment_count>
      <attachid>78243</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-07 10:05:53 -0800</bug_when>
    <thetext>Comment on attachment 78243
Patch

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

Looks good - one minor issue with the new code which can be fixed upon landing.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:752
&gt; +            if (zero.get())

This can just be if (zero). These pointer types have an operator which converts to boolean type.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:755
&gt; +            if (zero.get())

Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330843</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 10:20:22 -0800</bug_when>
    <thetext>Committed r75252: &lt;http://trac.webkit.org/changeset/75252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330857</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-07 10:37:53 -0800</bug_when>
    <thetext>This may have caused a build fail on the canary:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux/builds/5595/steps/compile/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330861</commentid>
    <comment_count>15</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 10:43:58 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; This may have caused a build fail on the canary:
&gt; 
&gt; http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux/builds/5595/steps/compile/logs/stdio

I am on it.  Just a sec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330867</commentid>
    <comment_count>16</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-07 10:53:53 -0800</bug_when>
    <thetext>This should fix it: r75254: &lt;http://trac.webkit.org/changeset/75254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330869</commentid>
    <comment_count>17</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-07 10:55:37 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; This should fix it: r75254: &lt;http://trac.webkit.org/changeset/75254&gt;

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78134</attachid>
            <date>2011-01-06 11:26:23 -0800</date>
            <delta_ts>2011-01-06 14:50:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51559-20110106112622.patch</filename>
            <type>text/plain</type>
            <size>15669</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTEtMDEtMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBjb3B5VGV4
U3ViSW1hZ2UyRCBzaG91bGRuJ3QgaGF2ZSB1bmRlZmluZWQgcGl4ZWxzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTU1OQorCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQpOiBJbml0aWFsaXplIHVuZGVm
aW5lZCBwaXhlbHMgdG8gMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOiBTZXBlcmF0ZSB0aGUgdmFsaWRhdGlvbiBvZiBsZXZl
bCBmcm9tIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMpOiBEaXR0by4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0
dXJlOjpnZXRUeXBlKTogRXhwb3NlIHRoZSB0eXBlIG9mIGEgdGV4dHVyZS4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKwogMjAxMS0wMS0wNiAgWW9uZyBMaSAgPHlvbGlA
cmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNzUx
NjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5NiwxMSArNjk2LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4U3ViSW0KIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCh0YXJnZXQsIGxldmVsKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZyh0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCF2YWxpZGF0ZVNpemUoeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSh3aWR0
aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0
ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdl
dEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0
aW9uVmFsaWQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNzA5LDcgKzcxNSw0MCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y29weVRleFN1YkltCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChpc1Jl
c291cmNlU2FmZSgpKQorICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGVs
c2UgeworICAgICAgICBsb25nIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlw
cGVkSGVpZ2h0OworICAgICAgICBjbGlwKHgsIHdpZHRoLCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFdpZHRoKTsKKyAgICAgICAgY2xpcCh5LCBoZWlnaHQs
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRZLCAmY2xpcHBlZEhlaWdodCk7
CisgICAgICAgIGlmIChjbGlwcGVkWCAhPSB4IHx8IGNsaXBwZWRZICE9IHkgfHwgY2xpcHBlZFdp
ZHRoICE9IHdpZHRoIHx8IGNsaXBwZWRIZWlnaHQgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0
LCBsZXZlbCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbXBvbmVudHNQZXJQaXhlbCA9
IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyQ29tcG9uZW50ID0gMDsKKyAg
ICAgICAgICAgIGJvb2wgdmFsaWQgPSBtX2NvbnRleHQtPmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFy
YW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBv
bmVudCk7CisgICAgICAgICAgICBpZiAoIXZhbGlkKSB7CisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgICAgICAgICBpZiAod2lkdGgg
JiYgaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplID0gY29tcG9u
ZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAg
ICAgICAgICAgICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltzaXplXSk7
CisgICAgICAgICAgICAgICAgaWYgKCF6ZXJvLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkp
OworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQgKyBjbGlwcGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAtIHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xp
cHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzc2OSw2ICsz
ODA4LDM2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY0xldmVsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsKQoreworICAgIGlmIChs
ZXZlbCA8IDApIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPiBtX21heFRleHR1cmVMZXZlbCkgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmIChsZXZlbCA+IG1fbWF4Q3ViZU1hcFRleHR1cmVM
ZXZlbCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIFRoaXMgZnVuY3Rpb24gb25s
eSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJldHVybiB0cnVlIGFuZCBkb24ndAor
ICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJnZXQgaXMgaWxsZWdhbC4KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLApA
QCAtMzc3NywxNyArMzg0NiwxNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGCiAgICAgLy8gV2UgYWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQg
YW5kIHR5cGUgY29tYmluYXRpb24uCiAgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRz
IHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9kdWNlCiAgICAgLy8gdGVtcG9yYXJ5IGRh
dGEgYmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwodGFyZ2V0LCBsZXZlbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBsZXZlbCA8IDApIHsKKyAgICBpZiAod2lk
dGggPCAwIHx8IGhlaWdodCA8IDApIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHRhcmdldCkgewogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmICh3aWR0aCA+IG1fbWF4VGV4dHVyZVNp
emUgfHwgaGVpZ2h0ID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCBsZXZlbCA+IG1fbWF4VGV4dHVyZUxl
dmVsKSB7CisgICAgICAgIGlmICh3aWR0aCA+IG1fbWF4VGV4dHVyZVNpemUgfHwgaGVpZ2h0ID4g
bV9tYXhUZXh0dXJlU2l6ZSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM3OTgsNyArMzg2Nyw3IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdo
dCB8fCB3aWR0aCA+IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplIHx8IGxldmVsID4gbV9tYXhDdWJl
TWFwVGV4dHVyZUxldmVsKSB7CisgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQgfHwgd2lkdGgg
PiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNzUxNjApCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjQs
NiArNTI0LDEwIEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICBib29sIHZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUodW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlw
ZSk7CiAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1
bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgorICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgorICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwpOworCiAgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7
Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJu
cyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgogICAgIGJvb2wgdmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHJldmlzaW9uIDc1MTYwKQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiAr
MTc3LDE0IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEYKICAgICBy
ZXR1cm4gaW5mby0+aW50ZXJuYWxGb3JtYXQ7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgV2ViR0xUZXh0
dXJlOjpnZXRUeXBlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Cit7Cisg
ICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOwor
ICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluZm8tPnR5cGU7
Cit9CisKIGludCBXZWJHTFRleHR1cmU6OmdldFdpZHRoKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2ZWxJ
bmZvKHRhcmdldCwgbGV2ZWwpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCShy
ZXZpc2lvbiA3NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXBMZXZlbEluZm8oKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxGb3JtYXQo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9u
ZyBnZXRUeXBlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OwogICAgIGlu
dCBnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKICAgICBp
bnQgZ2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OwogCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3NTE3MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAxLTA2ICBaaGVueWFvIE1vICA8em1vQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgY29weVRleFN1YkltYWdlMkQgc2hvdWxkbid0IGhhdmUgdW5kZWZpbmVkIHBpeGVscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1NTkKKworICAg
ICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWw6IEFk
ZCB0ZXN0IGNhc2VzIGZvciBjb3B5VGV4U3ViSW1hZ2UyRC4KKwogMjAxMS0wMS0wNiAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlh
bGl6ZWQtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzUx
NjApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3Qt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwyOSBAQCBQQVNTIGdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCCiBQQVNTIEFsbCBkYXRhIGluaXRpYWxpemVk
CiBQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIAorUmVhZGlu
ZyBhbiB1bmluaXRpYWxpemVkIHBvcnRpb24gb2YgYSB0ZXh0dXJlIChjb3B5VGV4U3ViSW1hZ2Uy
RCkgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVU
RQorUEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCisKK1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9m
IGEgdGV4dHVyZSAoY29weVRleFN1YkltYWdlMkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91
bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNT
IEFsbCBkYXRhIGluaXRpYWxpemVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKKworUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHBvcnRpb24gb2YgYSB0ZXh0
dXJlIChjb3B5VGV4U3ViSW1hZ2UyRCBmcm9tIFdlYkdMIGludGVybmFsIGZibykgc2hvdWxkIHN1
Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAor
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJ
KHJldmlzaW9uIDc1MTYwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsODQgQEAgZ2wu
ZGVsZXRlVGV4dHVyZSh0ZXgpOwogZ2wuZmluaXNoKCk7CiBnbEVycm9yU2hvdWxkQmUoZ2wsIGds
Lk5PX0VSUk9SKTsKIAorZGVidWcoIiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXpl
ZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleFN1YkltYWdlMkQpIHNob3VsZCBzdWNjZWVk
IHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVy
ZSgpOworZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK3ZhciBkYXRhID0gbmV3
IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgd2lk
dGggKiBoZWlnaHQgKiA0OyArK2kpCisgICAgZGF0YVtpXSA9IDI1NTsKK2dsLnRleEltYWdlMkQo
Z2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSwgZGF0YSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsK
K3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGds
LkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
Z2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lkdGgg
PSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVO
REVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJF
TkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJDb2xv
cigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7Citn
bEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK2dsLmNvcHlUZXhTdWJJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworY2hlY2tOb25aZXJv
UGl4ZWxzKHRleCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgZmJvV2lkdGgsIGZib0hlaWdodCwgMjU1
LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7CitnbEVy
cm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworZGVidWcoIiIpOworZGVidWcoIlJlYWRp
bmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleFN1YkltYWdl
MkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBz
ZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKK2dsLmJpbmRUZXh0
dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7Cit2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRo
ICogaGVpZ2h0ICogNCk7Citmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoICogaGVpZ2h0ICogNDsg
KytpKQorICAgIGRhdGFbaV0gPSAyNTU7CitnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRh
dGEpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7Cit2YXIgZmJvID0gZ2wuY3Jl
YXRlRnJhbWVidWZmZXIoKTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJv
KTsKK3ZhciByYm8gPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsKK2dsLmJpbmRSZW5kZXJidWZm
ZXIoZ2wuUkVOREVSQlVGRkVSLCByYm8pOwordmFyIGZib1dpZHRoID0gMTY7Cit2YXIgZmJvSGVp
Z2h0ID0gMTY7CitnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkdC
QTQsIGZib1dpZHRoLCBmYm9IZWlnaHQpOworZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wu
RlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIHJibyk7
CitzaG91bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAi
Z2wuRlJBTUVCVUZGRVJfQ09NUExFVEUiKTsKK2dsLmNsZWFyQ29sb3IoMS4wLCAwLjAsIDAuMCwg
MS4wKTsKK2dsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworZ2xFcnJvclNob3VsZEJlKGds
LCBnbC5OT19FUlJPUik7Cit2YXIgeCA9IC04OwordmFyIHkgPSAtODsKK2dsLmNvcHlUZXhTdWJJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworY2hl
Y2tOb25aZXJvUGl4ZWxzKHRleCwgd2lkdGgsIGhlaWdodCwgLXgsIC15LCBmYm9XaWR0aCwgZmJv
SGVpZ2h0LCAyNTUsIDAsIDAsIDI1NSk7CitnbC5kZWxldGVUZXh0dXJlKHRleCk7CitnbC5maW5p
c2goKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworCitkZWJ1ZygiIik7Citk
ZWJ1ZygiUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHBvcnRpb24gb2YgYSB0ZXh0dXJlIChjb3B5
VGV4U3ViSW1hZ2UyRCBmcm9tIFdlYkdMIGludGVybmFsIGZibykgc2hvdWxkIHN1Y2NlZWQgd2l0
aCBhbGwgYnl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7
CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwordmFyIGRhdGEgPSBuZXcgVWlu
dDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aCAq
IGhlaWdodCAqIDQ7ICsraSkKKyAgICBkYXRhW2ldID0gMjU1OworZ2wudGV4SW1hZ2UyRChnbC5U
RVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBkYXRhKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworZ2wu
YmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKK2dsLmNsZWFyQ29sb3IoMC4w
LCAxLjAsIDAuMCwgMC4wKTsKK2dsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworZ2xFcnJv
clNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CitnbC5jb3B5VGV4U3ViSW1hZ2UyRChnbC5URVhU
VVJFXzJELCAwLCAwLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKK2NoZWNrTm9uWmVyb1BpeGVs
cyh0ZXgsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCwg
MCwgMjU1LCAwLCAwKTsKK2dsLmRlbGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOworZ2xF
cnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CisKIC8vVE9ETzogdW5pbml0aWFsaXplZCB2
ZXJ0ZXggYXJyYXkgYnVmZmVyCiAvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdmVydGV4IGVsZW1lbnRz
IGJ1ZmZlcgogLy9UT0RPOiB1bmluaXRpYWxpemVkIGZyYW1lYnVmZmVyPyAoaW1wbGVtZW50YXRp
b25zIHdvdWxkIG5lZWQgdG8gZG8gYSBHTCBjbGVhciBhdCBmaXJzdCBiaW5kaW5nPykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78166</attachid>
            <date>2011-01-06 14:50:53 -0800</date>
            <delta_ts>2011-01-07 09:36:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51559-20110106145052.patch</filename>
            <type>text/plain</type>
            <size>17891</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTEtMDEtMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBjb3B5VGV4
U3ViSW1hZ2UyRCBzaG91bGRuJ3QgaGF2ZSB1bmRlZmluZWQgcGl4ZWxzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTU1OQorCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQpOiBSZWZhY3RvciB0byBzaGFyZSBz
b21lIGNvZGUgd2l0aCBjb3B5VGV4U3ViSW1hZ2UyRCB0aHJvdWdoIGhlbHBlciBmdW5jdGlvbiBj
bGlwMkQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhT
dWJJbWFnZTJEKTogSW5pdGlhbGl6ZSB1bmRlZmluZWQgcGl4ZWxzIHRvIDAuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKTogU2Vw
ZXJhdGUgdGhlIHZhbGlkYXRpb24gb2YgbGV2ZWwgZnJvbSB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNQYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Z2V0VHlwZSk6IEV4cG9zZSB0aGUgdHlw
ZSBvZiBhIHRleHR1cmUuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisK
IDIwMTEtMDEtMDYgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTcyLDcgKzczLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIG9iamVj
dCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwogICAgIH0KIAotICAgIHZvaWQgY2xpcChsb25nIHN0
YXJ0LCBsb25nIHJhbmdlLCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxv
bmcqIGNsaXBwZWRSYW5nZSkKKyAgICB2b2lkIGNsaXAxRChsb25nIHN0YXJ0LCBsb25nIHJhbmdl
LCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxvbmcqIGNsaXBwZWRSYW5n
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsK
ICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewpAQCAtODYsNiArODcsMTcgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwogICAgIH0KIAorICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0IHN0YXkgdGhlIHNhbWUuCisgICAgYm9vbCBjbGlwMkQobG9uZyB4LCBsb25nIHksIGxvbmcg
d2lkdGgsIGxvbmcgaGVpZ2h0LAorICAgICAgICAgICAgICAgIGxvbmcgc291cmNlV2lkdGgsIGxv
bmcgc291cmNlSGVpZ2h0LAorICAgICAgICAgICAgICAgIGxvbmcqIGNsaXBwZWRYLCBsb25nKiBj
bGlwcGVkWSwgbG9uZyogY2xpcHBlZFdpZHRoLCBsb25nKmNsaXBwZWRIZWlnaHQpCisgICAgewor
ICAgICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYmIGNs
aXBwZWRIZWlnaHQpOworICAgICAgICBjbGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRoLCBjbGlw
cGVkWCwgY2xpcHBlZFdpZHRoKTsKKyAgICAgICAgY2xpcDFEKHksIGhlaWdodCwgc291cmNlSGVp
Z2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhlaWdodCk7CisgICAgICAgIHJldHVybiAoKmNsaXBwZWRY
ICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0aCB8fCAqY2xp
cHBlZEhlaWdodCAhPSBoZWlnaHQpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgYW5vbnltb3Vz
CiAKIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlciB7CkBAIC02NzUsOSArNjg3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOwogICAgIGVsc2UgewogICAgICAgICBsb25nIGNsaXBwZWRYLCBjbGlw
cGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBjbGlwKHgsIHdpZHRo
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFdpZHRoKTsK
LSAgICAgICAgY2xpcCh5LCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNs
aXBwZWRZLCAmY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGlmIChjbGlwcGVkWCAhPSB4IHx8IGNs
aXBwZWRZICE9IHkgfHwgY2xpcHBlZFdpZHRoICE9IHN0YXRpY19jYXN0PGxvbmc+KHdpZHRoKSB8
fCBjbGlwcGVkSGVpZ2h0ICE9IHN0YXRpY19jYXN0PGxvbmc+KGhlaWdodCkpIHsKKyAgICAgICAg
aWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgo
KSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNs
aXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
OwogICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKQEAgLTY5NiwxMSArNzA2LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5
VGV4U3ViSW0KIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJn
ZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVpZ2h0
KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0
YXJnZXQsIGxldmVsKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
dGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckNvbG9yRm9ybWF0KCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNzA5LDcgKzcyNSwzOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1
YkltCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChpc1Jlc291cmNlU2Fm
ZSgpKQorICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UgeworICAg
ICAgICBsb25nIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
OworICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVi
dWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNs
aXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZSA9IHRleC0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29tcG9uZW50c1BlclBpeGVsID0g
MDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJDb21wb25lbnQgPSAwOworICAg
ICAgICAgICAgYm9vbCB2YWxpZCA9IG1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJh
bWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9u
ZW50KTsKKyAgICAgICAgICAgIGlmICghdmFsaWQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
T3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICAgICAgICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUgPSBjb21wb25l
bnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAqIHdpZHRoICogaGVpZ2h0OworICAgICAg
ICAgICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXplcm8uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7
CisgICAgICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkg
eworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlw
cGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0K
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zNzY5LDYgKzM4
MTYsMzYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIHJl
dHVybiB0cnVlOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhG
dW5jTGV2ZWwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwpCit7CisgICAgaWYgKGxl
dmVsIDwgMCkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQ6CisgICAgICAgIGlmIChsZXZlbCA+IG1fbWF4VGV4dHVyZUxldmVsKSB7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGxldmVsID4gbV9tYXhDdWJlTWFwVGV4dHVyZUxl
dmVsKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5
IGNoZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJuIHRydWUgYW5kIGRvbid0Cisg
ICAgLy8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBpcyBpbGxlZ2FsLgorICAgIHJl
dHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIsCkBA
IC0zNzc3LDE3ICszODU0LDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEYKICAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBh
bmQgdHlwZSBjb21iaW5hdGlvbi4KICAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMg
dGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKICAgICAvLyB0ZW1wb3JhcnkgZGF0
YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpKQorICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNMZXZlbCh0YXJnZXQsIGxldmVsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IGxldmVsIDwgMCkgeworICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIHN3aXRjaCAodGFyZ2V0KSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbV9tYXhUZXh0dXJlU2l6
ZSB8fCBoZWlnaHQgPiBtX21heFRleHR1cmVTaXplIHx8IGxldmVsID4gbV9tYXhUZXh0dXJlTGV2
ZWwpIHsKKyAgICAgICAgaWYgKHdpZHRoID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCBoZWlnaHQgPiBt
X21heFRleHR1cmVTaXplKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtMzc5OCw3ICszODc1LDcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0
IHx8IHdpZHRoID4gbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgfHwgbGV2ZWwgPiBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCB8fCB3aWR0aCA+
IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA3NTE2MCkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNCw2
ICs1MjQsMTAgQEAgcHVibGljOgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJu
cyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgogICAgIGJvb2wgdmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZSh1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBl
KTsKIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVu
Y3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFu
ZCByZXR1cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRl
eEZ1bmNMZXZlbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCk7CisKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtj
b3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5z
IGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCiAgICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLApJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkocmV2aXNpb24gNzUxNjApCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsx
NzcsMTQgQEAgdW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6OmdldEludGVybmFsRgogICAgIHJl
dHVybiBpbmZvLT5pbnRlcm5hbEZvcm1hdDsKIH0KIAordW5zaWduZWQgbG9uZyBXZWJHTFRleHR1
cmU6OmdldFR5cGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCk7Cisg
ICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5mby0+dHlwZTsK
K30KKwogaW50IFdlYkdMVGV4dHVyZTo6Z2V0V2lkdGgodW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
dCBsZXZlbCkgY29uc3QKIHsKICAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbElu
Zm8odGFyZ2V0LCBsZXZlbCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJl
dmlzaW9uIDc1MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcExldmVsSW5mbygpOwogCiAgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbEZvcm1hdCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25n
IGdldFR5cGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CiAgICAgaW50
IGdldFdpZHRoKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OwogICAgIGlu
dCBnZXRIZWlnaHQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CiAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDc1MTcyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEtMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBjb3B5VGV4U3ViSW1hZ2UyRCBzaG91bGRuJ3QgaGF2ZSB1bmRlZmluZWQgcGl4ZWxzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTU1OQorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbDogQWRk
IHRlc3QgY2FzZXMgZm9yIGNvcHlUZXhTdWJJbWFnZTJELgorCiAyMDExLTAxLTA2ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFs
aXplZC10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NTE2
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDI5IEBAIFBBU1MgZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUIKIFBBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQK
IFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAogCitSZWFkaW5n
IGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhTdWJJbWFnZTJE
KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRF
CitQQVNTIEFsbCBkYXRhIGluaXRpYWxpemVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKKworUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHBvcnRpb24gb2Yg
YSB0ZXh0dXJlIChjb3B5VGV4U3ViSW1hZ2UyRCB3aXRoIG5lZ2F0aXZlIHggYW5kIHkpIHNob3Vs
ZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLgorUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1Mg
QWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IAorCitSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1
cmUgKGNvcHlUZXhTdWJJbWFnZTJEIGZyb20gV2ViR0wgaW50ZXJuYWwgZmJvKSBzaG91bGQgc3Vj
Y2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIEFsbCBkYXRhIGluaXRpYWxpemVkCitQ
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKKwogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAko
cmV2aXNpb24gNzUxNjApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRp
YWxpemVkLXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDYgKzE1Miw4NCBAQCBnbC5k
ZWxldGVUZXh0dXJlKHRleCk7CiBnbC5maW5pc2goKTsKIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wu
Tk9fRVJST1IpOwogCitkZWJ1ZygiIik7CitkZWJ1ZygiUmVhZGluZyBhbiB1bmluaXRpYWxpemVk
IHBvcnRpb24gb2YgYSB0ZXh0dXJlIChjb3B5VGV4U3ViSW1hZ2UyRCkgc2hvdWxkIHN1Y2NlZWQg
d2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJl
KCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwordmFyIGRhdGEgPSBuZXcg
VWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0
aCAqIGhlaWdodCAqIDQ7ICsraSkKKyAgICBkYXRhW2ldID0gMjU1OworZ2wudGV4SW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBkYXRhKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOwor
dmFyIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CitnbC5iaW5kRnJhbWVidWZmZXIoZ2wu
RlJBTUVCVUZGRVIsIGZibyk7Cit2YXIgcmJvID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7Citn
bC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgcmJvKTsKK3ZhciBmYm9XaWR0aCA9
IDE2OwordmFyIGZib0hlaWdodCA9IDE2OworZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5E
RVJCVUZGRVIsIGdsLlJHQkE0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKK2dsLmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVO
REVSQlVGRkVSLCByYm8pOworc2hvdWxkQmUoImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIiwgImdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFIik7CitnbC5jbGVhckNvbG9y
KDEuMCwgMC4wLCAwLjAsIDEuMCk7CitnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKK2ds
RXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworZ2wuY29weVRleFN1YkltYWdlMkQoZ2wu
VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CitjaGVja05vblplcm9Q
aXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCBmYm9XaWR0aCwgZmJvSGVpZ2h0LCAyNTUs
IDAsIDAsIDI1NSk7CitnbC5kZWxldGVUZXh0dXJlKHRleCk7CitnbC5maW5pc2goKTsKK2dsRXJy
b3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiUmVhZGlu
ZyBhbiB1bmluaXRpYWxpemVkIHBvcnRpb24gb2YgYSB0ZXh0dXJlIChjb3B5VGV4U3ViSW1hZ2Uy
RCB3aXRoIG5lZ2F0aXZlIHggYW5kIHkpIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNl
dCB0byAwLiIpOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworZ2wuYmluZFRleHR1
cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK3ZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgg
KiBoZWlnaHQgKiA0KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQgKiA0OyAr
K2kpCisgICAgZGF0YVtpXSA9IDI1NTsKK2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgZGF0
YSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK3ZhciBmYm8gPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYm8p
OwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworZ2wuYmluZFJlbmRlcmJ1ZmZl
cihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lkdGggPSAxNjsKK3ZhciBmYm9IZWln
aHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5SR0JB
NCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5G
UkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZFUiwgcmJvKTsK
K3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIsICJn
bC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJDb2xvcigxLjAsIDAuMCwgMC4wLCAx
LjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CitnbEVycm9yU2hvdWxkQmUoZ2ws
IGdsLk5PX0VSUk9SKTsKK3ZhciB4ID0gLTg7Cit2YXIgeSA9IC04OworZ2wuY29weVRleFN1Yklt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CitjaGVj
a05vblplcm9QaXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAteCwgLXksIGZib1dpZHRoLCBmYm9I
ZWlnaHQsIDI1NSwgMCwgMCwgMjU1KTsKK2dsLmRlbGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlz
aCgpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CisKK2RlYnVnKCIiKTsKK2Rl
YnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlU
ZXhTdWJJbWFnZTJEIGZyb20gV2ViR0wgaW50ZXJuYWwgZmJvKSBzaG91bGQgc3VjY2VlZCB3aXRo
IGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsK
K2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7Cit2YXIgZGF0YSA9IG5ldyBVaW50
OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7Citmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoICog
aGVpZ2h0ICogNDsgKytpKQorICAgIGRhdGFbaV0gPSAyNTU7CitnbC50ZXhJbWFnZTJEKGdsLlRF
WFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIGRhdGEpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CitnbC5i
aW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOworZ2wuY2xlYXJDb2xvcigwLjAs
IDEuMCwgMC4wLCAwLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CitnbEVycm9y
U2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK2dsLmNvcHlUZXhTdWJJbWFnZTJEKGdsLlRFWFRV
UkVfMkQsIDAsIDAsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworY2hlY2tOb25aZXJvUGl4ZWxz
KHRleCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0LCAw
LCAyNTUsIDAsIDApOworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7CitnbEVy
cm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKwogLy9UT0RPOiB1bmluaXRpYWxpemVkIHZl
cnRleCBhcnJheSBidWZmZXIKIC8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggZWxlbWVudHMg
YnVmZmVyCiAvL1RPRE86IHVuaW5pdGlhbGl6ZWQgZnJhbWVidWZmZXI/IChpbXBsZW1lbnRhdGlv
bnMgd291bGQgbmVlZCB0byBkbyBhIEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78243</attachid>
            <date>2011-01-07 09:36:49 -0800</date>
            <delta_ts>2011-01-07 10:05:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51559-20110107093648.patch</filename>
            <type>text/plain</type>
            <size>18127</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTEtMDEtMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBjb3B5VGV4
U3ViSW1hZ2UyRCBzaG91bGRuJ3QgaGF2ZSB1bmRlZmluZWQgcGl4ZWxzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTU1OQorCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQpOiBSZWZhY3RvciB0byBzaGFyZSBz
b21lIGNvZGUgd2l0aCBjb3B5VGV4U3ViSW1hZ2UyRCB0aHJvdWdoIGhlbHBlciBmdW5jdGlvbiBj
bGlwMkQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhT
dWJJbWFnZTJEKTogSW5pdGlhbGl6ZSB1bmRlZmluZWQgcGl4ZWxzIHRvIDAuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKTogU2Vw
ZXJhdGUgdGhlIHZhbGlkYXRpb24gb2YgbGV2ZWwgZnJvbSB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNQYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Z2V0VHlwZSk6IEV4cG9zZSB0aGUgdHlw
ZSBvZiBhIHRleHR1cmUuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisK
IDIwMTEtMDEtMDYgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTcyLDcgKzczLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIG9iamVj
dCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwogICAgIH0KIAotICAgIHZvaWQgY2xpcChsb25nIHN0
YXJ0LCBsb25nIHJhbmdlLCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxv
bmcqIGNsaXBwZWRSYW5nZSkKKyAgICB2b2lkIGNsaXAxRChsb25nIHN0YXJ0LCBsb25nIHJhbmdl
LCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxvbmcqIGNsaXBwZWRSYW5n
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsK
ICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewpAQCAtODYsNiArODcsMTcgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwogICAgIH0KIAorICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0IHN0YXkgdGhlIHNhbWUuCisgICAgYm9vbCBjbGlwMkQobG9uZyB4LCBsb25nIHksIGxvbmcg
d2lkdGgsIGxvbmcgaGVpZ2h0LAorICAgICAgICAgICAgICAgIGxvbmcgc291cmNlV2lkdGgsIGxv
bmcgc291cmNlSGVpZ2h0LAorICAgICAgICAgICAgICAgIGxvbmcqIGNsaXBwZWRYLCBsb25nKiBj
bGlwcGVkWSwgbG9uZyogY2xpcHBlZFdpZHRoLCBsb25nKmNsaXBwZWRIZWlnaHQpCisgICAgewor
ICAgICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYmIGNs
aXBwZWRIZWlnaHQpOworICAgICAgICBjbGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRoLCBjbGlw
cGVkWCwgY2xpcHBlZFdpZHRoKTsKKyAgICAgICAgY2xpcDFEKHksIGhlaWdodCwgc291cmNlSGVp
Z2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhlaWdodCk7CisgICAgICAgIHJldHVybiAoKmNsaXBwZWRY
ICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0aCB8fCAqY2xp
cHBlZEhlaWdodCAhPSBoZWlnaHQpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgYW5vbnltb3Vz
CiAKIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlciB7CkBAIC02NzUsOSArNjg3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOwogICAgIGVsc2UgewogICAgICAgICBsb25nIGNsaXBwZWRYLCBjbGlw
cGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBjbGlwKHgsIHdpZHRo
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFdpZHRoKTsK
LSAgICAgICAgY2xpcCh5LCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNs
aXBwZWRZLCAmY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGlmIChjbGlwcGVkWCAhPSB4IHx8IGNs
aXBwZWRZICE9IHkgfHwgY2xpcHBlZFdpZHRoICE9IHN0YXRpY19jYXN0PGxvbmc+KHdpZHRoKSB8
fCBjbGlwcGVkSGVpZ2h0ICE9IHN0YXRpY19jYXN0PGxvbmc+KGhlaWdodCkpIHsKKyAgICAgICAg
aWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgo
KSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNs
aXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
OwogICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKQEAgLTY5NiwxMSArNzA2LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5
VGV4U3ViSW0KIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0
dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJn
ZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVpZ2h0
KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0
YXJnZXQsIGxldmVsKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
dGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckNvbG9yRm9ybWF0KCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNzA5LDcgKzcyNSw0MiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1
YkltCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChpc1Jlc291cmNlU2Fm
ZSgpKQorICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UgeworICAg
ICAgICBsb25nIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
OworICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVi
dWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNs
aXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZSA9IHRleC0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29tcG9uZW50c1BlclBpeGVsID0g
MDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJDb21wb25lbnQgPSAwOworICAg
ICAgICAgICAgYm9vbCB2YWxpZCA9IG1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJh
bWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9u
ZW50KTsKKyAgICAgICAgICAgIGlmICghdmFsaWQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
T3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICAgICAgICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUgPSBjb21wb25l
bnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAqIHdpZHRoICogaGVpZ2h0OworICAgICAg
ICAgICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXplcm8uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHplcm8uZ2V0KCkpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKKyAg
ICAgICAgICAgIGlmICh6ZXJvLmdldCgpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkg
LSB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBl
ZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CisgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTM3
NjksNiArMzgyMCwzNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhG
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCkKK3sKKyAg
ICBpZiAobGV2ZWwgPCAwKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKGxldmVsID4gbV9tYXhUZXh0dXJlTGV2ZWwpIHsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAobGV2ZWwgPiBtX21heEN1YmVNYXBU
ZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQg
ZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJv
cmRlciwKQEAgLTM3NzcsMTcgKzM4NTgsMTcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RgogICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUg
Zm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgogICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5
IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQogICAgIC8vIHRlbXBv
cmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwu
Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkpCisg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkgfHwgIXZh
bGlkYXRlVGV4RnVuY0xldmVsKHRhcmdldCwgbGV2ZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgbGV2ZWwgPCAwKSB7CisgICAg
aWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAod2lkdGggPiBtX21heFRl
eHR1cmVTaXplIHx8IGhlaWdodCA+IG1fbWF4VGV4dHVyZVNpemUgfHwgbGV2ZWwgPiBtX21heFRl
eHR1cmVMZXZlbCkgeworICAgICAgICBpZiAod2lkdGggPiBtX21heFRleHR1cmVTaXplIHx8IGhl
aWdodCA+IG1fbWF4VGV4dHVyZVNpemUpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zNzk4LDcgKzM4NzksNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICh3aWR0aCAh
PSBoZWlnaHQgfHwgd2lkdGggPiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSB8fCBsZXZlbCA+IG1f
bWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0IHx8
IHdpZHRoID4gbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpIHsKICAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDc1MTYwKQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTI0LDYgKzUyNCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFu
ZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCiAgICAgYm9vbCB2YWxp
ZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBs
b25nIHR5cGUpOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVs
IGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wg
ZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMgaW52YWxpZC4KKyAgICBib29sIHZh
bGlkYXRlVGV4RnVuY0xldmVsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsKTsKKwog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5j
dGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5k
IHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICBib29sIHZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsCklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA3NTE2MCkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc3LDYgKzE3NywxNCBAQCB1bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxG
CiAgICAgcmV0dXJuIGluZm8tPmludGVybmFsRm9ybWF0OwogfQogCit1bnNpZ25lZCBsb25nIFdl
YkdMVGV4dHVyZTo6Z2V0VHlwZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25z
dAoreworICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdldExldmVsSW5mbyh0YXJnZXQsIGxl
dmVsKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpbmZv
LT50eXBlOworfQorCiBpbnQgV2ViR0xUZXh0dXJlOjpnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgaW50IGxldmVsKSBjb25zdAogewogICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuaAkocmV2aXNpb24gNzUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdl
bmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFs
Rm9ybWF0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OworICAgIHVuc2ln
bmVkIGxvbmcgZ2V0VHlwZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsK
ICAgICBpbnQgZ2V0V2lkdGgodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7
CiAgICAgaW50IGdldEhlaWdodCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25z
dDsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzUxNzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMS0wNiAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGNvcHlUZXhTdWJJbWFnZTJEIHNob3VsZG4ndCBoYXZlIHVuZGVmaW5lZCBwaXhl
bHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTU5
CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC5o
dG1sOiBBZGQgdGVzdCBjYXNlcyBmb3IgY29weVRleFN1YkltYWdlMkQuCisKIDIwMTEtMDEtMDYg
IEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91
bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDc1MTYwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXpl
ZC10ZXN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMjkgQEAgUEFT
UyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQgogUEFTUyBBbGwgZGF0YSBpbml0
aWFsaXplZAogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiAK
K1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleFN1
YkltYWdlMkQpIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLgorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRF
CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJf
Q09NUExFVEUKK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorCitSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9y
dGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhTdWJJbWFnZTJEIHdpdGggbmVnYXRpdmUgeCBhbmQg
eSkgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVU
RQorUEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCisKK1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9m
IGEgdGV4dHVyZSAoY29weVRleFN1YkltYWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNo
b3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLgorUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgQWxsIGRhdGEgaW5pdGlh
bGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVz
dC5odG1sCShyZXZpc2lvbiA3NTE2MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDg0
IEBAIGdsLmRlbGV0ZVRleHR1cmUodGV4KTsKIGdsLmZpbmlzaCgpOwogZ2xFcnJvclNob3VsZEJl
KGdsLCBnbC5OT19FUlJPUik7CiAKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5p
dGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhTdWJJbWFnZTJEKSBzaG91bGQg
c3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IGdsLmNyZWF0
ZVRleHR1cmUoKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7Cit2YXIgZGF0
YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7Citmb3IgKHZhciBpID0gMDsg
aSA8IHdpZHRoICogaGVpZ2h0ICogNDsgKytpKQorICAgIGRhdGFbaV0gPSAyNTU7CitnbC50ZXhJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19F
UlJPUik7Cit2YXIgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKK2dsLmJpbmRGcmFtZWJ1
ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKK3ZhciByYm8gPSBnbC5jcmVhdGVSZW5kZXJidWZm
ZXIoKTsKK2dsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCByYm8pOwordmFyIGZi
b1dpZHRoID0gMTY7Cit2YXIgZmJvSGVpZ2h0ID0gMTY7CitnbC5yZW5kZXJidWZmZXJTdG9yYWdl
KGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkdCQTQsIGZib1dpZHRoLCBmYm9IZWlnaHQpOworZ2wuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQw
LCBnbC5SRU5ERVJCVUZGRVIsIHJibyk7CitzaG91bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUiKTsKK2dsLmNs
ZWFyQ29sb3IoMS4wLCAwLjAsIDAuMCwgMS4wKTsKK2dsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9C
SVQpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CitnbC5jb3B5VGV4U3ViSW1h
Z2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKK2NoZWNr
Tm9uWmVyb1BpeGVscyh0ZXgsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIGZib1dpZHRoLCBmYm9IZWln
aHQsIDI1NSwgMCwgMCwgMjU1KTsKK2dsLmRlbGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgp
OworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CisKK2RlYnVnKCIiKTsKK2RlYnVn
KCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhT
dWJJbWFnZTJEIHdpdGggbmVnYXRpdmUgeCBhbmQgeSkgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwg
Ynl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CitnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwordmFyIGRhdGEgPSBuZXcgVWludDhBcnJh
eSh3aWR0aCAqIGhlaWdodCAqIDQpOworZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aCAqIGhlaWdo
dCAqIDQ7ICsraSkKKyAgICBkYXRhW2ldID0gMjU1OworZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9C
WVRFLCBkYXRhKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOwordmFyIGZibyA9
IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CitnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZG
RVIsIGZibyk7Cit2YXIgcmJvID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7CitnbC5iaW5kUmVu
ZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgcmJvKTsKK3ZhciBmYm9XaWR0aCA9IDE2OwordmFy
IGZib0hlaWdodCA9IDE2OworZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIs
IGdsLlJHQkE0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKK2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVOREVSQlVGRkVS
LCByYm8pOworc2hvdWxkQmUoImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZG
RVIpIiwgImdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFIik7CitnbC5jbGVhckNvbG9yKDEuMCwgMC4w
LCAwLjAsIDEuMCk7CitnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKK2dsRXJyb3JTaG91
bGRCZShnbCwgZ2wuTk9fRVJST1IpOwordmFyIHggPSAtODsKK3ZhciB5ID0gLTg7CitnbC5jb3B5
VGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKK2NoZWNrTm9uWmVyb1BpeGVscyh0ZXgsIHdpZHRoLCBoZWlnaHQsIC14LCAteSwgZmJvV2lk
dGgsIGZib0hlaWdodCwgMjU1LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOwor
Z2wuZmluaXNoKCk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworZGVidWco
IiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVy
ZSAoY29weVRleFN1YkltYWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNob3VsZCBzdWNj
ZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4
dHVyZSgpOworZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK3ZhciBkYXRhID0g
bmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwg
d2lkdGggKiBoZWlnaHQgKiA0OyArK2kpCisgICAgZGF0YVtpXSA9IDI1NTsKK2dsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgZGF0YSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
KTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7CitnbC5jbGVhckNv
bG9yKDAuMCwgMS4wLCAwLjAsIDAuMCk7CitnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsK
K2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworZ2wuY29weVRleFN1YkltYWdlMkQo
Z2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CitjaGVja05vblpl
cm9QaXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5o
ZWlnaHQsIDAsIDI1NSwgMCwgMCk7CitnbC5kZWxldGVUZXh0dXJlKHRleCk7CitnbC5maW5pc2go
KTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworCiAvL1RPRE86IHVuaW5pdGlh
bGl6ZWQgdmVydGV4IGFycmF5IGJ1ZmZlcgogLy9UT0RPOiB1bmluaXRpYWxpemVkIHZlcnRleCBl
bGVtZW50cyBidWZmZXIKIC8vVE9ETzogdW5pbml0aWFsaXplZCBmcmFtZWJ1ZmZlcj8gKGltcGxl
bWVudGF0aW9ucyB3b3VsZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQgZmlyc3QgYmluZGluZz8p
Cg==
</data>
<flag name="review"
          id="69526"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>