<?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>41671</bug_id>
          
          <creation_ts>2010-07-06 02:37:53 -0700</creation_ts>
          <short_desc>Implement InTableBodyMode</short_desc>
          <delta_ts>2010-07-06 12:30:07 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246966</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 02:37:53 -0700</bug_when>
    <thetext>Implement InTableBodyMode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246967</commentid>
    <comment_count>1</comment_count>
      <attachid>60607</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 02:40:11 -0700</bug_when>
    <thetext>Created attachment 60607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246971</commentid>
    <comment_count>2</comment_count>
      <attachid>60607</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-06 02:54:51 -0700</bug_when>
    <thetext>Comment on attachment 60607
Patch

WebCore/html/HTMLTreeBuilder.cpp:772
 +          ASSERT(InColumnGroupMode);
I&apos;ve considered embedding this ASSERT in some variant of processFake*.

WebCore/html/HTMLTreeBuilder.cpp:808
 +      if (currentElement()-&gt;hasTagName(tableTag) || currentElement()-&gt;hasTagName(tbodyTag) || currentElement()-&gt;hasTagName(tfootTag) || currentElement()-&gt;hasTagName(theadTag) || currentElement()-&gt;hasTagName(trTag))
I would think we would already have an inline for this?

WebCore/html/HTMLTreeBuilder.cpp:940
 +              ASSERT(currentElement()-&gt;tagQName() == tbodyTag || currentElement()-&gt;tagQName() == tfootTag || currentElement()-&gt;tagQName() == theadTag);
We ceratinly already have an inline for this, no?

WebCore/html/HTMLTreeBuilder.cpp:1597
 +      case InTableBodyMode:
Why not just start this one off as its own function instead of in the switch?  Since we seem to be moving to that pattern...

