<?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>24045</bug_id>
          
          <creation_ts>2009-02-19 16:35:19 -0800</creation_ts>
          <short_desc>Split out positionAvoidingIgnoredContent from rangeCompliantEquivalent</short_desc>
          <delta_ts>2009-04-06 02:26:23 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>25057</dup_id>
          
          <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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110318</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 16:35:19 -0800</bug_when>
    <thetext>Split out positionAvoidingIgnoredContent from rangeCompliantEquivalent

rangeCompliantEquivilent turns (table, 0) into (table-&gt;parentNode(), table-&gt;childIndex()) and the same with nodes which are &quot;ignored&quot; for editing (like &lt;input&gt;, &lt;textarea&gt;, and replaced elements).

This logic should *not* be tied into rangeCompliantEquivilent (whose sole responsibility should be to convert from our internal (img, 1) positions to ones which are in terms of the parent, and thus work with Range, like (img-&gt;parentNode(), img-&gt;childIndex() + 1).

Thus I&apos;m proposing splitting out a new positionAvoidingIgnoredContent function which can be used in addition to rangeCompliantEquivilent in the few places where it&apos;s actually needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110331</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-19 17:22:35 -0800</bug_when>
    <thetext>This is a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110990</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-25 11:14:49 -0800</bug_when>
    <thetext>Ok, so I&apos;ve done this, but it makes half of the editing tests fail... but I&apos;ve not yet seen it actually cause a problem.  It&apos;s because I&apos;m less aggressively avoiding ignored content as part of this patch. :(

I think I might have to change all the cases to avoid ignored editing content so I don&apos;t change the Layout Test results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110991</commentid>
    <comment_count>3</comment_count>
      <attachid>27973</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-25 11:15:18 -0800</bug_when>
    <thetext>Created attachment 27973
split out positionAvoidingIgnoredContent from toRangeCompliantEquivalent and make Position members private

 WebCore/WebCore.base.exp                           |    2 +-
 WebCore/dom/Position.cpp                           |   54 ++++++++++++++--
 WebCore/dom/Position.h                             |   52 ++++++++++------
 WebCore/dom/Range.cpp                              |    8 ++-
 WebCore/dom/RangeBoundaryPoint.h                   |   48 +++++++-------
 WebCore/editing/ApplyStyleCommand.cpp              |    4 +-
 WebCore/editing/CompositeEditCommand.cpp           |   14 ++---
 WebCore/editing/DeleteSelectionCommand.cpp         |   32 +++++-----
 WebCore/editing/Editor.cpp                         |    4 +-
 WebCore/editing/InsertLineBreakCommand.cpp         |    2 +-
 .../editing/InsertParagraphSeparatorCommand.cpp    |   18 ++---
 WebCore/editing/ReplaceSelectionCommand.cpp        |    2 +-
 WebCore/editing/VisiblePosition.cpp                |   57 ++++++++---------
 WebCore/editing/VisiblePosition.h                  |    4 +-
 WebCore/editing/VisibleSelection.cpp               |   29 ++++-----
 WebCore/editing/htmlediting.cpp                    |   61 ++++++-----------
 WebCore/editing/htmlediting.h                      |    3 +-
 WebCore/editing/visible_units.cpp                  |   68 +++++++++-----------
 WebCore/page/DOMSelection.cpp                      |   20 ++----
 WebKit/mac/WebView/WebFrame.mm                     |    8 +--
 20 files changed, 250 insertions(+), 240 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116602</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-06 02:26:23 -0700</bug_when>
    <thetext>Going to do this a different way now, see bug 25057.

*** This bug has been marked as a duplicate of 25057 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27973</attachid>
            <date>2009-02-25 11:15:18 -0800</date>
            <delta_ts>2009-02-25 11:15:18 -0800</delta_ts>
            <desc>split out positionAvoidingIgnoredContent from toRangeCompliantEquivalent and make Position members private</desc>
            <filename>sitionAvoidingIgnoredContent-from-toRangeCompliantEquivalent-and-make-Position-members-private.patch</filename>
            <type>text/plain</type>
            <size>47275</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZjFiYWE4MzJkMDZjMmFkNWYzNGE5NDdhOTc2OWE5MzU5MzI3YjlhMApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDhi
MGE1Y2QuLjg4OWRjZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTQzMSw3ICs0MzEsNiBAQCBfX1pON1dlYkNv
cmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOU184RG9jdW1lbnRFUktOM1dURjZWZWN0b3JJ
UE5TXzROb2RlRUxtMAogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUE5T
XzhEb2N1bWVudEVSS05TXzZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlc0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVt
Q2hhbmdlZEUKLV9fWk43V2ViQ29yZTI0cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50RVJLTlNfOFBv
c2l0aW9uRQogX19aTjdXZWJDb3JlMjVQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyMTJzY2hlZHVs
ZUNhbGxFUDRfTlBQUEZ2UHZFUzNfCiBfX1pON1dlYkNvcmUyNVBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXIxNHJlZ2lzdGVyUGx1Z2luRVA0X05QUAogX19aTjdXZWJDb3JlMjVQbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyMTZ1bnJlZ2lzdGVyUGx1Z2luRVA0X05QUApAQCAtNTAxLDYgKzUwMCw3IEBA
IF9fWk43V2ViQ29yZTVGcmFtZUQxRXYKIF9fWk43V2ViQ29yZTVJbWFnZTEyc3VwcG9ydHNUeXBl
RVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTVJbWFnZTIwbG9hZFBsYXRmb3JtUmVzb3VyY2VF
UEtjCiBfX1pON1dlYkNvcmU1UmFuZ2U2Y3JlYXRlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzhEb2N1
bWVudEVFRU5TMl9JTlNfNE5vZGVFRUVpUzZfaQorX19aTjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVO
M1dURjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVSS05TXzhQb3NpdGlvbkVTN18KIF9fWk43
V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9f
Wk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlS
aQogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDZhMzA1YjkuLjVjZWNhYWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKQEAgLTQyLDYgKzQyLDQ5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitib29sIFBv
c2l0aW9uOjppc1JhbmdlQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGFpbmVy
KQorICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gMDsKKyAgICBpZiAoIW1fb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9jb250YWluZXItPmNoaWxkTm9kZShtX29m
ZnNldCk7Cit9CisKKy8vIEludGVybmFsbHkgZWRpdGluZyB1c2VzICJpbnZhbGlkIiBwb3NpdGlv
bnMgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gIEZvcgorLy8gZXhhbXBsZSwgaW4gPGRpdj48aW1n
IC8+PC9kaXY+LCBFZGl0aW5nIG1pZ2h0IHVzZSAoaW1nLCAxKSBmb3IgdGhlIHBvc2l0aW9uCisv
LyBhZnRlciA8aW1nPiwgYnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGF0IHRvIChkaXYsIDEpIGJl
Zm9yZSBoYW5kaW5nIHRoZQorLy8gcG9zaXRpb24gdG8gYSBSYW5nZSBvYmplY3QuICBJZGVhbGx5
IGFsbCBpbnRlcm5hbCBwb3NpdGlvbnMgc2hvdWxkCisvLyBiZSAicmFuZ2UgY29tcGxpYW50IiBm
b3Igc2ltcGxpY2l0eS4KK1Bvc2l0aW9uIFBvc2l0aW9uOjp0b1JhbmdlQ29tcGxpYW50RXF1aXZh
bGVudCgpIGNvbnN0Cit7CisgICAgaWYgKGlzUmFuZ2VDb21wbGlhbnQoKSkKKyAgICAgICAgcmV0
dXJuICp0aGlzOworCisgICAgLy8gUG9zaXRpb25zIHN0aWxsIGNhbiBoYXZlICJpbnZhbGlkIiBv
ZmZzZXRzICgtMSkgZHVlIHRvIFJhbmdlQm91bmRhcnlQb2ludAorICAgIC8vIGJ1dCB3ZSBzaG91
bGQgbmV2ZXIgYmUgdHJ5aW5nIHRvIGNvbnZlcnQgdGhvc2UgdG8gdmFsaWQgcmFuZ2UgcG9zaXRp
b25zCisgICAgQVNTRVJUKG9mZnNldCgpID49IDApOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBw
b3NpdGlvbiBpcyBub3Qgb2ZmIHRoZSBlbmQgb2YgYSB0ZXh0IG5vZGUKKyAgICBpZiAobm9kZSgp
LT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUoKSwg
bWluKG5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCksIG9mZnNldCgpKSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgdGhlIHBvc2l0aW9uIGlzIG5vdCBvZmYgdGhlIGVuZCBvZiBhIGNvbnRhaW5lciBu
b2RlCisgICAgaW50IG9mZnNldEFmdGVyTGFzdENoaWxkID0gbm9kZSgpLT5jaGlsZE5vZGVDb3Vu
dCgpOworICAgIGlmIChvZmZzZXQoKSA+IG9mZnNldEFmdGVyTGFzdENoaWxkKSB7CisgICAgICAg
IGlmIChub2RlKCktPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkFm
dGVyTm9kZShub2RlKCkpOworCisgICAgICAgIC8vIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbiBh
dCB0aGlzIHBvaW50IHRoYW4gdG8KKyAgICAgICAgLy8gdXNlIHRoZSBsYXN0IGFsbG93ZWQgcG9z
aXRpb24gaW4gdGhlIG5vZGUKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUoKSwgb2Zmc2V0
QWZ0ZXJMYXN0Q2hpbGQpOworICAgIH0KKworICAgIHJldHVybiAqdGhpczsKK30KKwogCiBzdGF0
aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKIHsKQEAgLTgxLDEyICsx
MjQsMTMgQEAgRWxlbWVudCogUG9zaXRpb246OmRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiAgICAg
cmV0dXJuIDA7CiB9CiAKLUVsZW1lbnQgKlBvc2l0aW9uOjplbGVtZW50KCkgY29uc3QKK0VsZW1l
bnQqIFBvc2l0aW9uOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlICpuOwotICAgIGZvciAo
biA9IG5vZGUoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cGFyZW50Tm9kZSgp
KQotICAgICAgICA7IC8vIGVtcHR5IGxvb3AgYm9keQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxF
bGVtZW50ICo+KG4pOworICAgIE5vZGUqIG4gPSBub2RlKCk7CisgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uPiBQb3NpdGlvbjo6Y29tcHV0ZWRTdHlsZSgpIGNvbnN0CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uaApp
bmRleCA3N2RlNjc4Li4yMjQ0NmRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5o
CisrKyBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAgLTQ2LDI4ICs0NiwzOCBAQCBlbnVtIFBv
c2l0aW9uTW92ZVR5cGUgewogICAgIEJhY2t3YXJkRGVsZXRpb24gLy8gU3ViamVjdCB0byBwbGF0
Zm9ybSBjb252ZW50aW9ucy4KIH07CiAKLS8vIEZJWE1FOiBSZWR1Y2UgdGhlIG51bWJlciBvZiBv
cGVyYXRpb25zIHdlIGhhdmUgb24gYSBQb3NpdGlvbi4KLS8vIFRoaXMgc2hvdWxkIGJlIG1vcmUg
bGlrZSBhIGh1bWJsZSBzdHJ1Y3QsIHdpdGhvdXQgc28gbWFueSBkaWZmZXJlbnQKLS8vIG1lbWJl
ciBmdW5jdGlvbnMuIFdlIHNob3VsZCBmaW5kIGJldHRlciBob21lcyBmb3IgdGhlc2UgZnVuY3Rp
b25zLgotCiBjbGFzcyBQb3NpdGlvbiB7CiBwdWJsaWM6Ci0gICAgUmVmUHRyPE5vZGU+IGNvbnRh
aW5lcjsKLSAgICBpbnQgcG9zT2Zmc2V0OyAvLyB0byBiZSByZW5hbWVkIHRvIG9mZnNldCB3aGVu
IHdlIGdldCByaWQgb2Ygb2Zmc2V0KCkKLQotICAgIFBvc2l0aW9uKCkgOiBwb3NPZmZzZXQoMCkg
eyB9Ci0gICAgUG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBjLCBpbnQgbykgOiBjb250YWluZXIo
YyksIHBvc09mZnNldChvKSB7IH0KLQotICAgIHZvaWQgY2xlYXIoKSB7IGNvbnRhaW5lci5jbGVh
cigpOyBwb3NPZmZzZXQgPSAwOyB9Ci0KLSAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4g
Y29udGFpbmVyLmdldCgpOyB9Ci0gICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHBvc09m
ZnNldDsgfQorICAgIFBvc2l0aW9uKCkgOiBtX29mZnNldCgwKSB7IH0KKyAgICBQb3NpdGlvbihQ
YXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCkKKyAgICAgICAgOiBtX2NvbnRh
aW5lcihjb250YWluZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KSB7fQorCisgICAgTm9k
ZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkgeyBtX2NvbnRhaW5lciA9IG5vZGU7IH0KKwor
ICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHZvaWQgc2V0
T2Zmc2V0KGludCBuZXdPZmZzZXQpCisgICAgeworICAgICAgICAvLyBTYWRseSB0aGUgUmFuZ2VC
b3VuZGFyeVBvaW50IGNvZGUgZGVwZW5kcyBvbiBiZWluZyBhYmxlIHRvIHNldAorICAgICAgICAv
LyAiaW52YWxpZE9mZnNldCIgKC0xKSBhcyBvdXIgb2Zmc2V0LCBzbyB3ZSBjYW4ndCBBU1NFUlQo
b2Zmc2V0ID49IDApIGhlcmUuCisgICAgICAgIG1fb2Zmc2V0ID0gbmV3T2Zmc2V0OworICAgICAg
ICAvLyBXZSBjb3VsZCBBU1NFUlQgaGVyZSB0aGF0IHRoZSBvZmZzZXQgaXMgd2l0aGluIHRoZSBu
b2RlLgorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBwb3NzaWJsZSB0byBj
b25zdHJ1Y3QgYSB2YWxpZCBET00gcmFuZ2UgdXNpbmcgdGhpcyBwb3NpdGlvbgorICAgIC8vIENv
bnN0cnVjdGluZyBhIFJhbmdlIGZyb20gYW4gaW50ZXJuYWwgZWRpdGluZyAobm9uLXJhbmdlIGNv
bXBsaWFudCkgcG9zaXRpb24gd2lsbCBBU1NFUlQhCisgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkg
YWxsIHVzZXMgb2Ygbm9uLXJhbmdlIGNvbXBsaWFudCBwb3NpdGlvbnMgc2hvdWxkIGJlIHJlbW92
ZWQuCisgICAgYm9vbCBpc1JhbmdlQ29tcGxpYW50KCkgY29uc3Q7CisgICAgUG9zaXRpb24gdG9S
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgbm9kZSgp
IGNhc3QgdG8gYW4gZWxlbWVudCgpIG9yIHRoZSBjbG9zZXN0IGVsZW1lbnQgYW5jZXN0b3IKKyAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Q7CiAgICAgRWxlbWVudCogZG9jdW1lbnRFbGVtZW50
KCkgY29uc3Q7CiAKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFjb250YWluZXI7
IH0KLSAgICBib29sIGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5lcjsgfQorICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fY29udGFpbmVyOyB9CisgICAgYm9vbCBp
c05vdE51bGwoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5lcjsgfQogCi0gICAgRWxlbWVudCog
ZWxlbWVudCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBjb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAKICAgICAvLyBNb3ZlIHVwIG9yIGRvd24gdGhl
IERPTSBieSBvbmUgcG9zaXRpb24uCkBAIC05MCw3ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlc2UgcmV0dXJuIHVzZWZ1bCB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9ucy4KICAgICBQ
b3NpdGlvbiB1cHN0cmVhbSgpIGNvbnN0OwogICAgIFBvc2l0aW9uIGRvd25zdHJlYW0oKSBjb25z
dDsKLSAgICAKKworICAgIC8vIEZJWE1FOiBpc0NhbmRpZGF0ZSBmb3Igd2hhdD8gIE5lZWRzIGEg
YmV0dGVyIG5hbWUgYW5kIHByb2JhYmx5IGJlbG9uZ3MgY2xvc2VyIHRvIFZpc2libGVQb3NpdGlv
bi5jcHAgdGhhbiBoZXJlCiAgICAgYm9vbCBpc0NhbmRpZGF0ZSgpIGNvbnN0OwogICAgIGJvb2wg
aW5SZW5kZXJlZFRleHQoKSBjb25zdDsKICAgICBib29sIGlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBj
b25zdDsKQEAgLTExNCwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICAgICBQb3NpdGlvbiBwcmV2
aW91c0NoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7CiAgICAgUG9zaXRpb24gbmV4
dENoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7CisKKyAgICBSZWZQdHI8Tm9kZT4g
bV9jb250YWluZXI7CisgICAgaW50IG1fb2Zmc2V0OyAvLyBGSVhNRTogY2hhbmdlIHRvIHVuc2ln
bmVkIG9uY2UgUmFuZ2VCb3VuZGFyeVBvaW50IHN0b3BzIHVzaW5nIC0xCiB9OwogCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsK
LSAgICByZXR1cm4gYS5jb250YWluZXIgPT0gYi5jb250YWluZXIgJiYgYS5wb3NPZmZzZXQgPT0g
Yi5wb3NPZmZzZXQ7CisgICAgcmV0dXJuIGEubm9kZSgpID09IGIubm9kZSgpICYmIGEub2Zmc2V0
KCkgPT0gYi5vZmZzZXQoKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAgYi9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggN2FlNTZiMS4uNTg0OTk5MCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cApAQCAtODcsOSArODcsMTEgQEAgUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNz
UmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE4KICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0Q29udGFpbmVyLCBzdGFydE9m
ZnNldCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpKTsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4g
UmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50LCBjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCitQYXNzUmVmUHRyPFJhbmdlPiBS
YW5nZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQsIGNvbnN0IFBv
c2l0aW9uJiBzdGFydFBvc2l0aW9uLCBjb25zdCBQb3NpdGlvbiYgZW5kUG9zaXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydC5jb250YWlu
ZXIuZ2V0KCksIHN0YXJ0LnBvc09mZnNldCwgZW5kLmNvbnRhaW5lci5nZXQoKSwgZW5kLnBvc09m
ZnNldCkpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbi50b1JhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIGVuZCA9IGVuZFBvc2l0aW9uLnRvUmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYW5nZShvd25l
ckRvY3VtZW50LCBzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBlbmQubm9kZSgpLCBlbmQu
b2Zmc2V0KCkpKTsKIH0KIAogUmFuZ2U6On5SYW5nZSgpCkBAIC01MjksNyArNTMxLDcgQEAgc2hv
cnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWluZXJBLCBpbnQgb2Zm
c2V0QSwgTm9kZSogY29udGFpbmUKIAogc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAgcmV0dXJuIGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhhLmNvbnRhaW5lci5nZXQoKSwgYS5wb3NPZmZzZXQsIGIuY29u
dGFpbmVyLmdldCgpLCBiLnBvc09mZnNldCk7CisgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhhLm5vZGUoKSwgYS5vZmZzZXQoKSwgYi5ub2RlKCksIGIub2Zmc2V0KCkpOwogfQogCiBi
b29sIFJhbmdlOjpib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oIGIvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmgKaW5kZXggNGNiN2JmNS4uZDNjYjNkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUmFu
Z2VCb3VuZGFyeVBvaW50LmgKKysrIGIvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgK
QEAgLTcyLDcgKzcyLDcgQEAgaW5saW5lIFJhbmdlQm91bmRhcnlQb2ludDo6UmFuZ2VCb3VuZGFy
eVBvaW50KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyKQogCiBpbmxpbmUgTm9kZSogUmFuZ2VC
b3VuZGFyeVBvaW50Ojpjb250YWluZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3Bvc2l0aW9u
LmNvbnRhaW5lci5nZXQoKTsKKyAgICByZXR1cm4gbV9wb3NpdGlvbi5ub2RlKCk7CiB9CiAKIGlu
bGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNoaWxkQmVmb3JlKCkgY29uc3QKQEAgLTgy
LDIxICs4MiwyMSBAQCBpbmxpbmUgTm9kZSogUmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJlZm9y
ZSgpIGNvbnN0CiAKIGlubGluZSBjb25zdCBQb3NpdGlvbiYgUmFuZ2VCb3VuZGFyeVBvaW50Ojpw
b3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcG9zaXRpb24ucG9zT2Zmc2V0ID49IDApCisg
ICAgaWYgKG1fcG9zaXRpb24ub2Zmc2V0KCkgPj0gMCkKICAgICAgICAgcmV0dXJuIG1fcG9zaXRp
b247CiAgICAgQVNTRVJUKG1fY2hpbGRCZWZvcmUpOwotICAgIG1fcG9zaXRpb24ucG9zT2Zmc2V0
ID0gbV9jaGlsZEJlZm9yZS0+bm9kZUluZGV4KCkgKyAxOworICAgIG1fcG9zaXRpb24uc2V0T2Zm
c2V0KG1fY2hpbGRCZWZvcmUtPm5vZGVJbmRleCgpICsgMSk7CiAgICAgcmV0dXJuIG1fcG9zaXRp
b247CiB9CiAKIGlubGluZSBpbnQgUmFuZ2VCb3VuZGFyeVBvaW50OjpvZmZzZXQoKSBjb25zdAog
ewotICAgIHJldHVybiBwb3NpdGlvbigpLnBvc09mZnNldDsKKyAgICByZXR1cm4gcG9zaXRpb24o
KS5vZmZzZXQoKTsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpjbGVhcigp
CiB7Ci0gICAgbV9wb3NpdGlvbi5jbGVhcigpOworICAgIG1fcG9zaXRpb24gPSBQb3NpdGlvbigp
OwogICAgIG1fY2hpbGRCZWZvcmUgPSAwOwogfQogCkBAIC0xMDQsNjMgKzEwNCw2MSBAQCBpbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5l
ciwgaW50IG9mZnNldCwgTm9kZQogewogICAgIEFTU0VSVChvZmZzZXQgPj0gMCk7CiAgICAgQVNT
RVJUKGNoaWxkQmVmb3JlID09IChvZmZzZXQgPyBjb250YWluZXItPmNoaWxkTm9kZShvZmZzZXQg
LSAxKSA6IDApKTsKLSAgICBtX3Bvc2l0aW9uLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKLSAgICBt
X3Bvc2l0aW9uLnBvc09mZnNldCA9IG9mZnNldDsKKyAgICBtX3Bvc2l0aW9uID0gUG9zaXRpb24o
Y29udGFpbmVyLCBvZmZzZXQpOwogICAgIG1fY2hpbGRCZWZvcmUgPSBjaGlsZEJlZm9yZTsKIH0K
IAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRPZmZzZXQoaW50IG9mZnNldCkK
IHsKLSAgICBBU1NFUlQobV9wb3NpdGlvbi5jb250YWluZXIpOwotICAgIEFTU0VSVChtX3Bvc2l0
aW9uLmNvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpOwotICAgIEFTU0VSVChtX3Bvc2l0
aW9uLnBvc09mZnNldCA+PSAwKTsKKyAgICBBU1NFUlQobV9wb3NpdGlvbi5ub2RlKCkpOworICAg
IEFTU0VSVChtX3Bvc2l0aW9uLm5vZGUoKS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpOworICAgIEFT
U0VSVChtX3Bvc2l0aW9uLm9mZnNldCgpID49IDApOwogICAgIEFTU0VSVCghbV9jaGlsZEJlZm9y
ZSk7Ci0gICAgbV9wb3NpdGlvbi5wb3NPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9wb3NpdGlvbi5z
ZXRPZmZzZXQob2Zmc2V0KTsKIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRUb0NoaWxkKE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVChjaGlsZCk7CiAgICAgQVNTRVJU
KGNoaWxkLT5wYXJlbnROb2RlKCkpOwotICAgIG1fcG9zaXRpb24uY29udGFpbmVyID0gY2hpbGQt
PnBhcmVudE5vZGUoKTsKKyAgICBtX3Bvc2l0aW9uLnNldE5vZGUoY2hpbGQtPnBhcmVudE5vZGUo
KSk7CiAgICAgbV9jaGlsZEJlZm9yZSA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBt
X3Bvc2l0aW9uLnBvc09mZnNldCA9IG1fY2hpbGRCZWZvcmUgPyBpbnZhbGlkT2Zmc2V0IDogMDsK
KyAgICBtX3Bvc2l0aW9uLnNldE9mZnNldChtX2NoaWxkQmVmb3JlID8gaW52YWxpZE9mZnNldCA6
IDApOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnQoUGFz
c1JlZlB0cjxOb2RlPiBjb250YWluZXIpCiB7CiAgICAgQVNTRVJUKGNvbnRhaW5lcik7Ci0gICAg
bV9wb3NpdGlvbi5jb250YWluZXIgPSBjb250YWluZXI7Ci0gICAgbV9wb3NpdGlvbi5wb3NPZmZz
ZXQgPSAwOworICAgIG1fcG9zaXRpb24gPSBQb3NpdGlvbihjb250YWluZXIsIDApOwogICAgIG1f
Y2hpbGRCZWZvcmUgPSAwOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNl
dFRvRW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyKQogewogICAgIEFTU0VSVChjb250YWlu
ZXIpOwotICAgIG1fcG9zaXRpb24uY29udGFpbmVyID0gY29udGFpbmVyOwotICAgIGlmIChtX3Bv
c2l0aW9uLmNvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgbV9wb3Np
dGlvbi5wb3NPZmZzZXQgPSBtX3Bvc2l0aW9uLmNvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0
KCk7CisgICAgbV9wb3NpdGlvbi5zZXROb2RlKGNvbnRhaW5lcik7CisgICAgaWYgKG1fcG9zaXRp
b24ubm9kZSgpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgeworICAgICAgICBtX3Bvc2l0aW9uLnNl
dE9mZnNldChtX3Bvc2l0aW9uLm5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpOwogICAgICAg
ICBtX2NoaWxkQmVmb3JlID0gMDsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NoaWxkQmVmb3Jl
ID0gbV9wb3NpdGlvbi5jb250YWluZXItPmxhc3RDaGlsZCgpOwotICAgICAgICBtX3Bvc2l0aW9u
LnBvc09mZnNldCA9IG1fY2hpbGRCZWZvcmUgPyBpbnZhbGlkT2Zmc2V0IDogMDsKKyAgICAgICAg
bV9jaGlsZEJlZm9yZSA9IG1fcG9zaXRpb24ubm9kZSgpLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAg
bV9wb3NpdGlvbi5zZXRPZmZzZXQobV9jaGlsZEJlZm9yZSA/IGludmFsaWRPZmZzZXQgOiAwKTsK
ICAgICB9CiB9CiAKIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2hpbGRCZWZvcmVX
aWxsQmVSZW1vdmVkKCkKIHsKLSAgICBBU1NFUlQobV9wb3NpdGlvbi5wb3NPZmZzZXQpOworICAg
IEFTU0VSVChtX3Bvc2l0aW9uLm9mZnNldCgpKTsKICAgICBtX2NoaWxkQmVmb3JlID0gbV9jaGls
ZEJlZm9yZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgaWYgKCFtX2NoaWxkQmVmb3JlKQotICAg
ICAgICBtX3Bvc2l0aW9uLnBvc09mZnNldCA9IDA7Ci0gICAgZWxzZSBpZiAobV9wb3NpdGlvbi5w
b3NPZmZzZXQgPiAwKQotICAgICAgICAtLW1fcG9zaXRpb24ucG9zT2Zmc2V0OworICAgICAgICBt
X3Bvc2l0aW9uLnNldE9mZnNldCgwKTsKKyAgICBlbHNlIGlmIChtX3Bvc2l0aW9uLm9mZnNldCgp
ID4gMCkKKyAgICAgICAgbV9wb3NpdGlvbi5zZXRPZmZzZXQobV9wb3NpdGlvbi5vZmZzZXQoKSAt
IDEpOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmludmFsaWRhdGVPZmZz
ZXQoKSBjb25zdAogewotICAgIG1fcG9zaXRpb24ucG9zT2Zmc2V0ID0gaW52YWxpZE9mZnNldDsK
KyAgICBtX3Bvc2l0aW9uLnNldE9mZnNldChpbnZhbGlkT2Zmc2V0KTsKIH0KIAogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IFJhbmdlQm91
bmRhcnlQb2ludCYgYikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IGQ4
ODhhZWQuLjFiZDI3ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAt
NDE2LDggKzQxNiw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCiAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0
IGFuZCBlbmQgaW5kaWNlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdHJlZSB0aGF0IHRoZXkncmUg
aW4uCiAgICAgTm9kZSogc2NvcGUgPSBoaWdoZXN0QW5jZXN0b3IodmlzaWJsZVN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpKTsKICAgICBQb3NpdGlvbiByYW5nZVN0YXJ0KHNjb3BlLCAwKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlU3RhcnQuZGVlcEVx
dWl2YWxlbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxl
RW5kLmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlU3RhcnQsIHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCByYW5nZVN0YXJ0LCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkpOwogICAg
IGludCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLmdl
dCgpLCB0cnVlKTsKICAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KGVuZFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCmluZGV4IDczZDFjNDEuLmRhZGQ1N2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBj
b25zdCBQb3NpCiAgICAgQVNTRVJUKGlzRWRpdGFibGVQb3NpdGlvbihlZGl0aW5nUG9zaXRpb24p
KTsKICAgICAvLyBGb3IgZWRpdGluZyBwb3NpdGlvbnMgbGlrZSBbdGFibGUsIDBdLCBpbnNlcnQg
YmVmb3JlIHRoZSB0YWJsZSwKICAgICAvLyBsaWtld2lzZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMs
IGJycywgZXRjLgotICAgIFBvc2l0aW9uIHAgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZWRp
dGluZ1Bvc2l0aW9uKTsKKyAgICBQb3NpdGlvbiBwID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRD
b250ZW50KGVkaXRpbmdQb3NpdGlvbik7CiAgICAgTm9kZSogcmVmQ2hpbGQgPSBwLm5vZGUoKTsK
ICAgICBpbnQgb2Zmc2V0ID0gcC5vZmZzZXQoKTsKICAgICAKQEAgLTc1NSwxMyArNzU1LDEzIEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJhZ3JhcGgpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZVN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2Ug
PSBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgdmlzaWJsZVN0YXJ0KTsKICAgICAg
ICAgICAgICAgICBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJh
bmdlLmdldCgpLCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZW5kSW5kZXgg
PSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkp
KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVFbmQpOwogICAgICAgICAgICAgICAgIGVuZElu
ZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc3NCwxMSArNzc0LDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFy
dE9mUGFyYWdyYXAKICAgICAvLyBXaGVuIHdlIHBhc3RlIGEgZnJhZ21lbnQsIHNwYWNlcyBhZnRl
ciB0aGUgZW5kIGFuZCBiZWZvcmUgdGhlIHN0YXJ0IGFyZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5
IHdlcmUgcmVuZGVyZWQuICAgIAogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFw
aFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKICAgICBQb3NpdGlvbiBlbmQg
PSBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7Ci0gICAg
Ci0gICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBh
IFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCi0gICAgUG9zaXRpb24gc3RhcnRS
YW5nZUNvbXBsaWFudCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydCk7Ci0gICAgUG9z
aXRpb24gZW5kUmFuZ2VDb21wbGlhbnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5vZmZzZXQoKSwgZW5k
UmFuZ2VDb21wbGlhbnQubm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5vZmZzZXQoKSk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnQsIGVu
ZCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBpbmVmZmljaWVudCB3YXkgdG8gcHJlc2Vy
dmUgc3R5bGUgb24gbm9kZXMgaW4gdGhlIHBhcmFncmFwaCB0byBtb3ZlLiAgSXQgCiAgICAgLy8g
c2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNlIG1vdmVkIHBhcmFncmFwaHMgd2lsbCB1c3Vh
bGx5IGJlIHF1aXRlIHNtYWxsLgpAQCAtODQ3LDcgKzg0Myw3IEBAIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBh
cmFncmFwCiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwogICAgIH0KICAgICAgICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBzdGFydFRvRGVzdGluYXRpb25SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIFBvc2l0aW9uKGRvY3VtZW50KCksIDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZGVz
dGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0VG9E
ZXN0aW5hdGlvblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgUG9zaXRpb24oZG9jdW1l
bnQoKSwgMCksIGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpKTsKICAgICBkZXN0aW5hdGlv
bkluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFRvRGVzdGluYXRpb25SYW5n
ZS5nZXQoKSwgdHJ1ZSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRlc3RpbmF0aW9u
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBlOGI3
NDhiLi40Njc1ZDYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCkBAIC0yMzcsMTUgKzIzNywxNSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omlu
aXRpYWxpemVQb3NpdGlvbkRhdGEoKQogICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2Ug
PSBtX2Rvd25zdHJlYW1FbmQudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9B
RkZJTklUWSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gV2UgbXVzdCBwYXNzIHRo
ZSBwb3NpdGlvbnMgdGhyb3VnaCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQsIHNpbmNlIHNvbWUg
ZWRpdGluZyBwb3NpdGlvbnMKLSAgICAvLyB0aGF0IGFwcGVhciBpbnNpZGUgdGhlaXIgbm9kZXMg
YXJlbid0IHJlYWxseSBpbnNpZGUgdGhlbS4gIFtociwgMF0gaXMgb25lIGV4YW1wbGUuCi0gICAg
Ly8gRklYTUU6IHJhbmdlQ29tcGxhaW50RXF1aXZhbGVudCBzaG91bGQgZXZlbnR1YWxseSBiZSBt
b3ZlZCBpbnRvIGVuY2xvc2luZyBlbGVtZW50IGdldHRlcnMKLSAgICAvLyBsaWtlIHRoZSBvbmUg
YmVsb3csIHNpbmNlIGVkaXRpbmcgZnVuY3Rpb25zIHNob3VsZCBvYnZpb3VzbHkgYWNjZXB0IGVk
aXRpbmcgcG9zaXRpb25zLgorCisgICAgLy8gV2UgbXVzdCBwYXNzIHRoZSBwb3NpdGlvbnMgdGhy
b3VnaCBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQsIHNpbmNlIHNvbWUgZWRpdGluZyBw
b3NpdGlvbnMKKyAgICAvLyB0aGF0IGFwcGVhciBpbnNpZGUgY29udGVudCB3aGljaCBlZGl0aW5n
IGlnbm9yZXMuICBbaHIsIDBdIGlzIG9uZSBleGFtcGxlLgorICAgIC8vIEZJWE1FOiBwb3NpdGlv
bkF2b2lkaW5nSWdub3JlZENvbnRlbnQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbW92ZWQgaW50byBl
bmNsb3NpbmcgZWxlbWVudCBnZXR0ZXJzCisgICAgLy8gbGlrZSB0aGUgb25lIGJlbG93LCBzaW5j
ZSBlZGl0aW5nIGZ1bmN0aW9ucyBzaG91bGQgb2J2aW91c2x5IGFjY2VwdCBhbnkgdmFsaWQgcG9z
aXRpb25zLgogICAgIC8vIEZJWE1FOiBQYXNzaW5nIGZhbHNlIHRvIGVuY2xvc2luZ05vZGVPZlR5
cGUgdGVsbHMgaXQgdGhhdCBpdCdzIE9LIHRvIHJldHVybiBhIG5vbi1lZGl0YWJsZQogICAgIC8v
IG5vZGUuICBUaGlzIHdhcyBkb25lIHRvIG1hdGNoIGV4aXN0aW5nIGJlaGF2aW9yLCBidXQgaXQg
c2VlbXMgd3JvbmcuCi0gICAgbV9zdGFydEJsb2NrID0gZW5jbG9zaW5nTm9kZU9mVHlwZShyYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQobV9kb3duc3RyZWFtU3RhcnQpLCAmaXNCbG9jaywgZmFsc2Up
OwotICAgIG1fZW5kQmxvY2sgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChtX3Vwc3RyZWFtRW5kKSwgJmlzQmxvY2ssIGZhbHNlKTsKKyAgICBtX3N0YXJ0Qmxv
Y2sgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudCht
X2Rvd25zdHJlYW1TdGFydCksICZpc0Jsb2NrLCBmYWxzZSk7CisgICAgbV9lbmRCbG9jayA9IGVu
Y2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KG1fdXBzdHJl
YW1FbmQpLCAmaXNCbG9jaywgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVFbmNsb3Np
bmdBbmNob3JTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKQEAgLTU5OSw4ICs1OTksOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxl
bnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVw
RXF1aXZhbGVudCgpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1lcmdlRGVz
dGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtZXJn
ZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9Nb3Zl
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbWFrZVJhbmdlKG1lcmdl
RGVzdGluYXRpb24sIG1lcmdlRGVzdGluYXRpb24pOwogICAgIGlmICghZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5n
ZS5nZXQoKSwgcmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAg
CkBAIC02OTcsMTMgKzY5NywxMyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1
bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKQogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpjbGVhclRyYW5zaWVudFN0YXRlKCkKIHsKICAgICBtX3NlbGVjdGlvblRvRGVsZXRlID0gVmlz
aWJsZVNlbGVjdGlvbigpOwotICAgIG1fdXBzdHJlYW1TdGFydC5jbGVhcigpOwotICAgIG1fZG93
bnN0cmVhbVN0YXJ0LmNsZWFyKCk7Ci0gICAgbV91cHN0cmVhbUVuZC5jbGVhcigpOwotICAgIG1f
ZG93bnN0cmVhbUVuZC5jbGVhcigpOwotICAgIG1fZW5kaW5nUG9zaXRpb24uY2xlYXIoKTsKLSAg
ICBtX2xlYWRpbmdXaGl0ZXNwYWNlLmNsZWFyKCk7Ci0gICAgbV90cmFpbGluZ1doaXRlc3BhY2Uu
Y2xlYXIoKTsKKyAgICBtX3Vwc3RyZWFtU3RhcnQgPSBQb3NpdGlvbigpOworICAgIG1fZG93bnN0
cmVhbVN0YXJ0ID0gUG9zaXRpb24oKTsKKyAgICBtX3Vwc3RyZWFtRW5kID0gUG9zaXRpb24oKTsK
KyAgICBtX2Rvd25zdHJlYW1FbmQgPSBQb3NpdGlvbigpOworICAgIG1fZW5kaW5nUG9zaXRpb24g
PSBQb3NpdGlvbigpOworICAgIG1fbGVhZGluZ1doaXRlc3BhY2UgPSBQb3NpdGlvbigpOworICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gUG9zaXRpb24oKTsKIH0KIAogdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMWVkY2RjNi4uMTU3ODQw
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQ2Myw3ICs0NjMsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVk
aXRvcjo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihib29sJiBoYXNOZXN0ZWRPck11bHRpcGxl
RW1iZQogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAg
IGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgp
OwogCi0gICAgICAgIE5vZGUqIHBhc3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1
bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKSwgcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KGVuZCkpLT5wYXN0TGFzdE5vZGUoKTsKKyAgICAgICAgTm9kZSogcGFzdExhc3QgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHBvcywgZW5kKS0+cGFzdExhc3ROb2Rl
KCk7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSBwYXN0TGFzdDsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxlZEVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1ODYsNyArMTU4Niw3IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiA9
IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChwb3NpdGlvbik7CisgICAgICAgIFBvc2l0aW9uIHJh
bmdlQ29tcGxpYW50UG9zaXRpb24gPSBwb3NpdGlvbi50b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dCgpOwogICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFu
dFBvc2l0aW9uLm5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5vZmZzZXQoKSwgZWMpOwog
ICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyAgIC8vIHdvbid0IG5lZWQgdG8g
d3JhcAogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApp
bmRleCAxODFhOTFiLi41OTQ5MGJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6c2hvdWxkVXNlQnJlYWtFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRpb25Qb3MpCiAg
ICAgLy8gQW4gZWRpdGluZyBwb3NpdGlvbiBsaWtlIFtpbnB1dCwgMF0gYWN0dWFsbHkgcmVmZXJz
IHRvIHRoZSBwb3NpdGlvbiBiZWZvcmUKICAgICAvLyB0aGUgaW5wdXQgZWxlbWVudCwgYW5kIGlu
IHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCBlbGVtZW50J3MKICAgICAvLyBw
YXJlbnQncyByZW5kZXJlci4KLSAgICBQb3NpdGlvbiBwKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dChpbnNlcnRpb25Qb3MpKTsKKyAgICBQb3NpdGlvbiBwID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9y
ZWRDb250ZW50KGluc2VydGlvblBvcyk7CiAgICAgcmV0dXJuIHAubm9kZSgpLT5yZW5kZXJlcigp
ICYmICFwLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAppbmRleCBiODE0ODllLi4xMDQ5ZTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC0xMTgsOCArMTE4LDgg
QEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgYWZmaW5pdHkgPSBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpOwogICAgIH0KICAgICAK
LSAgICAvLyBGSVhNRTogVGhlIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCBjb252ZXJzaW9uIG5l
ZWRzIHRvIGJlIG1vdmVkIGludG8gZW5jbG9zaW5nQmxvY2suCi0gICAgTm9kZSogc3RhcnRCbG9j
a05vZGUgPSBlbmNsb3NpbmdCbG9jayhyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKS5ub2Rl
KCkpOworICAgIC8vIEZJWE1FOiBUaGUgcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50IGNh
bGwgbmVlZHMgdG8gYmUgbW92ZWQgaW50byBlbmNsb3NpbmdCbG9jay4KKyAgICBOb2RlKiBzdGFy
dEJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVu
dChwb3MpLm5vZGUoKSk7CiAgICAgUG9zaXRpb24gY2Fub25pY2FsUG9zID0gVmlzaWJsZVBvc2l0
aW9uKHBvcykuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBFbGVtZW50KiBzdGFydEJsb2NrID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KHN0YXJ0QmxvY2tOb2RlKTsKICAgICBpZiAoIXN0YXJ0QmxvY2tO
b2RlCkBAIC0xNDgsMTMgKzE0OCw2IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKGJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHJlcGFyZSBmb3IgbW9y
ZSBnZW5lcmFsIGNhc2VzLgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcGVlbCBvZmYgdGhl
IG5vZGUgaGVyZSBiZWNhdXNlIHRoZW4gd2UgbG9zZSB0cmFjayBvZgotICAgIC8vIHRoZSBmYWN0
IHRoYXQgaXQncyB0aGUgbm9kZSB0aGF0IGJlbG9uZ3MgdG8gYW4gZWRpdGluZyBwb3NpdGlvbiBh
bmQKLSAgICAvLyBub3QgYSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQuCi0gICAgTm9kZSAqc3Rh
cnROb2RlID0gcG9zLm5vZGUoKTsKLQogICAgIGJvb2wgaXNGaXJzdEluQmxvY2sgPSBpc1N0YXJ0
T2ZCbG9jayh2aXNpYmxlUG9zKTsKICAgICBib29sIGlzTGFzdEluQmxvY2sgPSBpc0VuZE9mQmxv
Y2sodmlzaWJsZVBvcyk7CiAgICAgYm9vbCBuZXN0TmV3QmxvY2sgPSBmYWxzZTsKQEAgLTIyNywx
MSArMjIwLDE0IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIGluc2VydE5vZGVBdChici5nZXQoKSwgcG9zKTsKICAgICAgICAgcG9zID0g
cG9zaXRpb25BZnRlck5vZGUoYnIuZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIE1vdmUg
ZG93bnN0cmVhbS4gVHlwaW5nIHN0eWxlIGNvZGUgd2lsbCB0YWtlIGNhcmUgb2YgY2Fycnlpbmcg
YWxvbmcgdGhlIAogICAgIC8vIHN0eWxlIG9mIHRoZSB1cHN0cmVhbSBwb3NpdGlvbi4KKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IHBlZWwgb2ZmIHRoZSBub2RlIGhlcmUgYmVjYXVzZSB0aGVu
IHdlIGxvc2UgdHJhY2sgb2YKKyAgICAvLyB0aGUgZmFjdCB0aGF0IGl0J3MgdGhlIG5vZGUgdGhh
dCBiZWxvbmdzIHRvIGFuIGVkaXRpbmcgcG9zaXRpb24gYW5kCisgICAgLy8gbm90IGEgcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50LgogICAgIHBvcyA9IHBvcy5kb3duc3RyZWFtKCk7Ci0gICAgc3Rh
cnROb2RlID0gcG9zLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3Mubm9kZSgpOwog
CiAgICAgLy8gQnVpbGQgdXAgbGlzdCBvZiBhbmNlc3RvcnMgaW4gYmV0d2VlbiB0aGUgc3RhcnQg
bm9kZSBhbmQgdGhlIHN0YXJ0IGJsb2NrLgogICAgIFZlY3RvcjxFbGVtZW50Kj4gYW5jZXN0b3Jz
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYTE2
YzQ5YS4uODVkY2RiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0Jl
Zm9yZUluc2VydGlvbihSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QKICAgICBO
b2RlKiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiA9IHRvcE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+
IGNvcGllZFJhbmdlU3R5bGVTcGFuID0gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4tPmZpcnN0Q2hp
bGQoKTsKICAgICAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
QXRJbnNlcnRpb25Qb3MgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoaW5zZXJ0aW9uUG9zKS5j
b21wdXRlZFN0eWxlKCktPmNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKKyAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlQXRJbnNlcnRpb25Qb3MgPSBpbnNlcnRp
b25Qb3MudG9SYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoKS5jb21wdXRlZFN0eWxlKCktPmNvcHlJ
bmhlcml0YWJsZVByb3BlcnRpZXMoKTsKICAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdElu
c2VydGlvblBvcy0+Y3NzVGV4dCgpOwogICAgIAogICAgIGlmIChzdHlsZVRleHQgPT0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKS0+Z2V0QXR0cmlidXRlKHN0
eWxlQXR0cikpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggNTc5OWZmNC4u
ZmRkYzdhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTM4Niw3ICszODYs
NyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodChib29sIHN0YXlJbkVk
aXRhYmxlQ29udGVudCkgY29uc3QKICAgICByZXR1cm4gaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRP
ckFmdGVyKHJpZ2h0KTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9u
b3JFZGl0YWJsZUJvdW5kYXJ5QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykg
Y29uc3QKK1Zpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWRpdGFibGVCb3Vu
ZGFyeUF0T3JCZWZvcmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MpIGNvbnN0CiB7CiAgICAg
aWYgKHBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHBvczsKQEAgLTQxMiw3ICs0MTIsNyBA
QCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpob25vckVkaXRhYmxlQm91bmRhcnlB
dE9yQmVmb3JlKGNvbnN0IFZpc2libGVQbwogICAgIHJldHVybiBsYXN0RWRpdGFibGVQb3NpdGlv
bkJlZm9yZVBvc2l0aW9uSW5Sb290KHBvcy5kZWVwRXF1aXZhbGVudCgpLCBoaWdoZXN0Um9vdCk7
CiB9CiAKLVZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWRpdGFibGVCb3Vu
ZGFyeUF0T3JBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykgY29uc3QKK1Zpc2libGVQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWRpdGFibGVCb3VuZGFyeUF0T3JBZnRlcihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QKIHsKICAgICBpZiAocG9zLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gcG9zOwpAQCAtNTkxLDU3ICs1OTEsNTQgQEAgdm9pZCBWaXNpYmxl
UG9zaXRpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAKICNlbmRpZgogCi1QYXNzUmVmUHRy
PFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZlbmQpCitQYXNzUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlU3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJs
ZUVuZCkKIHsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgIGlm
ICh2aXNpYmxlU3RhcnQuaXNOdWxsKCkgfHwgdmlzaWJsZUVuZC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgUG9zaXRpb24gcyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dChzdGFydCk7Ci0gICAgUG9zaXRpb24gZSA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQp
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMubm9kZSgpLT5kb2N1bWVudCgpLCBzLm5vZGUo
KSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpOworICAgIFBvc2l0aW9uIHN0YXJ0
ID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gZW5kID0gdmlz
aWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0
Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBz
dGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQor
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiByLCBFQWZm
aW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihyLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCByLT5zdGFydE9mZnNl
dChleGNlcHRpb24pLCBhZmZpbml0eSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5z
dGFydENvbnRhaW5lcigpLCByLT5zdGFydE9mZnNldCgpLCBhZmZpbml0eSk7CiB9CiAKLVZpc2li
bGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBh
ZmZpbml0eSkKK1Zpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2Uq
IHIsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCByLT5lbmRP
ZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
ci0+ZW5kQ29udGFpbmVyKCksIHItPmVuZE9mZnNldCgpLCBhZmZpbml0eSk7CiB9CiAKLWJvb2wg
c2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9u
KQorYm9vbCBzZXRTdGFydChSYW5nZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQogewotICAgIGlmICghcikKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgUG9zaXRpb24gcCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2
aXNpYmxlUG9zaXRpb24pOwotICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRTdGFydChwLm5v
ZGUoKSwgcC5vZmZzZXQoKSwgY29kZSk7Ci0gICAgcmV0dXJuIGNvZGUgPT0gMDsKKyAgICBQb3Np
dGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnRvUmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmFu
Z2UtPnNldFN0YXJ0KHBvc2l0aW9uLm5vZGUoKSwgcG9zaXRpb24ub2Zmc2V0KCksIGVjKTsKKyAg
ICByZXR1cm4gZWMgPT0gMDsKIH0KIAotYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAoIXIpCisg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBvc2l0aW9uIHAgPSBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZVBvc2l0aW9uKTsKLSAgICBpbnQgY29kZSA9
IDA7Ci0gICAgci0+c2V0RW5kKHAubm9kZSgpLCBwLm9mZnNldCgpLCBjb2RlKTsKLSAgICByZXR1
cm4gY29kZSA9PSAwOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkudG9SYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICByYW5nZS0+c2V0RW5kKHBvc2l0aW9uLm5vZGUoKSwgcG9zaXRp
b24ub2Zmc2V0KCksIGVjKTsKKyAgICByZXR1cm4gZWMgPT0gMDsKIH0KIAotTm9kZSAqZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlv
bikKK05vZGUqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIHZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwogfQogCi1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGUgKm5vZGUpCitib29s
IGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24sIGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjUzLDcgKzY1MCw3IEBAIGJv
b2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZp
c2libGVQb3NpdGlvbiwgY29uc3QKICAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxsKCkgfHwgIXBy
ZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKTsKIH0K
IAotYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZ2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGUgKm5vZGUpCitib29sIGlzTGFzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29u
c3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmggYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggNDAzYzgx
Ni4uZjZmOGI3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5o
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtNTUsNyArNTUsOSBA
QCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uKE5vZGUqLCBpbnQgb2Zmc2V0LCBFQWZmaW5p
dHkpOwogICAgIFZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSA9IFZQ
X0RFRkFVTFRfQUZGSU5JVFkpOwogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9zaXRpb24u
Y2xlYXIoKTsgfQorICAgIC8vIEZJWE1FOiBjbGVhcigpIGZ1bmN0aW9ucyBhcmUgZXJyb3ItcHJv
bmUgYW5kIG1ha2UgbGl0dGxlIHNlbnNlIGZvciBQT0QgdHlwZXMuCisgICAgLy8gQWxsIGNhbGxl
cnMgc2hvdWxkIGNoYW5nZSB0byB1c2UgdmlzUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oKTsK
KyAgICB2b2lkIGNsZWFyKCkgeyBtX2RlZXBQb3NpdGlvbiA9IFBvc2l0aW9uKCk7IH0KIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOdWxsKCk7IH0K
ICAgICBib29sIGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90
TnVsbCgpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggYjk5ZjQxYy4u
OGY0MDdmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMTI3LDkgKzEy
Nyw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBj
b25zdAogewogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUG9zaXRp
b24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zdGFydCk7Ci0gICAgUG9zaXRp
b24gZW5kID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fZW5kKTsKLSAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLCBtX3N0YXJ0LCBt
X2VuZCk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFs
aXplZFJhbmdlKCkgY29uc3QKQEAgLTE0NywxMyArMTQ1LDE0IEBAIFBhc3NSZWZQdHI8UmFuZ2U+
IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICBpZiAoaXNO
b25lKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUG9zaXRpb24gcywgZTsKKyAgICBQb3Np
dGlvbiBzdGFydDsKKyAgICBQb3NpdGlvbiBlbmQ7CiAgICAgaWYgKGlzQ2FyZXQoKSkgewogICAg
ICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIG1vdmUgdGhlIHJhbmdlIHN0YXJ0
IHVwc3RyZWFtLiBUaGlzIGhlbHBzIHVzIG1hdGNoCiAgICAgICAgIC8vIHRoZSBjb252ZW50aW9u
cyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBtYWtlIHN0eWxlIGRldGVybWluYXRpb25z
IGJhc2VkCiAgICAgICAgIC8vIG9uIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjYXJldCwgaWYg
YW55LiAKLSAgICAgICAgcyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtX3N0YXJ0LnVwc3Ry
ZWFtKCkpOwotICAgICAgICBlID0gczsKKyAgICAgICAgc3RhcnQgPSBtX3N0YXJ0LnVwc3RyZWFt
KCk7CisgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRo
ZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgc2VsZWN0IHRoZSBtaW5pbXVtIHJhbmdlIHRoYXQgZW5j
b21wYXNzZXMgdGhlIHNlbGVjdGlvbi4KICAgICAgICAgLy8gQWdhaW4sIHRoaXMgaXMgdG8gbWF0
Y2ggdGhlIGNvbnZlbnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5
bGUgCkBAIC0xNjcsMjIgKzE2NiwyMCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICBeIHNlbGVjdGVkCiAgICAgICAgIC8vCiAgICAgICAgIEFTU0VSVChpc1JhbmdlKCkp
OwotICAgICAgICBzID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAgICAgIGUgPSBtX2VuZC51
cHN0cmVhbSgpOwotICAgICAgICBpZiAoUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzLm5v
ZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpID4gMCkgeworICAgICAgICBz
dGFydCA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOworICAgICAgICBlbmQgPSBtX2VuZC51cHN0cmVh
bSgpOworICAgICAgICBpZiAoUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGFydC5ub2Rl
KCksIHN0YXJ0Lm9mZnNldCgpLCBlbmQubm9kZSgpLCBlbmQub2Zmc2V0KCkpID4gMCkgewogICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KICAgICAg
ICAgICAgIC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBz
ZWQgd2hpdGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KLSAgICAgICAgICAgIFBv
c2l0aW9uIHRtcCA9IHM7Ci0gICAgICAgICAgICBzID0gZTsKLSAgICAgICAgICAgIGUgPSB0bXA7
CisgICAgICAgICAgICBQb3NpdGlvbiB0bXAgPSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0g
ZW5kOworICAgICAgICAgICAgZW5kID0gdG1wOwogICAgICAgICB9Ci0gICAgICAgIHMgPSByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQocyk7Ci0gICAgICAgIGUgPSByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQoZSk7CiAgICAgfQogCiAgICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJlIHN1cHBvc2Vk
IHRvIGFsd2F5cyBiZSB2YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NFUlQKICAgICAv
LyBpZiBhIHZhbGlkIHJhbmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBpcyBmaW5lIGZv
ciB0aGlzIGNhbGxzaXRlLgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMubm9kZSgpLT5kb2N1
bWVudCgpLCBzLCBlKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRv
Y3VtZW50KCksIHN0YXJ0LCBlbmQpOwogfQogCiBib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQpAQCAtMjExLDcg
KzIwOCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHBvcykKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKFJhbmdlOjpjcmVh
dGUoZCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgUG9zaXRpb24gc3RhcnQo
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHBvcykpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9z
LnRvUmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KCk7CiAgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5v
ZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwogICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFy
dC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBlYyk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmlu
ZGV4IDUwN2U4YzAuLjcyMTRmNzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMzA5LDU5
ICszMDksNDIgQEAgTm9kZSogZW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSkKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5cGUoUG9zaXRpb24obm9kZSwg
MCksIGlzQmxvY2spKTsKIH0KIAotLy8gSW50ZXJuYWxseSBlZGl0aW5nIHVzZXMgImludmFsaWQi
IHBvc2l0aW9ucyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgRm9yCi0vLyBleGFtcGxlLCBpbiA8
ZGl2PjxpbWcgLz48L2Rpdj4sIEVkaXRpbmcgbWlnaHQgdXNlIChpbWcsIDEpIGZvciB0aGUgcG9z
aXRpb24KLS8vIGFmdGVyIDxpbWc+LCBidXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoYXQgdG8gKGRp
diwgMSkgYmVmb3JlIGhhbmRpbmcgdGhlCi0vLyBwb3NpdGlvbiB0byBhIFJhbmdlIG9iamVjdC4g
IElkZWFsbHkgYWxsIGludGVybmFsIHBvc2l0aW9ucyBzaG91bGQKLS8vIGJlICJyYW5nZSBjb21w
bGlhbnQiIGZvciBzaW1wbGljaXR5LgotUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KGNvbnN0IFBvc2l0aW9uJiBwb3MpCi17Ci0gICAgaWYgKHBvcy5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7Ci0KLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKy8vIENy
ZWF0ZSBhIGRvbS1jb21wbGlhbnQgcG9zaXRpb24gd2hpY2ggaXMgb3V0c2lkZSBvZiBhbnkgaWdu
b3JlZCBjb250ZW50CisvLyBBbHNvIHBvc2l0aW9ucyBqdXN0IGluc2lkZSBhIDx0YWJsZT4gYXJl
IG1hcHBlZCB0byBvdXRzaWRlIHRoZSB0YWJsZS4KKy8vIEZJWE1FOiBUaGlzIGNvbWJpbmVzIGJv
dGggYXZvaWRpbmcgdGFibGVzIGFuZCBhdm9pZGluZyBpZ25vcmVkIG5vZGVzLAorLy8gdGhvc2Ug
c2hvdWxkIHByb2JhYmx5IGJlIHNlcGFyYXRlIGZ1bmN0aW9ucy4KKy8vIEZJWE1FOiBTcGxpdCBv
dXQgcGFydCBvZiB0aGlzIGludG8gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxl
PworUG9zaXRpb24gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KGNvbnN0IFBvc2l0aW9u
JiBvcmlnaW5hbFBvc2l0aW9uKQoreworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gb3JpZ2luYWxQ
b3NpdGlvbi50b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgpOworICAgIGludCBvZmZzZXQgPSBw
b3NpdGlvbi5vZmZzZXQoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAg
IEFTU0VSVChvZmZzZXQgPj0gMCk7CiAKLSAgICBpZiAocG9zLm9mZnNldCgpIDw9IDApIHsKKyAg
ICBpZiAob2Zmc2V0ID09IDApIHsKICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSAmJiAo
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpIHx8IGlzVGFibGVFbGVtZW50KG5vZGUpKSkKICAg
ICAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSk7Ci0gICAgICAgIHJldHVy
biBQb3NpdGlvbihub2RlLCAwKTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgIH0KIAot
ICAgIGlmIChub2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKG5vZGUsIG1pbihub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSwgcG9zLm9mZnNldCgpKSk7
Ci0KLSAgICBpbnQgbWF4Q29tcGxpYW50T2Zmc2V0ID0gbm9kZS0+Y2hpbGROb2RlQ291bnQoKTsK
LSAgICBpZiAocG9zLm9mZnNldCgpID4gbWF4Q29tcGxpYW50T2Zmc2V0KSB7Ci0gICAgICAgIGlm
IChub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5v
ZGUobm9kZSk7Ci0KLSAgICAgICAgLy8gdGhlcmUgaXMgbm8gb3RoZXIgb3B0aW9uIGF0IHRoaXMg
cG9pbnQgdGhhbiB0bwotICAgICAgICAvLyB1c2UgdGhlIGhpZ2hlc3QgYWxsb3dlZCBwb3NpdGlv
biBpbiB0aGUgbm9kZQotICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbWF4Q29tcGxpYW50
T2Zmc2V0KTsKLSAgICB9IAotCi0gICAgLy8gRWRpdGluZyBzaG91bGQgbmV2ZXIgZ2VuZXJhdGUg
cG9zaXRpb25zIGxpa2UgdGhpcy4KLSAgICBpZiAoKHBvcy5vZmZzZXQoKSA8IG1heENvbXBsaWFu
dE9mZnNldCkgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKSB7CisgICAgLy8gRWRpdGlu
ZyBzaG91bGQgbmV2ZXIgZ2VuZXJhdGUgcG9zaXRpb25zIGluc2lkZSBpZ25vcmVkIG5vZGVzLgor
ICAgIGludCBvZmZzZXRBZnRlckxhc3RDaGlsZCA9IG5vZGUtPmNoaWxkTm9kZUNvdW50KCk7Cisg
ICAgaWYgKChvZmZzZXQgPCBvZmZzZXRBZnRlckxhc3RDaGlsZCkgJiYgZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpID8gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpIDogUG9z
aXRpb24obm9kZSwgMCk7CiAgICAgfQotICAgIAotICAgIGlmIChwb3Mub2Zmc2V0KCkgPT0gbWF4
Q29tcGxpYW50T2Zmc2V0ICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgfHwgaXNUYWJs
ZUVsZW1lbnQobm9kZSkpKQorCisgICAgaWYgKG9mZnNldCA9PSBvZmZzZXRBZnRlckxhc3RDaGls
ZCAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpIHx8IGlzVGFibGVFbGVtZW50KG5vZGUp
KSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpOwotICAgIAotICAgIHJl
dHVybiBQb3NpdGlvbihwb3MpOwotfQogCi1Qb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cG9zKQotewotICAgIHJldHVybiByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQodnBvcy5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICByZXR1cm4gcG9zaXRp
b247CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHBvc2l0aW9ucyBpbiB0
aGUgRE9NLiBJdCByZXR1cm5zIHRoZSBtYXhpbXVtIHZhbGlkIG9mZnNldAogLy8gaW4gYSBub2Rl
LiAgSXQgcmV0dXJucyAxIGZvciBzb21lIGVsZW1lbnRzIGV2ZW4gdGhvdWdoIHRoZXkgZG8gbm90
IGhhdmUgY2hpbGRyZW4sIHdoaWNoCiAvLyBjcmVhdGVzIHRlY2huaWNhbGx5IGludmFsaWQgRE9N
IFBvc2l0aW9ucy4gIEJlIHN1cmUgdG8gY2FsbCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQKIC8v
IG9uIGEgUG9zaXRpb24gYmVmb3JlIHVzaW5nIGl0IHRvIGNyZWF0ZSBhIERPTSBSYW5nZSwgb3Ig
YW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotaW50IG1heERlZXBPZmZzZXQoY29uc3QgTm9k
ZSAqbm9kZSkKK2ludCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgQVNT
RVJUKG5vZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTk0NSw4ICs5MjgsOCBAQCBpbnQgaW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAg
ICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
UG9zaXRpb24gcCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3VtZW50KCksIFBvc2l0
aW9uKHAubm9kZSgpLT5kb2N1bWVudCgpLCAwKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHAp
KTsKKyAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3VtZW50
KCksIFBvc2l0aW9uKHAubm9kZSgpLT5kb2N1bWVudCgpLCAwKSwgcCk7CiAgICAgcmV0dXJuIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCmluZGV4IDNhNzUyM2UuLjBkM2U0YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBA
IC00MSwxMSArNDEsMTAgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGNsYXNzIFN0cmluZzsK
IGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIAotUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KGNvbnN0IFBvc2l0aW9uJik7Ci1Qb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBpbnQgbWF4RGVlcE9mZnNldChjb25zdCBOb2RlKik7
CiBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlKik7CiBib29sIGVkaXRpbmdJZ25vcmVzQ29u
dGVudChjb25zdCBOb2RlKik7CitQb3NpdGlvbiBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRl
bnQoY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhjb25z
dCBOb2RlKik7CiBOb2RlKiBoaWdoZXN0RWRpdGFibGVSb290KGNvbnN0IFBvc2l0aW9uJik7CiBW
aXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChj
b25zdCBQb3NpdGlvbiYsIE5vZGUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCA1
YmE5YzRhLi4xMGQzNTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC00MSwzNCAr
NDEsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciAqLCB1
bnNpZ25lZCkpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBjYW5kaWRhdGVQb3NpdGlvbiwgdW5zaWduZWQgKCpzZWFyY2hGdW5j
dGlvbikoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkpCiB7Ci0gICAgUG9zaXRpb24gcG9zID0gYy5k
ZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUgKm4gPSBwb3Mubm9kZSgpOwotICAgIGlmICghbikK
KyAgICBQb3NpdGlvbiBwb3MgPSBjYW5kaWRhdGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9kZSgpOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIERvY3VtZW50ICpkID0gbi0+ZG9jdW1lbnQoKTsK
LSAgICBOb2RlICpkZSA9IGQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmICghZGUpCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBOb2RlKiBkb2N1bWVu
dEVsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFkb2N1bWVu
dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICBOb2RlICpi
b3VuZGFyeSA9IG4tPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICBOb2RlKiBib3Vu
ZGFyeSA9IG5vZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBpZiAoIWJvdW5k
YXJ5KQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSA9IGJvdW5kYXJ5LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHdoaWxlIChi
b3VuZGFyeSAmJiBib3VuZGFyeSAhPSBkZSAmJiBib3VuZGFyeS0+cGFyZW50Tm9kZSgpICYmIGlz
Q29udGVudEVkaXRhYmxlID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgd2hpbGUgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICE9IGRvY3VtZW50RWxlbWVu
dCAmJiBib3VuZGFyeS0+cGFyZW50Tm9kZSgpICYmIGlzQ29udGVudEVkaXRhYmxlID09IGJvdW5k
YXJ5LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGJvdW5kYXJ5
ID0gYm91bmRhcnktPnBhcmVudE5vZGUoKTsKIAotICAgIFBvc2l0aW9uIHN0YXJ0ID0gcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KFBvc2l0aW9uKGJvdW5kYXJ5LCAwKSk7Ci0gICAgUG9zaXRpb24g
ZW5kID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHBvcyk7Ci0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZCk7Ci0gICAgCi0gICAgaW50IGV4Y2VwdGlvbiA9
IDA7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0
KCksIGV4Y2VwdGlvbik7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldEVuZChlbmQubm9kZSgpLCBlbmQu
b2Zmc2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgCi0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICBQ
b3NpdGlvbiBzdGFydCA9IHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChQb3NpdGlvbihi
b3VuZGFyeSwgMCkpOworICAgIFBvc2l0aW9uIGVuZCA9IHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVk
Q29udGVudChwb3MpOworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50LCBzdGFydCwgZW5kKTsKICAgICAgICAgCiAgICAgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgVmVjdG9yPFVDaGFy
LCAxMDI0PiBzdHJpbmc7CkBAIC05MSwxMyArODMsMTMgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWduZWQgKCpz
ZWEKICAgICAgICAgaXQuYWR2YW5jZSgpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXQuYXRFbmQo
KSAmJiBuZXh0ID09IDApIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IDApCiAgICAg
ICAgIHBvcyA9IGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKLSAgICB9IGVsc2UgaWYgKG5l
eHQgIT0gMCkgewotICAgICAgICBOb2RlICpub2RlID0gaXQucmFuZ2UoKS0+c3RhcnRDb250YWlu
ZXIoZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCAobm9kZS0+
cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkpKQorICAgIGVsc2UgaWYgKG5l
eHQgIT0gMCkgeworICAgICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IGl0LnJhbmdlKCktPnN0
YXJ0Q29udGFpbmVyKCk7CisgICAgICAgIGlmIChzdGFydENvbnRhaW5lci0+aXNUZXh0Tm9kZSgp
IHx8IChzdGFydENvbnRhaW5lci0+cmVuZGVyZXIoKSAmJiBzdGFydENvbnRhaW5lci0+cmVuZGVy
ZXIoKS0+aXNCUigpKSkKICAgICAgICAgICAgIC8vIFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5z
IGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKLSAgICAgICAgICAgIHBvcyA9IFBvc2l0
aW9uKG5vZGUsIG5leHQpOworICAgICAgICAgICAgcG9zID0gUG9zaXRpb24oc3RhcnRDb250YWlu
ZXIsIG5leHQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFVzZSB0aGUgZW5kIG9m
IHRoZSBmb3VuZCByYW5nZSwgdGhlIHN0YXJ0IGlzIG5vdCBndWFyYW50ZWVkIHRvCiAgICAgICAg
ICAgICAvLyBiZSBjb3JyZWN0LgpAQCAtMTEzLDI1ICsxMDUsMjUgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWdu
ZWQgKCpzZWEKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CiB9
CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYywgdW5zaWduZWQgKCpzZWFyY2hGdW5jdGlvbikoY29uc3QgVUNoYXIgKiwgdW5zaWdu
ZWQpKQorc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBjYW5kaWRhdGVQb3NpdGlvbiwgdW5zaWduZWQgKCpzZWFyY2hGdW5jdGlvbikoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkpCiB7Ci0gICAgUG9zaXRpb24gcG9zID0gYy5kZWVwRXF1aXZh
bGVudCgpOwotICAgIE5vZGUgKm4gPSBwb3Mubm9kZSgpOwotICAgIGlmICghbikKKyAgICBQb3Np
dGlvbiBwb3MgPSBjYW5kaWRhdGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAgIE5vZGUq
IG5vZGUgPSBwb3Mubm9kZSgpOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbigpOwotICAgIERvY3VtZW50ICpkID0gbi0+ZG9jdW1lbnQoKTsKLSAgICBOb2Rl
ICpkZSA9IGQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmICghZGUpCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBOb2RlKiBkb2N1bWVudEVsZW1lbnQg
PSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICBOb2RlICpib3VuZGFyeSA9
IG4tPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICBOb2RlKiBib3VuZGFyeSA9IG5v
ZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBpZiAoIWJvdW5kYXJ5KQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJs
ZSA9IGJvdW5kYXJ5LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHdoaWxlIChib3VuZGFyeSAm
JiBib3VuZGFyeSAhPSBkZSAmJiBib3VuZGFyeS0+cGFyZW50Tm9kZSgpICYmIGlzQ29udGVudEVk
aXRhYmxlID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgd2hpbGUgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICE9IGRvY3VtZW50RWxlbWVudCAmJiBib3Vu
ZGFyeS0+cGFyZW50Tm9kZSgpICYmIGlzQ29udGVudEVkaXRhYmxlID09IGJvdW5kYXJ5LT5wYXJl
bnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGJvdW5kYXJ5ID0gYm91bmRh
cnktPnBhcmVudE5vZGUoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UoZC0+Y3Jl
YXRlUmFuZ2UoKSk7Ci0gICAgUG9zaXRpb24gc3RhcnQocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KHBvcykpOworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UoZG9jdW1lbnQtPmNyZWF0ZVJh
bmdlKCkpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250
ZW50KHBvcyk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgc2VhcmNoUmFuZ2UtPnNl
bGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwogICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBlYyk7CkBAIC0xNTcsOSArMTQ5LDkgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZjLCB1bnNpZ25lZCAoKnNlYXJjaEYKICAgICAgICAgaXQuYWR2YW5jZSgpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpIHsKKyAgICBp
ZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCiAgICAgICAgIHBvcyA9IGl0
LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKLSAgICB9IGVsc2UgaWYgKG5leHQgIT0gMCkgewor
ICAgIGVsc2UgaWYgKG5leHQgIT0gMCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBp
dGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4K
ICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpLCB0cnVl
KTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIDEpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApp
bmRleCBkZWFiZDk1Li4zYmQ1MWY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtNjMsMTUgKzYz
LDE0IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YW5jaG9yTm9kZSgpIGNvbnN0CiAKICAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gYW5jaG9yID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkg
PyBzZWxlY3Rpb24uc3RhcnQoKSA6IHNlbGVjdGlvbi5lbmQoKTsKLSAgICBhbmNob3IgPSByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQoYW5jaG9yKTsKLSAgICByZXR1cm4gYW5jaG9yLm5vZGUoKTsK
KyAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KCkubm9kZSgpOwog
fQogCiBOb2RlKiBET01TZWxlY3Rpb246OmJhc2VOb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmJhc2UoKSkubm9kZSgpOwor
ICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuYmFzZSgpLnRvUmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KCkubm9kZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjph
bmNob3JPZmZzZXQoKSBjb25zdApAQCAtODEsMTUgKzgwLDE0IEBAIGludCBET01TZWxlY3Rpb246
OmFuY2hvck9mZnNldCgpIGNvbnN0CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24g
YW5jaG9yID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uc3RhcnQoKSA6IHNl
bGVjdGlvbi5lbmQoKTsKLSAgICBhbmNob3IgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoYW5j
aG9yKTsKLSAgICByZXR1cm4gYW5jaG9yLm9mZnNldCgpOworICAgIHJldHVybiBhbmNob3IudG9S
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoKS5vZmZzZXQoKTsKIH0KIAogaW50IERPTVNlbGVjdGlv
bjo6YmFzZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS5iYXNlKCkpLm9mZnNldCgpOworICAgIHJldHVybiBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuYmFzZSgpLnRvUmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KCkub2Zmc2V0KCk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKCkgY29u
c3QKQEAgLTk5LDE1ICs5NywxNCBAQCBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNv
bnN0CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24u
aXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwotICAg
IGZvY3VzID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKLSAgICByZXR1cm4gZm9j
dXMubm9kZSgpOworICAgIHJldHVybiBmb2N1cy50b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgp
Lm5vZGUoKTsKIH0KIAogTm9kZSogRE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmV4dGVu
dCgpKS5ub2RlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5leHRlbnQoKS50b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgpLm5vZGUoKTsKIH0KIAogaW50
IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQoKSBjb25zdApAQCAtMTE3LDE1ICsxMTQsMTQgQEAg
aW50IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQoKSBjb25zdAogCiAgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
OwogICAgIFBvc2l0aW9uIGZvY3VzID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rp
b24uZW5kKCkgOiBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBmb2N1cyA9IHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChmb2N1cyk7Ci0gICAgcmV0dXJuIGZvY3VzLm9mZnNldCgpOworICAgIHJldHVy
biBmb2N1cy50b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgpLm9mZnNldCgpOwogfQogCiBpbnQg
RE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCht
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZXh0ZW50KCkpLm9mZnNldCgpOworICAg
IHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZXh0ZW50KCkudG9SYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQoKS5vZmZzZXQoKTsKIH0KIAogYm9vbCBET01TZWxlY3Rpb246
OmlzQ29sbGFwc2VkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBjMzBiM2NlLi4x
MDYxODFjIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04MTksMTMgKzgxOSw3IEBAIHN0YXRp
YyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVy
KQogICAgIGlmIChuZXdFbmQuaXNOdWxsKCkpCiAgICAgICAgIG5ld0VuZCA9IGVuZDsKIAotICAg
IG5ld1N0YXJ0ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG5ld1N0YXJ0KTsKLSAgICBuZXdF
bmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobmV3RW5kKTsKLQotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgp
OwotICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydC5u
b2RlKCksIG5ld1N0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwotICAgIHJhbmdlLT5zZXRFbmQo
bmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLCBuZXdTdGFydCwgbmV3RW5kKTsKICAgICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFu
Z2U6cmFuZ2UuZ2V0KCldOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>