<?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>121882</bug_id>
          
          <creation_ts>2013-09-24 17:14:28 -0700</creation_ts>
          <short_desc>Clean up some uses of first/lastChildSlow</short_desc>
          <delta_ts>2013-09-24 18:00:32 -0700</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>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932809</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-24 17:14:28 -0700</bug_when>
    <thetext>tighten typing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932815</commentid>
    <comment_count>1</comment_count>
      <attachid>212525</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-24 17:20:47 -0700</bug_when>
    <thetext>Created attachment 212525
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932820</commentid>
    <comment_count>2</comment_count>
      <attachid>212525</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-24 17:31:28 -0700</bug_when>
    <thetext>Comment on attachment 212525
patch

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

r=me

&gt; Source/WebCore/dom/Position.cpp:857
&gt; +    for (RenderObject *o = renderer.firstChild(); o &amp;&amp; o != stop; o = o-&gt;nextInPreOrder())

* placement

&gt; Source/WebCore/rendering/RenderBlock.cpp:1074
&gt; +    if (anonymousBlock-&gt;continuation() || anonymousBlock-&gt;beingDestroyed())
&gt;          return false;

We should postpone the continuation() check if possible, since it does a hash lookup.

&gt; Source/WebCore/rendering/RenderBlock.cpp:5956
&gt; -    RenderObject* firstLetterBlock = findFirstLetterBlock(this);
&gt; +    RenderElement* firstLetterBlock = findFirstLetterBlock(this);

I think we can make findFirstLetterBlock() return RenderBlock*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932830</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-24 18:00:32 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156377</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212525</attachid>
            <date>2013-09-24 17:20:47 -0700</date>
            <delta_ts>2013-09-24 17:31:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>random-slow-removal.patch</filename>
            <type>text/plain</type>
            <size>22861</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjM3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEzLTA5LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBzb21lIHVzZXMg
