<?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>79580</bug_id>
          
          <creation_ts>2012-02-25 14:56:01 -0800</creation_ts>
          <short_desc>Extract the logic for computing the dirty rows / columns out of RenderTableSection::paintObject</short_desc>
          <delta_ts>2012-02-27 17:05:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>robert</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>565025</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-25 14:56:01 -0800</bug_when>
    <thetext>This function has been growing steadily as we fixed bugs and improve performance. It is time to split it to underline what&apos;s going on.

The function starts by determining which cells are included in the repaint rectangle. This can easily moved to some new functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565031</commentid>
    <comment_count>1</comment_count>
      <attachid>128885</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-25 15:09:52 -0800</bug_when>
    <thetext>Created attachment 128885
Proposed refactoring: introduce CellSpan and 2 functions, cleaning up as we go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565127</commentid>
    <comment_count>2</comment_count>
      <attachid>128885</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-02-25 23:59:37 -0800</bug_when>
    <thetext>Comment on attachment 128885
Proposed refactoring: introduce CellSpan and 2 functions, cleaning up as we go.

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1014
&gt; +    LayoutUnit before = (style()-&gt;isHorizontalWritingMode() ? damageRect.y() : damageRect.x());

The enclosing parentheses are unnecessary here I think.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1025
&gt; +    LayoutUnit after = (style()-&gt;isHorizontalWritingMode() ? damageRect.maxY() : damageRect.maxX());

Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565422</commentid>
    <comment_count>3</comment_count>
      <attachid>128885</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-02-27 00:09:41 -0800</bug_when>
    <thetext>Comment on attachment 128885
Proposed refactoring: introduce CellSpan and 2 functions, cleaning up as we go.

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1074
&gt; +    // FIXME: Why do we double the outline size?
&gt; +    LayoutUnit outlineSize = 2 * maximalOutlineSize(paintPhase);

I guess the intention must have been to inflate each dimension of the rect by the size of the outline on each side of the rect? This must have worked as a fudge-factor because presumably inflation should happen outwards rather than downwards/rightwards - if you know what I mean. I can&apos;t see a reason for keeping this &apos;2 *&apos; now that you use inflate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565829</commentid>
    <comment_count>4</comment_count>
      <attachid>128885</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-27 11:07:33 -0800</bug_when>
    <thetext>Comment on attachment 128885
Proposed refactoring: introduce CellSpan and 2 functions, cleaning up as we go.

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

&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1014
&gt;&gt; +    LayoutUnit before = (style()-&gt;isHorizontalWritingMode() ? damageRect.y() : damageRect.x());
&gt; 
&gt; The enclosing parentheses are unnecessary here I think.

Good catch!

&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1025
&gt;&gt; +    LayoutUnit after = (style()-&gt;isHorizontalWritingMode() ? damageRect.maxY() : damageRect.maxX());
&gt; 
&gt; Here too.

Ditto!

&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1074
&gt;&gt; +    LayoutUnit outlineSize = 2 * maximalOutlineSize(paintPhase);
&gt; 
&gt; I guess the intention must have been to inflate each dimension of the rect by the size of the outline on each side of the rect? This must have worked as a fudge-factor because presumably inflation should happen outwards rather than downwards/rightwards - if you know what I mean. I can&apos;t see a reason for keeping this &apos;2 *&apos; now that you use inflate.

I don&apos;t think this reasoning works. We properly account for the outline in the existing code by removing |outlineSize| from the before / start edge and adding |outlineSize| to the after / end edge. This matches what inflate() does and I did not want any change of behavior (or it wouldn&apos;t be a refactoring).

It&apos;s a common anti-pattern in the rendering code to multiply the maximalOutlineSize by 2. I think this should be pushed to another bug to investigate more globally why this came to be (this line is here since the KHTML era so I don&apos;t have a good answer for this occurrence).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565942</commentid>
    <comment_count>5</comment_count>
      <attachid>129093</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-27 13:54:18 -0800</bug_when>
    <thetext>Created attachment 129093
Corrected wrong parentheses pointed out by Robert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565980</commentid>
    <comment_count>6</comment_count>
      <attachid>129093</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-27 14:27:23 -0800</bug_when>
    <thetext>Comment on attachment 129093
Corrected wrong parentheses pointed out by Robert.

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

LGTM.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1064
&gt; +    // FIXME: Why do we double the outline size?
&gt; +    LayoutUnit outlineSize = 2 * maximalOutlineSize(paintPhase);

I suspect it was an attempt to deal with the fact that outline would appear equally on both sides of the rect.  Now using inflate it&apos;s obvious that 2x is wrong.  But it&apos;s unclear from the original code if 2x was wrong.

