<?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>130091</bug_id>
          
          <creation_ts>2014-03-11 08:52:25 -0700</creation_ts>
          <short_desc>Don&apos;t use NodeRenderingTraversal for pseudo elements</short_desc>
          <delta_ts>2022-08-11 13:24:28 -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>ahmad.saleem792</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>989402</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-11 08:52:25 -0700</bug_when>
    <thetext>Make traversing during style resolve more comprehensible by handling before/after pseudo elements explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989427</commentid>
    <comment_count>1</comment_count>
      <attachid>226437</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-11 15:36:54 -0700</bug_when>
    <thetext>Created attachment 226437
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989439</commentid>
    <comment_count>2</comment_count>
      <attachid>226437</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-11 15:52:35 -0700</bug_when>
    <thetext>Comment on attachment 226437
patch

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

r=me

&gt; Source/WebCore/dom/NodeRenderingTraversal.cpp:221
&gt; +Node* firstChildSlow(const Node* node)

This code could be made more efficient by exploiting the knowledge that only Elements will have the shouldUseNodeRenderingTraversalSlowPath bit set.

&gt; Source/WebCore/dom/NodeRenderingTraversal.h:39
&gt; +Node* lastChild(const Node*);

Where is this?

&gt; Source/WebCore/dom/NodeRenderingTraversal.h:63
&gt; +inline Node* firstChild(const Node* node)

Again, could be better with Element*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1890683</commentid>
    <comment_count>3</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-11 13:24:28 -0700</bug_when>
    <thetext>It seems that it was landed but not marked as &quot;RESOLVED FIXED&quot;.

https://github.com/WebKit/WebKit/commit/d31ae33de07e70eca6498f4f103f7581ba6b9276

and it didn&apos;t backed out. I am going to mark this as &quot;RESOLVED FIXED&quot;. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226437</attachid>
            <date>2014-03-11 15:36:54 -0700</date>
            <delta_ts>2014-03-11 15:52:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pseudo-attach-traversal-4.patch</filename>
            <type>text/plain</type>
            <size>31698</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE0LTAzLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBEb24ndCB1c2UgTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbCBmb3IgcHNldWRvIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAwOTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRyYXZlcnNpbmcgZHVyaW5nIHN0eWxlIHJl