b2YgZmlyc3QvbGFzdENoaWxkU2xvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIxODgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGlnaHRlbiB0eXBpbmcgYW5kIHVzZSBmaXJzdC9sYXN0Q2hpbGQgaW5z
dGVhZC4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQpOgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbi5oOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW5NZXJnZUFub255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlQ29udGln
dW91c0Fub255bW91c0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Zmly
c3RMaW5lQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0
TGV0dGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lv
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSdWJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1YnlCZWZvcmVCbG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpydWJ5QWZ0ZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjps
YXN0UnVieVJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVDb3VudGVy
VmFsdWVzRnJvbUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMp
OgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OnRleHRSZW5kZXJlcklzTmVlZGVkKToKKwogMjAxMy0wOS0yNCAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIEpTQyBkZWJ1ZyBob29rcyB0
byBwYXNzIGEgQ2FsbEZyYW1lKiBpbnN0ZWFkIG9mIGEgRGVidWdnZXJDYWxsRnJhbWUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSwxMCArODUxLDEwIEBA
IHN0YXRpYyBpbnQgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KFJlbmQKICAgICByZXR1cm4gby0+
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QuaGVpZ2h0KCkgOiByZWN0
LndpZHRoKCk7CiB9CiAKLWJvb2wgUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVz
Y2VuZGFudHNXaXRoSGVpZ2h0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitib29sIFBvc2l0aW9u
OjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChjb25zdCBSZW5k
ZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJl
ci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3Qg
Km8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgbyAmJiBvICE9IHN0b3A7IG8gPSBvLT5u
ZXh0SW5QcmVPcmRlcigpKQorICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyLm5leHRJ
blByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOworICAgIGZvciAoUmVuZGVyT2JqZWN0ICpvID0gcmVu
ZGVyZXIuZmlyc3RDaGlsZCgpOyBvICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblByZU9yZGVy
KCkpCiAgICAgICAgIGlmIChvLT5ub25Qc2V1ZG9Ob2RlKCkpIHsKICAgICAgICAgICAgIGlmICgo
by0+aXNUZXh0KCkgJiYgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KG8sIHRvUmVuZGVyVGV4dChv
KS0+bGluZXNCb3VuZGluZ0JveCgpKSkKICAgICAgICAgICAgICAgICB8fCAoby0+aXNMaW5lQnJl
YWsoKSAmJiBib3VuZGluZ0JveExvZ2ljYWxIZWlnaHQobywgdG9SZW5kZXJMaW5lQnJlYWsobykt
PmxpbmVzQm91bmRpbmdCb3goKSkpCkBAIC05MzcsOCArOTM3LDkgQEAgYm9vbCBQb3NpdGlvbjo6
aXNDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSkgewotICAgICAgICBpZiAodG9SZW5k
ZXJCbG9jayhyZW5kZXJlciktPmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1Rh
Z05hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVk
Tm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKKyAgICAgICAgUmVu
ZGVyQmxvY2smIGJsb2NrID0gdG9SZW5kZXJCbG9jaygqcmVuZGVyZXIpOworICAgICAgICBpZiAo
YmxvY2subG9naWNhbEhlaWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFn
KSkgeworICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNE
ZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQogICAgICAgICAgICAgICAgIHJldHVybiBhdEZp
cnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25l
KGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAgICAgICAgIH0KQEAg
LTEyMjksNyArMTIzMCw3IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChF
QWYKICAgICAgICAgaW5saW5lQm94ID0gYm94ID8gYm94IDogY2FuZGlkYXRlOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlubGluZUJveCA9IDA7Ci0gICAgICAgIGlmIChjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKGRlcHJlY2F0ZWROb2RlKCkpICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRl
cmVyKSkgeworICAgICAgICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhkZXByZWNhdGVk
Tm9kZSgpKSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiBoYXNSZW5kZXJlZE5v
bkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodCh0b1JlbmRlckJsb2NrKCpyZW5kZXJlcikp
KSB7CiAgICAgICAgICAgICAvLyBUcnkgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHdp
dGggcG9zc2libHkgb3Bwb3NpdGUgZWRpdGFiaWxpdHkuIFRoaXMgaGVscHMgaW4gY2FzZSB8dGhp
c3wgaXMgaW4KICAgICAgICAgICAgIC8vIGFuIGVkaXRhYmxlIGJsb2NrIGJ1dCBzdXJyb3VuZGVk
IGJ5IG5vbi1lZGl0YWJsZSBwb3NpdGlvbnMuIEl0IGFjdHMgdG8gbmVnYXRlIHRoZSBsb2dpYyBh
dCB0aGUgYmVnaW5uaW5nCiAgICAgICAgICAgICAvLyBvZiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZp
c2libGVQb3NpdGlvbigpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDE1NjMz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbmxpbmVCb3g7CiBjbGFzcyBOb2Rl
OwogY2xhc3MgUmFuZ2U7CitjbGFzcyBSZW5kZXJFbGVtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0
OwogY2xhc3MgVGV4dDsKIApAQCAtMTg2LDcgKzE4Nyw3IEBAIHB1YmxpYzoKIAogICAgIFRleHRE
aXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OwogCi0gICAgc3RhdGljIGJvb2wgaGFz
UmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0Kik7
CisgICAgc3RhdGljIGJvb2wgaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhI
ZWlnaHQoY29uc3QgUmVuZGVyRWxlbWVudCYpOwogICAgIHN0YXRpYyBib29sIG5vZGVJc1VzZXJT
ZWxlY3ROb25lKE5vZGUqKTsKICNpZiBFTkFCTEUoVVNFUlNFTEVDVF9BTEwpCiAgICAgc3RhdGlj
IGJvb2wgbm9kZUlzVXNlclNlbGVjdEFsbChjb25zdCBOb2RlKik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNTYzMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw4
ICsxNjAsOSBAQCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAg
ICAgIHJldHVybiAoYXRTdGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlLT5wYXJlbnROb2RlKCkpOwogCiAg
ICAgaWYgKCFtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlz
UmVuZGVyQmxvY2tGbG93KCkpIHsKLSAgICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5sb2dpY2FsSGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7
Ci0gICAgICAgICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2Nl
bmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikpCisgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9
IHRvUmVuZGVyQmxvY2soKnJlbmRlcmVyKTsKKyAgICAgICAgaWYgKGJsb2NrLmxvZ2ljYWxIZWln
aHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAg
IGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KGJsb2NrKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQ
b3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKICAgICAgICAgICAg
IHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6
bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBQb3NpdGlvbigqdGhpcykuYXRF
ZGl0aW5nQm91bmRhcnkoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1NjMzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NDAsNyArOTQwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6bQogICAgICAgICBpZiAodXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpID09IGVk
aXRhYmxlUm9vdEZvclBvc2l0aW9uKHVwc3RyZWFtU3RhcnQpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgYmxvY2sgaXMgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCBhbmQgaXQgY29udGFpbnMg
bm8gdmlzaWJsZSBjb250ZW50LCBjcmVhdGUgYSBuZXcKICAgICAgICAgICAgIC8vIGJsb2NrIGJ1
dCBkb24ndCB0cnkgYW5kIG1vdmUgY29udGVudCBpbnRvIGl0LCBzaW5jZSB0aGVyZSdzIG5vdGhp
bmcgZm9yIG1vdmVQYXJhZ3JhcGhzIHRvIG1vdmUuCi0gICAgICAgICAgICBpZiAoIVBvc2l0aW9u
OjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodCh1cHN0cmVhbVN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgaWYgKCFQb3Np
dGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodG9SZW5k
ZXJFbGVtZW50KCp1cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRB
dCh1cHN0cmVhbVN0YXJ0KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXVwc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2OCwzMCArMTA2OCw0NCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVMZWZ0b3ZlckFub255bW91CiAgICAgY2hpbGQtPmRlc3Ryb3koKTsKIH0KIAotc3Rh
dGljIGJvb2wgY2FuTWVyZ2VDb250aWd1b3VzQW5vbnltb3VzQmxvY2tzKFJlbmRlck9iamVjdCog
b2xkQ2hpbGQsIFJlbmRlck9iamVjdCogcHJldiwgUmVuZGVyT2JqZWN0KiBuZXh0KQorc3RhdGlj
IGJvb2wgY2FuTWVyZ2VBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogYW5vbnltb3VzQmxvY2sp
CiB7Ci0gICAgaWYgKG9sZENoaWxkLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgfHwgb2xkQ2hp
bGQtPmlzSW5saW5lKCkgfHwgb2xkQ2hpbGQtPnZpcnR1YWxDb250aW51YXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKChwcmV2ICYmICghcHJldi0+aXNBbm9ueW1vdXNC
bG9jaygpIHx8IHRvUmVuZGVyQmxvY2socHJldiktPmNvbnRpbnVhdGlvbigpIHx8IHRvUmVuZGVy
QmxvY2socHJldiktPmJlaW5nRGVzdHJveWVkKCkpKQotICAgICAgICB8fCAobmV4dCAmJiAoIW5l
eHQtPmlzQW5vbnltb3VzQmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKG5leHQpLT5jb250aW51YXRp
b24oKSB8fCB0b1JlbmRlckJsb2NrKG5leHQpLT5iZWluZ0Rlc3Ryb3llZCgpKSkpCisgICAgaWYg
KGFub255bW91c0Jsb2NrLT5jb250aW51YXRpb24oKSB8fCBhbm9ueW1vdXNCbG9jay0+YmVpbmdE
ZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFRoaXMg
Y2hlY2sgaXNuJ3QgcmVxdWlyZWQgd2hlbiBpbmxpbmUgcnVuLWlucyBjYW4ndCBiZSBzcGxpdCBp
bnRvIGNvbnRpbnVhdGlvbnMuCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHByZXYgPyBwcmV2
LT5maXJzdENoaWxkU2xvdygpIDogbnVsbHB0cjsKLSAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPmlz
SW5saW5lKCkgJiYgY2hpbGQtPmlzUnVuSW4oKSkKKyAgICBpZiAoYW5vbnltb3VzQmxvY2stPmlz
UnVieVJ1bigpIHx8IGFub255bW91c0Jsb2NrLT5pc1J1YnlCYXNlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGlmICgocHJldiAmJiAocHJldi0+
aXNSdWJ5UnVuKCkgfHwgcHJldi0+aXNSdWJ5QmFzZSgpKSkKLSAgICAgICAgfHwgKG5leHQgJiYg
KG5leHQtPmlzUnVieVJ1bigpIHx8IG5leHQtPmlzUnVieUJhc2UoKSkpKQorc3RhdGljIGJvb2wg
Y2FuTWVyZ2VDb250aWd1b3VzQW5vbnltb3VzQmxvY2tzKFJlbmRlck9iamVjdCogb2xkQ2hpbGQs
IFJlbmRlck9iamVjdCogcHJldmlvdXMsIFJlbmRlck9iamVjdCogbmV4dCkKK3sKKyAgICBpZiAo
b2xkQ2hpbGQtPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSB8fCBvbGRDaGlsZC0+aXNJbmxpbmUo
KSB8fCBvbGRDaGlsZC0+dmlydHVhbENvbnRpbnVhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoIXByZXYgfHwgIW5leHQpCisgICAgaWYgKHByZXZpb3VzKSB7CisgICAg
ICAgIGlmICghcHJldmlvdXMtPmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIHByZXZpb3VzQW5vbnltb3VzQmxvY2sgPSB0
b1JlbmRlckJsb2NrKHByZXZpb3VzKTsKKyAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Js
b2NrKHByZXZpb3VzQW5vbnltb3VzQmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpc24ndCByZXF1aXJlZCB3aGVuIGlubGluZSBy
dW4taW5zIGNhbid0IGJlIHNwbGl0IGludG8gY29udGludWF0aW9ucy4KKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IHByZXZpb3VzQW5vbnltb3VzQmxvY2stPmZpcnN0Q2hpbGQoKTsKKyAg
ICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLT5pc0lubGluZSgpICYmIGNoaWxkLT5pc1J1bkluKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChuZXh0KSB7CisgICAg
ICAgIGlmICghbmV4dC0+aXNBbm9ueW1vdXNCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBSZW5kZXJCbG9jayogbmV4dEFub255bW91c0Jsb2NrID0gdG9SZW5kZXJC
bG9jayhuZXh0KTsKKyAgICAgICAgaWYgKCFjYW5NZXJnZUFub255bW91c0Jsb2NrKG5leHRBbm9u
eW1vdXNCbG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
cHJldmlvdXMgfHwgIW5leHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSB0eXBlcyBvZiB0aGUgYW5vbnltb3VzIGJsb2NrcyBtYXRjaCB1cC4KLSAgICByZXR1
cm4gcHJldi0+aXNBbm9ueW1vdXNDb2x1bW5zQmxvY2soKSA9PSBuZXh0LT5pc0Fub255bW91c0Nv
bHVtbnNCbG9jaygpCi0gICAgICAgICAgICYmIHByZXYtPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJs
b2NrKCkgPT0gbmV4dC0+aXNBbm9ueW1vdXNDb2x1bW5TcGFuQmxvY2soKTsKKyAgICByZXR1cm4g
cHJldmlvdXMtPmlzQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCkgPT0gbmV4dC0+aXNBbm9ueW1vdXND
b2x1bW5zQmxvY2soKQorICAgICAgICAmJiBwcmV2aW91cy0+aXNBbm9ueW1vdXNDb2x1bW5TcGFu
QmxvY2soKSA9PSBuZXh0LT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2NrKiBwYXJl
bnQsIFJlbmRlckJsb2NrKiBjaGlsZCkKQEAgLTU3MzgsNyArNTc1Miw3IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sKICAgICAgICAgaGFzUHNldWRvID0gZmlyc3RM
aW5lQmxvY2stPnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkUpOwogICAgICAgICBp
ZiAoaGFzUHNldWRvKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cGFyZW50QmxvY2sgPSBmaXJzdExpbmVCbG9jay0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlckVs
ZW1lbnQqIHBhcmVudEJsb2NrID0gZmlyc3RMaW5lQmxvY2stPnBhcmVudCgpOwogICAgICAgICAv
LyBXZSBpbmNsdWRlIGlzUmVuZGVyQnV0dG9uIGluIHRoaXMgY2hlY2sgYmVjYXVzZSBidXR0b25z
IGFyZQogICAgICAgICAvLyBpbXBsZW1lbnRlZCB1c2luZyBmbGV4IGJveCBidXQgc2hvdWxkIHN0
aWxsIHN1cHBvcnQgZmlyc3QtbGluZS4gVGhlCiAgICAgICAgIC8vIGZsZXggYm94IHNwZWMgcmVx
dWlyZXMgdGhhdCBmbGV4IGJveCBkb2VzIG5vdCBzdXBwb3J0IGZpcnN0LWxpbmUsCkBAIC01NzQ2
LDkgKzU3NjAsOCBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAg
ICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBidXR0b25zIGFyZSBpbXBsZW1lbnRlZCB3aXRo
IGFsaWduLWl0ZW1zIGluc3RlYWQKICAgICAgICAgLy8gb2YgZmxleGJveC4KICAgICAgICAgaWYg
KGZpcnN0TGluZUJsb2NrLT5pc1JlcGxhY2VkKCkgfHwgZmlyc3RMaW5lQmxvY2stPmlzRmxvYXRp
bmcoKQotICAgICAgICAgICAgfHwgIXBhcmVudEJsb2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENo
aWxkU2xvdygpICE9IGZpcnN0TGluZUJsb2NrIHx8ICghcGFyZW50QmxvY2stPmlzUmVuZGVyQmxv
Y2tGbG93KCkgJiYgIXBhcmVudEJsb2NrLT5pc1JlbmRlckJ1dHRvbigpKSkKKyAgICAgICAgICAg
IHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RDaGlsZCgpICE9IGZpcnN0TGlu
ZUJsb2NrIHx8ICghcGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXBhcmVudEJs
b2NrLT5pc1JlbmRlckJ1dHRvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwYXJlbnRCbG9jay0+aXNSZW5kZXJCbG9jaygp
KTsKICAgICAgICAgZmlyc3RMaW5lQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudEJsb2NrKTsK
ICAgICB9IAogICAgIApAQCAtNTk0MCw1MSArNTk1Myw1MiBAQCB2b2lkIFJlbmRlckJsb2NrOjp1
cGRhdGVGaXJzdExldHRlcigpCiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZXN0cm95IHRo
ZSBmaXJzdC1sZXR0ZXIgb2JqZWN0IGlmIGl0IGlzIG5vIGxvbmdlciB0aGUgZmlyc3QgY2hpbGQu
IE5lZWQgdG8gZmluZAogICAgIC8vIGFuIGVmZmljaWVudCB3YXkgdG8gY2hlY2sgZm9yIHRoYXQg
c2l0dWF0aW9uIHRob3VnaCBiZWZvcmUgaW1wbGVtZW50aW5nIGFueXRoaW5nLgotICAgIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IGZpbmRGaXJzdExldHRlckJsb2NrKHRoaXMpOwor
ICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2sgPSBmaW5kRmlyc3RMZXR0ZXJCbG9j
ayh0aGlzKTsKICAgICBpZiAoIWZpcnN0TGV0dGVyQmxvY2spCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIERyaWxsIGludG8gaW5saW5lcyBsb29raW5nIGZvciBvdXIgZmlyc3QgdGV4dCBjaGls
ZC4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0
Q2hpbGRTbG93KCk7Ci0gICAgd2hpbGUgKGN1cnJDaGlsZCkgewotICAgICAgICBpZiAoY3VyckNo
aWxkLT5pc1RleHQoKSkKKyAgICAvLyBEcmlsbCBpbnRvIGlubGluZXMgbG9va2luZyBmb3Igb3Vy
IGZpcnN0IHRleHQgZGVzY2VuZGFudC4KKyAgICBSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBm
aXJzdExldHRlckJsb2NrLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsK
KyAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzVGV4dCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzTGlzdE1hcmtlcigpKQotICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICBlbHNlIGlmIChjdXJyQ2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgaWYg
KGN1cnJDaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAg
ICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkU2xvdygpOworICAg
ICAgICBSZW5kZXJFbGVtZW50JiBjdXJyZW50ID0gdG9SZW5kZXJFbGVtZW50KCpkZXNjZW5kYW50
KTsKKyAgICAgICAgaWYgKGN1cnJlbnQuaXNMaXN0TWFya2VyKCkpCisgICAgICAgICAgICBkZXNj
ZW5kYW50ID0gY3VycmVudC5uZXh0U2libGluZygpOworICAgICAgICBlbHNlIGlmIChjdXJyZW50
LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgaWYgKGN1
cnJlbnQuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgICAg
ICAgICAgZGVzY2VuZGFudCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxk
LT5uZXh0U2libGluZygpOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJDaGlsZC0+aXNSZXBsYWNl
ZCgpIHx8IGN1cnJDaGlsZC0+aXNSZW5kZXJCdXR0b24oKSB8fCBjdXJyQ2hpbGQtPmlzTWVudUxp
c3QoKSkKKyAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBjdXJyZW50Lm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc1JlcGxhY2VkKCkgfHwgY3VycmVudC5pc1JlbmRl
ckJ1dHRvbigpIHx8IGN1cnJlbnQuaXNNZW51TGlzdCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGVsc2UgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoRklSU1Rf
TEVUVEVSKSAmJiBjdXJyQ2hpbGQtPmNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigpKSAgeworICAg
ICAgICBlbHNlIGlmIChjdXJyZW50LnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRF
UikgJiYgY3VycmVudC5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkgIHsKICAgICAgICAgICAg
IC8vIFdlIGZvdW5kIGEgbG93ZXItbGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2gg
c3VwZXJzZWRlcyB0aGUgaGlnaGVyLWxldmVsIHN0eWxlCi0gICAgICAgICAgICBmaXJzdExldHRl
ckJsb2NrID0gY3VyckNoaWxkOwotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5m
aXJzdENoaWxkU2xvdygpOworICAgICAgICAgICAgZmlyc3RMZXR0ZXJCbG9jayA9ICZjdXJyZW50
OworICAgICAgICAgICAgZGVzY2VuZGFudCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZFNs
b3coKTsKKyAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsKICAg
ICB9CiAKLSAgICBpZiAoIWN1cnJDaGlsZCkKKyAgICBpZiAoIWRlc2NlbmRhbnQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBp
dCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAogICAgIC8vIHRvIHVw
ZGF0ZSBpdC4KLSAgICBpZiAoY3VyckNoaWxkLT5wYXJlbnQoKS0+c3R5bGUoKS0+c3R5bGVUeXBl
KCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoZmly
c3RMZXR0ZXJCbG9jaywgY3VyckNoaWxkKTsKKyAgICBpZiAoZGVzY2VuZGFudC0+cGFyZW50KCkt
PnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgeworICAgICAgICB1cGRhdGVG
aXJzdExldHRlclN0eWxlKGZpcnN0TGV0dGVyQmxvY2ssIGRlc2NlbmRhbnQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFjdXJyQ2hpbGQtPmlzVGV4dCgpKQorICAgIGlmICgh
ZGVzY2VuZGFudC0+aXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE91ciBsYXlv
dXQgc3RhdGUgaXMgbm90IHZhbGlkIGZvciB0aGUgcmVwYWludHMgd2UgYXJlIGdvaW5nIHRvIHRy
aWdnZXIgYnkKICAgICAvLyBhZGRpbmcgYW5kIHJlbW92aW5nIGNoaWxkcmVuIG9mIGZpcnN0TGV0
dGVyQ29udGFpbmVyLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxl
cigmdmlldygpKTsKIAotICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoZmlyc3RMZXR0ZXJC
bG9jaywgdG9SZW5kZXJUZXh0KGN1cnJDaGlsZCkpOworICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVu
ZGVyZXIoZmlyc3RMZXR0ZXJCbG9jaywgdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpKTsKIH0KIAog
Ly8gSGVscGVyIG1ldGhvZHMgZm9yIG9idGFpbmluZyB0aGUgbGFzdCBsaW5lLCBjb21wdXRpbmcg
bGluZSBjb3VudHMgYW5kIGhlaWdodHMgZm9yIGxpbmUgY291bnRzCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMTU2MzM5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5Nyw3ICs0OTcsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1JlZ2lv
CiAgICAgICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsK
KyAgICAgICAgUmVuZGVyRWxlbWVudCogb2JqZWN0ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAg
ICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBmbG93IGFueSBvZiBpdHMgY2hp
bGRyZW4gaW4gdGhpcyByZWdpb24sCiAgICAgICAgIC8vIHdlIGRvIG5vdCBjb21wdXRlIGFueSBz
dHlsZSBmb3IgdGhlbSBpbiB0aGlzIHJlZ2lvbi4KICAgICAgICAgaWYgKCFmbG93VGhyZWFkKCkt
Pm9iamVjdEluRmxvd1JlZ2lvbihvYmplY3QsIHRoaXMpKQpAQCAtNTc4LDkgKzU3OCw5IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclJlZ2lvbjo6Y28KICAgICByZXR1cm4gcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUucmVsZWFzZSgpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6Y29t
cHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3Zv
aWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRl
ckVsZW1lbnQqIG9iamVjdCkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmpl
Y3QtPmZpcnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAKICAgICAgICAgUmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZW5kZXJPYmplY3RSZWdpb25T
dHlsZS5maW5kKGNoaWxkKTsKIApAQCAtNjAwLDcgKzYwMCw4IEBAIHZvaWQgUmVuZGVyUmVnaW9u
Ojpjb21wdXRlQ2hpbGRyZW5TdHlsZUkKIAogICAgICAgICBzZXRPYmplY3RTdHlsZUluUmVnaW9u
KGNoaWxkLCBjaGlsZFN0eWxlSW5SZWdpb24sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIAot
ICAgICAgICBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKGNoaWxkKTsKKyAgICAgICAgaWYg
KGNoaWxkLT5pc1JlbmRlckVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbXB1dGVDaGlsZHJlblN0
eWxlSW5SZWdpb24odG9SZW5kZXJFbGVtZW50KGNoaWxkKSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAxNTYzMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5MCw3ICsxOTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnN0YWxsRmxv
d1RocmVhZCgpOwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5S
ZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCBjb21wdXRlQ2hpbGRyZW5TdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHZvaWQgY29tcHV0ZUNoaWxkcmVu
U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50Kik7CiAgICAgdm9pZCBzZXRPYmplY3RT
dHlsZUluUmVnaW9uKFJlbmRlck9iamVjdCosIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+LCBib29s
IG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIAogICAgIHZvaWQgY2hlY2tSZWdpb25TdHlsZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAkocmV2aXNpb24g
MTU2MzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSwxNSArNzEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUFm
dGVyQmxvY2soY29ucwogICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0eWxl
KCktPnN0eWxlVHlwZSgpID09IEFGVEVSOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlckJsb2Nr
KiBydWJ5QmVmb3JlQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQorc3RhdGljIGlubGlu
ZSBSZW5kZXJCbG9jayogcnVieUJlZm9yZUJsb2NrKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJ1Ynkp
CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGRTbG93KCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGQoKTsKICAgICByZXR1cm4g
aXNSdWJ5QmVmb3JlQmxvY2soY2hpbGQpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOwogfQog
Ci1zdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBSZW5kZXJP
YmplY3QqIHJ1YnkpCitzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhj
b25zdCBSZW5kZXJFbGVtZW50KiBydWJ5KQogewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBy
dWJ5LT5sYXN0Q2hpbGRTbG93KCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxh
c3RDaGlsZCgpOwogICAgIHJldHVybiBpc1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKIH0KIApAQCAtOTEsOSArOTEsOSBAQCBzdGF0aWMgUmVuZGVyQmxv
Y2sqIGNyZWF0ZUFub255bW91c1J1YnlJCiAgICAgcmV0dXJuIG5ld0Jsb2NrOwogfQogCi1zdGF0
aWMgUmVuZGVyUnVieVJ1biogbGFzdFJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQor
c3RhdGljIFJlbmRlclJ1YnlSdW4qIGxhc3RSdWJ5UnVuKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJ1
YnkpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZFNsb3coKTsK
KyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkKCk7CiAgICAgaWYgKGNo
aWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpOwogICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigpIHx8
IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2socnVi
eSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAkocmV2aXNpb24gMTU2MzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTUsMTIgKzU5NSwxMiBAQCB2b2lk
IHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPCiAgICAgICAgICAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgICAgICAgICB3cml0ZVRleHRSdW4odHMsIHRleHQs
ICpib3gpOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gby5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSwgYmVoYXZpb3IpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHRvUmVuZGVyRWxl
bWVudChvKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxLCBiZWhh
dmlvcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoby5pc1dpZGdldCgpKSB7CkBAIC05
MTQsMTEgKzkxNCwxMSBAQCBTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihFbGVtZW50KiBl
CiAgICAgcmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24odG9SZW5kZXJCb3gocmVuZGVyZXIp
LCBiZWhhdmlvciB8IFJlbmRlckFzVGV4dFNob3dBbGxMYXllcnMpOwogfQogCi1zdGF0aWMgdm9p
ZCB3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4oVGV4dFN0cmVhbSYgc3RyZWFtLCBSZW5k
ZXJPYmplY3QqIHBhcmVudCwgYm9vbCYgaXNGaXJzdENvdW50ZXIpCitzdGF0aWMgdm9pZCB3cml0
ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4oVGV4dFN0cmVhbSYgc3RyZWFtLCBSZW5kZXJFbGVt
ZW50KiBwYXJlbnQsIGJvb2wmIGlzRmlyc3RDb3VudGVyKQogewogICAgIGlmICghcGFyZW50KQog
ICAgICAgICByZXR1cm47Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gcGFyZW50LT5m
aXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlz
Q291bnRlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzRmlyc3RDb3VudGVyKQogICAgICAgICAg
ICAgICAgIHN0cmVhbSA8PCAiICI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSwxMiArMTM1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0TGF5b3V0QXR0cmlidXQK
ICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmaW5kUHJldmlvdXNBbmROZXh0QXR0cmli
dXRlcyhSZW5kZXJPYmplY3QqIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBsb2NhdGVFbGVt
ZW50LCBib29sJiBzdG9wQWZ0ZXJOZXh0LCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyomIHByZXZp
b3VzLCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyomIG5leHQpCitzdGF0aWMgaW5saW5lIGJvb2wg
ZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMoUmVuZGVyRWxlbWVudCogc3RhcnQsIFJlbmRl
clNWR0lubGluZVRleHQqIGxvY2F0ZUVsZW1lbnQsIGJvb2wmIHN0b3BBZnRlck5leHQsIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzKiYgcHJldmlvdXMsIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiYg
bmV4dCkKIHsKICAgICBBU1NFUlQoc3RhcnQpOwogICAgIEFTU0VSVChsb2NhdGVFbGVtZW50KTsK
ICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGl0ZXJhdGl2ZS4KLSAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJT
VkdJbmxpbmVUZXh0KiB0ZXh0ID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KGNoaWxkKTsKICAgICAg
ICAgICAgIGlmIChsb2NhdGVFbGVtZW50ICE9IHRleHQpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgZmluZFByZXZpb3VzQW5kTmV4dEF0CiAgICAgICAgIGlmICghY2hp
bGQtPmlzU1ZHSW5saW5lKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
ZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMoY2hpbGQsIGxvY2F0ZUVsZW1lbnQsIHN0b3BB
ZnRlck5leHQsIHByZXZpb3VzLCBuZXh0KSkKKyAgICAgICAgaWYgKGZpbmRQcmV2aW91c0FuZE5l
eHRBdHRyaWJ1dGVzKHRvUmVuZGVyRWxlbWVudChjaGlsZCksIGxvY2F0ZUVsZW1lbnQsIHN0b3BB
ZnRlck5leHQsIHByZXZpb3VzLCBuZXh0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJl
dmlzaW9uIDE1NjMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgc3RhdGljIGJvb2wgdGV4dFJl
bmRlcmVySXNOZWVkZWQoY29uc3QgVAogICAgICAgICBpZiAocGFyZW50UmVuZGVyZXIuaXNSZW5k
ZXJCbG9jaygpICYmICFwYXJlbnRSZW5kZXJlci5jaGlsZHJlbklubGluZSgpICYmICghcHJldmlv
dXNSZW5kZXJlciB8fCAhcHJldmlvdXNSZW5kZXJlci0+aXNJbmxpbmUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0ID0g
cGFyZW50UmVuZGVyZXIuZmlyc3RDaGlsZFNsb3coKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBm
aXJzdCA9IHRvUmVuZGVyRWxlbWVudChwYXJlbnRSZW5kZXJlcikuZmlyc3RDaGlsZCgpOwogICAg
ICAgICB3aGlsZSAoZmlyc3QgJiYgZmlyc3QtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKICAgICAgICAgICAgIGZpcnN0ID0gZmlyc3QtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IFJlbmRlck9iamVjdCogbmV4dFJlbmRlcmVyID0gbmV4dFNpYmxpbmdSZW5kZXJlcih0ZXh0Tm9k
ZSk7Cg==
</data>
<flag name="review"
          id="234763"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>