<?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>213333</bug_id>
          
          <creation_ts>2020-06-17 23:52:55 -0700</creation_ts>
          <short_desc>Text manipulation should observe adjacent elements with new renderer together</short_desc>
          <delta_ts>2020-06-26 09:42:22 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>213318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>aestes</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1663813</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-17 23:52:55 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663816</commentid>
    <comment_count>1</comment_count>
      <attachid>402190</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-18 00:26:48 -0700</bug_when>
    <thetext>Created attachment 402190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663884</commentid>
    <comment_count>2</comment_count>
      <attachid>402190</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-06-18 09:03:58 -0700</bug_when>
    <thetext>Comment on attachment 402190
Patch

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

&gt; Source/WebCore/dom/Node.h:675
&gt; +    bool m_isManipulated { false };

This overall approach seems reasonable to me, but we should avoid making Node larger (dump-class-layout on WebCore::Node with release  shows 72 bytes with no padding). We should probably put it in NodeRareData instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663919</commentid>
    <comment_count>3</comment_count>
      <attachid>402190</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-18 10:35:22 -0700</bug_when>
    <thetext>Comment on attachment 402190
Patch

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

&gt;&gt; Source/WebCore/dom/Node.h:675
&gt;&gt; +    bool m_isManipulated { false };
&gt; 
&gt; This overall approach seems reasonable to me, but we should avoid making Node larger (dump-class-layout on WebCore::Node with release  shows 72 bytes with no padding). We should probably put it in NodeRareData instead.

That’s right. We must not add this bool to Node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663926</commentid>
    <comment_count>4</comment_count>
      <attachid>402216</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-18 10:52:05 -0700</bug_when>
    <thetext>Created attachment 402216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663927</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-18 10:55:29 -0700</bug_when>
    <thetext>Moved m_isManipulated to NodeRareData and reduced size of m_connectedFrameCount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664708</commentid>
    <comment_count>6</comment_count>
      <attachid>402216</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-06-19 23:56:12 -0700</bug_when>
    <thetext>Comment on attachment 402216
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        To fix this issue completely, this patch adds a property isManipulated to NodeRareData. Now 
&gt; +        TextManipulationController can know the state of all types of Nodes and thus can skip the manipulated Nodes 
&gt; +        during observation.

Hm... using a bit in NodeRareData isn&apos;t great because
allocating NodeRareData would consume quite a bit of memory for each element.
Why not just replace m_manipulatedElements with m_manipulatedNodes?

Since we never de-reference objects in m_manipulatedElements, it&apos;s okay to store a stale pointer.
We could also make it void* or some kind of a new smart pointer type that disallows dereferencing if we wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664869</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-21 12:36:05 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #6)
&gt; Hm... using a bit in NodeRareData isn&apos;t great because
&gt; allocating NodeRareData would consume quite a bit of memory for each element.
&gt; Why not just replace m_manipulatedElements with m_manipulatedNodes?

That sounds smart.

&gt; Since we never de-reference objects in m_manipulatedElements, it&apos;s okay to
&gt; store a stale pointer.

I don’t think that’s right.

