<?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>136825</bug_id>
          
          <creation_ts>2014-09-15 08:42:43 -0700</creation_ts>
          <short_desc>Rename Node::childNode(index) to traverseToChildAt(index) for clarity</short_desc>
          <delta_ts>2014-09-16 19:00:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035258</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 08:42:43 -0700</bug_when>
    <thetext>Rename Node::childNode(index) to traverseToChildAt(index) to make it clearer that the method is actually traversing the children and thus is potentially expensive.
We should also avoid calling this method whenever there is a more efficient alternative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035263</commentid>
    <comment_count>1</comment_count>
      <attachid>238131</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 09:22:12 -0700</bug_when>
    <thetext>Created attachment 238131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035388</commentid>
    <comment_count>2</comment_count>
      <attachid>238131</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-16 00:01:13 -0700</bug_when>
    <thetext>Comment on attachment 238131
Patch

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

I like it!

&gt; Source/WebCore/WebCore.exp.in:-1629
&gt; -__ZNK7WebCore13ContainerNode9childNodeEj

Check UIKit before landing just in case.

&gt; Source/WebCore/dom/ContainerNode.cpp:945
&gt; +    for (; child &amp;&amp; index &gt; 0; --index)

I am surprised you had to manually write the descending loop, clang is usually very good at that.

A random thought: if this code is hot enough, you should dump the average value of &quot;index&quot; in a typical use. If it is large enough, it could be worth doing some manual unrolling.