WebCore/html/HTMLTreeBuilder.cpp:1599
 +          if (token.name() == tbodyTag || token.name() == tfootTag || token.name() == theadTag) {
We totally have an inline for this.

WebCore/html/HTMLTreeBuilder.cpp:1611
 +              if (!m_openElements.inTableScope(tbodyTag.localName()) &amp;&amp; !m_openElements.inTableScope(theadTag.localName()) &amp;&amp; !m_openElements.inTableScope(tfootTag.localName())) {
You do this twice, seems we should make an function for this check, so we only have one place to make more efficient later.

WebCore/html/HTMLTreeBuilder.cpp:1617
 +              ASSERT(currentElement()-&gt;tagQName() == tbodyTag || currentElement()-&gt;tagQName() == tfootTag || currentElement()-&gt;tagQName() == theadTag);
Again, if we don&apos;t have an inline for this, we should.

WebCore/html/HTMLTreeBuilder.cpp:1622
 +          if (token.name() == bodyTag || token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || token.name() == htmlTag || token.name() == tdTag || token.name() == thTag || token.name() == trTag) {
Here too... :)

This looks OK, but really needs some more code sharing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247098</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 09:35:00 -0700</bug_when>
    <thetext>&gt; WebCore/html/HTMLTreeBuilder.cpp:1597
&gt;  +      case InTableBodyMode:
&gt; Why not just start this one off as its own function instead of in the switch?  Since we seem to be moving to that pattern...

I&apos;ve only split out the insertion modes that need to be called by other insertion modes.  I haven&apos;t seen any other modes that need to call InTableBodyMode.  We could move them all out for consistency, but that seems like something to do during a cleanup phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247153</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 11:33:49 -0700</bug_when>
    <thetext>Committed r62573: &lt;http://trac.webkit.org/changeset/62573&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247156</commentid>
    <comment_count>5</comment_count>
      <attachid>60607</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 11:38:18 -0700</bug_when>
    <thetext>Comment on attachment 60607
Patch

I totally forgot to address your comments.  I got distracted merging the conflicts.  I&apos;ll do a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247177</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 12:30:07 -0700</bug_when>
    <thetext>Committed r62579: &lt;http://trac.webkit.org/changeset/62579&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60607</attachid>
            <date>2010-07-06 02:40:11 -0700</date>
            <delta_ts>2010-07-06 11:38:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41671-20100706024009.patch</filename>
            <type>text/plain</type>
            <size>19785</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZjUyOTI4NDI0OWViZWRiODBiMWE1ZDE5MjQyNzQwMmMxOGZkYTlhLi45YmRhMzg2
NTc5ZTA1YjFmZmFmZTAwMzgyZGIxNTgxNWEzNGIzMzM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTUgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBJbXBsZW1l
bnQgSW5UYWJsZUJvZHlNb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MTY3MQorCisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLWh0
bWw1LnR4dDoKKworMjAxMC0wNy0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEltcGxlbWVu
dCBJbkNvbGdyb3VwTW9kZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDE2NjMKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVy
LWV4cGVjdGVkLWh0bWw1LnR4dCBiL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3Rl
ZC1odG1sNS50eHQKaW5kZXggZGI3MWJkYWQ1NWY0MDA2NmVhYmYxNDQxZGQxMjhlMDE1MTY4Njg5
Yy4uNzkwNWNmNWFmYWE0ZDBiNjRlOTdjZDRlZGMxYjhiNTQ3MTJlOTc0MCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dAorKysgYi9MYXlv
dXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CkBAIC0xLDQgKzEsNSBA
QAogQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJzZSBlcnJvcgorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJzZSBlcnJvcgogQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDI6IFBBU1MKIENPTlNPTEUgTUVTU0FHRTogbGluZSAyOiBGT088c3Bhbj5C
QVI8L3NwYW4+QkFaCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KQEAgLTY4NSw2ICs2ODYsOSBA
QCBHb3Q6CiB8ICAgICAgIDxjb2xncm91cD4KIHwgICAgICAgICA8Y29sPgogfCAgICAgICA8dGJv
ZHk+Cit8ICAgICAgIDxjb2xncm91cD4KK3wgICAgICAgICA8Y29sPgorfCAgICAgICA8dGJvZHk+
CiB8ICAgICAgICAgPHRyPgogfCAgICAgICAgICAgPHRkPgogRXhwZWN0ZWQ6CkBAIC03MTYsNiAr
NzIwLDggQEAgR290OgogfCAgICAgPHRhYmxlPgogfCAgICAgICA8Y29sZ3JvdXA+CiB8ICAgICAg
IDx0Ym9keT4KK3wgICAgICAgPGNvbGdyb3VwPgorfCAgICAgICA8dGJvZHk+CiB8ICAgICAgICAg
PHRyPgogfCAgICAgICAgICAgPHRkPgogRXhwZWN0ZWQ6CkBAIC0xNTAxLDcgKzE1MDcsNiBAQCBy
ZXNvdXJjZXMvdGVzdHM3LmRhdDoKIDYKIDcKIDgKLTEwCiAxNQogMTYKIDE3CkBAIC0xNjA1LDI3
ICsxNjEwLDYgQEAgRXhwZWN0ZWQ6CiB8ICAgPGhlYWQ+CiB8ICAgPGJvZHk+CiAKLVRlc3QgMTAg
b2YgMzAgaW4gcmVzb3VyY2VzL3Rlc3RzNy5kYXQgZmFpbGVkLiBJbnB1dDoKLTwhZG9jdHlwZSBo
dG1sPjx0YWJsZT48VEJPRFk+PHNjcmlwdD4gPHRyPnggPC9zY3JpcHQ+IDwvdGFibGU+Ci1Hb3Q6
Ci18IDwhRE9DVFlQRSBodG1sPgotfCA8aHRtbD4KLXwgICA8aGVhZD4KLXwgICA8Ym9keT4KLXwg
ICAgIDx0YWJsZT4KLXwgICAgICAgPHRib2R5PgotfCAgICAgICAgIDx0cj4KLUV4cGVjdGVkOgot
fCA8IURPQ1RZUEUgaHRtbD4KLXwgPGh0bWw+Ci18ICAgPGhlYWQ+Ci18ICAgPGJvZHk+Ci18ICAg
ICA8dGFibGU+Ci18ICAgICAgIDx0Ym9keT4KLXwgICAgICAgICA8c2NyaXB0PgotfCAgICAgICAg
ICAgIiA8dHI+eCAiCi18ICAgICAgICAgIiAiCi0KIFRlc3QgMTUgb2YgMzAgaW4gcmVzb3VyY2Vz
L3Rlc3RzNy5kYXQgZmFpbGVkLiBJbnB1dDoKIDwhZG9jdHlwZSBodG1sPjx0YWJsZT48aW5wdXQg
dHlwZT1oaWRERU4+PC90YWJsZT4KIEdvdDoKQEAgLTIxMzAsNiArMjExNCwxMSBAQCBHb3Q6CiB8
ICAgPGJvZHk+CiB8ICAgICA8dGFibGU+CiB8ICAgICAgIDx0Ym9keT4KK3wgICAgICAgICA8bWF0
aD4KK3wgICAgICAgICAgIDxtaT4KK3wgICAgICAgICAgICAgImZvbyIKK3wgICAgICAgICAgIDxt
aT4KK3wgICAgICAgICAgICAgImJhciIKIEV4cGVjdGVkOgogfCA8IURPQ1RZUEUgaHRtbD4KIHwg
PGh0bWw+CkBAIC0yNjc3LDYgKzI2NjYsMTEgQEAgR290OgogfCAgIDxib2R5PgogfCAgICAgPHRh
YmxlPgogfCAgICAgICA8dGJvZHk+Cit8ICAgICAgICAgPHN2Zz4KK3wgICAgICAgICAgIDxnPgor
fCAgICAgICAgICAgICAiZm9vIgorfCAgICAgICAgICAgPGc+Cit8ICAgICAgICAgICAgICJiYXIi
CiBFeHBlY3RlZDoKIHwgPCFET0NUWVBFIGh0bWw+CiB8IDxodG1sPgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiY2M2OTNmNTMzYmQ3NjU1
NTYyMWNmODg4ZjIyOWEwMzM2MmNkOTBmLi5hMWUxNjRmNzA2YTFkN2QyYjk0YzdlMTcyYjQzYTYw
MWIwOGYyNGNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMiw2ICsyLDMxIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCiAKKyAgICAgICAgSW1wbGVtZW50IEluVGFibGVCb2R5TW9kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2NzEKKworICAgICAgICBJbiB0
aGUgcHJvY2VzcyBvZiBpbXBsZW1lbnRpbmcgdGhpcyBwYXRjaCwgRXJpYyBhbmQgSSBkaXNjdXNz
ZWQgc29tZSBvZgorICAgICAgICB0aGUgaGlnaC1sZXZlbCBvcmdhbml6YXRpb24gb2YgdGhlIEhU
TUxUcmVlQnVpbGRlciBjbGFzcy4gIFdlJ2QgbGlrZSB0bworICAgICAgICBzcGxpdCBpdCB1cCBp
bnRvIHNtYWxsZXIgcGllY2VzLiAgSW4gdGhlIG1lYW50aW1lLCBJJ3ZlIHJlb3JkZXJlZCBzb21l
CisgICAgICAgIG9mIHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIGhlYWRlciB0byBtYWtlIHRoZSBy
ZWxhdGlvbnMgYmV0d2VlbiB0aGUKKyAgICAgICAgZGlmZmVyZW50IGtpbmRzIG9mIGZ1bmN0aW9u
cyBjbGVhcmVyLgorCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmg6CisKKzIwMTAtMDctMDYgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KwogICAgICAgICBJbXBsZW1lbnQgSW5Db2xncm91cE1vZGUKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNjYzCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNr
LmNwcAppbmRleCAzMWEyMzY0YzJlYmYzYWI4OTJiZGQzOWY0ZjQwZmNhNGMzZjFkMDIyLi4zNzNl
MGMyYmI0MGUzMDBmZGI2ODc0ZTA0MTEzYmM1NjQ0MmFjZDI3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
U3RhY2suY3BwCkBAIC02Miw2ICs2Miw3IEBAIGlubGluZSBib29sIGlzTGlzdEl0ZW1TY29wZU1h
cmtlcihFbGVtZW50KiBlbGVtZW50KQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9s
VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKTsKIH0KKwogaW5saW5l
IGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCmlu
ZGV4IDhmY2MxNzZjYzdkOTI5YzE5MzViZDdmNGIyZDAyMjljZjEzYzljZmIuLjg3MTk5ZGIwYzc0
NzIzMDYwMGVmN2JhZTZjNzY3ZDA2OWQ4M2YyNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CkBAIC00OTMsOCArNDkzLDEwIEBAIFBhc3NSZWZQdHI8TmFtZWROb2RlTWFwPiBIVE1MVHJlZUJ1
aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRvCiAgICAgcmV0dXJu
IGF0dHJpYnV0ZXMucmVsZWFzZSgpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0lzaW5kZXhTdGFydFRhZ0ZvckJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiB7CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0
YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGlzaW5kZXhUYWcpOwogICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgIGlmIChtX2Zvcm1FbGVtZW50KQogICAgICAgICByZXR1cm47
CkBAIC02NTksNyArNjYxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaXNpbmRleFRhZykgewotICAgICAgICBwcm9jZXNz
SXNpbmRleFN0YXJ0VGFnRm9yQm9keSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NJc2luZGV4U3Rh
cnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKQEAgLTc0OSw2ICs3NTEsNjUgQEAgYm9vbCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29sdW1uR3JvdXAoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQoreworICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBjYXB0aW9uVGFnKSB7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGlsVGFibGVTY29w
ZU1hcmtlcigpOworICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmRNYXJr
ZXIoKTsKKyAgICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IEluQ2FwdGlvbk1vZGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZykgeworICAgICAgICBtX29wZW5FbGVtZW50cy5wb3BV
bnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKKyAgICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7Cisg
ICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluQ29sdW1uR3JvdXBNb2RlOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7CisgICAgICAgIHBy
b2Nlc3NGYWtlU3RhcnRUYWcoY29sZ3JvdXBUYWcpOworICAgICAgICBBU1NFUlQoSW5Db2x1bW5H
cm91cE1vZGUpOworICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkg
eworICAgICAgICBtX29wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKKyAg
ICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IElu
VGFibGVCb2R5TW9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodG9rZW4ubmFt
ZSgpID09IHRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0aFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
dHJUYWcpIHsKKyAgICAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyh0Ym9keVRhZyk7CisgICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlNb2RlKTsKKyAgICAgICAgcHJv
Y2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0
b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zvcklu
SGVhZCh0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBpbnB1dFRhZykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZm9ybVRhZykgeworICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgaWYgKG1fZm9ybUVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGluc2VydFNlbGZDbG9zaW5nRWxlbWVudCh0b2tlbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgaWYgKGN1cnJl
bnRFbGVtZW50KCktPmhhc1RhZ05hbWUodGFibGVUYWcpIHx8IGN1cnJlbnRFbGVtZW50KCktPmhh
c1RhZ05hbWUodGJvZHlUYWcpIHx8IGN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUodGZvb3RU
YWcpIHx8IGN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IGN1cnJlbnRF
bGVtZW50KCktPmhhc1RhZ05hbWUodHJUYWcpKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAv
LyAid2hlbmV2ZXIgYSBub2RlIHdvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIGN1cnJlbnQgbm9k
ZSwgaXQgbXVzdCBpbnN0ZWFkIGJlIGZvc3RlciBwYXJlbnRlZC4iCisgICAgcHJvY2Vzc1N0YXJ0
VGFnRm9ySW5Cb2R5KHRva2VuKTsKK30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CkBAIC04MjIsNjAgKzg4Myw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblRhYmxlTW9kZToKICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJblRhYmxlTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
Y2FwdGlvblRhZykgewotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVNj
b3BlTWFya2VyKCk7Ci0gICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBl
bmRNYXJrZXIoKTsKLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOwotICAgICAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5DYXB0aW9uTW9kZTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnKSB7Ci0g
ICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKLSAg
ICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOwotICAgICAgICAgICAgbV9pbnNlcnRpb25N
b2RlID0gSW5Db2x1bW5Hcm91cE1vZGU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKLSAgICAgICAgICAgIHByb2Nl
c3NGYWtlU3RhcnRUYWcoY29sZ3JvdXBUYWcpOwotICAgICAgICAgICAgQVNTRVJUKEluQ29sdW1u
R3JvdXBNb2RlKTsKLSAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRh
Zyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3BVbnRpbFRh
YmxlU2NvcGVNYXJrZXIoKTsKLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOwotICAg
ICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5UYWJsZUJvZHlNb2RlOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGRUYWcgfHwg
dG9rZW4ubmFtZSgpID09IHRoVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgewotICAgICAg
ICAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyh0Ym9keVRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uTW9kZSgpID09IEluVGFibGVCb2R5TW9kZSk7Ci0gICAgICAgICAgICBwcm9jZXNz
U3RhcnRUYWcodG9rZW4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKLSAgICAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcpIHsK
LSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmb3JtVGFnKSB7Ci0gICAgICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIGlmIChtX2Zvcm1FbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGluc2VydFNlbGZDbG9zaW5nRWxlbWVu
dCh0b2tlbik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7Ci0gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRh
YmxlVGFnKSB8fCBjdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBjdXJy
ZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRmb290VGFnKSB8fCBjdXJyZW50RWxlbWVudCgpLT5o
YXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBjdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRyVGFn
KSkKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vICJ3aGVuZXZlciBhIG5vZGUgd291
bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY3VycmVudCBub2RlLCBpdCBtdXN0IGluc3RlYWQgYmUg
Zm9zdGVyIHBhcmVudGVkLiIKLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0b2tlbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSW5DYXB0aW9uTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbkNhcHRpb25Nb2RlKTsKQEAgLTkyMiwxMCArOTMwLDE5IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNh
cHRpb25UYWcgfHwgdG9rZW4ubmFtZSgpID09IGNvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29s
Z3JvdXBUYWcgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBz
bG93LgorICAgICAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGJvZHlU
YWcubG9jYWxOYW1lKCkpICYmICFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGhlYWRUYWcu
bG9jYWxOYW1lKCkpICYmICFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGZvb3RUYWcubG9j
YWxOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faXNQYXJzaW5nRnJhZ21lbnQp
OworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGls
VGFibGVCb2R5U2NvcGVNYXJrZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50RWxlbWVu
dCgpLT50YWdRTmFtZSgpID09IHRib2R5VGFnIHx8IGN1cnJlbnRFbGVtZW50KCktPnRhZ1FOYW1l
KCkgPT0gdGZvb3RUYWcgfHwgY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSA9PSB0aGVhZFRh
Zyk7CisgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhjdXJyZW50RWxlbWVudCgpLT50YWdR
TmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gcHJvY2Vz
cyB1c2luZyAiaW4gdGFibGUiIHJ1bGVzCisgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluVGFi
bGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluUm93TW9kZToKICAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSB0aFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGRUYWcpIHsKQEAg
LTE0NjUsNiArMTQ4MiwyOCBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NhcHRpb25F
bmRUYWdGb3JJbkNhcHRpb24oKQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3sKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgICAgIGlmICghbV9vcGVuRWxlbWVu
dHMuaW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2lz
UGFyc2luZ0ZyYWdtZW50KTsKKyAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGls
KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7Cisg
ICAgICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGNhcHRpb25UYWcgfHwgdG9rZW4ubmFtZSgpID09IGNvbFRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gY29sZ3JvdXBUYWcgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IHRib2R5VGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0ZFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
dGZvb3RUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRoVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0aGVh
ZFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
d29ycnkgYWJvdXQgIndoZW5ldmVyIGEgbm9kZSB3b3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBj
dXJyZW50IG5vZGUsIGl0IG11c3QgaW5zdGVhZCBiZSBmb3N0ZXIgcGFyZW50ZWQiPworICAgIHBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOworfQorCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwpAQCAtMTUxNiwyMyArMTU1NSw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5UYWJsZU1vZGU6CiAgICAgICAgIEFTU0VSVChp
bnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZU1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IHRhYmxlVGFnKSB7Ci0gICAgICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluVGFibGVT
Y29wZSh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1faXNQYXJzaW5n
RnJhZ21lbnQpOwotICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRz
LnBvcFVudGlsKHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIG1fb3BlbkVsZW1l
bnRzLnBvcCgpOwotICAgICAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gYm9keVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gY29sVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGJvZHlUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IHRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0Zm9vdFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
dGhUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRoZWFkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0clRh
ZykgewotICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQg
IndoZW5ldmVyIGEgbm9kZSB3b3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjdXJyZW50IG5vZGUs
IGl0IG11c3QgaW5zdGVhZCBiZSBmb3N0ZXIgcGFyZW50ZWQiPwotICAgICAgICBwcm9jZXNzRW5k
VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUodG9r
ZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluQ2FwdGlvbk1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5DYXB0aW9uTW9kZSk7CkBAIC0xNTcxLDYgKzE1OTQs
MzcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgfQogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJblRhYmxlQm9keU1vZGU6CisgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlNb2RlKTsKKyAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSB0Ym9keVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGZvb3RUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IHRoZWFkVGFnKSB7CisgICAgICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluVGFibGVT
Y29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9v
cGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOworICAgICAgICAgICAg
bV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJblRh
YmxlTW9kZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBz
bG93LgorICAgICAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGJvZHlU
YWcubG9jYWxOYW1lKCkpICYmICFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGhlYWRUYWcu
bG9jYWxOYW1lKCkpICYmICFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGZvb3RUYWcubG9j
YWxOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faXNQYXJzaW5nRnJhZ21lbnQp
OworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGls
VGFibGVCb2R5U2NvcGVNYXJrZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50RWxlbWVu
dCgpLT50YWdRTmFtZSgpID09IHRib2R5VGFnIHx8IGN1cnJlbnRFbGVtZW50KCktPnRhZ1FOYW1l
KCkgPT0gdGZvb3RUYWcgfHwgY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSA9PSB0aGVhZFRh
Zyk7CisgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhjdXJyZW50RWxlbWVudCgpLT50YWdR
TmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29sVGFnIHx8
IHRva2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gdGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRoVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSB0clRhZykgeworICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFi
bGUodG9rZW4pOworICAgICAgICBicmVhazsKICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAgICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJCb2R5TW9kZSk7CiAgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewpAQCAtMTczNyw3ICsxNzkxLDggQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgaW5zZXJ0VGV4dE5vZGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEluVGFibGVNb2RlOgotICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluVGFibGVN
b2RlKTsKKyAgICBjYXNlIEluVGFibGVCb2R5TW9kZToKKyAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJblRhYmxlTW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlN
b2RlKTsKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ3JhenkgcGVuZGluZyBjaGFyYWN0
ZXJzLgogICAgICAgICBpbnNlcnRUZXh0Tm9kZSh0b2tlbik7CiAgICAgICAgIGJyZWFrOwpAQCAt
MTgyMSw5ICsxODc2LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxl
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5GcmFt
ZXNldE1vZGU6CiAgICAgY2FzZSBJblRhYmxlTW9kZToKKyAgICBjYXNlIEluVGFibGVCb2R5TW9k
ZToKICAgICBjYXNlIEluU2VsZWN0SW5UYWJsZU1vZGU6CiAgICAgY2FzZSBJblNlbGVjdE1vZGU6
Ci0gICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RNb2RlIHx8IGluc2Vy
dGlvbk1vZGUoKSA9PSBJblNlbGVjdEluVGFibGVNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJ
blRhYmxlTW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5GcmFtZXNldE1vZGUpOworICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0TW9kZSB8fCBpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5TZWxlY3RJblRhYmxlTW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5UYWJsZU1v
ZGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2RlIHx8IGluc2VydGlvbk1vZGUo
KSA9PSBJblRhYmxlQm9keU1vZGUpOwogICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQoKSAhPSBt
X29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVp
bGRlci5oIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDYxYjExZDI5ZDcy
OGZiY2NlNjEwZmI0MGQ1ZjczYzk1NjI5ODA5YzcuLmFhMDI1YzkxYzNmOTUzOWFjNTU1ZWI0ZTU2
NjNiMzIxNWZhYmNhZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIu
aAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTEwNCw4ICsxMDQsOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwYXNzVG9rZW5Ub0xlZ2FjeVBhcnNlcihIVE1MVG9rZW4m
KTsKIAotICAgIC8vIFNwZWNpYWxpemVkIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyB0aGUgZGlm
ZmVyZW50IHR5cGVzIG9mIHRva2Vucy4KICAgICB2b2lkIHByb2Nlc3NUb2tlbihBdG9taWNIVE1M
VG9rZW4mKTsKKwogICAgIHZvaWQgcHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4m
KTsKICAgICB2b2lkIHByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKICAgICB2b2lk
IHByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJik7CkBAIC0xMTMsMjIgKzExMywxOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mKTsKICAg
ICB2b2lkIHByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJik7CiAKLSAgICAvLyBEZWZh
dWx0IHByb2Nlc3NpbmcgZm9yIHRoZSBkaWZmZXJlbnQgaW5zZXJ0aW9uIG1vZGVzLgotICAgIHZv
aWQgcHJvY2Vzc0RlZmF1bHRGb3JJbml0aWFsTW9kZShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2
b2lkIHByb2Nlc3NEZWZhdWx0Rm9yQmVmb3JlSFRNTE1vZGUoQXRvbWljSFRNTFRva2VuJik7Ci0g
ICAgdm9pZCBwcm9jZXNzRGVmYXVsdEZvckJlZm9yZUhlYWRNb2RlKEF0b21pY0hUTUxUb2tlbiYp
OwotICAgIHZvaWQgcHJvY2Vzc0RlZmF1bHRGb3JJbkhlYWRNb2RlKEF0b21pY0hUTUxUb2tlbiYp
OwotICAgIHZvaWQgcHJvY2Vzc0RlZmF1bHRGb3JJbkhlYWROb3NjcmlwdE1vZGUoQXRvbWljSFRN
TFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRGVmYXVsdEZvckFmdGVySGVhZE1vZGUoQXRvbWlj
SFRNTFRva2VuJik7Ci0KICAgICBib29sIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNI
VE1MVG9rZW4mKTsKICAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1M
VG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRv
a2VuJik7CiAgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYp
OwotICAgIFBhc3NSZWZQdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0
KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckJv
ZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShB
dG9taWNIVE1MVG9rZW4mKTsKKwogICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIGJvb2wgcHJvY2Vzc0NhcHRpb25FbmRUYWdGb3JJ
bkNhcHRpb24oKTsKICAgICBib29sIHByb2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29sdW1uR3Jv
dXAoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW5saW5lZCBpbnRv
IGl0cyBvbmUgY2FsbCBzaXRlIG9yIGl0CisgICAgLy8gbmVlZHMgdG8gYXNzZXJ0IHdoaWNoIHRv
a2VucyBpdCBjYW4gYmUgY2FsbGVkIHdpdGguCiAgICAgdm9pZCBwcm9jZXNzQW55T3RoZXJFbmRU
YWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CiAKICAgICB2b2lkIHByb2Nlc3NGYWtlU3Rh
cnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYsIFBhc3NSZWZQdHI8TmFtZWROb2RlTWFwPiBhdHRy
aWJ1dGVzID0gMCk7CkBAIC0xMzYsNiArMTMyLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9j
ZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBF
bmRUYWdJZlBJblNjb3BlKCk7CiAKKyAgICAvLyBEZWZhdWx0IHByb2Nlc3NpbmcgZm9yIHRoZSBk
aWZmZXJlbnQgaW5zZXJ0aW9uIG1vZGVzLgorICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMg
bmVlZCB0byBiZSByZW5hbWVkIHRvIHJlbW92ZSAicHJvY2VzcyIgZnJvbSB0aGVpciBuYW1lcy4K
KyAgICB2b2lkIHByb2Nlc3NEZWZhdWx0Rm9ySW5pdGlhbE1vZGUoQXRvbWljSFRNTFRva2VuJik7
CisgICAgdm9pZCBwcm9jZXNzRGVmYXVsdEZvckJlZm9yZUhUTUxNb2RlKEF0b21pY0hUTUxUb2tl
biYpOworICAgIHZvaWQgcHJvY2Vzc0RlZmF1bHRGb3JCZWZvcmVIZWFkTW9kZShBdG9taWNIVE1M
VG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NEZWZhdWx0Rm9ySW5IZWFkTW9kZShBdG9taWNIVE1M
VG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NEZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHRNb2RlKEF0
b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0RlZmF1bHRGb3JBZnRlckhlYWRNb2Rl
KEF0b21pY0hUTUxUb2tlbiYpOworCisgICAgUGFzc1JlZlB0cjxOYW1lZE5vZGVNYXA+IGF0dHJp
YnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJik7CisKICAgICBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQo
RWxlbWVudCopOwogICAgIHZvaWQgZmluZEZvc3RlclBhcmVudEZvcihFbGVtZW50Kik7CiAgICAg
dm9pZCByZXBhcmVudENoaWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVudCogbmV3UGFy
ZW50KTsK
</data>
<flag name="review"
          id="48220"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="48221"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>