<?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>52644</bug_id>
          
          <creation_ts>2011-01-18 11:39:21 -0800</creation_ts>
          <short_desc>Stop instantiating legacy editing positions in DeleteSelectionCommand, IndentOudentCommand, InsertLineBreakCommand, InsertListCOmmand.cpp, InsertParagraphSeparatorCommand, and htmlediting.cpp</short_desc>
          <delta_ts>2011-01-18 13:33:51 -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>HTML Editing</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>335964</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 11:39:21 -0800</bug_when>
    <thetext>Cleanup in the following files:
Source/WebCore/editing/CompositeEditCommand.cpp
Source/WebCore/editing/DeleteSelectionCommand.cpp
Source/WebCore/editing/IndentOutdentCommand.cpp
Source/WebCore/editing/InsertLineBreakCommand.cpp
Source/WebCore/editing/InsertListCommand.cpp
Source/WebCore/editing/InsertParagraphSeparatorCommand.cpp
Source/WebCore/editing/htmlediting.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335970</commentid>
    <comment_count>1</comment_count>
      <attachid>79302</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 11:49:16 -0800</bug_when>
    <thetext>Created attachment 79302
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336000</commentid>
    <comment_count>2</comment_count>
      <attachid>79302</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 12:26:55 -0800</bug_when>
    <thetext>Comment on attachment 79302
cleanup

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

OK.

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:111
&gt;      // For HRs, we&apos;ll get a position at (HR,1) when hitting delete from the beginning of the previous line, or (HR,0) when forward deleting,

