<?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>120402</bug_id>
          
          <creation_ts>2013-08-28 04:46:58 -0700</creation_ts>
          <short_desc>Don&apos;t use NodeRenderingContext when attaching text renderers</short_desc>
          <delta_ts>2013-08-28 06:13:02 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>921924</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-28 04:46:58 -0700</bug_when>
    <thetext>Simplify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921927</commentid>
    <comment_count>1</comment_count>
      <attachid>209865</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-28 05:00:48 -0700</bug_when>
    <thetext>Created attachment 209865
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921943</commentid>
    <comment_count>2</comment_count>
      <attachid>209865</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-28 05:31:49 -0700</bug_when>
    <thetext>Comment on attachment 209865
patch

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

r=me

&gt; Source/WebCore/style/StyleResolveTree.cpp:210
&gt; +static void crateTextRendererIfNeeded(Text* textNode)

Typo, cr_e_ate.

&gt; Source/WebCore/style/StyleResolveTree.cpp:276
&gt; +    RenderText* textRenderer = toRenderText(textNode-&gt;renderer());

We could add a tightly-typed override and avoid casts like this:
RenderText* Text::renderer() const;

&gt; Source/WebCore/style/StyleResolveTree.h:56
&gt; +void attachTextRenderer(Text*);
&gt; +void detachTextRenderer(Text*);
&gt; +void updateTextRendererAfterContentChange(Text*, unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);

Can we make these take Text&amp; instead? They shouldn&apos;t have to deal with null inputs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921959</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-28 06:13:02 -0700</bug_when>
    <thetext>https://trac.webkit.org/r154738</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209865</attachid>
            <date>2013-08-28 05:00:48 -0700</date>
            <delta_ts>2013-08-28 05:31:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>text-attach-no-context.patch</filename>
            <type>text/plain</type>
            <size>27005</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDczMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDEzLTA4LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBEb24ndCB1c2UgTm9kZVJlbmRl
