<?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>105051</bug_id>
          
          <creation_ts>2012-12-14 12:37:43 -0800</creation_ts>
          <short_desc>[chromium] Enable LCD AA if text is painted inside opaque region</short_desc>
          <delta_ts>2013-01-07 16:06:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>104956</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>d-r</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>junov</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>791773</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-12-14 12:37:43 -0800</bug_when>
    <thetext>We already mark layers whether they can use LCD text based on their transform and opacity. Now actually paint LCD text if it lies inside opaque region.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791782</commentid>
    <comment_count>1</comment_count>
      <attachid>179517</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-12-14 12:51:32 -0800</bug_when>
    <thetext>Created attachment 179517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791783</commentid>
    <comment_count>2</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-12-14 12:54:17 -0800</bug_when>
    <thetext>Uploading for early feedback. I still need to add unit-test for OpaqueRegionSkia::isOpaqueInRect().

This version of patch always uses NULL rect for text. So it only enables LCD on layers that have an opaque background (including root layer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791787</commentid>
    <comment_count>3</comment_count>
      <attachid>179517</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-12-14 12:56:33 -0800</bug_when>
    <thetext>Comment on attachment 179517
Patch

OpaqueRegionSkia changes look good. It would be nice to use/verify isOpaqueInRect() in the PlatformContextSkia tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791811</commentid>
    <comment_count>4</comment_count>
      <attachid>179517</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-14 13:26:06 -0800</bug_when>
    <thetext>Comment on attachment 179517
Patch

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

Won&apos;t this produce inconsistently rendered text within a layer depending on how the paint rect interacts with the opaque region?

This patch doesn&apos;t appear to actually populate the rect at all, so I can&apos;t tell where it is going to come from in general.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:449
&gt; +bool PlatformContextSkia::adjustPaintFlagsForText(SkPaint* paint, const SkRect* rect) const

I can&apos;t find any callers that pass in a non-null rect parameter - where are they?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791813</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-14 13:29:03 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Uploading for early feedback. I still need to add unit-test for OpaqueRegionSkia::isOpaqueInRect().
&gt; 
&gt; This version of patch always uses NULL rect for text. So it only enables LCD on layers that have an opaque background (including root layer).

Ah, I see.  So this doesn&apos;t actually do rect-region comparisons.

When it does, where do you anticipate the rect being compared to the opaque region will come from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791831</commentid>
    <comment_count>6</comment_count>
      <attachid>179517</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-12-14 13:59:46 -0800</bug_when>
    <thetext>Comment on attachment 179517
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:449
&gt;&gt; +bool PlatformContextSkia::adjustPaintFlagsForText(SkPaint* paint, const SkRect* rect) const
&gt; 
&gt; I can&apos;t find any callers that pass in a non-null rect parameter - where are they?

They will come from estimating text bounds using something like this:
http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp#L240

I chose to not compute bounds in this patch because text drawing code scattered in platform-specific files. I will add them for each platform in separate patches. But if you prefer I can get rid of the rect parameter for now. I could just always check device-clip-rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791846</commentid>
    <comment_count>7</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-12-14 14:09:05 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 179517 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=179517&amp;action=review
&gt; 
&gt; Won&apos;t this produce inconsistently rendered text within a layer depending on how the paint rect interacts with the opaque region?
&gt; 

Yes this is a possibility. There is no way to un-paint LCD text in immediate mode. We may be able to avoid it with impl-side painting where we can defer the decision until after recording the SkPicture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801776</commentid>
    <comment_count>8</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2013-01-07 16:06:25 -0800</bug_when>
    <thetext>I have decided to abandon this patch and move the refactoring changes to two separate patches here:
https://bugs.webkit.org/show_bug.cgi?id=106266
https://bugs.webkit.org/show_bug.cgi?id=106267</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179517</attachid>
            <date>2012-12-14 12:51:32 -0800</date>
            <delta_ts>2012-12-14 13:59:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105051-20121214124851.patch</filename>
            <type>text/plain</type>
            <size>19171</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU4YjVkMGZkMjAzMjRj
ZDlkMzVhNWI0YjFhN2Q5ZDg1Y2YzN2U0NC4uMTY5YTdmYTUxNzMxYjdjNWFlYmYxZDhkNjNjYTFj
YmQzZDlkNjYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTEyLTE0ICBBbG9r
IFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEVuYWJsZSBMQ0Qg
QUEgaWYgdGV4dCBpcyBwYWludGVkIGluc2lkZSBvcGFxdWUgcmVnaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwNTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXZlcmFnZXMgdGhlIGV4aXN0aW5n
IG9wYXF1ZS1yZWdpb24gdHJhY2tpbmcgdG8gY2hlY2sgaWYgdGhlIHRleHQgYmVpbmcKKyAgICAg
ICAgcGFpbnRlZCBsaWVzIHdpdGhpbiB0aGUgb3BhcXVlIHJlZ2lvbiBvbiB0aGUgY3VycmVudCBk
ZXZpY2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxl
Z2F0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5
ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
T3BhcXVlUmVnaW9uU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lh
OjpPcGFxdWVSZWdpb25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlUHJlc2VydmVz
T3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRJc09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjphcHBseU9wYXF1ZVJl
Z2lvbkZyb21MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjptYXJr
UmVjdEFzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtS
ZWN0QXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVl
UmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVnaW9uU2tpYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRT
a2lhOjphcHBseUNsaXBGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZGlkRHJhd1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXR1cFBhaW50Rm9yRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNr
aWFUZXh0KToKKwogMjAxMi0xMi0xMyAgS3VuaWhpa28gU2FrYW1vdG8gIDxrc2FrYW1vdG9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFNlY29uZHMvTWludXRlcyBmaWVsZCBvZiBkYXRlL3RpbWUg
aW5wdXQgVUkgc2hvdWxkIHJlc3BlY3Qgc3RlcCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcAppbmRl
eCA2MmVkY2VkMTc5N2YzY2M3MzNhN2NiZWY0YjI4NGQzM2JmNDM0Y2VmLi43MTljYzUyZjkwMWIx
MTFhOTk1OWEyMzQ4Yzg4NWI0ZjM2MjRjOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwCkBAIC01NywxMSAr
NTcsOCBAQCB2b2lkIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlOjpwYWlu
dENvbnRlbnRzKFNrQ2FudmFzKiBjYW52YXMsIGNvbgogICAgICAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0SGludGluZ1NjYWxlRmFjdG9yKGNhbnZhcy0+Z2V0VG90YWxNYXRyaXgoKS5nZXRTY2FsZVgo
KSk7CiAjZW5kaWYKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24oIW1f
b3BhcXVlKTsKLSAgICAvLyBGSVhNRTogUmVuYW1lIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldERy
YXdpbmdUb0ltYWdlQnVmZmVyIHRvIHNldENhblBhaW50TENEVGV4dC4KLSAgICAvLyBJIGFsc28g
c3VzcGVjdCB0aGF0IGEgZnVuY3Rpb24gb24gUGxhdGZvcm1Db250ZXh0U2tpYSBpcyBub3QgcmVh
bGx5IG5lZWRlZC4KLSAgICAvLyBHcmFwaGljc0NvbnRleHQ6OnNldEFsbG93c0ZvbnRTbW9vdGhp
bmcgY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
RHJhd2luZ1RvSW1hZ2VCdWZmZXIoIShjYW5QYWludExDRFRleHQgJiYgbV9vcGFxdWUpKTsKICAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKyAgICBjb250ZXh0
LnNldFNob3VsZFNtb290aEZvbnRzKGNhblBhaW50TENEVGV4dCk7CiAKICAgICAvLyBSZWNvcmQg
dHJhbnNmb3JtIHByaW9yIHRvIHBhaW50aW5nLCBhcyBhbGwgb3BhcXVlIHRyYWNraW5nIHdpbGwg
YmUKICAgICAvLyByZWxhdGl2ZSB0byB0aGlzIGN1cnJlbnQgdmFsdWUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6
LmNwcAppbmRleCA1Yzc5MDA0ODhkMDJiYmNiNDE3NzY1NzgwYWQ0ZTY5M2I2N2U3ZGI0Li45Yjdi
NjVjNDg4MmRiOGNhZTEzNWFmNjY2NzFkNjAyMTgzNjY5NDFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5j
cHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgIFNrUGFpbnQgcGFp
bnQ7CiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmco
JnBhaW50KTsKICAgICAgICAgZm9udC0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgmcGFpbnQp
OwotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFRleHRSZW5kZXJNb2RlKCZw
YWludCk7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0UGFpbnRGbGFnc0Zv
clRleHQoJnBhaW50LCAwKTsKICAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6
OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CiAKICAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKQEAg
LTEyOCw3ICsxMjgsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBn
YywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CiAg
ICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWlu
dCwgMCwgMCk7CiAgICAgICAgIGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNldHVwUGFpbnQoJnBhaW50
KTsKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgm
cGFpbnQpOworICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFBhaW50RmxhZ3NG
b3JUZXh0KCZwYWludCwgMCk7CiAgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCiAgICAgICAgIGlmICh0ZXh0TW9kZSAmIFRleHRN
b2RlRmlsbCkgewpAQCAtMjA1LDEzICsyMDUsMTMgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAogCiAgICAgICAgIGlm
IChmaWxsKSB7CiAgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0Zm9ybURhdGFGb3JTY3Jp
cHRSdW4oKS0+c2V0dXBQYWludCgmZmlsbFBhaW50KTsKLSAgICAgICAgICAgIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJmZpbGxQYWludCk7CisgICAgICAgICAg
ICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFBhaW50RmxhZ3NGb3JUZXh0KCZmaWxsUGFp
bnQsIDApOwogICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UG9zVGV4dChjb250cm9s
bGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBv
c2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxsUGFpbnQpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHN0cm9rZSkgewogICAgICAgICAgICAgY29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9y
U2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJnN0cm9rZVBhaW50KTsKLSAgICAgICAgICAgIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJnN0cm9rZVBhaW50KTsKKyAg
ICAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0UGFpbnRGbGFnc0ZvclRleHQo
JnN0cm9rZVBhaW50LCAwKTsKICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1Rl
eHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29u
dHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tlUGFpbnQpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9Gb250U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcAppbmRleCA2NTVhNzRiYjg2MzdhZjUxNTU0NzVmMGI3NjI5ZjNiNDg4MWY1ZDRi
Li4yZDQ1M2RlN2EwMzBlMGUzMGUxZDhmY2I3Y2E4Mjc1NjVhNWViYjExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcApAQCAtMTUx
LDcgKzE1MSw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAg
ICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwog
ICAgICAgICBzZXR1cFBhaW50KCZwYWludCwgZm9udCwgdGhpcywgc2hvdWxkQW50aWFsaWFzLCBz
aG91bGRTbW9vdGhGb250cyk7Ci0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0
VGV4dFJlbmRlck1vZGUoJnBhaW50KTsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5h
ZGp1c3RQYWludEZsYWdzRm9yVGV4dCgmcGFpbnQsIDApOwogICAgICAgICBwYWludC5zZXRUZXh0
RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKIAogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQx
Nl90KSwgcG9zLCBwYWludCk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAg
ICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVw
UGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgICAgICBzZXR1cFBhaW50KCZwYWlu
dCwgZm9udCwgdGhpcywgc2hvdWxkQW50aWFsaWFzLCBzaG91bGRTbW9vdGhGb250cyk7Ci0gICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJnBhaW50KTsK
KyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGp1c3RQYWludEZsYWdzRm9yVGV4dCgm
cGFpbnQsIDApOwogICAgICAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBo
SURfVGV4dEVuY29kaW5nKTsKIAogICAgICAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3Bh
cXVlUmVnaW9uU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L09wYXF1ZVJlZ2lvblNraWEuY3BwCmluZGV4IGJlNGJmYmM0MzIzOGI2NGU4YTVlMDQyMDcwOWQ0
NDYwOWJiMDQ5MzguLjM1MDRiYTdmZTQ2MTYxNmFlNGYzMjRkOWE3NmI2NmFjODgzNmVhZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVn
aW9uU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmNwcApAQCAtNDAsNiArNDAsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSByZWN0YW5ndWxhciBjbGlwLCB3
aXRoIHRoZSByZXN1bHQgaW4gfGRldmljZUNsaXBSZWN0fC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBn
ZXREZXZpY2VDbGlwQXNSZWN0KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIFNr
UmVjdCYgZGV2aWNlQ2xpcFJlY3QpCit7CisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGNsaXAgaW4g
ZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgaWYgKGNvbnRleHQtPmNhbnZhcygpLT5nZXRD
bGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlwVHlwZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU2tJUmVjdCBkZXZpY2VDbGlwSVJlY3Q7CisgICAgaWYgKGNvbnRleHQtPmNh
bnZhcygpLT5nZXRDbGlwRGV2aWNlQm91bmRzKCZkZXZpY2VDbGlwSVJlY3QpKQorICAgICAgICBk
ZXZpY2VDbGlwUmVjdC5zZXQoZGV2aWNlQ2xpcElSZWN0KTsKKyAgICBlbHNlCisgICAgICAgIGRl
dmljZUNsaXBSZWN0LnNldEVtcHR5KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogT3BhcXVl
UmVnaW9uU2tpYTo6T3BhcXVlUmVnaW9uU2tpYSgpCiAgICAgOiBtX29wYXF1ZVJlY3QoU2tSZWN0
OjpNYWtlRW1wdHkoKSkKIHsKQEAgLTU5LDYgKzc1LDIwIEBAIEludFJlY3QgT3BhcXVlUmVnaW9u
U2tpYTo6YXNSZWN0KCkgY29uc3QKICAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0
LWxlZnQsIGJvdHRvbS10b3ApOwogfQogCitib29sIE9wYXF1ZVJlZ2lvblNraWE6OmlzT3BhcXVl
SW5SZWN0KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCog
cmVjdCkgY29uc3QKK3sKKyAgICBTa1JlY3QgcXVlcnlSZWN0OworICAgIGNvbnN0IFNrUmVjdCYg
b3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoKTsKKyAgICBpZiAocmVjdCkg
eworICAgICAgICBjb25zdCBTa01hdHJpeCYgY2FudmFzVHJhbnNmb3JtID0gY29udGV4dC0+Y2Fu
dmFzKCktPmdldFRvdGFsTWF0cml4KCk7CisgICAgICAgIGlmICghY2FudmFzVHJhbnNmb3JtLm1h
cFJlY3QoJnF1ZXJ5UmVjdCwgKnJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0gZWxzZSBpZiAoIWdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgcXVlcnlSZWN0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG9wYXF1ZVJlY3QuY29udGFpbnMocXVl
cnlSZWN0KTsKK30KKwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB4ZmVybW9kZSB3aWxsIGZvcmNl
IHRoZSBkc3QgdG8gYmUgb3BhcXVlLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IGRzdC4KIHN0
YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZUlzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBi
b29sIHNyY0lzT3BhcXVlKQogewpAQCAtMTQ4LDMwICsxNzgsNiBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgT3BhcXVlUmVnaW9uU2tpYTo6
RHJhd1R5cAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
aXMgYSByZWN0YW5ndWxhciBjbGlwLCB3aXRoIHRoZSByZXN1bHQgaW4gfGRldmljZUNsaXBSZWN0
fC4KLXN0YXRpYyBpbmxpbmUgYm9vbCBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnN0IFBsYXRmb3Jt
Q29udGV4dFNraWEqIGNvbnRleHQsIFNrUmVjdCYgZGV2aWNlQ2xpcFJlY3QpCi17Ci0gICAgLy8g
R2V0IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlw
VHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2tJUmVjdCBkZXZpY2VDbGlwSVJl
Y3Q7Ci0gICAgaWYgKGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwRGV2aWNlQm91bmRzKCZkZXZp
Y2VDbGlwSVJlY3QpKQotICAgICAgICBkZXZpY2VDbGlwUmVjdC5zZXQoZGV2aWNlQ2xpcElSZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIGRldmljZUNsaXBSZWN0LnNldEVtcHR5KCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBTa1JlY3QmIGN1cnJlbnRUcmFja2luZ09w
YXF1ZVJlY3QoU2tSZWN0JiByb290T3BhcXVlUmVjdCwgVmVjdG9yPE9wYXF1ZVJlZ2lvblNraWE6
OkNhbnZhc0xheWVyU3RhdGUsIDM+JiBjYW52YXNMYXllclN0YWNrKQotewotICAgIC8vIElmIHdl
IGFyZSBkcmF3aW5nIGludG8gYSBjYW52YXMgbGF5ZXIsIHRoZW4gdHJhY2sgdGhlIG9wYXF1ZSBy
ZWN0IGluIHRoYXQgbGF5ZXIuCi0gICAgaWYgKCFjYW52YXNMYXllclN0YWNrLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGNhbnZhc0xheWVyU3RhY2subGFzdCgpLm9wYXF1ZVJlY3Q7Ci0gICAg
cmV0dXJuIHJvb3RPcGFxdWVSZWN0OwotfQotCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hD
YW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkKIHsKICAgICBDYW52YXNMYXllclN0YXRl
IHN0YXRlOwpAQCAtMzMzLDcgKzMzOSw3IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlP
cGFxdWVSZWdpb25Gcm9tTGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29uCiAKICAg
ICBTa1JlY3Qgc291cmNlT3BhcXVlUmVjdCA9IGxheWVyT3BhcXVlUmVjdDsKICAgICAvLyBTYXZl
IHRoZSBvcGFxdWUgYXJlYSBpbiB0aGUgZGVzdGluYXRpb24sIHNvIHdlIGNhbiBwcmVzZXJ2ZSB0
aGUgcGFydHMgb2YgaXQgdW5kZXIgdGhlIHNvdXJjZSBvcGFxdWUgYXJlYSBpZiBwb3NzaWJsZS4K
LSAgICBTa1JlY3QgZGVzdGluYXRpb25PcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVl
UmVjdChtX29wYXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisgICAgU2tSZWN0IGRlc3Rp
bmF0aW9uT3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoKTsKIAogICAgIGJv
b2wgb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNl
cnZlc09wYXF1ZShwYWludCwgZmFsc2UpOwogICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJl
Y3RQcmVzZXJ2ZXNPcGFxdWUpCkBAIC0zNjMsNyArMzY5LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25T
a2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyByZWN0YW5n
bGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVh
c2UgdGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBs
ZXhpdHkuCiAKLSAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVS
ZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKyAgICBTa1JlY3QmIG9wYXF1
ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCk7CiAKICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5Nyw3ICs0MDMsNyBAQCB2b2lkIE9wYXF1ZVJl
Z2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQogICAgIC8v
IFdlIHdhbnQgdG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSByZWN0YW5nbGUg
YXMgd2UgY2FuLCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAogICAgIC8vIHJlY3RhbmdsZSBpbnNp
ZGUgbV9vcGFxdWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJlY3R8LgogCi0g
ICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVlUmVjdChtX29wYXF1
ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3Vy
cmVudFRyYWNraW5nT3BhcXVlUmVjdCgpOwogCiAgICAgaWYgKCFTa1JlY3Q6OkludGVyc2VjdHMo
cmVjdCwgb3BhcXVlUmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMiw4ICs0MzgsMjAgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYg
cmVjdCkKIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUoKQogewot
ICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFx
dWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1
cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoKTsKICAgICBvcGFxdWVSZWN0LnNldEVtcHR5KCk7CiB9
CiAKK1NrUmVjdCYgT3BhcXVlUmVnaW9uU2tpYTo6Y3VycmVudFRyYWNraW5nT3BhcXVlUmVjdCgp
Cit7CisgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0
cmFjayB0aGUgb3BhcXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICByZXR1cm4gbV9jYW52YXNM
YXllclN0YWNrLmlzRW1wdHkoKSA/IG1fb3BhcXVlUmVjdCA6IG1fY2FudmFzTGF5ZXJTdGFjay5s
YXN0KCkub3BhcXVlUmVjdDsKK30KKworY29uc3QgU2tSZWN0JiBPcGFxdWVSZWdpb25Ta2lhOjpj
dXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBJZiB3ZSBhcmUgZHJh
d2luZyBpbnRvIGEgY2FudmFzIGxheWVyLCB0aGVuIHRyYWNrIHRoZSBvcGFxdWUgcmVjdCBpbiB0
aGF0IGxheWVyLgorICAgIHJldHVybiBtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgpID8gbV9v
cGFxdWVSZWN0IDogbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFxdWVSZWN0OworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCmluZGV4IGRjYzFmY2I5NzhmNjU3
ZDg1NzQ2NzRiMTVmZGI2MjZlNTljYTU2M2YuLjQzNjJmNGQ4ZGM0MTZhOTM3YjA4OWUwMGY4ZjZm
N2RlMzg0M2NjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCkBAIC01Miw2ICs1MiwxMCBAQCBwdWJsaWM6
CiAgICAgLy8gVGhlIHJlc3VsdGluZyBvcGFxdWUgcmVnaW9uIGFzIGEgc2luZ2xlIHJlY3QuCiAg
ICAgSW50UmVjdCBhc1JlY3QoKSBjb25zdDsKIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Z2l2ZW4gcmVjdCBpcyBpbnNpZGUgdGhlIGN1cnJlbnRseSB0cmFja2VkIHJlZ2lvbi4KKyAgICAv
LyBBIG51bGwgcmVjdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBjdXJyZW50IGRldmljZSBjbGlwIGJv
dW5kcy4KKyAgICBib29sIGlzT3BhcXVlSW5SZWN0KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
LCBjb25zdCBTa1JlY3QqKSBjb25zdDsKKwogICAgIHZvaWQgcHVzaENhbnZhc0xheWVyKGNvbnN0
IFNrUGFpbnQqKTsKICAgICB2b2lkIHBvcENhbnZhc0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqKTsKIApAQCAtOTEsNiArOTUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbWFya1JlY3RB
c05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKICAgICB2b2lkIG1hcmtBbGxBc05vbk9wYXF1ZSgp
OwogCisgICAgU2tSZWN0JiBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCk7CisgICAgY29uc3Qg
U2tSZWN0JiBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCkgY29uc3Q7CisKICAgICBTa1JlY3Qg
bV9vcGFxdWVSZWN0OwogCiAgICAgVmVjdG9yPENhbnZhc0xheWVyU3RhdGUsIDM+IG1fY2FudmFz
TGF5ZXJTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGY3OWQ5MjNiYjRmMzIw
NzIyODAwNjJjNGQ5OTAzZmZlNzAyMDkwMzUuLmM3NTY0ZWI3YWJkMjg3OGQzZDA4MjI4NjFmZWZm
NjhlYjIxNDMwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtNDQ2LDYgKzQ0Niwy
OCBAQCBmbG9hdCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Rm9yU3Ryb2tpbmcoU2tQ
YWludCogcGFpbnQsIFNrUmVjdCogcmVjdCwgaQogICAgIHJldHVybiB3aWR0aDsKIH0KIAorYm9v
bCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphZGp1c3RQYWludEZsYWdzRm9yVGV4dChTa1BhaW50KiBw
YWludCwgY29uc3QgU2tSZWN0KiByZWN0KSBjb25zdAoreworICAgIGlmICghcGFpbnQtPmlzTENE
UmVuZGVyVGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWxsb3dzTENE
VGV4dChyZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGFpbnQtPnNldExDRFJl
bmRlclRleHQoZmFsc2UpOworCisjaWYgZGVmaW5lZChPU19XSU4pCisgICAgLy8gSWYgd2UgKmp1
c3QqIGNsZWFyIG91ciByZXF1ZXN0IGZvciBMQ0QsIHRoZW4gR0RJIHNlZW1zIHRvCisgICAgLy8g
c29tZXRpbWVzIGdpdmUgdXMgQUEgdGV4dCwgYW5kIHNvbWV0aW1lcyBnaXZlIHVzIEJXIHRleHQu
IFNpbmNlIHRoZQorICAgIC8vIG9yaWdpbmFsIGludGVudCB3YXMgTENELCB3ZSB3YW50IHRvIGZv
cmNlIEFBIChyYXRoZXIgdGhhbiBCVyksIHNvIHdlCisgICAgLy8gYWRkIGEgc3BlY2lhbCBiaXQg
dG8gdGVsbCBTa2lhIHRvIGRvIGl0cyBiZXN0IHRvIGF2b2lkIHRoZSBCVzogYnkKKyAgICAvLyBk
cmF3aW5nIExDRCBvZmZzY3JlZW4gYW5kIGRvd25zYW1wbGluZyB0aGF0IHRvIEFBLgorICAgIHBh
aW50LT5zZXRGbGFncyhwYWludC0+Z2V0RmxhZ3MoKSB8IFNrUGFpbnQ6OmtHZW5BOEZyb21MQ0Rf
RmxhZyk7CisjZW5kaWYgLy8gT1NfV0lOCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREcmF3TG9vcGVyKFNrRHJhd0xvb3BlciogZGwpCiB7CiAg
ICAgU2tSZWZDbnRfU2FmZUFzc2lnbihtX3N0YXRlLT5tX2xvb3BlciwgZGwpOwpAQCAtNjEyLDI2
ICs2MzQsMTQgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3UmVjdChjb25zdCBT
a1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50LAogICAgICAgICBtX29wYXF1ZVJlZ2lv
bi5kaWREcmF3UmVjdCh0aGlzLCByZWN0LCBwYWludCwgYml0bWFwKTsKIH0KIAotdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjphZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50KiBwYWludCkKLXsK
LSAgICBpZiAoIXBhaW50LT5pc0xDRFJlbmRlclRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoY291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKSk7Ci19
Ci0KLWJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKQor
Ym9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphbGxvd3NMQ0RUZXh0KGNvbnN0IFNrUmVjdCogcmVj
dCkgY29uc3QKIHsKLSAgICAvLyBPdXIgbGF5ZXJzIG9ubHkgaGF2ZSBhIHNpbmdsZSBhbHBoYSBj
aGFubmVsLiBUaGlzIG1lYW5zIHRoYXQgc3VicGl4ZWwKLSAgICAvLyByZW5kZXJlZCB0ZXh0IGNh
bm5vdCBiZSBjb21wb3NpdGVkIGNvcnJlY3RseSB3aGVuIHRoZSBsYXllciBpcwotICAgIC8vIGNv
bGxhcHNlZC4gVGhlcmVmb3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRpc2FibGVkIHdoZW4gd2UgYXJl
IGRyYXdpbmcKLSAgICAvLyBvbnRvIGEgbGF5ZXIuCi0gICAgaWYgKGlzRHJhd2luZ1RvTGF5ZXIo
KSkKKyAgICBpZiAoIW1fZ2MtPnNob3VsZFNtb290aEZvbnRzKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIC8vIElmIHRoaXMgdGV4dCBpcyBub3QgaW4gYW4gaW1hZ2UgYnVmZmVyIGFu
ZCBzbyB3b24ndCBiZSBleHRlcm5hbGx5Ci0gICAgLy8gY29tcG9zaXRlZCwgdGhlbiBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcgaXMgZmluZS4KLSAgICByZXR1cm4gIWlzRHJhd2luZ1RvSW1hZ2VCdWZm
ZXIoKTsKKyAgICAvLyBMQ0QgdGV4dCBjYW4gYmUgYWxsb3dlZCBpZiB0aGUgZ2l2ZW4gcmVjdCBs
aWVzIGluc2lkZSB0aGUgb3BhcXVlIHJlZ2lvbi4KKyAgICAvLyBJZiB3ZSBhcmUgbm90IHRyYWNr
aW5nIG9wYXF1ZSByZWdpb24sIHdlIGFzc3VtZSBjYW52YXMgaXMgb3BhcXVlLgorICAgIHJldHVy
biBtX3RyYWNrT3BhcXVlUmVnaW9uID8gbV9vcGFxdWVSZWdpb24uaXNPcGFxdWVJblJlY3QodGhp
cywgcmVjdCk6IHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKaW5kZXggNmFmYWI4NWQ2Zjg5MTlkYmExNDgzNDI2YmZlM2ZkNWNkNzlkYmMwNS4u
ODEzMDgxZjQyZjE2MDhkYmVjMzBkNzNjMWE1OGMxOTMyM2RmMjlkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKQEAgLTExOSw2ICsxMTksMTEgQEAgcHVibGljOgogICAgIC8vIHN0YXJ0IGFuZCBl
bmQgdGhhdCBsZW5ndGggd2l0aCBhIGRhc2gvZG90LgogICAgIGZsb2F0IHNldHVwUGFpbnRGb3JT
dHJva2luZyhTa1BhaW50KiwgU2tSZWN0KiwgaW50IGxlbmd0aCkgY29uc3Q7CiAKKyAgICAvLyBB
ZGp1c3QgdGhlIHBhaW50IGZsYWdzIGZvciBkcmF3aW5nIHRleHQgaW4gdGhlIGdpdmVuIHJlY3Qu
CisgICAgLy8gQSBudWxsIHJlY3QgaXMgZXF1aXZhbGVudCB0byB0aGUgYmFja2luZyBjYW52YXMg
cmVjdC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGFkanVzdG1lbnQgd2FzIG1hZGUgb3Ro
ZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgICAgYm9vbCBhZGp1c3RQYWludEZsYWdzRm9yVGV4dChT
a1BhaW50KiwgY29uc3QgU2tSZWN0KikgY29uc3Q7CisKICAgICAvLyBTdGF0ZSBzZXR0aW5nIGZ1
bmN0aW9ucy4KICAgICB2b2lkIHNldERyYXdMb29wZXIoU2tEcmF3TG9vcGVyKik7ICAvLyBOb3Rl
OiB0YWtlcyBhbiBhZGRpdGlvbmFsIHJlZi4KICAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
OwpAQCAtMTk4LDEwICsyMDMsNiBAQCBwdWJsaWM6CiAgICAgLy8gICAgICAgIHNtYWxsZXIgcmVj
dCB0aGFuIHRoZSBvbmUgZHJhd24gdG8sIGR1ZSB0byBpdHMgY2xpcHBpbmcgbG9naWMuCiAgICAg
dm9pZCBkaWREcmF3UmVjdChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tC
aXRtYXAqID0gMCk7CiAKLSAgICAvLyBUdXJuIG9mZiBMQ0QgdGV4dCBmb3IgdGhlIHBhaW50IGlm
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjb250ZXh0LgotICAgIHZvaWQgYWRqdXN0VGV4dFJlbmRl
ck1vZGUoU2tQYWludCopOwotICAgIGJvb2wgY291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKTsKLQog
ICAgIGVudW0gQW50aUFsaWFzaW5nTW9kZSB7CiAgICAgICAgIE5vdEFudGlBbGlhc2VkLAogICAg
ICAgICBBbnRpQWxpYXNlZApAQCAtMjYzLDYgKzI2NCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCByZWFsaXplU2F2ZShTa0NhbnZhczo6U2F2ZUZsYWdzKTsKIAorICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBMQ0QgdGV4dCBjYW4gYmUgcGFpbnRlZCBpbnNpZGUgdGhlIGdpdmVuIHJlY3QuCisgICAg
Ly8gQSBudWxsIHJlY3QgaXMgZXF1aXZhbGVkIHRvIHRoZSBiYWNraW5nIGNhbnZhcyByZWN0Lgor
ICAgIGJvb2wgYWxsb3dzTENEVGV4dChjb25zdCBTa1JlY3QqKSBjb25zdDsKKwogICAgIC8vIERl
ZmluZXMgZHJhd2luZyBzdHlsZS4KICAgICBzdHJ1Y3QgU3RhdGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKaW5kZXgg
MTA0ZDgyNDU3ZjFjYWYzYmVhOWJiMzE3NmI1ZDA3N2VjZGRhZTdkZC4uMjE5M2MxODU3MWExMmJm
OWYwYTljYjlmODFhZWNjNGYzNjFiNWVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKQEAgLTE4NiwxNyArMTg2LDYg
QEAgc3RhdGljIHZvaWQgc2V0dXBQYWludEZvckZvbnQoU2tQYWludCogcGFpbnQsIFBsYXRmb3Jt
Q29udGV4dFNraWEqIHBjcywKICAgICAvLyBvbmx5IGFsbG93IGZlYXR1cmVzIHRoYXQgU3lzdGVt
UGFyYW1ldGVyc0luZm8gYWxsb3dzCiAgICAgdGV4dEZsYWdzICY9IGdldERlZmF1bHRHRElUZXh0
RmxhZ3MoKTsKIAotICAgIC8vIGRvIHRoaXMgY2hlY2sgYWZ0ZXIgb3VyIHN3aXRjaCBvbiBsZlF1
YWxpdHkKLSAgICBpZiAoIXBjcy0+Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKSkgewotICAgICAg
ICB0ZXh0RmxhZ3MgJj0gflNrUGFpbnQ6OmtMQ0RSZW5kZXJUZXh0X0ZsYWc7Ci0gICAgICAgIC8v
IElmIHdlICpqdXN0KiBjbGVhciBvdXIgcmVxdWVzdCBmb3IgTENELCB0aGVuIEdESSBzZWVtcyB0
bwotICAgICAgICAvLyBzb21ldGltZXMgZ2l2ZSB1cyBBQSB0ZXh0LCBhbmQgc29tZXRpbWVzIGdp
dmUgdXMgQlcgdGV4dC4gU2luY2UgdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGludGVudCB3YXMg
TENELCB3ZSB3YW50IHRvIGZvcmNlIEFBIChyYXRoZXIgdGhhbiBCVyksIHNvIHdlCi0gICAgICAg
IC8vIGFkZCBhIHNwZWNpYWwgYml0IHRvIHRlbGwgU2tpYSB0byBkbyBpdHMgYmVzdCB0byBhdm9p
ZCB0aGUgQlc6IGJ5Ci0gICAgICAgIC8vIGRyYXdpbmcgTENEIG9mZnNjcmVlbiBhbmQgZG93bnNh
bXBsaW5nIHRoYXQgdG8gQUEuCi0gICAgICAgIHRleHRGbGFncyB8PSBTa1BhaW50OjprR2VuQThG
cm9tTENEX0ZsYWc7Ci0gICAgfQotCiAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHRleHRGbGFn
c01hc2sgPSBTa1BhaW50OjprQW50aUFsaWFzX0ZsYWcgfAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2tQYWludDo6a0xDRFJlbmRlclRleHRfRmxhZyB8CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50OjprR2VuQThGcm9t
TENEX0ZsYWc7CkBAIC0yMDcsNiArMTk2LDggQEAgc3RhdGljIHZvaWQgc2V0dXBQYWludEZvckZv
bnQoU2tQYWludCogcGFpbnQsIFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcywKICAgICBmbGFncyAm
PSB+dGV4dEZsYWdzTWFzazsKICAgICBmbGFncyB8PSB0ZXh0RmxhZ3M7CiAgICAgcGFpbnQtPnNl
dEZsYWdzKGZsYWdzKTsKKworICAgIHBjcy0+YWRqdXN0UGFpbnRGbGFnc0ZvclRleHQocGFpbnQs
IDApOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgSEZPTlQgaGZvbnQsCg==
</data>
<flag name="review"
          id="196413"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>