Seems we need to update this comment?

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:321
&gt; +    switch (position.anchorType()) {
&gt; +    case Position::PositionIsOffsetInAnchor:
&gt; +        if (position.containerNode() == node-&gt;parentNode() &amp;&amp; static_cast&lt;unsigned&gt;(position.offsetInContainerNode()) &gt; node-&gt;nodeIndex())
&gt; +            position.moveToOffset(position.offsetInContainerNode() - 1);

I wonder if this method should move onto the Position class.

I also wonder if DeleteSelectionCommand wants to be using RangeEndPoint intsead of Position, since don&apos;t ranges do this sort of thing automatically?

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:489
&gt; +                    m_downstreamEnd.moveToOffset(m_downstreamEnd.deprecatedEditingOffset() - 1);

I guess moveToOffset does not ASSERT that the offset is valid?

Can we use something other than deprecatedEditingOffset() here? or is that a separate change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336023</commentid>
    <comment_count>3</comment_count>
      <attachid>79302</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 12:55:19 -0800</bug_when>
    <thetext>Comment on attachment 79302
cleanup

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

Thanks for the review, Eric.  Unfortunately, I can&apos;t make further changes because of the chicken or the egg dilemma.

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:111
&gt;&gt;      // For HRs, we&apos;ll get a position at (HR,1) when hitting delete from the beginning of the previous line, or (HR,0) when forward deleting,
&gt; 
&gt; Seems we need to update this comment?

This comment is about start/end passed onto DeleteSelectionCommand, which is probably generated by upstream/downstream, and not about the positions we&apos;re expanding to.  So I will not remove.

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:321
&gt;&gt; +            position.moveToOffset(position.offsetInContainerNode() - 1);
&gt; 
&gt; I wonder if this method should move onto the Position class.
&gt; 
&gt; I also wonder if DeleteSelectionCommand wants to be using RangeEndPoint intsead of Position, since don&apos;t ranges do this sort of thing automatically?

You&apos;re right.  DeleteSelectionCommand should be using a Range but I guess that refactoring can only be done after we got rid of legacy editing positions because ranges aren&apos;t compatible with legacy editing positions.

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:489
&gt;&gt; +                    m_downstreamEnd.moveToOffset(m_downstreamEnd.deprecatedEditingOffset() - 1);
&gt; 
&gt; I guess moveToOffset does not ASSERT that the offset is valid?
&gt; 
&gt; Can we use something other than deprecatedEditingOffset() here? or is that a separate change?

I can call offsetInContainerNode but that isn&apos;t really correct in the sense that the code around it doesn&apos;t really consider positions before/after node, and they also call .node() all over the place.  I&apos;m planning to remove all calls to Position::node(), and not calling deprecatedEditingOffset() here should be a part of that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336059</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 13:33:51 -0800</bug_when>
    <thetext>Committed r76057: &lt;http://trac.webkit.org/changeset/76057&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79302</attachid>
            <date>2011-01-18 11:49:16 -0800</date>
            <delta_ts>2011-01-18 12:55:19 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-52644-20110118114915.patch</filename>
            <type>text/plain</type>
            <size>20460</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTYwYmQ2MTE5ZjM1ZjJlMTNjYTYwNDFhNDY4ZmI0NGM2YmY2ZWM5Li42
MjE1MzE3OTVlNDk1NjU1MjhhZjM1Y2VlNTgxYTFlMTRjN2FiODNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTEtMDEtMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RvcCBp
bnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucyBpbiBDb21wb3NpdGVFZGl0Q29t
bWFuZCwgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCwgSW5kZW50T3VkZW50Q29tbWFuZCwKKyAgICAg
ICAgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZCwgSW5zZXJ0TGlzdENPbW1hbmQuY3BwLCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLCBhbmQgaHRtbGVkaXRpbmcuY3BwCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0NAorCisgICAgICAgIFRo
aXMgaXMgYSBjbGVhbnVwIHRvIHN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBwb3Np
dGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0ZXN0cy4KKyAgICAgICAgZmlyc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlIGluIGh0bWxl
ZGl0aW5nLmggYXJlIG5vdCB1cGRhdGVkCisgICAgICAgIGJlY2F1c2UgZG9pbmcgc28gcmVxdWly
ZXMgc2lnbmlmaWNhbnQgY29kZSBjaGFuZ2VzLiBUaGV5IGFyZSB0cmFja2VkIG9uIHRoZSBidWcg
NTI2NDIuCisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVN0YXJ0
RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgpOgorICAgICAgICAq
IGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpk
b0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RD
b21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlz
dENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY2xvc2luZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTGlz
dENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAgICAgICAo
V2ViQ29yZTo6YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZSk6CisKIDIwMTEtMDEtMTQgIFRvbnkg
R2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1
aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IDI0YzE5NjgxYjU3MGNmOTgwN2YwOWEyZWRlMzczZjFkOGY3MzA3OWUu
LjVlNmZkNDc0YWMyZjIzZjVhM2U3ZWZmYzQ4MzA5ZDgzZTYzOTQzNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTExLDkg
KzExMSw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVN0YXJ0RW5k
KFBvc2l0aW9uJiBzdGFydCwgUG9zaXRpb24mIGVuZCkKICAgICAvLyBGb3IgSFJzLCB3ZSdsbCBn
ZXQgYSBwb3NpdGlvbiBhdCAoSFIsMSkgd2hlbiBoaXR0aW5nIGRlbGV0ZSBmcm9tIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHByZXZpb3VzIGxpbmUsIG9yIChIUiwwKSB3aGVuIGZvcndhcmQgZGVsZXRp
bmcsCiAgICAgLy8gYnV0IGluIHRoZXNlIGNhc2VzLCB3ZSB3YW50IHRvIGRlbGV0ZSBpdCwgc28g
bWFudWFsbHkgZXhwYW5kIHRoZSBzZWxlY3Rpb24KICAgICBpZiAoc3RhcnQubm9kZSgpLT5oYXNU
YWdOYW1lKGhyVGFnKSkKLSAgICAgICAgc3RhcnQgPSBQb3NpdGlvbihzdGFydC5ub2RlKCksIDAp
OworICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOwogICAg
IGVsc2UgaWYgKGVuZC5ub2RlKCktPmhhc1RhZ05hbWUoaHJUYWcpKQotICAgICAgICBlbmQgPSBQ
b3NpdGlvbihlbmQubm9kZSgpLCAxKTsKKyAgICAgICAgZW5kID0gcG9zaXRpb25BZnRlck5vZGUo
ZW5kLm5vZGUoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSB1c2VkIHNvIHRo
YXQgbW92ZVBhcmFncmFwaHMgY2FuIGF2b2lkIHRoZSBidWdzIGluIHNwZWNpYWwgZWxlbWVudCBl
eHBhbnNpb24uCiAgICAgaWYgKCFtX2V4cGFuZEZvclNwZWNpYWxFbGVtZW50cykKQEAgLTMxNSwx
MCArMzE1LDIyIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwoTm9k
ZSogbm9kZSwgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gcG9zaXRp
b24ubm9kZSgpICYmIG5vZGUtPm5vZGVJbmRleCgpIDwgKHVuc2lnbmVkKXBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCi0gICAgICAgIHBvc2l0aW9uID0gUG9zaXRpb24ocG9zaXRp
b24ubm9kZSgpLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gMSk7Ci0gICAg
aWYgKHBvc2l0aW9uLm5vZGUoKSA9PSBub2RlIHx8IHBvc2l0aW9uLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2Yobm9kZSkpCi0gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUobm9kZSk7CisgICAgc3dpdGNoIChwb3NpdGlvbi5hbmNob3JUeXBlKCkpIHsKKyAgICBjYXNl
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CisgICAgICAgIGlmIChwb3NpdGlv
bi5jb250YWluZXJOb2RlKCkgPT0gbm9kZS0+cGFyZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPiBub2RlLT5ub2RlSW5k
ZXgoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSAtIDEpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jb250YWlucyhw
b3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQorICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQb3Np
dGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOgorICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMo
cG9zaXRpb24uYW5jaG9yTm9kZSgpKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25J
blBhcmVudEFmdGVyTm9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQb3NpdGlv
bjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKKyAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBv
c2l0aW9uLmFuY2hvck5vZGUoKSkpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5Q
YXJlbnRCZWZvcmVOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUp
CkBAIC0zNjIsNyArMzc0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVO
b2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CiAgICAg
ICAgIFJlbmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyICYm
IHItPmlzVGFibGVDZWxsKCkgJiYgdG9SZW5kZXJUYWJsZUNlbGwociktPmNvbnRlbnRIZWlnaHQo
KSA8PSAwKQotICAgICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihQb3NpdGlvbihub2Rl
LCAwKSk7CisgICAgICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGZpcnN0UG9zaXRpb25J
bk5vZGUobm9kZS5nZXQoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzgx
LDEyICszOTMsMTMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKFBh
c3NSZWZQdHI8Tm9kZT4gbm9kZSkKIAogc3RhdGljIHZvaWQgdXBkYXRlUG9zaXRpb25Gb3JUZXh0
UmVtb3ZhbChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKLSAgICBpZiAocG9zaXRpb24ubm9kZSgpID09IG5vZGUpIHsKLSAgICAgICAgaWYg
KHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiBvZmZzZXQgKyBjb3VudCkKLSAg
ICAgICAgICAgIHBvc2l0aW9uID0gUG9zaXRpb24ocG9zaXRpb24ubm9kZSgpLCBwb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gY291bnQpOwotICAgICAgICBlbHNlIGlmIChwb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gb2Zmc2V0KQotICAgICAgICAgICAgcG9z
aXRpb24gPSBQb3NpdGlvbihwb3NpdGlvbi5ub2RlKCksIG9mZnNldCk7Ci0gICAgfQorICAgIGlm
IChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciB8fCBwb3NpdGlvbi5jb250YWluZXJOb2RlKCkgIT0gbm9kZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID4gb2Zmc2V0ICsg
Y291bnQpCisgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChwb3NpdGlvbi5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSAtIGNvdW50KTsKKyAgICBlbHNlIGlmIChwb3NpdGlvbi5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSA+IG9mZnNldCkKKyAgICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KG9m
ZnNldCk7CiB9CiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZGVsZXRlVGV4dEZyb21O
b2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3Vu
dCkKQEAgLTQ2Myw3ICs0NzYsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAKICAgICAgICAgLy8gaGFuZGxlIGRlbGV0aW5nIGFs
bCBub2RlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHNlbGVjdGVkCiAgICAgICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUgIT0gbV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNv
bXBhcmVQb3NpdGlvbnMoUG9zaXRpb24obm9kZS5nZXQoKSwgMCksIG1fZG93bnN0cmVhbUVuZCkg
Pj0gMCkgeworICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBtX2Rvd25zdHJlYW1FbmQpID49IDApIHsKICAgICAg
ICAgICAgICAgICAvLyB0cmF2ZXJzZU5leHRTaWJsaW5nIGp1c3QgYmxldyBwYXN0IHRoZSBlbmQg
cG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2RlID0gMDsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmlzRGVzY2VuZGFu
dE9mKG5vZGUuZ2V0KCkpKSB7CkBAIC00NzEsOCArNDg0LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgICAgICAvLyBpZiB3
ZSBqdXN0IHJlbW92ZWQgYSBub2RlIGZyb20gdGhlIGVuZCBjb250YWluZXIsIHVwZGF0ZSBlbmQg
cG9zaXRpb24gc28gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgd2lsbCB3b3Jr
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX2Rvd25zdHJlYW1F
bmQubm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2Rvd25zdHJlYW1FbmQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5ub2RlSW5kZXgoKSA8ICh1bnNpZ25lZCltX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9IFBv
c2l0aW9uKG1fZG93bnN0cmVhbUVuZC5ub2RlKCksIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVu
ZC5tb3ZlVG9PZmZzZXQobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
LSAxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2Rl
LmdldCgpKTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CkBAIC01MTMs
NyArNTI3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVs
ZXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBuLT5ub2RlSW5kZXgo
KSArIDE7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
Q2hpbGRyZW5JblJhbmdlKG1fZG93bnN0cmVhbUVuZC5ub2RlKCksIG9mZnNldCwgbV9kb3duc3Ry
ZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBt
X2Rvd25zdHJlYW1FbmQgPSBQb3NpdGlvbihtX2Rvd25zdHJlYW1FbmQubm9kZSgpLCBvZmZzZXQp
OworICAgICAgICAgICAgICAgICAgICBtX2Rvd25zdHJlYW1FbmQubW92ZVRvT2Zmc2V0KG9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmluZGV4IDEzZDBm
ODg2ZGNkOWRmY2JiZjNlNzBhZjM5ZTJmMTYxOTMxYTMwZGUuLjlkMWFkYzE3NTgwNTEyNTYzMWNj
ZTE5ODUwNzYwNTYwYTI1YTUzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5k
ZW50T3V0ZGVudENvbW1hbmQuY3BwCkBAIC0xMzQsMTEgKzEzNCwxMSBAQCB2b2lkIEluZGVudE91
dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKCkKICAgICB9CiAgICAgCiAgICAgLy8gVGhl
IHNlbGVjdGlvbiBpcyBpbnNpZGUgYSBibG9ja3F1b3RlIGkuZS4gZW5jbG9zaW5nTm9kZSBpcyBh
IGJsb2NrcXVvdGUKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25JbkVuY2xvc2luZ0Jsb2Nr
ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVuY2xvc2luZ05vZGUsIDApKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25JbkVuY2xvc2luZ0Jsb2NrID0gVmlzaWJsZVBvc2l0aW9uKGZp
cnN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nTm9kZSkpOwogICAgIC8vIElmIHRoZSBibG9ja3F1
b3RlIGlzIGlubGluZSwgdGhlIHN0YXJ0IG9mIHRoZSBlbmNsb3NpbmcgYmxvY2sgY29pbmNpZGVz
IHdpdGgKICAgICAvLyBwb3NpdGlvbkluRW5jbG9zaW5nQmxvY2suCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZFbmNsb3NpbmdCbG9jayA9IChlbmNsb3NpbmdOb2RlLT5yZW5kZXJlcigpICYm
IGVuY2xvc2luZ05vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpID8gcG9zaXRpb25JbkVuY2xv
c2luZ0Jsb2NrIDogc3RhcnRPZkJsb2NrKHBvc2l0aW9uSW5FbmNsb3NpbmdCbG9jayk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGxhc3RQb3NpdGlvbkluRW5jbG9zaW5nQmxvY2sgPSBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24oZW5jbG9zaW5nTm9kZSwgZW5jbG9zaW5nTm9kZS0+Y2hpbGROb2RlQ291
bnQoKSkpOworICAgIFZpc2libGVQb3NpdGlvbiBsYXN0UG9zaXRpb25JbkVuY2xvc2luZ0Jsb2Nr
ID0gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShlbmNsb3NpbmdOb2RlKSk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mRW5jbG9zaW5nQmxvY2sgPSBlbmRPZkJsb2NrKGxhc3RQ
b3NpdGlvbkluRW5jbG9zaW5nQmxvY2spOwogICAgIGlmICh2aXNpYmxlU3RhcnRPZlBhcmFncmFw
aCA9PSBzdGFydE9mRW5jbG9zaW5nQmxvY2sgJiYKICAgICAgICAgdmlzaWJsZUVuZE9mUGFyYWdy
YXBoID09IGVuZE9mRW5jbG9zaW5nQmxvY2spIHsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIElu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKCkKICAgICB9CiAgICAgUmVmUHRy
PE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAg
IGluc2VydE5vZGVCZWZvcmUocGxhY2Vob2xkZXIsIHNwbGl0QmxvY2txdW90ZU5vZGUpOwotICAg
IG1vdmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCks
IGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmRPZlBhcmFncmFwaCksIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpLCB0cnVlKTsKKyAgICBtb3ZlUGFyYWdyYXBo
KHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGgpLCBlbmRPZlBhcmFncmFw
aCh2aXNpYmxlRW5kT2ZQYXJhZ3JhcGgpLCBwb3NpdGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIu
Z2V0KCkpLCB0cnVlKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBtZXJnZSB0aGlzIGZ1bmN0
aW9uIHdpdGggQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpmb3JtYXRTZWxlY3Rpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCmluZGV4
IDMwNzBlZGZjNmNlNTViMzdlYmU0NWU1NjcxZWFiZmJmYjNiZTM2OTAuLjExOTQwMjQ0MTNjNmZm
ZmFlMDNhZjUyN2QwNDc4ZWI3YWU3MTE5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtMTIxLDEzICsxMjEsMTMgQEAgdm9p
ZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKG5lZWRFeHRy
YUxpbmVCcmVhaykKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LT5j
bG9uZU5vZGUoZmFsc2UpLCBub2RlVG9JbnNlcnQpOwogICAgICAgICAKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZGluZ1Bvc2l0aW9uKFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgMCkp
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kaW5nUG9zaXRpb24ocG9zaXRpb25CZWZvcmVO
b2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihlbmRpbmdQb3NpdGlvbikpOwogICAgIH0gZWxzZSBpZiAocG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0gY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUoKSkpIHsKICAg
ICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEluc2VydCBhbiBleHRyYSBiciBvciAnXG4nIGlmIHRoZSBqdXN0IGluc2VydGVk
IG9uZSBjb2xsYXBzZWQuCi0gICAgICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihub2RlVG9JbnNlcnQuZ2V0KCksIDApKSkpCisgICAgICAgIGlmICgh
aXNTdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uQmVmb3JlTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkp
KSkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LT5jbG9uZU5vZGUo
ZmFsc2UpLmdldCgpLCBub2RlVG9JbnNlcnQuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVudEFmdGVyTm9k
ZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgVGV4dCogdGV4
dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLm5vZGUoKSk7CiAgICAgICAgIHNwbGl0VGV4
dE5vZGUodGV4dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQsIHRleHROb2RlKTsKLSAgICAgICAgUG9zaXRp
b24gZW5kaW5nUG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZSwgMCk7CisgICAgICAgIFBvc2l0
aW9uIGVuZGluZ1Bvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBIYW5kbGUgd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBhZnRlciB0aGUg
c3BsaXQKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuYnNwTm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZVRl
eHROb2RlKG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
Tm9kZUF0KG5ic3BOb2RlLmdldCgpLCBwb3NpdGlvbkJlZm9yZVRleHROb2RlKTsKLSAgICAgICAg
ICAgICAgICBlbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG5ic3BOb2RlLmdldCgpLCAwKTsKKyAg
ICAgICAgICAgICAgICBlbmRpbmdQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobmJzcE5v
ZGUuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCBiYjNjZDkzNjE0OTM0
YmIzM2QxODI0NjQwNWJiZGNjNzlhMmUxMTFjLi45MzQ4Nzg2MzRjZjA1YmQyZGM1MGE2NThiODRl
ZTVlZTNmNzE2MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
c3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcApAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBw
bHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IFF1CiAgICAg
ICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5ld0xpc3QgPSBjcmVhdGVIVE1MRWxlbWVudChk
b2N1bWVudCgpLCBsaXN0VGFnKTsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobmV3TGlz
dCwgbGlzdE5vZGUpOwogCi0gICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkSW5MaXN0ID0gZW5j
bG9zaW5nTGlzdENoaWxkKFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihsaXN0Tm9kZSwgMCkpLmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpLCBsaXN0Tm9kZS5nZXQoKSk7CisgICAgICAgICAgICBOb2Rl
KiBmaXJzdENoaWxkSW5MaXN0ID0gZW5jbG9zaW5nTGlzdENoaWxkKFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSkuZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCksIGxpc3ROb2RlLmdldCgpKTsKICAgICAgICAgICAgIE5vZGUqIG91dGVyQmxvY2sgPSBmaXJz
dENoaWxkSW5MaXN0LT5pc0Jsb2NrRmxvdygpID8gZmlyc3RDaGlsZEluTGlzdCA6IGxpc3ROb2Rl
LmdldCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25l
cyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2Rl
KGxpc3ROb2RlLmdldCgpKSwgbmV3TGlzdC5nZXQoKSwgb3V0ZXJCbG9jayk7CkBAIC0zMDIsNyAr
MzAyLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwKICAgICB9IGVsc2UKICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKG5vZGVUb0luc2VydCwgbGlzdE5vZGUpOwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIGluc2VydGlvblBvaW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVy
LmdldCgpLCAwKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gVmlzaWJs
ZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5nZXQoKSkpOwogICAgIG1v
dmVQYXJhZ3JhcGhzKHN0YXJ0LCBlbmQsIGluc2VydGlvblBvaW50LCB0cnVlKTsKIH0KIApAQCAt
MzQ1LDcgKzM0NSw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW5k
OjpsaXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvCiAgICAgaWYgKHByZXZpb3Vz
TGlzdCkKICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQsIHByZXZpb3VzTGlzdCk7
CiAgICAgZWxzZSBpZiAobmV4dExpc3QpCi0gICAgICAgIGluc2VydE5vZGVBdChsaXN0SXRlbUVs
ZW1lbnQsIFBvc2l0aW9uKG5leHRMaXN0LCAwKSk7CisgICAgICAgIGluc2VydE5vZGVBdChsaXN0
SXRlbUVsZW1lbnQsIHBvc2l0aW9uQmVmb3JlTm9kZShuZXh0TGlzdCkpOwogICAgIGVsc2Ugewog
ICAgICAgICAvLyBDcmVhdGUgdGhlIGxpc3QuCiAgICAgICAgIGxpc3RFbGVtZW50ID0gY3JlYXRl
SFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgbGlzdFRhZyk7CkBAIC0zNTYsNyArMzU2LDcgQEAgUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW8KICAgICAgICAgICAgIC8vIGJ5IGEgYnIgb3IgYSAnXG4nLCB3
aWxsIGludmFsaWRhdGUgc3RhcnQgYW5kIGVuZC4gIEluc2VydCAKICAgICAgICAgICAgIC8vIGEg
cGxhY2Vob2xkZXIgYW5kIHRoZW4gcmVjb21wdXRlIHN0YXJ0IGFuZCBlbmQuCiAgICAgICAgICAg
ICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKHN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24o
UG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9z
aXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLmdldCgpKTsKICAgICAgICAgICAgIGVuZCA9IHN0
YXJ0OwogICAgICAgICB9CiAKQEAgLTM3OSw3ICszNzksNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9z
aXRpbwogICAgICAgICAgICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKG9yaWdpbmFsU3RhcnQp
OwogICAgIH0KIAotICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnQsIGVuZCwgVmlzaWJsZVBvc2l0aW9u
KFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSksIHRydWUpOworICAgIG1vdmVQYXJhZ3Jh
cGgoc3RhcnQsIGVuZCwgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLmdldCgpKSwgdHJ1
ZSk7CiAKICAgICBpZiAobGlzdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBtZXJnZVdpdGhOZWln
aGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IDE4Mzgz
ODI2YjQ3YzY4ZWY4YWM1MGFhYTgzZDM2OWVmMzIzZDhjZTcuLjMyNWNlNDdjNjJhNzYwNWMwMmNi
YjI0MjU1YWE2OWJlYTI3NDAxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApAQCAtMjQyLDcgKzI0
Miw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgICAgIAogICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKHBhcmVudCk7CiAKLSAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24ocGFyZW50Lmdl
dCgpLCAwKSwgRE9XTlNUUkVBTSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKHBhcmVudC5nZXQoKSksIERPV05TVFJFQU0p
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM3OCw3ICszNzgsOCBAQCB2b2lk
IEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEhhbmRs
ZSB3aGl0ZXNwYWNlIHRoYXQgb2NjdXJzIGFmdGVyIHRoZSBzcGxpdAogICAgIGlmIChzcGxpdFRl
eHQpIHsKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIGluc2VydGlvblBvc2l0aW9u
ID0gUG9zaXRpb24oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLCAwKTsKKyAgICAgICAgaWYgKGlu
c2VydGlvblBvc2l0aW9uLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKQorICAgICAgICAgICAgaW5zZXJ0aW9uUG9zaXRpb24ubW92ZVRvT2Zmc2V0KDAp
OwogICAgICAgICBpZiAoIWluc2VydGlvblBvc2l0aW9uLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSkg
ewogICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IGFsbCB3aGl0ZXNwYWNlIGFuZCBpbnNlcnQgb25l
IG5vbi1icmVha2luZyBzcGFjZQogICAgICAgICAgICAgQVNTRVJUKCFpbnNlcnRpb25Qb3NpdGlv
bi5ub2RlKCktPnJlbmRlcmVyKCkgfHwgaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CkBAIC0zODgsNyArMzg5LDcgQEAg
dm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0
aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CisgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluTm9kZShibG9ja1RvSW5z
ZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSkpOwogICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlvbihz
dGFydEJsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRl
eCBkMDhhYzJlNmJhODFiMTAyNjg5YTE5MTE0NjRkYTQ5ZTlmODE1YmE0Li5jYjRmZDQzYzM0MWNh
M2JiMWMzOTM0Y2NkYWFkNzdhMTYyMjk5YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcApAQCAtMzI5LDcgKzMyOSw3IEBAIGJvb2wgaXNCbG9jayhjb25zdCBOb2RlKiBu
b2RlKQogLy8ga25vd2luZyBhYm91dCB0aGVzZSBraW5kcyBvZiBzcGVjaWFsIGNhc2VzLgogTm9k
ZSogZW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5cGUoUG9zaXRpb24obm9kZSwgMCksIGlzQmxvY2sp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5cGUo
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBpc0Jsb2NrKSk7CiB9CiAKIC8vIElu
dGVybmFsbHkgZWRpdGluZyB1c2VzICJpbnZhbGlkIiBwb3NpdGlvbnMgZm9yIGhpc3RvcmljYWwg
cmVhc29ucy4gIEZvcgpAQCAtNzA0LDcgKzcwNCw3IEBAIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdM
aXN0KE5vZGUqIG5vZGUpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgCi0gICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoUG9zaXRpb24obm9kZSwg
MCkpOworICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKSk7CiAgICAgCiAgICAgZm9yIChDb250YWluZXJOb2RlKiBuID0g
bm9kZS0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKQEAgLTcyMiw3
ICs3MjIsNyBAQCBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUgKm5vZGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIC8vIENoZWNrIGZvciBhIGxpc3QgaXRlbSBlbGVtZW50LCBv
ciBmb3IgYSBub2RlIHdob3NlIHBhcmVudCBpcyBhIGxpc3QgZWxlbWVudC4gIFN1Y2ggYSBub2Rl
CiAgICAgLy8gd2lsbCBhcHBlYXIgdmlzdWFsbHkgYXMgYSBsaXN0IGl0ZW0gKGJ1dCB3aXRob3V0
IGEgbGlzdCBtYXJrZXIpCi0gICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoUG9z
aXRpb24obm9kZSwgMCkpOworICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRo
aXMgZnVuY3Rpb24gaXMgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGlmIGl0IHN0YXJ0cyB3aXRoIG5v
ZGUgaW5zdGVhZCBvZiBub2RlLT5wYXJlbnROb2RlKCkKICAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
OyBuICYmIG4tPnBhcmVudE5vZGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewpAQCAtMTA4MSw3
ICsxMDgxLDggQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHAu
bm9kZSgpLT5kb2N1bWVudCgpLCBQb3NpdGlvbihwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgMCksIHJh
bmdlQ29tcGxpYW50RXF1aXZhbGVudChwKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUocC5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocCkp
OwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVl
KTsKIH0KIApAQCAtMTEwNCwxMSArMTEwNSwxMSBAQCBib29sIGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4oTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBv
c2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7
Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhQb3NpdGlv
bihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKzEpLCBzZWxlY3RlZFJhbmdl
LT5lbmRQb3NpdGlvbigpKSA8IDApCisgICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29t
cGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpLCBzZWxlY3RlZFJh
bmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9v
bCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBz
ZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOwotICAgIGlmIChlbmRJc1Zpc3VhbGx5U2FtZSAm
JiBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgUG9zaXRp
b24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2RlSW5kZXgoKSkpIDwgMCkKKyAgICBpZiAo
ZW5kSXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhzZWxlY3RlZFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpKSA8IDApCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgZW5k
SXNWaXN1YWxseVNhbWU7CkBAIC0xMTU3LDIzICsxMTU4LDIzIEBAIFZpc2libGVTZWxlY3Rpb24g
YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIE5vCiB7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIFZp
c2libGVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgCisKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHVwZGF0ZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICBOb2RlKiBiYXNlID0gc2VsZWN0
aW9uLmJhc2UoKS5ub2RlKCk7CiAgICAgTm9kZSogZXh0ZW50ID0gc2VsZWN0aW9uLmV4dGVudCgp
Lm5vZGUoKTsKICAgICBBU1NFUlQoYmFzZSk7CiAgICAgQVNTRVJUKGV4dGVudCk7Ci0gICAgCisK
ICAgICBpZiAoYmFzZSA9PSBub2RlIHx8IGJhc2UtPmlzRGVzY2VuZGFudE9mKG5vZGUpKSB7CiAg
ICAgICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgICAgICB1cGRhdGVkU2VsZWN0
aW9uLnNldEJhc2UoUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2RlSW5kZXgo
KSkpOworICAgICAgICB1cGRhdGVkU2VsZWN0aW9uLnNldEJhc2UocG9zaXRpb25JblBhcmVudEJl
Zm9yZU5vZGUobm9kZSkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChleHRlbnQgPT0gbm9kZSB8
fCBleHRlbnQtPmlzRGVzY2VuZGFudE9mKG5vZGUpKSB7CiAgICAgICAgIEFTU0VSVChub2RlLT5w
YXJlbnROb2RlKCkpOwotICAgICAgICB1cGRhdGVkU2VsZWN0aW9uLnNldEV4dGVudChQb3NpdGlv
bihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKSk7CisgICAgICAgIHVwZGF0
ZWRTZWxlY3Rpb24uc2V0RXh0ZW50KHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpKTsK
ICAgICB9Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIHVwZGF0ZWRTZWxlY3Rpb247CiB9CiAK
</data>
<flag name="review"
          id="70713"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>