cmluZ0NvbnRleHQgd2hlbiBhdHRhY2hpbmcgdGV4dCByZW5kZXJlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDQwMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdmFyaW91
cyBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIHRleHQgcmVuZGVyZXJzIGZyb20gTm9kZVJlbmRlcmlu
Z0NvbnRleHQgYW5kIFRleHQgdG8gU3R5bGVSZXNvbHZlVHJlZS4KKyAgICAgICAgSXQgYWxzbyB0
aWdodGVucyB0aGUgbG9naWMgYW5kIGNvbWJpbmVzIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGRv
bS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBh
cnNlckFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0
YUFuZFVwZGF0ZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNoQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0YWNoQ2hpbGQpOgor
ICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgICogZG9tL05v
ZGVSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dDo6flRleHQpOgorICAgICAgICAqIGRvbS9UZXh0Lmg6CisgICAgICAgICog
aHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxW
aWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVUYXNrKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRpb25Qb2ludDo6d2lsbEF0dGFjaFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRpb25Qb2ludDo6d2lsbERldGFjaFJlbmRlcmVycyk6CisgICAgICAgICogc3R5bGUv
U3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aXNSZW5kZXJl
clJlcGFyZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnByZXZpb3VzU2libGluZ1Jl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpuZXh0U2libGluZ1JlbmRlcmVyKToK
KyAgICAgICAgCisgICAgICAgICAgICBGcm9tIE5vZGVSZW5kZXJpbmdDb250ZXh0OjpuZXh0L3By
ZXZpb3VzUmVuZGVyZXIKKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmNyZWF0ZVRleHRSZW5k
ZXJlcnNGb3JTaWJsaW5nc0FmdGVyQXR0YWNoSWZOZWVkZWQpOgorICAgICAgICAKKyAgICAgICAg
ICAgIEZyb20gVGV4dDo6Y3JlYXRlVGV4dFJlbmRlcmVyc0ZvclNpYmxpbmdzQWZ0ZXJBdHRhY2hJ
Zk5lZWRlZCgpCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjp0ZXh0UmVuZGVyZXJJc05lZWRl
ZCk6CisgICAgICAgIAorICAgICAgICAgICAgRnJvbSBUZXh0Ojp0ZXh0UmVuZGVyZXJJc05lZWRl
ZAorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y3JhdGVUZXh0UmVuZGVyZXJJZk5lZWRlZCk6
CisgICAgICAgIAorICAgICAgICAgICAgQ29tYmluZXMgY29kZSBmcm9tIFRleHQ6OmNyZWF0ZVRl
eHRSZW5kZXJlcklmTmVlZGVkLCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyZXJG
b3JUZXh0SWZOZWVkZWQsCisgICAgICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb25zdHJ1
Y3RvciBhbmQgdGV4dCBub2RlIHJlbGV2YW50IGNvZGUgTm9kZVJlbmRlcmluZ0NvbnRleHQ6OnNo
b3VsZENyZWF0ZVJlbmRlcmVyLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoVGV4
dFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkZXRhY2hUZXh0UmVuZGVyZXIp
OgorICAgICAgICAKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbnMgb2YgYXR0YWNoaW5nIHRleHQg
cmVuZGVyZXJzLiBGcm9tIFRleHQ6OmF0dGFjaC9kZXRhY2hUZXh0KCkKKworICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OnVwZGF0ZVRleHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZSk6CisgICAg
ICAgIAorICAgICAgICAgICAgRnJvbSBUZXh0Ojp1cGRhdGVUZXh0UmVuZGVyZXIuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjphdHRhY2hTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNo
UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoU2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OnVwZGF0ZVRleHRTdHlsZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNv
bHZlVHJlZS5oOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmV4aXRUZXh0KToKKyAgICAgICAg
KiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayk6CisKIDIwMTMtMDgtMjggIFNlcmdp
byBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgV29ya2VyR2xv
YmFsU2NvcGVXZWJEYXRhYmFzZSByZXF1aXJlcyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHJldmlzaW9uIDE1NDY3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEs
NyBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhCiAKICAgICBBU1NF
UlQoIXJlbmRlcmVyKCkgfHwgaXNUZXh0Tm9kZSgpKTsKICAgICBpZiAoaXNUZXh0Tm9kZSgpKQot
ICAgICAgICB0b1RleHQodGhpcyktPnVwZGF0ZVRleHRSZW5kZXJlcihvbGRMZW5ndGgsIDApOwor
ICAgICAgICBTdHlsZTo6dXBkYXRlVGV4dFJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhbmdlKHRvVGV4
dCh0aGlzKSwgb2xkTGVuZ3RoLCAwKTsKIAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJz
aW9uKCk7CiAgICAgLy8gV2UgZG9uJ3QgY2FsbCBkaXNwYXRjaE1vZGlmaWVkRXZlbnQgaGVyZSBi
ZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKGNvbgogCiAgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8
IGlzVGV4dE5vZGUoKSk7CiAgICAgaWYgKGlzVGV4dE5vZGUoKSkKLSAgICAgICAgdG9UZXh0KHRo
aXMpLT51cGRhdGVUZXh0UmVuZGVyZXIob2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0aCk7
CisgICAgICAgIFN0eWxlOjp1cGRhdGVUZXh0UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UodG9U
ZXh0KHRoaXMpLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsKIAogICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rp
b24oKS50ZXh0V2FzUmVwbGFjZWQodGhpcywgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0
aCwgbmV3TGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJl
dmlzaW9uIDE1NDY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhdHRh
Y2hDaGlsZChOb2RlKiBjaGkKICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKICAgICAg
ICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUodG9FbGVtZW50KGNoaWxkKSk7CiAgICAgZWxzZSBp
ZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgdG9UZXh0KGNoaWxkKS0+YXR0YWNoVGV4
dCgpOworICAgICAgICBTdHlsZTo6YXR0YWNoVGV4dFJlbmRlcmVyKHRvVGV4dChjaGlsZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV0YWNoQ2hpbGQoTm9kZSogY2hpbGQpCkBAIC0xMTgs
NyArMTE4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRldGFjaENoaWxkKE5vZGUqIGNoaQogICAg
IGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVy
VHJlZSh0b0VsZW1lbnQoY2hpbGQpKTsKICAgICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgp
KQotICAgICAgICB0b1RleHQoY2hpbGQpLT5kZXRhY2hUZXh0KCk7CisgICAgICAgIFN0eWxlOjpk
ZXRhY2hUZXh0UmVuZGVyZXIodG9UZXh0KGNoaWxkKSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9k
ZTo6dGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2RlKiBvbGRQYXJlbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1
NDY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4NSw0NSArMjg1LDYgQEAgdm9pZCBOb2RlUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlUmVuZGVyZQogICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGlsZChuZXdSZW5kZXJl
ciwgbmV4dFJlbmRlcmVyKTsKIH0KIAotdm9pZCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
UmVuZGVyZXJGb3JUZXh0SWZOZWVkZWQoKQotewotICAgIEFTU0VSVCghbV9ub2RlLT5yZW5kZXJl
cigpKTsKLQotICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KG1fbm9kZSk7Ci0KLSAgICBpZiAo
IXNob3VsZENyZWF0ZVJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck9i
amVjdCogcGFyZW50UmVuZGVyZXIgPSB0aGlzLT5wYXJlbnRSZW5kZXJlcigpOwotICAgIEFTU0VS
VChwYXJlbnRSZW5kZXJlcik7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGV4dE5vZGUtPmRv
Y3VtZW50KCk7Ci0KLSAgICBpZiAocmVzZXRTdHlsZUluaGVyaXRhbmNlKCkpCi0gICAgICAgIG1f
c3R5bGUgPSBkb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLmRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3R5bGUgPSBwYXJlbnRSZW5kZXJlci0+c3R5
bGUoKTsKLQotICAgIGlmICghdGV4dE5vZGUtPnRleHRSZW5kZXJlcklzTmVlZGVkKCp0aGlzKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclRleHQqIG5ld1JlbmRlcmVyID0gdGV4dE5vZGUt
PmNyZWF0ZVRleHRSZW5kZXJlcihkb2N1bWVudC0+cmVuZGVyQXJlbmEoKSwgbV9zdHlsZS5nZXQo
KSk7Ci0gICAgaWYgKCFuZXdSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghcGFy
ZW50UmVuZGVyZXItPmlzQ2hpbGRBbGxvd2VkKG5ld1JlbmRlcmVyLCBtX3N0eWxlLmdldCgpKSkg
ewotICAgICAgICBuZXdSZW5kZXJlci0+ZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBSZW5kZXJPYmplY3QgYWxyZWFkeSBrbm93cyBpdCBp
cyBnb2luZyB0byBiZSBhZGRlZCB0byBhIFJlbmRlckZsb3dUaHJlYWQgYmVmb3JlIHdlIHNldCB0
aGUgc3R5bGUKLSAgICAvLyBmb3IgdGhlIGZpcnN0IHRpbWUuIE90aGVyd2lzZSBjb2RlIHVzaW5n
IGluUmVuZGVyRmxvd1RocmVhZCgpIGluIHRoZSBzdHlsZVdpbGxDaGFuZ2UgYW5kIHN0eWxlRGlk
Q2hhbmdlIHdpbGwgZmFpbC4KLSAgICBuZXdSZW5kZXJlci0+c2V0Rmxvd1RocmVhZFN0YXRlKHBh
cmVudFJlbmRlcmVyLT5mbG93VGhyZWFkU3RhdGUoKSk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIG5l
eHRSZW5kZXJlciA9IHRoaXMtPm5leHRSZW5kZXJlcigpOwotICAgIHRleHROb2RlLT5zZXRSZW5k
ZXJlcihuZXdSZW5kZXJlcik7Ci0gICAgLy8gUGFyZW50IHRha2VzIGNhcmUgb2YgdGhlIGFuaW1h
dGlvbnMsIG5vIG5lZWQgdG8gY2FsbCBzZXRBbmltYXRhYmxlU3R5bGUuCi0gICAgbmV3UmVuZGVy
ZXItPnNldFN0eWxlKG1fc3R5bGUucmVsZWFzZSgpKTsKLSAgICBwYXJlbnRSZW5kZXJlci0+YWRk
Q2hpbGQobmV3UmVuZGVyZXIsIG5leHRSZW5kZXJlcik7Ci19Ci0KIGJvb2wgTm9kZVJlbmRlcmlu
Z0NvbnRleHQ6OnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gbV9ub2RlLT5wYXJlbnROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTU0Njc4KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDYgQEAgcHVibGljOgogICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0KE5vZGUqLCBjb25z
dCBTdHlsZTo6QXR0YWNoQ29udGV4dCYpOwogICAgIH5Ob2RlUmVuZGVyaW5nQ29udGV4dCgpOwog
Ci0gICAgdm9pZCBjcmVhdGVSZW5kZXJlckZvclRleHRJZk5lZWRlZCgpOwogICAgIHZvaWQgY3Jl
YXRlUmVuZGVyZXJGb3JFbGVtZW50SWZOZWVkZWQoKTsKIAogICAgIE5vZGUqIG5vZGUoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDE1NDY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNyBAQCBQYXNzUmVm
UHRyPFRleHQ+IFRleHQ6OmNyZWF0ZUVkaXRpbmdUZXh0CiAKIFRleHQ6On5UZXh0KCkKIHsKLSAg
ICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgZGV0YWNoVGV4dCgpOworICAgIEFTU0VSVCghcmVu
ZGVyZXIoKSk7CiB9CiAKIFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVk
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzgsNTIgKzE3Nyw2IEBAIFBhc3NSZWZQ
dHI8Tm9kZT4gVGV4dDo6Y2xvbmVOb2RlKGJvb2wgLyoKICAgICByZXR1cm4gY3JlYXRlKGRvY3Vt
ZW50KCksIGRhdGEoKSk7CiB9CiAKLWJvb2wgVGV4dDo6dGV4dFJlbmRlcmVySXNOZWVkZWQoY29u
c3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKGlzRWRpdGluZ1Rl
eHQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY29udGV4dC5zdHlsZSgpLT5kaXNwbGF5KCkgPT0g
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBvbmx5V1MgPSBjb250YWlu
c09ubHlXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKCFvbmx5V1MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBjb250ZXh0LnBhcmVudFJlbmRlcmVyKCk7
Ci0gICAgaWYgKHBhcmVudC0+aXNUYWJsZSgpIHx8IHBhcmVudC0+aXNUYWJsZVJvdygpIHx8IHBh
cmVudC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBwYXJlbnQtPmlzUmVuZGVyVGFibGVDb2woKSB8fCBw
YXJlbnQtPmlzRnJhbWVTZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlm
IChjb250ZXh0LnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSAvLyBwcmUvcHJlLXdyYXAvcHJl
LWxpbmUgYWx3YXlzIG1ha2UgcmVuZGVyZXJzLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBjb250ZXh0LnByZXZpb3VzUmVuZGVyZXIoKTsKLSAg
ICBpZiAocHJldiAmJiBwcmV2LT5pc0JSKCkpIC8vIDxzcGFuPjxici8+IDxici8+PC9zcGFuPgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGlmIChwYXJlbnQtPmlzUmVuZGVy
SW5saW5lKCkpIHsKLSAgICAgICAgLy8gPHNwYW4+PGRpdi8+IDxkaXYvPjwvc3Bhbj4KLSAgICAg
ICAgaWYgKHByZXYgJiYgIXByZXYtPmlzSW5saW5lKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aXNSZW5kZXJCbG9jaygpICYm
ICFwYXJlbnQtPmNoaWxkcmVuSW5saW5lKCkgJiYgKCFwcmV2IHx8ICFwcmV2LT5pc0lubGluZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9i
amVjdCogZmlyc3QgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKGZpcnN0
ICYmIGZpcnN0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAg
ICBmaXJzdCA9IGZpcnN0LT5uZXh0U2libGluZygpOwotICAgICAgICBpZiAoIWZpcnN0IHx8IGNv
bnRleHQubmV4dFJlbmRlcmVyKCkgPT0gZmlyc3QpIHsKLSAgICAgICAgICAgIC8vIFdoaXRlc3Bh
Y2UgYXQgdGhlIHN0YXJ0IG9mIGEgYmxvY2sganVzdCBnb2VzIGF3YXkuICBEb24ndCBldmVuCi0g
ICAgICAgICAgICAvLyBtYWtlIGEgcmVuZGVyIG9iamVjdCBmb3IgdGhpcyB0ZXh0LgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOwotfQogCiAjaWYgRU5BQkxFKFNWRykKIHN0YXRpYyBib29sIGlzU1ZHU2hhZG93VGV4dChU
ZXh0KiB0ZXh0KQpAQCAtMjM5LDExICsxOTIsNiBAQCBzdGF0aWMgYm9vbCBpc1NWR1RleHQoVGV4
dCogdGV4dCkKIH0KICNlbmRpZgogCi12b2lkIFRleHQ6OmNyZWF0ZVRleHRSZW5kZXJlcklmTmVl
ZGVkKCkKLXsKLSAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCh0aGlzKS5jcmVhdGVSZW5kZXJlckZv
clRleHRJZk5lZWRlZCgpOwotfQotCiBSZW5kZXJUZXh0KiBUZXh0OjpjcmVhdGVUZXh0UmVuZGVy
ZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAjaWYgRU5BQkxF
KFNWRykKQEAgLTI1Niw3MCArMjA0LDYgQEAgUmVuZGVyVGV4dCogVGV4dDo6Y3JlYXRlVGV4dFJl
bmRlcmVyKFJlbgogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0KHRoaXMsIGRhdGFJ
bXBsKCkpOwogfQogCi12b2lkIFRleHQ6OmNyZWF0ZVRleHRSZW5kZXJlcnNGb3JTaWJsaW5nc0Fm
dGVyQXR0YWNoSWZOZWVkZWQoTm9kZSogc2libGluZykKLXsKLSAgICBBU1NFUlQoc2libGluZy0+
cHJldmlvdXNTaWJsaW5nKCkpOwotICAgIEFTU0VSVChzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmco
KS0+cmVuZGVyZXIoKSk7Ci0gICAgQVNTRVJUKCFzaWJsaW5nLT5yZW5kZXJlcigpKTsKLSAgICBB
U1NFUlQoc2libGluZy0+YXR0YWNoZWQoKSk7Ci0gICAgLy8gSWYgdGhpcyBub2RlIGdvdCBhIHJl
bmRlcmVyIGl0IG1heSBiZSB0aGUgcHJldmlvdXNSZW5kZXJlcigpIG9mIHNpYmxpbmcgdGV4dCBu
b2RlcyBhbmQgdGh1cyBhZmZlY3QgdGhlCi0gICAgLy8gcmVzdWx0IG9mIFRleHQ6OnRleHRSZW5k
ZXJlcklzTmVlZGVkKCkgZm9yIHRob3NlIG5vZGVzLgotICAgIGZvciAoOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGluZy0+cmVu
ZGVyZXIoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIXNpYmxpbmctPmF0dGFj
aGVkKCkpCi0gICAgICAgICAgICBicmVhazsgLy8gQXNzdW1lIHRoaXMgbWVhbnMgbm9uZSBvZiB0
aGUgZm9sbG93aW5nIHNpYmxpbmdzIGFyZSBhdHRhY2hlZC4KLSAgICAgICAgaWYgKCFzaWJsaW5n
LT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKCFz
aWJsaW5nLT5yZW5kZXJlcigpKTsKLSAgICAgICAgdG9UZXh0KHNpYmxpbmcpLT5jcmVhdGVUZXh0
UmVuZGVyZXJJZk5lZWRlZCgpOwotICAgICAgICAvLyBJZiB3ZSBhZ2FpbiBkZWNpZGVkIG5vdCB0
byBjcmVhdGUgYSByZW5kZXJlciBmb3IgbmV4dCwgd2UgY2FuIGJhaWwgb3V0IHRoZSBsb29wLAot
ICAgICAgICAvLyBiZWNhdXNlIGl0IHdvbid0IGFmZmVjdCB0aGUgcmVzdWx0IG9mIFRleHQ6OnRl
eHRSZW5kZXJlcklzTmVlZGVkKCkgZm9yIHRoZSByZXN0Ci0gICAgICAgIC8vIG9mIHNpYmxpbmcg
bm9kZXMuCi0gICAgICAgIGlmICghc2libGluZy0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0OjphdHRhY2hUZXh0KCkKLXsKLSAgICBjcmVhdGVU
ZXh0UmVuZGVyZXJJZk5lZWRlZCgpOwotCi0gICAgTm9kZSogc2libGluZyA9IG5leHRTaWJsaW5n
KCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgc2libGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIo
KSAmJiBzaWJsaW5nLT5hdHRhY2hlZCgpKQotICAgICAgICBjcmVhdGVUZXh0UmVuZGVyZXJzRm9y
U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHNpYmxpbmcpOwotCi0gICAgc2V0QXR0YWNoZWQo
dHJ1ZSk7Ci0gICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7Ci19Ci0KLXZvaWQgVGV4dDo6ZGV0
YWNoVGV4dCgpCi17Ci0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPmRl
c3Ryb3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKTsKLSAgICBzZXRSZW5kZXJlcigwKTsK
LSAgICBzZXRBdHRhY2hlZChmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dDo6dXBkYXRlVGV4dFJlbmRl
cmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxh
Y2VkRGF0YSkKLXsKLSAgICBpZiAoIWF0dGFjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSk7Ci0gICAg
aWYgKCF0ZXh0UmVuZGVyZXIpIHsKLSAgICAgICAgYXR0YWNoVGV4dCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmluZ0NvbnRleHQodGhp
cywgdGV4dFJlbmRlcmVyLT5zdHlsZSgpKTsKLSAgICBpZiAoIXRleHRSZW5kZXJlcklzTmVlZGVk
KHJlbmRlcmluZ0NvbnRleHQpKSB7Ci0gICAgICAgIGlmIChhdHRhY2hlZCgpKQotICAgICAgICAg
ICAgZGV0YWNoVGV4dCgpOwotICAgICAgICBhdHRhY2hUZXh0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgdGV4dFJlbmRlcmVyLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhSW1wbCgpLCBv
ZmZzZXRPZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOwotfQotCiBib29sIFRl
eHQ6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dC5oCShyZXZpc2lvbiAxNTQ2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNSArNDgsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIHdob2xlVGV4dCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8VGV4dD4gcmVwbGFjZVdo
b2xlVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgCi0gICAgdm9pZCBj
cmVhdGVUZXh0UmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIGJvb2wgdGV4dFJlbmRlcmVySXNOZWVk
ZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKTsKICAgICBSZW5kZXJUZXh0KiBjcmVhdGVU
ZXh0UmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgdXBkYXRl
VGV4dFJlbmRlcmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5n
dGhPZlJlcGxhY2VkRGF0YSk7Ci0KLSAgICB2b2lkIGF0dGFjaFRleHQoKTsKLSAgICB2b2lkIGRl
dGFjaFRleHQoKTsKLQotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcnNGb3JTaWJs
aW5nc0FmdGVyQXR0YWNoSWZOZWVkZWQoTm9kZSopOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRy
dWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxW
aWV3U291cmNlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAg
dm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRUZXh0KGNvbgogICAgICAgICB9CiAgICAg
ICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gVGV4dDo6Y3JlYXRlKHRoaXMsIHN1YnN0cmluZyk7CiAg
ICAgICAgIG1fY3VycmVudC0+cGFyc2VyQXBwZW5kQ2hpbGQodGV4dCk7Ci0gICAgICAgIHRleHQt
PmF0dGFjaFRleHQoKTsKKyAgICAgICAgU3R5bGU6OmF0dGFjaFRleHRSZW5kZXJlcih0ZXh0Lmdl
dCgpKTsKICAgICAgICAgaWYgKGkgPCBzaXplIC0gMSkKICAgICAgICAgICAgIGZpbmlzaExpbmUo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiAxNTQ2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0
CiAgICAgICAgIGlmICh0YXNrLmNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBT
dHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQodGFzay5jaGlsZC5nZXQoKSkpOwogICAg
ICAgICBlbHNlIGlmICh0YXNrLmNoaWxkLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB0b1Rl
eHQodGFzay5jaGlsZC5nZXQoKSktPmF0dGFjaFRleHQoKTsKKyAgICAgICAgICAgIFN0eWxlOjph
dHRhY2hUZXh0UmVuZGVyZXIodG9UZXh0KHRhc2suY2hpbGQuZ2V0KCkpKTsKICAgICB9CiAKICAg
ICB0YXNrLmNoaWxkLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcAkocmV2aXNpb24gMTU0Njc4KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OndpbGxBdHRhY2hS
ZW5kZXJlcnMKICAgICAgICAgaWYgKGN1cnJlbnQtPmF0dGFjaGVkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKGN1cnJlbnQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAg
ICAgdG9UZXh0KGN1cnJlbnQpLT5hdHRhY2hUZXh0KCk7CisgICAgICAgICAgICBTdHlsZTo6YXR0
YWNoVGV4dFJlbmRlcmVyKHRvVGV4dChjdXJyZW50KSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtNzUs
NyArNzUsNyBAQCB2b2lkIEluc2VydGlvblBvaW50Ojp3aWxsRGV0YWNoUmVuZGVyZXJzCiAKICAg
ICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBmaXJzdERpc3RyaWJ1dGVkKCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBuZXh0RGlzdHJpYnV0ZWRUbyhjdXJyZW50KSkgewogICAgICAgICBpZiAoY3VycmVudC0+
aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICB0b1RleHQoY3VycmVudCktPmRldGFjaFRleHQo
KTsKKyAgICAgICAgICAgIFN0eWxlOjpkZXRhY2hUZXh0UmVuZGVyZXIodG9UZXh0KGN1cnJlbnQp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50
LT5pc0VsZW1lbnROb2RlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVUcmVlLmNwcAkocmV2aXNpb24gMTU0Njc4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksMTg1IEBAIHN0
YXRpYyB2b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoRWxlbWUKICAgICBOb2RlUmVuZGVyaW5n
Q29udGV4dChlbGVtZW50LCBjb250ZXh0KS5jcmVhdGVSZW5kZXJlckZvckVsZW1lbnRJZk5lZWRl
ZCgpOwogfQogCitzdGF0aWMgYm9vbCBpc1JlbmRlcmVyUmVwYXJlbnRlZChjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmICghcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgp
ICYmICFyZW5kZXJlci0+c3R5bGUoKS0+Zmxvd1RocmVhZCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgUmVuZGVyT2JqZWN0
KiBwcmV2aW91c1NpYmxpbmdSZW5kZXJlcihjb25zdCBUZXh0KiB0ZXh0Tm9kZSkKK3sKKyAgICBp
ZiAodGV4dE5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB0ZXh0Tm9kZS0+cmVuZGVy
ZXIoKS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgZm9yIChOb2RlKiBzaWJsaW5nID0gTm9kZVJl
bmRlcmluZ1RyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHRleHROb2RlKTsgc2libGluZzsgc2li
bGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhzaWJsaW5nKSkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc2libGluZy0+cmVuZGVyZXIoKTsK
KyAgICAgICAgaWYgKHJlbmRlcmVyICYmICFpc1JlbmRlcmVyUmVwYXJlbnRlZChyZW5kZXJlcikp
CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7CisgICAgfQorICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZ1JlbmRlcmVyKGNvbnN0IFRleHQqIHRl
eHROb2RlKQoreworICAgIGlmICh0ZXh0Tm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
IHRleHROb2RlLT5yZW5kZXJlcigpLT5uZXh0U2libGluZygpOworICAgIGZvciAoTm9kZSogc2li
bGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHRleHROb2RlKTsgc2li
bGluZzsgc2libGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxp
bmcpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzaWJsaW5nLT5yZW5kZXJl
cigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgIWlzUmVuZGVyZXJSZXBhcmVudGVkKHJlbmRl
cmVyKSkKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcnNGb3JTaWJsaW5nc0FmdGVyQXR0
YWNoSWZOZWVkZWQoTm9kZSogc2libGluZykKK3sKKyAgICBBU1NFUlQoc2libGluZy0+cHJldmlv
dXNTaWJsaW5nKCkpOworICAgIEFTU0VSVChzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKS0+cmVu
ZGVyZXIoKSk7CisgICAgQVNTRVJUKCFzaWJsaW5nLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQo
c2libGluZy0+YXR0YWNoZWQoKSk7CisgICAgLy8gSWYgdGhpcyBub2RlIGdvdCBhIHJlbmRlcmVy
IGl0IG1heSBiZSB0aGUgcHJldmlvdXNSZW5kZXJlcigpIG9mIHNpYmxpbmcgdGV4dCBub2RlcyBh
bmQgdGh1cyBhZmZlY3QgdGhlCisgICAgLy8gcmVzdWx0IG9mIFRleHQ6OnRleHRSZW5kZXJlcklz
TmVlZGVkKCkgZm9yIHRob3NlIG5vZGVzLgorICAgIGZvciAoOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+cmVuZGVyZXIo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIXNpYmxpbmctPmF0dGFjaGVkKCkp
CisgICAgICAgICAgICBicmVhazsgLy8gQXNzdW1lIHRoaXMgbWVhbnMgbm9uZSBvZiB0aGUgZm9s
bG93aW5nIHNpYmxpbmdzIGFyZSBhdHRhY2hlZC4KKyAgICAgICAgaWYgKCFzaWJsaW5nLT5pc1Rl
eHROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKCFzaWJsaW5n
LT5yZW5kZXJlcigpKTsKKyAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKHRvVGV4dChzaWJsaW5n
KSk7CisgICAgICAgIC8vIElmIHdlIGFnYWluIGRlY2lkZWQgbm90IHRvIGNyZWF0ZSBhIHJlbmRl
cmVyIGZvciBuZXh0LCB3ZSBjYW4gYmFpbCBvdXQgdGhlIGxvb3AsCisgICAgICAgIC8vIGJlY2F1
c2UgaXQgd29uJ3QgYWZmZWN0IHRoZSByZXN1bHQgb2YgVGV4dDo6dGV4dFJlbmRlcmVySXNOZWVk
ZWQoKSBmb3IgdGhlIHJlc3QKKyAgICAgICAgLy8gb2Ygc2libGluZyBub2Rlcy4KKyAgICAgICAg
aWYgKCFzaWJsaW5nLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgYm9vbCB0ZXh0UmVuZGVyZXJJc05lZWRlZChjb25zdCBUZXh0KiB0ZXh0Tm9kZSwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKQoreworICAgIGlmICh0ZXh0Tm9kZS0+aXNFZGl0aW5nVGV4dCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoIXRleHROb2RlLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXRleHROb2RlLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIC8vIFRoaXMgdGV4dCBub2RlIGhhcyBub3RoaW5nIGJ1dCB3
aGl0ZSBzcGFjZS4gV2UgbWF5IHN0aWxsIG5lZWQgYSByZW5kZXJlciBpbiBzb21lIGNhc2VzLgor
ICAgIGlmIChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZSgpIHx8IHBhcmVudFJlbmRlcmVyLT5pc1Rh
YmxlUm93KCkgfHwgcGFyZW50UmVuZGVyZXItPmlzVGFibGVTZWN0aW9uKCkgfHwgcGFyZW50UmVu
ZGVyZXItPmlzUmVuZGVyVGFibGVDb2woKSB8fCBwYXJlbnRSZW5kZXJlci0+aXNGcmFtZVNldCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUo
KSkgLy8gcHJlL3ByZS13cmFwL3ByZS1saW5lIGFsd2F5cyBtYWtlIHJlbmRlcmVycy4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzUmVuZGVyZXIgPSBw
cmV2aW91c1NpYmxpbmdSZW5kZXJlcih0ZXh0Tm9kZSk7CisgICAgaWYgKHByZXZpb3VzUmVuZGVy
ZXIgJiYgcHJldmlvdXNSZW5kZXJlci0+aXNCUigpKSAvLyA8c3Bhbj48YnIvPiA8YnIvPjwvc3Bh
bj4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAocGFyZW50UmVuZGVy
ZXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgLy8gPHNwYW4+PGRpdi8+IDxkaXYvPjwv
c3Bhbj4KKyAgICAgICAgaWYgKHByZXZpb3VzUmVuZGVyZXIgJiYgIXByZXZpb3VzUmVuZGVyZXIt
PmlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKHBhcmVudFJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXBhcmVudFJlbmRl
cmVyLT5jaGlsZHJlbklubGluZSgpICYmICghcHJldmlvdXNSZW5kZXJlciB8fCAhcHJldmlvdXNS
ZW5kZXJlci0+aXNJbmxpbmUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0ID0gcGFyZW50UmVuZGVyZXItPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgd2hpbGUgKGZpcnN0ICYmIGZpcnN0LT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBmaXJzdCA9IGZpcnN0LT5uZXh0U2libGluZygp
OworICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5kZXJlciA9IG5leHRTaWJsaW5nUmVuZGVy
ZXIodGV4dE5vZGUpOworICAgICAgICBpZiAoIWZpcnN0IHx8IG5leHRSZW5kZXJlciA9PSBmaXJz
dCkgeworICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgYSBibG9jayBq
dXN0IGdvZXMgYXdheS4gRG9uJ3QgZXZlbiBtYWtlIGEgcmVuZGVyIG9iamVjdCBmb3IgdGhpcyB0
ZXh0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjcmF0ZVRleHRSZW5kZXJlcklmTmVlZGVkKFRl
eHQqIHRleHROb2RlKQoreworICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkpOworICAg
IENvbnRhaW5lck5vZGUqIHJlbmRlcmluZ1BhcmVudE5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVy
c2FsOjpwYXJlbnQodGV4dE5vZGUpOworICAgIGlmICghcmVuZGVyaW5nUGFyZW50Tm9kZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJp
bmdQYXJlbnROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcGFyZW50UmVuZGVyZXIgfHwgIXBh
cmVudFJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghcmVuZGVyaW5nUGFyZW50Tm9kZS0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0ZXh0Tm9k
ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRleHROb2Rl
LT5kb2N1bWVudCgpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKKyAgICBib29s
IHJlc2V0U3R5bGVJbmhlcml0YW5jZSA9IHJlbmRlcmluZ1BhcmVudE5vZGUtPmlzU2hhZG93Um9v
dCgpICYmIHRvU2hhZG93Um9vdChyZW5kZXJpbmdQYXJlbnROb2RlKS0+cmVzZXRTdHlsZUluaGVy
aXRhbmNlKCk7CisgICAgaWYgKHJlc2V0U3R5bGVJbmhlcml0YW5jZSkKKyAgICAgICAgc3R5bGUg
PSBkb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQo
KTsKKyAgICBlbHNlCisgICAgICAgIHN0eWxlID0gcGFyZW50UmVuZGVyZXItPnN0eWxlKCk7CisK
KyAgICBpZiAoIXRleHRSZW5kZXJlcklzTmVlZGVkKHRleHROb2RlLCBwYXJlbnRSZW5kZXJlciwg
c3R5bGUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyVGV4dCogbmV3UmVuZGVy
ZXIgPSB0ZXh0Tm9kZS0+Y3JlYXRlVGV4dFJlbmRlcmVyKGRvY3VtZW50LT5yZW5kZXJBcmVuYSgp
LCBzdHlsZS5nZXQoKSk7CisgICAgaWYgKCFuZXdSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcGFyZW50UmVuZGVyZXItPmlzQ2hpbGRBbGxvd2VkKG5ld1JlbmRlcmVyLCBzdHls
ZS5nZXQoKSkpIHsKKyAgICAgICAgbmV3UmVuZGVyZXItPmRlc3Ryb3koKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgUmVuZGVyT2JqZWN0IGFscmVhZHkg
a25vd3MgaXQgaXMgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYSBSZW5kZXJGbG93VGhyZWFkIGJlZm9y
ZSB3ZSBzZXQgdGhlIHN0eWxlCisgICAgLy8gZm9yIHRoZSBmaXJzdCB0aW1lLiBPdGhlcndpc2Ug
Y29kZSB1c2luZyBpblJlbmRlckZsb3dUaHJlYWQoKSBpbiB0aGUgc3R5bGVXaWxsQ2hhbmdlIGFu
ZCBzdHlsZURpZENoYW5nZSB3aWxsIGZhaWwuCisgICAgbmV3UmVuZGVyZXItPnNldEZsb3dUaHJl
YWRTdGF0ZShwYXJlbnRSZW5kZXJlci0+Zmxvd1RocmVhZFN0YXRlKCkpOworCisgICAgUmVuZGVy
T2JqZWN0KiBuZXh0UmVuZGVyZXIgPSBuZXh0U2libGluZ1JlbmRlcmVyKHRleHROb2RlKTsKKyAg
ICB0ZXh0Tm9kZS0+c2V0UmVuZGVyZXIobmV3UmVuZGVyZXIpOworICAgIC8vIFBhcmVudCB0YWtl
cyBjYXJlIG9mIHRoZSBhbmltYXRpb25zLCBubyBuZWVkIHRvIGNhbGwgc2V0QW5pbWF0YWJsZVN0
eWxlLgorICAgIG5ld1JlbmRlcmVyLT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlKCkpOworICAgIHBh
cmVudFJlbmRlcmVyLT5hZGRDaGlsZChuZXdSZW5kZXJlciwgbmV4dFJlbmRlcmVyKTsKKworICAg
IE5vZGUqIHNpYmxpbmcgPSB0ZXh0Tm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoc2libGlu
ZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSAmJiBzaWJsaW5nLT5hdHRhY2hlZCgpKQorICAgICAg
ICBjcmVhdGVUZXh0UmVuZGVyZXJzRm9yU2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHNpYmxp
bmcpOworfQorCit2b2lkIGF0dGFjaFRleHRSZW5kZXJlcihUZXh0KiB0ZXh0Tm9kZSkKK3sKKyAg
ICBjcmF0ZVRleHRSZW5kZXJlcklmTmVlZGVkKHRleHROb2RlKTsKKworICAgIHRleHROb2RlLT5z
ZXRBdHRhY2hlZCh0cnVlKTsKKyAgICB0ZXh0Tm9kZS0+Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7
Cit9CisKK3ZvaWQgZGV0YWNoVGV4dFJlbmRlcmVyKFRleHQqIHRleHROb2RlKQoreworICAgIGlm
ICh0ZXh0Tm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgdGV4dE5vZGUtPnJlbmRlcmVyKCktPmRl
c3Ryb3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKTsKKyAgICB0ZXh0Tm9kZS0+c2V0UmVu
ZGVyZXIoMCk7CisgICAgdGV4dE5vZGUtPnNldEF0dGFjaGVkKGZhbHNlKTsKK30KKwordm9pZCB1
cGRhdGVUZXh0UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UoVGV4dCogdGV4dE5vZGUsIHVuc2ln
bmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSkK
K3sKKyAgICBpZiAoIXRleHROb2RlLT5hdHRhY2hlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
UmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHRleHROb2RlLT5yZW5kZXJl
cigpKTsKKyAgICBpZiAoIXRleHRSZW5kZXJlcikgeworICAgICAgICBhdHRhY2hUZXh0UmVuZGVy
ZXIodGV4dE5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKTsKKyAgICBpZiAoIXRleHRSZW5kZXJlcklzTmVl
ZGVkKHRleHROb2RlLCBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQodGV4dE5vZGUpLT5y
ZW5kZXJlcigpLCBzdHlsZSkpIHsKKyAgICAgICAgZGV0YWNoVGV4dFJlbmRlcmVyKHRleHROb2Rl
KTsKKyAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKHRleHROb2RlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB0ZXh0UmVuZGVyZXItPnNldFRleHRXaXRoT2Zmc2V0KHRleHROb2RlLT5k
YXRhSW1wbCgpLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOwor
fQorCisKIHN0YXRpYyB2b2lkIGF0dGFjaFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogc2hhZG93Um9v
dCwgY29uc3QgQXR0YWNoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc2hhZG93Um9vdC0+
YXR0YWNoZWQoKSkKQEAgLTEyMCw3ICsyOTksNyBAQCBzdGF0aWMgdm9pZCBhdHRhY2hTaGFkb3dS
b290KFNoYWRvd1Jvb3QqCiAgICAgY2hpbGRyZW5Db250ZXh0LnJlc29sdmVkU3R5bGUgPSAwOwog
ICAgIGZvciAoTm9kZSogY2hpbGQgPSBzaGFkb3dSb290LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0
Tm9kZSgpKSB7Ci0gICAgICAgICAgICB0b1RleHQoY2hpbGQpLT5hdHRhY2hUZXh0KCk7CisgICAg
ICAgICAgICBhdHRhY2hUZXh0UmVuZGVyZXIodG9UZXh0KGNoaWxkKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkK
QEAgLTE1NSw3ICszMzQsNyBAQCBzdGF0aWMgdm9pZCBhdHRhY2hDaGlsZHJlbihFbGVtZW50KiBj
dXJyCiAgICAgICAgIGlmIChjaGlsZC0+YXR0YWNoZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgdG9UZXh0
KGNoaWxkKS0+YXR0YWNoVGV4dCgpOworICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKHRv
VGV4dChjaGlsZCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCkBAIC0xOTEsNyArMzcwLDcgQEAgdm9pZCBhdHRh
Y2hSZW5kZXJUcmVlKEVsZW1lbnQqIGN1cnJlbnQsIAogCiAgICAgTm9kZSogc2libGluZyA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKGN1cnJlbnQtPnJlbmRlcmVyKCkgJiYgc2li
bGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSAmJiBzaWJsaW5nLT5hdHRhY2hlZCgpKQotICAg
ICAgICBUZXh0OjpjcmVhdGVUZXh0UmVuZGVyZXJzRm9yU2libGluZ3NBZnRlckF0dGFjaElmTmVl
ZGVkKHNpYmxpbmcpOworICAgICAgICBjcmVhdGVUZXh0UmVuZGVyZXJzRm9yU2libGluZ3NBZnRl
ckF0dGFjaElmTmVlZGVkKHNpYmxpbmcpOwogCiAgICAgY3VycmVudC0+c2V0QXR0YWNoZWQodHJ1
ZSk7CiAgICAgY3VycmVudC0+Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CkBAIC0yMTcsNyArMzk2
LDcgQEAgc3RhdGljIHZvaWQgZGV0YWNoU2hhZG93Um9vdChTaGFkb3dSb290KgogICAgIGNoaWxk
cmVuQ29udGV4dC5yZXNvbHZlZFN0eWxlID0gMDsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gc2hh
ZG93Um9vdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgdG9U
ZXh0KGNoaWxkKS0+ZGV0YWNoVGV4dCgpOworICAgICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRS
ZW5kZXJlcih0b1RleHQoY2hpbGQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAgICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtMjM0LDcgKzQxMyw3IEBA
IHN0YXRpYyB2b2lkIGRldGFjaENoaWxkcmVuKEVsZW1lbnQqIGN1cnIKIAogICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICB0b1RleHQoY2hpbGQpLT5kZXRhY2hUZXh0KCk7CisgICAgICAgICAgICBTdHlsZTo6
ZGV0YWNoVGV4dFJlbmRlcmVyKHRvVGV4dChjaGlsZCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCkBAIC0zNzMs
NyArNTUyLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlVGV4dFN0eWxlKFRleHQqIHRleHQsIAogICAg
IGlmIChyZW5kZXJlcikKICAgICAgICAgcmVuZGVyZXItPnNldFRleHQodGV4dC0+ZGF0YUltcGwo
KSk7CiAgICAgZWxzZQotICAgICAgICB0ZXh0LT5hdHRhY2hUZXh0KCk7CisgICAgICAgIGF0dGFj
aFRleHRSZW5kZXJlcih0ZXh0KTsKICAgICB0ZXh0LT5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuaAkocmV2aXNp
b24gMTU0Njc4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxl
bWVudDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBUZXh0Owog
CiBuYW1lc3BhY2UgU3R5bGUgewogCkBAIC01MCw2ICs1MSwxMCBAQCB2b2lkIGF0dGFjaFJlbmRl
clRyZWUoRWxlbWVudCosIGNvbnN0IEF0CiB2b2lkIGRldGFjaFJlbmRlclRyZWUoRWxlbWVudCos
IGNvbnN0IEF0dGFjaENvbnRleHQmID0gQXR0YWNoQ29udGV4dCgpKTsKIHZvaWQgcmVhdHRhY2hS
ZW5kZXJUcmVlKEVsZW1lbnQqLCBjb25zdCBBdHRhY2hDb250ZXh0JiA9IEF0dGFjaENvbnRleHQo
KSk7CiAKK3ZvaWQgYXR0YWNoVGV4dFJlbmRlcmVyKFRleHQqKTsKK3ZvaWQgZGV0YWNoVGV4dFJl
bmRlcmVyKFRleHQqKTsKK3ZvaWQgdXBkYXRlVGV4dFJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhbmdl
KFRleHQqLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3RoT2ZS
ZXBsYWNlZERhdGEpOworCiBDaGFuZ2UgZGV0ZXJtaW5lQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBTZXR0aW5ncyopOwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNpb24gMTU0
Njc4KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpleGl0VGV4dCgpCiAKICAgICBpZiAobV92aWV3ICYmIG1fbGVhZlRleHROb2RlLT5wYXJlbnRO
b2RlKCkgJiYgbV9sZWFmVGV4dE5vZGUtPnBhcmVudE5vZGUoKS0+YXR0YWNoZWQoKQogICAgICAg
ICAmJiAhbV9sZWFmVGV4dE5vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG1fbGVhZlRleHROb2Rl
LT5hdHRhY2hUZXh0KCk7CisgICAgICAgIFN0eWxlOjphdHRhY2hUZXh0UmVuZGVyZXIobV9sZWFm
VGV4dE5vZGUuZ2V0KCkpOwogCiAgICAgbV9sZWFmVGV4dE5vZGUgPSAwOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAkocmV2aXNpb24gMTU0Njc4KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM3LDcgKzEw
MzcsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0CiAgICAgUmVm
UHRyPENEQVRBU2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKG1fY3VycmVu
dE5vZGUtPmRvY3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwogICAgIG1fY3VycmVudE5vZGUt
PnBhcnNlckFwcGVuZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogICAgIGlmIChtX3ZpZXcgJiYgIW5l
d05vZGUtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld05vZGUtPmF0dGFjaFRleHQoKTsKKyAgICAg
ICAgU3R5bGU6OmF0dGFjaFRleHRSZW5kZXJlcihuZXdOb2RlLmdldCgpKTsKIH0KIAogdm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6Y29tbWVudChjb25zdCB4bWxDaGFyKiBzKQo=
</data>
<flag name="review"
          id="231923"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>