As far as I know, there is *nothing* safe you can do with pointers to deleted objects, even if they are not dereferenced, except maybe comparing to null. For example, comparing a pointer to a deleted object with a pointer to another object could give an incorrect result. A stale pointer can happen to be equal to a pointer to a new object that is allocated re-using the same memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664887</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-06-21 13:39:31 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; (In reply to Ryosuke Niwa from comment #6)
&gt; &gt; Since we never de-reference objects in m_manipulatedElements, it&apos;s okay to
&gt; &gt; store a stale pointer.
&gt; 
&gt; I don’t think that’s right.
&gt; 
&gt; As far as I know, there is *nothing* safe you can do with pointers to
&gt; deleted objects, even if they are not dereferenced, except maybe comparing
&gt; to null. For example, comparing a pointer to a deleted object with a pointer
&gt; to another object could give an incorrect result. A stale pointer can happen
&gt; to be equal to a pointer to a new object that is allocated re-using the same
&gt; memory.

Sure, but that&apos;s still safe in this case. The worst thing that could happen is that we&apos;d mistakenly think the content had already been manipulated and fail to notify the client. It&apos;s still safe in the sense of security guarantee although the program may still misbehave (by not reacting to newly inserted content) if we had such a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664889</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-21 13:42:46 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; It&apos;s still safe in the sense of security
&gt; guarantee although the program may still misbehave (by not reacting to newly
&gt; inserted content) if we had such a bug.

OK, but could we use something like WeakPtr and have predictable behavior instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665175</commentid>
    <comment_count>10</comment_count>
      <attachid>402511</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-22 14:04:18 -0700</bug_when>
    <thetext>Created attachment 402511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665179</commentid>
    <comment_count>11</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-22 14:07:00 -0700</bug_when>
    <thetext>Uploaded a new patch using m_manipulatedNodes and removing node from set when node is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666211</commentid>
    <comment_count>12</comment_count>
      <attachid>402511</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-06-25 14:02:22 -0700</bug_when>
    <thetext>Comment on attachment 402511
Patch

r=me

I slightly prefer the rare data solution, since I like it when you don&apos;t have to worry about doing interesting pointer safety things in your destructor. Also, you only pay the memory cost when you use the feature, which won&apos;t happen on most pages.

That said, I think this approach works, and resolves all review comments so far. We can always discuss the rare data approach more when we have a chance, and reconsider it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666322</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-06-25 17:40:52 -0700</bug_when>
    <thetext>I think the long term solution is to add more bit flags directly on Node and/or make it possible to create a WeakPtr to Node. I have vague plans for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666473</commentid>
    <comment_count>14</comment_count>
      <attachid>402873</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-06-26 09:18:12 -0700</bug_when>
    <thetext>Created attachment 402873
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666484</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-26 09:41:19 -0700</bug_when>
    <thetext>Committed r263563: &lt;https://trac.webkit.org/changeset/263563&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402873.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666485</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-26 09:42:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/64809758&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666486</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-26 09:42:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/64809761&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402190</attachid>
            <date>2020-06-18 00:26:48 -0700</date>
            <delta_ts>2020-06-18 10:52:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213333-20200618002647.patch</filename>
            <type>text/plain</type>
            <size>18527</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI0YTE0M2FjNTM2MWI0
MGQ4ZjE0MmM0MmIyYzlhNzdhODYyZGU1MS4uMjZlNzllMGNhZjc4ZWZmNmNjMDBjNWNhNWIxZDQw
N2ZiNjhmZTIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIwLTA2LTE3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9u
IHNob3VsZCBvYnNlcnZlIGFkamFjZW50IGVsZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyIHRvZ2V0
aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMz
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBvbmx5IGtlZXBzIHRyYWNrIG9mIG1hbmlwdWxhdGVkIEVs
ZW1lbnRzLiBGb3Igb3RoZXIgdHlwZXMgb2YgTm9kZSwgbGlrZSBUZXh0LCAKKyAgICAgICAgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgZG9lcyBub3QgbWFyayB0aGVtIGFzIG1hbmlwdWxhdGVk
IGFuZCBtYXkgbWFuaXB1bGF0ZSBpdCBhZ2Fpbi4gcjI2MzEzMiB0cmllZCB0byBzb2x2ZQorICAg
ICAgICB0aGUgcHJvYmxlbSBieSBtYXJraW5nIEVsZW1lbnQgd2l0aCBvbmx5IG1hbmlwdWxhdGVk
IGNoaWxkcmVuIGFzIG1hbmlwdWxhdGVkLCBidXQgaXQgZGlkIG5vdCBpdGVyYXRlIGFsbCAKKyAg
ICAgICAgY2hpbGRyZW4gb2YgRWxlbWVudC4gU28sIGlmIG9uZSBFbGVtZW50IGhhcyBjaGlsZHJl
biBpbiBkaWZmZXJlbnQgcGFyYWdyYXBocywgaXQgbWF5IGZhaWwgdG8gbWFyayB0aGUgRWxlbWVu
dCAKKyAgICAgICAgbWFuaXB1bGF0ZWQuIFNlZSB1cGRhdGVkIHRlc3QuCisgICAgICAgIFRvIGZp
eCB0aGlzIGlzc3VlIGNvbXBsZXRlbHksIHRoaXMgcGF0Y2ggYWRkcyBhIHByb3BlcnR5IGlzTWFu
aXB1bGF0ZWQgdG8gTm9kZS4gTm93IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyCisgICAgICAg
IGNhbiBrbm93IHRoZSBzdGF0ZSBvZiBhbGwgdHlwZXMgb2YgTm9kZXMuIEl0IGNhbiBza2lwIHRo
ZSBtYW5pcHVsYXRlZCBOb2RlcyBkdXJpbmcgb2JzZXJ2YXRpb24uCisKKyAgICAgICAgRm9yIGVs
ZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyLCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBvYnNl
cnZlcyB0aGVtIG9uZSBieSBvbmUuIEhvd2V2ZXIsIGFkamFjZW50IGVsZW1lbnRzCisgICAgICAg
IGNhbiBiZSBpbiB0aGUgc2FtZSBwYXJhZ3JhcGgsIGlmIHRoZXJlIGlzIG5vIGRlbGltaXRlciBp
biB0aGVpciB0ZXh0LCBhbmQgc2hvdWxkIGJlIG9ic2VydmVkIHRvZ2V0aGVyLiBUbyBzb2x2ZSAK
KyAgICAgICAgdGhpcyBwcm9ibGVtLCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBub3cgc3Rh
cnRzIG9ic2VydmluZyBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdGhlc2UgZWxlbWVudHMu
IElmIGEKKyAgICAgICAgTm9kZSBpbiByYW5nZSBpcyBtYW5pcHVsYXRlZCwgc3BsaXQgdGhlIHBh
cmFncnBoIHRoZXJlLiBUaGlzIG1ha2VzIHN1cmUgY29udGVudCBpbiBwYXJhZ3JhcGggaXMgbm90
IG1hbmlwdWxhdGVkLgorICAgICAgICBSZWxldmFudCB0ZXN0IGlzIHVwZGF0ZWQgZm9yIHRoaXMg
bmV3IGJlaGF2aW9yLgorCisgICAgICAgIFRlc3RzOiBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4
dE1hbmlwdWxhdGlvbkZpbmROZXdseURpc3BsYXllZFBhcmFncmFwaAorICAgICAgICAgICAgICAg
VGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJhY3RpbmdN
YW5pcHVsYXRlZFRleHRBZnRlck1hbmlwdWxhdGlvbgorCisgICAgICAgICogZG9tL05vZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzTWFuaXB1bGF0ZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0SXNNYW5pcHVsYXRlZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVP
YnNlcnZhdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6dXBkYXRlSW5zZXJ0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlUG9zaXRp
b25UdXBsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlSGFzaGFibGVQb3NpdGlv
blJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmg6CisKIDIwMjAtMDYtMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgcXVpa3IuY29tOiB1bmFibGUgdG8gc2VsZWN0IGl0ZW0gZnJvbSBkcm9w
ZG93bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKaW5kZXggNDMxY2IzNjRkYjRjZDMwNTk0M2JiM2EzMmNlYjk4YmI4N2Y0
ZTI1NC4uYTg0ZjgxMWEwMThmYTk3NjU2ZjdkMGRiZTBhMDUzZTU0OWQyMzE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCkBAIC00ODIsNiArNDgyLDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9hZG9wdGlvbklzUmVx
dWlyZWQgeyB0cnVlIH07CiAjZW5kaWYKIAorICAgIGJvb2wgaXNNYW5pcHVsYXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNNYW5pcHVsYXRlZDsgfQorICAgIHZvaWQgc2V0SXNNYW5pcHVsYXRlZChi
b29sIGlzTWFuaXB1bGF0ZWQpIHsgbV9pc01hbmlwdWxhdGVkID0gaXNNYW5pcHVsYXRlZDsgfQor
CiAgICAgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSBmaW5hbDsKICAgICBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpIGZpbmFsOwogICAgIEV2
ZW50VGFyZ2V0RGF0YSYgZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgZmluYWw7CkBAIC02NjgsNiAr
NjcxLDggQEAgcHJpdmF0ZToKICAgICBOb2RlKiBtX25leHQgeyBudWxscHRyIH07CiAgICAgQ29t
cGFjdFBvaW50ZXJUdXBsZTxSZW5kZXJPYmplY3QqLCB1aW50OF90PiBtX3JlbmRlcmVyV2l0aFN0
eWxlRmxhZ3M7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVSYXJlRGF0YSwgTm9kZVJhcmVEYXRh
RGVsZXRlcj4gbV9yYXJlRGF0YTsKKworICAgIGJvb2wgbV9pc01hbmlwdWxhdGVkIHsgZmFsc2Ug
fTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihOb2RlJiwgTm9kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA1NTkwODUwOTgwNzJmYzI1OWViNzc1
NzE3ODRmZDRjNWY0NWQ5YmE3Li5jYWZlZjE5NzhjYjZjNDkyMWVhMzBiNjc3Zjg3ZjRlNzAxZTc2
ZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcApAQCAtNDIxLDkgKzQyMSw5IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QKICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnRzLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZWZQdHI8RWxlbWVudD4gY3VycmVudEVsZW1l
bnRBbmNlc3RvciA9IGlzPEVsZW1lbnQ+KCpjb250ZW50Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50
Pihjb250ZW50Tm9kZSkgOiBjb250ZW50Tm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAobV9tYW5pcHVsYXRlZEVsZW1lbnRzLmNvbnRhaW5zKCpjdXJy
ZW50RWxlbWVudEFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChjb250ZW50Tm9kZS0+aXNNYW5pcHVsYXRlZCgpKSB7CisgICAgICAgICAgICBhZGRJdGVtSWZQ
b3NzaWJsZShzdGQ6OmV4Y2hhbmdlKHVuaXRzSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+
KCpjb250ZW50Tm9kZSkpIHsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0CiAKIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVy
Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmIChtX21hbmlwdWxhdGVkRWxl
bWVudHMuY29udGFpbnMoZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnQuaXNNYW5pcHVsYXRlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlci5j
b21wdXRlc0VtcHR5KCkpCkBAIC00OTEsMTcgKzQ5MSw2IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50
KQogICAgICAgICBtX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyLmFkZChlbGVtZW50KTsKIH0KIAot
dXNpbmcgUG9zaXRpb25UdXBsZSA9IHN0ZDo6dHVwbGU8UmVmUHRyPE5vZGU+LCB1bnNpZ25lZCwg
dW5zaWduZWQ+Owotc3RhdGljIGNvbnN0IFBvc2l0aW9uVHVwbGUgbWFrZVBvc2l0aW9uVHVwbGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIHJldHVybiB7IHBvc2l0aW9uLmFuY2hv
ck5vZGUoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uLmFuY2hvclR5cGUoKSksIHBv
c2l0aW9uLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
ID8gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgOiAwIH07Ci19Ci0KLXN0YXRpYyBj
b25zdCBzdGQ6OnBhaXI8UG9zaXRpb25UdXBsZSwgUG9zaXRpb25UdXBsZT4gbWFrZUhhc2hhYmxl
UG9zaXRpb25SYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
Ci17Ci0gICAgcmV0dXJuIHsgbWFrZVBvc2l0aW9uVHVwbGUoc3RhcnQpLCBtYWtlUG9zaXRpb25U
dXBsZShlbmQpIH07Ci19Ci0KIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnNjaGVk
dWxlT2JzZXJ2YXRpb25VcGRhdGUoKQogewogICAgIGlmICghbV9kb2N1bWVudCkKQEAgLTUxMiwz
NyArNTAxLDMyIEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlT2Jz
ZXJ2YXRpb25VcGRhdGUoKQogICAgICAgICBpZiAoIWNvbnRyb2xsZXIpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgSGFzaFNldDxSZWY8RWxlbWVudD4+IG11dGF0ZWRFbGVtZW50czsK
KyAgICAgICAgSGFzaFNldDxSZWY8RWxlbWVudD4+IGVsZW1lbnRzVG9PYnNlcnZlOwogICAgICAg
ICBmb3IgKGF1dG8mIHdlYWtFbGVtZW50IDogY29udHJvbGxlci0+bV9lbGVtZW50c1dpdGhOZXdS
ZW5kZXJlcikKLSAgICAgICAgICAgIG11dGF0ZWRFbGVtZW50cy5hZGQod2Vha0VsZW1lbnQpOwor
ICAgICAgICAgICAgZWxlbWVudHNUb09ic2VydmUuYWRkKHdlYWtFbGVtZW50KTsKICAgICAgICAg
Y29udHJvbGxlci0+bV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlci5jbGVhcigpOwogCi0gICAgICAg
IEhhc2hTZXQ8UmVmPEVsZW1lbnQ+PiBmaWx0ZXJlZEVsZW1lbnRzOwotICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBtdXRhdGVkRWxlbWVudHMpIHsKLSAgICAgICAgICAgIGF1dG8qIHBhcmVu
dEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoIXBh
cmVudEVsZW1lbnQgfHwgIW11dGF0ZWRFbGVtZW50cy5jb250YWlucyhwYXJlbnRFbGVtZW50KSkK
LSAgICAgICAgICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLmFkZChlbGVtZW50LmNvcHlSZWYoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgbXV0YXRlZEVsZW1lbnRzLmNsZWFyKCk7Ci0KLSAgICAgICAg
SGFzaFNldDxzdGQ6OnBhaXI8UG9zaXRpb25UdXBsZSwgUG9zaXRpb25UdXBsZT4+IHBhcmFncmFw
aFNldHM7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGZpbHRlcmVkRWxlbWVudHMpIHsK
LSAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZWxl
bWVudC5wdHIoKSk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUoZWxlbWVudC5wdHIoKSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8
fCBlbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IGF1dG8ga2V5ID0gbWFrZUhhc2hhYmxlUG9zaXRpb25SYW5nZShzdGFydCwgZW5kKTsKLSAgICAg
ICAgICAgIGlmICghcGFyYWdyYXBoU2V0cy5hZGQoa2V5KS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZWxlbWVudHNUb09ic2VydmUuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhdXRvKiBjb250cm9sbGVyID0g
d2Vha1RoaXMuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBSZWZQdHI8Tm9kZT4gY29tbW9uQW5jZXN0b3I7CisgICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzVG9PYnNlcnZlKSB7CisgICAgICAgICAg
ICBpZiAoIWNvbW1vbkFuY2VzdG9yKQorICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0g
bWFrZVJlZlB0cihlbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFlbGVtZW50
LT5pc0Rlc2NlbmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpjb21tb25BbmNlc3Rv
ciwgZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdXRvIHN0YXJ0ID0gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKGNvbW1vbkFuY2VzdG9yLmdldCgpKTsKKyAgICAgICAgYXV0
byBlbmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGNvbW1vbkFuY2VzdG9yLmdldCgpKTsK
KyAgICAgICAgY29udHJvbGxlci0+b2JzZXJ2ZVBhcmFncmFwaHMoc3RhcnQsIGVuZCk7CiAKLSAg
ICAgICAgICAgIGNvbnRyb2xsZXItPm9ic2VydmVQYXJhZ3JhcGhzKHN0YXJ0LCBlbmQpOworICAg
ICAgICBpZiAoY29udHJvbGxlci0+bV9pdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNv
bW1vbkFuY2VzdG9yLT5zZXRJc01hbmlwdWxhdGVkKHRydWUpOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKICAgICAgICAgY29udHJvbGxlci0+Zmx1c2hQZW5kaW5nSXRlbXNGb3JD
YWxsYmFjaygpOwogICAgIH0pOwogfQpAQCAtNjIwLDcgKzYwNCw3IEBAIFZlY3RvcjxSZWY8Tm9k
ZT4+IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpnZXRQYXRoKE5vZGUqIGFuY2VzdG9yLCBO
b2RlKiBub2RlCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKLXZvaWQgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMoVmVjdG9yPE5vZGVFbnRyeT4mIGxhc3RUb3BEb3du
UGF0aCwgY29uc3QgVmVjdG9yPFJlZjxOb2RlPj4mIGN1cnJlbnRUb3BEb3duUGF0aCwgTm9kZSog
Y3VycmVudE5vZGUsIEhhc2hTZXQ8UmVmPE5vZGU+PiYgaW5zZXJ0ZWROb2RlcywgVmVjdG9yPE5v
ZGVJbnNlcnRpb24+JiBpbnNlcnRpb25zLCBJc05vZGVNYW5pcHVsYXRlZCBpc05vZGVNYW5pcHVs
YXRlZCkKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMo
VmVjdG9yPE5vZGVFbnRyeT4mIGxhc3RUb3BEb3duUGF0aCwgY29uc3QgVmVjdG9yPFJlZjxOb2Rl
Pj4mIGN1cnJlbnRUb3BEb3duUGF0aCwgTm9kZSogY3VycmVudE5vZGUsIEhhc2hTZXQ8UmVmPE5v
ZGU+PiYgaW5zZXJ0ZWROb2RlcywgVmVjdG9yPE5vZGVJbnNlcnRpb24+JiBpbnNlcnRpb25zKQog
ewogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxhc3RUb3BEb3duUGF0aC5zaXpl
KCkgJiYgaSA8IGN1cnJlbnRUb3BEb3duUGF0aC5zaXplKCkgJiYgbGFzdFRvcERvd25QYXRoW2ld
LmZpcnN0LnB0cigpID09IGN1cnJlbnRUb3BEb3duUGF0aFtpXS5wdHIoKSkKQEAgLTY0NCw3ICs2
MjgsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbnNlcnRpb25z
KFZlY3RvcjxOb2RlRW50cnk+JiBsYXN0VG9wRG93bgogICAgIH0KIAogICAgIGlmIChjdXJyZW50
Tm9kZSkKLSAgICAgICAgaW5zZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BE
b3duUGF0aC5zaXplKCkgPyBsYXN0VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51
bGxwdHIsICpjdXJyZW50Tm9kZSwgaXNOb2RlTWFuaXB1bGF0ZWQgfSk7CisgICAgICAgIGluc2Vy
dGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBsYXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFz
dFRvcERvd25QYXRoLmxhc3QoKS5zZWNvbmQucHRyKCkgOiBudWxscHRyLCAqY3VycmVudE5vZGUg
fSk7CiB9CiAKIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3Qg
TWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tl
bj4mIHJlcGxhY2VtZW50VG9rZW5zKSAtPiBPcHRpb25hbDxNYW5pcHVsYXRpb25GYWlsdXJlVHlw
ZT4KQEAgLTc3Myw3ICs3NTcsNyBAQCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdAogICAgIFJlZlB0
cjxOb2RlPiBlbmROb2RlID0gZW5kLmZpcnN0Tm9kZSgpOwogICAgIGlmIChub2RlICYmIG5vZGUg
IT0gZW5kTm9kZSkgewogICAgICAgICBhdXRvIHRvcERvd25QYXRoID0gZ2V0UGF0aChjb21tb25B
bmNlc3Rvci5nZXQoKSwgbm9kZS0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAgdXBkYXRlSW5zZXJ0
aW9ucyhsYXN0VG9wRG93blBhdGgsIHRvcERvd25QYXRoLCBudWxscHRyLCByZXVzZWRPcmlnaW5h
bE5vZGVzLCBpbnNlcnRpb25zLCBJc05vZGVNYW5pcHVsYXRlZDo6Tm8pOworICAgICAgICB1cGRh
dGVJbnNlcnRpb25zKGxhc3RUb3BEb3duUGF0aCwgdG9wRG93blBhdGgsIG51bGxwdHIsIHJldXNl
ZE9yaWdpbmFsTm9kZXMsIGluc2VydGlvbnMpOwogICAgIH0KICAgICB3aGlsZSAobm9kZSAhPSBl
bmROb2RlKSB7CiAgICAgICAgIFJlZjxOb2RlPiBwYXJlbnROb2RlID0gKm5vZGUtPnBhcmVudE5v
ZGUoKTsKQEAgLTc5MiwzMiArNzc2LDE1IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAg
Zm9yIChhdXRvJiBub2RlIDogbm9kZXNUb1JlbW92ZSkKICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7
CiAKLSAgICBIYXNoU2V0PFJlZjxOb2RlPj4gcGFyZW50Tm9kZXNXaXRoT25seU1hbmlwdWxhdGVk
Q2hpbGRyZW47CiAgICAgZm9yIChhdXRvJiBpbnNlcnRpb24gOiBpbnNlcnRpb25zKSB7Ci0gICAg
ICAgIFJlZlB0cjxOb2RlPiBwYXJlbnQ7CiAgICAgICAgIGlmICghaW5zZXJ0aW9uLnBhcmVudElm
RGlmZmVyZW50RnJvbUNvbW1vbkFuY2VzdG9yKSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBpbnNl
cnRpb25Qb2ludC5jb250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZShpbnNlcnRpb24uY2hpbGQsIGluc2VydGlvblBvaW50LmNvbXB1dGVOb2RlQWZ0ZXJQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgIGluc2VydGlvblBvaW50LmNvbnRhaW5lck5vZGUoKS0+aW5z
ZXJ0QmVmb3JlKGluc2VydGlvbi5jaGlsZCwgaW5zZXJ0aW9uUG9pbnQuY29tcHV0ZU5vZGVBZnRl
clBvc2l0aW9uKCkpOwogICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBwb3NpdGlvbkluUGFy
ZW50QWZ0ZXJOb2RlKGluc2VydGlvbi5jaGlsZC5wdHIoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwYXJlbnQgPSBpbnNlcnRpb24ucGFyZW50SWZEaWZmZXJlbnRGcm9tQ29tbW9u
QW5jZXN0b3I7Ci0gICAgICAgICAgICBwYXJlbnQtPmFwcGVuZENoaWxkKGluc2VydGlvbi5jaGls
ZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5zZXJ0aW9uLmlzQ2hpbGRNYW5pcHVsYXRl
ZCA9PSBJc05vZGVNYW5pcHVsYXRlZDo6Tm8pIHsKLSAgICAgICAgICAgIHBhcmVudE5vZGVzV2l0
aE9ubHlNYW5pcHVsYXRlZENoaWxkcmVuLnJlbW92ZSgqcGFyZW50KTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGluc2VydGlvbi5j
aGlsZC5nZXQoKSkpCi0gICAgICAgICAgICBtX21hbmlwdWxhdGVkRWxlbWVudHMuYWRkKGRvd25j
YXN0PEVsZW1lbnQ+KGluc2VydGlvbi5jaGlsZC5nZXQoKSkpOwotICAgICAgICBlbHNlIGlmIChw
YXJlbnQtPmZpcnN0Q2hpbGQoKSA9PSBwYXJlbnQtPmxhc3RDaGlsZCgpKQotICAgICAgICAgICAg
cGFyZW50Tm9kZXNXaXRoT25seU1hbmlwdWxhdGVkQ2hpbGRyZW4uYWRkKCpwYXJlbnQpOwotICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbnNlcnRpb24ucGFyZW50SWZEaWZmZXJl
bnRGcm9tQ29tbW9uQW5jZXN0b3ItPmFwcGVuZENoaWxkKGluc2VydGlvbi5jaGlsZCk7CiAKLSAg
ICBmb3IgKGF1dG8mIG5vZGUgOiBwYXJlbnROb2Rlc1dpdGhPbmx5TWFuaXB1bGF0ZWRDaGlsZHJl
bikgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZS5nZXQoKSkpCi0gICAgICAgICAgICBt
X21hbmlwdWxhdGVkRWxlbWVudHMuYWRkKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKTsK
KyAgICAgICAgaWYgKGluc2VydGlvbi5pc0NoaWxkTWFuaXB1bGF0ZWQgPT0gSXNOb2RlTWFuaXB1
bGF0ZWQ6OlllcykKKyAgICAgICAgICAgIGluc2VydGlvbi5jaGlsZC0+c2V0SXNNYW5pcHVsYXRl
ZCh0cnVlKTsKICAgICB9CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCmluZGV4IGQ2
YWNkM2MxZTQ3NDY5ZDg3NzU2ZWFmODAxOGI3M2E2NjRiOTllOTkuLmM5MTZjNzk0MTAyMzVhZTg2
NzBhMTQyMzFhYWIyMWI3NWQ0YTFlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKQEAgLTE3MSwxMiArMTcxLDExIEBAIHBy
aXZhdGU6CiAgICAgfTsKICAgICB1c2luZyBOb2RlRW50cnkgPSBzdGQ6OnBhaXI8UmVmPE5vZGU+
LCBSZWY8Tm9kZT4+OwogICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGdldFBhdGgoTm9kZSosIE5vZGUq
KTsKLSAgICB2b2lkIHVwZGF0ZUluc2VydGlvbnMoVmVjdG9yPE5vZGVFbnRyeT4mLCBjb25zdCBW
ZWN0b3I8UmVmPE5vZGU+PiYsIE5vZGUqLCBIYXNoU2V0PFJlZjxOb2RlPj4mLCBWZWN0b3I8Tm9k
ZUluc2VydGlvbj4mLCBJc05vZGVNYW5pcHVsYXRlZCA9IElzTm9kZU1hbmlwdWxhdGVkOjpZZXMp
OworICAgIHZvaWQgdXBkYXRlSW5zZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5PiYsIGNvbnN0IFZl
Y3RvcjxSZWY8Tm9kZT4+JiwgTm9kZSosIEhhc2hTZXQ8UmVmPE5vZGU+PiYsIFZlY3RvcjxOb2Rl
SW5zZXJ0aW9uPiYpOwogICAgIE9wdGlvbmFsPE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlPiByZXBs
YWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlv
blRva2VuPiYpOwogCiAgICAgV2Vha1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBXZWFr
SGFzaFNldDxFbGVtZW50PiBtX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyOwotICAgIFdlYWtIYXNo
U2V0PEVsZW1lbnQ+IG1fbWFuaXB1bGF0ZWRFbGVtZW50czsKIAogICAgIE1hbmlwdWxhdGlvbkl0
ZW1DYWxsYmFjayBtX2NhbGxiYWNrOwogICAgIFZlY3RvcjxNYW5pcHVsYXRpb25JdGVtPiBtX3Bl
bmRpbmdJdGVtc0ZvckNhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDJkOGQ5NzcyYzJkZTBlZmI3NGI4YWI2MjljNTc5NWZiNWZmMjZk
ODEuLmMwYjYyMzJmZmJlZmIzYTczNjU4NWEwYTM0ODU0OGI2NmI0YzgwMzcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAyMC0wNi0xNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBU
ZXh0IG1hbmlwdWxhdGlvbiBzaG91bGQgb2JzZXJ2ZSBhZGphY2VudCBlbGVtZW50cyB3aXRoIG5l
dyByZW5kZXJlciB0b2dldGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEzMzMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNi0xNyAg
QWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIGNv
ZGUgZm9yIG9sZCBld3MgYmluZGluZ3MgcXVldWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCA1ZWE4
MTZhNjZkNjIzYjRiYjhiMjVlZDA1MjcyNjNiMjg5NTkwZjA0Li5hMzNlNmU5NmRmZGJlMGVlYjgw
NmMwYTJlMTU5YzE5Mzc4MjQzZWJhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC0zMzUsMzEgKzMz
NSwyNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRO
ZXdseURpc3BsYXllZFBhcmFncmFwaCkKIAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBkZWxlZ2F0
ZS5nZXQoKS5pdGVtQ2FsbGJhY2sgPSBeKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICppdGVtKSB7
Ci0gICAgICAgIGlmIChpdGVtcy5jb3VudCA9PSAzKQotICAgICAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07CiAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4uaGlkZGVu
JykuZm9yRWFjaCgoc3BhbikgPT4gc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKSk7Il07
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAotICAgIEVYUEVDVF9FUShp
dGVtcy5jb3VudCwgM1VMKTsKLSAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAx
VUwpOwotICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgUmV0
YWluUHRyPE5TU2V0PiB0b2tlbnMgPSBhZG9wdE5TKFtbTlNTZXQgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czppdGVtc1sxXS50b2tlbnNbMF0uY29udGVudCwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRl
bnQsIG5pbF0pOwotICAgIEVYUEVDVF9UUlVFKFt0b2tlbnMuZ2V0KCkgY29udGFpbnNPYmplY3Q6
QCJXZWIiXSk7Ci0gICAgRVhQRUNUX1RSVUUoW3Rva2Vucy5nZXQoKSBjb250YWluc09iamVjdDpA
IktpdCJdKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VR
KGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIsIGl0
ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgi
S2l0IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiAKICAgICAvLyBU
aGlzIGhhcyB0byBoYXBwZW4gc2VwYXJhdGVseSBpbiBvcmRlciB0byBoYXZlIGEgZGV0ZXJtaW5p
c3RpYyBvcmRlcmluZy4KICAgICBkb25lID0gZmFsc2U7CiAgICAgZGVsZWdhdGUuZ2V0KCkuaXRl
bUNhbGxiYWNrID0gXihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqaXRlbSkgewotICAgICAgICBp
ZiAoaXRlbXMuY291bnQgPT0gNCkKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBk
b25lID0gdHJ1ZTsKICAgICB9OwogICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXYuaGlkZGVuJykuZm9yRWFjaCgo
ZGl2KSA9PiBkaXYuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJykpOyJdOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDRV
TCk7Ci0gICAgRVhQRUNUX0VRKGl0ZW1zWzNdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBF
Q1RfU1RSRVEoImhleSIsIGl0ZW1zWzNdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
ICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0u
dG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5IiwgaXRlbXNbMl0udG9r
ZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiB9CiAKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwg
U3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNhbWVQYXJhZ3JhcGhXaXRoTmV3Q29udGVudCkKQEAg
LTI1ODgsNyArMjU4NCw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uQXZvaWRFeHRyYWN0aW5nTWFuaXB1bGF0ZWRUZXh0QWZ0CiAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKICAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKIAotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZzpAIjxwPmZvbzwvcD4iXTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmc6QCI8cD5mb288YnI+YmFyPC9wPiJdOwogCiAgICAgZG9uZSA9IGZhbHNl
OwogICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246
bmlsIGNvbXBsZXRpb246XnsKQEAgLTI1OTcsMjEgKzI1OTMsMjMgQEAgVEVTVChUZXh0TWFuaXB1
bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJhY3RpbmdNYW5pcHVsYXRl
ZFRleHRBZnQKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAgICAgYXV0
byBpdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0gICAgYXV0byBpdGVtID0gaXRlbXNbMF07Ci0g
ICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9FUShpdGVtLnRva2Vu
cy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfV0tfU1RSRVEoImZvbyIsIGl0ZW0udG9rZW5zWzBd
LmNvbnRlbnQpOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1Rf
RVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiZm9v
IiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50
b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJiYXIiLCBpdGVtc1sxXS50
b2tlbnNbMF0uY29udGVudCk7CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX2Nv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOkBbCi0gICAgICAgIGNyZWF0ZUl0ZW0oaXRl
bS5pZGVudGlmaWVyLCB7eyBpdGVtLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImJhciIgfX0pLmdl
dCgpCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwge3sgaXRlbXNbMF0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiRk9PIiB9fSkuZ2V0KCksCisgICAgICAgIGNyZWF0ZUl0
ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwge3sgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIs
IEAiQkFSIiB9fSkuZ2V0KCkKICAgICBdIGNvbXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4g
KmVycm9ycykgewogICAgICAgICBFWFBFQ1RfRVEoZXJyb3JzLCBuaWwpOwogICAgICAgICBkb25l
ID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwog
Ci0gICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5iYXI8L3A+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworICAgIEVYUEVD
VF9XS19TVFJFUSgiPHA+Rk9PPGJyPkJBUjwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiAKICAgICBfX2Jsb2Nr
IGJvb2wgaXRlbUNhbGxiYWNrRmlyZWQgPSBmYWxzZTsKICAgICBbZGVsZWdhdGUgc2V0SXRlbUNh
bGxiYWNrOl4oX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKikgewpAQCAtMjYxOSwxMiArMjYxNywy
MCBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkF2b2lk
RXh0cmFjdGluZ01hbmlwdWxhdGVkVGV4dEFmdAogICAgIH1dOwogCiAgICAgW3dlYlZpZXcgb2Jq
ZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50
YXRpb25VcGRhdGVdOwotCiAgICAgW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5zdHlsZS5kaXNwbGF5ID0gJyciXTsKLSAg
ICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3BhbicpOyIKKyAgICAgICAgImVsZW1lbnQuaW5uZXJIVE1MPSdlbmQnOyIK
KyAgICAgICAgImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5hZnRlcihlbGVtZW50KSJdOwog
Ci0gICAgRVhQRUNUX0ZBTFNFKGl0ZW1DYWxsYmFja0ZpcmVkKTsKKyAgICBkb25lID0gZmFsc2U7
CisgICAgZGVsZWdhdGUuZ2V0KCkuaXRlbUNhbGxiYWNrID0gXihfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbSAqaXRlbSkgeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9OworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNV
TCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoImVuZCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50KTsKIH0KIAogVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5EZWJ1Z0Rlc2NyaXB0aW9u
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402216</attachid>
            <date>2020-06-18 10:52:05 -0700</date>
            <delta_ts>2020-06-22 14:04:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213333-20200618105204.patch</filename>
            <type>text/plain</type>
            <size>20317</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzcyY2Q0ZWRjZmVjZDY1
MTY0YmI3ZjMzYTU5YzA4ODRiOTI5M2M2YS4uZjU4YjJmYmU5MzA5NTA2MGVlODNjMGIyZGY5OGQ3
MGUwMDkzNzU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTA2LTE4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9u
IHNob3VsZCBvYnNlcnZlIGFkamFjZW50IGVsZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyIHRvZ2V0
aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMz
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBvbmx5IGtlZXBzIHRyYWNrIG9mIG1hbmlwdWxhdGVkIEVs
ZW1lbnRzLiBGb3Igb3RoZXIgdHlwZXMgb2YgTm9kZSwgbGlrZSBUZXh0LCAKKyAgICAgICAgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgZG9lcyBub3QgbWFyayB0aGVtIGFzIG1hbmlwdWxhdGVk
IGFuZCBtYXkgbWFuaXB1bGF0ZSBpdCBhZ2Fpbi4gcjI2MzEzMiB0cmllZCB0byBzb2x2ZQorICAg
ICAgICB0aGUgcHJvYmxlbSBieSBtYXJraW5nIEVsZW1lbnQgd2l0aCBvbmx5IG1hbmlwdWxhdGVk
IGNoaWxkcmVuIGFzIG1hbmlwdWxhdGVkLCBidXQgaXQgZGlkIG5vdCBpdGVyYXRlIGFsbCAKKyAg
ICAgICAgY2hpbGRyZW4gb2YgRWxlbWVudC4gU28sIGlmIG9uZSBFbGVtZW50IGhhcyBjaGlsZHJl
biBpbiBkaWZmZXJlbnQgcGFyYWdyYXBocywgaXQgbWF5IGZhaWwgdG8gbWFyayB0aGUgRWxlbWVu
dCAKKyAgICAgICAgbWFuaXB1bGF0ZWQuIFNlZSB1cGRhdGVkIHRlc3QuCisgICAgICAgIFRvIGZp
eCB0aGlzIGlzc3VlIGNvbXBsZXRlbHksIHRoaXMgcGF0Y2ggYWRkcyBhIHByb3BlcnR5IGlzTWFu
aXB1bGF0ZWQgdG8gTm9kZVJhcmVEYXRhLiBOb3cgCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIGNhbiBrbm93IHRoZSBzdGF0ZSBvZiBhbGwgdHlwZXMgb2YgTm9kZXMgYW5kIHRo
dXMgY2FuIHNraXAgdGhlIG1hbmlwdWxhdGVkIE5vZGVzIAorICAgICAgICBkdXJpbmcgb2JzZXJ2
YXRpb24uCisKKyAgICAgICAgRm9yIGVsZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyLCBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciBvYnNlcnZlcyB0aGVtIG9uZSBieSBvbmUuIEhvd2V2ZXIsIGFk
amFjZW50IGVsZW1lbnRzCisgICAgICAgIGNhbiBiZSBpbiB0aGUgc2FtZSBwYXJhZ3JhcGgsIGlm
IHRoZXJlIGlzIG5vIGRlbGltaXRlciBpbiB0aGVpciB0ZXh0LCBhbmQgc2hvdWxkIGJlIG9ic2Vy
dmVkIHRvZ2V0aGVyLiBUbyBzb2x2ZSAKKyAgICAgICAgdGhpcyBwcm9ibGVtLCBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciBub3cgc3RhcnRzIG9ic2VydmluZyBmcm9tIHRoZSBjb21tb24gYW5j
ZXN0b3Igb2YgdGhlc2UgZWxlbWVudHMuIElmIGEKKyAgICAgICAgTm9kZSBpbiByYW5nZSBpcyBt
YW5pcHVsYXRlZCwgc3BsaXQgdGhlIHBhcmFncnBoIHRoZXJlLiBUaGlzIG1ha2VzIHN1cmUgY29u
dGVudCBpbiBwYXJhZ3JhcGggaXMgbm90IG1hbmlwdWxhdGVkLgorICAgICAgICBSZWxldmFudCB0
ZXN0IGlzIHVwZGF0ZWQgZm9yIHRoaXMgbmV3IGJlaGF2aW9yLgorCisgICAgICAgIFRlc3RzOiBU
ZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmROZXdseURpc3BsYXllZFBh
cmFncmFwaAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25Bdm9pZEV4dHJhY3RpbmdNYW5pcHVsYXRlZFRleHRBZnRlck1hbmlwdWxhdGlvbgor
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNNYW5p
cHVsYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRJc01hbmlwdWxhdGVkKToKKyAg
ICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDogc2hyaW5r
IG1fY29ubmVjdGVkRnJhbWVDb3VudCB0byAzMCBiaXRzIGFzIFBhZ2U6Om1heE51bWJlck9mRnJh
bWVzIGlzIG9ubHkgMTAwMCBhbmQgZ2l2ZQorICAgICAgICBvbmUgYml0IHRvIG1faXNNYW5pcHVs
YXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aXNNYW5pcHVsYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnNldElzTWFuaXB1bGF0ZWQpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpkaWRDcmVhdGVSZW5kZXJlckZvckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnNj
aGVkdWxlT2JzZXJ2YXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVBvc2l0aW9uVHVwbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZUhhc2hhYmxl
UG9zaXRpb25SYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oOgorCiAyMDIwLTA2LTE3ICBDbGFyayBXYW5nICA8Y2xhcmtfd2FuZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgbWlzc2luZyBvcmllbnRhdGlvbiBhdHRyaWJ1dGVz
IHRvIFBhbm5lck5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhNGEwM2M4NzI2NmQxOGY0NjNjYzQ0
ODE0ZWIxYWZhN2NhMjJlN2M1Li4wMjljZWM4MjMyZGFmNTA3ZmViODY0YWZiMjczNzNkOGYyNDI0
NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNjE2LDYgKzI2MTYsMTYgQEAgdm9pZCogTm9kZTo6
b3BhcXVlUm9vdFNsb3coKSBjb25zdAogICAgIHJldHVybiBjb25zdF9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxjb25zdCB2b2lkKj4obm9kZSkpOwogfQogCitib29sIE5vZGU6OmlzTWFuaXB1bGF0
ZWQoKQoreworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmlzTWFuaXB1bGF0ZWQoKTsKK30K
Kwordm9pZCBOb2RlOjpzZXRJc01hbmlwdWxhdGVkKGJvb2wgaXNNYW5pcHVsYXRlZCkKK3sKKyAg
ICBlbnN1cmVSYXJlRGF0YSgpLnNldElzTWFuaXB1bGF0ZWQoaXNNYW5pcHVsYXRlZCk7Cit9CisK
IHN0YXRpYyBzaXplX3QgZGVwdGgoTm9kZSYgbm9kZSkKIHsKICAgICBzaXplX3QgZGVwdGggPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKaW5kZXggNDMxY2IzNjRkYjRjZDMwNTk0M2JiM2EzMmNlYjk4YmI4N2Y0ZTI1
NC4uYjVmNGE0NDQ2ODhhYTRiOGE0YzMwMGQ1NGJlYmI3NmVlZTBiNmNkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CkBAIC01MTcsNiArNTE3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQzMl90IGZsYWdTdHls
ZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIFN0eWxlSXNBZmZlY3RlZEJ5
UHJldmlvdXNTaWJsaW5nOyB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAorICAgIGJvb2wgaXNN
YW5pcHVsYXRlZCgpOworICAgIHZvaWQgc2V0SXNNYW5pcHVsYXRlZChib29sIGlzTWFuaXB1bGF0
ZWQpOworCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRG
bGFnID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCA0YmRiMTI2MjJjZmQ4NmU5
MjY0MjUzYmFlMzhlYzlhZWNmMDFkNWJlLi4wNjUwNzVkYTA5ZmY0NzkzOWRjN2Y4OGYzM2Q5YWU4
NzY5NGM0YmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yNjgsNiArMjY4LDcg
QEAgcHVibGljOgogICAgIE5vZGVSYXJlRGF0YShUeXBlIHR5cGUgPSBUeXBlOjpOb2RlKQogICAg
ICAgICA6IG1fY29ubmVjdGVkRnJhbWVDb3VudCgwKQogICAgICAgICAsIG1faXNFbGVtZW50UmFy
ZURhdGEodHlwZSA9PSBUeXBlOjpFbGVtZW50KQorICAgICAgICAsIG1faXNNYW5pcHVsYXRlZCgw
KQogICAgIHsKICAgICB9CiAKQEAgLTMwMiw2ICszMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Y29ubmVjdGVkRnJhbWVDb3VudCAtPSBhbW91bnQ7CiAgICAgfQogCisgICAgYm9vbCBpc01hbmlw
dWxhdGVkKCkgeyByZXR1cm4gbV9pc01hbmlwdWxhdGVkOyB9CisgICAgdm9pZCBzZXRJc01hbmlw
dWxhdGVkKGJvb2wgaXNNYW5pcHVsYXRlZCkgeyBtX2lzTWFuaXB1bGF0ZWQgPSBpc01hbmlwdWxh
dGVkOyB9CisKICNpZiBEVU1QX05PREVfU1RBVElTVElDUwogICAgIE9wdGlvblNldDxVc2VUeXBl
PiB1c2VUeXBlcygpIGNvbnN0CiAgICAgewpAQCAtMzE3LDggKzMyMSw5IEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgotICAgIHVuc2lnbmVkIG1fY29ubmVjdGVkRnJhbWVDb3VudCA6IDMx
OyAvLyBNdXN0IGZpdCBQYWdlOjptYXhOdW1iZXJPZkZyYW1lcy4KKyAgICB1bnNpZ25lZCBtX2Nv
bm5lY3RlZEZyYW1lQ291bnQgOiAzMDsgLy8gTXVzdCBmaXQgUGFnZTo6bWF4TnVtYmVyT2ZGcmFt
ZXMuCiAgICAgdW5zaWduZWQgbV9pc0VsZW1lbnRSYXJlRGF0YSA6IDE7CisgICAgdW5zaWduZWQg
bV9pc01hbmlwdWxhdGVkIDogMTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlTGlzdHNOb2Rl
RGF0YT4gbV9ub2RlTGlzdHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YT4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggNTU5MDg1MDk4
MDcyZmMyNTllYjc3NTcxNzg0ZmQ0YzVmNDVkOWJhNy4uY2FmZWYxOTc4Y2I2YzQ5MjFlYTMwYjY3
N2Y4N2Y0ZTcwMWU3NmViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTQyMSw5ICs0MjEsOSBAQCB2b2lkIFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICBlbmNsb3NpbmdJdGVtQm91bmRhcnlFbGVtZW50
cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVmUHRyPEVsZW1lbnQ+
IGN1cnJlbnRFbGVtZW50QW5jZXN0b3IgPSBpczxFbGVtZW50PigqY29udGVudE5vZGUpID8gZG93
bmNhc3Q8RWxlbWVudD4oY29udGVudE5vZGUpIDogY29udGVudE5vZGUtPnBhcmVudE9yU2hhZG93
SG9zdEVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKG1fbWFuaXB1bGF0ZWRFbGVtZW50cy5j
b250YWlucygqY3VycmVudEVsZW1lbnRBbmNlc3RvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoY29udGVudE5vZGUtPmlzTWFuaXB1bGF0ZWQoKSkgeworICAgICAgICAg
ICAgYWRkSXRlbUlmUG9zc2libGUoc3RkOjpleGNoYW5nZSh1bml0c0luQ3VycmVudFBhcmFncmFw
aCwgeyB9KSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChpczxFbGVtZW50PigqY29udGVudE5vZGUpKSB7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdAogCiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpkaWRD
cmVhdGVSZW5kZXJlckZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAobV9t
YW5pcHVsYXRlZEVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpKQorICAgIGlmIChlbGVtZW50Lmlz
TWFuaXB1bGF0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZWxlbWVudHNXaXRo
TmV3UmVuZGVyZXIuY29tcHV0ZXNFbXB0eSgpKQpAQCAtNDkxLDE3ICs0OTEsNiBAQCB2b2lkIFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpkaWRDcmVhdGVSZW5kZXJlckZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCkKICAgICAgICAgbV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlci5hZGQoZWxl
bWVudCk7CiB9CiAKLXVzaW5nIFBvc2l0aW9uVHVwbGUgPSBzdGQ6OnR1cGxlPFJlZlB0cjxOb2Rl
PiwgdW5zaWduZWQsIHVuc2lnbmVkPjsKLXN0YXRpYyBjb25zdCBQb3NpdGlvblR1cGxlIG1ha2VQ
b3NpdGlvblR1cGxlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICByZXR1cm4geyBw
b3NpdGlvbi5hbmNob3JOb2RlKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5hbmNo
b3JUeXBlKCkpLCBwb3NpdGlvbi5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciA/IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDogMCB9Owot
fQotCi1zdGF0aWMgY29uc3Qgc3RkOjpwYWlyPFBvc2l0aW9uVHVwbGUsIFBvc2l0aW9uVHVwbGU+
IG1ha2VIYXNoYWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKQotewotICAgIHJldHVybiB7IG1ha2VQb3NpdGlvblR1cGxlKHN0YXJ0KSwg
bWFrZVBvc2l0aW9uVHVwbGUoZW5kKSB9OwotfQotCiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKCkKIHsKICAgICBpZiAoIW1fZG9jdW1l
bnQpCkBAIC01MTIsMzcgKzUwMSwzMiBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKCkKICAgICAgICAgaWYgKCFjb250cm9sbGVyKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEhhc2hTZXQ8UmVmPEVsZW1lbnQ+PiBtdXRh
dGVkRWxlbWVudHM7CisgICAgICAgIEhhc2hTZXQ8UmVmPEVsZW1lbnQ+PiBlbGVtZW50c1RvT2Jz
ZXJ2ZTsKICAgICAgICAgZm9yIChhdXRvJiB3ZWFrRWxlbWVudCA6IGNvbnRyb2xsZXItPm1fZWxl
bWVudHNXaXRoTmV3UmVuZGVyZXIpCi0gICAgICAgICAgICBtdXRhdGVkRWxlbWVudHMuYWRkKHdl
YWtFbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzVG9PYnNlcnZlLmFkZCh3ZWFrRWxlbWVu
dCk7CiAgICAgICAgIGNvbnRyb2xsZXItPm1fZWxlbWVudHNXaXRoTmV3UmVuZGVyZXIuY2xlYXIo
KTsKIAotICAgICAgICBIYXNoU2V0PFJlZjxFbGVtZW50Pj4gZmlsdGVyZWRFbGVtZW50czsKLSAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbXV0YXRlZEVsZW1lbnRzKSB7Ci0gICAgICAgICAg
ICBhdXRvKiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8ICFtdXRhdGVkRWxlbWVudHMuY29udGFpbnMocGFy
ZW50RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZmlsdGVyZWRFbGVtZW50cy5hZGQoZWxlbWVu
dC5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0gICAgICAgIG11dGF0ZWRFbGVtZW50cy5jbGVhcigp
OwotCi0gICAgICAgIEhhc2hTZXQ8c3RkOjpwYWlyPFBvc2l0aW9uVHVwbGUsIFBvc2l0aW9uVHVw
bGU+PiBwYXJhZ3JhcGhTZXRzOwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBmaWx0ZXJl
ZEVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBhdXRvIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKGVsZW1lbnQucHRyKCkpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKGVsZW1lbnQucHRyKCkpOwotCi0gICAgICAgICAgICBpZiAoc3Rh
cnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBhdXRvIGtleSA9IG1ha2VIYXNoYWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQs
IGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXBhcmFncmFwaFNldHMuYWRkKGtleSkuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVsZW1lbnRzVG9PYnNl
cnZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byog
Y29udHJvbGxlciA9IHdlYWtUaGlzLmdldCgpOwotICAgICAgICAgICAgaWYgKCFjb250cm9sbGVy
KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFu
Y2VzdG9yOworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50c1RvT2JzZXJ2ZSkg
eworICAgICAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgICAgICBjb21t
b25BbmNlc3RvciA9IG1ha2VSZWZQdHIoZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBlbHNl
IGlmICghZWxlbWVudC0+aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigq
Y29tbW9uQW5jZXN0b3IsIGVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChj
b21tb25BbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byBz
dGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjb21tb25BbmNlc3Rvci5nZXQoKSk7
CisgICAgICAgIGF1dG8gZW5kID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjb21tb25BbmNl
c3Rvci5nZXQoKSk7CisgICAgICAgIGNvbnRyb2xsZXItPm9ic2VydmVQYXJhZ3JhcGhzKHN0YXJ0
LCBlbmQpOwogCi0gICAgICAgICAgICBjb250cm9sbGVyLT5vYnNlcnZlUGFyYWdyYXBocyhzdGFy
dCwgZW5kKTsKKyAgICAgICAgaWYgKGNvbnRyb2xsZXItPm1faXRlbXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBjb21tb25BbmNlc3Rvci0+c2V0SXNNYW5pcHVsYXRlZCh0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnRyb2xsZXItPmZsdXNoUGVu
ZGluZ0l0ZW1zRm9yQ2FsbGJhY2soKTsKICAgICB9KTsKIH0KQEAgLTYyMCw3ICs2MDQsNyBAQCBW
ZWN0b3I8UmVmPE5vZGU+PiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Z2V0UGF0aChOb2Rl
KiBhbmNlc3RvciwgTm9kZSogbm9kZQogICAgIHJldHVybiBwYXRoOwogfQogCi12b2lkIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+
JiBsYXN0VG9wRG93blBhdGgsIGNvbnN0IFZlY3RvcjxSZWY8Tm9kZT4+JiBjdXJyZW50VG9wRG93
blBhdGgsIE5vZGUqIGN1cnJlbnROb2RlLCBIYXNoU2V0PFJlZjxOb2RlPj4mIGluc2VydGVkTm9k
ZXMsIFZlY3RvcjxOb2RlSW5zZXJ0aW9uPiYgaW5zZXJ0aW9ucywgSXNOb2RlTWFuaXB1bGF0ZWQg
aXNOb2RlTWFuaXB1bGF0ZWQpCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjp1cGRh
dGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiBsYXN0VG9wRG93blBhdGgsIGNvbnN0IFZl
Y3RvcjxSZWY8Tm9kZT4+JiBjdXJyZW50VG9wRG93blBhdGgsIE5vZGUqIGN1cnJlbnROb2RlLCBI
YXNoU2V0PFJlZjxOb2RlPj4mIGluc2VydGVkTm9kZXMsIFZlY3RvcjxOb2RlSW5zZXJ0aW9uPiYg
aW5zZXJ0aW9ucykKIHsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsYXN0VG9w
RG93blBhdGguc2l6ZSgpICYmIGkgPCBjdXJyZW50VG9wRG93blBhdGguc2l6ZSgpICYmIGxhc3RU
b3BEb3duUGF0aFtpXS5maXJzdC5wdHIoKSA9PSBjdXJyZW50VG9wRG93blBhdGhbaV0ucHRyKCkp
CkBAIC02NDQsNyArNjI4LDcgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6dXBk
YXRlSW5zZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5PiYgbGFzdFRvcERvd24KICAgICB9CiAKICAg
ICBpZiAoY3VycmVudE5vZGUpCi0gICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRp
b24geyBsYXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFzdFRvcERvd25QYXRoLmxhc3QoKS5zZWNv
bmQucHRyKCkgOiBudWxscHRyLCAqY3VycmVudE5vZGUsIGlzTm9kZU1hbmlwdWxhdGVkIH0pOwor
ICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgbGFzdFRvcERvd25QYXRo
LnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25kLnB0cigpIDogbnVsbHB0ciwg
KmN1cnJlbnROb2RlIH0pOwogfQogCiBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdCBWZWN0b3I8TWFu
aXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykgLT4gT3B0aW9uYWw8TWFuaXB1bGF0
aW9uRmFpbHVyZVR5cGU+CkBAIC03NzMsNyArNzU3LDcgQEAgYXV0byBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYgaXRlbSwgY29u
c3QKICAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9IGVuZC5maXJzdE5vZGUoKTsKICAgICBpZiAo
bm9kZSAmJiBub2RlICE9IGVuZE5vZGUpIHsKICAgICAgICAgYXV0byB0b3BEb3duUGF0aCA9IGdl
dFBhdGgoY29tbW9uQW5jZXN0b3IuZ2V0KCksIG5vZGUtPnBhcmVudE5vZGUoKSk7Ci0gICAgICAg
IHVwZGF0ZUluc2VydGlvbnMobGFzdFRvcERvd25QYXRoLCB0b3BEb3duUGF0aCwgbnVsbHB0ciwg
cmV1c2VkT3JpZ2luYWxOb2RlcywgaW5zZXJ0aW9ucywgSXNOb2RlTWFuaXB1bGF0ZWQ6Ok5vKTsK
KyAgICAgICAgdXBkYXRlSW5zZXJ0aW9ucyhsYXN0VG9wRG93blBhdGgsIHRvcERvd25QYXRoLCBu
dWxscHRyLCByZXVzZWRPcmlnaW5hbE5vZGVzLCBpbnNlcnRpb25zKTsKICAgICB9CiAgICAgd2hp
bGUgKG5vZGUgIT0gZW5kTm9kZSkgewogICAgICAgICBSZWY8Tm9kZT4gcGFyZW50Tm9kZSA9ICpu
b2RlLT5wYXJlbnROb2RlKCk7CkBAIC03OTIsMzIgKzc3NiwxNSBAQCBhdXRvIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVt
LCBjb25zdAogICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzVG9SZW1vdmUpCiAgICAgICAgIG5v
ZGUtPnJlbW92ZSgpOwogCi0gICAgSGFzaFNldDxSZWY8Tm9kZT4+IHBhcmVudE5vZGVzV2l0aE9u
bHlNYW5pcHVsYXRlZENoaWxkcmVuOwogICAgIGZvciAoYXV0byYgaW5zZXJ0aW9uIDogaW5zZXJ0
aW9ucykgewotICAgICAgICBSZWZQdHI8Tm9kZT4gcGFyZW50OwogICAgICAgICBpZiAoIWluc2Vy
dGlvbi5wYXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25BbmNlc3RvcikgewotICAgICAgICAgICAg
cGFyZW50ID0gaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgcGFy
ZW50LT5pbnNlcnRCZWZvcmUoaW5zZXJ0aW9uLmNoaWxkLCBpbnNlcnRpb25Qb2ludC5jb21wdXRl
Tm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgICAgICAgICBpbnNlcnRpb25Qb2ludC5jb250YWlu
ZXJOb2RlKCktPmluc2VydEJlZm9yZShpbnNlcnRpb24uY2hpbGQsIGluc2VydGlvblBvaW50LmNv
bXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0g
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShpbnNlcnRpb24uY2hpbGQucHRyKCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcGFyZW50ID0gaW5zZXJ0aW9uLnBhcmVudElmRGlmZmVy
ZW50RnJvbUNvbW1vbkFuY2VzdG9yOwotICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChp
bnNlcnRpb24uY2hpbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluc2VydGlvbi5pc0No
aWxkTWFuaXB1bGF0ZWQgPT0gSXNOb2RlTWFuaXB1bGF0ZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBw
YXJlbnROb2Rlc1dpdGhPbmx5TWFuaXB1bGF0ZWRDaGlsZHJlbi5yZW1vdmUoKnBhcmVudCk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpczxFbGVtZW50
PihpbnNlcnRpb24uY2hpbGQuZ2V0KCkpKQotICAgICAgICAgICAgbV9tYW5pcHVsYXRlZEVsZW1l
bnRzLmFkZChkb3duY2FzdDxFbGVtZW50PihpbnNlcnRpb24uY2hpbGQuZ2V0KCkpKTsKLSAgICAg
ICAgZWxzZSBpZiAocGFyZW50LT5maXJzdENoaWxkKCkgPT0gcGFyZW50LT5sYXN0Q2hpbGQoKSkK
LSAgICAgICAgICAgIHBhcmVudE5vZGVzV2l0aE9ubHlNYW5pcHVsYXRlZENoaWxkcmVuLmFkZCgq
cGFyZW50KTsKLSAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5zZXJ0aW9uLnBh
cmVudElmRGlmZmVyZW50RnJvbUNvbW1vbkFuY2VzdG9yLT5hcHBlbmRDaGlsZChpbnNlcnRpb24u
Y2hpbGQpOwogCi0gICAgZm9yIChhdXRvJiBub2RlIDogcGFyZW50Tm9kZXNXaXRoT25seU1hbmlw
dWxhdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKQot
ICAgICAgICAgICAgbV9tYW5pcHVsYXRlZEVsZW1lbnRzLmFkZChkb3duY2FzdDxFbGVtZW50Pihu
b2RlLmdldCgpKSk7CisgICAgICAgIGlmIChpbnNlcnRpb24uaXNDaGlsZE1hbmlwdWxhdGVkID09
IElzTm9kZU1hbmlwdWxhdGVkOjpZZXMpCisgICAgICAgICAgICBpbnNlcnRpb24uY2hpbGQtPnNl
dElzTWFuaXB1bGF0ZWQodHJ1ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuaAppbmRleCBkNmFjZDNjMWU0NzQ2OWQ4Nzc1NmVhZjgwMThiNzNhNjY0Yjk5ZTk5Li5jOTE2
Yzc5NDEwMjM1YWU4NjcwYTE0MjMxYWFiMjFiNzVkNGExZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCkBAIC0xNzEsMTIg
KzE3MSwxMSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdXNpbmcgTm9kZUVudHJ5ID0gc3RkOjpw
YWlyPFJlZjxOb2RlPiwgUmVmPE5vZGU+PjsKICAgICBWZWN0b3I8UmVmPE5vZGU+PiBnZXRQYXRo
KE5vZGUqLCBOb2RlKik7Ci0gICAgdm9pZCB1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50
cnk+JiwgY29uc3QgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2RlKiwgSGFzaFNldDxSZWY8Tm9kZT4+
JiwgVmVjdG9yPE5vZGVJbnNlcnRpb24+JiwgSXNOb2RlTWFuaXB1bGF0ZWQgPSBJc05vZGVNYW5p
cHVsYXRlZDo6WWVzKTsKKyAgICB2b2lkIHVwZGF0ZUluc2VydGlvbnMoVmVjdG9yPE5vZGVFbnRy
eT4mLCBjb25zdCBWZWN0b3I8UmVmPE5vZGU+PiYsIE5vZGUqLCBIYXNoU2V0PFJlZjxOb2RlPj4m
LCBWZWN0b3I8Tm9kZUluc2VydGlvbj4mKTsKICAgICBPcHRpb25hbDxNYW5pcHVsYXRpb25GYWls
dXJlVHlwZT4gcmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYsIGNvbnN0IFZlY3Rv
cjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKIAogICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1l
bnQ7CiAgICAgV2Vha0hhc2hTZXQ8RWxlbWVudD4gbV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlcjsK
LSAgICBXZWFrSGFzaFNldDxFbGVtZW50PiBtX21hbmlwdWxhdGVkRWxlbWVudHM7CiAKICAgICBN
YW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgbV9jYWxsYmFjazsKICAgICBWZWN0b3I8TWFuaXB1bGF0
aW9uSXRlbT4gbV9wZW5kaW5nSXRlbXNGb3JDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMjE5ODJiYTFlMTQyNjdiMTViZmQxZTY3
YzE1OGNhZTcxMmFkNmQ5Li5jMjc3OTdjZmQ2MWRiZmE0MjZmNmUwODQzNjY4NDdjMWIwYmZmNWZk
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMjAtMDYtMTggIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+
CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb24gc2hvdWxkIG9ic2VydmUgYWRqYWNlbnQgZWxl
bWVudHMgd2l0aCBuZXcgcmVuZGVyZXIgdG9nZXRoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisK
IDIwMjAtMDYtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdW1dQRV0gQWRkIEFQSSB0byBjb25maWd1cmUgYW5kIGhhbmRsZSBzZXJ2
aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1
bGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFu
aXB1bGF0aW9uLm1tCmluZGV4IGJjZGUwZjEyZjAwOWY2NjdkYWJkODRlNGM5MDkzODM0MjhmNjRm
MzcuLjllM2ZiODczZGQ4NDA5ZTkxMGEwNDM1MTdmMTk1ZmVhMGU5MDEwMGMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW0KQEAgLTMzNSwzMSArMzM1LDI3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3Rh
cnRUZXh0TWFuaXB1bGF0aW9uRmluZE5ld2x5RGlzcGxheWVkUGFyYWdyYXBoKQogCiAgICAgZG9u
ZSA9IGZhbHNlOwogICAgIGRlbGVnYXRlLmdldCgpLml0ZW1DYWxsYmFjayA9IF4oX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKml0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW1zLmNvdW50ID09IDMpCi0g
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfTsKICAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvckFsbCgnc3Bhbi5oaWRkZW4nKS5mb3JFYWNoKChzcGFuKSA9PiBzcGFuLmNsYXNzTGlz
dC5yZW1vdmUoJ2hpZGRlbicpKTsiXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOwogCi0gICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOwotICAgIEVYUEVDVF9FUShp
dGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vu
cy5jb3VudCwgMVVMKTsKLSAgICBSZXRhaW5QdHI8TlNTZXQ+IHRva2VucyA9IGFkb3B0TlMoW1tO
U1NldCBhbGxvY10gaW5pdFdpdGhPYmplY3RzOml0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LCBp
dGVtc1syXS50b2tlbnNbMF0uY29udGVudCwgbmlsXSk7Ci0gICAgRVhQRUNUX1RSVUUoW3Rva2Vu
cy5nZXQoKSBjb250YWluc09iamVjdDpAIldlYiJdKTsKLSAgICBFWFBFQ1RfVFJVRShbdG9rZW5z
LmdldCgpIGNvbnRhaW5zT2JqZWN0OkAiS2l0Il0pOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3Vu
dCwgMlVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAyVUwpOworICAg
IEVYUEVDVF9TVFJFUSgiV2ViIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CisgICAgRVhQRUNUX1NUUkVRKCJLaXQiLCBpdGVtc1sxXS50b2tlbnNbMV0uY29udGVudC5V
VEY4U3RyaW5nKTsKIAogICAgIC8vIFRoaXMgaGFzIHRvIGhhcHBlbiBzZXBhcmF0ZWx5IGluIG9y
ZGVyIHRvIGhhdmUgYSBkZXRlcm1pbmlzdGljIG9yZGVyaW5nLgogICAgIGRvbmUgPSBmYWxzZTsK
ICAgICBkZWxlZ2F0ZS5nZXQoKS5pdGVtQ2FsbGJhY2sgPSBeKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICppdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtcy5jb3VudCA9PSA0KQotICAgICAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07CiAgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
J2Rpdi5oaWRkZW4nKS5mb3JFYWNoKChkaXYpID0+IGRpdi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRk
ZW4nKSk7Il07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAotICAgIEVY
UEVDVF9FUShpdGVtcy5jb3VudCwgNFVMKTsKLSAgICBFWFBFQ1RfRVEoaXRlbXNbM10udG9rZW5z
LmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgiaGV5IiwgaXRlbXNbM10udG9rZW5zWzBd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOwor
ICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NU
UkVRKCJoZXkiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKIH0KIAog
VEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kU2FtZVBhcmFn
cmFwaFdpdGhOZXdDb250ZW50KQpAQCAtMjU4Nyw3ICsyNTgzLDcgQEAgVEVTVChUZXh0TWFuaXB1
bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJhY3RpbmdNYW5pcHVsYXRl
ZFRleHRBZnQKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwogICAgIFt3ZWJW
aWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwogCi0gICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPHA+Zm9vPC9wPiJdOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxwPmZvbzxicj5iYXI8L3A+
Il07CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxh
dGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeewpAQCAtMjU5NiwyMSArMjU5
MiwyMyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkF2
b2lkRXh0cmFjdGluZ01hbmlwdWxhdGVkVGV4dEFmdAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKLSAgICBh
dXRvIGl0ZW0gPSBpdGVtc1swXTsKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7Ci0g
ICAgRVhQRUNUX0VRKGl0ZW0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9XS19TVFJF
USgiZm9vIiwgaXRlbS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNv
dW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJmb28iLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudCk7Cisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoImJhciIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50KTsKIAogICAgIGRvbmUgPSBm
YWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6QFsK
LSAgICAgICAgY3JlYXRlSXRlbShpdGVtLmlkZW50aWZpZXIsIHt7IGl0ZW0udG9rZW5zWzBdLmlk
ZW50aWZpZXIsIEAiYmFyIiB9fSkuZ2V0KCkKKyAgICAgICAgY3JlYXRlSXRlbShpdGVtc1swXS5p
ZGVudGlmaWVyLCB7eyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJGT08iIH19KS5n
ZXQoKSwKKyAgICAgICAgY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7eyBpdGVtc1sx
XS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJCQVIiIH19KS5nZXQoKQogICAgIF0gY29tcGxldGlv
bjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVYUEVDVF9FUShlcnJv
cnMsIG5pbCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKLSAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmJhcjwvcD4i
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUwiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5GT088YnI+QkFSPC9wPiIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVy
SFRNTCJdKTsKIAogICAgIF9fYmxvY2sgYm9vbCBpdGVtQ2FsbGJhY2tGaXJlZCA9IGZhbHNlOwog
ICAgIFtkZWxlZ2F0ZSBzZXRJdGVtQ2FsbGJhY2s6XihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KSB7CkBAIC0yNjE4LDEyICsyNjE2LDIwIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQXZvaWRFeHRyYWN0aW5nTWFuaXB1bGF0ZWRUZXh0QWZ0CiAgICAg
fV07CiAKICAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1l
bnQucXVlcnlTZWxlY3RvcigncCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSciXTsKLSAgICBbd2Vi
VmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07Ci0KICAgICBbd2ViVmlldyBvYmpl
Y3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpLnN0
eWxlLmRpc3BsYXkgPSAnJyJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9u
VXBkYXRlXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7IgorICAgICAgICAiZWxl
bWVudC5pbm5lckhUTUw9J2VuZCc7IgorICAgICAgICAiZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
cCcpLmFmdGVyKGVsZW1lbnQpIl07CiAKLSAgICBFWFBFQ1RfRkFMU0UoaXRlbUNhbGxiYWNrRmly
ZWQpOworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5nZXQoKS5pdGVtQ2FsbGJhY2sg
PSBeKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICppdGVtKSB7CisgICAgICAgIGRvbmUgPSB0cnVl
OworICAgIH07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVY
UEVDVF9FUShpdGVtcy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5z
LmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiZW5kIiwgaXRlbXNbMl0udG9rZW5z
WzBdLmNvbnRlbnQpOwogfQogCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIFRleHRNYW5pcHVsYXRp
b25Ub2tlbkRlYnVnRGVzY3JpcHRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402511</attachid>
            <date>2020-06-22 14:04:18 -0700</date>
            <delta_ts>2020-06-26 09:18:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213333-20200622140417.patch</filename>
            <type>text/plain</type>
            <size>18850</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkzYTIyODAwYjFlOTc5
OTJkZjllNjVhNmUyZDU1YjFkODgwYjFjOC4uOTllOGUyNDg3YjdlOGUzMWEzYjdmNWRiOGY1ZTYy
ZTE1ZjgwNmNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIwLTA2LTIyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9u
IHNob3VsZCBvYnNlcnZlIGFkamFjZW50IGVsZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyIHRvZ2V0
aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMz
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBvbmx5IGtlZXBzIHRyYWNrIG9mIG1hbmlwdWxhdGVkIEVs
ZW1lbnRzLiBGb3Igb3RoZXIgdHlwZXMgb2YgTm9kZSwgbGlrZSBUZXh0LCAKKyAgICAgICAgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgZG9lcyBub3QgbWFyayB0aGVtIGFzIG1hbmlwdWxhdGVk
IGFuZCBtYXkgbWFuaXB1bGF0ZSBpdCBhZ2Fpbi4gcjI2MzEzMiB0cmllZCB0byBzb2x2ZQorICAg
ICAgICB0aGUgcHJvYmxlbSBieSBtYXJraW5nIEVsZW1lbnQgd2l0aCBvbmx5IG1hbmlwdWxhdGVk
IGNoaWxkcmVuIGFzIG1hbmlwdWxhdGVkLCBidXQgaXQgZGlkIG5vdCBpdGVyYXRlIGFsbCAKKyAg
ICAgICAgY2hpbGRyZW4gb2YgRWxlbWVudC4gU28sIGlmIG9uZSBFbGVtZW50IGhhcyBjaGlsZHJl
biBpbiBkaWZmZXJlbnQgcGFyYWdyYXBocywgaXQgbWF5IGZhaWwgdG8gbWFyayB0aGUgRWxlbWVu
dCAKKyAgICAgICAgbWFuaXB1bGF0ZWQuIFNlZSB1cGRhdGVkIHRlc3QuCisgICAgICAgIFRvIGZp
eCB0aGlzIGlzc3VlIGNvbXBsZXRlbHksIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIGNhbiB0
cmFjayBhbGwgbWFuaXB1bGF0ZWQgTm9kZXMsIHNvIGl0IGNhbiBza2lwIHRoZSAKKyAgICAgICAg
bWFuaXB1bGF0ZWQgTm9kZXMgZHVyaW5nIG9ic2VydmF0aW9uLgorCisgICAgICAgIEZvciBlbGVt
ZW50cyB3aXRoIG5ldyByZW5kZXJlciwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgb2JzZXJ2
ZXMgdGhlbSBvbmUgYnkgb25lLiBIb3dldmVyLCBhZGphY2VudCBlbGVtZW50cworICAgICAgICBj
YW4gYmUgaW4gdGhlIHNhbWUgcGFyYWdyYXBoLCBpZiB0aGVyZSBpcyBubyBkZWxpbWl0ZXIgaW4g
dGhlaXIgdGV4dCwgYW5kIHNob3VsZCBiZSBvYnNlcnZlZCB0b2dldGhlci4gVG8gc29sdmUgCisg
ICAgICAgIHRoaXMgcHJvYmxlbSwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbm93IHN0YXJ0
cyBvYnNlcnZpbmcgZnJvbSB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIHRoZXNlIGVsZW1lbnRzLiBJ
ZiBhCisgICAgICAgIE5vZGUgaW4gcmFuZ2UgaXMgbWFuaXB1bGF0ZWQsIHNwbGl0IHRoZSBwYXJh
Z3JwaCB0aGVyZS4gVGhpcyBtYWtlcyBzdXJlIGNvbnRlbnQgaW4gcGFyYWdyYXBoIGlzIG5vdCBt
YW5pcHVsYXRlZC4KKyAgICAgICAgUmVsZXZhbnQgdGVzdCBpcyB1cGRhdGVkIGZvciB0aGlzIG5l
dyBiZWhhdmlvci4KKworICAgICAgICBUZXN0czogVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRN
YW5pcHVsYXRpb25GaW5kTmV3bHlEaXNwbGF5ZWRQYXJhZ3JhcGgKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQXZvaWRFeHRyYWN0aW5nTWFu
aXB1bGF0ZWRUZXh0QWZ0ZXJNYW5pcHVsYXRpb24KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6On5Ob2RlKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZU9i
c2VydmF0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjp1cGRhdGVJbnNlcnRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQb3Np
dGlvblR1cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VIYXNoYWJsZVBvc2l0
aW9uUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuaDoKKwogMjAyMC0wNi0yMiAgSmFzb24gTGF3cmVuY2UgIDxsYXdyZW5jZS5qQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2MzMzMS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAppbmRleCA2ZmEwN2M3ZjlmOTJlMjI1NjlmNDAzNzdiNTViYTQyNGU5NTA4OThiLi42
ZDc0ODNiYjk0ZTEwYzhjOGEzYTQ1ZGE4Mjc1MzdjMTA1MWQyNDJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5j
bHVkZSAiVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlRleHRF
dmVudC5oIgorI2luY2x1ZGUgIlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiVG91Y2hFdmVudC5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTUxO
U05hbWVzLmgiCkBAIC0zNjAsNiArMzYxLDkgQEAgTm9kZTo6fk5vZGUoKQogICAgIGlmIChoYXNS
YXJlRGF0YSgpKQogICAgICAgICBjbGVhclJhcmVEYXRhKCk7CiAKKyAgICBpZiAoYXV0byogdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudCgpLnRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVySWZFeGlzdHMoKSkKKyAgICAgICAgdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXItPnJl
bW92ZU5vZGUodGhpcyk7CisKICAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKQogICAgICAgICB3
aWxsQmVEZWxldGVkRnJvbShkb2N1bWVudCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA1NTkwODUwOTgw
NzJmYzI1OWViNzc1NzE3ODRmZDRjNWY0NWQ5YmE3Li40ZTA4N2ZiYWY3YWVlOTkwOTM4ZTNmYjA5
ZjgwOTkyYWY0ZGQ1MzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAtNDIxLDkgKzQyMSw5IEBAIHZvaWQgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QKICAgICAgICAgICAgIGVuY2xvc2luZ0l0ZW1Cb3VuZGFyeUVsZW1lbnRz
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZWZQdHI8RWxlbWVudD4g
Y3VycmVudEVsZW1lbnRBbmNlc3RvciA9IGlzPEVsZW1lbnQ+KCpjb250ZW50Tm9kZSkgPyBkb3du
Y2FzdDxFbGVtZW50Pihjb250ZW50Tm9kZSkgOiBjb250ZW50Tm9kZS0+cGFyZW50T3JTaGFkb3dI
b3N0RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9tYW5pcHVsYXRlZEVsZW1lbnRzLmNv
bnRhaW5zKCpjdXJyZW50RWxlbWVudEFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmIChtX21hbmlwdWxhdGVkTm9kZXMuY29udGFpbnMoY29udGVudE5vZGUpKSB7
CisgICAgICAgICAgICBhZGRJdGVtSWZQb3NzaWJsZShzdGQ6OmV4Y2hhbmdlKHVuaXRzSW5DdXJy
ZW50UGFyYWdyYXBoLCB7IH0pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjb250ZW50Tm9kZSkpIHsKQEAgLTQ3OCw3ICs0Nzgs
NyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAKIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIGlmIChtX21hbmlwdWxhdGVkRWxlbWVudHMuY29udGFpbnMoZWxlbWVudCkpCisgICAgaWYg
KG1fbWFuaXB1bGF0ZWROb2Rlcy5jb250YWlucygmZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChtX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyLmNvbXB1dGVzRW1wdHkoKSkKQEAg
LTQ5MSwxNyArNDkxLDYgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6ZGlkQ3Jl
YXRlUmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIG1fZWxlbWVu
dHNXaXRoTmV3UmVuZGVyZXIuYWRkKGVsZW1lbnQpOwogfQogCi11c2luZyBQb3NpdGlvblR1cGxl
ID0gc3RkOjp0dXBsZTxSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkLCB1bnNpZ25lZD47Ci1zdGF0aWMg
Y29uc3QgUG9zaXRpb25UdXBsZSBtYWtlUG9zaXRpb25UdXBsZShjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCi17Ci0gICAgcmV0dXJuIHsgcG9zaXRpb24uYW5jaG9yTm9kZSgpLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocG9zaXRpb24uYW5jaG9yVHlwZSgpKSwgcG9zaXRpb24uYW5jaG9yVHlwZSgp
ID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgPyBwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSA6IDAgfTsKLX0KLQotc3RhdGljIGNvbnN0IHN0ZDo6cGFpcjxQb3Np
dGlvblR1cGxlLCBQb3NpdGlvblR1cGxlPiBtYWtlSGFzaGFibGVQb3NpdGlvblJhbmdlKGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKLXsKLSAgICByZXR1cm4geyBt
YWtlUG9zaXRpb25UdXBsZShzdGFydCksIG1ha2VQb3NpdGlvblR1cGxlKGVuZCkgfTsKLX0KLQog
dm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVPYnNlcnZhdGlvblVwZGF0
ZSgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQpAQCAtNTEyLDM3ICs1MDEsMzIgQEAgdm9pZCBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVPYnNlcnZhdGlvblVwZGF0ZSgpCiAg
ICAgICAgIGlmICghY29udHJvbGxlcikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBI
YXNoU2V0PFJlZjxFbGVtZW50Pj4gbXV0YXRlZEVsZW1lbnRzOworICAgICAgICBIYXNoU2V0PFJl
ZjxFbGVtZW50Pj4gZWxlbWVudHNUb09ic2VydmU7CiAgICAgICAgIGZvciAoYXV0byYgd2Vha0Vs
ZW1lbnQgOiBjb250cm9sbGVyLT5tX2VsZW1lbnRzV2l0aE5ld1JlbmRlcmVyKQotICAgICAgICAg
ICAgbXV0YXRlZEVsZW1lbnRzLmFkZCh3ZWFrRWxlbWVudCk7CisgICAgICAgICAgICBlbGVtZW50
c1RvT2JzZXJ2ZS5hZGQod2Vha0VsZW1lbnQpOwogICAgICAgICBjb250cm9sbGVyLT5tX2VsZW1l
bnRzV2l0aE5ld1JlbmRlcmVyLmNsZWFyKCk7CiAKLSAgICAgICAgSGFzaFNldDxSZWY8RWxlbWVu
dD4+IGZpbHRlcmVkRWxlbWVudHM7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG11dGF0
ZWRFbGVtZW50cykgewotICAgICAgICAgICAgYXV0byogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhbXV0
YXRlZEVsZW1lbnRzLmNvbnRhaW5zKHBhcmVudEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGZp
bHRlcmVkRWxlbWVudHMuYWRkKGVsZW1lbnQuY29weVJlZigpKTsKLSAgICAgICAgfQotICAgICAg
ICBtdXRhdGVkRWxlbWVudHMuY2xlYXIoKTsKLQotICAgICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxQ
b3NpdGlvblR1cGxlLCBQb3NpdGlvblR1cGxlPj4gcGFyYWdyYXBoU2V0czsKLSAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZmlsdGVyZWRFbGVtZW50cykgewotICAgICAgICAgICAgYXV0byBz
dGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbGVtZW50LnB0cigpKTsKLSAgICAg
ICAgICAgIGF1dG8gZW5kID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbGVtZW50LnB0cigp
KTsKLQotICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYXV0byBrZXkgPSBtYWtlSGFz
aGFibGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKCFwYXJhZ3Jh
cGhTZXRzLmFkZChrZXkpLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChlbGVtZW50c1RvT2JzZXJ2ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIGF1dG8qIGNvbnRyb2xsZXIgPSB3ZWFrVGhpcy5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFJlZlB0cjxOb2RlPiBjb21tb25BbmNlc3RvcjsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogZWxlbWVudHNUb09ic2VydmUpIHsKKyAgICAgICAgICAgIGlmICghY29tbW9uQW5jZXN0
b3IpCisgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBtYWtlUmVmUHRyKGVsZW1lbnQu
Z2V0KCkpOworICAgICAgICAgICAgZWxzZSBpZiAoIWVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKGNv
bW1vbkFuY2VzdG9yLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCBlbGVtZW50LmdldCgpKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGF1dG8gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUoY29tbW9uQW5jZXN0b3IuZ2V0KCkpOworICAgICAgICBhdXRvIGVuZCA9IGxhc3RQb3NpdGlv
bkluT3JBZnRlck5vZGUoY29tbW9uQW5jZXN0b3IuZ2V0KCkpOworICAgICAgICBjb250cm9sbGVy
LT5vYnNlcnZlUGFyYWdyYXBocyhzdGFydCwgZW5kKTsKIAotICAgICAgICAgICAgY29udHJvbGxl
ci0+b2JzZXJ2ZVBhcmFncmFwaHMoc3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChjb250cm9sbGVy
LT5tX2l0ZW1zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29udHJvbGxlci0+bV9tYW5pcHVs
YXRlZE5vZGVzLmFkZChjb21tb25BbmNlc3Rvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KKwogICAgICAgICBjb250cm9sbGVyLT5mbHVzaFBlbmRpbmdJdGVtc0ZvckNh
bGxiYWNrKCk7CiAgICAgfSk7CiB9CkBAIC02MjAsNyArNjA0LDcgQEAgVmVjdG9yPFJlZjxOb2Rl
Pj4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmdldFBhdGgoTm9kZSogYW5jZXN0b3IsIE5v
ZGUqIG5vZGUKICAgICByZXR1cm4gcGF0aDsKIH0KIAotdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6dXBkYXRlSW5zZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5PiYgbGFzdFRvcERvd25Q
YXRoLCBjb25zdCBWZWN0b3I8UmVmPE5vZGU+PiYgY3VycmVudFRvcERvd25QYXRoLCBOb2RlKiBj
dXJyZW50Tm9kZSwgSGFzaFNldDxSZWY8Tm9kZT4+JiBpbnNlcnRlZE5vZGVzLCBWZWN0b3I8Tm9k
ZUluc2VydGlvbj4mIGluc2VydGlvbnMsIElzTm9kZU1hbmlwdWxhdGVkIGlzTm9kZU1hbmlwdWxh
dGVkKQordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW5zZXJ0aW9ucyhW
ZWN0b3I8Tm9kZUVudHJ5PiYgbGFzdFRvcERvd25QYXRoLCBjb25zdCBWZWN0b3I8UmVmPE5vZGU+
PiYgY3VycmVudFRvcERvd25QYXRoLCBOb2RlKiBjdXJyZW50Tm9kZSwgSGFzaFNldDxSZWY8Tm9k
ZT4+JiBpbnNlcnRlZE5vZGVzLCBWZWN0b3I8Tm9kZUluc2VydGlvbj4mIGluc2VydGlvbnMpCiB7
CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHdoaWxlIChpIDwgbGFzdFRvcERvd25QYXRoLnNpemUo
KSAmJiBpIDwgY3VycmVudFRvcERvd25QYXRoLnNpemUoKSAmJiBsYXN0VG9wRG93blBhdGhbaV0u
Zmlyc3QucHRyKCkgPT0gY3VycmVudFRvcERvd25QYXRoW2ldLnB0cigpKQpAQCAtNjQ0LDcgKzYy
OCw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUluc2VydGlvbnMo
VmVjdG9yPE5vZGVFbnRyeT4mIGxhc3RUb3BEb3duCiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRO
b2RlKQotICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgbGFzdFRvcERv
d25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25kLnB0cigpIDogbnVs
bHB0ciwgKmN1cnJlbnROb2RlLCBpc05vZGVNYW5pcHVsYXRlZCB9KTsKKyAgICAgICAgaW5zZXJ0
aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGxhc3RUb3BEb3duUGF0aC5zaXplKCkgPyBsYXN0
VG9wRG93blBhdGgubGFzdCgpLnNlY29uZC5wdHIoKSA6IG51bGxwdHIsICpjdXJyZW50Tm9kZSB9
KTsKIH0KIAogYXV0byBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBN
YW5pcHVsYXRpb25JdGVtRGF0YSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYgcmVwbGFjZW1lbnRUb2tlbnMpIC0+IE9wdGlvbmFsPE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBl
PgpAQCAtNzczLDcgKzc1Nyw3IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJl
cGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgUmVmUHRy
PE5vZGU+IGVuZE5vZGUgPSBlbmQuZmlyc3ROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYgbm9kZSAh
PSBlbmROb2RlKSB7CiAgICAgICAgIGF1dG8gdG9wRG93blBhdGggPSBnZXRQYXRoKGNvbW1vbkFu
Y2VzdG9yLmdldCgpLCBub2RlLT5wYXJlbnROb2RlKCkpOwotICAgICAgICB1cGRhdGVJbnNlcnRp
b25zKGxhc3RUb3BEb3duUGF0aCwgdG9wRG93blBhdGgsIG51bGxwdHIsIHJldXNlZE9yaWdpbmFs
Tm9kZXMsIGluc2VydGlvbnMsIElzTm9kZU1hbmlwdWxhdGVkOjpObyk7CisgICAgICAgIHVwZGF0
ZUluc2VydGlvbnMobGFzdFRvcERvd25QYXRoLCB0b3BEb3duUGF0aCwgbnVsbHB0ciwgcmV1c2Vk
T3JpZ2luYWxOb2RlcywgaW5zZXJ0aW9ucyk7CiAgICAgfQogICAgIHdoaWxlIChub2RlICE9IGVu
ZE5vZGUpIHsKICAgICAgICAgUmVmPE5vZGU+IHBhcmVudE5vZGUgPSAqbm9kZS0+cGFyZW50Tm9k
ZSgpOwpAQCAtNzkyLDM1ICs3NzYsMjMgQEAgYXV0byBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYgaXRlbSwgY29uc3QKICAgICBm
b3IgKGF1dG8mIG5vZGUgOiBub2Rlc1RvUmVtb3ZlKQogICAgICAgICBub2RlLT5yZW1vdmUoKTsK
IAotICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBwYXJlbnROb2Rlc1dpdGhPbmx5TWFuaXB1bGF0ZWRD
aGlsZHJlbjsKICAgICBmb3IgKGF1dG8mIGluc2VydGlvbiA6IGluc2VydGlvbnMpIHsKLSAgICAg
ICAgUmVmUHRyPE5vZGU+IHBhcmVudDsKICAgICAgICAgaWYgKCFpbnNlcnRpb24ucGFyZW50SWZE
aWZmZXJlbnRGcm9tQ29tbW9uQW5jZXN0b3IpIHsKLSAgICAgICAgICAgIHBhcmVudCA9IGluc2Vy
dGlvblBvaW50LmNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVm
b3JlKGluc2VydGlvbi5jaGlsZCwgaW5zZXJ0aW9uUG9pbnQuY29tcHV0ZU5vZGVBZnRlclBvc2l0
aW9uKCkpOworICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpLT5pbnNl
cnRCZWZvcmUoaW5zZXJ0aW9uLmNoaWxkLCBpbnNlcnRpb25Qb2ludC5jb21wdXRlTm9kZUFmdGVy
UG9zaXRpb24oKSk7CiAgICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IHBvc2l0aW9uSW5QYXJl
bnRBZnRlck5vZGUoaW5zZXJ0aW9uLmNoaWxkLnB0cigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHBhcmVudCA9IGluc2VydGlvbi5wYXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25B
bmNlc3RvcjsKLSAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoaW5zZXJ0aW9uLmNoaWxk
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnNlcnRpb24uaXNDaGlsZE1hbmlwdWxhdGVk
ID09IElzTm9kZU1hbmlwdWxhdGVkOjpObykgewotICAgICAgICAgICAgcGFyZW50Tm9kZXNXaXRo
T25seU1hbmlwdWxhdGVkQ2hpbGRyZW4ucmVtb3ZlKCpwYXJlbnQpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXM8RWxlbWVudD4oaW5zZXJ0aW9uLmNo
aWxkLmdldCgpKSkKLSAgICAgICAgICAgIG1fbWFuaXB1bGF0ZWRFbGVtZW50cy5hZGQoZG93bmNh
c3Q8RWxlbWVudD4oaW5zZXJ0aW9uLmNoaWxkLmdldCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKHBh
cmVudC0+Zmlyc3RDaGlsZCgpID09IHBhcmVudC0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBw
YXJlbnROb2Rlc1dpdGhPbmx5TWFuaXB1bGF0ZWRDaGlsZHJlbi5hZGQoKnBhcmVudCk7Ci0gICAg
fQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluc2VydGlvbi5wYXJlbnRJZkRpZmZlcmVu
dEZyb21Db21tb25BbmNlc3Rvci0+YXBwZW5kQ2hpbGQoaW5zZXJ0aW9uLmNoaWxkKTsKIAotICAg
IGZvciAoYXV0byYgbm9kZSA6IHBhcmVudE5vZGVzV2l0aE9ubHlNYW5pcHVsYXRlZENoaWxkcmVu
KSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlLmdldCgpKSkKLSAgICAgICAgICAgIG1f
bWFuaXB1bGF0ZWRFbGVtZW50cy5hZGQoZG93bmNhc3Q8RWxlbWVudD4obm9kZS5nZXQoKSkpOwor
ICAgICAgICBpZiAoaW5zZXJ0aW9uLmlzQ2hpbGRNYW5pcHVsYXRlZCA9PSBJc05vZGVNYW5pcHVs
YXRlZDo6WWVzKQorICAgICAgICAgICAgbV9tYW5pcHVsYXRlZE5vZGVzLmFkZChpbnNlcnRpb24u
Y2hpbGQucHRyKCkpOwogICAgIH0KIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKK3Zv
aWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU5vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBtX21hbmlwdWxhdGVkTm9kZXMucmVtb3ZlKG5vZGUpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmgKaW5kZXggZDZhY2QzYzFlNDc0NjlkODc3NTZlYWY4MDE4YjczYTY2NGI5
OWU5OS4uMTk1OGU5OTcyMWM5MzNiOGJhNTI5ZGQ5NDcxYjZiZWRjN2U3YTYwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaApA
QCAtMTE2LDYgKzExNiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0YXJ0
T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgVmVjdG9yPEV4
Y2x1c2lvblJ1bGU+JiYgPSB7IH0pOwogCiAgICAgdm9pZCBkaWRDcmVhdGVSZW5kZXJlckZvckVs
ZW1lbnQoRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlTm9kZShOb2RlKik7CiAKICAgICBlbnVt
IGNsYXNzIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlIDogdWludDhfdCB7CiAgICAgICAgIENvbnRl
bnRDaGFuZ2VkLApAQCAtMTcxLDEyICsxNzIsMTIgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHVz
aW5nIE5vZGVFbnRyeSA9IHN0ZDo6cGFpcjxSZWY8Tm9kZT4sIFJlZjxOb2RlPj47CiAgICAgVmVj
dG9yPFJlZjxOb2RlPj4gZ2V0UGF0aChOb2RlKiwgTm9kZSopOwotICAgIHZvaWQgdXBkYXRlSW5z
ZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5PiYsIGNvbnN0IFZlY3RvcjxSZWY8Tm9kZT4+JiwgTm9k
ZSosIEhhc2hTZXQ8UmVmPE5vZGU+PiYsIFZlY3RvcjxOb2RlSW5zZXJ0aW9uPiYsIElzTm9kZU1h
bmlwdWxhdGVkID0gSXNOb2RlTWFuaXB1bGF0ZWQ6Olllcyk7CisgICAgdm9pZCB1cGRhdGVJbnNl
cnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiwgY29uc3QgVmVjdG9yPFJlZjxOb2RlPj4mLCBOb2Rl
KiwgSGFzaFNldDxSZWY8Tm9kZT4+JiwgVmVjdG9yPE5vZGVJbnNlcnRpb24+Jik7CiAgICAgT3B0
aW9uYWw8TWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU+IHJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9u
SXRlbURhdGEmLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CiAKICAgICBXZWFr
UHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFdlYWtIYXNoU2V0PEVsZW1lbnQ+IG1fZWxl
bWVudHNXaXRoTmV3UmVuZGVyZXI7Ci0gICAgV2Vha0hhc2hTZXQ8RWxlbWVudD4gbV9tYW5pcHVs
YXRlZEVsZW1lbnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbWFuaXB1bGF0ZWROb2RlczsKIAog
ICAgIE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayBtX2NhbGxiYWNrOwogICAgIFZlY3RvcjxNYW5p
cHVsYXRpb25JdGVtPiBtX3BlbmRpbmdJdGVtc0ZvckNhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM4ZTU1ZjVjYjk1ZjNiYjhiNjU5
OGFkNTRiOGIxOTQwZTFkMDgwNzQuLjU3ZGJmZDhmMTZlMGJhMTE1YWZiYmZkM2NlM2RiYTZjNWM5
NzYzODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNi0yMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxl
LmNvbT4KKworICAgICAgICBUZXh0IG1hbmlwdWxhdGlvbiBzaG91bGQgb2JzZXJ2ZSBhZGphY2Vu
dCBlbGVtZW50cyB3aXRoIG5ldyByZW5kZXJlciB0b2dldGhlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMzMzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAyMC0wNi0yMiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2V3c10gU3dpdGNoIGNvbnRyaWJ1dG9ycy5qc29uIHVybCBmcm9tIHRyYWMgdG8g
c3ZuIHNlcnZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCmluZGV4IGJjZGUwZjEyZjAwOWY2NjdkYWJkODRl
NGM5MDkzODM0MjhmNjRmMzcuLjllM2ZiODczZGQ4NDA5ZTkxMGEwNDM1MTdmMTk1ZmVhMGU5MDEw
MGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4
dE1hbmlwdWxhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW0KQEAgLTMzNSwzMSArMzM1LDI3IEBAIFRFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE5ld2x5RGlzcGxheWVkUGFyYWdy
YXBoKQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIGRlbGVnYXRlLmdldCgpLml0ZW1DYWxsYmFj
ayA9IF4oX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKml0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW1z
LmNvdW50ID09IDMpCi0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CiAgICAgfTsKICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3Bhbi5oaWRkZW4nKS5mb3JFYWNoKChzcGFuKSA9
PiBzcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpKTsiXTsKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOwogCi0gICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOwot
ICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX0VR
KGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBSZXRhaW5QdHI8TlNTZXQ+IHRva2Vu
cyA9IGFkb3B0TlMoW1tOU1NldCBhbGxvY10gaW5pdFdpdGhPYmplY3RzOml0ZW1zWzFdLnRva2Vu
c1swXS5jb250ZW50LCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudCwgbmlsXSk7Ci0gICAgRVhQ
RUNUX1RSVUUoW3Rva2Vucy5nZXQoKSBjb250YWluc09iamVjdDpAIldlYiJdKTsKLSAgICBFWFBF
Q1RfVFJVRShbdG9rZW5zLmdldCgpIGNvbnRhaW5zT2JqZWN0OkAiS2l0Il0pOworICAgIEVYUEVD
VF9FUShpdGVtcy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNv
dW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiV2ViIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNv
bnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJLaXQiLCBpdGVtc1sxXS50b2tl
bnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKIAogICAgIC8vIFRoaXMgaGFzIHRvIGhhcHBlbiBz
ZXBhcmF0ZWx5IGluIG9yZGVyIHRvIGhhdmUgYSBkZXRlcm1pbmlzdGljIG9yZGVyaW5nLgogICAg
IGRvbmUgPSBmYWxzZTsKICAgICBkZWxlZ2F0ZS5nZXQoKS5pdGVtQ2FsbGJhY2sgPSBeKF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtICppdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtcy5jb3VudCA9PSA0
KQotICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07
CiAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5oaWRkZW4nKS5mb3JFYWNoKChkaXYpID0+IGRpdi5jbGFzc0xp
c3QucmVtb3ZlKCdoaWRkZW4nKSk7Il07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKIAotICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgNFVMKTsKLSAgICBFWFBFQ1RfRVEo
aXRlbXNbM10udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgiaGV5IiwgaXRl
bXNbM10udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX0VRKGl0ZW1z
LmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7
CisgICAgRVhQRUNUX1NUUkVRKCJoZXkiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKIH0KIAogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRp
b25GaW5kU2FtZVBhcmFncmFwaFdpdGhOZXdDb250ZW50KQpAQCAtMjU4Nyw3ICsyNTgzLDcgQEAg
VEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJh
Y3RpbmdNYW5pcHVsYXRlZFRleHRBZnQKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAw
KV0pOwogICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOwogCi0gICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPHA+
Zm9vPC9wPiJdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxw
PmZvbzxicj5iYXI8L3A+Il07CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX3N0
YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeewpA
QCAtMjU5NiwyMSArMjU5MiwyMyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbkF2b2lkRXh0cmFjdGluZ01hbmlwdWxhdGVkVGV4dEFmdAogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRl
IGl0ZW1zXTsKLSAgICBhdXRvIGl0ZW0gPSBpdGVtc1swXTsKLSAgICBFWFBFQ1RfRVEoaXRlbXMu
Y291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX0VRKGl0ZW0udG9rZW5zLmNvdW50LCAxVUwpOwotICAg
IEVYUEVDVF9XS19TVFJFUSgiZm9vIiwgaXRlbS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQ
RUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMu
Y291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJmb28iLCBpdGVtc1swXS50b2tlbnNb
MF0uY29udGVudCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoImJhciIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50KTsK
IAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uRm9ySXRlbXM6QFsKLSAgICAgICAgY3JlYXRlSXRlbShpdGVtLmlkZW50aWZpZXIsIHt7IGl0
ZW0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiYmFyIiB9fSkuZ2V0KCkKKyAgICAgICAgY3JlYXRl
SXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7eyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmll
ciwgQCJGT08iIH19KS5nZXQoKSwKKyAgICAgICAgY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlm
aWVyLCB7eyBpdGVtc1sxXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJCQVIiIH19KS5nZXQoKQog
ICAgIF0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAg
IEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKLSAgICBFWFBFQ1RfV0tfU1RS
RVEoIjxwPmJhcjwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5GT088
YnI+QkFSPC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIAogICAgIF9fYmxvY2sgYm9vbCBpdGVtQ2FsbGJhY2tG
aXJlZCA9IGZhbHNlOwogICAgIFtkZWxlZ2F0ZSBzZXRJdGVtQ2FsbGJhY2s6XihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKSB7CkBAIC0yNjE4LDEyICsyNjE2LDIwIEBAIFRFU1QoVGV4dE1hbmlw
dWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQXZvaWRFeHRyYWN0aW5nTWFuaXB1bGF0
ZWRUZXh0QWZ0CiAgICAgfV07CiAKICAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9u
ZSciXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07Ci0KICAg
ICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcigncCcpLnN0eWxlLmRpc3BsYXkgPSAnJyJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAidmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7
IgorICAgICAgICAiZWxlbWVudC5pbm5lckhUTUw9J2VuZCc7IgorICAgICAgICAiZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcigncCcpLmFmdGVyKGVsZW1lbnQpIl07CiAKLSAgICBFWFBFQ1RfRkFMU0Uo
aXRlbUNhbGxiYWNrRmlyZWQpOworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBkZWxlZ2F0ZS5nZXQo
KS5pdGVtQ2FsbGJhY2sgPSBeKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICppdGVtKSB7CisgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgIH07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKKworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiZW5kIiwg
aXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQpOwogfQogCiBURVNUKFRleHRNYW5pcHVsYXRpb24s
IFRleHRNYW5pcHVsYXRpb25Ub2tlbkRlYnVnRGVzY3JpcHRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402873</attachid>
            <date>2020-06-26 09:18:12 -0700</date>
            <delta_ts>2020-06-26 09:41:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-213333-20200626091811.patch</filename>
            <type>text/plain</type>
            <size>18948</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzM4YmMyMDY1YWYzZDEz
NjhjZDQ3M2VhODE4M2JmNDdiMWQ1ZmMzMS4uOTA1ZDJhNWI3YTBkNWViOGU1YTIwYjFjYzFiMWQ3
M2E0MjRiMGUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIwLTA2LTI1ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9u
IHNob3VsZCBvYnNlcnZlIGFkamFjZW50IGVsZW1lbnRzIHdpdGggbmV3IHJlbmRlcmVyIHRvZ2V0
aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMz
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBvbmx5IGtlZXBzIHRyYWNrIG9mIG1hbmlwdWxhdGVkIEVs
ZW1lbnRzLiBGb3Igb3RoZXIgdHlwZXMgb2YgTm9kZSwgbGlrZSBUZXh0LCAKKyAgICAgICAgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgZG9lcyBub3QgbWFyayB0aGVtIGFzIG1hbmlwdWxhdGVk
IGFuZCBtYXkgbWFuaXB1bGF0ZSBpdCBhZ2Fpbi4gcjI2MzEzMiB0cmllZCB0byBzb2x2ZQorICAg
ICAgICB0aGUgcHJvYmxlbSBieSBtYXJraW5nIEVsZW1lbnQgd2l0aCBvbmx5IG1hbmlwdWxhdGVk
IGNoaWxkcmVuIGFzIG1hbmlwdWxhdGVkLCBidXQgaXQgZGlkIG5vdCBpdGVyYXRlIGFsbCAKKyAg
ICAgICAgY2hpbGRyZW4gb2YgRWxlbWVudC4gU28sIGlmIG9uZSBFbGVtZW50IGhhcyBjaGlsZHJl
biBpbiBkaWZmZXJlbnQgcGFyYWdyYXBocywgaXQgbWF5IGZhaWwgdG8gbWFyayB0aGUgRWxlbWVu
dCAKKyAgICAgICAgbWFuaXB1bGF0ZWQuIFNlZSB1cGRhdGVkIHRlc3QuCisgICAgICAgIFRvIGZp
eCB0aGlzIGlzc3VlIGNvbXBsZXRlbHksIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIG5vdyB0
cmFja3MgYWxsIG1hbmlwdWxhdGVkIE5vZGVzLCBzbyBpdCBjYW4gc2tpcCB0aGUgCisgICAgICAg
IG1hbmlwdWxhdGVkIE5vZGVzIGR1cmluZyBvYnNlcnZhdGlvbi4KKworICAgICAgICBGb3IgZWxl
bWVudHMgd2l0aCBuZXcgcmVuZGVyZXIsIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIG9ic2Vy
dmVzIHRoZW0gb25lIGJ5IG9uZS4gSG93ZXZlciwgYWRqYWNlbnQgZWxlbWVudHMKKyAgICAgICAg
Y2FuIGJlIGluIHRoZSBzYW1lIHBhcmFncmFwaCwgaWYgdGhlcmUgaXMgbm8gZGVsaW1pdGVyIGlu
IHRoZWlyIHRleHQsIGFuZCBzaG91bGQgYmUgb2JzZXJ2ZWQgdG9nZXRoZXIuIFRvIHNvbHZlIAor
ICAgICAgICB0aGlzIHByb2JsZW0sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIG5vdyBzdGFy
dHMgb2JzZXJ2aW5nIGZyb20gdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGVzZSBlbGVtZW50cy4g
SWYgYQorICAgICAgICBOb2RlIGluIHJhbmdlIGlzIG1hbmlwdWxhdGVkLCBzcGxpdCB0aGUgcGFy
YWdycGggdGhlcmUuIFRoaXMgbWFrZXMgc3VyZSBjb250ZW50IGluIHBhcmFncmFwaCBpcyBub3Qg
bWFuaXB1bGF0ZWQuCisgICAgICAgIFJlbGV2YW50IHRlc3QgaXMgdXBkYXRlZCBmb3IgdGhpcyBu
ZXcgYmVoYXZpb3IuCisKKyAgICAgICAgVGVzdHM6IFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0
TWFuaXB1bGF0aW9uRmluZE5ld2x5RGlzcGxheWVkUGFyYWdyYXBoCisgICAgICAgICAgICAgICBU
ZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkF2b2lkRXh0cmFjdGluZ01h
bmlwdWxhdGVkVGV4dEFmdGVyTWFuaXB1bGF0aW9uCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp+Tm9kZSk6CisgICAgICAgICogZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmRpZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVP
YnNlcnZhdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6dXBkYXRlSW5zZXJ0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlUG9z
aXRpb25UdXBsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlSGFzaGFibGVQb3Np
dGlvblJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmg6CisKIDIwMjAtMDYtMjUgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtpT1NdIEV2ZW50IHJlZ2lvbiBicmllZmx5IG1pc3NpbmcgZWRpdGFi
bGUgZWxlbWVudCBhZnRlciB0eXBpbmcgc2Vjb25kIGNoYXJhY3RlciBpbiBxdWVzdGlvbiBmaWVs
ZCBvbiBkaXNjdXNzaW9ucy5hcHBsZS5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA2ZmEwN2M3Zjlm
OTJlMjI1NjlmNDAzNzdiNTViYTQyNGU5NTA4OThiLi42OWU1YTliYTY5MTQ2NmI2MTBhZjllZGJi
MzQwMjhjMzkxNDQxMjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC03Myw2ICs3Myw3IEBACiAjaW5j
bHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVDb250ZW50RG9j
dW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVG91Y2hFdmVudC5oIgogI2luY2x1
ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0zNjAsNiArMzYx
LDEwIEBAIE5vZGU6On5Ob2RlKCkKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgY2xl
YXJSYXJlRGF0YSgpOwogCisgICAgYXV0byogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBk
b2N1bWVudCgpLnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVySWZFeGlzdHMoKTsKKyAgICBpZiAo
VU5MSUtFTFkodGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpKQorICAgICAgICB0ZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci0+cmVtb3ZlTm9kZSh0aGlzKTsKKwogICAgIGlmICghaXNDb250YWlu
ZXJOb2RlKCkpCiAgICAgICAgIHdpbGxCZURlbGV0ZWRGcm9tKGRvY3VtZW50KCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCmluZGV4IGI1ZmZiOWQ1Y2Q5N2VmYmEyMzE1ZjZlOGI4OGY4ZmFhNDExYjk2NDEuLmUxZjg0
NDJlYzE0ZDQ3MDQxZjQ3MGE5ZjFlNzE4ZDRjYTg0NzZkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC00NDUs
OSArNDQ1LDkgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFn
cmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgICAgICAgICAgZW5jbG9zaW5n
SXRlbUJvdW5kYXJ5RWxlbWVudHMucmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKFJlZlB0cjxFbGVtZW50PiBjdXJyZW50RWxlbWVudEFuY2VzdG9yID0gaXM8RWxlbWVudD4o
KmNvbnRlbnROb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGNvbnRlbnROb2RlKSA6IGNvbnRlbnRO
b2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChtX21h
bmlwdWxhdGVkRWxlbWVudHMuY29udGFpbnMoKmN1cnJlbnRFbGVtZW50QW5jZXN0b3IpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fbWFuaXB1bGF0ZWROb2Rlcy5jb250
YWlucyhjb250ZW50Tm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEl0ZW1JZlBvc3NpYmxlKHN0ZDo6
ZXhjaGFuZ2UodW5pdHNJbkN1cnJlbnRQYXJhZ3JhcGgsIHsgfSkpOworICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNvbnRlbnROb2Rl
KSkgewpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKIAogdm9pZCBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKG1fbWFuaXB1bGF0ZWRFbGVtZW50cy5jb250YWlu
cyhlbGVtZW50KSkKKyAgICBpZiAobV9tYW5pcHVsYXRlZE5vZGVzLmNvbnRhaW5zKCZlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZWxlbWVudHNXaXRoTmV3UmVuZGVyZXIu
Y29tcHV0ZXNFbXB0eSgpKQpAQCAtNTE1LDE3ICs1MTUsNiBAQCB2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpkaWRDcmVhdGVSZW5kZXJlckZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVu
dCkKICAgICAgICAgbV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlci5hZGQoZWxlbWVudCk7CiB9CiAK
LXVzaW5nIFBvc2l0aW9uVHVwbGUgPSBzdGQ6OnR1cGxlPFJlZlB0cjxOb2RlPiwgdW5zaWduZWQs
IHVuc2lnbmVkPjsKLXN0YXRpYyBjb25zdCBQb3NpdGlvblR1cGxlIG1ha2VQb3NpdGlvblR1cGxl
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICByZXR1cm4geyBwb3NpdGlvbi5hbmNo
b3JOb2RlKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5hbmNob3JUeXBlKCkpLCBw
b3NpdGlvbi5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciA/IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDogMCB9OwotfQotCi1zdGF0aWMg
Y29uc3Qgc3RkOjpwYWlyPFBvc2l0aW9uVHVwbGUsIFBvc2l0aW9uVHVwbGU+IG1ha2VIYXNoYWJs
ZVBvc2l0aW9uUmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQotewotICAgIHJldHVybiB7IG1ha2VQb3NpdGlvblR1cGxlKHN0YXJ0KSwgbWFrZVBvc2l0aW9u
VHVwbGUoZW5kKSB9OwotfQotCiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzY2hl
ZHVsZU9ic2VydmF0aW9uVXBkYXRlKCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCkBAIC01MzYs
MzcgKzUyNSwzMiBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZU9i
c2VydmF0aW9uVXBkYXRlKCkKICAgICAgICAgaWYgKCFjb250cm9sbGVyKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIEhhc2hTZXQ8UmVmPEVsZW1lbnQ+PiBtdXRhdGVkRWxlbWVudHM7
CisgICAgICAgIEhhc2hTZXQ8UmVmPEVsZW1lbnQ+PiBlbGVtZW50c1RvT2JzZXJ2ZTsKICAgICAg
ICAgZm9yIChhdXRvJiB3ZWFrRWxlbWVudCA6IGNvbnRyb2xsZXItPm1fZWxlbWVudHNXaXRoTmV3
UmVuZGVyZXIpCi0gICAgICAgICAgICBtdXRhdGVkRWxlbWVudHMuYWRkKHdlYWtFbGVtZW50KTsK
KyAgICAgICAgICAgIGVsZW1lbnRzVG9PYnNlcnZlLmFkZCh3ZWFrRWxlbWVudCk7CiAgICAgICAg
IGNvbnRyb2xsZXItPm1fZWxlbWVudHNXaXRoTmV3UmVuZGVyZXIuY2xlYXIoKTsKIAotICAgICAg
ICBIYXNoU2V0PFJlZjxFbGVtZW50Pj4gZmlsdGVyZWRFbGVtZW50czsKLSAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogbXV0YXRlZEVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBhdXRvKiBwYXJl
bnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKCFw
YXJlbnRFbGVtZW50IHx8ICFtdXRhdGVkRWxlbWVudHMuY29udGFpbnMocGFyZW50RWxlbWVudCkp
Ci0gICAgICAgICAgICAgICAgZmlsdGVyZWRFbGVtZW50cy5hZGQoZWxlbWVudC5jb3B5UmVmKCkp
OwotICAgICAgICB9Ci0gICAgICAgIG11dGF0ZWRFbGVtZW50cy5jbGVhcigpOwotCi0gICAgICAg
IEhhc2hTZXQ8c3RkOjpwYWlyPFBvc2l0aW9uVHVwbGUsIFBvc2l0aW9uVHVwbGU+PiBwYXJhZ3Jh
cGhTZXRzOwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBmaWx0ZXJlZEVsZW1lbnRzKSB7
Ci0gICAgICAgICAgICBhdXRvIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGVs
ZW1lbnQucHRyKCkpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0
ZXJOb2RlKGVsZW1lbnQucHRyKCkpOwotCi0gICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkg
fHwgZW5kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBhdXRvIGtleSA9IG1ha2VIYXNoYWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAg
ICAgICAgICBpZiAoIXBhcmFncmFwaFNldHMuYWRkKGtleSkuaXNOZXdFbnRyeSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVsZW1lbnRzVG9PYnNlcnZlLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byogY29udHJvbGxlciA9
IHdlYWtUaGlzLmdldCgpOwotICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yOworICAg
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50c1RvT2JzZXJ2ZSkgeworICAgICAgICAg
ICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9
IG1ha2VSZWZQdHIoZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmICghZWxlbWVu
dC0+aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7CisgICAgICAgICAgICAg
ICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29tbW9uQW5jZXN0
b3IsIGVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25BbmNlc3Rv
cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzdGFydCA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjb21tb25BbmNlc3Rvci5nZXQoKSk7CisgICAgICAgIGF1
dG8gZW5kID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjb21tb25BbmNlc3Rvci5nZXQoKSk7
CisgICAgICAgIGNvbnRyb2xsZXItPm9ic2VydmVQYXJhZ3JhcGhzKHN0YXJ0LCBlbmQpOwogCi0g
ICAgICAgICAgICBjb250cm9sbGVyLT5vYnNlcnZlUGFyYWdyYXBocyhzdGFydCwgZW5kKTsKKyAg
ICAgICAgaWYgKGNvbnRyb2xsZXItPm1faXRlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBj
b250cm9sbGVyLT5tX21hbmlwdWxhdGVkTm9kZXMuYWRkKGNvbW1vbkFuY2VzdG9yLmdldCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnRyb2xsZXItPmZs
dXNoUGVuZGluZ0l0ZW1zRm9yQ2FsbGJhY2soKTsKICAgICB9KTsKIH0KQEAgLTY0NCw3ICs2Mjgs
NyBAQCBWZWN0b3I8UmVmPE5vZGU+PiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Z2V0UGF0
aChOb2RlKiBhbmNlc3RvciwgTm9kZSogbm9kZQogICAgIHJldHVybiBwYXRoOwogfQogCi12b2lk
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2Rl
RW50cnk+JiBsYXN0VG9wRG93blBhdGgsIGNvbnN0IFZlY3RvcjxSZWY8Tm9kZT4+JiBjdXJyZW50
VG9wRG93blBhdGgsIE5vZGUqIGN1cnJlbnROb2RlLCBIYXNoU2V0PFJlZjxOb2RlPj4mIGluc2Vy
dGVkTm9kZXMsIFZlY3RvcjxOb2RlSW5zZXJ0aW9uPiYgaW5zZXJ0aW9ucywgSXNOb2RlTWFuaXB1
bGF0ZWQgaXNOb2RlTWFuaXB1bGF0ZWQpCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
Ojp1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiBsYXN0VG9wRG93blBhdGgsIGNv
bnN0IFZlY3RvcjxSZWY8Tm9kZT4+JiBjdXJyZW50VG9wRG93blBhdGgsIE5vZGUqIGN1cnJlbnRO
b2RlLCBIYXNoU2V0PFJlZjxOb2RlPj4mIGluc2VydGVkTm9kZXMsIFZlY3RvcjxOb2RlSW5zZXJ0
aW9uPiYgaW5zZXJ0aW9ucykKIHsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBs
YXN0VG9wRG93blBhdGguc2l6ZSgpICYmIGkgPCBjdXJyZW50VG9wRG93blBhdGguc2l6ZSgpICYm
IGxhc3RUb3BEb3duUGF0aFtpXS5maXJzdC5wdHIoKSA9PSBjdXJyZW50VG9wRG93blBhdGhbaV0u
cHRyKCkpCkBAIC02NjgsNyArNjUyLDcgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6dXBkYXRlSW5zZXJ0aW9ucyhWZWN0b3I8Tm9kZUVudHJ5PiYgbGFzdFRvcERvd24KICAgICB9
CiAKICAgICBpZiAoY3VycmVudE5vZGUpCi0gICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJ
bnNlcnRpb24geyBsYXN0VG9wRG93blBhdGguc2l6ZSgpID8gbGFzdFRvcERvd25QYXRoLmxhc3Qo
KS5zZWNvbmQucHRyKCkgOiBudWxscHRyLCAqY3VycmVudE5vZGUsIGlzTm9kZU1hbmlwdWxhdGVk
IH0pOworICAgICAgICBpbnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgbGFzdFRvcERv
d25QYXRoLnNpemUoKSA/IGxhc3RUb3BEb3duUGF0aC5sYXN0KCkuc2Vjb25kLnB0cigpIDogbnVs
bHB0ciwgKmN1cnJlbnROb2RlIH0pOwogfQogCiBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdCBWZWN0
b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykgLT4gT3B0aW9uYWw8TWFu
aXB1bGF0aW9uRmFpbHVyZVR5cGU+CkBAIC03OTcsNyArNzgxLDcgQEAgYXV0byBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYgaXRl
bSwgY29uc3QKICAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9IGVuZC5maXJzdE5vZGUoKTsKICAg
ICBpZiAobm9kZSAmJiBub2RlICE9IGVuZE5vZGUpIHsKICAgICAgICAgYXV0byB0b3BEb3duUGF0
aCA9IGdldFBhdGgoY29tbW9uQW5jZXN0b3IuZ2V0KCksIG5vZGUtPnBhcmVudE5vZGUoKSk7Ci0g
ICAgICAgIHVwZGF0ZUluc2VydGlvbnMobGFzdFRvcERvd25QYXRoLCB0b3BEb3duUGF0aCwgbnVs
bHB0ciwgcmV1c2VkT3JpZ2luYWxOb2RlcywgaW5zZXJ0aW9ucywgSXNOb2RlTWFuaXB1bGF0ZWQ6
Ok5vKTsKKyAgICAgICAgdXBkYXRlSW5zZXJ0aW9ucyhsYXN0VG9wRG93blBhdGgsIHRvcERvd25Q
YXRoLCBudWxscHRyLCByZXVzZWRPcmlnaW5hbE5vZGVzLCBpbnNlcnRpb25zKTsKICAgICB9CiAg
ICAgd2hpbGUgKG5vZGUgIT0gZW5kTm9kZSkgewogICAgICAgICBSZWY8Tm9kZT4gcGFyZW50Tm9k
ZSA9ICpub2RlLT5wYXJlbnROb2RlKCk7CkBAIC04MTYsMzUgKzgwMCwyMyBAQCBhdXRvIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRh
JiBpdGVtLCBjb25zdAogICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzVG9SZW1vdmUpCiAgICAg
ICAgIG5vZGUtPnJlbW92ZSgpOwogCi0gICAgSGFzaFNldDxSZWY8Tm9kZT4+IHBhcmVudE5vZGVz
V2l0aE9ubHlNYW5pcHVsYXRlZENoaWxkcmVuOwogICAgIGZvciAoYXV0byYgaW5zZXJ0aW9uIDog
aW5zZXJ0aW9ucykgewotICAgICAgICBSZWZQdHI8Tm9kZT4gcGFyZW50OwogICAgICAgICBpZiAo
IWluc2VydGlvbi5wYXJlbnRJZkRpZmZlcmVudEZyb21Db21tb25BbmNlc3RvcikgewotICAgICAg
ICAgICAgcGFyZW50ID0gaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpOwotICAgICAgICAg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoaW5zZXJ0aW9uLmNoaWxkLCBpbnNlcnRpb25Qb2ludC5j
b21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgICAgICAgICBpbnNlcnRpb25Qb2ludC5j
b250YWluZXJOb2RlKCktPmluc2VydEJlZm9yZShpbnNlcnRpb24uY2hpbGQsIGluc2VydGlvblBv
aW50LmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGluc2VydGlvblBv
aW50ID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShpbnNlcnRpb24uY2hpbGQucHRyKCkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyZW50ID0gaW5zZXJ0aW9uLnBhcmVudElm
RGlmZmVyZW50RnJvbUNvbW1vbkFuY2VzdG9yOwotICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRD
aGlsZChpbnNlcnRpb24uY2hpbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluc2VydGlv
bi5pc0NoaWxkTWFuaXB1bGF0ZWQgPT0gSXNOb2RlTWFuaXB1bGF0ZWQ6Ok5vKSB7Ci0gICAgICAg
ICAgICBwYXJlbnROb2Rlc1dpdGhPbmx5TWFuaXB1bGF0ZWRDaGlsZHJlbi5yZW1vdmUoKnBhcmVu
dCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpczxF
bGVtZW50PihpbnNlcnRpb24uY2hpbGQuZ2V0KCkpKQotICAgICAgICAgICAgbV9tYW5pcHVsYXRl
ZEVsZW1lbnRzLmFkZChkb3duY2FzdDxFbGVtZW50PihpbnNlcnRpb24uY2hpbGQuZ2V0KCkpKTsK
LSAgICAgICAgZWxzZSBpZiAocGFyZW50LT5maXJzdENoaWxkKCkgPT0gcGFyZW50LT5sYXN0Q2hp
bGQoKSkKLSAgICAgICAgICAgIHBhcmVudE5vZGVzV2l0aE9ubHlNYW5pcHVsYXRlZENoaWxkcmVu
LmFkZCgqcGFyZW50KTsKLSAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5zZXJ0
aW9uLnBhcmVudElmRGlmZmVyZW50RnJvbUNvbW1vbkFuY2VzdG9yLT5hcHBlbmRDaGlsZChpbnNl
cnRpb24uY2hpbGQpOwogCi0gICAgZm9yIChhdXRvJiBub2RlIDogcGFyZW50Tm9kZXNXaXRoT25s
eU1hbmlwdWxhdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUuZ2V0
KCkpKQotICAgICAgICAgICAgbV9tYW5pcHVsYXRlZEVsZW1lbnRzLmFkZChkb3duY2FzdDxFbGVt
ZW50Pihub2RlLmdldCgpKSk7CisgICAgICAgIGlmIChpbnNlcnRpb24uaXNDaGlsZE1hbmlwdWxh
dGVkID09IElzTm9kZU1hbmlwdWxhdGVkOjpZZXMpCisgICAgICAgICAgICBtX21hbmlwdWxhdGVk
Tm9kZXMuYWRkKGluc2VydGlvbi5jaGlsZC5wdHIoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KIAordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
Tm9kZShOb2RlKiBub2RlKQoreworICAgIG1fbWFuaXB1bGF0ZWROb2Rlcy5yZW1vdmUobm9kZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCA5NDk4ZjYyOTU0N2RjYjNk
MDEzOGRmMGE1YmQyOTAyODEyYmI2N2M2Li43NjQwNjk4YTU3ZjRiNTlkNDQwOGQ1MjVhMDg4Yzk0
OGRhY2VmNDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oCkBAIC0xMTYsNiArMTE2LDcgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlvbkl0ZW1D
YWxsYmFjayYmLCBWZWN0b3I8RXhjbHVzaW9uUnVsZT4mJiA9IHsgfSk7CiAKICAgICB2b2lkIGRp
ZENyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudChFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVOb2Rl
KE5vZGUqKTsKIAogICAgIGVudW0gY2xhc3MgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGUgOiB1aW50
OF90IHsKICAgICAgICAgQ29udGVudENoYW5nZWQsCkBAIC0xNzMsMTIgKzE3NCwxMiBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgdXNpbmcgTm9kZUVudHJ5ID0gc3RkOjpwYWlyPFJlZjxOb2RlPiwg
UmVmPE5vZGU+PjsKICAgICBWZWN0b3I8UmVmPE5vZGU+PiBnZXRQYXRoKE5vZGUqLCBOb2RlKik7
Ci0gICAgdm9pZCB1cGRhdGVJbnNlcnRpb25zKFZlY3RvcjxOb2RlRW50cnk+JiwgY29uc3QgVmVj
dG9yPFJlZjxOb2RlPj4mLCBOb2RlKiwgSGFzaFNldDxSZWY8Tm9kZT4+JiwgVmVjdG9yPE5vZGVJ
bnNlcnRpb24+JiwgSXNOb2RlTWFuaXB1bGF0ZWQgPSBJc05vZGVNYW5pcHVsYXRlZDo6WWVzKTsK
KyAgICB2b2lkIHVwZGF0ZUluc2VydGlvbnMoVmVjdG9yPE5vZGVFbnRyeT4mLCBjb25zdCBWZWN0
b3I8UmVmPE5vZGU+PiYsIE5vZGUqLCBIYXNoU2V0PFJlZjxOb2RlPj4mLCBWZWN0b3I8Tm9kZUlu
c2VydGlvbj4mKTsKICAgICBPcHRpb25hbDxNYW5pcHVsYXRpb25GYWlsdXJlVHlwZT4gcmVwbGFj
ZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0YSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25U
b2tlbj4mKTsKIAogICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgV2Vha0hh
c2hTZXQ8RWxlbWVudD4gbV9lbGVtZW50c1dpdGhOZXdSZW5kZXJlcjsKLSAgICBXZWFrSGFzaFNl
dDxFbGVtZW50PiBtX21hbmlwdWxhdGVkRWxlbWVudHM7CisgICAgSGFzaFNldDxOb2RlKj4gbV9t
YW5pcHVsYXRlZE5vZGVzOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1fY2FjaGVkRm9u
dEZhbWlseUV4Y2x1c2lvblJlc3VsdHM7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmNmYzZWMwZjA2Mzg5OGRjYTRmYjEwNTliZWQ5YmIyZjgz
ODQ2NmZlLi4zZWQ2NDg3OTdmMDAwNzgwZjJmNjMxZmQ5ZTAwYmNhZWYzMzFiYTE0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjAtMDYtMjUgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAg
ICAgVGV4dCBtYW5pcHVsYXRpb24gc2hvdWxkIG9ic2VydmUgYWRqYWNlbnQgZWxlbWVudHMgd2l0
aCBuZXcgcmVuZGVyZXIgdG9nZXRoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFu
aXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDYt
MjUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgaU9TIFNhZmFy
aSBpbmNvcnJlY3RseSByZXBvcnRzICJBcHBsZUNvcmVNZWRpYSIgYXMgVUEgc3RyaW5nCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5p
cHVsYXRpb24ubW0KaW5kZXggOTcxMmZkNmU5MDg4NjY3MzViNzlhNDkwOWJmMzY3ZGRhNjIxYzAy
OC4uYzhiZTQyNTY4ZTU5ZWVhN2MwOTI1MmM3NmJmZTE0MzcxMjcxOWVmZiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxh
dGlvbi5tbQpAQCAtMzM1LDMxICszMzUsMjcgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFy
dFRleHRNYW5pcHVsYXRpb25GaW5kTmV3bHlEaXNwbGF5ZWRQYXJhZ3JhcGgpCiAKICAgICBkb25l
ID0gZmFsc2U7CiAgICAgZGVsZWdhdGUuZ2V0KCkuaXRlbUNhbGxiYWNrID0gXihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqaXRlbSkgewotICAgICAgICBpZiAoaXRlbXMuY291bnQgPT0gMykKLSAg
ICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9OwogICAg
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCdzcGFuLmhpZGRlbicpLmZvckVhY2goKHNwYW4pID0+IHNwYW4uY2xhc3NMaXN0
LnJlbW92ZSgnaGlkZGVuJykpOyJdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CiAKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7Ci0gICAgRVhQRUNUX0VRKGl0
ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5z
LmNvdW50LCAxVUwpOwotICAgIFJldGFpblB0cjxOU1NldD4gdG9rZW5zID0gYWRvcHROUyhbW05T
U2V0IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6aXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQsIGl0
ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50LCBuaWxdKTsKLSAgICBFWFBFQ1RfVFJVRShbdG9rZW5z
LmdldCgpIGNvbnRhaW5zT2JqZWN0OkAiV2ViIl0pOwotICAgIEVYUEVDVF9UUlVFKFt0b2tlbnMu
Z2V0KCkgY29udGFpbnNPYmplY3Q6QCJLaXQiXSk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50
LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAg
RVhQRUNUX1NUUkVRKCJXZWIiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIktpdCIsIGl0ZW1zWzFdLnRva2Vuc1sxXS5jb250ZW50LlVU
RjhTdHJpbmcpOwogCiAgICAgLy8gVGhpcyBoYXMgdG8gaGFwcGVuIHNlcGFyYXRlbHkgaW4gb3Jk
ZXIgdG8gaGF2ZSBhIGRldGVybWluaXN0aWMgb3JkZXJpbmcuCiAgICAgZG9uZSA9IGZhbHNlOwog
ICAgIGRlbGVnYXRlLmdldCgpLml0ZW1DYWxsYmFjayA9IF4oX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKml0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW1zLmNvdW50ID09IDQpCi0gICAgICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfTsKICAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgn
ZGl2LmhpZGRlbicpLmZvckVhY2goKGRpdikgPT4gZGl2LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRl
bicpKTsiXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCi0gICAgRVhQ
RUNUX0VRKGl0ZW1zLmNvdW50LCA0VUwpOwotICAgIEVYUEVDVF9FUShpdGVtc1szXS50b2tlbnMu
Y291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJoZXkiLCBpdGVtc1szXS50b2tlbnNbMF0u
Y29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7Cisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RS
RVEoImhleSIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwogfQogCiBU
RVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTYW1lUGFyYWdy
YXBoV2l0aE5ld0NvbnRlbnQpCkBAIC0yNjMzLDcgKzI2MjksNyBAQCBURVNUKFRleHRNYW5pcHVs
YXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkF2b2lkRXh0cmFjdGluZ01hbmlwdWxhdGVk
VGV4dEFmdAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CiAgICAgW3dlYlZp
ZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CiAKLSAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8cD5mb288L3A+Il07CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPHA+Zm9vPGJyPmJhcjwvcD4i
XTsKIAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0
aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CkBAIC0yNjQyLDIxICsyNjM4
LDIzIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQXZv
aWRFeHRyYWN0aW5nTWFuaXB1bGF0ZWRUZXh0QWZ0CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKIAogICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwotICAgIGF1
dG8gaXRlbSA9IGl0ZW1zWzBdOwotICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKLSAg
ICBFWFBFQ1RfRVEoaXRlbS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1dLX1NUUkVR
KCJmb28iLCBpdGVtLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291
bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoImZvbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50KTsKKyAg
ICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19T
VFJFUSgiYmFyIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQpOwogCiAgICAgZG9uZSA9IGZh
bHNlOwogICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWwot
ICAgICAgICBjcmVhdGVJdGVtKGl0ZW0uaWRlbnRpZmllciwge3sgaXRlbS50b2tlbnNbMF0uaWRl
bnRpZmllciwgQCJiYXIiIH19KS5nZXQoKQorICAgICAgICBjcmVhdGVJdGVtKGl0ZW1zWzBdLmlk
ZW50aWZpZXIsIHt7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkZPTyIgfX0pLmdl
dCgpLAorICAgICAgICBjcmVhdGVJdGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHt7IGl0ZW1zWzFd
LnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkJBUiIgfX0pLmdldCgpCiAgICAgXSBjb21wbGV0aW9u
Ol4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKICAgICAgICAgRVhQRUNUX0VRKGVycm9y
cywgbmlsKTsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKIAotICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+YmFyPC9wPiIs
IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkZPTzxicj5CQVI8L3A+IiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MIl0pOwogCiAgICAgX19ibG9jayBib29sIGl0ZW1DYWxsYmFja0ZpcmVkID0gZmFsc2U7CiAg
ICAgW2RlbGVnYXRlIHNldEl0ZW1DYWxsYmFjazpeKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICop
IHsKQEAgLTI2NjQsMTIgKzI2NjIsMjAgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJhY3RpbmdNYW5pcHVsYXRlZFRleHRBZnQKICAgICB9
XTsKIAogICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCdwJykuc3R5bGUuZGlzcGxheSA9ICdub25lJyJdOwotICAgIFt3ZWJW
aWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKLQogICAgIFt3ZWJWaWV3IG9iamVj
dEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykuc3R5
bGUuZGlzcGxheSA9ICcnIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25V
cGRhdGVdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsiCisgICAgICAgICJlbGVt
ZW50LmlubmVySFRNTD0nZW5kJzsiCisgICAgICAgICJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdw
JykuYWZ0ZXIoZWxlbWVudCkiXTsKIAotICAgIEVYUEVDVF9GQUxTRShpdGVtQ2FsbGJhY2tGaXJl
ZCk7CisgICAgZG9uZSA9IGZhbHNlOworICAgIGRlbGVnYXRlLmdldCgpLml0ZW1DYWxsYmFjayA9
IF4oX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKml0ZW0pIHsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQ
RUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMu
Y291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJlbmQiLCBpdGVtc1syXS50b2tlbnNb
MF0uY29udGVudCk7CiB9CiAKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlv
blRva2VuRGVidWdEZXNjcmlwdGlvbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>