<?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>61262</bug_id>
          
          <creation_ts>2011-05-22 23:59:25 -0700</creation_ts>
          <short_desc>[Refactoring] DocumentMarker should be carried around as a pointer, not value.</short_desc>
          <delta_ts>2011-05-27 00:56:52 -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>525.x (Safari 3.1)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61261</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>jiapu.mail</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407786</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-22 23:59:25 -0700</bug_when>
    <thetext>Currently DocumentMarker is treat as a value class.
But this has following problems:

- It is wasteful. We are doing unnecessary copying.
- It loose its entity. A living entity of DocumentMarker object is actually a RenderedDocumentMarker, a subclass of DM.
   It would have benefits if we could access it.

Using a DocumentMarker object as a pointer solves these problems.
Concretely, DocumentMarkerController::markersForNode() and markersInRange() should return a vector of pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407825</commentid>
    <comment_count>1</comment_count>
      <attachid>94385</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-23 02:06:55 -0700</bug_when>
    <thetext>Created attachment 94385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410787</commentid>
    <comment_count>2</comment_count>
      <attachid>94385</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-26 13:37:58 -0700</bug_when>
    <thetext>Comment on attachment 94385
Patch

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

Is it possible for us to put OwnPtr in the vector to make the ownership

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:317
&gt; +Vector&lt;DocumentMarker*&gt; DocumentMarkerController::markersFor(Node* node)

Would this work as a Vector&lt;const DocumentMarker*&gt;?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1092
&gt; +    Vector&lt;DocumentMarker*&gt;::iterator markerIt = markers.begin();

Nit: Could this be a const_iterator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411215</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-26 23:47:52 -0700</bug_when>
    <thetext>Hi Tony, thank you for giving a review!