c29sdmUgbW9yZSBjb21wcmVoZW5zaWJsZSBieSBoYW5kbGluZyBiZWZvcmUvYWZ0ZXIgcHNldWRv
IGVsZW1lbnRzIGV4cGxpY2l0bHkuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoIE5vZGVSZW5k
ZXJpbmdUcmF2ZXJzYWwgaXMgb25seSBuZWVkZWQgZm9yIEluc2VydGlvblBvaW50cyAod2hpY2gg
YXJlIG5vdGhpbmcgYnV0IGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgIGRldGFpbCBvZiB0aGUg
PGRldGFpbHM+IGVsZW1lbnQgYXQgdGhpcyBwb2ludCkuCisKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VOb2RlUmVuZGVyaW5nVHJhdmVyc2Fs
U2xvd1BhdGgpOgorICAgICAgICAKKyAgICAgICAgICAgIFBzZXVkb0VsZW1lbnRzIGRvbid0IG5l
ZWQgdGhlIHNsb3cgcGF0aCBhbnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFm
dGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGVhckJlZm9y
ZVBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xlYXJBZnRlclBz
ZXVkb0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnRyYXZlcnNlUGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OmZpcnN0Q2hpbGRT
bG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmdTbG93KToKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6Zmlyc3RDaGlsZCk6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6bmV4dFNpYmxpbmdSZW5kZXJlcik6CisgICAgICAgIAorICAgICAgICAgICAgQWRk
IDo6YmVmb3JlLzo6YWZ0ZXIgcHNldWRvIGVsZW1lbnQgaGFuZGxpbmcgaGVyZS4KKworICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OnNob3VsZENyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjplbGVtZW50SW5zaWRlUmVnaW9uTmVlZHNSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6cHJldmlvdXNTaWJsaW5nUmVuZGVyZXIpOgorICAgICAgICAKKyAgICAgICAgICAg
IEFkZCA6OmJlZm9yZSBwc2V1ZG8gZWxlbWVudCBoYW5kbGluZyBoZXJlICh0ZXh0IG5vZGUgY2Fu
J3QgYmUgOjphZnRlcikuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZWF0dGFjaFRleHRS
ZW5kZXJlcnNGb3JXaGl0ZXNwYWNlT25seVNpYmxpbmdzQWZ0ZXJBdHRhY2hJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dGV4dFJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OmNyZWF0ZVRleHRSZW5kZXJlcklmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjphdHRhY2hUZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OnVwZGF0ZVRleHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6YXR0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmF0
dGFjaERpc3RyaWJ1dGVkQ2hpbGRyZW4pOgorICAgICAgICAKKyAgICAgICAgICAgIEhhbmRsZSBJ
bnNlcnRpb25Qb2ludHMgaW4gb25lIHBsYWNlLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
YXR0YWNoU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoQmVmb3Jl
T3JBZnRlclBzZXVkb0VsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
YXR0YWNoUmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUxvY2Fs
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjp1cGRhdGVUZXh0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjp1cGRhdGVCZWZvcmVPckFmdGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6cmVzb2x2ZVRyZWUpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIHJl
bmRlcmluZyBwYXJlbnQgYXJvdW5kIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGluc3RlYWQgb2YgZGV0
ZXJtaW5pbmcgaXQgcmVwZWF0ZWRseSBieSBjYWxsaW5nIAorICAgICAgICAgICAgTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbDo6cGFyZW50LiBJdCBpcyBhbHdheXMgdGhlIHNhbWUgZm9yIGFsbCBkaXJl
Y3QgY2hpbGRyZW4gYmVpbmcgcmVzb2x2ZWQgYW5kIGdlbmVyYWxseSBqdXN0CisgICAgICAgICAg
ICB0aGUgcGFyZW50IGVsZW1lbnQuCisKIDIwMTQtMDMtMTEgIFJ5dWFuIENob2kgIDxyeXVhbi5j
aG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgbWV0aG9kIGZyb20gQmF0
dGVyeUNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE2NTQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQ
c2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiUXVvdGVzRGF0YS5oIgogI2luY2x1ZGUgIlJlY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKQEAgLTQxMCw3ICs0MTEsNyBAQCBpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEZvCiAgICAgbV9yZWdpb25Gb3JTdHlsaW5n
ID0gcmVnaW9uRm9yU3R5bGluZzsKIAogICAgIGlmIChlKSB7Ci0gICAgICAgIG1fcGFyZW50Tm9k
ZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVudChlKTsKKyAgICAgICAgbV9wYXJlbnRO
b2RlID0gZS0+aXNQc2V1ZG9FbGVtZW50KCkgPyB0b1BzZXVkb0VsZW1lbnQoZSktPmhvc3RFbGVt
ZW50KCkgOiBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQoZSk7CiAgICAgICAgIGJvb2wg
cmVzZXRTdHlsZUluaGVyaXRhbmNlID0gaGFzU2hhZG93Um9vdFBhcmVudCgqZSkgJiYgdG9TaGFk
b3dSb290KGUtPnBhcmVudE5vZGUoKSktPnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpOwogICAgICAg
ICBtX3BhcmVudFN0eWxlID0gcmVzZXRTdHlsZUluaGVyaXRhbmNlID8gMCA6CiAgICAgICAgICAg
ICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2NTQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQxMCw4ICsxNDEwLDYgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlTm9k
ZVJlbmRlcmluZ1RyYXZlcgogewogICAgIGlmIChlbGVtZW50LmlzU2hhZG93Um9vdCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZWxlbWVudC5pc1BzZXVkb0VsZW1lbnQoKSB8fCBl
bGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSB8fCBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZWxlbWVudC5pc0luc2VydGlv
blBvaW50KCkgfHwgZWxlbWVudC5zaGFkb3dSb290KCk7CiB9CiAKQEAgLTIyNTAsMTMgKzIyNDgs
MTEgQEAgUHNldWRvRWxlbWVudCogRWxlbWVudDo6YWZ0ZXJQc2V1ZG9FbGVtZQogdm9pZCBFbGVt
ZW50OjpzZXRCZWZvcmVQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxl
bWVudCkKIHsKICAgICBlbnN1cmVFbGVtZW50UmFyZURhdGEoKS5zZXRCZWZvcmVQc2V1ZG9FbGVt
ZW50KGVsZW1lbnQpOwotICAgIHJlc2V0TmVlZHNOb2RlUmVuZGVyaW5nVHJhdmVyc2FsU2xvd1Bh
dGgoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBZnRlclBzZXVkb0VsZW1lbnQoUGFzc1JlZlB0
cjxQc2V1ZG9FbGVtZW50PiBlbGVtZW50KQogewogICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgp
LnNldEFmdGVyUHNldWRvRWxlbWVudChlbGVtZW50KTsKLSAgICByZXNldE5lZWRzTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbFNsb3dQYXRoKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2Nvbm5lY3RQc2V1
ZG9FbGVtZW50KFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQpCkBAIC0yMjc1LDcgKzIyNzEs
NiBAQCB2b2lkIEVsZW1lbnQ6OmNsZWFyQmVmb3JlUHNldWRvRWxlbWVudCgpCiAgICAgICAgIHJl
dHVybjsKICAgICBkaXNjb25uZWN0UHNldWRvRWxlbWVudChlbGVtZW50UmFyZURhdGEoKS0+YmVm
b3JlUHNldWRvRWxlbWVudCgpKTsKICAgICBlbGVtZW50UmFyZURhdGEoKS0+c2V0QmVmb3JlUHNl
dWRvRWxlbWVudChudWxscHRyKTsKLSAgICByZXNldE5lZWRzTm9kZVJlbmRlcmluZ1RyYXZlcnNh
bFNsb3dQYXRoKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQo
KQpAQCAtMjI4NCw3ICsyMjc5LDYgQEAgdm9pZCBFbGVtZW50OjpjbGVhckFmdGVyUHNldWRvRWxl
bWVudCgpCiAgICAgICAgIHJldHVybjsKICAgICBkaXNjb25uZWN0UHNldWRvRWxlbWVudChlbGVt
ZW50UmFyZURhdGEoKS0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOwogICAgIGVsZW1lbnRSYXJlRGF0
YSgpLT5zZXRBZnRlclBzZXVkb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgcmVzZXROZWVkc05vZGVS
ZW5kZXJpbmdUcmF2ZXJzYWxTbG93UGF0aCgpOwogfQogCiAvLyBFbGVtZW50VHJhdmVyc2FsIEFQ
SQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNw
cAkocmV2aXNpb24gMTY1NDUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdU
cmF2ZXJzYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAi
Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5oIgogCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIK
LSNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjEsOSArMTIwLDYgQEAgZW51bSBTaGFkb3dSb290Q3Jv
c3NpbmcgeyBDcm9zc1NoYWRvd1JvbwogCiBzdGF0aWMgQ29udGFpbmVyTm9kZSogdHJhdmVyc2VQ
YXJlbnQoY29uc3QgTm9kZSogbm9kZSwgU2hhZG93Um9vdENyb3NzaW5nIHNoYWRvd1Jvb3RDcm9z
c2luZykKIHsKLSAgICBpZiAobm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biB0b1BzZXVkb0VsZW1lbnQobm9kZSktPmhvc3RFbGVtZW50KCk7Ci0KICAgICBpZiAoc2hhZG93
Um9vdENyb3NzaW5nID09IERvbnRDcm9zc1NoYWRvd1Jvb3QgICYmIG5vZGUtPmlzU2hhZG93Um9v
dCgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMjIyLDQ3ICsyMTgsMjUgQEAgQ29udGFpbmVy
Tm9kZSogcGFyZW50U2xvdyhjb25zdCBOb2RlKiBubwogICAgIHJldHVybiB0cmF2ZXJzZVBhcmVu
dChub2RlLCBDcm9zc1NoYWRvd1Jvb3QpOwogfQogCi1Ob2RlKiBuZXh0U2libGluZ1Nsb3coY29u
c3QgTm9kZSogbm9kZSkKK05vZGUqIGZpcnN0Q2hpbGRTbG93KGNvbnN0IE5vZGUqIG5vZGUpCiB7
CiAgICAgQVNTRVJUKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSk7CiAKLSAgICAvLyBGSVhNRTogV2h5
IGRvIHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggYmVmb3JlL2FmdGVyIHdoZW4gb3RoZXIgY29k
ZSBoZXJlIGRvZXNuJ3Q/Ci0gICAgTm9kZSogbmV4dFNpYmxpbmcgPSAwOwotICAgIGlmIChub2Rl
LT5pc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBuZXh0U2libGluZyA9IHRyYXZl
cnNlUGFyZW50KG5vZGUsIENyb3NzU2hhZG93Um9vdCk7Ci0gICAgICAgIG5leHRTaWJsaW5nID0g
dHJhdmVyc2VGaXJzdENoaWxkKG5leHRTaWJsaW5nLCBDcm9zc1NoYWRvd1Jvb3QpOwotICAgIH0g
ZWxzZQotICAgICAgICBuZXh0U2libGluZyA9IHRyYXZlcnNlTmV4dFNpYmxpbmcobm9kZSk7Ci0K
LSAgICBpZiAobmV4dFNpYmxpbmcgfHwgbm9kZS0+aXNBZnRlclBzZXVkb0VsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIG5leHRTaWJsaW5nOwotCi0gICAgTm9kZSogcGFyZW50ID0gdHJhdmVyc2VQ
YXJlbnQobm9kZSwgQ3Jvc3NTaGFkb3dSb290KTsKLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KHBhcmVudCktPmFmdGVy
UHNldWRvRWxlbWVudCgpOworICAgIHJldHVybiB0cmF2ZXJzZUZpcnN0Q2hpbGQobm9kZSwgRG9u
dENyb3NzU2hhZG93Um9vdCk7Cit9CisKK05vZGUqIG5leHRTaWJsaW5nU2xvdyhjb25zdCBOb2Rl
KiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZS0+aXNTaGFkb3dSb290KCkpOwogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcobm9kZSk7CiB9CiAKIE5vZGUq
IHByZXZpb3VzU2libGluZ1Nsb3coY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoIW5v
ZGUtPmlzU2hhZG93Um9vdCgpKTsKIAotICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9IDA7Ci0g
ICAgaWYgKG5vZGUtPmlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gdHJhdmVyc2VQYXJlbnQobm9kZSwgQ3Jvc3NTaGFkb3dSb290KTsKLSAg
ICAgICAgcHJldmlvdXNTaWJsaW5nID0gdHJhdmVyc2VMYXN0Q2hpbGQocGFyZW50LCBDcm9zc1No
YWRvd1Jvb3QpOwotICAgIH0gZWxzZQotICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSB0cmF2ZXJz
ZVByZXZpb3VzU2libGluZyhub2RlKTsKLQotICAgIGlmIChwcmV2aW91c1NpYmxpbmcgfHwgbm9k
ZS0+aXNCZWZvcmVQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBwcmV2aW91c1NpYmxp
bmc7Ci0KLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSB0cmF2ZXJzZVBhcmVudChub2RlLCBD
cm9zc1NoYWRvd1Jvb3QpOwotICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50KS0+YmVmb3JlUHNldWRvRWxlbWVu
dCgpOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5n
KG5vZGUpOwogfQogCiBOb2RlKiBuZXh0SW5TY29wZShjb25zdCBOb2RlKiBub2RlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5oCShyZXZpc2lvbiAx
NjU0NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsIHsKIAogQ29udGFpbmVyTm9kZSogcGFyZW50KGNv
bnN0IE5vZGUqKTsKK05vZGUqIGZpcnN0Q2hpbGQoY29uc3QgTm9kZSopOworTm9kZSogbGFzdENo
aWxkKGNvbnN0IE5vZGUqKTsKIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqKTsKIE5vZGUq
IHByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7CiAKQEAgLTQ0LDExICs0NiwxMyBAQCBOb2Rl
KiBwYXJlbnRJblNjb3BlKGNvbnN0IE5vZGUqKTsKIE5vZGUqIGxhc3RDaGlsZEluU2NvcGUoY29u
c3QgTm9kZSopOwogCiBDb250YWluZXJOb2RlKiBwYXJlbnRTbG93KGNvbnN0IE5vZGUqKTsKK05v
ZGUqIGZpcnN0Q2hpbGRTbG93KGNvbnN0IE5vZGUqKTsKIE5vZGUqIG5leHRTaWJsaW5nU2xvdyhj
b25zdCBOb2RlKik7CiBOb2RlKiBwcmV2aW91c1NpYmxpbmdTbG93KGNvbnN0IE5vZGUqKTsKIAog
aW5saW5lIENvbnRhaW5lck5vZGUqIHBhcmVudChjb25zdCBOb2RlKiBub2RlKQogeworICAgIEFT
U0VSVCghbm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpOwogICAgIGlmIChub2RlLT5uZWVkc05vZGVS
ZW5kZXJpbmdUcmF2ZXJzYWxTbG93UGF0aCgpKQogICAgICAgICByZXR1cm4gcGFyZW50U2xvdyhu
b2RlKTsKIApAQCAtNTYsOCArNjAsMTkgQEAgaW5saW5lIENvbnRhaW5lck5vZGUqIHBhcmVudChj
b25zdCBOb2RlKgogICAgIHJldHVybiBub2RlLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVl
KCk7CiB9CiAKK2lubGluZSBOb2RlKiBmaXJzdENoaWxkKGNvbnN0IE5vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKCFub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSk7CisgICAgaWYgKG5vZGUtPm5lZWRz
Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoKCkpCisgICAgICAgIHJldHVybiBmaXJzdENo
aWxkU2xvdyhub2RlKTsKKworICAgIEFTU0VSVChuZXh0U2libGluZ1Nsb3cobm9kZSkgPT0gbm9k
ZS0+bmV4dFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIG5vZGUtPmZpcnN0Q2hpbGQoKTsKK30KKwog
aW5saW5lIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIG5vZGUpCiB7CisgICAgQVNTRVJU
KCFub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSk7CiAgICAgaWYgKG5vZGUtPm5lZWRzTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbFNsb3dQYXRoKCkpCiAgICAgICAgIHJldHVybiBuZXh0U2libGluZ1Nsb3co
bm9kZSk7CiAKQEAgLTY3LDYgKzgyLDcgQEAgaW5saW5lIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0
IE5vZGUqIG5vZAogCiBpbmxpbmUgTm9kZSogcHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIG5v
ZGUpCiB7CisgICAgQVNTRVJUKCFub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSk7CiAgICAgaWYgKG5v
ZGUtPm5lZWRzTm9kZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoKCkpCiAgICAgICAgIHJldHVy
biBwcmV2aW91c1NpYmxpbmdTbG93KG5vZGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkocmV2aXNpb24gMTY1NDUzKQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2
MCwxMCBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBlbnVtIERldGFjaFR5cGUgeyBOb3JtYWxEZXRh
Y2gsIFJlYXR0YWNoRGV0YWNoIH07CiAKLXN0YXRpYyB2b2lkIGF0dGFjaFJlbmRlclRyZWUoRWxl
bWVudCYsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKLXN0YXRpYyB2b2lkIGF0dGFjaFRleHRS
ZW5kZXJlcihUZXh0Jik7CitzdGF0aWMgdm9pZCBhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmLCBD
b250YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2RlLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
Pik7CitzdGF0aWMgdm9pZCBhdHRhY2hUZXh0UmVuZGVyZXIoVGV4dCYsIENvbnRhaW5lck5vZGUm
IHJlbmRlcmluZ1BhcmVudE5vZGUpOwogc3RhdGljIHZvaWQgZGV0YWNoUmVuZGVyVHJlZShFbGVt
ZW50JiwgRGV0YWNoVHlwZSk7Ci1zdGF0aWMgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50JiwgQ2hh
bmdlKTsKK3N0YXRpYyB2b2lkIHJlc29sdmVUcmVlKEVsZW1lbnQmLCBDb250YWluZXJOb2RlJiBy
ZW5kZXJpbmdQYXJlbnROb2RlLCBDaGFuZ2UpOwogCiBDaGFuZ2UgZGV0ZXJtaW5lQ2hhbmdlKGNv
bnN0IFJlbmRlclN0eWxlKiBzMSwgY29uc3QgUmVuZGVyU3R5bGUqIHMyKQogewpAQCAtMTI2LDQz
ICsxMjYsNDkgQEAgc3RhdGljIGJvb2wgaXNSZW5kZXJlclJlcGFyZW50ZWQoY29uc3QgUgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmdSZW5k
ZXJlcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBDb250YWluZXJOb2RlKiByZW5kZXJp
bmdQYXJlbnROb2RlKQorc3RhdGljIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmdSZW5kZXJlcihj
b25zdCBOb2RlJiBub2RlLCBjb25zdCBDb250YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2Rl
KQogeworICAgIGlmICghcmVuZGVyaW5nUGFyZW50Tm9kZS5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IEVsZW1lbnQmIHJlbmRlcmluZ1BhcmVudEVs
ZW1lbnQgPSB0b0VsZW1lbnQocmVuZGVyaW5nUGFyZW50Tm9kZSk7CiAgICAgLy8gQXZvaWQgYW4g
TyhOXjIpIHByb2JsZW0gd2l0aCB0aGlzIGZ1bmN0aW9uIGJ5IG5vdCBjaGVja2luZyBmb3IKICAg
ICAvLyBuZXh0UmVuZGVyZXIoKSB3aGVuIHRoZSBwYXJlbnQgZWxlbWVudCBoYXNuJ3QgYXR0YWNo
ZWQgeWV0LgogICAgIC8vIEZJWE1FOiBXaHkgd291bGQgd2UgZ2V0IGhlcmUgYW55d2F5IGlmIHBh
cmVudCBpcyBub3QgYXR0YWNoZWQ/Ci0gICAgaWYgKHJlbmRlcmluZ1BhcmVudE5vZGUgJiYgIXJl
bmRlcmluZ1BhcmVudE5vZGUtPnJlbmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJpbmdQYXJlbnRF
bGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChub2Rl
LmlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZv
ciAoTm9kZSogc2libGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCZl
bGVtZW50KTsgc2libGluZzsgc2libGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRT
aWJsaW5nKHNpYmxpbmcpKSB7CisgICAgTm9kZSogc2libGluZyA9IG5vZGUuaXNCZWZvcmVQc2V1
ZG9FbGVtZW50KCkgPyBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpmaXJzdENoaWxkKCZyZW5kZXJp
bmdQYXJlbnROb2RlKSA6IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCZub2Rl
KTsKKyAgICBmb3IgKDsgc2libGluZzsgc2libGluZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBzaWJsaW5nLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgIWlzUmVuZGVy
ZXJSZXBhcmVudGVkKHJlbmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKICAg
ICB9CisgICAgaWYgKFBzZXVkb0VsZW1lbnQqIGFmdGVyID0gcmVuZGVyaW5nUGFyZW50RWxlbWVu
dC5hZnRlclBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGFmdGVyLT5yZW5kZXJlcigp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVSZW5k
ZXJlcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBDb250YWluZXJOb2RlKiByZW5kZXJp
bmdQYXJlbnQpCitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBDb250YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnQpCiB7CiAgICAg
aWYgKCFlbGVtZW50LmRvY3VtZW50KCkuc2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXJlbmRlcmluZ1BhcmVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJpbmdQYXJl
bnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRl
cmluZ1BhcmVudC5yZW5kZXJlcigpOwogICAgIGlmICghcGFyZW50UmVuZGVyZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXBhcmVudFJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4o
KSAmJiAhKGVsZW1lbnQuaXNQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhh
dmVHZW5lcmF0ZWRDaGlsZHJlbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
cmVuZGVyaW5nUGFyZW50LT5jaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGVsZW1lbnQpKQorICAg
IGlmICghcmVuZGVyaW5nUGFyZW50LmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gQ2hlY2sg
dGhlIHNwZWNpZmljIGNhc2Ugb2YgZWxlbWVudHMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgcmVnaW9u
cyBidXQgYXJlIGZsb3dlZCBpbnRvIGEgZmxvdyB0aHJlYWQgdGhlbXNlbHZlcy4KLXN0YXRpYyBi
b29sIGVsZW1lbnRJbnNpZGVSZWdpb25OZWVkc1JlbmRlcmVyKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHJlbmRlcmluZ1BhcmVudE5vZGUsIFJlZlB0cjxSZW5kZXJTdHls
ZT4mIHN0eWxlKQorc3RhdGljIGJvb2wgZWxlbWVudEluc2lkZVJlZ2lvbk5lZWRzUmVuZGVyZXIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ29udGFpbmVyTm9kZSYgcmVuZGVyaW5nUGFyZW50Tm9k
ZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgc3R5bGUpCiB7CiAjaWYgRU5BQkxFKENTU19SRUdJT05T
KQogICAgIC8vIFRoZSBwYXJlbnQgb2YgYSByZWdpb24gc2hvdWxkIGFsd2F5cyBiZSBhbiBlbGVt
ZW50LgotICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5n
UGFyZW50Tm9kZSA/IHJlbmRlcmluZ1BhcmVudE5vZGUtPnJlbmRlcmVyKCkgOiAwOworICAgIGNv
bnN0IFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50Tm9kZS5y
ZW5kZXJlcigpOwogCiAgICAgYm9vbCBwYXJlbnRJc1JlZ2lvbiA9IHBhcmVudFJlbmRlcmVyICYm
ICFwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkgJiYgcGFyZW50UmVuZGVyZXItPmlz
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKTsKICAgICBib29sIHBhcmVudElzTm9u
UmVuZGVyZWRJbnNpZGVSZWdpb24gPSAhcGFyZW50UmVuZGVyZXIgJiYgZWxlbWVudC5wYXJlbnRF
bGVtZW50KCkgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50KCktPmlzSW5zaWRlUmVnaW9uKCk7CkBA
IC0xOTgsMTIgKzIwNCwxMCBAQCBzdGF0aWMgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBtb3ZlVG9G
bG93CiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZChFbGVt
ZW50JiBlbGVtZW50LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiByZXNvbHZlZFN0eWxlKQorc3Rh
dGljIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50LCBDb250YWlu
ZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2RlLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiByZXNv
bHZlZFN0eWxlKQogewogICAgIEFTU0VSVCghZWxlbWVudC5yZW5kZXJlcigpKTsKIAotICAgIENv
bnRhaW5lck5vZGUqIHJlbmRlcmluZ1BhcmVudE5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2Fs
OjpwYXJlbnQoJmVsZW1lbnQpOwotCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJl
c29sdmVkU3R5bGU7CiAKICAgICBlbGVtZW50LnNldElzSW5zaWRlUmVnaW9uKGZhbHNlKTsKQEAg
LTIyOSw3ICsyMzMsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKEVsZW1l
CiAgICAgICAgIG5leHRSZW5kZXJlciA9IHBhcmVudEZsb3dSZW5kZXJlci0+bmV4dFJlbmRlcmVy
Rm9yRWxlbWVudChlbGVtZW50KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIHBhdGggRWxlbWVudCBvbmx5LCBoYW5kbGUgdGhlIHJvb3Qgc3BlY2lhbCBjYXNlIHNl
cGFyYXRlbHkuCi0gICAgICAgIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50Tm9kZS0+
cmVuZGVyZXIoKTsKKyAgICAgICAgcGFyZW50UmVuZGVyZXIgPSByZW5kZXJpbmdQYXJlbnROb2Rl
LnJlbmRlcmVyKCk7CiAgICAgICAgIG5leHRSZW5kZXJlciA9IG5leHRTaWJsaW5nUmVuZGVyZXIo
ZWxlbWVudCwgcmVuZGVyaW5nUGFyZW50Tm9kZSk7CiAgICAgfQogCkBAIC0yNzUsMjggKzI3OSwx
OCBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1NpYmxpbmdSZW5kCiAgICAgICAgIGlm
IChyZW5kZXJlciAmJiAhaXNSZW5kZXJlclJlcGFyZW50ZWQocmVuZGVyZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyOwogICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFJl
bmRlck9iamVjdCogbmV4dFNpYmxpbmdSZW5kZXJlcihjb25zdCBUZXh0JiB0ZXh0Tm9kZSkKLXsK
LSAgICBpZiAodGV4dE5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHRleHROb2RlLnJl
bmRlcmVyKCktPm5leHRTaWJsaW5nKCk7Ci0gICAgZm9yIChOb2RlKiBzaWJsaW5nID0gTm9kZVJl
bmRlcmluZ1RyYXZlcnNhbDo6bmV4dFNpYmxpbmcoJnRleHROb2RlKTsgc2libGluZzsgc2libGlu
ZyA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzaWJsaW5nLT5yZW5kZXJlcigpOwotICAgICAg
ICBpZiAocmVuZGVyZXIgJiYgIWlzUmVuZGVyZXJSZXBhcmVudGVkKHJlbmRlcmVyKSkKLSAgICAg
ICAgICAgIHJldHVybiByZW5kZXJlcjsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKFBz
ZXVkb0VsZW1lbnQqIGJlZm9yZSA9IHRleHROb2RlLnBhcmVudEVsZW1lbnQoKS0+YmVmb3JlUHNl
dWRvRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gYmVmb3JlLT5yZW5kZXJlcigpOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCByZWF0dGFjaFRleHRSZW5kZXJlcnNGb3JX
aGl0ZXNwYWNlT25seVNpYmxpbmdzQWZ0ZXJBdHRhY2hJZk5lZWRlZChOb2RlJiBjdXJyZW50KQor
c3RhdGljIHZvaWQgcmVhdHRhY2hUZXh0UmVuZGVyZXJzRm9yV2hpdGVzcGFjZU9ubHlTaWJsaW5n
c0FmdGVyQXR0YWNoSWZOZWVkZWQoTm9kZSYgY3VycmVudCwgQ29udGFpbmVyTm9kZSYgcmVuZGVy
aW5nUGFyZW50Tm9kZSkKIHsKICAgICBpZiAoaXNJbnNlcnRpb25Qb2ludChjdXJyZW50KSkKICAg
ICAgICAgcmV0dXJuOwogICAgIC8vIFRoaXMgZnVuY3Rpb24gZmluZHMgc2libGluZyB0ZXh0IHJl
bmRlcmVycyB3aGVyZSB0aGUgcmVzdWx0cyBvZiB0ZXh0UmVuZGVyZXJJc05lZWRlZCBtYXkgaGF2
ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mCiAgICAgLy8gdGhlIGN1cnJlbnQgbm9kZSBnYWluaW5n
IG9yIGxvc2luZyB0aGUgcmVuZGVyZXIuIFRoaXMgY2FuIG9ubHkgYWZmZWN0IHdoaXRlIHNwYWNl
IHRleHQgbm9kZXMuCi0gICAgZm9yIChOb2RlKiBzaWJsaW5nID0gTm9kZVJlbmRlcmluZ1RyYXZl
cnNhbDo6bmV4dFNpYmxpbmcoJmN1cnJlbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbDo6bmV4dFNpYmxpbmcoc2libGluZykpIHsKKyAgICBmb3IgKE5vZGUqIHNp
YmxpbmcgPSBjdXJyZW50Lm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5n
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIC8vIFNpYmxpbmdzIGhhdmVuJ3QgYmVlbiBhdHRh
Y2hlZCB5ZXQuIFRoZXkgd2lsbCBiZSBoYW5kbGVkIG5vcm1hbGx5IHdoZW4gdGhleSBhcmUuCiAg
ICAgICAgIGlmIChzaWJsaW5nLT5zdHlsZUNoYW5nZVR5cGUoKSA9PSBSZWNvbnN0cnVjdFJlbmRl
clRyZWUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTQsNyArMzA4LDcgQEAgc3RhdGljIHZv
aWQgcmVhdHRhY2hUZXh0UmVuZGVyZXJzRm9yV2hpdAogICAgICAgICBUZXh0JiB3aGl0ZXNwYWNl
VGV4dFNpYmxpbmcgPSB0ZXh0U2libGluZzsKICAgICAgICAgYm9vbCBoYWRSZW5kZXJlciA9IHdo
aXRlc3BhY2VUZXh0U2libGluZy5yZW5kZXJlcigpOwogICAgICAgICBkZXRhY2hUZXh0UmVuZGVy
ZXIod2hpdGVzcGFjZVRleHRTaWJsaW5nKTsKLSAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKHdo
aXRlc3BhY2VUZXh0U2libGluZyk7CisgICAgICAgIGF0dGFjaFRleHRSZW5kZXJlcih3aGl0ZXNw
YWNlVGV4dFNpYmxpbmcsIHJlbmRlcmluZ1BhcmVudE5vZGUpOwogICAgICAgICAvLyBObyBjaGFu
Z2VzLCBmdXRoZXIgcmVuZGVyZXJzIGNhbid0IGJlIGFmZmVjdGVkLgogICAgICAgICBpZiAoaGFk
UmVuZGVyZXIgPT0gISF3aGl0ZXNwYWNlVGV4dFNpYmxpbmcucmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM1Miw3ICszNDYsNyBAQCBzdGF0aWMgYm9vbCB0ZXh0UmVuZGVyZXJJ
c05lZWRlZChjb25zdCBUCiAgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3QgPSB0b1JlbmRlckVs
ZW1lbnQocGFyZW50UmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgd2hpbGUgKGZpcnN0
ICYmIGZpcnN0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICBmaXJzdCA9IGZpcnN0LT5uZXh0U2libGluZygpOwotICAgICAgICBSZW5kZXJPYmplY3QqIG5l
eHRSZW5kZXJlciA9IG5leHRTaWJsaW5nUmVuZGVyZXIodGV4dE5vZGUpOworICAgICAgICBSZW5k
ZXJPYmplY3QqIG5leHRSZW5kZXJlciA9IG5leHRTaWJsaW5nUmVuZGVyZXIodGV4dE5vZGUsICp0
ZXh0Tm9kZS5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoIWZpcnN0IHx8IG5leHRSZW5kZXJl
ciA9PSBmaXJzdCkgewogICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2Yg
YSBibG9jayBqdXN0IGdvZXMgYXdheS4gRG9uJ3QgZXZlbiBtYWtlIGEgcmVuZGVyIG9iamVjdCBm
b3IgdGhpcyB0ZXh0LgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYxLDE3ICszNTUs
MTQgQEAgc3RhdGljIGJvb2wgdGV4dFJlbmRlcmVySXNOZWVkZWQoY29uc3QgVAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVUZXh0UmVuZGVyZXJJZk5lZWRlZChUZXh0
JiB0ZXh0Tm9kZSkKK3N0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcklmTmVlZGVkKFRleHQm
IHRleHROb2RlLCBDb250YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2RlKQogewogICAgIEFT
U0VSVCghdGV4dE5vZGUucmVuZGVyZXIoKSk7CiAKLSAgICBDb250YWluZXJOb2RlKiByZW5kZXJp
bmdQYXJlbnROb2RlID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cGFyZW50KCZ0ZXh0Tm9kZSk7
Ci0gICAgaWYgKCFyZW5kZXJpbmdQYXJlbnROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVu
ZGVyRWxlbWVudCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJpbmdQYXJlbnROb2RlLT5yZW5kZXJl
cigpOworICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50
Tm9kZS5yZW5kZXJlcigpOwogICAgIGlmICghcGFyZW50UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRl
cmVyLT5jYW5IYXZlQ2hpbGRyZW4oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghcmVuZGVy
aW5nUGFyZW50Tm9kZS0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0ZXh0Tm9kZSkpCisgICAg
aWYgKCFyZW5kZXJpbmdQYXJlbnROb2RlLmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGV4dE5v
ZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IHBhcmVudFJl
bmRlcmVyLT5zdHlsZSgpOwpAQCAtMzg5LDE1ICszODAsMTUgQEAgc3RhdGljIHZvaWQgY3JlYXRl
VGV4dFJlbmRlcmVySWZOZWVkZWQoVAogICAgIC8vIGZvciB0aGUgZmlyc3QgdGltZS4gT3RoZXJ3
aXNlIGNvZGUgdXNpbmcgaW5SZW5kZXJGbG93VGhyZWFkKCkgaW4gdGhlIHN0eWxlV2lsbENoYW5n
ZSBhbmQgc3R5bGVEaWRDaGFuZ2Ugd2lsbCBmYWlsLgogICAgIG5ld1JlbmRlcmVyLT5zZXRGbG93
VGhyZWFkU3RhdGUocGFyZW50UmVuZGVyZXItPmZsb3dUaHJlYWRTdGF0ZSgpKTsKIAotICAgIFJl
bmRlck9iamVjdCogbmV4dFJlbmRlcmVyID0gbmV4dFNpYmxpbmdSZW5kZXJlcih0ZXh0Tm9kZSk7
CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVyZXIgPSBuZXh0U2libGluZ1JlbmRlcmVyKHRl
eHROb2RlLCByZW5kZXJpbmdQYXJlbnROb2RlKTsKICAgICB0ZXh0Tm9kZS5zZXRSZW5kZXJlcihu
ZXdSZW5kZXJlci5nZXQoKSk7CiAgICAgLy8gUGFyZW50IHRha2VzIGNhcmUgb2YgdGhlIGFuaW1h
dGlvbnMsIG5vIG5lZWQgdG8gY2FsbCBzZXRBbmltYXRhYmxlU3R5bGUuCiAgICAgcGFyZW50UmVu
ZGVyZXItPmFkZENoaWxkKG5ld1JlbmRlcmVyLmxlYWtQdHIoKSwgbmV4dFJlbmRlcmVyKTsKIH0K
IAotdm9pZCBhdHRhY2hUZXh0UmVuZGVyZXIoVGV4dCYgdGV4dE5vZGUpCit2b2lkIGF0dGFjaFRl
eHRSZW5kZXJlcihUZXh0JiB0ZXh0Tm9kZSwgQ29udGFpbmVyTm9kZSYgcmVuZGVyaW5nUGFyZW50
KQogewotICAgIGNyZWF0ZVRleHRSZW5kZXJlcklmTmVlZGVkKHRleHROb2RlKTsKKyAgICBjcmVh
dGVUZXh0UmVuZGVyZXJJZk5lZWRlZCh0ZXh0Tm9kZSwgcmVuZGVyaW5nUGFyZW50KTsKIAogICAg
IHRleHROb2RlLmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogfQpAQCAtNDEyLDYxICs0MDMsNjUg
QEAgdm9pZCBkZXRhY2hUZXh0UmVuZGVyZXIoVGV4dCYgdGV4dE5vZGUpCiB2b2lkIHVwZGF0ZVRl
eHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZShUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zm
c2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVwbGFjZWREYXRhKQogewogICAg
IFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRleHROb2RlLnJlbmRlcmVyKCk7CisgICAgQ29u
dGFpbmVyTm9kZSogcmVuZGVyaW5nUGFyZW50Tm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6
OnBhcmVudCgmdGV4dE5vZGUpOworICAgIGlmICghcmVuZGVyaW5nUGFyZW50Tm9kZSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmICghdGV4dFJlbmRlcmVyKSB7Ci0gICAgICAgIGF0dGFjaFRleHRS
ZW5kZXJlcih0ZXh0Tm9kZSk7Ci0gICAgICAgIHJlYXR0YWNoVGV4dFJlbmRlcmVyc0ZvcldoaXRl
c3BhY2VPbmx5U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHRleHROb2RlKTsKKyAgICAgICAg
YXR0YWNoVGV4dFJlbmRlcmVyKHRleHROb2RlLCAqcmVuZGVyaW5nUGFyZW50Tm9kZSk7CisgICAg
ICAgIHJlYXR0YWNoVGV4dFJlbmRlcmVyc0ZvcldoaXRlc3BhY2VPbmx5U2libGluZ3NBZnRlckF0
dGFjaElmTmVlZGVkKHRleHROb2RlLCAqcmVuZGVyaW5nUGFyZW50Tm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IE5vZGVSZW5k
ZXJpbmdUcmF2ZXJzYWw6OnBhcmVudCgmdGV4dE5vZGUpLT5yZW5kZXJlcigpOwotICAgIGlmICgh
dGV4dFJlbmRlcmVySXNOZWVkZWQodGV4dE5vZGUsICpwYXJlbnRSZW5kZXJlciwgdGV4dFJlbmRl
cmVyLT5zdHlsZSgpKSkgeworICAgIGlmICghdGV4dFJlbmRlcmVySXNOZWVkZWQodGV4dE5vZGUs
ICpyZW5kZXJpbmdQYXJlbnROb2RlLT5yZW5kZXJlcigpLCB0ZXh0UmVuZGVyZXItPnN0eWxlKCkp
KSB7CiAgICAgICAgIGRldGFjaFRleHRSZW5kZXJlcih0ZXh0Tm9kZSk7Ci0gICAgICAgIGF0dGFj
aFRleHRSZW5kZXJlcih0ZXh0Tm9kZSk7Ci0gICAgICAgIHJlYXR0YWNoVGV4dFJlbmRlcmVyc0Zv
cldoaXRlc3BhY2VPbmx5U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHRleHROb2RlKTsKKyAg
ICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKHRleHROb2RlLCAqcmVuZGVyaW5nUGFyZW50Tm9kZSk7
CisgICAgICAgIHJlYXR0YWNoVGV4dFJlbmRlcmVyc0ZvcldoaXRlc3BhY2VPbmx5U2libGluZ3NB
ZnRlckF0dGFjaElmTmVlZGVkKHRleHROb2RlLCAqcmVuZGVyaW5nUGFyZW50Tm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4dFJlbmRlcmVyLT5zZXRUZXh0V2l0aE9mZnNldCh0
ZXh0Tm9kZS5kYXRhSW1wbCgpLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNl
ZERhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBhdHRhY2hEaXN0cmlidXRlZENoaWxkcmVuKEluc2Vy
dGlvblBvaW50JiBpbnNlcnRpb25Qb2ludCkKK3N0YXRpYyB2b2lkIGF0dGFjaENoaWxkcmVuKENv
bnRhaW5lck5vZGUmIGN1cnJlbnQsIENvbnRhaW5lck5vZGUmIHJlbmRlcmluZ1BhcmVudE5vZGUp
Cit7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBBU1NFUlQoKCFjaGlsZC0+
cmVuZGVyZXIoKSB8fCBjaGlsZC0+aW5OYW1lZEZsb3coKSkgfHwgY3VycmVudC5zaGFkb3dSb290
KCkpOworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgIGF0dGFj
aFRleHRSZW5kZXJlcigqdG9UZXh0KGNoaWxkKSwgcmVuZGVyaW5nUGFyZW50Tm9kZSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjaGlsZCks
IHJlbmRlcmluZ1BhcmVudE5vZGUsIG51bGxwdHIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbihJbnNlcnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQs
IENvbnRhaW5lck5vZGUmIHJlbmRlcmluZ1BhcmVudE5vZGUpCiB7CiAgICAgaWYgKFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QgPSBpbnNlcnRpb25Qb2ludC5jb250YWluaW5nU2hhZG93Um9vdCgpKQog
ICAgICAgICBDb250ZW50RGlzdHJpYnV0b3I6OmVuc3VyZURpc3RyaWJ1dGlvbihzaGFkb3dSb290
KTsKKwogICAgIGZvciAoTm9kZSogY3VycmVudCA9IGluc2VydGlvblBvaW50LmZpcnN0RGlzdHJp
YnV0ZWQoKTsgY3VycmVudDsgY3VycmVudCA9IGluc2VydGlvblBvaW50Lm5leHREaXN0cmlidXRl
ZFRvKGN1cnJlbnQpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1RleHROb2RlKCkpIHsKICAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKCp0b1RleHQoY3VycmVudCkpOwor
ICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKCp0b1RleHQoY3VycmVudCksIHJlbmRlcmlu
Z1BhcmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnQt
PnJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgZGV0YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50
KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjdXJy
ZW50KSwgbnVsbHB0cik7CisgICAgICAgICAgICBFbGVtZW50JiBjdXJyZW50RWxlbWVudCA9IHRv
RWxlbWVudCgqY3VycmVudCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQucmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgICAgICBkZXRhY2hSZW5kZXJUcmVlKGN1cnJlbnRFbGVtZW50KTsK
KyAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoY3VycmVudEVsZW1lbnQsIHJlbmRlcmluZ1Bh
cmVudE5vZGUsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQotfQotCi1zdGF0aWMgdm9pZCBh
dHRhY2hDaGlsZHJlbihDb250YWluZXJOb2RlJiBjdXJyZW50KQotewotICAgIGlmIChpc0luc2Vy
dGlvblBvaW50KGN1cnJlbnQpKQotICAgICAgICBhdHRhY2hEaXN0cmlidXRlZENoaWxkcmVuKHRv
SW5zZXJ0aW9uUG9pbnQoY3VycmVudCkpOwotCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IGN1cnJl
bnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewot
ICAgICAgICBBU1NFUlQoKCFjaGlsZC0+cmVuZGVyZXIoKSB8fCBjaGlsZC0+aW5OYW1lZEZsb3co
KSkgfHwgY3VycmVudC5zaGFkb3dSb290KCkgfHwgaXNJbnNlcnRpb25Qb2ludChjdXJyZW50KSk7
Ci0gICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgYXR0YWNoVGV4
dFJlbmRlcmVyKCp0b1RleHQoY2hpbGQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgYXR0
YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwgbnVsbHB0cik7Ci0gICAgfQorICAgIC8v
IFVzZSBhY3R1YWwgY2hpbGRyZW4gYXMgZmFsbGJhY2sgY29udGVudC4KKyAgICBpZiAoIWluc2Vy
dGlvblBvaW50Lmhhc0Rpc3RyaWJ1dGlvbigpKQorICAgICAgICBhdHRhY2hDaGlsZHJlbihpbnNl
cnRpb25Qb2ludCwgcmVuZGVyaW5nUGFyZW50Tm9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0dGFj
aFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgc2hhZG93Um9vdCkKIHsKLSAgICBhdHRhY2hDaGlsZHJl
bihzaGFkb3dSb290KTsKKyAgICBhdHRhY2hDaGlsZHJlbihzaGFkb3dSb290LCAqc2hhZG93Um9v
dC5ob3N0RWxlbWVudCgpKTsKIAogICAgIHNoYWRvd1Jvb3QuY2xlYXJOZWVkc1N0eWxlUmVjYWxj
KCk7CiAgICAgc2hhZG93Um9vdC5jbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtNTE5
LDEwICs1MTQsMTAgQEAgc3RhdGljIHZvaWQgYXR0YWNoQmVmb3JlT3JBZnRlclBzZXVkb0VsZQog
ICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IHBzZXVkb0VsZW1lbnQg
PSBQc2V1ZG9FbGVtZW50OjpjcmVhdGUoY3VycmVudCwgcHNldWRvSWQpOwogICAgIHNldEJlZm9y
ZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KGN1cnJlbnQsIHBzZXVkb0VsZW1lbnQsIHBzZXVkb0lkKTsK
LSAgICBhdHRhY2hSZW5kZXJUcmVlKCpwc2V1ZG9FbGVtZW50LCBudWxscHRyKTsKKyAgICBhdHRh
Y2hSZW5kZXJUcmVlKCpwc2V1ZG9FbGVtZW50LCBjdXJyZW50LCBudWxscHRyKTsKIH0KIAotc3Rh
dGljIHZvaWQgYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50JiBjdXJyZW50LCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiByZXNvbHZlZFN0eWxlKQorc3RhdGljIHZvaWQgYXR0YWNoUmVuZGVyVHJlZShF
bGVtZW50JiBjdXJyZW50LCBDb250YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2RlLCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiByZXNvbHZlZFN0eWxlKQogewogICAgIFBvc3RBdHRhY2hDYWxs
YmFja0Rpc2FibGVyIGNhbGxiYWNrRGlzYWJsZXIoY3VycmVudC5kb2N1bWVudCgpKTsKICAgICBX
aWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJj
aHlVcGRhdGVzOwpAQCAtNTMwLDcgKzUyNSw3IEBAIHN0YXRpYyB2b2lkIGF0dGFjaFJlbmRlclRy
ZWUoRWxlbWVudCYgY3UKICAgICBpZiAoY3VycmVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxs
YmFja3MoKSkKICAgICAgICAgY3VycmVudC53aWxsQXR0YWNoUmVuZGVyZXJzKCk7CiAKLSAgICBj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKGN1cnJlbnQsIHJlc29sdmVkU3R5bGUpOworICAgIGNyZWF0
ZVJlbmRlcmVySWZOZWVkZWQoY3VycmVudCwgcmVuZGVyaW5nUGFyZW50Tm9kZSwgcmVzb2x2ZWRT
dHlsZSk7CiAKICAgICBpZiAoY3VycmVudC5wYXJlbnRFbGVtZW50KCkgJiYgY3VycmVudC5wYXJl
bnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCkpCiAgICAgICAgIGN1cnJlbnQuc2V0SXNJ
bkNhbnZhc1N1YnRyZWUodHJ1ZSk7CkBAIC01MzksMTQgKzUzNCwxNiBAQCBzdGF0aWMgdm9pZCBh
dHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmIGN1CiAKICAgICBTdHlsZVJlc29sdmVyUGFyZW50UHVz
aGVyIHBhcmVudFB1c2hlcigmY3VycmVudCk7CiAKLSAgICAvLyBXaGVuIGEgc2hhZG93IHJvb3Qg
ZXhpc3RzLCBpdCBkb2VzIHRoZSB3b3JrIG9mIGF0dGFjaGluZyB0aGUgY2hpbGRyZW4uCiAgICAg
aWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBjdXJyZW50LnNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwogICAgICAgICBhdHRhY2hTaGFkb3dSb290KCpzaGFk
b3dSb290KTsKICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuZmlyc3RDaGlsZCgpKQogICAgICAgICBw
YXJlbnRQdXNoZXIucHVzaCgpOwogCi0gICAgYXR0YWNoQ2hpbGRyZW4oY3VycmVudCk7CisgICAg
aWYgKGlzSW5zZXJ0aW9uUG9pbnQoY3VycmVudCkpCisgICAgICAgIGF0dGFjaERpc3RyaWJ1dGVk
Q2hpbGRyZW4odG9JbnNlcnRpb25Qb2ludChjdXJyZW50KSwgcmVuZGVyaW5nUGFyZW50Tm9kZSk7
CisgICAgZWxzZQorICAgICAgICBhdHRhY2hDaGlsZHJlbihjdXJyZW50LCBjdXJyZW50KTsKIAog
ICAgIGN1cnJlbnQuY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgY3VycmVudC5jbGVhckNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtNjU2LDcgKzY1Myw3IEBAIHN0YXRpYyBib29sIHBz
ZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBDaGFuZ2UgcmVzb2x2ZUxvY2FsKEVsZW1lbnQmIGN1cnJlbnQsIENoYW5nZSBpbmhlcml0ZWRD
aGFuZ2UpCitzdGF0aWMgQ2hhbmdlIHJlc29sdmVMb2NhbChFbGVtZW50JiBjdXJyZW50LCBDb250
YWluZXJOb2RlJiByZW5kZXJpbmdQYXJlbnROb2RlLCBDaGFuZ2UgaW5oZXJpdGVkQ2hhbmdlKQog
ewogICAgIENoYW5nZSBsb2NhbENoYW5nZSA9IERldGFjaDsKICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG5ld1N0eWxlOwpAQCAtNjcwLDggKzY2Nyw4IEBAIHN0YXRpYyBDaGFuZ2UgcmVzb2x2ZUxv
Y2FsKEVsZW1lbnQmIGN1cnIKICAgICBpZiAobG9jYWxDaGFuZ2UgPT0gRGV0YWNoKSB7CiAgICAg
ICAgIGlmIChjdXJyZW50LnJlbmRlcmVyKCkgfHwgY3VycmVudC5pbk5hbWVkRmxvdygpKQogICAg
ICAgICAgICAgZGV0YWNoUmVuZGVyVHJlZShjdXJyZW50LCBSZWF0dGFjaERldGFjaCk7Ci0gICAg
ICAgIGF0dGFjaFJlbmRlclRyZWUoY3VycmVudCwgbmV3U3R5bGUucmVsZWFzZSgpKTsKLSAgICAg
ICAgcmVhdHRhY2hUZXh0UmVuZGVyZXJzRm9yV2hpdGVzcGFjZU9ubHlTaWJsaW5nc0FmdGVyQXR0
YWNoSWZOZWVkZWQoY3VycmVudCk7CisgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoY3VycmVudCwg
cmVuZGVyaW5nUGFyZW50Tm9kZSwgbmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgcmVhdHRh
Y2hUZXh0UmVuZGVyZXJzRm9yV2hpdGVzcGFjZU9ubHlTaWJsaW5nc0FmdGVyQXR0YWNoSWZOZWVk
ZWQoY3VycmVudCwgcmVuZGVyaW5nUGFyZW50Tm9kZSk7CiAKICAgICAgICAgcmV0dXJuIERldGFj
aDsKICAgICB9CkBAIC03MDIsNyArNjk5LDcgQEAgc3RhdGljIENoYW5nZSByZXNvbHZlTG9jYWwo
RWxlbWVudCYgY3VycgogICAgIHJldHVybiBsb2NhbENoYW5nZTsKIH0KIAotc3RhdGljIHZvaWQg
dXBkYXRlVGV4dFN0eWxlKFRleHQmIHRleHQpCitzdGF0aWMgdm9pZCB1cGRhdGVUZXh0U3R5bGUo
VGV4dCYgdGV4dCwgQ29udGFpbmVyTm9kZSYgcmVuZGVyaW5nUGFyZW50Tm9kZSkKIHsKICAgICBS
ZW5kZXJUZXh0KiByZW5kZXJlciA9IHRleHQucmVuZGVyZXIoKTsKIApAQCAtNzExLDM1ICs3MDgs
MzIgQEAgc3RhdGljIHZvaWQgdXBkYXRlVGV4dFN0eWxlKFRleHQmIHRleHQpCiAgICAgaWYgKHJl
bmRlcmVyKQogICAgICAgICByZW5kZXJlci0+c2V0VGV4dCh0ZXh0LmRhdGFJbXBsKCkpOwogICAg
IGVsc2UgewotICAgICAgICBhdHRhY2hUZXh0UmVuZGVyZXIodGV4dCk7Ci0gICAgICAgIHJlYXR0
YWNoVGV4dFJlbmRlcmVyc0ZvcldoaXRlc3BhY2VPbmx5U2libGluZ3NBZnRlckF0dGFjaElmTmVl
ZGVkKHRleHQpOworICAgICAgICBhdHRhY2hUZXh0UmVuZGVyZXIodGV4dCwgcmVuZGVyaW5nUGFy
ZW50Tm9kZSk7CisgICAgICAgIHJlYXR0YWNoVGV4dFJlbmRlcmVyc0ZvcldoaXRlc3BhY2VPbmx5
U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHRleHQsIHJlbmRlcmluZ1BhcmVudE5vZGUpOwog
ICAgIH0KICAgICB0ZXh0LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogfQogCi1zdGF0aWMgdm9p
ZCByZXNvbHZlU2hhZG93VHJlZShTaGFkb3dSb290KiBzaGFkb3dSb290LCBTdHlsZTo6Q2hhbmdl
IGNoYW5nZSkKK3N0YXRpYyB2b2lkIHJlc29sdmVTaGFkb3dUcmVlKFNoYWRvd1Jvb3QmIHNoYWRv
d1Jvb3QsIFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmICghc2hhZG93Um9vdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IHNoYWRvd1Jvb3QtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gc2hhZG93Um9vdC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgICAgICB1cGRhdGVUZXh0U3R5bGUoKnRvVGV4dChjaGlsZCkpOworICAgICAgICAg
ICAgdXBkYXRlVGV4dFN0eWxlKCp0b1RleHQoY2hpbGQpLCAqc2hhZG93Um9vdC5ob3N0RWxlbWVu
dCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGls
ZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmVzb2x2ZVRyZWUoKnRvRWxlbWVudChj
aGlsZCksIGNoYW5nZSk7CisgICAgICAgICAgICByZXNvbHZlVHJlZSgqdG9FbGVtZW50KGNoaWxk
KSwgKnNoYWRvd1Jvb3QuaG9zdEVsZW1lbnQoKSwgY2hhbmdlKTsKICAgICB9CiAKLSAgICBzaGFk
b3dSb290LT5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBzaGFkb3dSb290LT5jbGVhckNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpOworICAgIHNoYWRvd1Jvb3QuY2xlYXJOZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgc2hhZG93Um9vdC5jbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogfQog
CiBzdGF0aWMgdm9pZCB1cGRhdGVCZWZvcmVPckFmdGVyUHNldWRvRWxlbWVudChFbGVtZW50JiBj
dXJyZW50LCBDaGFuZ2UgY2hhbmdlLCBQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBpZiAoUHNl
dWRvRWxlbWVudCogZXhpc3RpbmdQc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBzZXVkb0Vs
ZW1lbnQoY3VycmVudCwgcHNldWRvSWQpKSB7CiAgICAgICAgIGlmIChuZWVkc1BzZXVkZUVsZW1l
bnQoY3VycmVudCwgcHNldWRvSWQpKQotICAgICAgICAgICAgcmVzb2x2ZVRyZWUoKmV4aXN0aW5n
UHNldWRvRWxlbWVudCwgY3VycmVudC5uZWVkc1N0eWxlUmVjYWxjKCkgPyBGb3JjZSA6IGNoYW5n
ZSk7CisgICAgICAgICAgICByZXNvbHZlVHJlZSgqZXhpc3RpbmdQc2V1ZG9FbGVtZW50LCBjdXJy
ZW50LCBjdXJyZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSA/IEZvcmNlIDogY2hhbmdlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY2xlYXJCZWZvcmVPckFmdGVyUHNldWRvRWxlbWVudChjdXJy
ZW50LCBwc2V1ZG9JZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5OSw3ICs3OTMsNyBAQCBwcml2
YXRlOgogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKLXZvaWQgcmVzb2x2ZVRyZWUoRWxl
bWVudCYgY3VycmVudCwgQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCYg
Y3VycmVudCwgQ29udGFpbmVyTm9kZSYgcmVuZGVyaW5nUGFyZW50Tm9kZSwgQ2hhbmdlIGNoYW5n
ZSkKIHsKICAgICBBU1NFUlQoY2hhbmdlICE9IERldGFjaCk7CiAKQEAgLTgwOCw4ICs4MDIsNyBA
QCB2b2lkIHJlc29sdmVUcmVlKEVsZW1lbnQmIGN1cnJlbnQsIENoYW5nCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQ29udGFpbmVyTm9kZSogcmVuZGVyaW5nUGFyZW50Tm9kZSA9
IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVudCgmY3VycmVudCk7Ci0gICAgYm9vbCBoYXNQ
YXJlbnRTdHlsZSA9IHJlbmRlcmluZ1BhcmVudE5vZGUgJiYgcmVuZGVyaW5nUGFyZW50Tm9kZS0+
cmVuZGVyU3R5bGUoKTsKKyAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcmVuZGVyaW5nUGFyZW50
Tm9kZS5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1
cnJlbnQuY2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgIGJvb2wg
aGFzSW5kaXJlY3RBZGphY2VudFJ1bGVzID0gY3VycmVudC5jaGlsZHJlbkFmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAKQEAgLTgyMSw3ICs4MTQsNyBAQCB2b2lkIHJlc29sdmVU
cmVlKEVsZW1lbnQmIGN1cnJlbnQsIENoYW5nCiAgICAgICAgIGN1cnJlbnQucmVzZXRDb21wdXRl
ZFN0eWxlKCk7CiAKICAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYgKGNoYW5nZSA+PSBJbmhlcml0
IHx8IGN1cnJlbnQubmVlZHNTdHlsZVJlY2FsYygpKSkKLSAgICAgICAgY2hhbmdlID0gcmVzb2x2
ZUxvY2FsKGN1cnJlbnQsIGNoYW5nZSk7CisgICAgICAgIGNoYW5nZSA9IHJlc29sdmVMb2NhbChj
dXJyZW50LCByZW5kZXJpbmdQYXJlbnROb2RlLCBjaGFuZ2UpOwogCiAgICAgaWYgKGNoYW5nZSAh
PSBEZXRhY2gpIHsKICAgICAgICAgU3R5bGVSZXNvbHZlclBhcmVudFB1c2hlciBwYXJlbnRQdXNo
ZXIoJmN1cnJlbnQpOwpAQCAtODI5LDcgKzgyMiw3IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVu
dCYgY3VycmVudCwgQ2hhbmcKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBj
dXJyZW50LnNoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgaWYgKGNoYW5nZSA+PSBJbmhlcml0
IHx8IHNoYWRvd1Jvb3QtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IHNoYWRvd1Jvb3QtPm5l
ZWRzU3R5bGVSZWNhbGMoKSkgewogICAgICAgICAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZVNoYWRvd1RyZWUoc2hhZG93Um9vdCwgY2hhbmdlKTsK
KyAgICAgICAgICAgICAgICByZXNvbHZlU2hhZG93VHJlZSgqc2hhZG93Um9vdCwgY2hhbmdlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC04NDIsNyArODM1LDcgQEAgdm9pZCByZXNv
bHZlVHJlZShFbGVtZW50JiBjdXJyZW50LCBDaGFuZwogICAgICAgICBib29sIGZvcmNlQ2hlY2tP
ZkFueUVsZW1lbnRTaWJsaW5nID0gZmFsc2U7CiAgICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBj
dXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgdXBkYXRlVGV4dFN0eWxlKCp0b1RleHQoY2hpbGQpKTsKKyAgICAgICAgICAgICAgICB1cGRh
dGVUZXh0U3R5bGUoKnRvVGV4dChjaGlsZCksIGN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNFbGVtZW50
Tm9kZSgpKQpAQCAtODUzLDcgKzg0Niw3IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCYgY3Vy
cmVudCwgQ2hhbmcKICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKICAgICAgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGlsZEVsZW1l
bnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGNoaWxkRWxlbWVudC0+bmVlZHNTdHlsZVJl
Y2FsYygpKSB7CiAgICAgICAgICAgICAgICAgcGFyZW50UHVzaGVyLnB1c2goKTsKLSAgICAgICAg
ICAgICAgICByZXNvbHZlVHJlZSgqY2hpbGRFbGVtZW50LCBjaGFuZ2UpOworICAgICAgICAgICAg
ICAgIHJlc29sdmVUcmVlKCpjaGlsZEVsZW1lbnQsIGN1cnJlbnQsIGNoYW5nZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3JjZUNoZWNrT2ZOZXh0RWxlbWVudFNpYmxpbmcgPSBjaGls
ZFJ1bGVzQ2hhbmdlZCAmJiBoYXNEaXJlY3RBZGphY2VudFJ1bGVzOwogICAgICAgICAgICAgZm9y
Y2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGlu
ZyB8fCAoY2hpbGRSdWxlc0NoYW5nZWQgJiYgaGFzSW5kaXJlY3RBZGphY2VudFJ1bGVzKTsKQEAg
LTg5NCw3ICs4ODcsNyBAQCB2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hh
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY2hhbmdlIDwgSW5oZXJpdCAmJiAhZG9jdW1lbnRF
bGVtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSAmJiAhZG9jdW1lbnRFbGVtZW50LT5uZWVk
c1N0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKLSAgICByZXNvbHZlVHJlZSgqZG9jdW1l
bnRFbGVtZW50LCBjaGFuZ2UpOworICAgIHJlc29sdmVUcmVlKCpkb2N1bWVudEVsZW1lbnQsIGRv
Y3VtZW50LCBjaGFuZ2UpOwogfQogCiB2b2lkIGRldGFjaFJlbmRlclRyZWUoRWxlbWVudCYgZWxl
bWVudCkK
</data>
<flag name="review"
          id="250671"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>