&gt; Source/WebCore/inspector/DOMPatchSupport.cpp:381
&gt; +    for (size_t i = 0; node &amp;&amp; i &lt; newMap.size(); ++i, node = node-&gt;nextSibling()) {

size_t -&gt; unsigned.

Personally I would use a while() here instead of for() because of the return in the loop and the non-obvious iteration steps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035478</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-16 09:01:16 -0700</bug_when>
    <thetext>We normally use “traverse” to refer to tree traversal, not just walking the linear child list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035481</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 09:05:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; We normally use “traverse” to refer to tree traversal, not just walking the linear child list.

Do you have another naming suggestion? I thought iterating over the direct children still counted as a tree traversal, but if there is a better name for it, I am happy to make the update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035482</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 09:17:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; We normally use “traverse” to refer to tree traversal, not just walking the linear child list.

Since you&apos;re using the term &quot;walking&quot;, do you think walkToChildAt() would be a better alternative?
I don&apos;t feel strongly either way (&quot;traversing&quot; a linked list sounded OK to me).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035509</commentid>
    <comment_count>6</comment_count>
      <attachid>238131</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 11:16:08 -0700</bug_when>
    <thetext>Comment on attachment 238131
Patch

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

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:945
&gt;&gt; +    for (; child &amp;&amp; index &gt; 0; --index)
&gt; 
&gt; I am surprised you had to manually write the descending loop, clang is usually very good at that.
&gt; 
&gt; A random thought: if this code is hot enough, you should dump the average value of &quot;index&quot; in a typical use. If it is large enough, it could be worth doing some manual unrolling.

I did not check the generated assembly to see if there was a difference. Since I was updated this function for coding style, I figured I would refactor it a bit. The purpose was not really to optimize.

&gt;&gt; Source/WebCore/inspector/DOMPatchSupport.cpp:381
&gt;&gt; +    for (size_t i = 0; node &amp;&amp; i &lt; newMap.size(); ++i, node = node-&gt;nextSibling()) {
&gt; 
&gt; size_t -&gt; unsigned.
&gt; 
&gt; Personally I would use a while() here instead of for() because of the return in the loop and the non-obvious iteration steps.

newMap.size() returns a size_t so wouldn&apos;t be using unsigned for |i| be risky?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035512</commentid>
    <comment_count>7</comment_count>
      <attachid>238131</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 11:20:43 -0700</bug_when>
    <thetext>Comment on attachment 238131
Patch

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

&gt;&gt; Source/WebCore/WebCore.exp.in:-1629
&gt;&gt; -__ZNK7WebCore13ContainerNode9childNodeEj
&gt; 
&gt; Check UIKit before landing just in case.

I have just checked, UIKit does not use ContainerNode::childNode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035632</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 17:07:32 -0700</bug_when>
    <thetext>Another proposal would be findChildAt(index). I still prefer traverseToChildAt(index) though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035652</commentid>
    <comment_count>9</comment_count>
      <attachid>238230</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-16 17:51:04 -0700</bug_when>
    <thetext>Created attachment 238230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035655</commentid>
    <comment_count>10</comment_count>
      <attachid>238230</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-16 18:24:54 -0700</bug_when>
    <thetext>Comment on attachment 238230
Patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:945
&gt; +    for (; child &amp;&amp; index &gt; 0; --index)

It’d be pretty standard WebKit style to just say &quot;child &amp;&amp; index&quot; instead of &quot;child &amp;&amp; index &gt; 0&quot;.

&gt; Source/WebCore/dom/Position.cpp:249
&gt; -        return m_anchorNode-&gt;childNode(m_offset - 1); // -1 converts to childNode((unsigned)-1) and returns null.
&gt; +        return m_offset ? m_anchorNode-&gt;traverseToChildAt(m_offset - 1) : nullptr;

Wow, that 0 case could have been really slow before!

&gt; Source/WebCore/inspector/DOMPatchSupport.cpp:381
&gt; +    for (unsigned i = 0; node &amp;&amp; i &lt; newMap.size(); ++i, node = node-&gt;nextSibling()) {

A little strange to use unsigned here now when it was size_t before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035659</commentid>
    <comment_count>11</comment_count>
      <attachid>238230</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-16 19:00:46 -0700</bug_when>
    <thetext>Comment on attachment 238230
Patch

Clearing flags on attachment: 238230

Committed r173684: &lt;http://trac.webkit.org/changeset/173684&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035660</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-16 19:00:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238131</attachid>
            <date>2014-09-15 09:22:12 -0700</date>
            <delta_ts>2014-09-16 17:51:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136825-20140915092208.patch</filename>
            <type>text/plain</type>
            <size>28072</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWRlMzRlYzc0Y2I4Y2Nk
ZDM3Mzg0ZDkwMDE5NzY2MDY1ZjkwZjY5OS4uZWRiZGM2OGZlMmFlMTdiNTMzMDBmMDhhNzgzM2Q4
MjYxOWVlNzk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE0LTA5LTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIE5vZGU6OmNoaWxk
Tm9kZShpbmRleCkgdG8gdHJhdmVyc2VUb0NoaWxkQXQoaW5kZXgpIGZvciBjbGFyaXR5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4MjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgTm9kZTo6
Y2hpbGROb2RlKGluZGV4KSB0byB0cmF2ZXJzZVRvQ2hpbGRBdChpbmRleCkgdG8gbWFrZSBpdAor
ICAgICAgICBjbGVhcmVyIHRoYXQgdGhlIG1ldGhvZCBpcyBhY3R1YWxseSB0cmF2ZXJzaW5nIHRo
ZSBjaGlsZHJlbiBhbmQgdGh1cworICAgICAgICBwb3RlbnRpYWxseSBleHBlbnNpdmUuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGF2b2lkcyBjYWxsaW5nIHRyYXZlcnNlVG9DaGlsZEF0KCkg
aW4gYSBjb3VwbGUgb2YKKyAgICAgICAgZWFzaWx5IGF2b2lkYWJsZSBjYXNlcy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgIFJlbW92ZSBzeW1ib2wg
Zm9yIENvbnRhaW5lck5vZGU6OmNoaWxkTm9kZSgpIGFzIGl0IHdhcyByZW5hbWVkLiBJdCBkb2Vz
CisgICAgICAgIG5vdCBzZWVtIHdlIG5lZWQgdG8gZXhwb3NlIENvbnRhaW5lck5vZGU6OnRyYXZl
cnNlVG9DaGlsZEF0KCkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5n
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhcnJheU9mVGV4dEZvclRleHRNYXJr
ZXJzOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOl0pOgor
ICAgICAgICBNZWNoYW5pY2FsIHJlbmFtaW5nLgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6dHJhdmVyc2VUb0NoaWxk
QXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6Y2hpbGROb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6dHJhdmVyc2VUb0NoaWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAtIFJlbmFtZSBOb2Rl
IC8gQ29udGFpbmVyTm9kZSdzIGNoaWxkTm9kZShpbmRleCkgdG8KKyAgICAgICAgICB0cmF2ZXJz
ZVRvQ2hpbGRBdChpbmRleCkgdG8gbWFrZSBpdCBjbGVhciB0aGF0IGl0IGlzIGFjdHVhbGx5Cisg
ICAgICAgICAgdHJhdmVyc2luZyB0aGUgY2hpbGRyZW4gYW5kIHRodXMgcG90ZW50aWFsbHkgZXhw
ZW5zaXZlLgorICAgICAgICAtIENsZWFuIHVwIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDb250YWlu
ZXJOb2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCgpCisgICAgICAgICAgdG8gYXZvaWQgdGhlIHVzZSBv
ZiBhbiBleHRyYSB8aXwgdmFyaWFibGUuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24pOgor
ICAgICAgICBBdm9pZCBjYWxsaW5nIHRyYXZlcnNlVG9DaGlsZEF0KC0xKS4gUmVseWluZyBvbiB0
aGUgdW5zaWduZWQgYXJndW1lbnQKKyAgICAgICAgd3JhcHBpbmcgYW5kIHRoZSBtZXRob2QgcmV0
dXJuaW5nIG51bGwgaW4gdGhpcyBjYXNlIGlzIGEgYml0IG9ic2N1cmUKKyAgICAgICAgYW5kIGNh
dXNlcyB1bm5lY2Vzc2FyeSB0cmF2ZXJzYWwgb2YgYWxsIGNoaWxkcmVuLgorCisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpwcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6
bmV4dCk6CisgICAgICAgIE1lY2hhbmljYWwgcmVuYW1pbmcgYW5kIHVwZGF0ZSB2YXJpYWJsZSBu
YW1lcyB0byBzdG9wIHVzaW5nCisgICAgICAgIGFiYnJldmlhdGlvbnMgYXMgcGVyIGNvZGluZyBz
dHlsZS4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpQb3NpdGlvbkl0ZXJhdG9yKToKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmZpcnN0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFzdExhc3ROb2Rl
KToKKyAgICAgICAgKiBkb20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldCk6CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNoaWxkcmVu
SW5SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxE
ZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
Ojpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuZXh0SW5QcmVPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcik6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29u
dmVydGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UpOgorICAgICAgICBNZWNoYW5pY2FsIHJlbmFtaW5nLgorCisgICAgICAgICogaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIEl0ZXJhdGUgb3ZlciBjaGlsZHJlbiB3
aGlsZSBpbmNyZW1lbnRpbmcgdGhlIHxpfCB2YXJpYWJsZSB0byBhdm9pZAorICAgICAgICBjYWxs
aW5nIHRyYXZlcnNlVG9DaGlsZEF0KGluZGV4KSByZXBlYXRlZGx5IGFuZCB0aHVzIHRyYXZlcnNp
bmcgdGhlCisgICAgICAgIGNoaWxkcmVuIGZyb20gdGhlIGJlZ2lubmluZyBldmVyeSB0aW1lLgor
CiAyMDE0LTA4LTA3ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIFNvcnQgaXRlbXMgYnkgc3BhbiB3aGVuIHJlc29s
dmluZyBjb250ZW50LWJhc2VkIHRyYWNrIHNpemluZyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KaW5kZXggOTRkOWI1MzllZDQxY2ZkYjUxNzcxNGQxNDA4YjAyYzQ0NWM2M2FiMi4uNDk5ZGNm
NDVkNTMwZGRjNDUwMjM5ZWU2MDExODU5NWMzZDAzMjFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTE2MjYsNyArMTYyNiw2IEBAIF9fWk5LN1dlYkNvcmUxMlRleHRFbmNvZGluZzZkZWNvZGVF
UEtjbWJSYgogX19aTks3V2ViQ29yZTEyVGV4dEl0ZXJhdG9yNG5vZGVFdgogX19aTks3V2ViQ29y
ZTEyVGV4dEl0ZXJhdG9yNXJhbmdlRXYKIF9fWk5LN1dlYkNvcmUxM0NvbnRhaW5lck5vZGUxNWNv
dW50Q2hpbGROb2Rlc0V2Ci1fX1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2RlOWNoaWxkTm9kZUVq
CiBfX1pOSzdXZWJDb3JlMTNHcmFwaGljc0xheWVyMThhY2N1bXVsYXRlZE9wYWNpdHlFdgogX19a
Tks3V2ViQ29yZTEzR3JhcGhpY3NMYXllcjE4Z2V0RGVidWdCb3JkZXJJbmZvRVJOU181Q29sb3JF
UmYKIF9fWk5LN1dlYkNvcmUxM0dyYXBoaWNzTGF5ZXIyNmJhY2tpbmdTdG9yZU1lbW9yeUVzdGlt
YXRlRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLm9yZGVyCmluZGV4IDBiMTc3OTYwMjE2YTJlM2Q0ZTgxZDBjYjUxY2U1
ZDc2ODhiNDI4NDguLjQ5N2I4YTA1YmEyZjllMDI3NzQ5NTEwZTU1MDJmNDAxMzgwNjhiNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5vcmRlcgpAQCAtODEzNCw3ICs4MTM0LDYgQEAgX19aTjdXZWJDb3JlNVJhbmdl
MTBzZWxlY3ROb2RlRVBOU180Tm9kZUVSaQogX19aTjdXZWJDb3JlNVJhbmdlMTRzZXRTdGFydEJl
Zm9yZUVQTlNfNE5vZGVFUmkKIF9fWk5LN1dlYkNvcmU0Tm9kZTlub2RlSW5kZXhFdgogX19aTjdX
ZWJDb3JlNVJhbmdlOHNldFN0YXJ0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaVJpCi1f
X1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2RlOWNoaWxkTm9kZUVqCiBfX1pON1dlYkNvcmVMMzBj
aGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXJFUktOU18xOFJhbmdlQm91bmRhcnlQb2ludEVT
Ml8KIF9fWk43V2ViQ29yZTVSYW5nZTIxY29tcGFyZUJvdW5kYXJ5UG9pbnRzRVBOU180Tm9kZUVp
UzJfaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4Y29sbGFwc2VFYlJpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA1MzBh
ODUzY2JkMDgyZTIyMTFjMTg2ZGE3YTY3NjNmYzljNTE4ZTgwLi40OTk5MDQwMmRkNTc3M2UyNjZk
ZjBjNTg2YmYzYzQzNDViMjM1NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTExMzksNyArMTEzOSw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFTU0VSVChub2RlID09IGl0LnJhbmdl
KCktPmVuZENvbnRhaW5lcigpKTsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSBpdC5yYW5nZSgp
LT5zdGFydE9mZnNldCgpOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFj
dGVyKG5vZGUtPmNoaWxkTm9kZShvZmZzZXQpKSkKKyAgICAgICAgICAgIGlmIChyZXBsYWNlZE5v
ZGVOZWVkc0NoYXJhY3Rlcihub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQpKSkKICAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZChvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMTY2LDcgKzExNjYsNyBAQCBpbnQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
UmFuZwogICAgICAgICAgICAgQVNTRVJUKG5vZGUgPT0gaXQucmFuZ2UoKS0+ZW5kQ29udGFpbmVy
KGV4Y2VwdGlvbikpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IGl0LnJhbmdlKCktPnN0YXJ0
T2Zmc2V0KGV4Y2VwdGlvbik7CiAKLSAgICAgICAgICAgIGlmIChyZXBsYWNlZE5vZGVOZWVkc0No
YXJhY3Rlcihub2RlLT5jaGlsZE5vZGUob2Zmc2V0KSkpCisgICAgICAgICAgICBpZiAocmVwbGFj
ZWROb2RlTmVlZHNDaGFyYWN0ZXIobm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0KSkpCiAg
ICAgICAgICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGYzZjFhNmJiNWU5YTk2YjI1ZjliY2Y2YTc4
ZGMyMDU1MDZhZGNjYjkuLmNkZjEyNTE2MThkYzFiYTk1Y2RjNTdiNmJjNGY3ZDhkOGE3N2U0ZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0xODQ0LDcgKzE4
NDQsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgICAgICAgICAgICAgW2F0dHJTdHJp
bmcgcmVsZWFzZV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKKyAgICAgICAg
ICAgIE5vZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCk7
CiAgICAgICAgICAgICBpZiAocmVwbGFjZWROb2RlKSB7CiAgICAgICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUocmVwbGFjZWROb2RlLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBpZiAob2JqICYm
ICFvYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0KaW5kZXggNDhiZDY2NzYwMTM0YjdkODQ5NzExNzEwYzIwZDcyMGQzN2Yx
YTM5ZS4uNDhiOWFlZTI3MGJlYzg5OWU5Zjc5NGIxMzQzMTg1NTg5MzNmM2NhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTExMDIsNyArMTEwMiw3IEBAIHN0
YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2Rl
KQogICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmlu
Zywgbm9kZSwgbGlzdE1hcmtlclRleHQpOwogICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5n
QXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBpdC50ZXh0KCkpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9kZS0+Y2hpbGROb2RlKG9mZnNl
dCk7CisgICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT50cmF2ZXJzZVRvQ2hp
bGRBdChvZmZzZXQpOwogICAgICAgICAgICAgTlNTdHJpbmcgKmF0dGFjaG1lbnRTdHJpbmcgPSBu
c1N0cmluZ0ZvclJlcGxhY2VkTm9kZShyZXBsYWNlZE5vZGUpOwogICAgICAgICAgICAgaWYgKGF0
dGFjaG1lbnRTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBOU1JhbmdlIGF0dHJTdHJpbmdSYW5n
ZSA9IE5TTWFrZVJhbmdlKFthdHRyU3RyaW5nIGxlbmd0aF0sIFthdHRhY2htZW50U3RyaW5nIGxl
bmd0aF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDY1YjdlZThmMzhj
NjUxYTBjZTQ3MGVjZGY0N2MyY2VkZmU5YmRlMjIuLmQwNTU4Y2UzYmFiYzQ0ZTAyZGZkNDk5ZjI5
ZmJiZGE4ODAwMDMyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTkz
OSwxMyArOTM5LDEyIEBAIHVuc2lnbmVkIENvbnRhaW5lck5vZGU6OmNvdW50Q2hpbGROb2Rlcygp
IGNvbnN0CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1Ob2RlICpDb250YWluZXJOb2RlOjpjaGls
ZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0CitOb2RlKiBDb250YWluZXJOb2RlOjp0cmF2ZXJz
ZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpOwotICAg
IE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7Ci0gICAgZm9yIChpID0gMDsgbiAhPSAwICYmIGkgPCBp
bmRleDsgaSsrKQotICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gbjsK
KyAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBmb3IgKDsgY2hpbGQgJiYgaW5k
ZXggPiAwOyAtLWluZGV4KQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwor
ICAgIHJldHVybiBjaGlsZDsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlv
bkV2ZW50cyhOb2RlJiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4IDUx
MGZhMDRhMWFiZjNmYjc1NTQzYjEwYjRiMTczYzQ3Nzg2Y2I4YTkuLmE3MmRhMzFkNWRiMTFlNzA5
ZjJlZWNjNWZjOTc2ZGY4YjEyMjA5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApA
QCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaXJlY3RDaGlsZE5lZWRzU3R5
bGVSZWNhbGMoKSB7IHNldEZsYWcoRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0K
IAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50Q2hpbGROb2RlcygpIGNvbnN0Owot
ICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogdHJhdmVyc2VUb0NoaWxkQXQodW5zaWduZWQpIGNv
bnN0OwogCiAgICAgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwg
Tm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAg
ICAgYm9vbCByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xk
Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC0xOTIsMTEg
KzE5MiwxMSBAQCBpbmxpbmUgdW5zaWduZWQgTm9kZTo6Y291bnRDaGlsZE5vZGVzKCkgY29uc3QK
ICAgICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5jb3VudENoaWxkTm9kZXMoKTsKIH0K
IAotaW5saW5lIE5vZGUqIE5vZGU6OmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lu
bGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IHsKICAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOworICAgIHJldHVy
biB0b0NvbnRhaW5lck5vZGUodGhpcyktPnRyYXZlcnNlVG9DaGlsZEF0KGluZGV4KTsKIH0KIAog
aW5saW5lIE5vZGUqIE5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggZjQ3
N2ZmM2EwYTJkODE4MmY0MTBiNTU2YmRmZjdiNjM5NDU2NzM1NS4uN2I5MmQwZjQ3NDNlYzgxMTEy
MWI5NDc5MjA4M2FlYWFiM2VjMDkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC00MTcsNyArNDE3LDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNEb2N1bWVudFR5cGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbm9k
ZVR5cGUoKSA9PSBET0NVTUVOVF9UWVBFX05PREU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRU
eXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB1bnNpZ25l
ZCBjb3VudENoaWxkTm9kZXMoKSBjb25zdDsKLSAgICBOb2RlKiBjaGlsZE5vZGUodW5zaWduZWQg
aW5kZXgpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlVG9DaGlsZEF0KHVuc2lnbmVkKSBjb25z
dDsKIAogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgs
IEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggZjJjNjkxZTNi
MGJjNTBhMzcwOWY1MTJlM2QyZjczMTFmOGIyNzA5Zi4uNDk0ZWU2NjlmZjA1NDUyYTk0OTJjZTYz
YzhjYjMzMzI2NzFkNjMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0yNDYsNyArMjQ2
LDcgQEAgTm9kZSogUG9zaXRpb246OmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKSBjb25zdAog
ICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiBtX2FuY2hv
ck5vZGUtPmxhc3RDaGlsZCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgot
ICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGUobV9vZmZzZXQgLSAxKTsgLy8g
LTEgY29udmVydHMgdG8gY2hpbGROb2RlKCh1bnNpZ25lZCktMSkgYW5kIHJldHVybnMgbnVsbC4K
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID8gbV9hbmNob3JOb2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChtX29mZnNldCAtIDEpIDogbnVsbHB0cjsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNo
b3I6CiAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAg
IGNhc2UgUG9zaXRpb25Jc0FmdGVyQW5jaG9yOgpAQCAtMjY3LDcgKzI2Nyw3IEBAIE5vZGUqIFBv
c2l0aW9uOjpjb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSBjb25zdAogICAgIGNhc2UgUG9zaXRp
b25Jc0FmdGVyQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgUG9zaXRpb25J
c09mZnNldEluQW5jaG9yOgotICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGUo
bV9vZmZzZXQpOworICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChtX29mZnNldCk7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgogICAgICAgICBy
ZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQW5jaG9y
OgpAQCAtMjk4LDE3ICsyOTgsMTYgQEAgRWxlbWVudCogUG9zaXRpb246OmVsZW1lbnQoKSBjb25z
dAogCiBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlw
ZSkgY29uc3QKIHsKLSAgICBOb2RlKiBuID0gZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIW4p
CisgICAgTm9kZSogbm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBpbnQgbyA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7CisgICAgaW50IG9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgLy8g
RklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBj
YXRjaCB0aGlzIGVhcmxpZXIuCi0gICAgQVNTRVJUKG8gPj0gMCk7CisgICAgQVNTRVJUKG9mZnNl
dCA+PSAwKTsKIAotICAgIGlmIChvID4gMCkgewotICAgICAgICBOb2RlKiBjaGlsZCA9IG4tPmNo
aWxkTm9kZShvIC0gMSk7Ci0gICAgICAgIGlmIChjaGlsZCkKKyAgICBpZiAob2Zmc2V0ID4gMCkg
eworICAgICAgICBpZiAoTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKSkKICAgICAgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGNo
aWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUg
MDoKQEAgLTMxOCwzNSArMzE3LDM1IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQb3Np
dGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgICAgICAvLyAgICAgIEdvaW5nIGZyb20g
MSB0byAwIGlzIGNvcnJlY3QuCiAgICAgICAgIHN3aXRjaCAobW92ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBDb2RlUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG4sIG8gLSAxKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obm9kZSwgb2Zmc2V0IC0gMSk7CiAgICAgICAgIGNhc2UgQ2hhcmFjdGVyOgotICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihuLCB1bmNoZWNrZWRQ
cmV2aW91c09mZnNldChuLCBvKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KG5vZGUsIG9mZnNldCkp
OwogICAgICAgICBjYXNlIEJhY2t3YXJkRGVsZXRpb246Ci0gICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG4sIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0Rm9yQmFj
a3dhcmREZWxldGlvbihuLCBvKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxl
dGlvbihub2RlLCBvZmZzZXQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudCA9IGZpbmRQYXJlbnQobik7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
ZmluZFBhcmVudChub2RlKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlz
OwogCi0gICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG4tPm5v
ZGVJbmRleCgpKTsKKyAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBhcmVu
dCwgbm9kZS0+bm9kZUluZGV4KCkpOwogfQogCiBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3Np
dGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogewogICAgIEFTU0VSVChtb3ZlVHlwZSAhPSBC
YWNrd2FyZERlbGV0aW9uKTsKIAotICAgIE5vZGUqIG4gPSBkZXByZWNhdGVkTm9kZSgpOwotICAg
IGlmICghbikKKyAgICBOb2RlKiBub2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGludCBvID0gZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBpbnQgb2Zmc2V0ID0gZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
ICAgICAvLyBGSVhNRTogTmVnYXRpdmUgb2Zmc2V0cyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4gV2Ug
c2hvdWxkIGNhdGNoIHRoaXMgZWFybGllci4KLSAgICBBU1NFUlQobyA+PSAwKTsKKyAgICBBU1NF
UlQob2Zmc2V0ID49IDApOwogCi0gICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7Ci0g
ICAgaWYgKGNoaWxkIHx8ICghbi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyhuKSkpIHsKKyAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0
KG9mZnNldCk7CisgICAgaWYgKGNoaWxkIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIG9m
ZnNldCA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUpKSkgewogICAgICAgICBpZiAoY2hpbGQp
CiAgICAgICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGNoaWxkKTsK
IApAQCAtMzU1LDE0ICszNTQsMTQgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRpb25N
b3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICAgICAgLy8gICAgICBHb2luZyBmb3J3YXJkIG9u
ZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGlzIGNvcnJlY3QuCiAgICAgICAgIC8vICAgMikgVGhlIG5l
dyBvZmZzZXQgaXMgYSBib2d1cyBvZmZzZXQgbGlrZSAoPGJyPiwgMSksIGFuZCB0aGVyZSBpcyBu
byBjaGlsZC4KICAgICAgICAgLy8gICAgICBHb2luZyBmcm9tIDAgdG8gMSBpcyBjb3JyZWN0Lgot
ICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG4sIChtb3ZlVHlwZSA9
PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4dE9mZnNldChuLCBvKSA6IG8gKyAxKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCAobW92ZVR5cGUgPT0g
Q2hhcmFjdGVyKSA/IHVuY2hlY2tlZE5leHRPZmZzZXQobm9kZSwgb2Zmc2V0KSA6IG9mZnNldCAr
IDEpOwogICAgIH0KIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGZpbmRQYXJlbnQobik7
CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gZmluZFBhcmVudChub2RlKTsKICAgICBpZiAo
IXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgcmV0dXJuIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG4tPm5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPm5vZGVJbmRleCgpICsg
MSk7CiB9CiAKIGludCBQb3NpdGlvbjo6dW5jaGVja2VkUHJldmlvdXNPZmZzZXQoY29uc3QgTm9k
ZSogbiwgaW50IGN1cnJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b25JdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAppbmRl
eCA3YWY4OTc3NTkxZDE2YzI5NzkzMTg5MGViZDFhZTA2OWMyZDQ3ZjM2Li44ZTBlZTE5ZGU0MmNl
MWU3YWIwNTdkYzI4NWExNDlmZjZjMjI5NTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUG9zaXRpb25JdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0
ZXJhdG9yLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgUG9zaXRpb25JdGVyYXRv
cihjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgICAgICA6IG1fYW5jaG9yTm9kZShwb3MuYW5jaG9y
Tm9kZSgpKQotICAgICAgICAsIG1fbm9kZUFmdGVyUG9zaXRpb25JbkFuY2hvcihtX2FuY2hvck5v
ZGUtPmNoaWxkTm9kZShwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkpCisgICAgICAgICwg
bV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKG1fYW5jaG9yTm9kZS0+dHJhdmVyc2VUb0NoaWxk
QXQocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpKQogICAgICAgICAsIG1fb2Zmc2V0SW5B
bmNob3IobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yID8gMCA6IHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBkNjg0ODRm
Y2YxN2NiODdjNTE0MDljNGNkZTE3MzExYzlhOTgwZDk4Li5jZGJkMWEzZTNlMTQ5ODQ2MjdkZWI4
Y2JkNzVmNWYyMTk4MjkwYzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTEwNTYsNyArMTA1Niw3
IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBwcnBOZXdOb2RlLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgY29udGFpbmVyID0gbV9zdGFydC5jb250YWluZXIo
KTsKICAgICAgICAgUmVmUHRyPE5vZGU+IGZpcnN0SW5zZXJ0ZWRDaGlsZCA9IG5ld05vZGVUeXBl
ID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPyBuZXdOb2RlLT5maXJzdENoaWxkKCkg
OiBuZXdOb2RlOwogICAgICAgICBSZWZQdHI8Tm9kZT4gbGFzdEluc2VydGVkQ2hpbGQgPSBuZXdO
b2RlVHlwZSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFID8gbmV3Tm9kZS0+bGFzdENo
aWxkKCkgOiBuZXdOb2RlOwotICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGRBZnRlckluc2VydGVk
Q29udGVudCA9IGNvbnRhaW5lci0+Y2hpbGROb2RlKG1fc3RhcnQub2Zmc2V0KCkpOworICAgICAg
ICBSZWZQdHI8Tm9kZT4gY2hpbGRBZnRlckluc2VydGVkQ29udGVudCA9IGNvbnRhaW5lci0+dHJh
dmVyc2VUb0NoaWxkQXQobV9zdGFydC5vZmZzZXQoKSk7CiAgICAgICAgIGNvbnRhaW5lci0+aW5z
ZXJ0QmVmb3JlKG5ld05vZGUucmVsZWFzZSgpLCBjaGlsZEFmdGVySW5zZXJ0ZWRDb250ZW50Lmdl
dCgpLCBlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNzEs
NyArMTE3MSw3IEBAIE5vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUqIG4sIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICBjYXNlIE5vZGU6OlhQQVRI
X05BTUVTUEFDRV9OT0RFOiB7CiAgICAgICAgICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbi0+Y2hpbGRO
b2RlKG9mZnNldCAtIDEpOworICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2
ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUp
CiAgICAgICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVy
biBjaGlsZEJlZm9yZTsKQEAgLTE1NjgsNyArMTU2OCw3IEBAIE5vZGUqIFJhbmdlOjpmaXJzdE5v
ZGUoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9zdGFydC5jb250YWluZXIo
KS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCiAgICAgICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5l
cigpOwotICAgIGlmIChOb2RlKiBjaGlsZCA9IG1fc3RhcnQuY29udGFpbmVyKCktPmNoaWxkTm9k
ZShtX3N0YXJ0Lm9mZnNldCgpKSkKKyAgICBpZiAoTm9kZSogY2hpbGQgPSBtX3N0YXJ0LmNvbnRh
aW5lcigpLT50cmF2ZXJzZVRvQ2hpbGRBdChtX3N0YXJ0Lm9mZnNldCgpKSkKICAgICAgICAgcmV0
dXJuIGNoaWxkOwogICAgIGlmICghbV9zdGFydC5vZmZzZXQoKSkKICAgICAgICAgcmV0dXJuIG1f
c3RhcnQuY29udGFpbmVyKCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCBOb2RlKiBSYW5nZTo6cGFz
dExhc3ROb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG1fZW5kLmNvbnRh
aW5lcigpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKICAgICAgICAgcmV0dXJuIE5vZGVUcmF2ZXJz
YWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fZW5kLmNvbnRhaW5lcigpKTsKLSAgICBpZiAoTm9k
ZSogY2hpbGQgPSBtX2VuZC5jb250YWluZXIoKS0+Y2hpbGROb2RlKG1fZW5kLm9mZnNldCgpKSkK
KyAgICBpZiAoTm9kZSogY2hpbGQgPSBtX2VuZC5jb250YWluZXIoKS0+dHJhdmVyc2VUb0NoaWxk
QXQobV9lbmQub2Zmc2V0KCkpKQogICAgICAgICByZXR1cm4gY2hpbGQ7CiAgICAgcmV0dXJuIE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fZW5kLmNvbnRhaW5lcigpKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCA5OTI1MDE5OGFmMGY3
Y2M0OTVlZDgxNDhkOWNlMjIzODJhNDVmZDk2Li5jNWZhMzc4ZTMzMWQ2OGU5MjAxNDg0NzUxMTFj
OTFlZTJhYzJlNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFy
eVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCkBA
IC0xMjEsNyArMTIxLDcgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUGFz
c1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIE5vZGUKIHsKICAgICBBU1NFUlQo
Y29udGFpbmVyKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwotICAgIEFTU0VSVChjaGlsZEJl
Zm9yZSA9PSAob2Zmc2V0ID8gY29udGFpbmVyLT5jaGlsZE5vZGUob2Zmc2V0IC0gMSkgOiAwKSk7
CisgICAgQVNTRVJUKGNoaWxkQmVmb3JlID09IChvZmZzZXQgPyBjb250YWluZXItPnRyYXZlcnNl
VG9DaGlsZEF0KG9mZnNldCAtIDEpIDogMCkpOwogICAgIG1fY29udGFpbmVyTm9kZSA9IGNvbnRh
aW5lcjsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZv
cmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggYTFmNTc3NjQ3ZWQ3ODRhYTQ1ZGVjZjAy
MTJhNzUwMDM4YzJhYzMxOC4uNTU0ODcwNTMyYjkyMWE2YWIwOTcxY2U1ZTc4OGJjOTAzMWE3MjYx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1h
bmQuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+IDApCiAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSA+IDApIHsKLSAgICAgICAgTm9kZSogY2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+
Y2hpbGROb2RlKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgTm9kZSog
Y2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQocG9zLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBzdGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8g
Y2hpbGRBdE9mZnNldCA6IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAgICAgICAg
QVNTRVJUKHN0YXJ0Tm9kZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA5YjQ4YjJkOTYyMmI1NjgzM2IzZTg1YTYyNDc2
YmEzYjUyNzkzMjVjLi4xZDhhN2ZiNzBmODM1ZjliYWFlY2E0MGVlODEwOWU5ODExOTZiYjE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUo
UGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPENvbnRhaW5lCiB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBub2Rl
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
PiBjaGlsZHJlbjsKLSAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkTm9kZShmcm9tKTsKKyAg
ICBOb2RlKiBjaGlsZCA9IG5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KGZyb20pOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IGZyb207IGNoaWxkICYmIGkgPCB0bzsgaSsrLCBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA3
NDA1YjAxNDFlOTU3NDJmMzM0YmIyODQwMzgyNGRhODMxMjJhZjNjLi4zZWZhNjQxNDg4ZmRmOTE3
OTM2YTlhZTQxNTAxMDRmYWRjN2I5MzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgdGV4dC0+bGVuZ3RoKCkg
LSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5v
ZGUgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAg
bm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkgJiYgc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAg
IFRleHQqIHRleHQgPSB0b1RleHQobV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuY3BwCmluZGV4IDY3Y2M4NmMzNTY2MTFmNWI3MTNhZDkxODFiM2IyMTc1NDkz
MDMzZWEuLjdmYjc1MDM4Yzk0NTg2NDAxYTc3MGMxMzcyOTA2NjdhMGQ1NTFiODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcApAQCAtMjY3LDcgKzI2Nyw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9j
ay0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGluc2VydGlvblBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkgPT0gc3RhcnRCbG9jayAmJiBuZXN0TmV3QmxvY2spIHsK
LSAgICAgICAgICAgIHJlZk5vZGUgPSBzdGFydEJsb2NrLT5jaGlsZE5vZGUoaW5zZXJ0aW9uUG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICByZWZOb2RlID0g
c3RhcnRCbG9jay0+dHJhdmVyc2VUb0NoaWxkQXQoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVmTm9kZSk7IC8vIG11c3Qg
YmUgdHJ1ZSBvciB3ZSdkIGJlIGluIHRoZSBlbmQgb2YgYmxvY2sgY2FzZQogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIHJlZk5vZGUgPSBpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDA5M2M1NDhm
MzIwMjZjZDNkNTE4NjA0ZDk0MDBmMTM1MmY5MTYxZmMuLjdiZmIyZjIzMWI2MWUwOTcwN2U5Nzg0
OTU0NDYzOGViYzk4Y2RhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKQEAgLTE5Myw3ICsxOTMsNyBAQCBzdGF0aWMgdW5zaWduZWQgZGVwdGhDcm9zc2luZ1NoYWRv
d0JvdW5kYXJpZXMoTm9kZSYgbm9kZSkKIHN0YXRpYyBOb2RlKiBuZXh0SW5QcmVPcmRlckNyb3Nz
aW5nU2hhZG93Qm91bmRhcmllcyhOb2RlJiByYW5nZUVuZENvbnRhaW5lciwgaW50IHJhbmdlRW5k
T2Zmc2V0KQogewogICAgIGlmIChyYW5nZUVuZE9mZnNldCA+PSAwICYmICFyYW5nZUVuZENvbnRh
aW5lci5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBpZiAoTm9kZSogbmV4dCA9IHJh
bmdlRW5kQ29udGFpbmVyLmNoaWxkTm9kZShyYW5nZUVuZE9mZnNldCkpCisgICAgICAgIGlmIChO
b2RlKiBuZXh0ID0gcmFuZ2VFbmRDb250YWluZXIudHJhdmVyc2VUb0NoaWxkQXQocmFuZ2VFbmRP
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgfQogICAgIGZvciAoTm9kZSog
bm9kZSA9ICZyYW5nZUVuZENvbnRhaW5lcjsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9yU2hh
ZG93SG9zdE5vZGUoKSkgewpAQCAtMTExMSw3ICsxMTExLDcgQEAgTm9kZSogVGV4dEl0ZXJhdG9y
Ojpub2RlKCkgY29uc3QKICAgICBpZiAobm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIAotICAgIHJldHVybiBub2RlLT5jaGlsZE5vZGUodGV4dFJh
bmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICByZXR1cm4gbm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQo
dGV4dFJhbmdlLT5zdGFydE9mZnNldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0KQEAgLTExNDcsMTMg
KzExNDcsMTMgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYgcmEKIAogICAgIGlmICghc3RhcnROb2Rl
LT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gMCAm
JiBzdGFydE9mZnNldCA8IHN0YXRpY19jYXN0PGludD4oc3RhcnROb2RlLT5jb3VudENoaWxkTm9k
ZXMoKSkpIHsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+Y2hpbGROb2RlKHN0
YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VU
b0NoaWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAg
ICAgICB9CiAgICAgfQogICAgIGlmICghZW5kTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsK
ICAgICAgICAgaWYgKGVuZE9mZnNldCA+IDAgJiYgZW5kT2Zmc2V0IDw9IHN0YXRpY19jYXN0PGlu
dD4oZW5kTm9kZS0+Y291bnRDaGlsZE5vZGVzKCkpKSB7Ci0gICAgICAgICAgICBlbmROb2RlID0g
ZW5kTm9kZS0+Y2hpbGROb2RlKGVuZE9mZnNldCAtIDEpOworICAgICAgICAgICAgZW5kTm9kZSA9
IGVuZE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KGVuZE9mZnNldCAtIDEpOwogICAgICAgICAgICAg
ZW5kT2Zmc2V0ID0gbGFzdE9mZnNldEluTm9kZShlbmROb2RlKTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCA2NGNlMzkwNTRmZDJm
ZmZjZWE5NDlmNmJjNzcyMzFkMzE4MzYzMTEwLi5lZDAwMGZhZDc2M2FiNmU0Y2M1ZGIyMzUxOTY3
YjUzOWU3NmZhOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBA
IC0xMDEzLDcgKzEwMTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgaW50IGxpbgogCiAgICAgaWYgKCFy
b290KSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGRvIHRoZSBzYW1lIGluIHByZXZpb3Vz
TGluZVBvc2l0aW9uLgotICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkTm9kZShwLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPnRy
YXZlcnNlVG9DaGlsZEF0KHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIG5v
ZGUgPSBjaGlsZCA/IGNoaWxkIDogbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKICAgICAgICAgUG9z
aXRpb24gcG9zaXRpb24gPSBuZXh0Um9vdElubGluZUJveENhbmRpZGF0ZVBvc2l0aW9uKG5vZGUs
IHZpc2libGVQb3NpdGlvbiwgZWRpdGFibGVUeXBlKTsKICAgICAgICAgaWYgKHBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KaW5kZXggNmQ0ZDY4ZWJjZDhjMDMzZmVlNTBjMmJhNTI4NTg3OTcwOWJjODlhNC4uZmZm
MjdiMTkyOGI2ZjIxNjlhOGM0YWIxYzBiYTFiZjc0NjYwOThkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMjU2Nyw3ICsyNTY3LDcgQEAg
TlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5n
ZSYgcmFuZ2UpCiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLT5lbmRP
ZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250
YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gc3RhcnRDb250YWluZXItPmNoaWxkTm9kZShzdGFydE9mZnNldCk7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHN0
YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoaW1n
VGFnKSkgewogICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyID0gZmls
ZVdyYXBwZXJGb3JFbGVtZW50KHRvRWxlbWVudChub2RlKSk7CiAgICAgICAgICAgICAgICAgTlNU
ZXh0QXR0YWNobWVudCogYXR0YWNobWVudCA9IFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5p
dFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01QYXRjaFN1cHBvcnQuY3BwCmluZGV4IDNmMmZhOWE5MGIxMWFhZmE3OTllMzkyNTRhNDAz
OTIyMjNmMDg4OWIuLjJhZTE1ZjU5OTFlOWUxMGIwMDUxZDA5MTAxN2NlZDJhZmI0Njc3M2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0zNzcs
MTAgKzM3NywxMSBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogICAgIH0KIAogICAgIC8vIDMu
IEluc2VydCBtaXNzaW5nIG5vZGVzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3TWFw
LnNpemUoKTsgKytpKSB7CisgICAgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgbm9kZSAmJiBpIDwgbmV3TWFwLnNpemUoKTsgKytp
LCBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobmV3TWFwW2ldLmZp
cnN0IHx8IG1lcmdlcy5jb250YWlucyhuZXdMaXN0W2ldLmdldCgpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIWluc2VydEJlZm9yZUFuZE1hcmtBc1VzZWQocGFyZW50Tm9k
ZSwgbmV3TGlzdFtpXS5nZXQoKSwgcGFyZW50Tm9kZS0+Y2hpbGROb2RlKGkpLCBlYykpCisgICAg
ICAgIGlmICghaW5zZXJ0QmVmb3JlQW5kTWFya0FzVXNlZChwYXJlbnROb2RlLCBuZXdMaXN0W2ld
LmdldCgpLCBub2RlLCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC0zODksNyArMzkwLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJl
bihDb250YWluZXJOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBWZWN0b3IKICAgICAgICAgaWYgKCFv
bGRNYXBbaV0uZmlyc3QpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBvbGRNYXBbaV0uZmlyc3QtPm1fbm9kZTsKLSAgICAgICAgTm9kZSogYW5jaG9y
Tm9kZSA9IHBhcmVudE5vZGUtPmNoaWxkTm9kZShvbGRNYXBbaV0uc2Vjb25kKTsKKyAgICAgICAg
Tm9kZSogYW5jaG9yTm9kZSA9IHBhcmVudE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KG9sZE1hcFtp
XS5zZWNvbmQpOwogICAgICAgICBpZiAobm9kZS5nZXQoKSA9PSBhbmNob3JOb2RlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238230</attachid>
            <date>2014-09-16 17:51:04 -0700</date>
            <delta_ts>2014-09-16 19:00:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136825-20140916175101.patch</filename>
            <type>text/plain</type>
            <size>28054</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk3Yzg0OTBiYTkxNDJj
YmZkYTBjYzk5OTJmZGI4ZDBhMTI5MGViMy4uZGIyZTVkM2Y2ODRmNzBhYmI4YTVmNTIwNmUzNmQ2
NTg3NTI2MzA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE0LTA5LTE2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIE5vZGU6OmNoaWxk
Tm9kZShpbmRleCkgdG8gdHJhdmVyc2VUb0NoaWxkQXQoaW5kZXgpIGZvciBjbGFyaXR5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4MjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFJlbmFtZSBOb2Rl
OjpjaGlsZE5vZGUoaW5kZXgpIHRvIHRyYXZlcnNlVG9DaGlsZEF0KGluZGV4KSB0byBtYWtlIGl0
CisgICAgICAgIGNsZWFyZXIgdGhhdCB0aGUgbWV0aG9kIGlzIGFjdHVhbGx5IHRyYXZlcnNpbmcg
dGhlIGNoaWxkcmVuIGFuZCB0aHVzCisgICAgICAgIHBvdGVudGlhbGx5IGV4cGVuc2l2ZS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gYXZvaWRzIGNhbGxpbmcgdHJhdmVyc2VUb0NoaWxkQXQo
KSBpbiBhIGNvdXBsZSBvZgorICAgICAgICBlYXNpbHkgYXZvaWRhYmxlIGNhc2VzLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgUmVtb3ZlIHN5bWJv
bCBmb3IgQ29udGFpbmVyTm9kZTo6Y2hpbGROb2RlKCkgYXMgaXQgd2FzIHJlbmFtZWQuIEl0IGRv
ZXMKKyAgICAgICAgbm90IHNlZW0gd2UgbmVlZCB0byBleHBvc2UgQ29udGFpbmVyTm9kZTo6dHJh
dmVyc2VUb0NoaWxkQXQoKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJp
bmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1h
cmtlcnM6YXR0cmlidXRlZDpdKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6XSk6
CisgICAgICAgIE1lY2hhbmljYWwgcmVuYW1pbmcuCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVy
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjp0cmF2ZXJzZVRvQ2hp
bGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjaGlsZE5vZGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjaGlsZE5v
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIC0gUmVuYW1lIE5v
ZGUgLyBDb250YWluZXJOb2RlJ3MgY2hpbGROb2RlKGluZGV4KSB0bworICAgICAgICAgIHRyYXZl
cnNlVG9DaGlsZEF0KGluZGV4KSB0byBtYWtlIGl0IGNsZWFyIHRoYXQgaXQgaXMgYWN0dWFsbHkK
KyAgICAgICAgICB0cmF2ZXJzaW5nIHRoZSBjaGlsZHJlbiBhbmQgdGh1cyBwb3RlbnRpYWxseSBl
eHBlbnNpdmUuCisgICAgICAgIC0gQ2xlYW4gdXAgdGhlIGltcGxlbWVudGF0aW9uIG9mIENvbnRh
aW5lck5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0KCkKKyAgICAgICAgICB0byBhdm9pZCB0aGUgdXNl
IG9mIGFuIGV4dHJhIHxpfCB2YXJpYWJsZS4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Y29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbik6
CisgICAgICAgIEF2b2lkIGNhbGxpbmcgdHJhdmVyc2VUb0NoaWxkQXQoLTEpLiBSZWx5aW5nIG9u
IHRoZSB1bnNpZ25lZCBhcmd1bWVudAorICAgICAgICB3cmFwcGluZyBhbmQgdGhlIG1ldGhvZCBy
ZXR1cm5pbmcgbnVsbCBpbiB0aGlzIGNhc2UgaXMgYSBiaXQgb2JzY3VyZQorICAgICAgICBhbmQg
Y2F1c2VzIHVubmVjZXNzYXJ5IHRyYXZlcnNhbCBvZiBhbGwgY2hpbGRyZW4uCisKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjpjb21wdXRlTm9kZUFmdGVyUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
OjpuZXh0KToKKyAgICAgICAgTWVjaGFuaWNhbCByZW5hbWluZyBhbmQgdXBkYXRlIHZhcmlhYmxl
IG5hbWVzIHRvIHN0b3AgdXNpbmcKKyAgICAgICAgYWJicmV2aWF0aW9ucyBhcyBwZXIgY29kaW5n
IHN0eWxlLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OlBvc2l0aW9uSXRlcmF0b3IpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aW5zZXJ0Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlV09mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlQm91bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRy
ZW5JblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJh
bERlbGV0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRJblByZU9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpuZXh0TGluZVBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW06CisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZSk6CisgICAgICAgIE1lY2hhbmljYWwgcmVuYW1pbmcuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3Vw
cG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKToKKyAgICAgICAgSXRlcmF0ZSBvdmVyIGNoaWxkcmVu
IHdoaWxlIGluY3JlbWVudGluZyB0aGUgfGl8IHZhcmlhYmxlIHRvIGF2b2lkCisgICAgICAgIGNh
bGxpbmcgdHJhdmVyc2VUb0NoaWxkQXQoaW5kZXgpIHJlcGVhdGVkbHkgYW5kIHRodXMgdHJhdmVy
c2luZyB0aGUKKyAgICAgICAgY2hpbGRyZW4gZnJvbSB0aGUgYmVnaW5uaW5nIGV2ZXJ5IHRpbWUu
CisKIDIwMTQtMDktMTYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNzM2NzAuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IDFhYTg2Y2YyOTJlNzA2NmU3ODI4OTgzNWFlOTJiYzFkYzVmOGJmYmEuLmIxM2Zh
YTI3ZjMwMWNjNmExZmMwNTU0ODg5OWNhZGJhNDA1MDVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC0xNjI2LDcgKzE2MjYsNiBAQCBfX1pOSzdXZWJDb3JlMTJUZXh0RW5jb2Rpbmc2ZGVjb2Rl
RVBLY21iUmIKIF9fWk5LN1dlYkNvcmUxMlRleHRJdGVyYXRvcjRub2RlRXYKIF9fWk5LN1dlYkNv
cmUxMlRleHRJdGVyYXRvcjVyYW5nZUV2CiBfX1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2RlMTVj
b3VudENoaWxkTm9kZXNFdgotX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9kZTljaGlsZE5vZGVF
agogX19aTks3V2ViQ29yZTEzR3JhcGhpY3NMYXllcjE4YWNjdW11bGF0ZWRPcGFjaXR5RXYKIF9f
Wk5LN1dlYkNvcmUxM0dyYXBoaWNzTGF5ZXIxOGdldERlYnVnQm9yZGVySW5mb0VSTlNfNUNvbG9y
RVJmCiBfX1pOSzdXZWJDb3JlMTNHcmFwaGljc0xheWVyMjZiYWNraW5nU3RvcmVNZW1vcnlFc3Rp
bWF0ZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCAwYzJlNmIxN2ZkZGY5N2RhMWQzMjg1YzMyNjZl
YTRiNmE3NjQ3MDFhLi4zMzEzZTRhODBkOWI3OTdmYWZhYzM5NDBjY2M5ZTg2NWExZmU1ZmFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUub3JkZXIKQEAgLTgxMzMsNyArODEzMyw2IEBAIF9fWk43V2ViQ29yZTVSYW5n
ZTEwc2VsZWN0Tm9kZUVQTlNfNE5vZGVFUmkKIF9fWk43V2ViQ29yZTVSYW5nZTE0c2V0U3RhcnRC
ZWZvcmVFUE5TXzROb2RlRVJpCiBfX1pOSzdXZWJDb3JlNE5vZGUxNmNvbXB1dGVOb2RlSW5kZXhF
dgogX19aTjdXZWJDb3JlNVJhbmdlOHNldFN0YXJ0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2Rl
RUVFaVJpCi1fX1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2RlOWNoaWxkTm9kZUVqCiBfX1pON1dl
YkNvcmVMMzBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXJFUktOU18xOFJhbmdlQm91bmRh
cnlQb2ludEVTMl8KIF9fWk43V2ViQ29yZTVSYW5nZTIxY29tcGFyZUJvdW5kYXJ5UG9pbnRzRVBO
U180Tm9kZUVpUzJfaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4Y29sbGFwc2VFYlJpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCA1MzBhODUzY2JkMDgyZTIyMTFjMTg2ZGE3YTY3NjNmYzljNTE4ZTgwLi40OTk5MDQwMmRk
NTc3M2UyNjZkZjBjNTg2YmYzYzQzNDViMjM1NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTExMzksNyArMTEz
OSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SCiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
aXQucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFTU0VSVChub2RlID09
IGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcigpKTsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSBp
dC5yYW5nZSgpLT5zdGFydE9mZnNldCgpOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VkTm9kZU5l
ZWRzQ2hhcmFjdGVyKG5vZGUtPmNoaWxkTm9kZShvZmZzZXQpKSkKKyAgICAgICAgICAgIGlmIChy
ZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3Rlcihub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQp
KSkKICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3Rlcik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTY2LDcgKzExNjYsNyBAQCBpbnQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uUmFuZwogICAgICAgICAgICAgQVNTRVJUKG5vZGUgPT0gaXQucmFuZ2UoKS0+ZW5k
Q29udGFpbmVyKGV4Y2VwdGlvbikpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IGl0LnJhbmdl
KCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbik7CiAKLSAgICAgICAgICAgIGlmIChyZXBsYWNlZE5v
ZGVOZWVkc0NoYXJhY3Rlcihub2RlLT5jaGlsZE5vZGUob2Zmc2V0KSkpCisgICAgICAgICAgICBp
ZiAocmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zm
c2V0KSkpCiAgICAgICAgICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGYzZjFhNmJiNWU5YTk2YjI1
ZjliY2Y2YTc4ZGMyMDU1MDZhZGNjYjkuLmNkZjEyNTE2MThkYzFiYTk1Y2RjNTdiNmJjNGY3ZDhk
OGE3N2U0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0x
ODQ0LDcgKzE4NDQsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0
KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgICAgICAgICAgICAg
W2F0dHJTdHJpbmcgcmVsZWFzZV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsK
KyAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0
KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAocmVwbGFjZWROb2RlKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocmVwbGFjZWROb2RlLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBp
ZiAob2JqICYmICFvYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggNDhiZDY2NzYwMTM0YjdkODQ5NzExNzEwYzIw
ZDcyMGQzN2YxYTM5ZS4uNDhiOWFlZTI3MGJlYzg5OWU5Zjc5NGIxMzQzMTg1NTg5MzNmM2NhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTExMDIsNyArMTEw
Miw3IEBAIHN0YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVw
bGFjZWROb2RlKQogICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQo
YXR0clN0cmluZywgbm9kZSwgbGlzdE1hcmtlclRleHQpOwogICAgICAgICAgICAgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBpdC50ZXh0KCkpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9kZS0+Y2hpbGRO
b2RlKG9mZnNldCk7CisgICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT50cmF2
ZXJzZVRvQ2hpbGRBdChvZmZzZXQpOwogICAgICAgICAgICAgTlNTdHJpbmcgKmF0dGFjaG1lbnRT
dHJpbmcgPSBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShyZXBsYWNlZE5vZGUpOwogICAgICAgICAg
ICAgaWYgKGF0dGFjaG1lbnRTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBOU1JhbmdlIGF0dHJT
dHJpbmdSYW5nZSA9IE5TTWFrZVJhbmdlKFthdHRyU3RyaW5nIGxlbmd0aF0sIFthdHRhY2htZW50
U3RyaW5nIGxlbmd0aF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDYz
ZTE3OTE3NWNjMTYwNjNjNTkzYzI5ZjVlNTQ4YTIyMDNkNmVkMTEuLmQ1Y2UwNWQyZmM2ZTA0NDMx
Y2VkNTI0ZWFhM2IxN2Q5NGI0MDk3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKQEAgLTkzOSwxMyArOTM5LDEyIEBAIHVuc2lnbmVkIENvbnRhaW5lck5vZGU6OmNvdW50Q2hp
bGROb2RlcygpIGNvbnN0CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1Ob2RlICpDb250YWluZXJO
b2RlOjpjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0CitOb2RlKiBDb250YWluZXJOb2Rl
Ojp0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBpOwotICAgIE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7Ci0gICAgZm9yIChpID0gMDsgbiAhPSAw
ICYmIGkgPCBpbmRleDsgaSsrKQotICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICBy
ZXR1cm4gbjsKKyAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBmb3IgKDsgY2hp
bGQgJiYgaW5kZXggPiAwOyAtLWluZGV4KQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpOworICAgIHJldHVybiBjaGlsZDsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGls
ZEluc2VydGlvbkV2ZW50cyhOb2RlJiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5o
CmluZGV4IDU1NjMzOTIzMmE5YmEyYWJkZGNhNTVkNGQ3NTY2YTJlNjE3ODkxYzMuLjVmMDRjMzNk
MmU5NzI1MTQ3MTZjNGZiMTc5Y2NiNmVjMGI4NDNlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaXJlY3RDaGls
ZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNldEZsYWcoRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxj
RmxhZyk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50Q2hpbGROb2Rlcygp
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogdHJhdmVyc2VUb0NoaWxkQXQodW5z
aWduZWQpIGNvbnN0OwogCiAgICAgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBu
ZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQ
VElPTik7CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwg
Tm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CkBA
IC0xOTIsMTEgKzE5MiwxMSBAQCBpbmxpbmUgdW5zaWduZWQgTm9kZTo6Y291bnRDaGlsZE5vZGVz
KCkgY29uc3QKICAgICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5jb3VudENoaWxkTm9k
ZXMoKTsKIH0KIAotaW5saW5lIE5vZGUqIE5vZGU6OmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK2lubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIHsKICAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOwor
ICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUodGhpcyktPnRyYXZlcnNlVG9DaGlsZEF0KGluZGV4
KTsKIH0KIAogaW5saW5lIE5vZGUqIE5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
aW5kZXggNTFiNmZjZWU5N2QyMWZkNjNlYWQwZDI5YjFjZTQzZDgyYzY5ZWFlNi4uZjQ2OWZlNWUw
ZDg4MmI1ZjE3OTVlOTRjZDJhYzIxOTIzNjZhZDM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC00MTcsNyAr
NDE3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNEb2N1bWVudFR5cGVOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbm9kZVR5cGUoKSA9PSBET0NVTUVOVF9UWVBFX05PREU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB1bnNpZ25lZCBjb3VudENoaWxkTm9kZXMoKSBjb25zdDsKLSAgICBOb2RlKiBjaGlsZE5vZGUo
dW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlVG9DaGlsZEF0KHVuc2ln
bmVkKSBjb25zdDsKIAogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXgg
NzJjZDZkNTZiYzA3MjZjMjYyZWJiOTY0OTExYzZmNDZmYTllY2JiMS4uMjMyZDc3NzAzYTg4ODNk
ZmFiYTMwNWVkZWE3ODk4OWJlNTNkNjZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0y
NDYsNyArMjQ2LDcgQEAgTm9kZSogUG9zaXRpb246OmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24o
KSBjb25zdAogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46CiAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUtPmxhc3RDaGlsZCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldElu
QW5jaG9yOgotICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGUobV9vZmZzZXQg
LSAxKTsgLy8gLTEgY29udmVydHMgdG8gY2hpbGROb2RlKCh1bnNpZ25lZCktMSkgYW5kIHJldHVy
bnMgbnVsbC4KKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID8gbV9hbmNob3JOb2RlLT50cmF2ZXJz
ZVRvQ2hpbGRBdChtX29mZnNldCAtIDEpIDogbnVsbHB0cjsKICAgICBjYXNlIFBvc2l0aW9uSXNC
ZWZvcmVBbmNob3I6CiAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnByZXZpb3VzU2libGlu
ZygpOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQW5jaG9yOgpAQCAtMjY3LDcgKzI2Nyw3IEBA
IE5vZGUqIFBvc2l0aW9uOjpjb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSBjb25zdAogICAgIGNh
c2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2Ug
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgotICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5j
aGlsZE5vZGUobV9vZmZzZXQpOworICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT50cmF2ZXJz
ZVRvQ2hpbGRBdChtX29mZnNldCk7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgog
ICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yOgpAQCAtMjk4LDE3ICsyOTgsMTYgQEAgRWxlbWVudCogUG9zaXRpb246OmVsZW1l
bnQoKSBjb25zdAogCiBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlw
ZSBtb3ZlVHlwZSkgY29uc3QKIHsKLSAgICBOb2RlKiBuID0gZGVwcmVjYXRlZE5vZGUoKTsKLSAg
ICBpZiAoIW4pCisgICAgTm9kZSogbm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBpbnQgbyA9IGRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CisgICAgaW50IG9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7
CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdl
IHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIuCi0gICAgQVNTRVJUKG8gPj0gMCk7CisgICAgQVNT
RVJUKG9mZnNldCA+PSAwKTsKIAotICAgIGlmIChvID4gMCkgewotICAgICAgICBOb2RlKiBjaGls
ZCA9IG4tPmNoaWxkTm9kZShvIC0gMSk7Ci0gICAgICAgIGlmIChjaGlsZCkKKyAgICBpZiAob2Zm
c2V0ID4gMCkgeworICAgICAgICBpZiAoTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hp
bGRBdChvZmZzZXQgLSAxKSkKICAgICAgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0
ZXJOb2RlKGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQg
bWlnaHQgYmUgMDoKQEAgLTMxOCwzNSArMzE3LDM1IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2
aW91cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgICAgICAvLyAgICAgIEdv
aW5nIGZyb20gMSB0byAwIGlzIGNvcnJlY3QuCiAgICAgICAgIHN3aXRjaCAobW92ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBDb2RlUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG4sIG8gLSAxKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0IC0gMSk7CiAgICAgICAgIGNhc2UgQ2hhcmFj
dGVyOgotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihuLCB1
bmNoZWNrZWRQcmV2aW91c09mZnNldChuLCBvKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KG5vZGUs
IG9mZnNldCkpOwogICAgICAgICBjYXNlIEJhY2t3YXJkRGVsZXRpb246Ci0gICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG4sIHVuY2hlY2tlZFByZXZpb3VzT2Zm
c2V0Rm9yQmFja3dhcmREZWxldGlvbihuLCBvKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0Rm9yQmFj
a3dhcmREZWxldGlvbihub2RlLCBvZmZzZXQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IGZpbmRQYXJlbnQobik7CisgICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gZmluZFBhcmVudChub2RlKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0
dXJuICp0aGlzOwogCi0gICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJl
bnQsIG4tPmNvbXB1dGVOb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSk7CiB9CiAKIFBvc2l0
aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG1vdmVUeXBlICE9IEJhY2t3YXJkRGVsZXRpb24pOwogCi0gICAgTm9kZSogbiA9
IGRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFuKQorICAgIE5vZGUqIG5vZGUgPSBkZXByZWNh
dGVkTm9kZSgpOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAg
aW50IG8gPSBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGludCBvZmZzZXQgPSBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNo
b3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBlYXJsaWVyLgotICAgIEFT
U0VSVChvID49IDApOworICAgIEFTU0VSVChvZmZzZXQgPj0gMCk7CiAKLSAgICBOb2RlKiBjaGls
ZCA9IG4tPmNoaWxkTm9kZShvKTsKLSAgICBpZiAoY2hpbGQgfHwgKCFuLT5oYXNDaGlsZE5vZGVz
KCkgJiYgbyA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pKSkgeworICAgIE5vZGUqIGNoaWxkID0g
bm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0KTsKKyAgICBpZiAoY2hpbGQgfHwgKCFub2Rl
LT5oYXNDaGlsZE5vZGVzKCkgJiYgb2Zmc2V0IDwgbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSkp
KSB7CiAgICAgICAgIGlmIChjaGlsZCkKICAgICAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUoY2hpbGQpOwogCkBAIC0zNTUsMTQgKzM1NCwxNCBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgICAgICAv
LyAgICAgIEdvaW5nIGZvcndhcmQgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgaXMgY29ycmVjdC4K
ICAgICAgICAgLy8gICAyKSBUaGUgbmV3IG9mZnNldCBpcyBhIGJvZ3VzIG9mZnNldCBsaWtlICg8
YnI+LCAxKSwgYW5kIHRoZXJlIGlzIG5vIGNoaWxkLgogICAgICAgICAvLyAgICAgIEdvaW5nIGZy
b20gMCB0byAxIGlzIGNvcnJlY3QuCi0gICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obiwgKG1vdmVUeXBlID09IENoYXJhY3RlcikgPyB1bmNoZWNrZWROZXh0T2Zmc2V0
KG4sIG8pIDogbyArIDEpOworICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKG5vZGUsIChtb3ZlVHlwZSA9PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4dE9mZnNldChu
b2RlLCBvZmZzZXQpIDogb2Zmc2V0ICsgMSk7CiAgICAgfQogCi0gICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gZmluZFBhcmVudChuKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBmaW5k
UGFyZW50KG5vZGUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAK
LSAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBhcmVudCwgbi0+Y29tcHV0
ZU5vZGVJbmRleCgpICsgMSk7CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOwogfQogCiBpbnQgUG9zaXRp
b246OnVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KGNvbnN0IE5vZGUqIG4sIGludCBjdXJyZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgKaW5kZXggN2FmODk3NzU5MWQxNmMyOTc5
MzE4OTBlYmQxYWUwNjljMmQ0N2YzNi4uOGUwZWUxOWRlNDJjZTFlN2FiMDU3ZGMyODVhMTQ5ZmY2
YzIyOTUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCkBAIC00NSw3ICs0
NSw3IEBAIHB1YmxpYzoKIAogICAgIFBvc2l0aW9uSXRlcmF0b3IoY29uc3QgUG9zaXRpb24mIHBv
cykKICAgICAgICAgOiBtX2FuY2hvck5vZGUocG9zLmFuY2hvck5vZGUoKSkKLSAgICAgICAgLCBt
X25vZGVBZnRlclBvc2l0aW9uSW5BbmNob3IobV9hbmNob3JOb2RlLT5jaGlsZE5vZGUocG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpKQorICAgICAgICAsIG1fbm9kZUFmdGVyUG9zaXRpb25J
bkFuY2hvcihtX2FuY2hvck5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKSkKICAgICAgICAgLCBtX29mZnNldEluQW5jaG9yKG1fbm9kZUFmdGVyUG9z
aXRpb25JbkFuY2hvciA/IDAgOiBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICB7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggZGNhODc2MzNlNzMxMzE4YzFhZjQ1Yzk1ZTFm
NjdiMmMwOGUxYTMyMi4uMWRjMmM5MjVlZjc4NjllMjk1ZThkNDcxMjljMzRkOTQ2NWQ3ZjJjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCB2b2lkIFJhbmdlOjppbnNl
cnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgICAgIGNvbnRhaW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgICAgIFJlZlB0cjxO
b2RlPiBmaXJzdEluc2VydGVkQ2hpbGQgPSBuZXdOb2RlVHlwZSA9PSBOb2RlOjpET0NVTUVOVF9G
UkFHTUVOVF9OT0RFID8gbmV3Tm9kZS0+Zmlyc3RDaGlsZCgpIDogbmV3Tm9kZTsKICAgICAgICAg
UmVmUHRyPE5vZGU+IGxhc3RJbnNlcnRlZENoaWxkID0gbmV3Tm9kZVR5cGUgPT0gTm9kZTo6RE9D
VU1FTlRfRlJBR01FTlRfTk9ERSA/IG5ld05vZGUtPmxhc3RDaGlsZCgpIDogbmV3Tm9kZTsKLSAg
ICAgICAgUmVmUHRyPE5vZGU+IGNoaWxkQWZ0ZXJJbnNlcnRlZENvbnRlbnQgPSBjb250YWluZXIt
PmNoaWxkTm9kZShtX3N0YXJ0Lm9mZnNldCgpKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGNoaWxk
QWZ0ZXJJbnNlcnRlZENvbnRlbnQgPSBjb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KG1fc3Rh
cnQub2Zmc2V0KCkpOwogICAgICAgICBjb250YWluZXItPmluc2VydEJlZm9yZShuZXdOb2RlLnJl
bGVhc2UoKSwgY2hpbGRBZnRlckluc2VydGVkQ29udGVudC5nZXQoKSwgZWMpOwogICAgICAgICBp
ZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBOb2RlKiBS
YW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERTogewog
ICAgICAgICAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICBOb2RlKiBjaGlsZEJlZm9yZSA9IG4tPmNoaWxkTm9kZShvZmZzZXQgLSAxKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbi0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0
IC0gMSk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkQmVmb3JlKQogICAgICAgICAgICAgICAgIGVj
ID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gY2hpbGRCZWZvcmU7CkBAIC0x
NTY4LDcgKzE1NjgsNyBAQCBOb2RlKiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyKCktPm9mZnNldEluQ2hhcmFjdGVy
cygpKQogICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKTsKLSAgICBpZiAoTm9kZSog
Y2hpbGQgPSBtX3N0YXJ0LmNvbnRhaW5lcigpLT5jaGlsZE5vZGUobV9zdGFydC5vZmZzZXQoKSkp
CisgICAgaWYgKE5vZGUqIGNoaWxkID0gbV9zdGFydC5jb250YWluZXIoKS0+dHJhdmVyc2VUb0No
aWxkQXQobV9zdGFydC5vZmZzZXQoKSkpCiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICBpZiAo
IW1fc3RhcnQub2Zmc2V0KCkpCiAgICAgICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lcigpOwpA
QCAtMTU4Niw3ICsxNTg2LDcgQEAgTm9kZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2VuZC5jb250YWluZXIoKS0+b2Zmc2V0SW5DaGFy
YWN0ZXJzKCkpCiAgICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihtX2VuZC5jb250YWluZXIoKSk7Ci0gICAgaWYgKE5vZGUqIGNoaWxkID0gbV9lbmQuY29u
dGFpbmVyKCktPmNoaWxkTm9kZShtX2VuZC5vZmZzZXQoKSkpCisgICAgaWYgKE5vZGUqIGNoaWxk
ID0gbV9lbmQuY29udGFpbmVyKCktPnRyYXZlcnNlVG9DaGlsZEF0KG1fZW5kLm9mZnNldCgpKSkK
ICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihtX2VuZC5jb250YWluZXIoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2VCb3VuZGFyeVBvaW50LmgKaW5kZXggODA5MjFkMmU2YTY5Y2E2ODc0OTBiOWZkNDVmZjlmOWJm
NjY0MTkyZS4uNzg0ZmE0NTNiNDhkYzMyOTI3Nzk1YmRiNzE0MTUxOWZiNTczZjRlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtMTIxLDcgKzEyMSw3IEBAIGlu
bGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFp
bmVyLCBpbnQgb2Zmc2V0LCBOb2RlCiB7CiAgICAgQVNTRVJUKGNvbnRhaW5lcik7CiAgICAgQVNT
RVJUKG9mZnNldCA+PSAwKTsKLSAgICBBU1NFUlQoY2hpbGRCZWZvcmUgPT0gKG9mZnNldCA/IGNv
bnRhaW5lci0+Y2hpbGROb2RlKG9mZnNldCAtIDEpIDogMCkpOworICAgIEFTU0VSVChjaGlsZEJl
Zm9yZSA9PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAx
KSA6IDApKTsKICAgICBtX2NvbnRhaW5lck5vZGUgPSBjb250YWluZXI7CiAgICAgbV9vZmZzZXRJ
bkNvbnRhaW5lciA9IG9mZnNldDsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBjaGlsZEJl
Zm9yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1h
bmQuY3BwCmluZGV4IGExZjU3NzY0N2VkNzg0YWE0NWRlY2YwMjEyYTc1MDAzOGMyYWMzMTguLjU1
NDg3MDUzMmI5MjFhNmFiMDk3MWNlNWU3ODhiYzkwMzFhNzI2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcApAQCAtMTE0LDcgKzEx
NCw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0g
ZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKQogICAgICAgICAgICAg
c3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwog
ICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKSB7Ci0gICAg
ICAgIE5vZGUqIGNoaWxkQXRPZmZzZXQgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShwb3MuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgIE5vZGUqIGNoaWxkQXRPZmZzZXQgPSBzdGFy
dE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
ICAgICAgICAgc3RhcnROb2RlID0gY2hpbGRBdE9mZnNldCA/IGNoaWxkQXRPZmZzZXQgOiBOb2Rl
VHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKaW5kZXggOWI0OGIyZDk2MjJiNTY4MzNiM2U4NWE2MjQ3NmJhM2I1Mjc5MzI1Yy4uMWQ4YTdm
YjcwZjgzNWY5YmFhZWNhNDBlZTgxMDllOTgxMTk2YmIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM5Niw3ICszOTYsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSwgUGFzc1JlZlB0cjxDb250YWluZQogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3Zl
Q2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPj4gY2hpbGRyZW47Ci0gICAgTm9k
ZSogY2hpbGQgPSBub2RlLT5jaGlsZE5vZGUoZnJvbSk7CisgICAgTm9kZSogY2hpbGQgPSBub2Rl
LT50cmF2ZXJzZVRvQ2hpbGRBdChmcm9tKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9tOyBj
aGlsZCAmJiBpIDwgdG87IGkrKywgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMzVhYTNiOWYyMTM4NDljZGE3ZmUw
YWIwM2E3Njg1YmY2ODAxZjY2NC4uYTAwZGUxNTQ4YTdlZDIzZTlkZjIwZWE1ZGQ1NjIyZTUxOGM0
ZTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5v
ZGUodGV4dCwgc3RhcnRPZmZzZXQsIHRleHQtPmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwogICAg
ICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5jaGls
ZE5vZGUoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPnRy
YXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChzdGFydE5vZGUgPT0gbV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpICYmIHN0
YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gdG9UZXh0
KG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRl
eCA2N2NjODZjMzU2NjExZjViNzEzYWQ5MTgxYjNiMjE3NTQ5MzAzM2VhLi43ZmI3NTAzOGM5NDU4
NjQwMWE3NzBjMTM3MjkwNjY3YTBkNTUxYjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTI2
Nyw3ICsyNjcsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAgICAgcmVmTm9kZSA9IHN0YXJ0QmxvY2stPmZpcnN0Q2hpbGQoKTsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpID09IHN0YXJ0QmxvY2sgJiYgbmVzdE5ld0Jsb2NrKSB7Ci0gICAgICAgICAgICByZWZOb2Rl
ID0gc3RhcnRCbG9jay0+Y2hpbGROb2RlKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOworICAgICAgICAgICAgcmVmTm9kZSA9IHN0YXJ0QmxvY2stPnRyYXZlcnNl
VG9DaGlsZEF0KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHJlZk5vZGUpOyAvLyBtdXN0IGJlIHRydWUgb3Igd2UnZCBiZSBp
biB0aGUgZW5kIG9mIGJsb2NrIGNhc2UKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWZO
b2RlID0gaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBlOTc2M2JjMWIxZmJmZmRkOWVjYzIzNGM4ODZh
MTBmMDIwNjI4NTFmLi5kOGMyNTEzYWFiNWM2Zjg2MTMxYjA4MzY1YjM4YmNkMjYyMzAzOTRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xOTMsNyArMTkzLDcg
QEAgc3RhdGljIHVuc2lnbmVkIGRlcHRoQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUmIG5v
ZGUpCiBzdGF0aWMgTm9kZSogbmV4dEluUHJlT3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMo
Tm9kZSYgcmFuZ2VFbmRDb250YWluZXIsIGludCByYW5nZUVuZE9mZnNldCkKIHsKICAgICBpZiAo
cmFuZ2VFbmRPZmZzZXQgPj0gMCAmJiAhcmFuZ2VFbmRDb250YWluZXIub2Zmc2V0SW5DaGFyYWN0
ZXJzKCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIG5leHQgPSByYW5nZUVuZENvbnRhaW5lci5jaGls
ZE5vZGUocmFuZ2VFbmRPZmZzZXQpKQorICAgICAgICBpZiAoTm9kZSogbmV4dCA9IHJhbmdlRW5k
Q29udGFpbmVyLnRyYXZlcnNlVG9DaGlsZEF0KHJhbmdlRW5kT2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiBuZXh0OwogICAgIH0KICAgICBmb3IgKE5vZGUqIG5vZGUgPSAmcmFuZ2VFbmRDb250
YWluZXI7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpIHsKQEAg
LTExMTEsNyArMTExMSw3IEBAIE5vZGUqIFRleHRJdGVyYXRvcjo6bm9kZSgpIGNvbnN0CiAgICAg
aWYgKG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKQogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICAKLSAgICByZXR1cm4gbm9kZS0+Y2hpbGROb2RlKHRleHRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CisgICAgcmV0dXJuIG5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHRleHRSYW5nZS0+c3RhcnRPZmZz
ZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tCkBAIC0xMTQ3LDEzICsxMTQ3LDEzIEBAIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3Io
Y29uc3QgUmFuZ2UmIHJhCiAKICAgICBpZiAoIXN0YXJ0Tm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJz
KCkpIHsKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXJ0Tm9kZS0+Y291bnRDaGlsZE5vZGVzKCkpKSB7Ci0gICAgICAgICAg
ICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShzdGFydE9mZnNldCk7CisgICAgICAg
ICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0
KTsKICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICBp
ZiAoIWVuZE5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKSB7CiAgICAgICAgIGlmIChlbmRPZmZz
ZXQgPiAwICYmIGVuZE9mZnNldCA8PSBzdGF0aWNfY2FzdDxpbnQ+KGVuZE5vZGUtPmNvdW50Q2hp
bGROb2RlcygpKSkgewotICAgICAgICAgICAgZW5kTm9kZSA9IGVuZE5vZGUtPmNoaWxkTm9kZShl
bmRPZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIGVuZE5vZGUgPSBlbmROb2RlLT50cmF2ZXJzZVRv
Q2hpbGRBdChlbmRPZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGVuZE9mZnNldCA9IGxhc3RPZmZz
ZXRJbk5vZGUoZW5kTm9kZSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVVbml0cy5jcHAKaW5kZXggNjRjZTM5MDU0ZmQyZmZmY2VhOTQ5ZjZiYzc3MjMxZDMx
ODM2MzExMC4uZWQwMDBmYWQ3NjNhYjZlNGNjNWRiMjM1MTk2N2I1MzllNzZmYTk5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTAxMyw3ICsxMDEzLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24sIGludCBsaW4KIAogICAgIGlmICghcm9vdCkgewogICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBkbyB0aGUgc2FtZSBpbiBwcmV2aW91c0xpbmVQb3NpdGlvbi4KLSAgICAg
ICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZE5vZGUocC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChwLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBub2RlID0gY2hpbGQgPyBjaGlsZCA6
IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gbmV4
dFJvb3RJbmxpbmVCb3hDYW5kaWRhdGVQb3NpdGlvbihub2RlLCB2aXNpYmxlUG9zaXRpb24sIGVk
aXRhYmxlVHlwZSk7CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDUxOGU0ZmE5
OWU0MmI3YTkxYzNlZWJjYTY3NzhhMjk4M2MyMjkzNGMuLjhiYjc0OTZiOTVlMjQwMjIxZjRlN2E2
YjNkMzg5YmY0MTdkMjgzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KQEAgLTI1NjksNyArMjU2OSw3IEBAIE5TQXR0cmlidXRlZFN0cmluZyAq
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICBp
bnQgZW5kT2Zmc2V0ID0gY3VycmVudFRleHRSYW5nZS0+ZW5kT2Zmc2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoc3RhcnRDb250YWluZXIgPT0gZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNl
dCA9PSBlbmRPZmZzZXQgLSAxKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29u
dGFpbmVyLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IHN0YXJ0Q29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChzdGFydE9mZnNldCk7CiAgICAgICAg
ICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKICAgICAgICAgICAg
ICAgICBOU0ZpbGVXcmFwcGVyKiBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yRWxlbWVudCh0
b0VsZW1lbnQobm9kZSkpOwogICAgICAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQqIGF0dGFj
aG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBwZXI6Zmls
ZVdyYXBwZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cAppbmRleCAzZjJmYTlhOTBiMTFhYWZhNzk5ZTM5MjU0YTQwMzkyMjIzZjA4ODliLi42NzJlNWJl
NmRkZGNiOWVhMTY5NmExNTk4MGRmZGZkZmE4YTgwMTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcApAQCAtMzc3LDEwICszNzcsMTEgQEAgYm9vbCBE
T01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbihDb250YWluZXJOb2RlKiBwYXJlbnRO
b2RlLCBjb25zdCBWZWN0b3IKICAgICB9CiAKICAgICAvLyAzLiBJbnNlcnQgbWlzc2luZyBub2Rl
cy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld01hcC5zaXplKCk7ICsraSkgeworICAg
IE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgbm9kZSAmJiBpIDwgbmV3TWFwLnNpemUoKTsgKytpLCBub2RlID0gbm9kZS0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobmV3TWFwW2ldLmZpcnN0IHx8IG1lcmdlcy5jb250
YWlucyhuZXdMaXN0W2ldLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoIWluc2VydEJlZm9yZUFuZE1hcmtBc1VzZWQocGFyZW50Tm9kZSwgbmV3TGlzdFtpXS5nZXQo
KSwgcGFyZW50Tm9kZS0+Y2hpbGROb2RlKGkpLCBlYykpCisgICAgICAgIGlmICghaW5zZXJ0QmVm
b3JlQW5kTWFya0FzVXNlZChwYXJlbnROb2RlLCBuZXdMaXN0W2ldLmdldCgpLCBub2RlLCBlYykp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zODksNyArMzkwLDcgQEAg
Ym9vbCBET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbihDb250YWluZXJOb2RlKiBw
YXJlbnROb2RlLCBjb25zdCBWZWN0b3IKICAgICAgICAgaWYgKCFvbGRNYXBbaV0uZmlyc3QpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBvbGRNYXBb
aV0uZmlyc3QtPm1fbm9kZTsKLSAgICAgICAgTm9kZSogYW5jaG9yTm9kZSA9IHBhcmVudE5vZGUt
PmNoaWxkTm9kZShvbGRNYXBbaV0uc2Vjb25kKTsKKyAgICAgICAgTm9kZSogYW5jaG9yTm9kZSA9
IHBhcmVudE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KG9sZE1hcFtpXS5zZWNvbmQpOwogICAgICAg
ICBpZiAobm9kZS5nZXQoKSA9PSBhbmNob3JOb2RlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
aGVhZFRhZykpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>