(In reply to comment #2)
&gt; (From update of attachment 94385 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94385&amp;action=review
&gt; 
&gt; Is it possible for us to put OwnPtr in the vector to make the ownership
For the return value, no it isn&apos;t. The markers are owned by DocumentMarkerController.
For DocumentMarkerController::m_markers, I&apos;m not sure. I&apos;ll try it in another patch.

&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:317
&gt; &gt; +Vector&lt;DocumentMarker*&gt; DocumentMarkerController::markersFor(Node* node)
No, because we want to call some setter of returned markers.
(That is a motivation of this change.)

&gt; 
&gt; Would this work as a Vector&lt;const DocumentMarker*&gt;?
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:1092
&gt; &gt; +    Vector&lt;DocumentMarker*&gt;::iterator markerIt = markers.begin();
&gt; 
&gt; Nit: Could this be a const_iterator?
Sure. I&apos;ll fix this before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411247</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-27 00:56:52 -0700</bug_when>
    <thetext>Committed r87483: &lt;http://trac.webkit.org/changeset/87483&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94385</attachid>
            <date>2011-05-23 02:06:55 -0700</date>
            <delta_ts>2011-05-26 13:37:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61262-20110523180652.patch</filename>
            <type>text/plain</type>
            <size>34688</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODcwNTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMjlmMjA0Y2VlYWIwZmFm
NGU2OWYzOGNlOWIwYjkwYTUyZGIxZTMzLi4xM2RjZjhkMDJkMmViYjk2ZGE2Y2E0ZGIxYzNiNzY0
ZjAxYzRjMmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDUtMjMgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBEb2N1bWVudE1hcmtlciBzaG91
bGQgYmUgY2FycmllZCBhcm91bmQgYXMgYSBwb2ludGVyLCBub3QgdmFsdWUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI2MgorCisgICAgICAgIC0g
Q2hhbmdlZCByZXR1cm4gdmFsdWUgb2YgbWFya2Vyc0luUmFuZ2UoKSBmcm9tIFZlY3RvcjxEb2N1
bWVudE1hcmtlcj4gdG8gVmVjdG9yPERvY3VtZW50TWFya2VyKj4uCisgICAgICAgIC0gSW50cm9k
dWNlZCBtYXJrZXJzRm9yKCkgdGhhdCByZXR1cm5zIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Cisg
ICAgICAgIC0gUmVtb3ZlZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldFJlbmRlcmVkUmVj
dEZvck1hcmtlcigpIHdoaWNoIG5vdyBjYW4gYmUgcmVwbGFjZWQgYnkKKyAgICAgICAgICBSZW5k
ZXJlZERvY3VtZW50TWFya2VyOjpzZXRSZW5kZXJlZFJlY3QoKS4KKyAgICAgICAgLSBUaGlzIGNo
YW5nZSBkaWRuJ3QgcmVtb3ZlIG1hcmtlcnNGb3JOb2RlKCkgYmV1Y2FzZSB0aGVyZSBpcyBwYXRj
aGVzIG9uIHJldmlldyB3aGljaCBkZXBlbmRzCisgICAgICAgICAgbWFya2Vyc0Zvck5vZGUoKS4g
SSdsbCByZW1vdmUgaXRzIGNhbGwgYWZ0ZXIgdGhlc2UgcGF0Y2hlcyBhcmUgbGFuZGVkLgorICAg
ICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6bWFya2Vyc0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6aGFzTWFya2Vycyk6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAg
ICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9u
QXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcik6Cisg
ICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpwcm9jZXNzTWFya2Vy
c09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnNob3VsZFN0YXJ0VGltZXJGb3IpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycyk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZs
b3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRl
eHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcik6CisKIDIwMTEtMDUtMjIgIEFuZHJldyBXYXNv
biAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVu
amFtaW4gUG91bGFpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggY2Q1OWE2NjI5OTRlMTcwMzRj
YzM4Y2Y4OWY1ODcxZDcwYzU5NzFhNy4uMDc2MWJkZTFhMjk0YjhmMTg2YTk3MDFlYmJmOTc3OWYx
M2JmYzVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTU4MCw4ICs1ODAsNiBAQCBfX1pON1dl
YkNvcmUyM292ZXJyaWRlRGVmYXVsdExhbmd1YWdlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9fWk43
V2ViQ29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNo
ZWRSZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTNyZW1v
dmVNYXJrZXJzRU5TXzE0RG9jdW1lbnRNYXJrZXIxMU1hcmtlclR5cGVzRQotX19aTjdXZWJDb3Jl
MjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxNG1hcmtlcnNGb3JOb2RlRVBOU180Tm9kZUUKLV9f
Wk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTRtYXJrZXJzRm9yTm9kZUVQTlNf
NE5vZGVFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29udHJvbGxlcjIzcmVuZGVyZWRS
ZWN0c0Zvck1hcmtlcnNFTlNfMTREb2N1bWVudE1hcmtlcjEwTWFya2VyVHlwZUUKIF9fWk43V2Vi
Q29yZTI0Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljRXYKIF9fWk43V2ViQ29yZTI0Y29udGV4dE1l
bnVJdGVtVGFnU3R5bGVzRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKaW5kZXggNDU3NzAxMzY4NTkwYjMxYjA2ZTI1ZWNhYTVhOWM4NWEzZmM3
ZTk4My4uYmU5NzZiZTkxODcyMDZjMWIyYmM5NzdhYTllZGYyNmNmZThjYThlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTkzLDEw
ICs5Myw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJr
ZXIoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoCiAgICAgICAgICAgICAvLyB0aGUgd2hv
bGUgcHVycG9zZSBvZiB0aWNrbWFya3Mgb24gdGhlIHNjcm9sbGJhciBpcyB0byBzaG93IHdoZXJl
CiAgICAgICAgICAgICAvLyBtYXRjaGVzIG9mZi1zY3JlZW4gYXJlICh0aGF0IGhhdmVuJ3QgYmVl
biBwYWludGVkIHlldCkuCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gdGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcihleGNlcHRpb24pOwotICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
PiBtYXJrZXJzID0gbWFya2Vyc0Zvck5vZGUobm9kZSk7Ci0gICAgICAgICAgICBzZXRSZW5kZXJl
ZFJlY3RGb3JNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2Vycy5zaXplKCkg
LSAxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+Ym91bmRp
bmdCb3goKSk7CisgICAgICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
bWFya2Vyc0Zvcihub2RlKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPihtYXJrZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0pLT5zZXRSZW5kZXJlZFJlY3Qo
cmFuZ2UtPmJvdW5kaW5nQm94KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzE2LDYgKzMx
NCwyMCBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJD
b250YWluaW5nUG9pbnQoY29uc3QgSW50UG9pbnQmCiAgICAgcmV0dXJuIDA7CiB9CiAKK1ZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0ZvcihO
b2RlKiBub2RlKQoreworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKKyAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBpZiAoIWxpc3QpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3Qt
PnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCYobGlzdC0+YXQoaSkpKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEZJWE1FOiBTaG91bGQgYmUgcmVtb3ZlZCBhZnRl
ciBhbGwgcmVsZXZhbnQgcGF0Y2hlcyBhcmUgbGFuZGVkCiBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0Zvck5vZGUoTm9kZSogbm9kZSkKIHsK
ICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IHJlc3VsdDsKQEAgLTMyOSwxMiArMzQxLDEyIEBA
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJz
Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZlY3RvcjxEb2N1
bWVudE1hcmtlcj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5n
ZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK1ZlY3Rv
cjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFu
Z2UoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMp
CiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICBy
ZXR1cm4gVmVjdG9yPERvY3VtZW50TWFya2VyPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPERv
Y3VtZW50TWFya2VyKj4oKTsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gZm91bmRNYXJr
ZXJzOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IGZvdW5kTWFya2VyczsKIAogICAgIE5v
ZGUqIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgQVNTRVJU
KHN0YXJ0Q29udGFpbmVyKTsKQEAgLTM0MywxNiArMzU1LDE3IEBAIFZlY3RvcjxEb2N1bWVudE1h
cmtlcj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSogcmFu
Z2UsIERvCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7
CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RM
YXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBtYXJrZXJzRm9yTm9kZShub2RlKTsKLSAgICAg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5l
bmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXI+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBp
ZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKGl0LT50eXBlKCkpKQorICAgICAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihub2RlKTsKKyAgICAgICAgVmVjdG9y
PERvY3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcmtlcnMuZW5kKCk7Cisg
ICAgICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFya2Vycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIERvY3VtZW50
TWFya2VyKiBtYXJrZXIgPSAqaXQ7CisgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRh
aW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09IHN0YXJ0Q29udGFpbmVyICYmIGl0LT5lbmRPZmZzZXQoKSA8PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYg
KG5vZGUgPT0gc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIGl0LT5zdGFy
dE9mZnNldCgpID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQor
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kQ29udGFpbmVyICYmIG1hcmtlci0+c3RhcnRPZmZz
ZXQoKSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvdW5kTWFya2Vycy5hcHBlbmQoKml0
KTsKKyAgICAgICAgICAgIGZvdW5kTWFya2Vycy5hcHBlbmQobWFya2VyKTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gZm91bmRNYXJrZXJzOwpAQCAtNDkwLDI2ICs1MDMsNiBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGVzIG1hcmtlcgogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNldFJlbmRlcmVkUmVjdEZvck1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgIGlmICghbGlzdCkgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gc2hvdWxkbid0IGJlIHRyeWluZyB0byBzZXQgdGhlIHJlY3Qg
Zm9yIGEgbWFya2VyIHdlIGRvbid0IGFscmVhZHkga25vdyBhYm91dAotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbGlzdC0+c2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBtYXJrZXJDb3VudDsgKytt
YXJrZXJJbmRleCkgewotICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtID0gbGlzdC0+
YXQobWFya2VySW5kZXgpOwotICAgICAgICBpZiAobSA9PSBtYXJrZXIpIHsKLSAgICAgICAgICAg
IG0uc2V0UmVuZGVyZWRSZWN0KHIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHNob3VsZG4ndCBiZSB0cnlpbmcg
dG8gc2V0IHRoZSByZWN0IGZvciBhIG1hcmtlciB3ZSBkb24ndCBhbHJlYWR5IGtub3cgYWJvdXQK
LX0KLQogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJl
Y3RzRm9yTWFya2Vyc0luUmVjdChjb25zdCBJbnRSZWN0JiByKQogewogICAgIC8vIG91dGVyIGxv
b3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBub2RlIGluIHRoZSBkb2N1bWVudApAQCAtNjA5LDE0
ICs2MDIsMTUgQEAgYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFu
Z2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHkKIAogICAgIE5vZGUqIHBhc3RMYXN0
Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5n
ZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9
IG1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxE
b2N1bWVudE1hcmtlcj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMoaXQt
PnR5cGUoKSkpCisgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJr
ZXJzRm9yKG5vZGUpOworICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRN
YXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9ICppdDsKKyAgICAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gc3RhcnRDb250YWlu
ZXIgJiYgaXQtPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+c3Rh
cnRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9kZSA9PSBzdGFydENvbnRhaW5lciAmJiBt
YXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+c3RhcnRP
ZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9k
ZSA9PSBlbmRDb250YWluZXIgJiYgaXQtPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmRD
b250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihyYW5nZS0+ZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBlZTQxMTdkZGYwN2VlNzhhOTEwNGI0ZWMyMzVk
ODIyZGNmMzk3OGQ5Li42M2FjZTFlM2U3ZDg0MWVjODU1MGNiZmEyNDAwYzkzOTg3MGUzNTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC02
NCwxNSArNjQsMTUgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKICAgICB2
b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERv
Y3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1hcmtlcnMoRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSk7
Ci0gICAgdm9pZCBzZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50
TWFya2VyJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJlbmRlcmVkUmVj
dHNGb3JNYXJrZXJzSW5SZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHNoaWZ0TWFya2Vy
cyhOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSk7CiAgICAgdm9pZCBzZXRN
YXJrZXJzQWN0aXZlKFJhbmdlKiwgYm9vbCk7CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5v
ZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAog
ICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgSW50UG9pbnQm
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2Vy
Kj4gbWFya2Vyc0ZvcihOb2RlKik7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2Vy
c0luUmFuZ2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOwogICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4gbWFya2Vyc0Zvck5vZGUoTm9kZSopOwotICAgIFZlY3RvcjxEb2N1
bWVudE1hcmtlcj4gbWFya2Vyc0luUmFuZ2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZXMpOwogICAgIFZlY3RvcjxJbnRSZWN0PiByZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CiAgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25NYXJr
ZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAppbmRleCA0
NzJjNGRlMzhhOTBjYjU1ZTQzOWU4MThmODI4YWM4ZjQ5OGQyYWJhLi41MjNhOGI3NDNlMzgzMjM3
YTdkZTNjMjhhOTYxYzhmNjM1MTAxYjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmVuZGVyZWREb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJl
ZERvY3VtZW50TWFya2VyLmgKQEAgLTYyLDYgKzYyLDExIEBAIGlubGluZSB2b2lkIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXI6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgcikKICAgICAgICAgaW52
YWxpZGF0ZSgpOwogfQogCitpbmxpbmUgUmVuZGVyZWREb2N1bWVudE1hcmtlciogdG9SZW5kZXJl
ZERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiBtYXJrZXIpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPihtYXJrZXIpOworfQorCiB9IC8vIG5h
bWVzcGFjZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggNGNjNTQ0MjBjNjQ2ODI5NTA5ZDlmMDdhM2U5NTBjYzAxMDI0
OWQ5My4uOTRjZDc3MzZhNjZlMjNiODIzMjVlMGZiNWUyMTg5NjZkYTc4ZTIyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM0Miwx
NCArMzQyLDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2Rl
UHJlc2VydmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwCiB7CiAgICAgUmVmUHRyPFRleHQ+
IG5vZGUocHJwTm9kZSk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJDb250
cm9sbGVyID0gZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xsZXItPm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgY291bnQpLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShu
b2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4g
bmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwg
b2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0uaGFz
RGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihu
ZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS50eXBlKCksIG1hcmtlcnNbaV0uZGVzY3JpcHRpb24o
KSk7CisgICAgICAgIGlmIChtYXJrZXJzW2ldLT5oYXNEZXNjcmlwdGlvbigpKQorICAgICAgICAg
ICAgbWFya2VyQ29udHJvbGxlci0+YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXJzW2ld
LT50eXBlKCksIG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXJrZXJDb250cm9sbGVyLT5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtl
cnNbaV0udHlwZSgpKTsKKyAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihu
ZXdSYW5nZS5nZXQoKSwgbWFya2Vyc1tpXS0+dHlwZSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGFh
YTZkOTU5N2I0YzllYmUwZThkNzFiMDBkNjJmOTUwNTk2NjFmY2EuLjQ4MWYwMzgyNGJmMWFkZmFk
MDgzM2FiNGZiYTkyYTQ4YzAxMGQ4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNzU5LDEyICs3NTksMTIgQEAgU3RyaW5n
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2NvcnJlY3Rpb25B
dEJlZ2lubmluZ09mU2VsZWMKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZU9mRmlyc3RDaGFyYWN0ZXIgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGRvY3VtZW50
KCktPm1hcmtlcnMoKS0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0luUmFuZ2UocmFu
Z2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBp
bnQgc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKTsKKyAgICAgICAgY29uc3QgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGludCBzdGFydE9mZnNl
dCA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09IHN0
YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBtYXJrZXIuZGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHJl
dHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBmOGVlYTRiYzJlOGRiYjliYzY3NmNk
ZGRjZjcxNWFhNGM5NmZjYWI5Li41N2JkYWNjNzVkMGI4OGEyMDM1ZmFhZGQwYzcyZDUwOTZiMDg4
YmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zMjE2LDEwICszMjE2LDEwIEBA
IGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpCiAKICAgICB1bnNpZ25lZCBpbnQgc3RhcnRPZmZzZXQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20pOwogICAgIHVuc2lnbmVkIGludCBlbmRP
ZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20gKyBsZW5ndGgpOwotICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4g
bWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2Rl
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKG1h
cmtlci5zdGFydE9mZnNldCgpIDw9IHN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA8PSBtYXJrZXIu
ZW5kT2Zmc2V0KCkgJiYgbWFya2VyLnR5cGUoKSA9PSBtYXJrZXJUeXBlKQorICAgICAgICBEb2N1
bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICAgICAgaWYgKG1hcmtlci0+c3Rh
cnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gbWFya2VyLT5lbmRPZmZz
ZXQoKSAmJiBtYXJrZXItPnR5cGUoKSA9PSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAppbmRleCBjNWQ3NDdiMzE1MDQzNzM5NTNhZGZj
ZjZlY2M2OThlNWE3ZTQ2OTc5Li5hMzgxYWE1YTZiZGM0Y2U3MDI0OTNjODkxMjZhMGZkYmJmNjY3
ZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTcyLDE0ICs3MiwxNCBAQCBzdGF0aWMgY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVu
dCgpCiAgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7CiB9CiAKLXN0YXRpYyBi
b29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPERvY3VtZW50
TWFya2VyPiYgbWFya2VycykKK3N0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3Jp
cHRpb24oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCiB7CiAgICAgaWYg
KG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uKCk7CisgICAgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiA9IG1hcmtlcnNbMF0tPmRlc2NyaXB0aW9uKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDE7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChk
ZXNjcmlwdGlvbiAhPSBtYXJrZXJzW2ldLmRlc2NyaXB0aW9uKCkpCisgICAgICAgIGlmIChkZXNj
cmlwdGlvbiAhPSBtYXJrZXJzW2ldLT5kZXNjcmlwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwMywyMyArNDAzLDIzIEBAIHZv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFp
bmVyTm9kZSgpOwogICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOworICAgIFZlY3RvcjxEb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtl
cnNGb3Iobm9kZSk7CiAgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBjb25zdCBE
b2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vyc1tpXTsKICAgICAgICAgaWYgKCFzaG91bGRT
dGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRP
ZmZzZXQoKSk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUs
IG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFp
blRleHQod29yZFJhbmdlLmdldCgpKTsKICAgICAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAgICAgIGlmIChtYXJrZXIu
dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAgaWYgKG1hcmtlci0+
dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKICAgICAgICAgICAgIHN0YXJ0Q29y
cmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdT
dWdnZXN0aW9ucyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uKCk7CisgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXItPmRl
c2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7CiAgICAgICAgIH0KIApAQCAtNDk0
LDEzICs0OTQsMTMgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRT
cGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGkKICAgICBpZiAoIXJhbmdlT2ZD
b3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
KiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGNvcnJlY3RlZE9uY2VN
YXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBj
b3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3Jy
ZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CiAgICAgaWYgKGNvcnJlY3Rl
ZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFNw
ZWxsaW5nIGNvcnJlY3RlZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2UgbmVlZCB0byBkZXRlcm1p
bmUgd2hldGhlciB1c2VyIGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5hbCB0ZXh0IG9yCiAgICAg
Ly8gZWRpdGVkIGl0IHRvIHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5IHNwZWxsY2hlY2tlciBh
Y2NvcmRpbmdseS4KLSAgICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb3Jy
ZWN0ZWRPbmNlTWFya2VycykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNbMF0uZGVzY3JpcHRpb24o
KSA9PSBjb3JyZWN0ZWQpCisgICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24o
Y29ycmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5kZXNjcmlw
dGlvbigpID09IGNvcnJlY3RlZCkKICAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0
ZWQsIGNvcnJlY3Rpb24pOwogICAgIGVsc2UKICAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29y
cmVjdGVkLCBjb3JyZWN0aW9uKTsKQEAgLTU1MCwxMCArNTUwLDEwIEBAIGJvb2wgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zCiAgICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24gPSBiZWdp
bm5pbmdPZlJhbmdlLnByZXZpb3VzKCk7CiAgICAgUmVmUHRyPFJhbmdlPiBwcmVjZWRpbmdDaGFy
YWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgcHJlY2VkaW5n
Q2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCi0gICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vyc0luUmFuZ2UocHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2Nv
cnJlY3Rpb24pOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJD
b250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1hcmtlcnNb
aV0uZGVzY3JpcHRpb24oKSA9PSBzdHJpbmdUb0JlUmVwbGFjZWQpCisgICAgICAgIGlmIChtYXJr
ZXJzW2ldLT5kZXNjcmlwdGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKaW5kZXggODE1NzQ4ZjQ4NDJkZTU3OGFi
ZDlkODdkOGMzMjExNDJlM2Q3NGFiZC4uNGJjODNjMzMyYTE5NzQ5NmM4YTZjNzNhN2IyZjI1YTA5
Y2ZlOGJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTEyNiwxMCArMTI2LDEwIEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7
CiAKLSAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1h
cmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3Io
Y29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiAoKChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uKCkuaXNOdWxsKCkpIAotICAgICAgICAgICAg
ICAgICB8fCBtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3Rh
dGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkpID09IGVuZE9mZnNldCk7CisgICAgICAg
IHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQg
JiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCisgICAgICAgICAgICAgICAgIHx8
IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nh
c3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOwogICAgIH0KIAogICAg
IEVkaXRvckNsaWVudCogY2xpZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKaW5kZXggZGVkZjY2NzY5MWM0ZGJlOTFhNzI4YTBiMzgzZDFkZTJlMzQ0YjAx
Ny4uYjBhM2JhODQxYzE4M2M3MGU0ZDBhZDRiZTllYTExMmFmMjI0OGEyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQlIuaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9jay5oIgpAQCAtOTY5LDcgKzk3MCw3IEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRD
aGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlCiAgICAg
fQogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIo
R3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3Jh
bW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dy
YW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAodGV4dFJlbmRlcmVyKCktPmRvY3VtZW50
KCktPnByaW50aW5nKCkpCkBAIC05ODMsMTYgKzk4NCwxNiBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3Qg
RmxvYQogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBtZWFzdXJlIHRleHQK
ICAgICBib29sIG1hcmtlclNwYW5zV2hvbGVCb3ggPSB0cnVlOwotICAgIGlmIChtX3N0YXJ0IDw9
IChpbnQpbWFya2VyLnN0YXJ0T2Zmc2V0KCkpCisgICAgaWYgKG1fc3RhcnQgPD0gKGludCltYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsK
LSAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2VyLmVuZE9mZnNldCgpKSAvLyBlbmQgcG9pbnRz
IGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CisgICAgaWYgKChlbmQoKSArIDEpICE9IG1h
cmtlci0+ZW5kT2Zmc2V0KCkpIC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBh
c3QgaXQKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwogICAgIGlmIChtX3Ry
dW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9
IGZhbHNlOwogCiAgICAgaWYgKCFtYXJrZXJTcGFuc1dob2xlQm94IHx8IGdyYW1tYXIpIHsKLSAg
ICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBtYXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQoKSAt
IG1fc3RhcnQsIDApOwotICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBtaW48aW50PihtYXJrZXIu
ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7CisgICAgICAgIGludCBzdGFydFBvc2l0aW9u
ID0gbWF4PGludD4obWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7CisgICAgICAg
IGludCBlbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0
LCBtX2xlbik7CiAgICAgICAgIAogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5j
YXRpb24pCiAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KGVuZFBvc2l0aW9uLCBt
X3RydW5jYXRpb24pOwpAQCAtMTAxMyw3ICsxMDE0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZs
b2EKICAgICAgICAgaWYgKGdyYW1tYXIpIHsKICAgICAgICAgICAgIG1hcmtlclJlY3QubW92ZSgt
Ym94T3JpZ2luLngoKSwgLWJveE9yaWdpbi55KCkpOwogICAgICAgICAgICAgbWFya2VyUmVjdCA9
IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIocmVuZGVyZXIoKS0+bm9kZSgp
LCBtYXJrZXIsIG1hcmtlclJlY3QpOworICAgICAgICAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFy
a2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTEwMzQsMjcgKzEwMzUsMjcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2EK
ICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUg
dXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVy
bGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yVGV4
dENoZWNraW5nKEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgp
ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtl
clR5cGUobWFya2VyLnR5cGUoKSkpOworICAgIHB0LT5kcmF3TGluZUZvclRleHRDaGVja2luZyhG
bG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGlu
ZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtl
ci0+dHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJr
ZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQm
IGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNz
Q29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIq
IG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAgIC8v
IFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0
aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBoaWdobGlnaHQgYXJlIG9uCiAgICAgLy8g
dGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91dC4KICAgICBpbnQg
ZGVsdGFZID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgp
ID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBz
ZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAK
LSAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNp
Z25lZCkwKTsKLSAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0
LCAodW5zaWduZWQpbV9sZW4pOworICAgIGludCBzUG9zID0gbWF4KG1hcmtlci0+c3RhcnRPZmZz
ZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKKyAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIt
PmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKICAgICBUZXh0UnVuIHJ1
biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOwogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBz
dG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCBy
ZWN0IGlzIGluIGFic29sdXRlIGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50
KG1feCwgc2VsZWN0aW9uVG9wKCkpLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKICAgICBtYXJr
ZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2Vy
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIocmVuZGVyZXIoKS0+bm9kZSgp
LCBtYXJrZXIsIG1hcmtlclJlY3QpOworICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJr
ZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgCiAgICAgLy8gT3B0aW9uYWxs
eSBoaWdobGlnaHQgdGhlIHRleHQKICAgICBpZiAocmVuZGVyZXIoKS0+ZnJhbWUoKS0+ZWRpdG9y
KCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkgewotICAgICAgICBDb2xvciBj
b2xvciA9IG1hcmtlci5hY3RpdmVNYXRjaCgpID8KKyAgICAgICAgQ29sb3IgY29sb3IgPSBtYXJr
ZXItPmFjdGl2ZU1hdGNoKCkgPwogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxh
dGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSA6CiAgICAgICAgICAgICByZW5k
ZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcHQpOwpA
QCAtMTA2NCwyMiArMTA2NSwyMiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNo
TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgfQogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoY29u
c3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250KQordm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFy
a2VyKERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCkKIHsKICAgICAvLyBSZXBsYWNlbWVudCBtYXJrZXJzIGFyZSBub3QgYWN0dWFsbHkg
ZHJhd24sIGJ1dCB0aGVpciByZWN0cyBuZWVkIHRvIGJlIGNvbXB1dGVkIGZvciBoaXQgdGVzdGlu
Zy4KICAgICBpbnQgeSA9IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gc2VsZWN0aW9uSGVp
Z2h0KCk7CiAgICAgCiAKLSAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQoKSAt
IG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKLSAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zm
c2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOworICAgIGludCBzUG9zID0gbWF4KG1h
cmtlci0+c3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKKyAgICBpbnQgZVBv
cyA9IG1pbihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsK
ICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOwogICAgIEludFBvaW50
IHN0YXJ0UG9pbnQgPSBJbnRQb2ludChtX3gsIHkpOwogICAgIAogICAgIC8vIENvbXB1dGUgYW5k
IHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4KICAgICBJbnRSZWN0
IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQo
cnVuLCBzdGFydFBvaW50LCBoLCBzUG9zLCBlUG9zKSk7CiAgICAgbWFya2VyUmVjdCA9IHJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwotICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKHJlbmRlcmVyKCktPm5vZGUoKSwgbWFya2VyLCBtYXJr
ZXJSZWN0KTsKKyAgICB0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIobWFya2VyKS0+c2V0UmVuZGVy
ZWRSZWN0KG1hcmtlclJlY3QpOwogfQogICAgIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERv
Y3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3Jv
dW5kKQpAQCAtMTA4NywxNiArMTA4OCwxNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9j
dW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAg
aWYgKCFyZW5kZXJlcigpLT5ub2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcj4gbWFya2VycyA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+bWFya2Vyc0Zvck5vZGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKLSAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI+OjppdGVyYXRvciBtYXJrZXJJdCA9IG1hcmtlcnMuYmVnaW4oKTsKKyAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5tYXJrZXJzRm9yKHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyKj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOwogCiAgICAg
Ly8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNl
IHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXduLgogICAgIC8vIE5vdGUgZW5k
KCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNl
dCBhbmQgcmFuZ2VzIGRvLgogICAgIGZvciAoIDsgbWFya2VySXQgIT0gbWFya2Vycy5lbmQoKTsg
bWFya2VySXQrKykgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gKm1h
cmtlckl0OworICAgICAgICBEb2N1bWVudE1hcmtlciogbWFya2VyID0gKm1hcmtlckl0OwogICAg
ICAgICAKICAgICAgICAgLy8gUGFpbnQgZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIG1hcmtlcnMgb3Ig
dGhlIGZvcmVncm91bmQgbWFya2VycywgYnV0IG5vdCBib3RoCi0gICAgICAgIHN3aXRjaCAobWFy
a2VyLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG1hcmtlci0+dHlwZSgpKSB7CiAgICAgICAg
ICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgogICAgICAgICAgICAgY2FzZSBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmc6CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpD
b3JyZWN0aW9uSW5kaWNhdG9yOgpAQCAtMTExMiwxNyArMTExMywxNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZs
b2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXJ0KCkpCisgICAgICAgIGlmIChtYXJrZXIt
PmVuZE9mZnNldCgpIDw9IHN0YXJ0KCkpCiAgICAgICAgICAgICAvLyBtYXJrZXIgaXMgY29tcGxl
dGVseSBiZWZvcmUgdGhpcyBydW4uICBUaGlzIG1pZ2h0IGJlIGEgbWFya2VyIHRoYXQgc2l0cyBi
ZWZvcmUgdGhlCiAgICAgICAgICAgICAvLyBmaXJzdCBydW4gd2UgZHJhdywgb3IgbWFya2VycyB0
aGF0IHdlcmUgd2l0aGluIHJ1bnMgd2Ugc2tpcHBlZCBkdWUgdG8gdHJ1bmNhdGlvbi4KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCgpID4gZW5kKCkpCisgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPiBlbmQoKSkK
ICAgICAgICAgICAgIC8vIG1hcmtlciBpcyBjb21wbGV0ZWx5IGFmdGVyIHRoaXMgcnVuLCBiYWls
LiAgQSBsYXRlciBydW4gd2lsbCBwYWludCBpdC4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICAgICAgLy8gbWFya2VyIGludGVyc2VjdHMgdGhpcyBydW4uICBQYWludCBpdC4KLSAg
ICAgICAgc3dpdGNoIChtYXJrZXIudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobWFya2VyLT50
eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAg
ICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJveE9yaWdpbiwg
bWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggYzhhOWNjMGZiNThhZmU3
MDRjNjNmMjhlZjNhZjBkZDRlYTUzMzlmMy4uZDY0MTc5MDQ2YjgyZWJjMTZkYzZjNjdiNDQ1ZjFm
M2RkNWRmZTUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBA
IC0xNzUsOSArMTc1LDkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVj
b3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGlu
dCBkZWNvcmF0aW9uLCBjb25zdCBTaGFkb3dEYXRhKik7CiAgICAgdm9pZCBwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0
eWxlKiwgY29uc3QgRm9udCYpOwotICAgIHZvaWQgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IERv
Y3VtZW50TWFya2VyJiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsK
LSAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgRG9jdW1lbnRNYXJrZXImLCBSZW5kZXJTdHlsZSos
IGNvbnN0IEZvbnQmKTsKLSAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIo
Y29uc3QgRG9jdW1lbnRNYXJrZXImLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2
b2lkIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29u
c3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFy
a2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBjb21wdXRlUmVjdEZv
clJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBG
b250Jik7CiAKICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlv
cigpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5jcHAKaW5kZXggYTAwMjg2NzEwMTJlY2IyYjlmMjlmYjUyMWZjZDI0ZGY5
YzhiMTUxZC4uNjQwZWViODhmNjAwOWM3MzM2ODc0NmYyNGFmMjdlZDhhMzdlMDg5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJTVkdJ
bmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC05Miwx
NCArOTMsMTQgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2Vy
UmVjdEZvclJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQKIAogICAgIEFmZmluZVRyYW5zZm9y
bSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0ZXh0UmVuZGVy
ZXItPmRvY3VtZW50KCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gZG9j
dW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUodGV4dFJlbmRlcmVyLT5ub2RlKCkpOwor
ICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudC0+bWFya2Vycygp
LT5tYXJrZXJzRm9yKHRleHRSZW5kZXJlci0+bm9kZSgpKTsKIAotICAgIFZlY3RvcjxEb2N1bWVu
dE1hcmtlcj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtlcnMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+OjppdGVyYXRvciBtYXJrZXJJdCA9IG1hcmtlcnMuYmVnaW4o
KTsgbWFya2VySXQgIT0gbWFya2VyRW5kOyArK21hcmtlckl0KSB7Ci0gICAgICAgIGNvbnN0IERv
Y3VtZW50TWFya2VyJiBtYXJrZXIgPSAqbWFya2VySXQ7CisgICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPjo6aXRlcmF0b3IgbWFya2VySXQgPSBtYXJrZXJzLmJlZ2luKCk7
IG1hcmtlckl0ICE9IG1hcmtlckVuZDsgKyttYXJrZXJJdCkgeworICAgICAgICBEb2N1bWVudE1h
cmtlciogbWFya2VyID0gKm1hcmtlckl0OwogCiAgICAgICAgIC8vIFNWRyBpcyBvbmx5IGludGVy
ZXNzdGVkIGluIHRoZSBUZXh0TWF0Y2ggbWFya2VyLCBmb3Igbm93LgotICAgICAgICBpZiAobWFy
a2VyLnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQorICAgICAgICBpZiAobWFy
a2VyLT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OwpAQCAtMTA5LDggKzExMCw4
IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JS
ZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAKICAgICAgICAgICAgIFNWR0lubGluZVRleHRC
b3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KTsKIAotICAg
ICAgICAgICAgaW50IG1hcmtlclN0YXJ0UG9zaXRpb24gPSBtYXg8aW50PihtYXJrZXIuc3RhcnRP
ZmZzZXQoKSAtIHRleHRCb3gtPnN0YXJ0KCksIDApOwotICAgICAgICAgICAgaW50IG1hcmtlckVu
ZFBvc2l0aW9uID0gbWluPGludD4obWFya2VyLmVuZE9mZnNldCgpIC0gdGV4dEJveC0+c3RhcnQo
KSwgdGV4dEJveC0+bGVuKCkpOworICAgICAgICAgICAgaW50IG1hcmtlclN0YXJ0UG9zaXRpb24g
PSBtYXg8aW50PihtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSB0ZXh0Qm94LT5zdGFydCgpLCAwKTsK
KyAgICAgICAgICAgIGludCBtYXJrZXJFbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KG1hcmtlci0+ZW5k
T2Zmc2V0KCkgLSB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7CiAKICAgICAgICAg
ICAgIGlmIChtYXJrZXJTdGFydFBvc2l0aW9uID49IG1hcmtlckVuZFBvc2l0aW9uKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTM3LDcgKzEzOCw3IEBAIHZvaWQgU1ZHSW5saW5lRmxv
d0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5kZXJTVkdJbmxp
bmVUZXh0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBkb2N1bWVudC0+bWFy
a2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIobm9kZSwgbWFya2VyLCB0ZXh0UmVuZGVy
ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobWFya2VyUmVjdCkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KSk7CisgICAgICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJl
ZFJlY3QodGV4dFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKG1hcmtlclJlY3QpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpOwogICAgIH0KIH0KIAo=
</data>
<flag name="review"
          id="87678"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>