<?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>24542</bug_id>
          
          <creation_ts>2009-03-11 23:35:12 -0700</creation_ts>
          <short_desc>Improve ContentData encapsulation</short_desc>
          <delta_ts>2009-03-15 16:42:38 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113318</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-03-11 23:35:12 -0700</bug_when>
    <thetext>* SUMMARY
While fixing Bug 23741, I noticed that the encapsulation of the ContentData class could be improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113320</commentid>
    <comment_count>1</comment_count>
      <attachid>28521</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-03-12 00:02:47 -0700</bug_when>
    <thetext>Created attachment 28521
Patch v1

Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113400</commentid>
    <comment_count>2</comment_count>
      <attachid>28521</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-12 09:19:46 -0700</bug_when>
    <thetext>Comment on attachment 28521
Patch v1

&gt; -void RenderStyle::setContent(StringImpl* s, bool add)
&gt; +void RenderStyle::setContent(PassRefPtr&lt;StringImpl&gt; s, bool add)

Does this change reduce reference churn?

&gt; diff --git a/WebCore/rendering/style/StyleRareNonInheritedData.cpp b/WebCore/rendering/style/StyleRareNonInheritedData.cpp
&gt; index c337fa4..f7c41ca 100644
&gt; --- a/WebCore/rendering/style/StyleRareNonInheritedData.cpp
&gt; +++ b/WebCore/rendering/style/StyleRareNonInheritedData.cpp
&gt; @@ -159,28 +159,28 @@ bool StyleRareNonInheritedData::contentDataEquivalent(const StyleRareNonInherite
&gt;      ContentData* c2 = o.m_content.get();
&gt;  
&gt;      while (c1 &amp;&amp; c2) {
&gt; -        if (c1-&gt;m_type != c2-&gt;m_type)
&gt; +        if (c1-&gt;type() != c2-&gt;type())
&gt;              return false;
&gt;  
&gt; -        switch (c1-&gt;m_type) {
&gt; +        switch (c1-&gt;type()) {
&gt;              case CONTENT_NONE:
&gt;                  break;
&gt;              case CONTENT_TEXT:
&gt; -                if (!equal(c1-&gt;m_content.m_text, c2-&gt;m_content.m_text))
&gt; +                if (!equal(c1-&gt;text(), c2-&gt;text()))
&gt;                      return false;
&gt;                  break;
&gt;              case CONTENT_OBJECT:
&gt; -                if (!StyleImage::imagesEquivalent(c1-&gt;m_content.m_image, c2-&gt;m_content.m_image))
&gt; +                if (!StyleImage::imagesEquivalent(c1-&gt;image(), c2-&gt;image()))
&gt;                      return false;
&gt;                  break;
&gt;              case CONTENT_COUNTER:
&gt; -                if (*c1-&gt;m_content.m_counter != *c2-&gt;m_content.m_counter)
&gt; +                if (*c1-&gt;counter() != *c2-&gt;counter())
&gt;                      return false;
&gt;                  break;
&gt;          }

I think it would be good to implement ContentData::dataEquivalent(const ContentData&amp;),
which checks type and data. Then this code would be much simpler.

I&apos;d also suggest bool ContentData::isText() const, isObject(), isCounter() to make the rest of the code
more readable.

r=me, with these suggestions if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113401</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-03-12 09:48:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 28521 [review])
&gt; &gt; -void RenderStyle::setContent(StringImpl* s, bool add)
&gt; &gt; +void RenderStyle::setContent(PassRefPtr&lt;StringImpl&gt; s, bool add)
&gt; 
&gt; Does this change reduce reference churn?

That was not the goal I had in mind when I wrote it.  Instead I wanted to give the setter standard semantics for passing in a ref-counted object that will be owned by the container object, and I wanted to hide the releaseRef()/deref() ugliness inside the ContentData class (caused by the use of a union to store pointers to the various data types).

I&apos;ll make the other changes before I land the patch.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113848</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-03-15 16:33:31 -0700</bug_when>
    <thetext>$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObjectChildList.cpp
	M	WebCore/rendering/style/ContentData.cpp
	M	WebCore/rendering/style/ContentData.h
	M	WebCore/rendering/style/CounterContent.h
	M	WebCore/rendering/style/RenderStyle.cpp
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/rendering/style/StyleRareNonInheritedData.cpp
Committed r41725

https://trac.webkit.org/changeset/41725
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113849</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-15 16:42:38 -0700</bug_when>
    <thetext>Build fix in r41726</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28521</attachid>
            <date>2009-03-12 00:02:47 -0700</date>
            <delta_ts>2009-03-12 09:19:46 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-24542-improve-ContentData-encapsulation-v1.diff</filename>
            <type>text/plain</type>
            <size>16501</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">Y29tbWl0IGJhZGUxNmQ3ODRkZWRlNTZkNjg2ZjU3NmE3MTQ2MmVjZDBlOTEzODAKQXV0aG9yOiBE
YXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0ZTogICBUaHUgRmViIDUgMTk6MTY6
NTQgMjAwOSAtMDgwMAoKICAgICAgICAgICAgQnVnIDI0NTQyOiBJbXByb3ZlIENvbnRlbnREYXRh
IGVuY2Fwc3VsYXRpb24KICAgIAogICAgICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0NTQyPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgogICAgCiAgICAgICAgICAgIE5vIHRlc3RzIHNpbmNlIHRoZXJlIGlzIG5vIGNo
YW5nZSBpbiBiZWhhdmlvci4KICAgIAogICAgICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3Qp
OiBVc2UgZ2V0dGVyIG1ldGhvZHMKICAgICAgICAgICAgaW5zdGVhZCBvZiBkYXRhIG1lbWJlcnMg
b24gQ29udGVudERhdGEgY2xhc3MuCiAgICAgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dENoaWxkTGlzdC5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3RDaGlsZExp
c3Q6OnVwZGF0ZUJlZm9yZUFmdGVyQ29udGVudCk6IERpdHRvLgogICAgCiAgICAgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnREYXRhOjpjbGVhcik6IEV4dHJhY3RlZCBjb2RlIGludG8KICAgICAgICAgICAgZGVsZXRl
Q29udGVudCgpIG1ldGhvZC4KICAgICAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREYXRhOjpkZWxl
dGVDb250ZW50KTogQWRkZWQuICBVc2VkIGJ5IHNldHRlcgogICAgICAgICAgICBtZXRob2RzLgog
ICAgICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5oOgogICAgICAgICAgICAo
V2ViQ29yZTo6Q29udGVudERhdGE6OnR5cGUpOiBBZGRlZC4KICAgICAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREYXRhOjppbWFnZSk6IEFkZGVkLgogICAgICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dERhdGE6OnNldEltYWdlKTogQWRkZWQuCiAgICAgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0
YTo6dGV4dCk6IEFkZGVkLgogICAgICAgICAgICAoV2ViQ29yZTo6Q29udGVudERhdGE6OnNldFRl
eHQpOiBBZGRlZC4KICAgICAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREYXRhOjpjb3VudGVyKTog
QWRkZWQuCiAgICAgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6c2V0Q291bnRlcik6IEFk
ZGVkLgogICAgICAgICAgICAoV2ViQ29yZTo6Q29udGVudERhdGE6Om5leHQpOiBBZGRlZC4KICAg
ICAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREYXRhOjpzZXROZXh0KTogQWRkZWQuCiAgICAKICAg
ICAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgogICAgICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldENvbnRlbnQpOiBVc2UgbmV3IGdldHRlcnMgYW5kIHNl
dHRlcnMKICAgICAgICAgICAgb24gQ29udGVudERhdGEgY2xhc3MuICBDaGFuZ2VkIGZpcnN0IGFy
Z3VtZW50IGZyb20gYSBTdHJpbmdJbXBsKgogICAgICAgICAgICB0byBhIFBhc3NSZWZQdHI8U3Ry
aW1nSW1wbD4uCiAgICAgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CiAg
ICAgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3Bw
OgogICAgICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6Y29udGVu
dERhdGFFcXVpdmFsZW50KTogVXNlCiAgICAgICAgICAgIGdldHRlciBtZXRob2RzIGluc3RlYWQg
b2YgZGF0YSBtZW1iZXJzIG9uIENvbnRlbnREYXRhIGNsYXNzLgoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk0NTEwZS4uMDc0Yjg4NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsNSArMSw0NiBAQAogMjAwOS0wMy0xMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUu
Y29tPgogCisgICAgICAgIEJ1ZyAyNDU0MjogSW1wcm92ZSBDb250ZW50RGF0YSBlbmNhcHN1bGF0
aW9uCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NDU0Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byB0ZXN0cyBzaW5jZSB0aGVyZSBpcyBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6Y3JlYXRlT2JqZWN0KTogVXNlIGdldHRlciBtZXRob2RzCisgICAgICAgIGluc3RlYWQg
b2YgZGF0YSBtZW1iZXJzIG9uIENvbnRlbnREYXRhIGNsYXNzLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0Ojp1cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQpOiBEaXR0by4KKworICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RGF0YTo6Y2xlYXIpOiBFeHRyYWN0ZWQgY29kZSBpbnRvCisgICAgICAgIGRlbGV0ZUNv
bnRlbnQoKSBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6ZGVsZXRlQ29u
dGVudCk6IEFkZGVkLiAgVXNlZCBieSBzZXR0ZXIKKyAgICAgICAgbWV0aG9kcy4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnREYXRhOjp0eXBlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6aW1h
Z2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREYXRhOjpzZXRJbWFnZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERhdGE6OnRleHQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnREYXRhOjpzZXRUZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RGF0YTo6Y291bnRlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudERhdGE6OnNldENvdW50ZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
YXRhOjpuZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6c2V0TmV4
dCk6IEFkZGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDb250ZW50KTogVXNlIG5ldyBnZXR0
ZXJzIGFuZCBzZXR0ZXJzCisgICAgICAgIG9uIENvbnRlbnREYXRhIGNsYXNzLiAgQ2hhbmdlZCBm
aXJzdCBhcmd1bWVudCBmcm9tIGEgU3RyaW5nSW1wbCoKKyAgICAgICAgdG8gYSBQYXNzUmVmUHRy
PFN0cmltZ0ltcGw+LgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmNvbnRlbnREYXRh
RXF1aXZhbGVudCk6IFVzZQorICAgICAgICBnZXR0ZXIgbWV0aG9kcyBpbnN0ZWFkIG9mIGRhdGEg
bWVtYmVycyBvbiBDb250ZW50RGF0YSBjbGFzcy4KKworMjAwOS0wMy0xMSAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgorCiAgICAgICAgIENsYXJpZnkgY29tbWVudHMgcmVnYXJk
aW5nIG9yZGVyIG9mIEZFQVRVUkVfREVGSU5FUwogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5
IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGQ1YTc5MzkuLjg3
MjkwMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtOTMsMTAgKzkzLDEwIEBA
IFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QoTm9kZSogbm9kZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogICAgIC8vIFdvcmtzIG9ubHkgaWYgd2UgaGF2ZSBleGFjdGx5IG9u
ZSBwaWVjZSBvZiBjb250ZW50IGFuZCBpdCdzIGEgVVJMLgogICAgIC8vIE90aGVyd2lzZSBhY3Rz
IGFzIGlmIHdlIGRpZG4ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KICAgICBjb25zdCBDb250ZW50
RGF0YSogY29udGVudERhdGEgPSBzdHlsZS0+Y29udGVudERhdGEoKTsKLSAgICBpZiAoY29udGVu
dERhdGEgJiYgIWNvbnRlbnREYXRhLT5tX25leHQgJiYgY29udGVudERhdGEtPm1fdHlwZSA9PSBD
T05URU5UX09CSkVDVCAmJiBkb2MgIT0gbm9kZSkgeworICAgIGlmIChjb250ZW50RGF0YSAmJiAh
Y29udGVudERhdGEtPm5leHQoKSAmJiBjb250ZW50RGF0YS0+dHlwZSgpID09IENPTlRFTlRfT0JK
RUNUICYmIGRvYyAhPSBub2RlKSB7CiAgICAgICAgIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVu
dCogaW1hZ2UgPSBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnQobm9kZSk7
CiAgICAgICAgIGltYWdlLT5zZXRTdHlsZShzdHlsZSk7Ci0gICAgICAgIGlmIChTdHlsZUltYWdl
KiBzdHlsZUltYWdlID0gY29udGVudERhdGEtPm1fY29udGVudC5tX2ltYWdlKQorICAgICAgICBp
ZiAoU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGNvbnRlbnREYXRhLT5pbWFnZSgpKQogICAgICAg
ICAgICAgaW1hZ2UtPnNldFN0eWxlSW1hZ2Uoc3R5bGVJbWFnZSk7CiAgICAgICAgIHJldHVybiBp
bWFnZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RD
aGlsZExpc3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNw
cAppbmRleCA0ZWZlNzk3Li4zMmU4NTZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdENoaWxkTGlzdC5jcHAKQEAgLTM4NSwxMyArMzg1LDEzIEBAIHZvaWQgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0Ojp1cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQoUmVuZGVyT2JqZWN0KiBvd25lciwg
UHNldWRvCiAgICAgUmVuZGVyT2JqZWN0KiBnZW5lcmF0ZWRDb250ZW50Q29udGFpbmVyID0gMDsK
ICAgICAKICAgICAvLyBXYWxrIG91ciBsaXN0IG9mIGdlbmVyYXRlZCBjb250ZW50IGFuZCBjcmVh
dGUgcmVuZGVyIG9iamVjdHMgZm9yIGVhY2guCi0gICAgZm9yIChjb25zdCBDb250ZW50RGF0YSog
Y29udGVudCA9IHBzZXVkb0VsZW1lbnRTdHlsZS0+Y29udGVudERhdGEoKTsgY29udGVudDsgY29u
dGVudCA9IGNvbnRlbnQtPm1fbmV4dCkgeworICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNv
bnRlbnQgPSBwc2V1ZG9FbGVtZW50U3R5bGUtPmNvbnRlbnREYXRhKCk7IGNvbnRlbnQ7IGNvbnRl
bnQgPSBjb250ZW50LT5uZXh0KCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IDA7Ci0gICAgICAgIHN3aXRjaCAoY29udGVudC0+bV90eXBlKSB7CisgICAgICAgIHN3aXRjaCAo
Y29udGVudC0+dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIENPTlRFTlRfTk9ORToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ09OVEVOVF9URVhUOgotICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gbmV3IChvd25lci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4
dEZyYWdtZW50KG93bmVyLT5kb2N1bWVudCgpIC8qIGFub255bW91cyBvYmplY3QgKi8sIGNvbnRl
bnQtPm1fY29udGVudC5tX3RleHQpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gbmV3IChv
d25lci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4dEZyYWdtZW50KG93bmVyLT5kb2N1bWVudCgp
IC8qIGFub255bW91cyBvYmplY3QgKi8sIGNvbnRlbnQtPnRleHQoKSk7CiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXItPnNldFN0eWxlKHBzZXVkb0VsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENPTlRFTlRfT0JKRUNUOiB7CkBAIC0zOTksMTMg
KzM5OSwxMyBAQCB2b2lkIFJlbmRlck9iamVjdENoaWxkTGlzdDo6dXBkYXRlQmVmb3JlQWZ0ZXJD
b250ZW50KFJlbmRlck9iamVjdCogb3duZXIsIFBzZXVkbwogICAgICAgICAgICAgICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1lbnRTdHlsZSk7CiAgICAgICAgICAg
ICAgICAgaW1hZ2UtPnNldFN0eWxlKHN0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBjb250ZW50LT5tX2NvbnRlbnQubV9pbWFnZSkK
KyAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGNvbnRlbnQtPmlt
YWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5zZXRTdHlsZUltYWdlKHN0eWxlSW1h
Z2UpOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gaW1hZ2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoK
LSAgICAgICAgICAgICAgICByZW5kZXJlciA9IG5ldyAob3duZXItPnJlbmRlckFyZW5hKCkpIFJl
bmRlckNvdW50ZXIob3duZXItPmRvY3VtZW50KCksICpjb250ZW50LT5tX2NvbnRlbnQubV9jb3Vu
dGVyKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9IG5ldyAob3duZXItPnJlbmRlckFyZW5h
KCkpIFJlbmRlckNvdW50ZXIob3duZXItPmRvY3VtZW50KCksICpjb250ZW50LT5jb3VudGVyKCkp
OwogICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShwc2V1ZG9FbGVtZW50U3R5bGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9Db250ZW50RGF0YS5jcHAKaW5kZXggYjM4Y2M0OS4uYWY0Njk5YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcApAQCAtMzAsMjIgKzMwLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIENvbnRlbnREYXRhOjpjbGVhcigpCiB7Ci0gICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBDT05URU5UX05PTkU6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDT05URU5UX09CSkVDVDoKLSAgICAgICAgICAgIG1fY29udGVudC5tX2ltYWdl
LT5kZXJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ09OVEVOVF9URVhU
OgotICAgICAgICAgICAgbV9jb250ZW50Lm1fdGV4dC0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoKLSAgICAgICAgICAgIGRlbGV0ZSBt
X2NvbnRlbnQubV9jb3VudGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGRlbGV0
ZUNvbnRlbnQoKTsKIAogICAgIENvbnRlbnREYXRhKiBuID0gbV9uZXh0OwotICAgIG1fdHlwZSA9
IENPTlRFTlRfTk9ORTsKICAgICBtX25leHQgPSAwOwogCiAgICAgLy8gUmV2ZXJzZSB0aGUgbGlz
dCBzbyB3ZSBjYW4gZGVsZXRlIHdpdGhvdXQgcmVjdXJzaW5nLgpAQCAtNjMsNCArNTAsMjYgQEAg
dm9pZCBDb250ZW50RGF0YTo6Y2xlYXIoKQogICAgIH0KIH0KIAordm9pZCBDb250ZW50RGF0YTo6
ZGVsZXRlQ29udGVudCgpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBD
T05URU5UX05PTkU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT05URU5UX09C
SkVDVDoKKyAgICAgICAgICAgIG1fY29udGVudC5tX2ltYWdlLT5kZXJlZigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09OVEVOVF9URVhUOgorICAgICAgICAgICAgbV9jb250
ZW50Lm1fdGV4dC0+ZGVyZWYoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENP
TlRFTlRfQ09VTlRFUjoKKyAgICAgICAgICAgIGRlbGV0ZSBtX2NvbnRlbnQubV9jb3VudGVyOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fdHlwZSA9
IENPTlRFTlRfTk9ORTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0NvbnRlbnREYXRhLmgKaW5kZXggNDQ3ODVlZi4uMWJhMTRiNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9Db250ZW50RGF0YS5oCkBAIC0yNSwxNiArMjUsMTggQEAKICNpZm5kZWYgQ29u
dGVudERhdGFfaAogI2RlZmluZSBDb250ZW50RGF0YV9oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSW1wbC5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb3VudGVyQ29udGVudDsK
LWNsYXNzIFN0cmluZ0ltcGw7Ci1jbGFzcyBTdHlsZUltYWdlOwogCiBzdHJ1Y3QgQ29udGVudERh
dGEgOiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CiAgICAgQ29udGVudERhdGEoKQogICAgICAgICA6
IG1fdHlwZShDT05URU5UX05PTkUpCiAgICAgICAgICwgbV9uZXh0KDApCkBAIC00OCw2ICs1MCw0
MSBAQCBzdHJ1Y3QgQ29udGVudERhdGEgOiBOb25jb3B5YWJsZSB7CiAKICAgICB2b2lkIGNsZWFy
KCk7CiAKKyAgICBTdHlsZUNvbnRlbnRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKworICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Lm1f
aW1hZ2U7IH0KKyAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2Up
CisgICAgeworICAgICAgICBkZWxldGVDb250ZW50KCk7CisgICAgICAgIG1fdHlwZSA9IENPTlRF
TlRfT0JKRUNUOworICAgICAgICBtX2NvbnRlbnQubV9pbWFnZSA9IGltYWdlLnJlbGVhc2VSZWYo
KTsKKyAgICB9CisKKyAgICBTdHJpbmdJbXBsKiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50Lm1fdGV4dDsgfQorICAgIHZvaWQgc2V0VGV4dChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRl
eHQpCisgICAgeworICAgICAgICBkZWxldGVDb250ZW50KCk7CisgICAgICAgIG1fdHlwZSA9IENP
TlRFTlRfVEVYVDsKKyAgICAgICAgbV9jb250ZW50Lm1fdGV4dCA9IHRleHQucmVsZWFzZVJlZigp
OworICAgIH0KKworICAgIENvdW50ZXJDb250ZW50KiBjb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50Lm1fY291bnRlcjsgfQorICAgIHZvaWQgc2V0Q291bnRlcihDb3VudGVyQ29udGVu
dCogY291bnRlcikKKyAgICB7CisgICAgICAgIGRlbGV0ZUNvbnRlbnQoKTsKKyAgICAgICAgbV90
eXBlID0gQ09OVEVOVF9DT1VOVEVSOworICAgICAgICBtX2NvbnRlbnQubV9jb3VudGVyID0gY291
bnRlcjsKKyAgICB9CisKKyAgICBDb250ZW50RGF0YSogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmV4dDsgfQorICAgIHZvaWQgc2V0TmV4dChDb250ZW50RGF0YSogbmV4dCkKKyAgICB7CisgICAg
ICAgIG1fbmV4dCA9IG5leHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZGVsZXRlQ29u
dGVudCgpOworCiAgICAgU3R5bGVDb250ZW50VHlwZSBtX3R5cGU7CiAgICAgdW5pb24gewogICAg
ICAgICBTdHlsZUltYWdlKiBtX2ltYWdlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCmluZGV4IDA1NmRiZDguLjg3NzI2ZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKQEAgLTU1NCw4ICs1NTQsOCBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRD
b250ZW50KFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UsIGJvb2wgYWRkKQogCiAgICAgT3du
UHRyPENvbnRlbnREYXRhPiYgY29udGVudCA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vzcygp
LT5tX2NvbnRlbnQ7CiAgICAgQ29udGVudERhdGEqIGxhc3RDb250ZW50ID0gY29udGVudC5nZXQo
KTsKLSAgICB3aGlsZSAobGFzdENvbnRlbnQgJiYgbGFzdENvbnRlbnQtPm1fbmV4dCkKLSAgICAg
ICAgbGFzdENvbnRlbnQgPSBsYXN0Q29udGVudC0+bV9uZXh0OworICAgIHdoaWxlIChsYXN0Q29u
dGVudCAmJiBsYXN0Q29udGVudC0+bmV4dCgpKQorICAgICAgICBsYXN0Q29udGVudCA9IGxhc3RD
b250ZW50LT5uZXh0KCk7CiAKICAgICBib29sIHJldXNlQ29udGVudCA9ICFhZGQ7CiAgICAgQ29u
dGVudERhdGEqIG5ld0NvbnRlbnREYXRhOwpAQCAtNTY2LDM0ICs1NjYsMzAgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0Q29udGVudChQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlLCBib29sIGFk
ZCkKICAgICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7CiAKICAgICBpZiAo
bGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVudCkKLSAgICAgICAgbGFzdENvbnRlbnQtPm1fbmV4
dCA9IG5ld0NvbnRlbnREYXRhOworICAgICAgICBsYXN0Q29udGVudC0+c2V0TmV4dChuZXdDb250
ZW50RGF0YSk7CiAgICAgZWxzZQogICAgICAgICBjb250ZW50LnNldChuZXdDb250ZW50RGF0YSk7
CiAKLSAgICBuZXdDb250ZW50RGF0YS0+bV9jb250ZW50Lm1faW1hZ2UgPSBpbWFnZS5yZWxlYXNl
UmVmKCk7Ci0gICAgbmV3Q29udGVudERhdGEtPm1fdHlwZSA9IENPTlRFTlRfT0JKRUNUOworICAg
IG5ld0NvbnRlbnREYXRhLT5zZXRJbWFnZShpbWFnZSk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6
OnNldENvbnRlbnQoU3RyaW5nSW1wbCogcywgYm9vbCBhZGQpCit2b2lkIFJlbmRlclN0eWxlOjpz
ZXRDb250ZW50KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcywgYm9vbCBhZGQpCiB7CiAgICAgaWYg
KCFzKQogICAgICAgICByZXR1cm47IC8vIFRoZSBzdHJpbmcgaXMgbnVsbC4gTm90aGluZyB0byBk
by4gSnVzdCBiYWlsLgogCiAgICAgT3duUHRyPENvbnRlbnREYXRhPiYgY29udGVudCA9IHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2NvbnRlbnQ7CiAgICAgQ29udGVudERhdGEqIGxh
c3RDb250ZW50ID0gY29udGVudC5nZXQoKTsKLSAgICB3aGlsZSAobGFzdENvbnRlbnQgJiYgbGFz
dENvbnRlbnQtPm1fbmV4dCkKLSAgICAgICAgbGFzdENvbnRlbnQgPSBsYXN0Q29udGVudC0+bV9u
ZXh0OworICAgIHdoaWxlIChsYXN0Q29udGVudCAmJiBsYXN0Q29udGVudC0+bmV4dCgpKQorICAg
ICAgICBsYXN0Q29udGVudCA9IGxhc3RDb250ZW50LT5uZXh0KCk7CiAKICAgICBib29sIHJldXNl
Q29udGVudCA9ICFhZGQ7CiAgICAgaWYgKGFkZCAmJiBsYXN0Q29udGVudCkgewotICAgICAgICBp
ZiAobGFzdENvbnRlbnQtPm1fdHlwZSA9PSBDT05URU5UX1RFWFQpIHsKKyAgICAgICAgaWYgKGxh
c3RDb250ZW50LT50eXBlKCkgPT0gQ09OVEVOVF9URVhUKSB7CiAgICAgICAgICAgICAvLyBXZSBj
YW4gYXVnbWVudCB0aGUgZXhpc3Rpbmcgc3RyaW5nIGFuZCBzaGFyZSB0aGlzIENvbnRlbnREYXRh
IG5vZGUuCi0gICAgICAgICAgICBTdHJpbmdJbXBsKiBvbGRTdHIgPSBsYXN0Q29udGVudC0+bV9j
b250ZW50Lm1fdGV4dDsKLSAgICAgICAgICAgIFN0cmluZyBuZXdTdHIgPSBvbGRTdHI7Ci0gICAg
ICAgICAgICBuZXdTdHIuYXBwZW5kKHMpOwotICAgICAgICAgICAgbmV3U3RyLmltcGwoKS0+cmVm
KCk7Ci0gICAgICAgICAgICBvbGRTdHItPmRlcmVmKCk7Ci0gICAgICAgICAgICBsYXN0Q29udGVu
dC0+bV9jb250ZW50Lm1fdGV4dCA9IG5ld1N0ci5pbXBsKCk7CisgICAgICAgICAgICBTdHJpbmcg
bmV3U3RyID0gbGFzdENvbnRlbnQtPnRleHQoKTsKKyAgICAgICAgICAgIG5ld1N0ci5hcHBlbmQo
cy5nZXQoKSk7CisgICAgICAgICAgICBsYXN0Q29udGVudC0+c2V0VGV4dChuZXdTdHIuaW1wbCgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTYwNiwxMyArNjAy
LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldENvbnRlbnQoU3RyaW5nSW1wbCogcywgYm9vbCBh
ZGQpCiAgICAgICAgIG5ld0NvbnRlbnREYXRhID0gbmV3IENvbnRlbnREYXRhOwogCiAgICAgaWYg
KGxhc3RDb250ZW50ICYmICFyZXVzZUNvbnRlbnQpCi0gICAgICAgIGxhc3RDb250ZW50LT5tX25l
eHQgPSBuZXdDb250ZW50RGF0YTsKKyAgICAgICAgbGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29u
dGVudERhdGEpOwogICAgIGVsc2UKICAgICAgICAgY29udGVudC5zZXQobmV3Q29udGVudERhdGEp
OwogCi0gICAgbmV3Q29udGVudERhdGEtPm1fY29udGVudC5tX3RleHQgPSBzOwotICAgIG5ld0Nv
bnRlbnREYXRhLT5tX2NvbnRlbnQubV90ZXh0LT5yZWYoKTsKLSAgICBuZXdDb250ZW50RGF0YS0+
bV90eXBlID0gQ09OVEVOVF9URVhUOworICAgIG5ld0NvbnRlbnREYXRhLT5zZXRUZXh0KHMpOwog
fQogCiB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KENvdW50ZXJDb250ZW50KiBjLCBib29s
IGFkZCkKQEAgLTYyMiw4ICs2MTYsOCBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KENv
dW50ZXJDb250ZW50KiBjLCBib29sIGFkZCkKIAogICAgIE93blB0cjxDb250ZW50RGF0YT4mIGNv
bnRlbnQgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jb250ZW50OwogICAgIENv
bnRlbnREYXRhKiBsYXN0Q29udGVudCA9IGNvbnRlbnQuZ2V0KCk7Ci0gICAgd2hpbGUgKGxhc3RD
b250ZW50ICYmIGxhc3RDb250ZW50LT5tX25leHQpCi0gICAgICAgIGxhc3RDb250ZW50ID0gbGFz
dENvbnRlbnQtPm1fbmV4dDsKKyAgICB3aGlsZSAobGFzdENvbnRlbnQgJiYgbGFzdENvbnRlbnQt
Pm5leHQoKSkKKyAgICAgICAgbGFzdENvbnRlbnQgPSBsYXN0Q29udGVudC0+bmV4dCgpOwogCiAg
ICAgYm9vbCByZXVzZUNvbnRlbnQgPSAhYWRkOwogICAgIENvbnRlbnREYXRhKiBuZXdDb250ZW50
RGF0YSA9IDA7CkBAIC02MzQsMTIgKzYyOCwxMSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250
ZW50KENvdW50ZXJDb250ZW50KiBjLCBib29sIGFkZCkKICAgICAgICAgbmV3Q29udGVudERhdGEg
PSBuZXcgQ29udGVudERhdGE7CiAKICAgICBpZiAobGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVu
dCkKLSAgICAgICAgbGFzdENvbnRlbnQtPm1fbmV4dCA9IG5ld0NvbnRlbnREYXRhOworICAgICAg
ICBsYXN0Q29udGVudC0+c2V0TmV4dChuZXdDb250ZW50RGF0YSk7CiAgICAgZWxzZQogICAgICAg
ICBjb250ZW50LnNldChuZXdDb250ZW50RGF0YSk7CiAKLSAgICBuZXdDb250ZW50RGF0YS0+bV9j
b250ZW50Lm1fY291bnRlciA9IGM7Ci0gICAgbmV3Q29udGVudERhdGEtPm1fdHlwZSA9IENPTlRF
TlRfQ09VTlRFUjsKKyAgICBuZXdDb250ZW50RGF0YS0+c2V0Q291bnRlcihjKTsKIH0KIAogdm9p
ZCBSZW5kZXJTdHlsZTo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSwgQXBwbHlUcmFuc2Zvcm1PcmlnaW4g
YXBwbHlPcmlnaW4pIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRl
eCBhOGFmNjRjLi4yNTQ3MzVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
QEAgLTEwMDcsNyArMTAwNyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb250ZW50RGF0YSogY29u
dGVudERhdGEoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9jb250ZW50
LmdldCgpOyB9CiAgICAgYm9vbCBjb250ZW50RGF0YUVxdWl2YWxlbnQoY29uc3QgUmVuZGVyU3R5
bGUqIG90aGVyU3R5bGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0
aGlzKS0+cmFyZU5vbkluaGVyaXRlZERhdGEtPmNvbnRlbnREYXRhRXF1aXZhbGVudCgqY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KG90aGVyU3R5bGUpLT5yYXJlTm9uSW5oZXJpdGVkRGF0YSk7IH0K
ICAgICB2b2lkIGNsZWFyQ29udGVudCgpOwotICAgIHZvaWQgc2V0Q29udGVudChTdHJpbmdJbXBs
KiwgYm9vbCBhZGQgPSBmYWxzZSk7CisgICAgdm9pZCBzZXRDb250ZW50KFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4sIGJvb2wgYWRkID0gZmFsc2UpOwogICAgIHZvaWQgc2V0Q29udGVudChQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+LCBib29sIGFkZCA9IGZhbHNlKTsKICAgICB2b2lkIHNldENvbnRlbnQo
Q291bnRlckNvbnRlbnQqLCBib29sIGFkZCA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAppbmRleCBjMzM3
ZmE0Li5mN2M0MWNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcApAQCAtMTU5LDI4ICsxNTksMjggQEAgYm9vbCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpjb250ZW50RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVS
YXJlTm9uSW5oZXJpdGUKICAgICBDb250ZW50RGF0YSogYzIgPSBvLm1fY29udGVudC5nZXQoKTsK
IAogICAgIHdoaWxlIChjMSAmJiBjMikgewotICAgICAgICBpZiAoYzEtPm1fdHlwZSAhPSBjMi0+
bV90eXBlKQorICAgICAgICBpZiAoYzEtPnR5cGUoKSAhPSBjMi0+dHlwZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAoYzEtPm1fdHlwZSkgeworICAgICAg
ICBzd2l0Y2ggKGMxLT50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ09OVEVOVF9OT05FOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDT05URU5UX1RFWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFlcXVhbChjMS0+bV9jb250ZW50Lm1fdGV4dCwgYzItPm1fY29u
dGVudC5tX3RleHQpKQorICAgICAgICAgICAgICAgIGlmICghZXF1YWwoYzEtPnRleHQoKSwgYzIt
PnRleHQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ09OVEVOVF9PQkpFQ1Q6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KGMxLT5tX2NvbnRlbnQubV9p
bWFnZSwgYzItPm1fY29udGVudC5tX2ltYWdlKSkKKyAgICAgICAgICAgICAgICBpZiAoIVN0eWxl
SW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQoYzEtPmltYWdlKCksIGMyLT5pbWFnZSgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDT05URU5UX0NPVU5URVI6Ci0gICAgICAgICAgICAgICAgaWYgKCpjMS0+
bV9jb250ZW50Lm1fY291bnRlciAhPSAqYzItPm1fY29udGVudC5tX2NvdW50ZXIpCisgICAgICAg
ICAgICAgICAgaWYgKCpjMS0+Y291bnRlcigpICE9ICpjMi0+Y291bnRlcigpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBjMSA9IGMxLT5tX25leHQ7Ci0gICAgICAgIGMyID0gYzItPm1fbmV4dDsK
KyAgICAgICAgYzEgPSBjMS0+bmV4dCgpOworICAgICAgICBjMiA9IGMyLT5uZXh0KCk7CiAgICAg
fQogCiAgICAgcmV0dXJuICFjMSAmJiAhYzI7Cg==
</data>
<flag name="review"
          id="14006"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>