<?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>116397</bug_id>
          
          <creation_ts>2013-05-18 13:32:13 -0700</creation_ts>
          <short_desc>Refactor RenderStyle::diff()</short_desc>
          <delta_ts>2013-05-19 19:27:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>116319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>890944</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 13:32:13 -0700</bug_when>
    <thetext>RenderStyle::diff() is tricky for two reasons.

First, there&apos;s nothing to enforce the requirement that &quot;more work&quot; diffs have to be detected before &quot;less work&quot; diffs (i.e. we have to always check for changes that result in StyleDifferenceLayout before changes that result in StyleDifferenceRepaint).

Secondly, in some cases, even when we return, say, StyleDifferenceLayoutPositionedMovementOnly or StyleDifferenceRecompositeLayer, we also need to check for changes that require repaint, and that&apos;s not possible now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890955</commentid>
    <comment_count>1</comment_count>
      <attachid>202217</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 14:24:49 -0700</bug_when>
    <thetext>Created attachment 202217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890988</commentid>
    <comment_count>2</comment_count>
      <attachid>202217</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-18 18:11:28 -0700</bug_when>
    <thetext>Comment on attachment 202217
Patch

r=me, this is great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891098</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-19 19:27:13 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/150348</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202217</attachid>
            <date>2013-05-18 14:24:49 -0700</date>
            <delta_ts>2013-05-18 18:11:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116397-20130518142340.patch</filename>
            <type>text/plain</type>
            <size>27521</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzMWU5NGM3ZjAwODRl