&gt; Source/WebCore/rendering/RenderTableSection.h:42
&gt;  
&gt; +// Helper class for paintObject.
&gt; +class CellSpan {
&gt; +public:

It&apos;s possible that the whole paintObject function should move onto a helper object which existed just to contain table-paint-related logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566072</commentid>
    <comment_count>7</comment_count>
      <attachid>129093</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-27 16:14:06 -0800</bug_when>
    <thetext>Comment on attachment 129093
Corrected wrong parentheses pointed out by Robert.

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

&gt;&gt; Source/WebCore/rendering/RenderTableSection.h:42
&gt;&gt; +public:
&gt; 
&gt; It&apos;s possible that the whole paintObject function should move onto a helper object which existed just to contain table-paint-related logic.

It is definitely possible. I would like to investigate adding a custom iterator to handle the current complexity (has multiple cell levels / overflowing cells / collapsing border phase) and remove some of the copy &apos;n&apos; paste between the branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566141</commentid>
    <comment_count>8</comment_count>
      <attachid>129093</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 17:05:26 -0800</bug_when>
    <thetext>Comment on attachment 129093
Corrected wrong parentheses pointed out by Robert.

Clearing flags on attachment: 129093

Committed r109042: &lt;http://trac.webkit.org/changeset/109042&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566142</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 17:05:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128885</attachid>
            <date>2012-02-25 15:09:52 -0800</date>
            <delta_ts>2012-02-27 13:54:15 -0800</delta_ts>
            <desc>Proposed refactoring: introduce CellSpan and 2 functions, cleaning up as we go.</desc>
            <filename>bug-79580-20120225150945.patch</filename>
            <type>text/plain</type>
            <size>12840</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3Y2I1MzNiYzE5ZDlj
NmY5YTQ3MmM3MjRmNzc5NmYzYzJkNjcyNS4uODgxMTIyNDliMThlODBlZWYyMzlmMTgxNDUzNTli
NTgzNzk2OWQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAyLTI1ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3Qg
dGhlIGxvZ2ljIGZvciBjb21wdXRpbmcgdGhlIGRpcnR5IHJvd3MgLyBjb2x1bW5zIG91dCBvZiBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTU4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChDZWxsU3Bhbik6CisgICAgICAg
IChXZWJDb3JlOjpDZWxsU3Bhbjo6Q2VsbFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbFNw
YW46OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxTcGFuOjplbmQpOgorICAgICAgICBB
ZGRlZCB0aGlzIGNsYXNzIHRvIGhvbGQgdGhlIHNwYW4gaW5mb3JtYXRpb24uCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6ZnVsbFRhYmxlUm93U3Bhbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmZ1bGxUYWJsZUNvbHVtblNwYW4pOgorICAg
ICAgICBUaG9zZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzcGFuIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGZ1bGwgdGFibGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6ZGlydGllZFJvd3MpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkQ29sdW1ucyk6Cisg
ICAgICAgIFRob3NlIGZ1bmN0aW9ucyBjb21wdXRlcyBpbXBhY3RlZCByb3dzIC8gY29sdW1ucyBp
bXBhY3RlZCBieSBhIHxkYW1hZ2VSZWN0fC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpwYWludE9iamVjdCk6CisgICAgICAgIFVwZGF0ZWQgdGhpcyBmdW5jdGlvbiB0
byBjYWxsIHRoZSBuZXcgb25lcy4gQWxzbyB3ZSBub3cgaW5mbGF0ZSB0aGUgbG9jYWwgcmVjdGFu
Z2xlIHdpdGggdGhlIG91dGxpbmVTaXplLgorICAgICAgICBUaGlzIHdhc24ndCBkb25lIHByZXZp
b3VzIGFuZCB3ZSBoYWQgdG8gcGF0Y2ggc29tZSBzaXplIGNvbXBhcmlzb24gdG8gYWNjb3VudCBm
b3IgdGhlIG91dGxpbmUuCisKIDIwMTItMDItMjUgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xp
bmdAYXBwbGUuY29tPgogCiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnQ6IEF2b2lkIENTU1BhcnNl
ciBpbiBjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggMTA0MmMxODYyNjBkYjUyZjA4MzE3ZWMy
NjRhZmFkMmRmMmJkMTIxNi4uOGNhZmU1NDhhY2E1ODc1MzQ0Mjg1YmU3YzBjMmJkZmUwMjgwZDY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAKQEAgLTEwMDksMTcgKzEwMDksNTcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLAogICAgICAg
ICBjZWxsLT5wYWludChwYWludEluZm8sIGNlbGxQb2ludCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQorQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVk
Um93cyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KSBjb25zdAogewotICAgIC8vIENoZWNr
IHdoaWNoIHJvd3MgYW5kIGNvbHMgYXJlIHZpc2libGUgYW5kIG9ubHkgcGFpbnQgdGhlc2UuCi0g
ICAgdW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3Rh
bENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpOworICAgIExheW91dFVuaXQgYmVmb3Jl
ID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBkYW1hZ2VSZWN0LnkoKSA6
IGRhbWFnZVJlY3QueCgpKTsKIAotICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5m
by5waGFzZTsKKyAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSByb3cKKyAgICB1bnNpZ25l
ZCBzdGFydFJvdyA9IHN0ZDo6bG93ZXJfYm91bmQobV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQb3Mu
ZW5kKCksIGJlZm9yZSkgLSBtX3Jvd1Bvcy5iZWdpbigpOworCisgICAgLy8gVGhlIGJpbmFyeSBz
ZWFyY2ggYWJvdmUgZ2l2ZXMgdXMgdGhlIGZpcnN0IHJvdyB3aXRoCisgICAgLy8gYSB5IHBvc2l0
aW9uID49IHRoZSB0b3Agb2YgdGhlIHBhaW50IHJlY3QuIFRodXMsIHRoZSBwcmV2aW91cworICAg
IC8vIG1heSBuZWVkIHRvIGJlIHJlcGFpbnRlZCBhcyB3ZWxsLgorICAgIGlmIChzdGFydFJvdyA9
PSBtX3Jvd1Bvcy5zaXplKCkgfHwgKHN0YXJ0Um93ID4gMCAmJiAobV9yb3dQb3Nbc3RhcnRSb3dd
ID4gIGJlZm9yZSkpKQorICAgICAgICAtLXN0YXJ0Um93OworCisgICAgTGF5b3V0VW5pdCBhZnRl
ciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGFtYWdlUmVjdC5tYXhZ
KCkgOiBkYW1hZ2VSZWN0Lm1heFgoKSk7CisgICAgdW5zaWduZWQgZW5kUm93ID0gc3RkOjpsb3dl
cl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgYWZ0ZXIpIC0gbV9yb3dQ
b3MuYmVnaW4oKTsKKyAgICBpZiAoZW5kUm93ID09IG1fcm93UG9zLnNpemUoKSkKKyAgICAgICAg
LS1lbmRSb3c7CisKKyAgICBpZiAoIWVuZFJvdyAmJiBtX3Jvd1Bvc1swXSAtIHRhYmxlKCktPm91
dGVyQm9yZGVyQmVmb3JlKCkgPD0gYWZ0ZXIpCisgICAgICAgICsrZW5kUm93OworCisgICAgcmV0
dXJuIENlbGxTcGFuKHN0YXJ0Um93LCBlbmRSb3cpOworfQorCisKK0NlbGxTcGFuIFJlbmRlclRh
YmxlU2VjdGlvbjo6ZGlydGllZENvbHVtbnMoY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IFJUTC4KKyAgICBpZiAoIXN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGZ1bGxUYWJsZUNvbHVt
blNwYW4oKTsKKworICAgIExheW91dFVuaXQgc3RhcnQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGRhbWFnZVJlY3QueCgpIDogZGFtYWdlUmVjdC55KCkpOworICAgIFZl
Y3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICB1
bnNpZ25lZCBzdGFydENvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNv
bHVtblBvcy5lbmQoKSwgc3RhcnQpIC0gY29sdW1uUG9zLmJlZ2luKCk7CisgICAgaWYgKChzdGFy
dENvbCA9PSBjb2x1bW5Qb3Muc2l6ZSgpKSB8fCAoc3RhcnRDb2wgPiAwICYmIChjb2x1bW5Qb3Nb
c3RhcnRDb2xdID4gc3RhcnQpKSkKKyAgICAgICAgLS1zdGFydENvbDsKKworICAgIExheW91dFVu
aXQgZW5kID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBkYW1hZ2VSZWN0
Lm1heFgoKSA6IGRhbWFnZVJlY3QubWF4WSgpKTsKKyAgICB1bnNpZ25lZCBlbmRDb2wgPSBzdGQ6
Omxvd2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIGVuZCkgLSBj
b2x1bW5Qb3MuYmVnaW4oKTsKKyAgICBpZiAoZW5kQ29sID09IGNvbHVtblBvcy5zaXplKCkpCisg
ICAgICAgIC0tZW5kQ29sOworCisgICAgaWYgKCFlbmRDb2wgJiYgY29sdW1uUG9zWzBdIC0gdGFi
bGUoKS0+b3V0ZXJCb3JkZXJTdGFydCgpIDw9IGVuZCkKKyAgICAgICAgKytlbmRDb2w7CisKKyAg
ICByZXR1cm4gQ2VsbFNwYW4oc3RhcnRDb2wsIGVuZENvbCk7Cit9CiAKLSAgICBMYXlvdXRVbml0
IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludFBoYXNlKTsKLSAgICB1bnNpZ25lZCBz
dGFydHJvdyA9IDA7Ci0gICAgdW5zaWduZWQgZW5kcm93ID0gdG90YWxSb3dzOwordm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0g
cGFpbnRJbmZvLnBoYXNlOwogCiAgICAgTGF5b3V0UmVjdCBsb2NhbFJlcGFpbnRSZWN0ID0gcGFp
bnRJbmZvLnJlY3Q7CiAgICAgbG9jYWxSZXBhaW50UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsK
QEAgLTEwMzAsNTYgKzEwNzAsMjUgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKICAgICAgICAg
ICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WCh3aWR0aCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhY
KCkpOwogICAgIH0KIAotICAgIGlmICghbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dp
bmdDZWxsKSB7Ci0gICAgICAgIExheW91dFVuaXQgYmVmb3JlID0gKHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LnkoKSA6IGxvY2FsUmVwYWludFJl
Y3QueCgpKSAtIG9zOwotICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSByb3cKLSAg
ICAgICAgc3RhcnRyb3cgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93
UG9zLmVuZCgpLCBiZWZvcmUpIC0gbV9yb3dQb3MuYmVnaW4oKTsKKyAgICAvLyBGSVhNRTogV2h5
IGRvIHdlIGRvdWJsZSB0aGUgb3V0bGluZSBzaXplPworICAgIExheW91dFVuaXQgb3V0bGluZVNp
emUgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50UGhhc2UpOworICAgIGxvY2FsUmVwYWlu
dFJlY3QuaW5mbGF0ZShvdXRsaW5lU2l6ZSk7CiAKLSAgICAgICAgLy8gVGhlIGJpbmFyeSBzZWFy
Y2ggYWJvdmUgZ2l2ZXMgdXMgdGhlIGZpcnN0IHJvdyB3aXRoCi0gICAgICAgIC8vIGEgeSBwb3Np
dGlvbiA+PSB0aGUgdG9wIG9mIHRoZSBwYWludCByZWN0LiBUaHVzLCB0aGUgcHJldmlvdXMKLSAg
ICAgICAgLy8gbWF5IG5lZWQgdG8gYmUgcmVwYWludGVkIGFzIHdlbGwuCi0gICAgICAgIGlmIChz
dGFydHJvdyA9PSBtX3Jvd1Bvcy5zaXplKCkgfHwgKHN0YXJ0cm93ID4gMCAmJiAobV9yb3dQb3Nb
c3RhcnRyb3ddID4gIGJlZm9yZSkpKQotICAgICAgICAgIC0tc3RhcnRyb3c7CisgICAgQ2VsbFNw
YW4gZGlydGllZFJvd3MgPSBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwg
PyBmdWxsVGFibGVSb3dTcGFuKCkgOiB0aGlzLT5kaXJ0aWVkUm93cyhsb2NhbFJlcGFpbnRSZWN0
KTsKKyAgICBDZWxsU3BhbiBkaXJ0aWVkQ29sdW1ucyA9IG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0
aE92ZXJmbG93aW5nQ2VsbCA/IGZ1bGxUYWJsZUNvbHVtblNwYW4oKSA6IHRoaXMtPmRpcnRpZWRD
b2x1bW5zKGxvY2FsUmVwYWludFJlY3QpOwogCi0gICAgICAgIExheW91dFVuaXQgYWZ0ZXIgPSAo
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3QubWF4
WSgpIDogbG9jYWxSZXBhaW50UmVjdC5tYXhYKCkpICsgb3M7Ci0gICAgICAgIGVuZHJvdyA9IHN0
ZDo6bG93ZXJfYm91bmQobV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIGFmdGVyKSAt
IG1fcm93UG9zLmJlZ2luKCk7Ci0gICAgICAgIGlmIChlbmRyb3cgPT0gbV9yb3dQb3Muc2l6ZSgp
KQotICAgICAgICAgIC0tZW5kcm93OwotCi0gICAgICAgIGlmICghZW5kcm93ICYmIG1fcm93UG9z
WzBdIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJCZWZvcmUoKSA8PSBhZnRlcikKLSAgICAgICAgICAg
ICsrZW5kcm93OwotICAgIH0KLQotICAgIHVuc2lnbmVkIHN0YXJ0Y29sID0gMDsKLSAgICB1bnNp
Z25lZCBlbmRjb2wgPSB0b3RhbENvbHM7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBSVEwuCi0g
ICAgaWYgKCFtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgJiYgc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgIExheW91dFVuaXQgc3RhcnQg
PSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3Qu
eCgpIDogbG9jYWxSZXBhaW50UmVjdC55KCkpIC0gb3M7Ci0gICAgICAgIFZlY3RvcjxpbnQ+JiBj
b2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKLSAgICAgICAgc3RhcnRjb2wg
PSBzdGQ6Omxvd2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIHN0
YXJ0KSAtIGNvbHVtblBvcy5iZWdpbigpOwotICAgICAgICBpZiAoKHN0YXJ0Y29sID09IGNvbHVt
blBvcy5zaXplKCkpIHx8IChzdGFydGNvbCA+IDAgJiYgKGNvbHVtblBvc1tzdGFydGNvbF0gPiBz
dGFydCkpKQotICAgICAgICAgICAgLS1zdGFydGNvbDsKLQotICAgICAgICBMYXlvdXRVbml0IGVu
ZCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVj
dC5tYXhYKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSkgKyBvczsKLSAgICAgICAgZW5kY29s
ID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBl
bmQpIC0gY29sdW1uUG9zLmJlZ2luKCk7Ci0gICAgICAgIGlmIChlbmRjb2wgPT0gY29sdW1uUG9z
LnNpemUoKSkKLSAgICAgICAgICAgIC0tZW5kY29sOwotCi0gICAgICAgIGlmICghZW5kY29sICYm
IGNvbHVtblBvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyU3RhcnQoKSA8PSBlbmQpCi0gICAg
ICAgICAgICArK2VuZGNvbDsKLSAgICB9Ci0gICAgaWYgKHN0YXJ0Y29sIDwgZW5kY29sKSB7Cisg
ICAgaWYgKGRpcnRpZWRDb2x1bW5zLnN0YXJ0KCkgPCBkaXJ0aWVkQ29sdW1ucy5lbmQoKSkgewog
ICAgICAgICBpZiAoIW1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzICYmICFtX292ZXJmbG93aW5nQ2Vs
bHMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpIHsKICAgICAgICAgICAgICAgICAvLyBDb2xsYXBzZWQg
Ym9yZGVycyBhcmUgcGFpbnRlZCBmcm9tIHRoZSBib3R0b20gcmlnaHQgdG8gdGhlIHRvcCBsZWZ0
IHNvIHRoYXQgcHJlY2VkZW5jZQogICAgICAgICAgICAgICAgIC8vIGR1ZSB0byBjZWxsIHBvc2l0
aW9uIGlzIHJlc3BlY3RlZC4KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBlbmRy
b3c7IHIgPiBzdGFydHJvdzsgci0tKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBy
ID0gZGlydGllZFJvd3MuZW5kKCk7IHIgPiBkaXJ0aWVkUm93cy5zdGFydCgpOyByLS0pIHsKICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93ID0gciAtIDE7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYyA9IGVuZGNvbDsgYyA+IHN0YXJ0Y29sOyBjLS0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuZW5kKCk7IGMg
PiBkaXJ0aWVkQ29sdW1ucy5zdGFydCgpOyBjLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNvbCA9IGMgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbFN0cnVj
dCYgY3VycmVudCA9IGNlbGxBdChyb3csIGNvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHJvdyA+IHN0YXJ0cm93ICYmIHByaW1hcnlDZWxs
QXQocm93IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAoY29sID4gc3RhcnRjb2wgJiYgcHJpbWFyeUNl
bGxBdChyb3csIGNvbCAtIDEpID09IGNlbGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjZWxsIHx8IChyb3cgPiBkaXJ0aWVkUm93cy5zdGFydCgpICYmIHByaW1hcnlDZWxsQXQocm93
IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAoY29sID4gZGlydGllZENvbHVtbnMuc3RhcnQoKSAmJiBw
cmltYXJ5Q2VsbEF0KHJvdywgY29sIC0gMSkgPT0gY2VsbCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBj
ZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBwYWludE9mZnNldCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5wYWludENvbGxhcHNlZEJvcmRlcnMocGFp
bnRJbmZvLCBjZWxsUG9pbnQpOwpAQCAtMTA4NywxNCArMTA5NiwxNCBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgLy8gRHJhdyB0aGUgZGlydHkgY2VsbHMgaW4gdGhlIG9yZGVyIHRoYXQgdGhl
eSBhcHBlYXIuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCByID0gc3RhcnRyb3c7IHIg
PCBlbmRyb3c7IHIrKykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgciA9IGRpcnRp
ZWRSb3dzLnN0YXJ0KCk7IHIgPCBkaXJ0aWVkUm93cy5lbmQoKTsgcisrKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclRhYmxlUm93KiByb3cgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXI7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChyb3cgJiYgIXJvdy0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+cGFpbnRPdXRsaW5lRm9yUm93SWZOZWVk
ZWQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYyA9IHN0YXJ0Y29sOyBjIDwgZW5kY29sOyBjKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuc3RhcnQoKTsgYyA8IGRpcnRpZWRD
b2x1bW5zLmVuZCgpOyBjKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIENlbGxTdHJ1Y3Qm
IGN1cnJlbnQgPSBjZWxsQXQociwgYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNlbGwgfHwgKHIgPiBzdGFydHJvdyAmJiBwcmltYXJ5Q2VsbEF0KHIgLSAx
LCBjKSA9PSBjZWxsKSB8fCAoYyA+IHN0YXJ0Y29sICYmIHByaW1hcnlDZWxsQXQociwgYyAtIDEp
ID09IGNlbGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsIHx8IChyID4gZGly
dGllZFJvd3Muc3RhcnQoKSAmJiBwcmltYXJ5Q2VsbEF0KHIgLSAxLCBjKSA9PSBjZWxsKSB8fCAo
YyA+IGRpcnRpZWRDb2x1bW5zLnN0YXJ0KCkgJiYgcHJpbWFyeUNlbGxBdChyLCBjIC0gMSkgPT0g
Y2VsbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWludENlbGwoY2VsbCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTExMDIsNyArMTExMSwxMSBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gVGhlIG92ZXJmbG93aW5nIGNlbGxzIHNob3VsZCBiZSBzY2FyY2UgdG8gYXZvaWQgYWRkaW5n
IGEgbG90IG9mIGNlbGxzIHRvIHRoZSBIYXNoU2V0LgorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHRvdGFsUm93cyA9IG1fZ3JpZC5zaXplKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpOwogICAgICAgICAgICAg
QVNTRVJUKG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgPCB0b3RhbFJvd3MgKiB0b3RhbENvbHMg
KiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvRm9yRmFzdFBhaW50UGF0aCk7CisjZW5k
aWYKIAogICAgICAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHdlIHByb3Blcmx5IHJlcGFpbnQgdGhl
IHNlY3Rpb24sIHdlIHJlcGFpbnQgYWxsIHRoZSBvdmVyZmxvd2luZyBjZWxscyB0aGF0IHdlIGNv
bGxlY3RlZC4KICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJUYWJsZUNlbGwqPiBjZWxsczsKQEAg
LTExMTAsMTEgKzExMjMsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKIAogICAgICAgICAg
ICAgSGFzaFNldDxSZW5kZXJUYWJsZUNlbGwqPiBzcGFubmluZ0NlbGxzOwogCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHIgPSBzdGFydHJvdzsgciA8IGVuZHJvdzsgcisrKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5zdGFydCgpOyByIDwgZGlydGllZFJv
d3MuZW5kKCk7IHIrKykgewogICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiByb3cgPSBt
X2dyaWRbcl0ucm93UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgaWYgKHJvdyAmJiAhcm93LT5o
YXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgICAgICByb3ctPnBhaW50T3V0
bGluZUZvclJvd0lmTmVlZGVkKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYyA9IHN0YXJ0Y29sOyBjIDwgZW5kY29sOyBjKyspIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSBkaXJ0aWVkQ29sdW1ucy5zdGFydCgpOyBjIDwg
ZGlydGllZENvbHVtbnMuZW5kKCk7IGMrKykgewogICAgICAgICAgICAgICAgICAgICBDZWxsU3Ry
dWN0JiBjdXJyZW50ID0gY2VsbEF0KHIsIGMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWN1
cnJlbnQuaGFzQ2VsbHMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IGQxMmM4
NzA0MTNlNmMxYjgyZjYxZWNlYWM0YWE0YjUxOGVkZGRjZjEuLjg0ZTg0ZWIzYjc1ZWQxNWQ3Njky
ODI0MmNmZWYyMzIxMzhmYzUxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmgKQEAgLTM3LDYgKzM3LDIzIEBAIGVudW0gQ29sbGFwc2VkQm9yZGVy
U2lkZSB7CiAgICAgQ0JTRW5kCiB9OwogCisvLyBIZWxwZXIgY2xhc3MgZm9yIHBhaW50T2JqZWN0
LgorY2xhc3MgQ2VsbFNwYW4geworcHVibGljOgorICAgIENlbGxTcGFuKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBlbmQpCisgICAgICAgIDogbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX2Vu
ZChlbmQpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFydDsKKyAgICB1bnNpZ25lZCBtX2VuZDsK
K307CisKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIGNsYXNzIFJlbmRlclRhYmxlUm93OwogCkBA
IC0xNzAsNiArMTg3LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc092ZXJmbG93aW5nQ2Vs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgfHwgbV9mb3JjZVNs
b3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOyB9CiAKKyAgICBDZWxsU3BhbiBmdWxsVGFi
bGVSb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gQ2VsbFNwYW4oMCwgbV9ncmlkLnNpemUoKSk7IH0K
KyAgICBDZWxsU3BhbiBmdWxsVGFibGVDb2x1bW5TcGFuKCkgY29uc3QgeyByZXR1cm4gQ2VsbFNw
YW4oMCwgdGFibGUoKS0+Y29sdW1ucygpLnNpemUoKSk7IH0KKworICAgIENlbGxTcGFuIGRpcnRp
ZWRSb3dzKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KSBjb25zdDsKKyAgICBDZWxsU3Bh
biBkaXJ0aWVkQ29sdW1ucyhjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCkgY29uc3Q7CisK
ICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKIAogICAgIFZlY3RvcjxSb3dT
dHJ1Y3Q+IG1fZ3JpZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129093</attachid>
            <date>2012-02-27 13:54:18 -0800</date>
            <delta_ts>2012-02-27 17:05:25 -0800</delta_ts>
            <desc>Corrected wrong parentheses pointed out by Robert.</desc>
            <filename>bug-79580-20120227135417.patch</filename>
            <type>text/plain</type>
            <size>12972</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllZWRkZmQ2OGFmZDc5
YmQxM2Y4ZTVmZTVjODMzOThkOTYzZTk4ZS4uZjNkM2Y1NjlmMjE0MjM0M2NhODBhZGIzYmJmMjgw
ZmIzZGI3YmJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTI3ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3Qg
dGhlIGxvZ2ljIGZvciBjb21wdXRpbmcgdGhlIGRpcnR5IHJvd3MgLyBjb2x1bW5zIG91dCBvZiBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTU4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChDZWxsU3Bhbik6CisgICAgICAg
IChXZWJDb3JlOjpDZWxsU3Bhbjo6Q2VsbFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbFNw
YW46OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxTcGFuOjplbmQpOgorICAgICAgICBB
ZGRlZCB0aGlzIGNsYXNzIHRvIGhvbGQgdGhlIHNwYW4gaW5mb3JtYXRpb24uCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6ZnVsbFRhYmxlUm93U3Bhbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmZ1bGxUYWJsZUNvbHVtblNwYW4pOgorICAg
ICAgICBUaG9zZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzcGFuIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGZ1bGwgdGFibGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6ZGlydGllZFJvd3MpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkQ29sdW1ucyk6Cisg
ICAgICAgIFRob3NlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSByb3dzIC8gY29sdW1ucyBpbXBhY3Rl
ZCBieSBhIHxkYW1hZ2VSZWN0fC4gT24gdGhlIHNsb3cgcGFpbnRpbmcgcGF0aCwgdGhleQorICAg
ICAgICByZXR1cm4gdGhlIGZ1bGwgdGFibGUgc3Bhbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdCk6CisgICAgICAgIFVwZGF0ZWQgdGhpcyBmdW5j
dGlvbiB0byBjYWxsIHRoZSBuZXcgb25lcy4gQWxzbyB3ZSBub3cgaW5mbGF0ZSB0aGUgbG9jYWwg
cmVjdGFuZ2xlIHdpdGggdGhlIG91dGxpbmVTaXplLgorICAgICAgICBUaGlzIHdhc24ndCBkb25l
IHByZXZpb3VzbHkgYW5kIHdlIGhhZCB0byBtYW51YWxseSBwYXRjaCBzb21lIHNpemUgY29tcGFy
aXNvbiB0byBhY2NvdW50IGZvciB0aGUgb3V0bGluZS4KKwogMjAxMi0wMi0yNyAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBT
Y3JpcHRzIG5hdmlnYXRvciBvdmVybGF5IHNob3VsZCBub3QgY29uc3VtZSBtb3VzZSBhY3Rpb25z
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApp
bmRleCAzMTg1NTE2NmY2OTBiYTRhZmM5ZTY2ZmMxNGFhYmYzNTI1ZTg2OWQxLi42NDc1Zjg3MDJl
ODM1YzQ0NmNlMDIxNDYzMTllZGNiNjMyYzk3ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtOTkzLDE3ICs5OTMsNjMgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBh
aW50SW5mbyYgcGFpbnRJbmZvLAogICAgICAgICBjZWxsLT5wYWludChwYWludEluZm8sIGNlbGxQ
b2ludCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQorQ2VsbFNwYW4g
UmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkUm93cyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KSBjb25zdAogewotICAgIC8vIENoZWNrIHdoaWNoIHJvd3MgYW5kIGNvbHMgYXJlIHZpc2li
bGUgYW5kIG9ubHkgcGFpbnQgdGhlc2UuCi0gICAgdW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlk
LnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6
ZSgpOworICAgIGlmIChtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwpIAor
ICAgICAgICByZXR1cm4gZnVsbFRhYmxlUm93U3BhbigpOwogCi0gICAgUGFpbnRQaGFzZSBwYWlu
dFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOworICAgIExheW91dFVuaXQgYmVmb3JlID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGRhbWFnZVJlY3QueSgpIDogZGFtYWdlUmVj
dC54KCk7CisKKyAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSByb3cKKyAgICB1bnNpZ25l
ZCBzdGFydFJvdyA9IHN0ZDo6bG93ZXJfYm91bmQobV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQb3Mu
ZW5kKCksIGJlZm9yZSkgLSBtX3Jvd1Bvcy5iZWdpbigpOworCisgICAgLy8gVGhlIGJpbmFyeSBz
ZWFyY2ggYWJvdmUgZ2l2ZXMgdXMgdGhlIGZpcnN0IHJvdyB3aXRoCisgICAgLy8gYSB5IHBvc2l0
aW9uID49IHRoZSB0b3Agb2YgdGhlIHBhaW50IHJlY3QuIFRodXMsIHRoZSBwcmV2aW91cworICAg
IC8vIG1heSBuZWVkIHRvIGJlIHJlcGFpbnRlZCBhcyB3ZWxsLgorICAgIGlmIChzdGFydFJvdyA9
PSBtX3Jvd1Bvcy5zaXplKCkgfHwgKHN0YXJ0Um93ID4gMCAmJiAobV9yb3dQb3Nbc3RhcnRSb3dd
ID4gIGJlZm9yZSkpKQorICAgICAgICAtLXN0YXJ0Um93OworCisgICAgTGF5b3V0VW5pdCBhZnRl
ciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGFtYWdlUmVjdC5tYXhZ
KCkgOiBkYW1hZ2VSZWN0Lm1heFgoKSk7CisgICAgdW5zaWduZWQgZW5kUm93ID0gc3RkOjpsb3dl
cl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgYWZ0ZXIpIC0gbV9yb3dQ
b3MuYmVnaW4oKTsKKyAgICBpZiAoZW5kUm93ID09IG1fcm93UG9zLnNpemUoKSkKKyAgICAgICAg
LS1lbmRSb3c7CisKKyAgICBpZiAoIWVuZFJvdyAmJiBtX3Jvd1Bvc1swXSAtIHRhYmxlKCktPm91
dGVyQm9yZGVyQmVmb3JlKCkgPD0gYWZ0ZXIpCisgICAgICAgICsrZW5kUm93OworCisgICAgcmV0
dXJuIENlbGxTcGFuKHN0YXJ0Um93LCBlbmRSb3cpOworfQorCisKK0NlbGxTcGFuIFJlbmRlclRh
YmxlU2VjdGlvbjo6ZGlydGllZENvbHVtbnMoY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBpZiAobV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxs
KSAKKyAgICAgICAgcmV0dXJuIGZ1bGxUYWJsZUNvbHVtblNwYW4oKTsKKworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgUlRMLgorICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQorICAgICAgICByZXR1cm4gZnVsbFRhYmxlQ29sdW1uU3BhbigpOwogCi0gICAgTGF5b3V0
VW5pdCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0gICAgdW5zaWdu
ZWQgc3RhcnRyb3cgPSAwOwotICAgIHVuc2lnbmVkIGVuZHJvdyA9IHRvdGFsUm93czsKKyAgICBM
YXlvdXRVbml0IHN0YXJ0ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGRh
bWFnZVJlY3QueCgpIDogZGFtYWdlUmVjdC55KCk7CisgICAgVmVjdG9yPGludD4mIGNvbHVtblBv
cyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOworICAgIHVuc2lnbmVkIHN0YXJ0Q29sID0g
c3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBzdGFy
dCkgLSBjb2x1bW5Qb3MuYmVnaW4oKTsKKyAgICBpZiAoKHN0YXJ0Q29sID09IGNvbHVtblBvcy5z
aXplKCkpIHx8IChzdGFydENvbCA+IDAgJiYgKGNvbHVtblBvc1tzdGFydENvbF0gPiBzdGFydCkp
KQorICAgICAgICAtLXN0YXJ0Q29sOworCisgICAgTGF5b3V0VW5pdCBlbmQgPSAoc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGRhbWFnZVJlY3QubWF4WCgpIDogZGFtYWdlUmVj
dC5tYXhZKCkpOworICAgIHVuc2lnbmVkIGVuZENvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1u
UG9zLmJlZ2luKCksIGNvbHVtblBvcy5lbmQoKSwgZW5kKSAtIGNvbHVtblBvcy5iZWdpbigpOwor
ICAgIGlmIChlbmRDb2wgPT0gY29sdW1uUG9zLnNpemUoKSkKKyAgICAgICAgLS1lbmRDb2w7CisK
KyAgICBpZiAoIWVuZENvbCAmJiBjb2x1bW5Qb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlclN0
YXJ0KCkgPD0gZW5kKQorICAgICAgICArK2VuZENvbDsKKworICAgIHJldHVybiBDZWxsU3Bhbihz
dGFydENvbCwgZW5kQ29sKTsKK30KKwordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Cit7CisgICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCiAgICAg
TGF5b3V0UmVjdCBsb2NhbFJlcGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7CiAgICAgbG9jYWxS
ZXBhaW50UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKQEAgLTEwMTQsNTYgKzEwNjAsMjUgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGEKICAgICAgICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0
WCh3aWR0aCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhYKCkpOwogICAgIH0KIAotICAgIGlmICgh
bV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsKSB7Ci0gICAgICAgIExheW91
dFVuaXQgYmVmb3JlID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2Nh
bFJlcGFpbnRSZWN0LnkoKSA6IGxvY2FsUmVwYWludFJlY3QueCgpKSAtIG9zOwotICAgICAgICAv
LyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSByb3cKLSAgICAgICAgc3RhcnRyb3cgPSBzdGQ6Omxv
d2VyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBiZWZvcmUpIC0gbV9y
b3dQb3MuYmVnaW4oKTsKLQotICAgICAgICAvLyBUaGUgYmluYXJ5IHNlYXJjaCBhYm92ZSBnaXZl
cyB1cyB0aGUgZmlyc3Qgcm93IHdpdGgKLSAgICAgICAgLy8gYSB5IHBvc2l0aW9uID49IHRoZSB0
b3Agb2YgdGhlIHBhaW50IHJlY3QuIFRodXMsIHRoZSBwcmV2aW91cwotICAgICAgICAvLyBtYXkg
bmVlZCB0byBiZSByZXBhaW50ZWQgYXMgd2VsbC4KLSAgICAgICAgaWYgKHN0YXJ0cm93ID09IG1f
cm93UG9zLnNpemUoKSB8fCAoc3RhcnRyb3cgPiAwICYmIChtX3Jvd1Bvc1tzdGFydHJvd10gPiAg
YmVmb3JlKSkpCi0gICAgICAgICAgLS1zdGFydHJvdzsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdl
IGRvdWJsZSB0aGUgb3V0bGluZSBzaXplPworICAgIExheW91dFVuaXQgb3V0bGluZVNpemUgPSAy
ICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50UGhhc2UpOworICAgIGxvY2FsUmVwYWludFJlY3Qu
aW5mbGF0ZShvdXRsaW5lU2l6ZSk7CiAKLSAgICAgICAgTGF5b3V0VW5pdCBhZnRlciA9IChzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkg
OiBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSkgKyBvczsKLSAgICAgICAgZW5kcm93ID0gc3RkOjps
b3dlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgYWZ0ZXIpIC0gbV9y
b3dQb3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKGVuZHJvdyA9PSBtX3Jvd1Bvcy5zaXplKCkpCi0g
ICAgICAgICAgLS1lbmRyb3c7Ci0KLSAgICAgICAgaWYgKCFlbmRyb3cgJiYgbV9yb3dQb3NbMF0g
LSB0YWJsZSgpLT5vdXRlckJvcmRlckJlZm9yZSgpIDw9IGFmdGVyKQotICAgICAgICAgICAgKytl
bmRyb3c7Ci0gICAgfQorICAgIENlbGxTcGFuIGRpcnRpZWRSb3dzID0gdGhpcy0+ZGlydGllZFJv
d3MobG9jYWxSZXBhaW50UmVjdCk7CisgICAgQ2VsbFNwYW4gZGlydGllZENvbHVtbnMgPSB0aGlz
LT5kaXJ0aWVkQ29sdW1ucyhsb2NhbFJlcGFpbnRSZWN0KTsKIAotICAgIHVuc2lnbmVkIHN0YXJ0
Y29sID0gMDsKLSAgICB1bnNpZ25lZCBlbmRjb2wgPSB0b3RhbENvbHM7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBSVEwuCi0gICAgaWYgKCFtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxv
d2luZ0NlbGwgJiYgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAg
IExheW91dFVuaXQgc3RhcnQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGxvY2FsUmVwYWludFJlY3QueCgpIDogbG9jYWxSZXBhaW50UmVjdC55KCkpIC0gb3M7Ci0gICAg
ICAgIFZlY3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsK
LSAgICAgICAgc3RhcnRjb2wgPSBzdGQ6Omxvd2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBj
b2x1bW5Qb3MuZW5kKCksIHN0YXJ0KSAtIGNvbHVtblBvcy5iZWdpbigpOwotICAgICAgICBpZiAo
KHN0YXJ0Y29sID09IGNvbHVtblBvcy5zaXplKCkpIHx8IChzdGFydGNvbCA+IDAgJiYgKGNvbHVt
blBvc1tzdGFydGNvbF0gPiBzdGFydCkpKQotICAgICAgICAgICAgLS1zdGFydGNvbDsKLQotICAg
ICAgICBMYXlvdXRVbml0IGVuZCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gbG9jYWxSZXBhaW50UmVjdC5tYXhYKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSkgKyBv
czsKLSAgICAgICAgZW5kY29sID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwg
Y29sdW1uUG9zLmVuZCgpLCBlbmQpIC0gY29sdW1uUG9zLmJlZ2luKCk7Ci0gICAgICAgIGlmIChl
bmRjb2wgPT0gY29sdW1uUG9zLnNpemUoKSkKLSAgICAgICAgICAgIC0tZW5kY29sOwotCi0gICAg
ICAgIGlmICghZW5kY29sICYmIGNvbHVtblBvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyU3Rh
cnQoKSA8PSBlbmQpCi0gICAgICAgICAgICArK2VuZGNvbDsKLSAgICB9Ci0gICAgaWYgKHN0YXJ0
Y29sIDwgZW5kY29sKSB7CisgICAgaWYgKGRpcnRpZWRDb2x1bW5zLnN0YXJ0KCkgPCBkaXJ0aWVk
Q29sdW1ucy5lbmQoKSkgewogICAgICAgICBpZiAoIW1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzICYm
ICFtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpIHsKICAgICAgICAgICAg
ICAgICAvLyBDb2xsYXBzZWQgYm9yZGVycyBhcmUgcGFpbnRlZCBmcm9tIHRoZSBib3R0b20gcmln
aHQgdG8gdGhlIHRvcCBsZWZ0IHNvIHRoYXQgcHJlY2VkZW5jZQogICAgICAgICAgICAgICAgIC8v
IGR1ZSB0byBjZWxsIHBvc2l0aW9uIGlzIHJlc3BlY3RlZC4KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHIgPSBlbmRyb3c7IHIgPiBzdGFydHJvdzsgci0tKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCByID0gZGlydGllZFJvd3MuZW5kKCk7IHIgPiBkaXJ0aWVkUm93cy5z
dGFydCgpOyByLS0pIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93ID0gciAtIDE7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IGVuZGNvbDsgYyA+IHN0YXJ0
Y29sOyBjLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGll
ZENvbHVtbnMuZW5kKCk7IGMgPiBkaXJ0aWVkQ29sdW1ucy5zdGFydCgpOyBjLS0pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbCA9IGMgLSAxOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChyb3csIGNvbCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlD
ZWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHJvdyA+IHN0YXJ0
cm93ICYmIHByaW1hcnlDZWxsQXQocm93IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAoY29sID4gc3Rh
cnRjb2wgJiYgcHJpbWFyeUNlbGxBdChyb3csIGNvbCAtIDEpID09IGNlbGwpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjZWxsIHx8IChyb3cgPiBkaXJ0aWVkUm93cy5zdGFydCgpICYm
IHByaW1hcnlDZWxsQXQocm93IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAoY29sID4gZGlydGllZENv
bHVtbnMuc3RhcnQoKSAmJiBwcmltYXJ5Q2VsbEF0KHJvdywgY29sIC0gMSkgPT0gY2VsbCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChj
ZWxsLCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5wYWludENv
bGxhcHNlZEJvcmRlcnMocGFpbnRJbmZvLCBjZWxsUG9pbnQpOwpAQCAtMTA3MSwxNCArMTA4Niwx
NCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRHJhdyB0aGUgZGlydHkgY2VsbHMgaW4g
dGhlIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCByID0gc3RhcnRyb3c7IHIgPCBlbmRyb3c7IHIrKykgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgciA9IGRpcnRpZWRSb3dzLnN0YXJ0KCk7IHIgPCBkaXJ0aWVkUm93cy5lbmQoKTsg
cisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiByb3cgPSBtX2dyaWRb
cl0ucm93UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgJiYgIXJvdy0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+cGFpbnRP
dXRsaW5lRm9yUm93SWZOZWVkZWQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IHN0YXJ0Y29sOyBjIDwgZW5kY29sOyBjKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuc3Rh
cnQoKTsgYyA8IGRpcnRpZWRDb2x1bW5zLmVuZCgpOyBjKyspIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwgYyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHIgPiBzdGFydHJvdyAmJiBw
cmltYXJ5Q2VsbEF0KHIgLSAxLCBjKSA9PSBjZWxsKSB8fCAoYyA+IHN0YXJ0Y29sICYmIHByaW1h
cnlDZWxsQXQociwgYyAtIDEpID09IGNlbGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjZWxsIHx8IChyID4gZGlydGllZFJvd3Muc3RhcnQoKSAmJiBwcmltYXJ5Q2VsbEF0KHIgLSAx
LCBjKSA9PSBjZWxsKSB8fCAoYyA+IGRpcnRpZWRDb2x1bW5zLnN0YXJ0KCkgJiYgcHJpbWFyeUNl
bGxBdChyLCBjIC0gMSkgPT0gY2VsbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYWludENlbGwoY2VsbCwgcGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTEwMSwx
MSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gVGhlIG92ZXJmbG93aW5nIGNlbGxzIHNob3VsZCBiZSBzY2Fy
Y2UgdG8gYXZvaWQgYWRkaW5nIGEgbG90IG9mIGNlbGxzIHRvIHRoZSBIYXNoU2V0LgorI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgICAgIHVuc2lnbmVkIHRvdGFsUm93cyA9IG1fZ3JpZC5zaXplKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6
ZSgpOwogICAgICAgICAgICAgQVNTRVJUKG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgPCB0b3Rh
bFJvd3MgKiB0b3RhbENvbHMgKiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvRm9yRmFz
dFBhaW50UGF0aCk7CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHdlIHBy
b3Blcmx5IHJlcGFpbnQgdGhlIHNlY3Rpb24sIHdlIHJlcGFpbnQgYWxsIHRoZSBvdmVyZmxvd2lu
ZyBjZWxscyB0aGF0IHdlIGNvbGxlY3RlZC4KICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJUYWJs
ZUNlbGwqPiBjZWxsczsKQEAgLTEwOTQsMTEgKzExMTMsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGEKIAogICAgICAgICAgICAgSGFzaFNldDxSZW5kZXJUYWJsZUNlbGwqPiBzcGFubmluZ0Nl
bGxzOwogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBzdGFydHJvdzsgciA8IGVuZHJv
dzsgcisrKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5zdGFy
dCgpOyByIDwgZGlydGllZFJvd3MuZW5kKCk7IHIrKykgewogICAgICAgICAgICAgICAgIFJlbmRl
clRhYmxlUm93KiByb3cgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAg
aWYgKHJvdyAmJiAhcm93LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAg
ICAgICByb3ctPnBhaW50T3V0bGluZUZvclJvd0lmTmVlZGVkKHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IHN0YXJ0Y29sOyBjIDwgZW5k
Y29sOyBjKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSBkaXJ0aWVkQ29s
dW1ucy5zdGFydCgpOyBjIDwgZGlydGllZENvbHVtbnMuZW5kKCk7IGMrKykgewogICAgICAgICAg
ICAgICAgICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KHIsIGMpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5oCmluZGV4IGQxMmM4NzA0MTNlNmMxYjgyZjYxZWNlYWM0YWE0YjUxOGVkZGRjZjEuLjg0
ZTg0ZWIzYjc1ZWQxNWQ3NjkyODI0MmNmZWYyMzIxMzhmYzUxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTM3LDYgKzM3LDIzIEBAIGVu
dW0gQ29sbGFwc2VkQm9yZGVyU2lkZSB7CiAgICAgQ0JTRW5kCiB9OwogCisvLyBIZWxwZXIgY2xh
c3MgZm9yIHBhaW50T2JqZWN0LgorY2xhc3MgQ2VsbFNwYW4geworcHVibGljOgorICAgIENlbGxT
cGFuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCisgICAgICAgIDogbV9zdGFydChzdGFy
dCkKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIHN0
YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFydDsKKyAg
ICB1bnNpZ25lZCBtX2VuZDsKK307CisKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIGNsYXNzIFJl
bmRlclRhYmxlUm93OwogCkBAIC0xNzAsNiArMTg3LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29s
IGhhc092ZXJmbG93aW5nQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dpbmdDZWxscy5z
aXplKCkgfHwgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOyB9CiAKKyAg
ICBDZWxsU3BhbiBmdWxsVGFibGVSb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gQ2VsbFNwYW4oMCwg
bV9ncmlkLnNpemUoKSk7IH0KKyAgICBDZWxsU3BhbiBmdWxsVGFibGVDb2x1bW5TcGFuKCkgY29u
c3QgeyByZXR1cm4gQ2VsbFNwYW4oMCwgdGFibGUoKS0+Y29sdW1ucygpLnNpemUoKSk7IH0KKwor
ICAgIENlbGxTcGFuIGRpcnRpZWRSb3dzKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KSBj
b25zdDsKKyAgICBDZWxsU3BhbiBkaXJ0aWVkQ29sdW1ucyhjb25zdCBMYXlvdXRSZWN0JiByZXBh
aW50UmVjdCkgY29uc3Q7CisKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsK
IAogICAgIFZlY3RvcjxSb3dTdHJ1Y3Q+IG1fZ3JpZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>