NTViMDU4MDVhYTA2NjMzMzA5OTRmMzI5OC4uOTI2NmFkOWRhMmZmYWJlMjc0YzdjNzIyYjZmOTFi
ZGZiNGI1MzU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTA1LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlclN0eWxlOjpkaWZmKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNjM5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgUmVuZGVyU3R5bGU6OmRpZmYoKSB3YXMgcHJvbmUgdG8gYmVpbmcg
Y2hhbmdlZCBpbmNvcnJlY3RseSwgc2luY2UgdGhlcmUgd2FzCisgICAgICAgIGEgcG9vcmx5IGRv
Y3VtZW50ZWQgb3JkZXJpbmcgcmVxdWlyZW1lbnQ6IHN0eWxlIGNoYW5nZXMgdGhhdCBjYXVzZSBs
YXlvdXQKKyAgICAgICAgaGF2ZSB0byBiZSBkZXRlY3RlZCBiZWZvcmUgdGhvc2UgdGhhdCBjYXVz
ZSBvbmx5IHJlcGFpbnRpbmcuCisgICAgICAgIAorICAgICAgICBJbiBhZGRpdGlvbiwgdGhlIGV4
aXN0aW5nIGNvZGUgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIHNlcGFyYXRlbHkgYXNrIHdoZXRoZXIK
KyAgICAgICAgYSBnaXZlbiBzdHlsZSBjaGFuZ2UgcmVxdWlyZXMgYSByZXBhaW50LCBpZiB3ZSd2
ZSBhbHJlYWR5IGRldGVjdGVkIHRoYXQgaXQKKyAgICAgICAgcmVxdWlyZXMgYSBwb3NpdGlvbmVk
LW1vdmVtZW50LW9ubHkgbGF5b3V0LgorICAgICAgICAKKyAgICAgICAgRml4IGJ5IGZhY3Rvcmlu
ZyB0aGUgY29kZSBpbnRvIG1lbWJlciBmdW5jdGlvbnMgdGhhdCBjaGVjayBmb3IgZWFjaCB0eXBl
CisgICAgICAgIG9mIHN0eWxlIGNoYW5nZS4KKyAgICAgICAgCisgICAgICAgIE5vIGJlaGF2aW9y
IGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkNoYW5nZUlzTW92ZW1lbnRPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNQb3NpdGlvbmVkTGF5b3V0T25seSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXllclJlcGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBhaW50
SWZUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc1Jl
Y29tcG9zaXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmRpZmYpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorCiAyMDEzLTA1LTE3ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEdhcmJhZ2Ug
b24gcGFnZSBiYWNrZ3JvdW5kIHdoaWxlIGh0dHA6Ly9jYW5iZXJyYWJhbGxvb25zLmNvbS5hdSBp
cyBsb2FkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAppbmRleCBmMzgwNGIxOWUwYTNmNTI1M2Y3NDkzMzg2N2FmMmQ2NjAzZTM2NTAyLi45MGY5
ZWM3NjQzOThjOGVjOTJjMzBmOGRiMDFiOWE3MDU4MTg4ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTM0MCw3ICszNDAsNyBAQCBi
b29sIFJlbmRlclN0eWxlOjppbmhlcml0ZWREYXRhU2hhcmVkKGNvbnN0IFJlbmRlclN0eWxlKiBv
dGhlcikgY29uc3QKICAgICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEuZ2V0KCkgPT0gb3RoZXIt
PnJhcmVJbmhlcml0ZWREYXRhLmdldCgpOwogfQogCi1zdGF0aWMgYm9vbCBwb3NpdGlvbmVkT2Jq
ZWN0TW92ZWQoY29uc3QgTGVuZ3RoQm94JiBhLCBjb25zdCBMZW5ndGhCb3gmIGIsIGNvbnN0IExl
bmd0aCYgd2lkdGgpCitzdGF0aWMgYm9vbCBwb3NpdGlvbkNoYW5nZUlzTW92ZW1lbnRPbmx5KGNv
bnN0IExlbmd0aEJveCYgYSwgY29uc3QgTGVuZ3RoQm94JiBiLCBjb25zdCBMZW5ndGgmIHdpZHRo
KQogewogICAgIC8vIElmIGFueSB1bml0IHR5cGVzIGFyZSBkaWZmZXJlbnQsIHRoZW4gd2UgY2Fu
J3QgZ3VhcmFudGVlCiAgICAgLy8gdGhhdCB0aGlzIHdhcyBqdXN0IGEgbW92ZW1lbnQuCkBAIC0z
NjcsMzggKzM2NywyNyBAQCBzdGF0aWMgYm9vbCBwb3NpdGlvbmVkT2JqZWN0TW92ZWQoY29uc3Qg
TGVuZ3RoQm94JiBhLCBjb25zdCBMZW5ndGhCb3gmIGIsIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVN0eWxlRGlmZmVyZW5jZSBSZW5kZXJTdHlsZTo6ZGlmZihjb25zdCBSZW5kZXJTdHls
ZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNv
bnN0Citib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJT
dHlsZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMp
IGNvbnN0CiB7Ci0gICAgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKLQotI2lmIEVOQUJMRShTVkcpCi0gICAgU3R5bGVEaWZm
ZXJlbmNlIHN2Z0NoYW5nZSA9IFN0eWxlRGlmZmVyZW5jZUVxdWFsOwotICAgIGlmIChtX3N2Z1N0
eWxlICE9IG90aGVyLT5tX3N2Z1N0eWxlKSB7Ci0gICAgICAgIHN2Z0NoYW5nZSA9IG1fc3ZnU3R5
bGUtPmRpZmYob3RoZXItPm1fc3ZnU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAoc3ZnQ2hhbmdl
ID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCkKLSAgICAgICAgICAgIHJldHVybiBzdmdDaGFuZ2U7
Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAobV9ib3gtPndpZHRoKCkgIT0gb3RoZXItPm1fYm94
LT53aWR0aCgpCiAgICAgICAgIHx8IG1fYm94LT5taW5XaWR0aCgpICE9IG90aGVyLT5tX2JveC0+
bWluV2lkdGgoKQogICAgICAgICB8fCBtX2JveC0+bWF4V2lkdGgoKSAhPSBvdGhlci0+bV9ib3gt
Pm1heFdpZHRoKCkKICAgICAgICAgfHwgbV9ib3gtPmhlaWdodCgpICE9IG90aGVyLT5tX2JveC0+
aGVpZ2h0KCkKICAgICAgICAgfHwgbV9ib3gtPm1pbkhlaWdodCgpICE9IG90aGVyLT5tX2JveC0+
bWluSGVpZ2h0KCkKICAgICAgICAgfHwgbV9ib3gtPm1heEhlaWdodCgpICE9IG90aGVyLT5tX2Jv
eC0+bWF4SGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fYm94LT52ZXJ0aWNhbEFsaWduKCkgIT0g
b3RoZXItPm1fYm94LT52ZXJ0aWNhbEFsaWduKCkgfHwgbm9uaW5oZXJpdGVkX2ZsYWdzLl92ZXJ0
aWNhbF9hbGlnbiAhPSBvdGhlci0+bm9uaW5oZXJpdGVkX2ZsYWdzLl92ZXJ0aWNhbF9hbGlnbikK
LSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBpZiAobV9ib3gtPmJveFNpemluZygpICE9IG90aGVyLT5tX2JveC0+Ym94U2l6
aW5nKCkpCi0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgaWYgKHN1cnJvdW5kLT5tYXJnaW4gIT0gb3RoZXItPnN1cnJvdW5k
LT5tYXJnaW4pCi0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKHN1cnJvdW5kLT5wYWRkaW5nICE9IG90aGVyLT5zdXJy
b3VuZC0+cGFkZGluZykKLSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkg
IT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSB7CiAgICAgICAgIGlmIChyYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9hcHBlYXJhbmNlICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9hcHBlYXJhbmNlIApAQCAtNDA2LDQxICszOTUsNDEgQEAgU3R5bGVEaWZmZXJlbmNl
IFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNo
YW5nZWRDb24KICAgICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXJnaW5BZnRl
ckNvbGxhcHNlICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFyZ2luQWZ0ZXJDb2xs
YXBzZQogICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPmxpbmVDbGFtcCAhPSBv
dGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPmxpbmVDbGFtcAogICAgICAgICAgICAgfHwgcmFy
ZU5vbkluaGVyaXRlZERhdGEtPnRleHRPdmVyZmxvdyAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRl
ZERhdGEtPnRleHRPdmVyZmxvdykKLSAgICAgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VM
YXlvdXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAocmFyZU5vbklu
aGVyaXRlZERhdGEtPm1fcmVnaW9uT3ZlcmZsb3cgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX3JlZ2lvbk92ZXJmbG93KQotICAgICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5j
ZUxheW91dDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlmIChyYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV93cmFwRmxvdyAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fd3JhcEZsb3cKICAgICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3dyYXBU
aHJvdWdoICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93cmFwVGhyb3VnaAogICAg
ICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVNYXJnaW4gIT0gb3RoZXIt
PnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlTWFyZ2luCiAgICAgICAgICAgICB8fCByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZVBhZGRpbmcgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX3NoYXBlUGFkZGluZykKLSAgICAgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVu
Y2VMYXlvdXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fZGVwcmVjYXRlZEZsZXhpYmxlQm94LmdldCgpICE9IG90aGVyLT5y
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGlibGVCb3guZ2V0KCkKICAgICAg
ICAgICAgICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGlibGVCb3gu
Z2V0KCkgIT0gKm90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGli
bGVCb3guZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0Owor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX2ZsZXhpYmxlQm94LmdldCgpICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9mbGV4aWJsZUJveC5nZXQoKQogICAgICAgICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2ZsZXhpYmxlQm94LmdldCgpICE9ICpvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
ZmxleGlibGVCb3guZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5
b3V0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9vcmRlciAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fb3JkZXIK
ICAgICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FsaWduQ29udGVudCAhPSBv
dGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYWxpZ25Db250ZW50CiAgICAgICAgICAgICB8
fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbGlnbkl0ZW1zICE9IG90aGVyLT5yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9hbGlnbkl0ZW1zCiAgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9hbGlnblNlbGYgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FsaWdu
U2VsZgogICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fanVzdGlmeUNvbnRl
bnQgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2p1c3RpZnlDb250ZW50KQotICAg
ICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGFuIG9wdGltaXplZCBm
b3JtIG9mIGxheW91dCB0aGF0IGp1c3QgcmVjb21wdXRlcyB2aXN1YWwgb3ZlcmZsb3cuCiAgICAg
ICAgIGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEtPnNoYWRvd0RhdGFFcXVpdmFsZW50KCpvdGhl
ci0+cmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIFN0eWxl
RGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlm
ICghcmFyZU5vbkluaGVyaXRlZERhdGEtPnJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudCgqb3RoZXIt
PnJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAo
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0KCkgIT0gb3RoZXItPnJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX211bHRpQ29sLmdldCgpCiAgICAgICAgICAgICAmJiAqcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0KCkgIT0gKm90aGVyLT5yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9tdWx0aUNvbC5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVu
Y2VMYXlvdXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLmdldCgpICE9IG90aGVyLT5yYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV90cmFuc2Zvcm0uZ2V0KCkKICAgICAgICAgICAgICYmICpyYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV90cmFuc2Zvcm0uZ2V0KCkgIT0gKm90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV90cmFuc2Zvcm0uZ2V0KCkpIHsKQEAgLTQ0OCwxMyArNDM3LDEzIEBAIFN0eWxlRGlmZmVy
ZW5jZSBSZW5kZXJTdHlsZTo6ZGlmZihjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVk
JiBjaGFuZ2VkQ29uCiAgICAgICAgICAgICBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRp
ZXMgfD0gQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5VHJhbnNmb3JtOwogICAgICAgICAgICAgLy8g
RG9uJ3QgcmV0dXJuOyBrZWVwIGxvb2tpbmcgZm9yIGFub3RoZXIgY2hhbmdlCiAjZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fZ3JpZC5nZXQoKSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZ3Jp
ZC5nZXQoKQogICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZ3JpZEl0ZW0u
Z2V0KCkgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtLmdldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAjaWYgIVVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAg
aWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVk
RGF0YS5nZXQoKSkgewpAQCAtNDYzLDE5ICs0NTIsMTkgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRl
clN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRD
b24KICAgICAgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2
ZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fcGVyc3BlY3RpdmUKICAgICAgICAg
ICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZU9yaWdpblggIT0g
b3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3BlcnNwZWN0aXZlT3JpZ2luWAogICAgICAg
ICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3BlcnNwZWN0aXZlT3JpZ2luWSAh
PSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fcGVyc3BlY3RpdmVPcmlnaW5ZKQotICAg
ICAgICAgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQogICAgICAgICAvLyBJZiByZWdpb25zIGNoYW5nZSwgdHJpZ2dlciBhIHJlbGF5
b3V0IHRvIHJlLWNhbGMgcmVnaW9ucy4KICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2Rhc2hib2FyZFJlZ2lvbnMgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Rh
c2hib2FyZFJlZ2lvbnMpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRl
ICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZSkKLSAgICAgICAg
ICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgogICAgIH0KIApAQCAtNTEyLDE4ICs1MDEsMTggQEAgU3R5bGVEaWZmZXJlbmNl
IFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNo
YW5nZWRDb24KICAgICAgICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT5tX2xpbmVTbmFwICE9
IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+bV9saW5lU25hcAogICAgICAgICAgICAgfHwgcmFy
ZUluaGVyaXRlZERhdGEtPm1fbGluZUFsaWduICE9IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+
bV9saW5lQWxpZ24KICAgICAgICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT5saXN0U3R5bGVJ
bWFnZSAhPSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPmxpc3RTdHlsZUltYWdlKQotICAgICAg
ICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgICAgIGlmICghcmFyZUluaGVyaXRlZERhdGEtPnNoYWRvd0RhdGFFcXVpdmFs
ZW50KCpvdGhlci0+cmFyZUluaGVyaXRlZERhdGEuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJu
IFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
ICAgIGlmICh0ZXh0U3Ryb2tlV2lkdGgoKSAhPSBvdGhlci0+dGV4dFN0cm9rZVdpZHRoKCkpCi0g
ICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBpZiAo
dmlzdWFsLT5tX3RleHRBdXRvc2l6aW5nTXVsdGlwbGllciAhPSBvdGhlci0+dmlzdWFsLT5tX3Rl
eHRBdXRvc2l6aW5nTXVsdGlwbGllcikKLSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxh
eW91dDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAogICAgIGlmIChpbmhlcml0ZWQt
PmxpbmVfaGVpZ2h0ICE9IG90aGVyLT5pbmhlcml0ZWQtPmxpbmVfaGVpZ2h0CkBAIC01MzUsNyAr
NTI0LDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0
eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24KICAgICAgICAgfHwgbm9uaW5oZXJpdGVk
X2ZsYWdzLl9wb3NpdGlvbiAhPSBvdGhlci0+bm9uaW5oZXJpdGVkX2ZsYWdzLl9wb3NpdGlvbgog
ICAgICAgICB8fCBub25pbmhlcml0ZWRfZmxhZ3MuX2Zsb2F0aW5nICE9IG90aGVyLT5ub25pbmhl
cml0ZWRfZmxhZ3MuX2Zsb2F0aW5nCiAgICAgICAgIHx8IG5vbmluaGVyaXRlZF9mbGFncy5fb3Jp
Z2luYWxEaXNwbGF5ICE9IG90aGVyLT5ub25pbmhlcml0ZWRfZmxhZ3MuX29yaWdpbmFsRGlzcGxh
eSkKLSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAKIAogICAgIGlmICgoKGludClub25pbmhlcml0ZWRfZmxhZ3MuX2VmZmVjdGl2ZURp
c3BsYXkpID49IFRBQkxFKSB7CkBAIC01NDMsNyArNTMyLDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJl
bmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5n
ZWRDb24KICAgICAgICAgICAgIHx8IGluaGVyaXRlZF9mbGFncy5fZW1wdHlfY2VsbHMgIT0gb3Ro
ZXItPmluaGVyaXRlZF9mbGFncy5fZW1wdHlfY2VsbHMKICAgICAgICAgICAgIHx8IGluaGVyaXRl
ZF9mbGFncy5fY2FwdGlvbl9zaWRlICE9IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX2NhcHRpb25f
c2lkZQogICAgICAgICAgICAgfHwgbm9uaW5oZXJpdGVkX2ZsYWdzLl90YWJsZV9sYXlvdXQgIT0g
b3RoZXItPm5vbmluaGVyaXRlZF9mbGFncy5fdGFibGVfbGF5b3V0KQotICAgICAgICAgICAgcmV0
dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgICAgIC8vIEluIHRoZSBjb2xsYXBzaW5nIGJvcmRlciBtb2RlbCwgJ2hpZGRlbicgc3VwcHJl
c3NlcyBvdGhlciBib3JkZXJzLCB3aGlsZSAnbm9uZScKICAgICAgICAgLy8gZG9lcyBub3QsIHNv
IHRoZXNlIHN0eWxlIGRpZmZlcmVuY2VzIGNhbiBiZSB3aWR0aCBkaWZmZXJlbmNlcy4KQEAgLTU1
NiwxMyArNTQ1LDEzIEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJTdHlsZTo6ZGlmZihjb25zdCBS
ZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29uCiAgICAgICAgICAgICAgICAg
fHwgKGJvcmRlckxlZnRTdHlsZSgpID09IEJOT05FICYmIG90aGVyLT5ib3JkZXJMZWZ0U3R5bGUo
KSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgIHx8IChib3JkZXJSaWdodFN0eWxlKCkgPT0g
QkhJRERFTiAmJiBvdGhlci0+Ym9yZGVyUmlnaHRTdHlsZSgpID09IEJOT05FKQogICAgICAgICAg
ICAgICAgIHx8IChib3JkZXJSaWdodFN0eWxlKCkgPT0gQk5PTkUgJiYgb3RoZXItPmJvcmRlclJp
Z2h0U3R5bGUoKSA9PSBCSElEREVOKSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJl
bmNlTGF5b3V0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG5v
bmluaGVyaXRlZF9mbGFncy5fZWZmZWN0aXZlRGlzcGxheSA9PSBMSVNUX0lURU0pIHsKICAgICAg
ICAgaWYgKGluaGVyaXRlZF9mbGFncy5fbGlzdF9zdHlsZV90eXBlICE9IG90aGVyLT5pbmhlcml0
ZWRfZmxhZ3MuX2xpc3Rfc3R5bGVfdHlwZQogICAgICAgICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdz
Ll9saXN0X3N0eWxlX3Bvc2l0aW9uICE9IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX2xpc3Rfc3R5
bGVfcG9zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0Owor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGluaGVyaXRlZF9mbGFn
cy5fdGV4dF9hbGlnbiAhPSBvdGhlci0+aW5oZXJpdGVkX2ZsYWdzLl90ZXh0X2FsaWduCkBAIC01
NzEsMjAgKzU2MCwyMCBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3Qg
UmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hhbmdlZENvbgogICAgICAgICB8fCBpbmhl
cml0ZWRfZmxhZ3MuX3doaXRlX3NwYWNlICE9IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX3doaXRl
X3NwYWNlCiAgICAgICAgIHx8IG5vbmluaGVyaXRlZF9mbGFncy5fY2xlYXIgIT0gb3RoZXItPm5v
bmluaGVyaXRlZF9mbGFncy5fY2xlYXIKICAgICAgICAgfHwgbm9uaW5oZXJpdGVkX2ZsYWdzLl91
bmljb2RlQmlkaSAhPSBvdGhlci0+bm9uaW5oZXJpdGVkX2ZsYWdzLl91bmljb2RlQmlkaSkKLSAg
ICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICAvLyBDaGVjayBibG9jayBmbG93IGRpcmVjdGlvbi4KICAgICBpZiAoaW5oZXJpdGVk
X2ZsYWdzLm1fd3JpdGluZ01vZGUgIT0gb3RoZXItPmluaGVyaXRlZF9mbGFncy5tX3dyaXRpbmdN
b2RlKQotICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIC8vIENoZWNrIHRleHQgY29tYmluZSBtb2RlLgogICAgIGlmIChyYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV90ZXh0Q29tYmluZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fdGV4dENvbWJpbmUpCi0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlv
dXQ7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gT3ZlcmZsb3cgcmV0dXJucyBhIGxh
eW91dCBoaW50LgogICAgIGlmIChub25pbmhlcml0ZWRfZmxhZ3MuX292ZXJmbG93WCAhPSBvdGhl
ci0+bm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1gKICAgICAgICAgfHwgbm9uaW5oZXJpdGVk
X2ZsYWdzLl9vdmVyZmxvd1kgIT0gb3RoZXItPm5vbmluaGVyaXRlZF9mbGFncy5fb3ZlcmZsb3dZ
KQotICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIElmIG91ciBib3JkZXIgd2lkdGhzIGNoYW5nZSwgdGhlbiB3ZSBuZWVk
IHRvIGxheW91dC4gIE90aGVyIGNoYW5nZXMgdG8gYm9yZGVycwogICAgIC8vIG9ubHkgbmVjZXNz
aXRhdGUgYSByZXBhaW50LgpAQCAtNTkyLDE2ICs1ODEsMTYgQEAgU3R5bGVEaWZmZXJlbmNlIFJl
bmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5n
ZWRDb24KICAgICAgICAgfHwgYm9yZGVyVG9wV2lkdGgoKSAhPSBvdGhlci0+Ym9yZGVyVG9wV2lk
dGgoKQogICAgICAgICB8fCBib3JkZXJCb3R0b21XaWR0aCgpICE9IG90aGVyLT5ib3JkZXJCb3R0
b21XaWR0aCgpCiAgICAgICAgIHx8IGJvcmRlclJpZ2h0V2lkdGgoKSAhPSBvdGhlci0+Ym9yZGVy
UmlnaHRXaWR0aCgpKQotICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIHRoZSBjb3VudGVyIGRpcmVjdGl2ZXMgY2hh
bmdlLCB0cmlnZ2VyIGEgcmVsYXlvdXQgdG8gcmUtY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIGFu
ZCByZWJ1aWxkIHRoZSBjb3VudGVyIG5vZGUgdHJlZS4KICAgICBjb25zdCBDb3VudGVyRGlyZWN0
aXZlTWFwKiBtYXBBID0gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVjdGl2ZXMu
Z2V0KCk7CiAgICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogbWFwQiA9IG90aGVyLT5yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9jb3VudGVyRGlyZWN0aXZlcy5nZXQoKTsKICAgICBpZiAoISht
YXBBID09IG1hcEIgfHwgKG1hcEEgJiYgbWFwQiAmJiAqbWFwQSA9PSAqbWFwQikpKQotICAgICAg
ICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmICgodmlzaWJpbGl0eSgpID09IENPTExBUFNFKSAhPSAob3RoZXItPnZpc2liaWxpdHko
KSA9PSBDT0xMQVBTRSkpCi0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3Bh
Y2l0eSA9PSAxICYmIG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eSA8IDEpCiAg
ICAgICAgIHx8IChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eSA8IDEgJiYgb3RoZXItPnJh
cmVOb25Jbmhlcml0ZWREYXRhLT5vcGFjaXR5ID09IDEpKSB7CkBAIC02MTAsNDQgKzU5OSw1OCBA
QCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90
aGVyLCB1bnNpZ25lZCYgY2hhbmdlZENvbgogICAgICAgICAvLyB0byBhZGQgYSBzZWxmTmVlZHNT
aW1wbGlmaWVkTGF5b3V0IGJpdCBpbiBvcmRlciB0byBub3QgZ2V0IGNvbmZ1c2VkIGFuZCB0YWlu
dCBldmVyeSBsaW5lKS4KICAgICAgICAgLy8gSW4gYWRkaXRpb24gd2UgbmVlZCB0byBzb2x2ZSB0
aGUgZmxvYXRpbmcgb2JqZWN0IGlzc3VlIHdoZW4gbGF5ZXJzIGNvbWUgYW5kIGdvLiBSaWdodCBu
b3cKICAgICAgICAgLy8gYSBmdWxsIGxheW91dCBpcyBuZWNlc3NhcnkgdG8ga2VlcCBmbG9hdGlu
ZyBvYmplY3QgbGlzdHMgc2FuZS4KLSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91
dDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgUXVvdGVzRGF0YSog
cXVvdGVzRGF0YUEgPSByYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpOwogICAgIGNvbnN0
IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGFCID0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLT5xdW90
ZXMuZ2V0KCk7CiAgICAgaWYgKCEocXVvdGVzRGF0YUEgPT0gcXVvdGVzRGF0YUIgfHwgKHF1b3Rl
c0RhdGFBICYmIHF1b3Rlc0RhdGFCICYmICpxdW90ZXNEYXRhQSA9PSAqcXVvdGVzRGF0YUIpKSkK
LSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKLQotI2lmIEVOQUJMRShTVkcp
Ci0gICAgLy8gU1ZHUmVuZGVyU3R5bGU6OmRpZmYoKSBtaWdodCBoYXZlIHJldHVybmVkIFN0eWxl
RGlmZmVyZW5jZVJlcGFpbnQsIGVnLiBpZiBmaWxsIGNoYW5nZXMuCi0gICAgLy8gSWYgZWcuIHRo
ZSBmb250LXNpemUgY2hhbmdlZCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSdyZSBub3QgYWxsb3dlZCB0
byByZXR1cm4gU3R5bGVEaWZmZXJlbmNlUmVwYWludCwKLSAgICAvLyBidXQgaGF2ZSB0byByZXR1
cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0LCB0aGF0J3Mgd2h5ICB0aGlzIGlmIGJyYW5jaCBjb21l
cyBhZnRlciBhbGwgYnJhbmNoZXMKLSAgICAvLyB0aGF0IGFyZSByZWxldmFudCBmb3IgU1ZHIGFu
ZCBtaWdodCByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0LgotICAgIGlmIChzdmdDaGFuZ2Ug
IT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwpCi0gICAgICAgIHJldHVybiBzdmdDaGFuZ2U7Ci0jZW5k
aWYKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhlc2UgbGVmdC90
b3AvcmlnaHQvYm90dG9tIGNoZWNrcyBzdGF5IGJlbG93IGFsbCBsYXlvdXQgY2hlY2tzIGFuZCBh
Ym92ZQotICAgIC8vIGFsbCB2aXNpYmxlIGNoZWNrcy4KICAgICBpZiAocG9zaXRpb24oKSAhPSBT
dGF0aWNQb3NpdGlvbikgewogICAgICAgICBpZiAoc3Vycm91bmQtPm9mZnNldCAhPSBvdGhlci0+
c3Vycm91bmQtPm9mZnNldCkgewotICAgICAgICAgICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2Fz
ZSB3aGVyZSBhIHBvc2l0aW9uZWQgbGF5ZXIgaXMgbW92aW5nIGJ1dCBub3QgY2hhbmdpbmcgc2l6
ZS4KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24gJiYgcG9z
aXRpb25lZE9iamVjdE1vdmVkKHN1cnJvdW5kLT5vZmZzZXQsIG90aGVyLT5zdXJyb3VuZC0+b2Zm
c2V0LCBtX2JveC0+d2lkdGgoKSkpCi0KLSAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVEaWZm
ZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seTsKLQogICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHdvdWxkIGxpa2UgdG8gdXNlIFNpbXBsaWZpZWRMYXlvdXQgZm9yIHJlbGF0aXZlIHBv
c2l0aW9uaW5nLCBidXQgd2UgY2FuJ3QgcXVpdGUgZG8gdGhhdCB5ZXQuCiAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBTaW1wbGlmaWVkTGF5b3V0IGNhbiBvcGVyYXRlIGNvcnJl
Y3RseSBvbiBSZW5kZXJJbmxpbmVzICh3ZSB3aWxsIG5lZWQKICAgICAgICAgICAgIC8vIHRvIGFk
ZCBhIHNlbGZOZWVkc1NpbXBsaWZpZWRMYXlvdXQgYml0IGluIG9yZGVyIHRvIG5vdCBnZXQgY29u
ZnVzZWQgYW5kIHRhaW50IGV2ZXJ5IGxpbmUpLgotICAgICAgICAgICAgcmV0dXJuIFN0eWxlRGlm
ZmVyZW5jZUxheW91dDsKLSAgICAgICAgfSBlbHNlIGlmIChtX2JveC0+ekluZGV4KCkgIT0gb3Ro
ZXItPm1fYm94LT56SW5kZXgoKSB8fCBtX2JveC0+aGFzQXV0b1pJbmRleCgpICE9IG90aGVyLT5t
X2JveC0+aGFzQXV0b1pJbmRleCgpCi0gICAgICAgICAgICAgICAgIHx8IHZpc3VhbC0+Y2xpcCAh
PSBvdGhlci0+dmlzdWFsLT5jbGlwIHx8IHZpc3VhbC0+aGFzQ2xpcCAhPSBvdGhlci0+dmlzdWFs
LT5oYXNDbGlwKQotICAgICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXll
cjsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIGZvciB0
aGUgY2FzZSB3aGVyZSBhIHBvc2l0aW9uZWQgbGF5ZXIgaXMgbW92aW5nIGJ1dCBub3QgY2hhbmdp
bmcgc2l6ZS4KKyAgICAgICAgICAgIGlmICghcG9zaXRpb25DaGFuZ2VJc01vdmVtZW50T25seShz
dXJyb3VuZC0+b2Zmc2V0LCBvdGhlci0+c3Vycm91bmQtPm9mZnNldCwgbV9ib3gtPndpZHRoKCkp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNQ
b3NpdGlvbmVkTGF5b3V0T25seShjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJikg
Y29uc3QKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN1cnJvdW5kLT5vZmZzZXQgIT0gb3RoZXItPnN1cnJv
dW5kLT5vZmZzZXQpIHsKKyAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIGEg
cG9zaXRpb25lZCBsYXllciBpcyBtb3ZpbmcgYnV0IG5vdCBjaGFuZ2luZyBzaXplLgorICAgICAg
ICBpZiAocG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uICYmIHBvc2l0aW9uQ2hhbmdlSXNN
b3ZlbWVudE9ubHkoc3Vycm91bmQtPm9mZnNldCwgb3RoZXItPnN1cnJvdW5kLT5vZmZzZXQsIG1f
Ym94LT53aWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5
ZXJSZXBhaW50KGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb250
ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3QKK3sKKyAgICBpZiAocG9zaXRpb24oKSAhPSBT
dGF0aWNQb3NpdGlvbikgeworICAgICAgICBpZiAobV9ib3gtPnpJbmRleCgpICE9IG90aGVyLT5t
X2JveC0+ekluZGV4KCkKKyAgICAgICAgICAgIHx8IG1fYm94LT5oYXNBdXRvWkluZGV4KCkgIT0g
b3RoZXItPm1fYm94LT5oYXNBdXRvWkluZGV4KCkKKyAgICAgICAgICAgIHx8IHZpc3VhbC0+Y2xp
cCAhPSBvdGhlci0+dmlzdWFsLT5jbGlwCisgICAgICAgICAgICB8fCB2aXN1YWwtPmhhc0NsaXAg
IT0gb3RoZXItPnZpc3VhbC0+aGFzQ2xpcCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKwogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgaWYgKHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fZWZmZWN0aXZlQmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNl
UmVwYWludExheWVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCiAgICAgaWYgKHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5vcGFjaXR5ICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+b3BhY2l0eSkgewpAQCAtNjU1LDcgKzY1OCw3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJT
dHlsZTo6ZGlmZihjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29u
CiAgICAgICAgIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyB8PSBDb250ZXh0U2Vu
c2l0aXZlUHJvcGVydHlPcGFjaXR5OwogICAgICAgICAvLyBEb24ndCByZXR1cm47IGtlZXAgbG9v
a2luZyBmb3IgYW5vdGhlciBjaGFuZ2UuCiAjZWxzZQotICAgICAgICByZXR1cm4gU3R5bGVEaWZm
ZXJlbmNlUmVwYWludExheWVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIH0K
IApAQCAtNjY2LDE1ICs2NjksMjAgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZm
KGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24KICAgICAgICAg
Y2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzIHw9IENvbnRleHRTZW5zaXRpdmVQcm9w
ZXJ0eUZpbHRlcjsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuOyBrZWVwIGxvb2tpbmcgZm9yIGFu
b3RoZXIgY2hhbmdlLgogI2Vsc2UKLSAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFp
bnRMYXllcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYKIAog
ICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrICE9IG90aGVyLT5yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9tYXNrCiAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX21h
c2tCb3hJbWFnZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0JveEltYWdl
KQotICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlUmVwYWludExheWVyOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTdHlsZTo6
Y2hhbmdlUmVxdWlyZXNSZXBhaW50KGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQm
KSBjb25zdAorewogICAgIGlmIChpbmhlcml0ZWRfZmxhZ3MuX3Zpc2liaWxpdHkgIT0gb3RoZXIt
PmluaGVyaXRlZF9mbGFncy5fdmlzaWJpbGl0eQogICAgICAgICB8fCBpbmhlcml0ZWRfZmxhZ3Mu
bV9wcmludENvbG9yQWRqdXN0ICE9IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MubV9wcmludENvbG9y
QWRqdXN0CiAgICAgICAgIHx8IGluaGVyaXRlZF9mbGFncy5faW5zaWRlTGluayAhPSBvdGhlci0+
aW5oZXJpdGVkX2ZsYWdzLl9pbnNpZGVMaW5rCkBAIC02ODUsMzAgKzY5MywyNCBAQCBTdHlsZURp
ZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNp
Z25lZCYgY2hhbmdlZENvbgogICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+dXNlckRy
YWcgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT51c2VyRHJhZwogICAgICAgICB8fCBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9ib3JkZXJGaXQgIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2JvcmRlckZpdAogICAgICAgICB8fCByYXJlSW5oZXJpdGVkRGF0YS0+bV9pbWFn
ZVJlbmRlcmluZyAhPSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPm1faW1hZ2VSZW5kZXJpbmcp
Ci0gICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VSZXBhaW50OworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCBzcGVjIGlzIGJl
aW5nIHJld29ya2VkIHRvIHJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBleGNsdXNpb25zIGFu
ZCBhZmZlY3RlZCAKLSAgICAgICAgLy8gY29udGVudC4gVGhlcmUncyBhIHByb3Bvc2FsIHRvIHVz
ZSBmbG9hdHMgaW5zdGVhZC4gSW4gdGhhdCBjYXNlLCB3cmFwLXNoYXBlIHNob3VsZCBhY3R1YWxs
eSByZWxheW91dCAKLSAgICAgICAgLy8gdGhlIHBhcmVudCBjb250YWluZXIuIEZvciBzdXJlLCBJ
IHdpbGwgaGF2ZSB0byByZXZpc2l0IHRoaXMgY29kZSwgYnV0IGZvciBub3cgSSd2ZSBhZGRlZCB0
aGlzIGluIG9yZGVyIAotICAgICAgICAvLyB0byBhdm9pZCBoYXZpbmcgZGlmZigpID09IFN0eWxl
RGlmZmVyZW5jZUVxdWFsIHdoZXJlIHdyYXAtc2hhcGVzIGFjdHVhbGx5IGRpZmZlci4KLSAgICAg
ICAgLy8gVHJhY2tpbmcgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjI5OTEKLSAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lk
ZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlKQotICAgICAg
ICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQ7CisgICAgLy8gRklYTUU6IFRoZSBj
dXJyZW50IHNwZWMgaXMgYmVpbmcgcmV3b3JrZWQgdG8gcmVtb3ZlIGRlcGVuZGVuY2llcyBiZXR3
ZWVuIGV4Y2x1c2lvbnMgYW5kIGFmZmVjdGVkIAorICAgIC8vIGNvbnRlbnQuIFRoZXJlJ3MgYSBw
cm9wb3NhbCB0byB1c2UgZmxvYXRzIGluc3RlYWQuIEluIHRoYXQgY2FzZSwgd3JhcC1zaGFwZSBz
aG91bGQgYWN0dWFsbHkgcmVsYXlvdXQgCisgICAgLy8gdGhlIHBhcmVudCBjb250YWluZXIuIEZv
ciBzdXJlLCBJIHdpbGwgaGF2ZSB0byByZXZpc2l0IHRoaXMgY29kZSwgYnV0IGZvciBub3cgSSd2
ZSBhZGRlZCB0aGlzIGluIG9yZGVyIAorICAgIC8vIHRvIGF2b2lkIGhhdmluZyBkaWZmKCkgPT0g
U3R5bGVEaWZmZXJlbmNlRXF1YWwgd2hlcmUgd3JhcC1zaGFwZXMgYWN0dWFsbHkgZGlmZmVyLgor
ICAgIC8vIFRyYWNraW5nIGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYyOTkxCisgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZSAh
PSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY2xpcFBh
dGggIT0gb3RoZXItPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2NsaXBQYXRoKQotICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQ7CisgICAgaWYgKHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2NsaXBQYXRoICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9jbGlw
UGF0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpICE9IG90aGVyLT5yYXJl
Tm9uSW5oZXJpdGVkRGF0YS5nZXQoKSkgewotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fdHJhbnNmb3JtU3R5bGUzRCAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
dHJhbnNmb3JtU3R5bGUzRAotICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
YmFja2ZhY2VWaXNpYmlsaXR5ICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9iYWNr
ZmFjZVZpc2liaWxpdHkKLSAgICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Bl
cnNwZWN0aXZlICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZQot
ICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fcGVyc3BlY3RpdmVPcmlnaW5Y
ICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZU9yaWdpblgKLSAg
ICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3BlcnNwZWN0aXZlT3JpZ2luWSAh
PSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fcGVyc3BlY3RpdmVPcmlnaW5ZKQotICAg
ICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7Ci0gICAgfQot
I2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQogCitib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VS
ZXF1aXJlc1JlcGFpbnRJZlRleHQoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYp
IGNvbnN0Cit7CiAgICAgaWYgKGluaGVyaXRlZC0+Y29sb3IgIT0gb3RoZXItPmluaGVyaXRlZC0+
Y29sb3IKICAgICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdzLl90ZXh0X2RlY29yYXRpb25zICE9IG90
aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX3RleHRfZGVjb3JhdGlvbnMKICAgICAgICAgfHwgdmlzdWFs
LT50ZXh0RGVjb3JhdGlvbiAhPSBvdGhlci0+dmlzdWFsLT50ZXh0RGVjb3JhdGlvbgpAQCAtNzIw
LDYgKzcyMiw2OCBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgUmVu
ZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hhbmdlZENvbgogICAgICAgICB8fCByYXJlSW5o
ZXJpdGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9yICE9IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+
dGV4dFN0cm9rZUNvbG9yCiAgICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0RW1waGFz
aXNDb2xvciAhPSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnRleHRFbXBoYXNpc0NvbG9yCiAg
ICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0RW1waGFzaXNGaWxsICE9IG90aGVyLT5y
YXJlSW5oZXJpdGVkRGF0YS0+dGV4dEVtcGhhc2lzRmlsbCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVp
cmVzUmVjb21wb3NpdGVMYXllcihjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJikg
Y29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKHJhcmVO
b25Jbmhlcml0ZWREYXRhLmdldCgpICE9IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQo
KSkgeworICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtU3R5bGUz
RCAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtU3R5bGUzRAorICAg
ICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYmFja2ZhY2VWaXNpYmlsaXR5ICE9
IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9iYWNrZmFjZVZpc2liaWxpdHkKKyAgICAg
ICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3BlcnNwZWN0aXZlICE9IG90aGVyLT5y
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZQorICAgICAgICAgICAgfHwgcmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fcGVyc3BlY3RpdmVPcmlnaW5YICE9IG90aGVyLT5yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZU9yaWdpblgKKyAgICAgICAgICAgIHx8IHJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX3BlcnNwZWN0aXZlT3JpZ2luWSAhPSBvdGhlci0+cmFyZU5vbkluaGVy
aXRlZERhdGEtPm1fcGVyc3BlY3RpdmVPcmlnaW5ZKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHlsZURpZmZlcmVuY2Ug
UmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hh
bmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdAoreworICAgIGNoYW5nZWRDb250
ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU5vbmU7CisK
KyNpZiBFTkFCTEUoU1ZHKQorICAgIFN0eWxlRGlmZmVyZW5jZSBzdmdDaGFuZ2UgPSBTdHlsZURp
ZmZlcmVuY2VFcXVhbDsKKyAgICBpZiAobV9zdmdTdHlsZSAhPSBvdGhlci0+bV9zdmdTdHlsZSkg
eworICAgICAgICBzdmdDaGFuZ2UgPSBtX3N2Z1N0eWxlLT5kaWZmKG90aGVyLT5tX3N2Z1N0eWxl
LmdldCgpKTsKKyAgICAgICAgaWYgKHN2Z0NoYW5nZSA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQp
CisgICAgICAgICAgICByZXR1cm4gc3ZnQ2hhbmdlOworICAgIH0KKyNlbmRpZgorCisgICAgaWYg
KGNoYW5nZVJlcXVpcmVzTGF5b3V0KG90aGVyLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3Bl
cnRpZXMpKQorICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworCisjaWYgRU5B
QkxFKFNWRykKKyAgICAvLyBTVkdSZW5kZXJTdHlsZTo6ZGlmZigpIG1pZ2h0IGhhdmUgcmV0dXJu
ZWQgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgZWcuIGlmIGZpbGwgY2hhbmdlcy4KKyAgICAvLyBJ
ZiBlZy4gdGhlIGZvbnQtc2l6ZSBjaGFuZ2VkIGF0IHRoZSBzYW1lIHRpbWUsIHdlJ3JlIG5vdCBh
bGxvd2VkIHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VSZXBhaW50LAorICAgIC8vIGJ1dCBoYXZl
IHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQsIHRoYXQncyB3aHkgIHRoaXMgaWYgYnJh
bmNoIGNvbWVzIGFmdGVyIGFsbCBicmFuY2hlcworICAgIC8vIHRoYXQgYXJlIHJlbGV2YW50IGZv
ciBTVkcgYW5kIG1pZ2h0IHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQuCisgICAgaWYgKHN2
Z0NoYW5nZSAhPSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKKyAgICAgICAgcmV0dXJuIHN2Z0NoYW5n
ZTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gYWxzbyBjaGVjayBmb3IgcmVw
YWludCBjaGFuZ2VzIGFmdGVyIGEgUG9zaXRpb25lZE1vdmVtZW50T25seSBjaGFuZ2UKKyAgICAv
LyBvbiBhIGNvbXBvc2l0ZWQgbGF5ZXI6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTYzMTkKKyAgICBpZiAoY2hhbmdlUmVxdWlyZXNQb3NpdGlvbmVkTGF5b3V0T25s
eShvdGhlciwgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSkKKyAgICAgICAgcmV0
dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9ubHk7CisKKyAgICBp
ZiAoY2hhbmdlUmVxdWlyZXNMYXllclJlcGFpbnQob3RoZXIsIGNoYW5nZWRDb250ZXh0U2Vuc2l0
aXZlUHJvcGVydGllcykpCisgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VSZXBhaW50TGF5
ZXI7CisKKyAgICBpZiAoY2hhbmdlUmVxdWlyZXNSZXBhaW50KG90aGVyLCBjaGFuZ2VkQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMpKQorICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlUmVw
YWludDsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoY2hhbmdl
UmVxdWlyZXNSZWNvbXBvc2l0ZUxheWVyKG90aGVyLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVBy
b3BlcnRpZXMpKQorICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXll
cjsKKyNlbmRpZgorCisgICAgaWYgKGNoYW5nZVJlcXVpcmVzUmVwYWludElmVGV4dChvdGhlciwg
Y2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSkKICAgICAgICAgcmV0dXJuIFN0eWxl
RGlmZmVyZW5jZVJlcGFpbnRJZlRleHQ7CiAKICAgICAvLyBDdXJzb3JzIGFyZSBub3QgY2hlY2tl
ZCwgc2luY2UgdGhleSB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5IGluIHJlc3BvbnNlIHRvIG1v
dXNlIGV2ZW50cywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgKaW5kZXggOTA4ZWMzMGNlMzJkNmFkODY4NzUyYTk4NmZmMWQ0NGU3MTI1ZDE2ZC4uNmUzMDll
ZjM4NTczNDQ5MTk4MDhiMDE3NmUzN2RkZGFlNWY5MjM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTE3NjMsNyArMTc2MywxNSBAQCBwdWJs
aWM6CiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICBzdGF0aWMgQmxlbmRNb2RlIGlu
aXRpYWxCbGVuZE1vZGUoKSB7IHJldHVybiBCbGVuZE1vZGVOb3JtYWw7IH0KICNlbmRpZgorCiBw
cml2YXRlOgorICAgIGJvb2wgY2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3QgUmVuZGVyU3R5bGUq
LCB1bnNpZ25lZCYgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKKyAg
ICBib29sIGNoYW5nZVJlcXVpcmVzUG9zaXRpb25lZExheW91dE9ubHkoY29uc3QgUmVuZGVyU3R5
bGUqLCB1bnNpZ25lZCYgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsK
KyAgICBib29sIGNoYW5nZVJlcXVpcmVzTGF5ZXJSZXBhaW50KGNvbnN0IFJlbmRlclN0eWxlKiwg
dW5zaWduZWQmIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7CisgICAg
Ym9vbCBjaGFuZ2VSZXF1aXJlc1JlcGFpbnQoY29uc3QgUmVuZGVyU3R5bGUqLCB1bnNpZ25lZCYg
Y2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKKyAgICBib29sIGNoYW5n
ZVJlcXVpcmVzUmVwYWludElmVGV4dChjb25zdCBSZW5kZXJTdHlsZSosIHVuc2lnbmVkJiBjaGFu
Z2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0OworICAgIGJvb2wgY2hhbmdlUmVx
dWlyZXNSZWNvbXBvc2l0ZUxheWVyKGNvbnN0IFJlbmRlclN0eWxlKiwgdW5zaWduZWQmIGNoYW5n
ZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7CisKICAgICB2b2lkIHNldFZpc2l0
ZWRMaW5rQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEs
IG1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsIHYpOyB9CiAgICAgdm9pZCBzZXRWaXNpdGVk
TGlua0JvcmRlckxlZnRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHJhcmVOb25Jbmhl
cml0ZWREYXRhLCBtX3Zpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCB2KTsgfQo=
</data>
<flag name="review"
          id="223635"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>