<?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>174130</bug_id>
          
          <creation_ts>2017-07-04 07:59:52 -0700</creation_ts>
          <short_desc>Move more code from ScrollingStateOverflowScrollingNodeIOS to ScrollingTreeScrollingNodeDelegate</short_desc>
          <delta_ts>2017-09-13 11:33:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Frames</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>
          <dependson>174097</dependson>
    
    <dependson>174134</dependson>
          <blocked>149264</blocked>
    
    <blocked>173833</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1325441</commentid>
    <comment_count>0</comment_count>
      <attachid>314564</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-07-04 07:59:52 -0700</bug_when>
    <thetext>Created attachment 314564
Patch

This is a follow-up of bug 174097. It seems we can move most of the logic to ScrollingTreeScrollingNodeDelegate.

I&apos;m attaching a patch doing that. ScrollingTreeOverflowScrollingNodeIOS::commitStateBeforeChildren could be simplified a bit more if ScrolledContentsLayer was on the ScrollingStateScrollingNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325465</commentid>
    <comment_count>1</comment_count>
      <attachid>314572</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-07-04 11:18:07 -0700</bug_when>
    <thetext>Created attachment 314572
174134+174097+174130.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325468</commentid>
    <comment_count>2</comment_count>
      <attachid>314574</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-07-04 11:39:38 -0700</bug_when>
    <thetext>Created attachment 314574
Patch

This patch applies on top of bugs 174134 and 174097.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332619</commentid>
    <comment_count>3</comment_count>
      <attachid>316539</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-07-27 02:46:24 -0700</bug_when>
    <thetext>Created attachment 316539
Patch

Rebasing... This patch still applies after bug 174097.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335237</commentid>
    <comment_count>4</comment_count>
      <attachid>317241</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-08-04 07:31:21 -0700</bug_when>
    <thetext>Created attachment 317241
Patch

Rebasing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344576</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-01 14:22:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/34215520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345224</commentid>
    <comment_count>6</comment_count>
      <attachid>319856</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-09-04 09:48:31 -0700</bug_when>
    <thetext>Created attachment 319856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345394</commentid>
    <comment_count>7</comment_count>
      <attachid>319891</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-09-05 03:25:37 -0700</bug_when>
    <thetext>Created attachment 319891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345895</commentid>
    <comment_count>8</comment_count>
      <attachid>320011</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-09-06 05:49:15 -0700</bug_when>
    <thetext>Created attachment 320011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346443</commentid>
    <comment_count>9</comment_count>
      <attachid>320011</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-07 11:38:43 -0700</bug_when>
    <thetext>Comment on attachment 320011
Patch

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

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:63
&gt; +    void commitStateBeforeChildren(const WebCore::ScrollingStateScrollingNode&amp; scrollingStateNode);
&gt; +    void commitStateAfterChildren(const WebCore::ScrollingStateScrollingNode&amp; scrollingStateNode);

No need to name scrollingStateNode.

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:66
&gt; +    void setScrollLayerPosition(const WebCore::FloatPoint&amp; scrollPosition);

No need to name scrollPosition

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:73
&gt;      bool m_updatingFromStateNode;

{ false }

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:177
&gt; +                m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]);

I wonder if this class could also be the WKScrollingNodeScrollViewDelegate, but that could be done later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346502</commentid>
    <comment_count>10</comment_count>
      <attachid>320162</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-09-07 13:03:34 -0700</bug_when>
    <thetext>Created attachment 320162
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346514</commentid>
    <comment_count>11</comment_count>
      <attachid>320162</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-07 13:21:16 -0700</bug_when>
    <thetext>Comment on attachment 320162
Patch for landing

Clearing flags on attachment: 320162

Committed r221753: &lt;http://trac.webkit.org/changeset/221753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346516</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-07 13:21:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348279</commentid>
    <comment_count>13</comment_count>
      <attachid>320011</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-09-13 07:44:49 -0700</bug_when>
    <thetext>Comment on attachment 320011
Patch

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

&gt;&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:177
&gt;&gt; +                m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]);
&gt; 
&gt; I wonder if this class could also be the WKScrollingNodeScrollViewDelegate, but that could be done later.

I&apos;m not sure I understand this comment. WKScrollingNodeScrollViewDelegate is an objective-C object while ScrollingTreeScrollingNodeDelegateIOS is a C++, and I don&apos;t know how we can &quot;merge&quot; the two together?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348400</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-13 11:33:52 -0700</bug_when>
    <thetext>Oh right, never mind :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314564</attachid>
            <date>2017-07-04 07:59:52 -0700</date>
            <delta_ts>2017-07-04 11:18:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Move-more-code-from-ScrollingTreeScrollingNodeDelega.patch</filename>
            <type>text/plain</type>
            <size>26879</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBlODY4MmZmZTU1MWYxZTg2NzZmNWIzMWE3Mzc2NDVkNDlhMThlYzhkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCA0IEp1bCAyMDE3IDE2OjU2OjE1ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gTW92ZSBt
b3JlIGNvZGUgZnJvbSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TIHRvCiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlCgotLS0KIC4uLi9pb3MvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICAgIHwgICA2IC0KIC4uLi9pb3MvU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSAgIHwgMTk3ICsrLS0tLS0tLS0tLS0t
LS0tLS0tLQogLi4uL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgg
ICAgfCAgMjUgKysrCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MubW0gICB8IDE4NyArKysrKysrKysrKysrKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDIyMiBp
bnNlcnRpb25zKCspLCAxOTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCmluZGV4IDIwYzVjNDI3YTRjLi5lOTlj
MjU2NzU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MuaApAQCAtMjgsMTEgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGUuaD4KIAogT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092ZXJmbG93
U2Nyb2xsVmlld0RlbGVnYXRlOwogCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TOwogCkBAIC00Myw4ICs0MSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M+IGNyZWF0ZShXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKCk7CiAKLSAgICBDQUxheWVyICpzY3Jv
bGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KLQogcHJpdmF0
ZToKICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwogCkBAIC02MiwxMCArNTgs
OCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlIHsgfQogCi0gICAgUmV0YWluUHRyPENBTGF5
ZXI+IG1fc2Nyb2xsTGF5ZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyOwogCi0gICAgUmV0YWluUHRyPFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGU+
IG1fc2Nyb2xsVmlld0RlbGVnYXRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TPiBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Lm1tCmluZGV4IDMwNDA2YmMxZmM0Li5jYTM3YzA3NzQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lv
cy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0yOSwxMDggKzI5
LDExIEBACiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAK
LSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxpbmdUcmVlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+Ci0j
aW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KLQotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KLSNlbmRpZgotCiAjaW1w
b3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgiCiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdh
dGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0
aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhT
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS092
ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUyopZGVsZWdhdGUKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3
ICopc2Nyb2xsVmlldwotewotICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxW
aWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9u
KTsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmll
dyAqKXNjcm9sbFZpZXcKLXsKLSAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBp
ZiAoc2Nyb2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVCZWdhbikKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPnNjcm9sbFdpbGxTdGFydCgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNl
dDooaW5vdXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhv
cml6b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVy
dGljYWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3Jp
Z2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAg
dW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgo
KTsKLQotICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQg
aW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFw
T2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdO
b2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVs
b2NpdHkueCwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwot
ICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0g
c2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAgICAgIHRhcmdldENvbnRlbnRP
ZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNl
dHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0
IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNl
dFJhbmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49
IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCi0g
ICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9u
OwotICAgIH0KLQotICAgIGlmIChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlv
biAhPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpIHsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0tICh2b2lkKXNj
cm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVj
ZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rp
b24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5P
OwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9s
bChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAg
IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19Ci0K
LS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldwotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgX2luVXNl
ckludGVyYWN0aW9uID0gTk87Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5z
Y3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVy
YWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVu
ZCgpOwotICAgIH0KLX0KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Nj
cm9sbGluZ05vZGUuaD4KIAotQGVuZAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC0xNDcsMzIgKzUwLDE5IEBAIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1M6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mo
V2ViCiAKIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6On5TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKCkKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKLSAgICBpZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmll
dyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXSkgewotICAgICAgICBBU1NFUlQoW3Njcm9sbFZp
ZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgICAgIC8vIFRoZSBz
Y3JvbGxWaWV3IG1heSBoYXZlIGJlZW4gYWRvcHRlZCBieSBhbm90aGVyIG5vZGUsIHNvIG9ubHkg
Y2xlYXIgdGhlIGRlbGVnYXRlIGlmIGl0J3Mgb3Vycy4KLSAgICAgICAgaWYgKHNjcm9sbFZpZXcu
ZGVsZWdhdGUgPT0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxWaWV3LmRlbGVnYXRlID0gbmlsOwotICAgIH0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29t
bWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGUm
IHN0YXRlTm9kZSkKIHsKLSAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkgewotICAgICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmll
dyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAgICAg
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0KKyAgICBpZiAoc3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExh
eWVyKSkKKyAgICAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnJlc2V0U2Nyb2xsVmlld0Rl
bGVnYXRlKCk7CiAKICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpjb21t
aXRTdGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CiAKKyAgICAvLyBGSVhNRTogTW92ZSBj
b250ZW50cyBsYXllciB0byBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgc28gdGhhdCBtb3N0
IG9mIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGluIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M/CiAgICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8
U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7CiAgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxMYXllcikpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5v
ZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPm1fc2Nyb2xsTGF5
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKIAogICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNM
YXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKQEAgLTE4
MSw4NyArNzEsMjIgQEAgdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Ojpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkMKIHZvaWQgU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0
IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogewogICAgIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOwot
Ci0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdDaGFuZ2UobV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPm1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlLCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8m
IHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikK
LSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKQotICAgICAgICB8fCBzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
UG9zaXRpb24pCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgICAg
ICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7
Ci0KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgICAgIGlm
ICghbV9zY3JvbGxWaWV3RGVsZWdhdGUpCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOm1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLmdl
dCgpXSk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlY29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpU
b3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVu
dHNTaXplKSkgewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGlu
Z1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0
ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAg
ICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0p
IHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsT3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNv
bXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUlu
c2V0cykgewotICAgICAgICAgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01h
a2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9w
IHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUg
bGVmdCBvciB0b3AuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAg
ICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAt
IHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsKLQotICAgICAgICAgICAgaWYgKHNjcm9sbE9y
aWdpbigpLnkoKSkKLSAgICAgICAgICAgICAgICBpbnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVu
dHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKLSAgICAgICAgfQotCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25l
IGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJh
dGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZz
ZXRzKSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250
YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8g
VUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRp
b25SYXRlTm9ybWFsOwotI2VuZGlmCi0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICB9CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJDaGls
ZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwog
fQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWRO
b2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUm
IGN1bXVsYXRpdmVEZWx0YSkKIHsKLSAgICBpZiAoIW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3Np
dGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9j
aGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxE
ZWx0YSk7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUxheWVyc0FmdGVyQW5j
ZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVs
dGEpOwogfQogCiBGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKLSAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Nj
cm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVu
dE9mZnNldF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBtX3Nj
cm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAg
IFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKC1zY3JvbGxQb3NpdGlvbi54
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmln
aW4oKS55KCkpXTsKLQotICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVDaGlsZE5v
ZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24pOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVn
YXRlLT5zZXRTY3JvbGxMYXllclBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBT
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRl
bGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTI2OSw3
ICs5NCw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBk
YXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwoY29uCiAgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgKaW5k
ZXggNmZlYzUyNGY5MmIuLmU5M2I3OTZjOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCkBAIC0yNyw3ICsyNywxMyBAQAogCiAj
aWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCisjaW5jbHVkZSA8
VUlLaXQvVUlTY3JvbGxWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4KKworT0JKQ19DTEFTUyBDQUxheWVyOworT0JK
Q19DTEFTUyBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwpAQCAtNTAsMTQgKzU2
LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFZpZXdEaWRTY3JvbGwoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgaW5Vc2VySW50ZXJhdGlvbikgY29u
c3Q7CiAgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25lZCBo
b3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkgY29uc3Q7CiAKKyAgICBDQUxheWVyICpzY3Jv
bGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJik7CisgICAgdm9pZCByZXNldFNjcm9s
bFZpZXdEZWxlZ2F0ZSgpOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2Rl
KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGN1bXVsYXRp
dmVEZWx0YSk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
OworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3Jv
bGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCisgICAgUmV0
YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgUmV0YWluUHRyPFdLU2Nyb2xsaW5n
Tm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CiAgICAgV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIG1fc2Nyb2xsaW5nTm9kZTsKICAgICBib29s
IG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitAaW50ZXJmYWNlIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSA6IE5TT2JqZWN0
IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4geworICAgIFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUyogX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU7Cit9CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzSW5Vc2VySW50ZXJhY3Rpb24pIEJPT0wgaW5V
c2VySW50ZXJhY3Rpb247CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
UyopZGVsZWdhdGU7CisKK0BlbmQKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
Y3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4IDE1ODczMDU3MWY2Li4wMWJmMTUyMWJjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
Lm1tCkBAIC0yOCwxMSArMjgsOTggQEAKIAogI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgorI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1
cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisjaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAorQGltcGxlbWVudGF0aW9uIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxl
Z2F0ZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
OihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRl
Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAg
ICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxW
aWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Cit9CisKKy0gKHZvaWQpc2Ny
b2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7Cisg
ICAgX2luVXNlckludGVyYWN0aW9uID0gWUVTOworCisgICAgaWYgKHNjcm9sbFZpZXcucGFuR2Vz
dHVyZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pCisg
ICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3V2lsbFN0YXJ0UGFu
R2VzdHVyZSgpOworICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxXaWxsU3Rh
cnQoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCistICh2b2lkKXNjcm9sbFZp
ZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5
OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0
YXJnZXRDb250ZW50T2Zmc2V0Cit7CisgICAgQ0dGbG9hdCBob3Jpem9udGFsVGFyZ2V0ID0gdGFy
Z2V0Q29udGVudE9mZnNldC0+eDsKKyAgICBDR0Zsb2F0IHZlcnRpY2FsVGFyZ2V0ID0gdGFyZ2V0
Q29udGVudE9mZnNldC0+eTsKKworICAgIHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQ
b3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOworICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVy
dGljYWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisKKyAgICBpZiAoIV9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFw
T2Zmc2V0UmFuZ2VzKCksIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGluZGV4KTsKKyAg
ICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJy
ZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKGhvcml6b250
YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNp
emUud2lkdGgpCisgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFs
U25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRp
b24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwgdmVydGljYWxU
YXJnZXQsIHZlbG9jaXR5LnksIGluZGV4KTsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChp
bmRleCk7CisgICAgICAgIGlmICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0
IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUuaGVpZ2h0KQorICAgICAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eSA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAo
b3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpCisg
ICAgICAgIHx8IG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eCgpKSB7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5jdXJyZW50U25hcFBv
aW50SW5kaWNlc0RpZENoYW5nZShfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dp
bmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERl
Y2VsZXJhdGUKK3sKKyAgICBpZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0
ZSkgeworICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKKyAgICAgICAgX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50
T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsRGlkRW5kKCk7CisgICAgfQorfQorCistICh2b2lkKXNjcm9sbFZpZXdE
aWRFbmREZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAo
X2luVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwor
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKKyAgICB9Cit9CisKK0Bl
bmQKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ05vZGUpCkBAIC00Myw2ICsxMzAsMTA0IEBAIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MoU2NyCiAKIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1M6On5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCkKIHsKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBpZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxW
aWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXSkgeworICAgICAg
ICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7
CisgICAgICAgIC8vIFRoZSBzY3JvbGxWaWV3IG1heSBoYXZlIGJlZW4gYWRvcHRlZCBieSBhbm90
aGVyIG5vZGUsIHNvIG9ubHkgY2xlYXIgdGhlIGRlbGVnYXRlIGlmIGl0J3Mgb3Vycy4KKyAgICAg
ICAgaWYgKHNjcm9sbFZpZXcuZGVsZWdhdGUgPT0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCkp
CisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUzo6cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAo
VUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAgICAgIEFTU0VS
VChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICAg
ICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSkKK3sKKyAgICBTZXRGb3JTY29wZTxib29sPiB1cGRh
dGluZ0NoYW5nZShtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSwgdHJ1ZSk7CisgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxMYXllcikKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXpl
KQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKQorICAgICAgICB8
fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxP
cmlnaW4pKSB7CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBV
SVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkg
ZGVsZWdhdGVdOworICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlT
Y3JvbGxWaWV3IHNlbGZdXSk7CisKKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikp
IHsKKyAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUpCisgICAgICAgICAgICAg
ICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tTY3JvbGxpbmdOb2RlU2Nyb2xs
Vmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6dGhp
c10pOworCisgICAgICAgICAgICBzY3JvbGxWaWV3LnNjcm9sbHNUb1RvcCA9IE5POworICAgICAg
ICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZWNvbXB1dGVJbnNldHMgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90
YWxDb250ZW50c1NpemUpOworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRz
U2l6ZSkpIHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudFNpemUgPSBzY3JvbGxpbmdT
dGF0ZU5vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7CisgICAgICAgICAgICByZWNvbXB1dGVJ
bnNldHMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
UG9zaXRpb24pCisgICAgICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFBy
b3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkKKyAgICAg
ICAgICAgICYmICFbbV9zY3JvbGxWaWV3RGVsZWdhdGUgX2lzSW5Vc2VySW50ZXJhY3Rpb25dKSB7
CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBzY3JvbGxpbmdTdGF0ZU5v
ZGUuc2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxPcmlnaW4oKTsKKyAg
ICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocmVjb21wdXRlSW5zZXRzKSB7CisgICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0g
VUlFZGdlSW5zZXRzTWFrZSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIC8vIFdpdGggUlRMIG9y
IGJvdHRvbS10by10b3Agc2Nyb2xsaW5nIChub24temVybyBvcmlnaW4pLCB3ZSBuZWVkIGV4dHJh
IHNwYWNlIG9uIHRoZSBsZWZ0IG9yIHRvcC4KKyAgICAgICAgICAgIGlmIChtX3Njcm9sbGluZ05v
ZGUuc2Nyb2xsT3JpZ2luKCkueCgpKQorICAgICAgICAgICAgICAgIGluc2V0cy5sZWZ0ID0gbV9z
Y3JvbGxpbmdOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9sbGlu
Z05vZGUudG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpOworCisgICAgICAgICAgICBpZiAobV9z
Y3JvbGxpbmdOb2RlLnNjcm9sbE9yaWdpbigpLnkoKSkKKyAgICAgICAgICAgICAgICBpbnNldHMu
dG9wID0gbV9zY3JvbGxpbmdOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0g
bV9zY3JvbGxpbmdOb2RlLnRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7CisKKyAgICAgICAg
ICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgICAgICB9CisKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUgYXhp
cyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0ZSBm
YXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAoc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMp
KQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gbV9zY3JvbGxpbmdO
b2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCBtX3Njcm9sbGluZ05vZGUudmVy
dGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVG
YXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKKyNlbmRpZgorICAgICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFu
Z2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3Qm
IGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKK3sK
KyAgICBpZiAoIW1fc2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGluZ05vZGUubGFzdENvbW1pdHRl
ZFNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsUG9zaXRpb24oKTsKKwor
ICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9zY3JvbGxpbmdOb2RlLmNoaWxkcmVuKCkpCisgICAg
ICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBm
aXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsgc2Nyb2xsRGVsdGEpOworfQorCitG
bG9hdFBvaW50IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBV
SVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkg
ZGVsZWdhdGVdOworICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9s
bFZpZXcgc2VsZl1dKTsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1M6OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgW21fc2Nyb2xsTGF5ZXIgc2V0UG9zaXRpb246
Q0dQb2ludE1ha2Uoc2Nyb2xsUG9zaXRpb24ueCgpICsgbV9zY3JvbGxpbmdOb2RlLnNjcm9sbE9y
aWdpbigpLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpICsgbV9zY3JvbGxpbmdOb2RlLnNjcm9sbE9y
aWdpbigpLnkoKSldOworICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3Np
dGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6
dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0
aW9uKQotLSAKMi4xMS4wIChBcHBsZSBHaXQtODEpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314572</attachid>
            <date>2017-07-04 11:18:07 -0700</date>
            <delta_ts>2017-09-06 05:49:08 -0700</delta_ts>
            <desc>174134+174097+174130.patch</desc>
            <filename>174134+174097+174130.patch</filename>
            <type>text/plain</type>
            <size>59183</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBiNmU3MTMzNmRkMC4uYzk3
YThhMDRlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAKQEAgLTY0LDkg
KzY0LDYgQEAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGkKICAgICAsIG1fZml4ZWRFbGVtZW50c0xh
eW91dFJlbGF0aXZlVG9GcmFtZShzdGF0ZU5vZGUuZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZl
VG9GcmFtZSgpKQogICAgICwgbV92aXN1YWxWaWV3cG9ydEVuYWJsZWQoc3RhdGVOb2RlLnZpc3Vh
bFZpZXdwb3J0RW5hYmxlZCgpKQogewotICAgIGlmIChoYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
ZWRDb250ZW50c0xheWVyKSkKLSAgICAgICAgc2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKHN0YXRl
Tm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKS50b1JlcHJlc2VudGF0aW9uKGFkb3B0aXZlVHJl
ZS5wcmVmZXJyZWRMYXllclJlcHJlc2VudGF0aW9uKCkpKTsKLQogICAgIGlmIChoYXNDaGFuZ2Vk
UHJvcGVydHkoQ291bnRlclNjcm9sbGluZ0xheWVyKSkKICAgICAgICAgc2V0Q291bnRlclNjcm9s
bGluZ0xheWVyKHN0YXRlTm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKS50b1JlcHJlc2VudGF0
aW9uKGFkb3B0aXZlVHJlZS5wcmVmZXJyZWRMYXllclJlcHJlc2VudGF0aW9uKCkpKTsKIApAQCAt
MTgzLDE1ICsxODAsNiBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpz
ZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgdG9wQ29udGVudEluc2V0KQogICAgIHNldFByb3BlcnR5
Q2hhbmdlZChUb3BDb250ZW50SW5zZXQpOwogfQogCi12b2lkIFNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIoY29uc3QgTGF5ZXJSZXByZXNl
bnRhdGlvbiYgbGF5ZXJSZXByZXNlbnRhdGlvbikKLXsKLSAgICBpZiAobGF5ZXJSZXByZXNlbnRh
dGlvbiA9PSBtX3Njcm9sbGVkQ29udGVudHNMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gbGF5ZXJSZXByZXNlbnRhdGlvbjsKLSAgICBz
ZXRQcm9wZXJ0eUNoYW5nZWQoU2Nyb2xsZWRDb250ZW50c0xheWVyKTsKLX0KLQogdm9pZCBTY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0Q291bnRlclNjcm9sbGluZ0xheWVyKGNv
bnN0IExheWVyUmVwcmVzZW50YXRpb24mIGxheWVyUmVwcmVzZW50YXRpb24pCiB7CiAgICAgaWYg
KGxheWVyUmVwcmVzZW50YXRpb24gPT0gbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIpCkBAIC0yNzEs
NyArMjU5LDYgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6ZHVtcFBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIFNjcm9sbGluZ1MKICAgICBpZiAoYmVoYXZpb3IgJiBT
Y3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvckluY2x1ZGVMYXllcklEcykgewogICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoImNvdW50ZXIgc2Nyb2xsaW5nIGxheWVyIElEIiwgbV9jb3VudGVy
U2Nyb2xsaW5nTGF5ZXIubGF5ZXJJRCgpKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJpbnNl
dCBjbGlwIGxheWVyIElEIiwgbV9pbnNldENsaXBMYXllci5sYXllcklEKCkpOwotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInNjcm9sbGVkIGNvbnRlbnRzIGxheWVyIElEIiwgbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXIubGF5ZXJJRCgpKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjb250ZW50
IHNoYWRvdyBsYXllciBJRCIsIG1fY29udGVudFNoYWRvd0xheWVyLmxheWVySUQoKSk7CiAgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiaGVhZGVyIGxheWVyIElEIiwgbV9oZWFkZXJMYXllci5sYXll
cklEKCkpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZvb3RlciBsYXllciBJRCIsIG1fZm9v
dGVyTGF5ZXIubGF5ZXJJRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oCmluZGV4
IDgyNjA1YjJjMjE0Li45ZTM1YjM1YjAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZS5oCkBAIC05Nyw5ICs5Nyw2IEBAIHB1YmxpYzoKICAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQo
KSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAotICAgIGNvbnN0IExheWVyUmVwcmVz
ZW50YXRpb24mIHNjcm9sbGVkQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxlZENv
bnRlbnRzTGF5ZXIoY29uc3QgTGF5ZXJSZXByZXNlbnRhdGlvbiYpOwotCiAgICAgLy8gVGhpcyBp
cyBhIGxheWVyIG1vdmVkIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gc2Nyb2xsaW5nLCBm
b3IgZXhhbXBsZSBmb3IgYmFja2dyb3VuZC1hdHRhY2htZW50OmZpeGVkCiAgICAgY29uc3QgTGF5
ZXJSZXByZXNlbnRhdGlvbiYgY291bnRlclNjcm9sbGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXI7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
dW50ZXJTY3JvbGxpbmdMYXllcihjb25zdCBMYXllclJlcHJlc2VudGF0aW9uJik7CkBAIC0xNDIs
NyArMTM5LDYgQEAgcHJpdmF0ZToKIAogICAgIExheWVyUmVwcmVzZW50YXRpb24gbV9jb3VudGVy
U2Nyb2xsaW5nTGF5ZXI7CiAgICAgTGF5ZXJSZXByZXNlbnRhdGlvbiBtX2luc2V0Q2xpcExheWVy
OwotICAgIExheWVyUmVwcmVzZW50YXRpb24gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CiAgICAg
TGF5ZXJSZXByZXNlbnRhdGlvbiBtX2NvbnRlbnRTaGFkb3dMYXllcjsKICAgICBMYXllclJlcHJl
c2VudGF0aW9uIG1faGVhZGVyTGF5ZXI7CiAgICAgTGF5ZXJSZXByZXNlbnRhdGlvbiBtX2Zvb3Rl
ckxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuY3BwCmluZGV4IDI4
ZmQyMDM3YTE4Li4zY2YwZmU4MGU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUoU2Nyb2xsaQogU2Ny
b2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBz
dGF0ZU5vZGUsIFNjcm9sbGluZ1N0YXRlVHJlZSYgYWRvcHRpdmVUcmVlKQogICAgIDogU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKHN0YXRlTm9kZSwgYWRvcHRpdmVUcmVlKQogewotICAgIGlm
IChoYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsZWRDb250ZW50c0xheWVyKSkKLSAgICAgICAgc2V0
U2Nyb2xsZWRDb250ZW50c0xheWVyKHN0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKS50
b1JlcHJlc2VudGF0aW9uKGFkb3B0aXZlVHJlZS5wcmVmZXJyZWRMYXllclJlcHJlc2VudGF0aW9u
KCkpKTsKIH0KIAogU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU6On5TY3JvbGxp
bmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSgpCkBAIC01OSwyMyArNTcsMTEgQEAgUmVmPFNj
cm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OmNs
b25lKFNjcm9sbGluZ1N0YXQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdTdGF0
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSgqdGhpcywgYWRvcHRpdmVUcmVlKSk7CiB9CiAgICAgCi12
b2lkIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxlZENvbnRl
bnRzTGF5ZXIoY29uc3QgTGF5ZXJSZXByZXNlbnRhdGlvbiYgbGF5ZXJSZXByZXNlbnRhdGlvbikK
LXsKLSAgICBpZiAobGF5ZXJSZXByZXNlbnRhdGlvbiA9PSBtX3Njcm9sbGVkQ29udGVudHNMYXll
cikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0g
bGF5ZXJSZXByZXNlbnRhdGlvbjsKLSAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoU2Nyb2xsZWRDb250
ZW50c0xheWVyKTsKLX0KLQogdm9pZCBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZTo6ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIFNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4
dEJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAogewogICAgIHRzIDw8ICJPdmVyZmxvdyBzY3JvbGxp
bmcgbm9kZSI7CiAgICAgCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpkdW1wUHJv
cGVydGllcyh0cywgYmVoYXZpb3IpOwotICAgIAotICAgIGlmICgoYmVoYXZpb3IgJiBTY3JvbGxp
bmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvckluY2x1ZGVMYXllcklEcykgJiYgbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXIubGF5ZXJJRCgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNjcm9sbGVk
IGNvbnRlbnRzIGxheWVyIiwgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIubGF5ZXJJRCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlLmgKaW5kZXggNjIyYTMwMDcyMzIuLjAyODkzOGYxZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlLmgKQEAgLTM5LDIxICszOSwxMSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSgpOwogCi0gICAgZW51
bSBDaGFuZ2VkUHJvcGVydHkgewotICAgICAgICBTY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBOdW1T
Y3JvbGxpbmdTdGF0ZU5vZGVCaXRzCi0gICAgfTsKLQotICAgIC8vIFRoaXMgaXMgYSBsYXllciB3
aXRoIHRoZSBjb250ZW50cyB0aGF0IG1vdmUuCi0gICAgY29uc3QgTGF5ZXJSZXByZXNlbnRhdGlv
biYgc2Nyb2xsZWRDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXI7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNjcm9sbGVkQ29udGVudHNM
YXllcihjb25zdCBMYXllclJlcHJlc2VudGF0aW9uJik7Ci0gICAgCiAgICAgdm9pZCBkdW1wUHJv
cGVydGllcyhUZXh0U3RyZWFtJiwgU2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0QmVoYXZpb3IpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAgICAgU2Ny
b2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVPdmVy
Zmxvd1Njcm9sbGluZ05vZGUmLCBTY3JvbGxpbmdTdGF0ZVRyZWUmKTsKLSAgICAKLSAgICBMYXll
clJlcHJlc2VudGF0aW9uIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOyAgICAKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IDgyZTZhNjMy
MDJkLi4zZDA3MjgxNjkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCkBAIC01Myw2ICs1
Myw4IEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2NyCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbChzdGF0ZU5vZGUucmVxdWVzdGVkU2Ny
b2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkpCiAgICAgLCBtX2V4cGVj
dHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIoc3RhdGVOb2RlLmV4cGVjdHNXaGVlbEV2ZW50VGVzdFRy
aWdnZXIoKSkKIHsKKyAgICBpZiAoaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGVkQ29udGVudHNM
YXllcikpCisgICAgICAgIHNldFNjcm9sbGVkQ29udGVudHNMYXllcihzdGF0ZU5vZGUuc2Nyb2xs
ZWRDb250ZW50c0xheWVyKCkudG9SZXByZXNlbnRhdGlvbihhZG9wdGl2ZVRyZWUucHJlZmVycmVk
TGF5ZXJSZXByZXNlbnRhdGlvbigpKSk7CiB9CiAKIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6flNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpCkBAIC0xODUsNiArMTg3LDE1IEBAIHZv
aWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRFeHBlY3RzV2hlZWxFdmVudFRlc3RU
cmlnZ2VyKGJvb2wgZXhwZWN0c1RlCiAgICAgc2V0UHJvcGVydHlDaGFuZ2VkKEV4cGVjdHNXaGVl
bEV2ZW50VGVzdFRyaWdnZXIpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6c2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKGNvbnN0IExheWVyUmVwcmVzZW50YXRpb24mIGxh
eWVyUmVwcmVzZW50YXRpb24pCit7CisgICAgaWYgKGxheWVyUmVwcmVzZW50YXRpb24gPT0gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsZWRD
b250ZW50c0xheWVyID0gbGF5ZXJSZXByZXNlbnRhdGlvbjsKKyAgICBzZXRQcm9wZXJ0eUNoYW5n
ZWQoU2Nyb2xsZWRDb250ZW50c0xheWVyKTsKK30KKwogdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBTY3JvbGxpbmdTdGF0ZVRy
ZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICBTY3JvbGxpbmdTdGF0ZU5v
ZGU6OmR1bXBQcm9wZXJ0aWVzKHRzLCBiZWhhdmlvcik7CkBAIC0yNDMsNiArMjU0LDkgQEAgdm9p
ZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
IHRzLCBTY3JvbGxpbmdTdGF0ZVQKIAogICAgIGlmIChtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRy
aWdnZXIpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZXhwZWN0cyB3aGVlbCBldmVudCB0ZXN0
IHRyaWdnZXIiLCBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpOworCisgICAgaWYgKChi
ZWhhdmlvciAmIFNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dEJlaGF2aW9ySW5jbHVkZUxheWVySURz
KSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci5sYXllcklEKCkpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2Nyb2xsZWQgY29udGVudHMgbGF5ZXIiLCBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci5sYXllcklEKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oCmluZGV4IGY0ZDI3NWY5ZTU1Li5mNjEyOTBiZGUxZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgICAgICBDdXJyZW50VmVydGljYWxT
bmFwT2Zmc2V0SW5kZXgsCiAjZW5kaWYKICAgICAgICAgRXhwZWN0c1doZWVsRXZlbnRUZXN0VHJp
Z2dlciwKKyAgICAgICAgU2Nyb2xsZWRDb250ZW50c0xheWVyLAogICAgICAgICBOdW1TY3JvbGxp
bmdTdGF0ZU5vZGVCaXRzIC8vIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGxhc3QgcG9zaXRpb24u
CiAgICAgfTsKIApAQCAtMTAzLDYgKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBleHBlY3Rz
V2hlZWxFdmVudFRlc3RUcmlnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RzV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRFeHBlY3RzV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKGJvb2wpOwogCisgICAgLy8gVGhpcyBpcyBhIGxheWVyIHdpdGggdGhl
IGNvbnRlbnRzIHRoYXQgbW92ZS4KKyAgICBjb25zdCBMYXllclJlcHJlc2VudGF0aW9uJiBzY3Jv
bGxlZENvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGVkQ29udGVudHNMYXll
cjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKGNv
bnN0IExheWVyUmVwcmVzZW50YXRpb24mKTsKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdTdGF0ZVRyZWUmLCBTY3JvbGxpbmdOb2RlVHlwZSwg
U2Nyb2xsaW5nTm9kZUlEKTsKICAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3Qg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiwgU2Nyb2xsaW5nU3RhdGVUcmVlJik7CkBAIC0x
MjIsNiArMTI3LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJz
IG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOworICAgIExheWVyUmVwcmVzZW50YXRpb24gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXI7CiAgICAgYm9vbCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9u
UmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2V4cGVj
dHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5o
CmluZGV4IDM1OTRiMTA4NmVjLi40NDM2YzhmMTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCkBA
IC0zMywxMiArMzMsMjIgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M7
Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVl
OwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogCiBjbGFzcyBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1M7CisjZW5kaWYKKwogcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMubW0KaW5kZXggNGJhZmNmM2FhYzEuLjg3MjU1MGVkNjBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y29tbWl0U3RhdGVCZWZvcmVD
aGlsZHJlbihjb25zdCBTY3JvbGxpCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCiAgICAgICAgIG1f
c2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKIAotICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsZWRDb250ZW50c0xheWVyKSkKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CiAKICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2Fj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCmluZGV4IGEwNTU3MDFhNDE0Li41MDQwNDE2NTk3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBA
IC0xMzUsNiArMTM1LDkgQEAgdm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdAogICAgIFNDUk9MTElOR19O
T0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFy
YW1zLCBzY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCisKKyAgICBpZiAobm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxl
ZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSk7CiB9
CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xs
aW5nTm9kZSYgbm9kZSkKQEAgLTE1NCw5ICsxNTcsNiBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
YwogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZTo6TWluTGF5b3V0Vmlld3BvcnRPcmlnaW4sIG1pbkxheW91dFZpZXdwb3J0T3JpZ2luKQog
ICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6TWF4TGF5b3V0Vmlld3BvcnRPcmlnaW4sIG1heExheW91dFZpZXdwb3J0T3JpZ2luKQogCi0g
ICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5zY3JvbGxlZENvbnRl
bnRzTGF5ZXIoKSk7Ci0KICAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXllcikpCiAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihu
b2RlLmNvdW50ZXJTY3JvbGxpbmdMYXllcigpKTsKIApAQCAtMTcwLDkgKzE3MCw2IEBAIHZvaWQg
QXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjCiB2b2lkIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVPdmVy
Zmxvd1Njcm9sbGluZ05vZGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nyb2xs
aW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUmIG5vZGUpCiB7CiAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmPihub2RlKTsKLSAg
ICAKLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVPdmVyZmxv
d1Njcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLnNjcm9s
bGVkQ29udGVudHNMYXllcigpKTsKIH0KIAogI2RlZmluZSBTQ1JPTExJTkdfTk9ERV9ERUNPREUo
cHJvcGVydHksIHR5cGUsIHNldHRlcikgXApAQCAtMjIzLDYgKzIyMCwxMyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFNjcm9sbAogICAgICAgICBub2RlLnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNj
cm9sbFBvc2l0aW9uLCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKICAgICB9CiAKKyAg
ICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKSB7CisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBub2RlLnNldFNjcm9sbGVkQ29u
dGVudHNMYXllcihsYXllcklEKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MjQ1LDEzICsyNDksNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUwogICAgIFNDUk9MTElOR19O
T0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWluTGF5b3V0Vmll
d3BvcnRPcmlnaW4sIEZsb2F0UG9pbnQsIHNldE1pbkxheW91dFZpZXdwb3J0T3JpZ2luKQogICAg
IFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
TWF4TGF5b3V0Vmlld3BvcnRPcmlnaW4sIEZsb2F0UG9pbnQsIHNldE1heExheW91dFZpZXdwb3J0
T3JpZ2luKQogCi0gICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKSB7Ci0gICAgICAgIEdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGxheWVySUQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBu
b2RlLnNldFNjcm9sbGVkQ29udGVudHNMYXllcihsYXllcklEKTsKLSAgICB9Ci0KICAgICBpZiAo
bm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6
OkNvdW50ZXJTY3JvbGxpbmdMYXllcikpIHsKICAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIGxheWVySUQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkp
CkBAIC0yODEsMTMgKzI3OCw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyCiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzdGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmPihu
b2RlKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChub2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250
ZW50c0xheWVyKSkgewotICAgICAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5
ZXJJRDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5
ZXJJRCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ4Myw2ICs0NzMsOSBA
QCBzdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUmIG5vZGUsIGJvb2wgYwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlcXVl
c3RlZC1zY3JvbGwtcG9zaXRpb24iLCBub2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOwog
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlcXVlc3RlZC1zY3JvbGwtcG9zaXRpb24taXMtcHJv
Z3JhbWF0aWMiLCBub2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1t
YXRpY1Njcm9sbCgpKTsKICAgICB9CisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8
fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGVkQ29udGVudHNMYXllcikpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2Nyb2xsZWQt
Y29udGVudHMtbGF5ZXIiLCBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQ+KG5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKTsKIH0KICAgICAKIHN0YXRpYyB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlJiBub2RlLCBib29sIGNoYW5nZWRQcm9wZXJ0aWVzT25seSkKQEAgLTUzMCw5ICs1MjMsNiBA
QCBzdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZSYgbm9kZSwgYgogICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5
IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpGcmFtZVNjYWxlRmFjdG9yKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmcmFtZS1z
Y2FsZS1mYWN0b3IiLCBub2RlLmZyYW1lU2NhbGVGYWN0b3IoKSk7CiAKLSAgICBpZiAoIWNoYW5n
ZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzY3JvbGxlZC1jb250ZW50cy1sYXllciIsIHN0YXRpY19jYXN0PEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSkp
OwotCiAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okluc2V0Q2xpcExheWVyKSkK
ICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjbGlwLWluc2V0LWxheWVyIiwgc3RhdGljX2Nhc3Q8
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLmluc2V0Q2xpcExheWVyKCkpKTsK
IApAQCAtNTQ5LDkgKzUzOSw2IEBAIHN0YXRpYyB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlJiBub2RlLCBiCiBzdGF0aWMgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZSYgbm9kZSwgYm9vbCBjaGFuZ2VkUHJvcGVydGllc09ubHkpCiB7CiAgICAgZHVtcCh0
cywgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJj4obm9kZSks
IGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0gICAgCi0gICAgaWYgKCFjaGFuZ2VkUHJvcGVydGll
c09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2Nyb2xsZWQtY29udGVudHMtbGF5ZXIiLCBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQ+KG5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKTsKIH0KIAog
c3RhdGljIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUmIG5vZGUsIGJvb2wgY2hhbmdlZFByb3BlcnRpZXNPbmx5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggMzgzZGY1ODk0NmEuLmU1ZDFlYjcxN2Zk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTEwNiw3
ICsxMDYsNyBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNvbm5lY3RT
dGF0ZU5vZGVMYXllcnMoU2Nyb2xsaW5nU3RhdGVUcmVlJgogICAgICAgICBjYXNlIEZyYW1lU2Ny
b2xsaW5nTm9kZTogewogICAgICAgICAgICAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlPigqY3Vyck5vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAgICAgICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdT
dGF0ZU5vZGUuc2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIo
c2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpKSk7CiAKICAgICAgICAg
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb3VudGVyU2Nyb2xsaW5nTGF5ZXIpKQpAQCAtMTI5LDcg
KzEyOSw3IEBAIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y29ubmVjdFN0
YXRlTm9kZUxheWVycyhTY3JvbGxpbmdTdGF0ZVRyZWUmCiAgICAgICAgIGNhc2UgT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlOiB7CiAgICAgICAgICAgICBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVy
Zmxvd1Njcm9sbGluZ05vZGU+KCpjdXJyTm9kZSk7CiAKLSAgICAgICAgICAgIGlmIChzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0
YXRlTm9kZS5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLmgKaW5kZXggMDJjOGRlOTE4YzcuLmJmZWIzYTE1MDhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5o
CkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExB
VEZPUk0oSU9TKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgog
Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVs
ZWdhdGU7CitjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDEsMTQgKzM5LDYgQEAgcHVibGljOgogICAgIHN0YXRp
YyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUz4gY3JlYXRlKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwogICAgIHZpcnR1
YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKTsKIAotICAgIHZvaWQg
b3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnQoKTsKLSAgICB2b2lkIG92ZXJmbG93U2Nyb2xsRGlkRW5k
KCk7Ci0gICAgdm9pZCBvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0g
ICAgdm9pZCBzY3JvbGxWaWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBi
b29sIGluVXNlckludGVyYXRpb24pOwotICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNE
aWRDaGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpOwotCi0gICAg
Q0FMYXllciAqc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVyLmdldCgp
OyB9Ci0KIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
UyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEKTsKIApA
QCAtNjYsMTMgKzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZSB7IH0KIAotICAgIHZv
aWQgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRhaW5QdHI8
V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7Ci0gICAg
Ym9vbCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUz4gbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDg3OWE5OGQ2YWI1Li44Yjhi
N2JmYTRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLm1tCkBAIC0yOSwxMDcgKzI5LDEyIEBACiAjaWYgUExBVEZPUk0oSU9TKQog
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+Ci0jaW1wb3J0IDxVSUtp
dC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcu
aD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU2V0
Rm9yU2NvcGUuaD4KKyNpbXBvcnQgIlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MuaCIKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaD4KLSNlbmRpZgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotQGludGVyZmFj
ZSBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJU2Nyb2xsVmlld0Rl
bGVnYXRlPiB7Ci0gICAgV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TKiBfc2Nyb2xsaW5nVHJlZU5vZGU7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0
ZXI9X2lzSW5Vc2VySW50ZXJhY3Rpb24pIEJPT0wgaW5Vc2VySW50ZXJhY3Rpb247Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlOihXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MqKW5vZGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoU2Nyb2xsaW5nVHJlZU5vZGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUyopbm9kZQotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZSA9IG5vZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17
Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcu
Y29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLX0KLQotLSAodm9pZClzY3JvbGxW
aWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBf
aW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBpZiAoc2Nyb2xsVmlldy5wYW5HZXN0dXJl
UmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikKLSAgICAg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0
dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9sbFdpbGxTdGFydCgp
OwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLS0gKHZvaWQpc2Nyb2xsVmlld1dp
bGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENH
UG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2ludCAqKXRhcmdl
dENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRD
b250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250
ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0
aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCk7Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxp
bmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLQotICAgIGlmICgh
X3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3Np
dGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNu
YXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5n
ZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwotICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGUtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgp
OwotICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQg
PD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAgICAgIHRhcmdldENvbnRl
bnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFf
c2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlv
biA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zm
c2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2
ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAg
aWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5j
b250ZW50U2l6ZS5oZWlnaHQpCi0gICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0g
cG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChvcmlnaW5hbEhvcml6b250
YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50SG9yaXpvbnRhbFNu
YXBQb2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAh
PSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpIHsK
LSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENo
YW5nZShfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgo
KSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsK
LSAgICB9Ci19Ci0jZW5kaWYKLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJ
U2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERlY2VsZXJh
dGUKLXsKLSAgICBpZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0ZSkgewot
ICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVO
b2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNl
ckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9s
bERpZEVuZCgpOwotICAgIH0KLX0KLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0
aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYgKF9pblVzZXJJbnRlcmFj
dGlvbikgewotICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNl
dCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVy
Zmxvd1Njcm9sbERpZEVuZCgpOwotICAgIH0KLX0KLQotQGVuZAotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M+IFNjcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNyZWF0ZShXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlJiBzY3JvbGxpbmdUcmVlLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQpAQCAt
MTM5LDE3OCArNDQsNTAgQEAgUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M+IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MKIAogU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCi0gICAgLCBtX3VwZGF0aW5nRnJvbVN0YXRl
Tm9kZShmYWxzZSkKIHsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS5yZXNldChuZXcgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUygqdGhpcykpOwogfQogCiBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUygpCiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
aWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5
ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xh
c3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAvLyBUaGUgc2Nyb2xsVmlldyBtYXkg
aGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNsZWFyIHRoZSBkZWxl
Z2F0ZSBpZiBpdCdzIG91cnMuCi0gICAgICAgIGlmIChzY3JvbGxWaWV3LmRlbGVnYXRlID09IG1f
c2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0
ZSA9IG5pbDsKLSAgICB9Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCiB2b2lk
IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0YXRlQmVmb3Jl
Q2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCiB7
Ci0gICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi0gICAgICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxW
aWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Ci0gICAgICAgICAgICBBU1NFUlQoW3Nj
cm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgICAgICAg
ICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOwotICAgICAgICB9Ci0gICAgICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKLSAgICB9CisgICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAg
IG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5yZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOwogCiAg
ICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVD
aGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2Rl
ID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9k
ZSk7Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3Jv
bGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKLQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllciA9IHNj
cm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKKyAgICBtX3Njcm9sbGlu
Z05vZGVEZWxlZ2F0ZS0+Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihkb3duY2FzdDxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25z
dCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKICAgICBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oc3RhdGVOb2RlKTsK
LQotICAgIFNldEZvclNjb3BlPGJvb2w+IHVwZGF0aW5nQ2hhbmdlKG1fdXBkYXRpbmdGcm9tU3Rh
dGVOb2RlLCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwot
Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRv
dGFsQ29udGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNT
aXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICop
W3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNL
aW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUp
Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZTp0
aGlzXSk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlY29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpU
b3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVu
dHNTaXplKSkgewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGlu
Z1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0
ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAg
ICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0p
IHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsT3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNv
bXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUlu
c2V0cykgewotICAgICAgICAgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01h
a2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9w
IHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUg
bGVmdCBvciB0b3AuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAg
ICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAt
IHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsKLQotICAgICAgICAgICAgaWYgKHNjcm9sbE9y
aWdpbigpLnkoKSkKLSAgICAgICAgICAgICAgICBpbnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVu
dHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKLSAgICAgICAgfQotCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25l
IGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJh
dGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZz
ZXRzKSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250
YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8g
VUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRp
b25SYXRlTm9ybWFsOwotI2VuZGlmCi0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICB9CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJDaGls
ZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwog
fQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWRO
b2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUm
IGN1bXVsYXRpdmVEZWx0YSkKIHsKLSAgICBpZiAoIW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3Np
dGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9j
aGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxE
ZWx0YSk7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUxheWVyc0FmdGVyQW5j
ZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVs
dGEpOwogfQogCiBGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKLSAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Nj
cm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVu
dE9mZnNldF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBtX3Nj
cm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAg
IFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKC1zY3JvbGxQb3NpdGlvbi54
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmln
aW4oKS55KCkpXTsKLQotICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3Np
dGlvbik7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnNldFNjcm9sbExheWVyUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb24pOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewotICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9s
bChzY3JvbGxQb3NpdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKQotewotICAgIGlmICghbV9jaGlsZHJlbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRmxvYXRSZWN0IGZpeGVkUG9zaXRpb25SZWN0ID0gc2Nyb2xsaW5nVHJlZSgpLmZp
eGVkUG9zaXRpb25SZWN0KCk7Ci0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1p
dHRlZFNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbjsKLQotICAgIGZvciAoYXV0byYg
Y2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5j
ZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRpb25SZWN0LCBzY3JvbGxEZWx0YSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6b3ZlcmZsb3dTY3Jv
bGxXaWxsU3RhcnQoKQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZVdp
bGxTdGFydFNjcm9sbCgpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6Om92ZXJmbG93U2Nyb2xsRGlkRW5kKCkKLXsKLSAgICBzY3JvbGxpbmdUcmVlKCku
c2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5H
ZXN0dXJlKCkKLXsKLSAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3Rh
cnRQYW5HZXN0dXJlKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6c2Nyb2xsVmlld0RpZFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3Np
dGlvbiwgYm9vbCBpblVzZXJJbnRlcmF0aW9uKQotewotICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0
YXRlTm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBv
c2l0aW9uQ2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhzY3JvbGxpbmdOb2RlSUQoKSwgc2Ny
b2xsUG9zaXRpb24sIGluVXNlckludGVyYXRpb24pOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKQotewotICAgIGlmIChtX3Vw
ZGF0aW5nRnJvbVN0YXRlTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNjcm9sbGlu
Z1RyZWUoKS5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShzY3JvbGxpbmdOb2RlSUQo
KSwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51
cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24pOwogfQogCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGlu
Zy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Yzk5NDU0MDhlMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorCisjaW5jbHVkZSA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4KKworT0JKQ19D
TEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdh
dGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZSYpOworICAgIH5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCk7CisK
KyAgICBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSgp
IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZTsgfQorICAgIHZvaWQgc2Nyb2xsV2lsbFN0YXJ0KCkg
Y29uc3Q7CisgICAgdm9pZCBzY3JvbGxEaWRFbmQoKSBjb25zdDsKKyAgICB2b2lkIHNjcm9sbFZp
ZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCkgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxWaWV3RGlkU2Ny
b2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIGluVXNl
ckludGVyYXRpb24pIGNvbnN0OworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRD
aGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpIGNvbnN0OworICAg
IENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllci5nZXQo
KTsgfQorCisgICAgdm9pZCByZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOworICAgIHZvaWQgY29t
bWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSk7CisgICAgdm9pZCBjb21taXRTdGF0ZUFmdGVy
Q2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3Jv
bGxpbmdTdGF0ZU5vZGUpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5n
ZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBv
c2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICB2b2lkIHVwZGF0ZUNoaWxk
Tm9kZXNBZnRlclNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
bik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7Cisg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIFJldGFp
blB0cjxXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xsVmlld0RlbGVn
YXRlOworICAgIFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBtX3Njcm9sbGlu
Z05vZGU7CisgICAgYm9vbCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworQGludGVyZmFjZSBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVs
ZWdhdGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVy
YWN0aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlOworCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMTRmYjI2NzcyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLm1tCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLmgiCisKKyNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQ
YW5HZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNF
eGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg+CisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1Njcm9sbGluZ05vZGVTY3JvbGxW
aWV3RGVsZWdhdGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKilk
ZWxlZ2F0ZQoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlID0gZGVsZWdhdGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
Cit7CisgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwo
c2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworfQorCistICh2
b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dworeworICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsKKworICAgIGlmIChzY3JvbGxWaWV3
LnBhbkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJl
Z2FuKQorICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld1dpbGxT
dGFydFBhbkdlc3R1cmUoKTsKKyAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
V2lsbFN0YXJ0KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorLSAodm9pZClz
Y3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhW
ZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1Bv
aW50ICopdGFyZ2V0Q29udGVudE9mZnNldAoreworICAgIENHRmxvYXQgaG9yaXpvbnRhbFRhcmdl
dCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPng7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9
IHRhcmdldENvbnRlbnRPZmZzZXQtPnk7CisKKyAgICB1bnNpZ25lZCBvcmlnaW5hbEhvcml6b250
YWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9k
ZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKKyAgICB1bnNpZ25lZCBvcmln
aW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworCisgICAgaWYg
KCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxT
bmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAg
ICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNl
dHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9u
dGFsU25hcE9mZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRl
eCk7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCku
c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7CisgICAgICAgIGlmICho
b3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNv
bnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHko
KSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25h
cFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCksIHZl
cnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNh
bFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKKyAgICAgICAgICAgIHRh
cmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CisgICAgfQorCisg
ICAgaWYgKG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoKQorICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uICE9IF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgoKSkgeworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+Y3VycmVu
dFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCksIF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgoKSk7CisgICAgfQorfQorI2VuZGlmCisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVu
ZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09M
KXdpbGxEZWNlbGVyYXRlCit7CisgICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbiAmJiAhd2lsbERl
Y2VsZXJhdGUpIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87CisgICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcu
Y29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAgIH0KK30KKworLSAodm9pZClzY3Jv
bGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7Cisg
ICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24g
PSBOTzsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdEaWRT
Y3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlkRW5kKCk7CisgICAgfQor
fQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdOb2RlKQorICAgIDogbV9zY3JvbGxp
bmdOb2RlKHNjcm9sbGluZ05vZGUpCisgICAgLCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZShmYWxz
ZSkKK3sKK30KKworU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6flNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoKQoreworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3Jv
bGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAgICAgIEFTU0VSVChbc2Ny
b2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICAgICAgLy8g
VGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFub3RoZXIgbm9kZSwgc28g
b25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgorICAgICAgICBpZiAoc2Nyb2xs
Vmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKSkKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
OjpyZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcg
Kilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3
IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgICAgICBzY3JvbGxWaWV3
LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3Rh
dGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9s
bGluZ1N0YXRlTm9kZSkKK3sKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgbV9zY3Jv
bGxMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpOworCisgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUFmdGVy
Q2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0
ZU5vZGUpCit7CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdDaGFuZ2UobV91cGRhdGlu
Z0Zyb21TdGF0ZU5vZGUsIHRydWUpOworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpCisg
ICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBv
c2l0aW9uKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkgeworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxW
aWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKKyAgICAgICAg
QVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwor
CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgICAgICBpZiAo
IW1fc2Nyb2xsVmlld0RlbGVnYXRlKQorICAgICAgICAgICAgICAgIG1fc2Nyb2xsVmlld0RlbGVn
YXRlID0gYWRvcHROUyhbW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOnRoaXNdKTsKKworICAgICAgICAgICAg
c2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVs
ZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKTsKKyAg
ICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpKSB7CisgICAgICAgICAg
ICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnJlYWNoYWJsZUNv
bnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQorICAgICAgICAg
ICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCisgICAgICAgICAgICAmJiAhW21fc2Nyb2xs
Vmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkgeworICAgICAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbFBvc2l0aW9uKCkg
KyBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsT3JpZ2luKCk7CisgICAgICAgICAgICByZWNvbXB1dGVJ
bnNldHMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlY29tcHV0ZUluc2V0cykg
eworICAgICAgICAgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwg
MCwgMCwgMCk7CisgICAgICAgICAgICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9wIHNjcm9s
bGluZyAobm9uLXplcm8gb3JpZ2luKSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUgbGVmdCBv
ciB0b3AuCisgICAgICAgICAgICBpZiAobV9zY3JvbGxpbmdOb2RlLnNjcm9sbE9yaWdpbigpLngo
KSkKKyAgICAgICAgICAgICAgICBpbnNldHMubGVmdCA9IG1fc2Nyb2xsaW5nTm9kZS5yZWFjaGFi
bGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxpbmdOb2RlLnRvdGFsQ29udGVudHNT
aXplKCkud2lkdGgoKTsKKworICAgICAgICAgICAgaWYgKG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxP
cmlnaW4oKS55KCkpCisgICAgICAgICAgICAgICAgaW5zZXRzLnRvcCA9IG1fc2Nyb2xsaW5nTm9k
ZS5yZWFjaGFibGVDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsaW5nTm9kZS50b3Rh
bENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOworCisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRl
bnRJbnNldCA9IGluc2V0czsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xs
aW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlz
IHdoYXQgd2Ugd2FudD8KKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNl
dHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgICAgIHNjcm9s
bFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IG1fc2Nyb2xsaW5nTm9kZS5ob3Jpem9udGFsU25hcE9m
ZnNldHMoKS5zaXplKCkgfHwgbV9zY3JvbGxpbmdOb2RlLnZlcnRpY2FsU25hcE9mZnNldHMoKS5z
aXplKCkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0Rl
Y2VsZXJhdGlvblJhdGVOb3JtYWw7CisjZW5kaWYKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1Ry
ZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwg
Y29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit7CisgICAgaWYgKCFtX3Njcm9sbGlu
Z05vZGUuY2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRTaXplIHNjcm9s
bERlbHRhID0gbV9zY3JvbGxpbmdOb2RlLmxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0g
bV9zY3JvbGxpbmdOb2RlLnNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxk
IDogKm1fc2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQorICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGN1
bXVsYXRpdmVEZWx0YSArIHNjcm9sbERlbHRhKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxW
aWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKKyAgICBBU1NF
UlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7CisgICAg
cmV0dXJuIFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
OjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQoreworICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKHNjcm9sbFBv
c2l0aW9uLngoKSArIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxPcmlnaW4oKS54KCksIHNjcm9sbFBv
c2l0aW9uLnkoKSArIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxPcmlnaW4oKS55KCkpXTsKKyAgICB1
cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24pOworfQorCit2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUNoaWxkTm9kZXNBZnRl
clNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBpZiAoIW1f
c2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJl
Y3QgZml4ZWRQb3NpdGlvblJlY3QgPSBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsaW5nVHJlZSgpLmZp
eGVkUG9zaXRpb25SZWN0KCk7CisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxp
bmdOb2RlLmxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb247CisK
KyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fc2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQorICAg
ICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShtX3Njcm9sbGluZ05v
ZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBzY3JvbGxEZWx0YSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsV2lsbFN0YXJ0KCkgY29uc3QKK3sK
KyAgICBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlV2ls
bFN0YXJ0U2Nyb2xsKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzo6c2Nyb2xsRGlkRW5kKCkgY29uc3QKK3sKKyAgICBtX3Njcm9sbGluZ05vZGUuc2Ny
b2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsVmlld1dpbGxTdGFy
dFBhbkdlc3R1cmUoKSBjb25zdAoreworICAgIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxpbmdUcmVl
KCkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsVmlld0RpZFNjcm9sbChj
b25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBpblVzZXJJbnRlcmF0aW9uKSBj
b25zdAoreworICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zY3JvbGxpbmdOb2RlLnNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQb3NpdGlvbkNo
YW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcobV9zY3JvbGxpbmdOb2RlLnNjcm9sbGluZ05vZGVJ
RCgpLCBzY3JvbGxQb3NpdGlvbiwgaW5Vc2VySW50ZXJhdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y3VycmVudFNuYXBQb2ludEluZGljZXNE
aWRDaGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpIGNvbnN0Cit7
CisgICAgaWYgKG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsaW5nVHJlZSgpLmN1cnJlbnRTbmFwUG9pbnRJbmRpY2Vz
RGlkQ2hhbmdlKG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxpbmdOb2RlSUQoKSwgaG9yaXpvbnRhbCwg
dmVydGljYWwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eUlPUy5tbQppbmRleCAxZGViYWRkNGRjZi4uMjhkMzk1OTM0NTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpjb25uZWN0U3RhdGVOb2RlTGF5ZXJzKFNjcm9sbGlu
Z1N0YXRlVHJlZSYKICAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQogICAgICAgICAgICAg
ICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRMYXllcihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxh
eWVyT3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmxheWVy
KCkpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxl
ZENvbnRlbnRzTGF5ZXIpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRT
Y3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmlldyhs
YXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRz
TGF5ZXIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM3NWRjNzhi
MGIwLi43NjgyYTM4ZWFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODgsNiArODgsOCBAQAogCQkwRjVFMjAwNDE4RTc3MDUx
MDAzRUMzRTUgLyogUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTIwMDIxOEU3NzA1MTAwM0VDM0U1IC8q
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaCAqLzsgfTsKIAkJMEY4NTBGRTYxRUQ3QzM5RjAw
RkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg1MEZFNDFFRDdDMzlGMDBGQjc3QTcg
LyogV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJMEY4NTBGRTcxRUQ3
QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NTBGRTUxRUQ3QzM5RjAwRkI3
N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oICovOyB9OworCQlBQzkzMUMxQzE4
QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUM5MzFDMUEx
OEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1Mu
aCAqLzsgfTsKKwkJQUM5MzFDMUQxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQzkzMUMxQjE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSAqLzsgfTsKIAkJMEY5MzFDMUMxOEM1NzExOTAwREJB
N0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMxQzFBMThDNTcxMTkwMERC
QTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggKi87IH07CiAJ
CTBGOTMxQzFEMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzFDMUIxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MubW0gKi87IH07CiAJCTBGQjY1OTIzMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3
aW5nQXJlYUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJlYUluZm8uaCAqLzsgfTsK
QEAgLTIyNTQsNiArMjI1Niw4IEBACiAJCTBGNzA3Qzc5MUExRkVFQTMwMERBN0E0NSAvKiBSZW1v
dGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODUwRkU0MUVEN0MzOUYwMEZCNzdBNyAv
KiBXZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NTBGRTUxRUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZv
cm1hbmNlTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUM5MzFDMUExOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oOyBwYXRoID0gU2Nyb2xsaW5nL2lvcy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFDOTMxQzFCMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbTsgcGF0aCA9IFNj
cm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzFDMUExOEM1NzExOTAwREJBN0MzIC8qIFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oOyBw
YXRoID0gU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMxQzFCMThDNTcxMTkwMERCQTdD
MyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy5tbTsgcGF0aCA9IFNjcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNjU5
MjIxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEcmF3aW5nQXJlYUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ1OTYsNiArNDYwMCw4IEBACiAJCTBGOTMxQzE5MThDNTcxMTEwMERCQTdDMyAv
KiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFD
OTMxQzFBMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLmggKi8sCisJCQkJQUM5MzFDMUIxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gKi8sCiAJCQkJMEY5MzFDMUExOEM1NzExOTAw
REJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCAqLywKIAkJ
CQkwRjkzMUMxQjE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy5tbSAqLywKIAkJCSk7CkBAIC04NTc5LDYgKzg1ODUsNyBAQAogCQkJCUJDMkQw
MjE3MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFBQjRBOEQxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTU1MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5k
Ym94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBQzkzMUMx
QzE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzFDMUMxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDEzMDU0MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRh
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTU4LDYgKzEwMTY1LDcgQEAKIAkJCQkxQUFCNEFBQTEy
OTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUUxRTU1MkM0MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGlhdGlvblBhcmFt
ZXRlcnNNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTlCREE4QjE5MzY4RDQ2MDBCOTdGNTcg
LyogU2FuZGJveFV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUFDOTMxQzFEMThDNTcx
MTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5MzFDMUQxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1
MzEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRDEzMDU1MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314574</attachid>
            <date>2017-07-04 11:39:38 -0700</date>
            <delta_ts>2017-07-27 02:46:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-174130-Move-more-code-from-ScrollingTreeScrollin.patch</filename>
            <type>text/plain</type>
            <size>32287</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSAxNzg5ZDJjOGNkNTgzYzlkNjI3YzhiNjM5MjVjYzc5Y2FlMmZjNzc2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCA0IEp1bCAyMDE3IDIwOjM3OjUxICswMjAwClN1YmplY3Q6IFtQQVRDSF0gQnVnIDE3
NDEzMCAtIE1vdmUgbW9yZSBjb2RlIGZyb20KIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZQoKLS0tCiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MyArKysr
KysKIC4uLi9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICAgIHwg
IDEwIC0KIC4uLi9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSAg
IHwgMjAyICstLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLmggICAgfCAgMzQgKysrLQogLi4uL2lvcy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tICAgfCAxOTYgKysrKysrKysrKysrKysrKysrKy0K
IDUgZmlsZXMgY2hhbmdlZCwgMjg2IGluc2VydGlvbnMoKyksIDIwOSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggODIwNGJjYmU1MDguLjU0OWJiYzA2M2UzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTYgQEAKKzIwMTctMDctMDQgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgor
CisgICAgICAgIE1vdmUgbW9yZSBjb2RlIGZyb20gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUyB0byBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQxMzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9TY3Jv
bGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaDogUmVtb3Zl
IHNvbWUgbWVtYmVycywKKyAgICAgICAgaGVhZGVycyBhbmQgcHJlLWRlY2xhcmF0aW9uIHRoYXQg
YXJlIG1vdmVkIGludG8gdGhlIGRlbGVnYXRlLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxMYXllcik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy5tbTogUmVtb3ZlIHNvbWUgaGVhZGVycyBhbmQKKyAgICAgICAgV0tPdmVyZmxv
d1Njcm9sbFZpZXdEZWxlZ2F0ZSBzaW5jZSB0aGV5IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0
ZSBmaWxlLiBBbHNvIGZpeCB0aGUKKyAgICAgICAgY29tbWVudCB0byBjbG9zaW5nIHRoZSBXZWJL
aXQgbmFtZXNwYWNlLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOjp+U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyk6Cisg
ICAgICAgIFJlbW92ZSBzb21lIGNvZGUgbW92ZWQgaW50byB0aGUgZGVsZWdhdGUgYW5kIGNhbGwg
dGhlIGNvcnJlc3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9uIHRvCisgICAgICAgIHByZXNlcnZlIHRo
ZSBjdXJyZW50IGJlaGF2aW9yLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKTogRGl0dG8uCisg
ICAgICAgIE5vdGUgdGhhdCBpdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBjYXN0IHRoZSBwYXJhbWV0
ZXIgdG8gYSBTY3JvbGxpbmdTdGF0ZVRyZWVOb2RlLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxQ
b3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKTogRGl0dG8uCisgICAgICAg
ICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0Rl
bGVnYXRlIHNjcm9sbFZpZXdEaWRTY3JvbGw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLT3Zl
cmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZp
ZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmll
d0RpZEVuZERyYWdnaW5nOndpbGxEZWNlbGVyYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6
XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oOiBJbXBvcnQgaGVhZGVycyBhbmQgbWVtYmVy
cworICAgICAgICBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuIERl
ZmluZSBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvZGUgaW1wb3J0ZWQKKyAgICAgICAg
ZnJvbSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBSZW1vdmUgdGhlIGZy
aWVuZHNoaXAgd2l0aAorICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TIGFuZCBvbmx5IG1ha2VzIHB1YmxpYyB0aGUgZnVuY3Rpb24gdXNlZCBieSB0aGF0IGNsYXNz
LgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
OjpzY3JvbGxMYXllcik6IFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgZnJvbQorICAgICAgICBTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLgorICAgICAgICAqIFVJUHJvY2Vzcy9T
Y3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IEFk
ZCBoZWFkZXJzLAorICAgICAgICBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIChyZW5hbWVk
IFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSkgYW5kIHNvbWUgaGVscGVyIGNvZGUK
KyAgICAgICAgaW1wb3J0ZWQgZnJvbSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xs
Vmlld0RpZFNjcm9sbDpdKTogTW92ZWQgZnJvbQorICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3
RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsRW5kRHJh
Z2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld0RpZEVuZERy
YWdnaW5nOndpbGxEZWNlbGVyYXRlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdO
b2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6XSk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TOjp+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyk6CisgICAgICAgIElt
cG9ydCBjb2RlIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6cmVz
ZXRTY3JvbGxWaWV3RGVsZWdhdGUpOiBOZXcgaGVscGVyIGZ1bmN0aW9uCisgICAgICAgIGltcG9y
dGluZyBjb2RlIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29t
bWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxQ
b3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKTogRGl0dG8uCisKIDIwMTct
MDctMDQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBD
bGVhbnVwIHNvbWUgU3RyaW5nQnVpbGRlciB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAppbmRleCAyMGM1YzQyN2E0Yy4uYmZlYjNh
MTUwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9z
L1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TLmgKQEAgLTI4LDEyICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBQTEFURk9STShJT1MpCiAKLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlLmg+CiAKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV0tPdmVyZmxvd1Nj
cm9sbFZpZXdEZWxlZ2F0ZTsKLQogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00Myw4ICszOSw2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M+IGNy
ZWF0ZShXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEKTsK
ICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKCk7CiAK
LSAgICBDQUxheWVyICpzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIu
Z2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQp
OwogCkBAIC02MiwxMCArNTYsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlIHsgfQogCi0g
ICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5
ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOwotCi0gICAgUmV0YWluUHRyPFdLT3ZlcmZsb3dT
Y3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xsVmlld0RlbGVnYXRlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TPiBtX3Njcm9sbGluZ05v
ZGVEZWxlZ2F0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
Y3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDZiYjVjYzcxNTdjLi44YjhiN2JmYTRhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Lm1tCkBAIC0yOSwxMDggKzI5LDExIEBACiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCiAKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1
cmVSZWNvZ25pemVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KLSNpbXBvcnQg
PHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4K
LQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8u
aD4KLSNlbmRpZgotCiAjaW1wb3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdLT3ZlcmZs
b3dTY3JvbGxWaWV3RGVsZWdhdGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsK
LSAgICBXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlOwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVy
PV9pc0luVXNlckludGVyYWN0aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOwotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlOwotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyopZGVsZWdhdGUKLXsKLSAgICBpZiAoKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZSA9IGRl
bGVnYXRlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZFNj
cm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwg
X2luVXNlckludGVyYWN0aW9uKTsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJh
Z2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBfaW5Vc2VySW50ZXJhY3Rp
b24gPSBZRVM7Ci0KLSAgICBpZiAoc2Nyb2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0
ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikKLSAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0gICAgX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFdpbGxTdGFydCgpOwotfQotCi0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkg
dGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQK
LXsKLSAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54
OwotICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55Owot
Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCk7Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9
IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgoKTsKLQotICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3Np
dGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9y
aXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhv
cml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAg
ICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAg
fQotCi0gICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgp
LnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5k
ZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zm
c2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxT
bmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgp
LnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwg
aW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9k
ZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYg
KHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250
ZW50U2l6ZS5oZWlnaHQpCi0gICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90
ZW50aWFsU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChvcmlnaW5hbEhvcml6b250YWxT
bmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxW
ZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpIHsKLSAgICAgICAgX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpOwotICAgIH0KLX0KLSNl
bmRpZgotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQotewotICAgIGlm
IChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7Ci0gICAgICAgIF9pblVz
ZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+
c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRl
cmFjdGlvbik7Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRF
bmQoKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24p
IHsKLSAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87Ci0gICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9m
ZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPnNjcm9sbERpZEVuZCgpOwotICAgIH0KLX0KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xs
aW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KIAotQGVuZAordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0xNDcsMTIxICs1MCwzNiBAQCBT
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TKFdlYgogCiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TOjp+U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUygpCiB7Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xs
VmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAg
ICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0p
OwotICAgICAgICAvLyBUaGUgc2Nyb2xsVmlldyBtYXkgaGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5v
dGhlciBub2RlLCBzbyBvbmx5IGNsZWFyIHRoZSBkZWxlZ2F0ZSBpZiBpdCdzIG91cnMuCi0gICAg
ICAgIGlmIChzY3JvbGxWaWV3LmRlbGVnYXRlID09IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgp
KQotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsKLSAgICB9Ci0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCiB7Ci0gICAgaWYgKHN0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikp
IHsKLSAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgIGlmIChVSVNj
cm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVs
ZWdhdGVdKSB7Ci0gICAgICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpb
VUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0g
bmlsOwotICAgICAgICB9Ci0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9
CisgICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRl
LT5yZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOwogCiAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOwotCi0g
ICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3Rh
dGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Ci0gICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXll
cikpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsK
LQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKLSAgICAgICAgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50
c0xheWVyKCk7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQmVmb3Jl
Q2hpbGRyZW4oZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUp
KTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjb21t
aXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUp
CiB7CiAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVB
ZnRlckNoaWxkcmVuKHN0YXRlTm9kZSk7Ci0KLSAgICBTZXRGb3JTY29wZTxib29sPiB1cGRhdGlu
Z0NoYW5nZShtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+bV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUs
IHRydWUpOwotCi0gICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8
U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Ci0KLSAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbExheWVyKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250
ZW50c1NpemUpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpCi0g
ICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgfHwgc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbE9yaWdpbikpIHsKLSAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0g
ICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xs
TGF5ZXIoKSBkZWxlZ2F0ZV07Ci0gICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLQotICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bExheWVyKSkgewotICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFZpZXdEZWxlZ2F0ZSkKLSAgICAg
ICAgICAgICAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS092ZXJmbG93U2Ny
b2xsVmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6
bV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUuZ2V0KCldKTsKLQotICAgICAgICAgICAgc2Nyb2xsVmll
dy5zY3JvbGxzVG9Ub3AgPSBOTzsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBt
X3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVj
b21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKTsKLSAgICAgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpKSB7Ci0gICAgICAgICAgICBzY3JvbGxW
aWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6
ZSgpOwotICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQotICAgICAgICAgICAgfHwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNjcm9sbE9yaWdpbikpCi0gICAgICAgICAgICAmJiAhW21fc2Nyb2xsVmlld0RlbGVn
YXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkgewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250
ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxP
cmlnaW4oKTsKLSAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocmVjb21wdXRlSW5zZXRzKSB7Ci0gICAgICAgICAgICBVSUVkZ2VJbnNl
dHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIC8v
IFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Agc2Nyb2xsaW5nIChub24temVybyBvcmlnaW4pLCB3
ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBsZWZ0IG9yIHRvcC4KLSAgICAgICAgICAgIGlmIChz
Y3JvbGxPcmlnaW4oKS54KCkpCi0gICAgICAgICAgICAgICAgaW5zZXRzLmxlZnQgPSByZWFjaGFi
bGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gdG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpOwot
Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCkueSgpKQotICAgICAgICAgICAgICAgIGlu
c2V0cy50b3AgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHRvdGFsQ29udGVu
dHNTaXplKCkuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0
ID0gaW5zZXRzOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
ICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUgYXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRo
ZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3
ZSB3YW50PwotICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwg
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpKQotICAgICAgICAgICAgc2Nyb2xsVmlldy5k
ZWNlbGVyYXRpb25SYXRlID0gaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRp
Y2FsU25hcE9mZnNldHMoKS5zaXplKCkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFz
dCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVOb3JtYWw7Ci0jZW5kaWYKLSAgICAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0KKyAgICBtX3Njcm9sbGluZ05vZGVEZWxl
Z2F0ZS0+Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZT4oc3RhdGVOb2RlKSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBT
Y3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3Np
dGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKQogewotICAgIGlmICgh
bV9jaGlsZHJlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRh
ID0gbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwotCi0g
ICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3Qs
IGN1bXVsYXRpdmVEZWx0YSArIHNjcm9sbERlbHRhKTsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxl
Z2F0ZS0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQ
b3NpdGlvblJlY3QsIGN1bXVsYXRpdmVEZWx0YSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xs
VmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07Ci0gICAgQVNT
RVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAg
IHJldHVybiBbc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5zY3JvbGxQb3Np
dGlvbigpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6
OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYpCiB7Ci0gICAgW21fc2Nyb2xsTGF5ZXIgc2V0UG9zaXRpb246Q0dQ
b2ludE1ha2UoLXNjcm9sbFBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9s
bFBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSldOwotCi0gICAgbV9zY3JvbGxpbmdO
b2RlRGVsZWdhdGUtPnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7
CisgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnNldFNjcm9sbExheWVyUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24pOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKQpAQCAtMjY5LDcgKzg3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChj
b24KICAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Ny
b2xsKHNjcm9sbFBvc2l0aW9uKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MuaAppbmRleCA2ZmVjNTI0ZjkyYi4uNmM5OTQ1NDA4ZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
LmgKQEAgLTI3LDcgKzI3LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCiAKKyNpbmNsdWRlIDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oPgor
CitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZp
ZXdEZWxlZ2F0ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGU7CkBAIC0zNSwxMiArNDEsOSBAQCBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1M7Ci0KIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MgewotICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOwotCiBwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYp
OwogICAgIH5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCk7CiAKICAgICBX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSgpIHsgcmV0
dXJuIG1fc2Nyb2xsaW5nTm9kZTsgfQpAQCAtNDksMTUgKzUyLDM0IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9pZCBzY3Jv
bGxWaWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBib29sIGluVXNlckludGVyYXRpb24pIGNvbnN0OwogICAgIHZvaWQgY3VycmVudFNuYXBQb2lu
dEluZGljZXNEaWRDaGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwp
IGNvbnN0OworICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxMYXllci5nZXQoKTsgfQogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUmKTsKKyAgICB2b2lkIHJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKCk7CisgICAgdm9pZCBjb21t
aXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKTsKKyAgICB2b2lkIGNvbW1pdFN0YXRlQWZ0ZXJD
aGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9s
bGluZ1N0YXRlTm9kZSk7CisgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBjdW11bGF0aXZlRGVsdGEpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgdXBkYXRlQ2hpbGRO
b2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KTsKIAorcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKKyAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CisgICAgUmV0YWlu
UHRyPFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdh
dGU7CiAgICAgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIG1fc2Nyb2xsaW5n
Tm9kZTsKICAgICBib29sIG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitAaW50ZXJmYWNlIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxl
Z2F0ZSA6IE5TT2JqZWN0IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4geworICAgIFdlYktpdDo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyogX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGU7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzSW5Vc2VySW50ZXJh
Y3Rpb24pIEJPT0wgaW5Vc2VySW50ZXJhY3Rpb247CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUyopZGVsZWdhdGU7CisKK0BlbmQKKwogI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4IDE1ODczMDU3MWY2Li4x
NGZiMjY3NzJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGlu
Zy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLm1tCkBAIC0yOCwxMSArMjgsOTggQEAKIAogI2lmIFBMQVRGT1JNKElP
UykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
aW5nVHJlZS5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxV
SUtpdC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05v
ZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgorI2ltcG9ydCA8d3RmL0Js
b2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4KIAorI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisjaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KKyNlbmRpZgorCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorQGltcGxlbWVudGF0aW9uIFdLU2Nyb2xsaW5nTm9k
ZVNjcm9sbFZpZXdEZWxlZ2F0ZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MqKWRlbGVnYXRlCit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNj
cm9sbFZpZXcKK3sKKyAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0Rp
ZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilz
Y3JvbGxWaWV3Cit7CisgICAgX2luVXNlckludGVyYWN0aW9uID0gWUVTOworCisgICAgaWYgKHNj
cm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXpl
clN0YXRlQmVnYW4pCisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxW
aWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOworICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5zY3JvbGxXaWxsU3RhcnQoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCist
ICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlu
b3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0Cit7CisgICAgQ0dGbG9hdCBob3Jpem9u
dGFsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+eDsKKyAgICBDR0Zsb2F0IHZlcnRpY2Fs
VGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+eTsKKworICAgIHVuc2lnbmVkIG9yaWdpbmFs
SG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOworICAgIHVuc2ln
bmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisK
KyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNl
dChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxT
bmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgp
Lmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCksIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5
LngsIGluZGV4KTsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGlu
Z05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKKyAgICAg
ICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9s
bFZpZXcuY29udGVudFNpemUud2lkdGgpCisgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0
LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmICghX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCku
aXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9hdCBwb3Rl
bnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5n
ZXMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIGluZGV4KTsKKyAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleChpbmRleCk7CisgICAgICAgIGlmICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYm
IHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUuaGVpZ2h0KQorICAgICAg
ICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAg
ICB9CisKKyAgICBpZiAob3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uICE9IF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCgpCisgICAgICAgIHx8IG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gIT0g
X3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCgpKSB7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSwg
X3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKworLSAodm9pZClzY3JvbGxW
aWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERlY2VsZXJh
dGU6KEJPT0wpd2lsbERlY2VsZXJhdGUKK3sKKyAgICBpZiAoX2luVXNlckludGVyYWN0aW9uICYm
ICF3aWxsRGVjZWxlcmF0ZSkgeworICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKKyAg
ICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Ny
b2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlkRW5kKCk7CisgICAgfQorfQorCistICh2
b2lkKXNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXcKK3sKKyAgICBpZiAoX2luVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIF9pblVzZXJJbnRl
cmFjdGlvbiA9IE5POworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
Vmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlv
bik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsK
KyAgICB9Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ05vZGUpCkBAIC00Myw2
ICsxMzAsMTEzIEBAIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoU2NyCiAKIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1M6On5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TKCkKIHsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBpZiAoVUlTY3Jv
bGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVn
YXRlXSkgeworICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3Jv
bGxWaWV3IHNlbGZdXSk7CisgICAgICAgIC8vIFRoZSBzY3JvbGxWaWV3IG1heSBoYXZlIGJlZW4g
YWRvcHRlZCBieSBhbm90aGVyIG5vZGUsIHNvIG9ubHkgY2xlYXIgdGhlIGRlbGVnYXRlIGlmIGl0
J3Mgb3Vycy4KKyAgICAgICAgaWYgKHNjcm9sbFZpZXcuZGVsZWdhdGUgPT0gbV9zY3JvbGxWaWV3
RGVsZWdhdGUuZ2V0KCkpCisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOwor
ICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKQor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcg
KnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7
CisgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcg
c2VsZl1dKTsKKyAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsKKyAgICB9CisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpCit7CisgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpT
Y3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
bGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAg
ICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xs
ZWRDb250ZW50c0xheWVyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKQoreworICAgIFNldEZvclNjb3BlPGJv
b2w+IHVwZGF0aW5nQ2hhbmdlKG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlLCB0cnVlKTsKKyAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbExheWVyKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250
ZW50c1NpemUpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpCisg
ICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgfHwgc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbE9yaWdpbikpIHsKKyAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisg
ICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xs
TGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bExheWVyKSkgeworICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFZpZXdEZWxlZ2F0ZSkKKyAgICAg
ICAgICAgICAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1Njcm9sbGluZ05v
ZGVTY3JvbGxWaWV3RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZTp0aGlzXSk7CisKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87
CisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUu
Z2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlY29tcHV0ZUluc2V0cyA9IHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpUb3RhbENvbnRlbnRzU2l6ZSk7CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxl
Q29udGVudHNTaXplKSkgeworICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50U2l6ZSA9IHNj
cm9sbGluZ1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKTsKKyAgICAgICAgICAgIHJl
Y29tcHV0ZUluc2V0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4p
KQorICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFj
dGlvbl0pIHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IHNjcm9sbGlu
Z1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxpbmdOb2RlLnNjcm9sbE9yaWdp
bigpOworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChyZWNvbXB1dGVJbnNldHMpIHsKKyAgICAgICAgICAgIFVJRWRnZUluc2V0cyBp
bnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIDAsIDAsIDApOworICAgICAgICAgICAgLy8gV2l0
aCBSVEwgb3IgYm90dG9tLXRvLXRvcCBzY3JvbGxpbmcgKG5vbi16ZXJvIG9yaWdpbiksIHdlIG5l
ZWQgZXh0cmEgc3BhY2Ugb24gdGhlIGxlZnQgb3IgdG9wLgorICAgICAgICAgICAgaWYgKG1fc2Ny
b2xsaW5nTm9kZS5zY3JvbGxPcmlnaW4oKS54KCkpCisgICAgICAgICAgICAgICAgaW5zZXRzLmxl
ZnQgPSBtX3Njcm9sbGluZ05vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAtIG1f
c2Nyb2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCk7CisKKyAgICAgICAgICAg
IGlmIChtX3Njcm9sbGluZ05vZGUuc2Nyb2xsT3JpZ2luKCkueSgpKQorICAgICAgICAgICAgICAg
IGluc2V0cy50b3AgPSBtX3Njcm9sbGluZ05vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCkuaGVp
Z2h0KCkgLSBtX3Njcm9sbGluZ05vZGUudG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKTsKKwor
ICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNldHM7CisgICAgICAgIH0K
KworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIC8vIEZJWE1FOiBJZiBvbmx5
IG9uZSBheGlzIHNuYXBzIGluIDJEIHNjcm9sbGluZywgdGhlIG90aGVyIGF4aXMgd2lsbCBkZWNl
bGVyYXRlIGZhc3QgYXMgd2VsbC4gSXMgdGhpcyB3aGF0IHdlIHdhbnQ/CisgICAgICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0cykpCisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlY2VsZXJhdGlvblJhdGUgPSBtX3Nj
cm9sbGluZ05vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IG1fc2Nyb2xsaW5n
Tm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3JvbGxWaWV3RGVjZWxlcmF0
aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOworI2VuZGlm
CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNl
c3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZs
b2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURl
bHRhKQoreworICAgIGlmICghbV9zY3JvbGxpbmdOb2RlLmNoaWxkcmVuKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IG1fc2Nyb2xsaW5nTm9kZS5sYXN0
Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxQb3NpdGlv
bigpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX3Njcm9sbGluZ05vZGUuY2hpbGRyZW4o
KSkKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdl
ZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxEZWx0YSk7
Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6
c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xs
TGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6
W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgIHJldHVybiBbc2Nyb2xsVmlldyBjb250ZW50T2Zm
c2V0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBbbV9zY3JvbGxMYXllciBzZXRQ
b3NpdGlvbjpDR1BvaW50TWFrZShzY3JvbGxQb3NpdGlvbi54KCkgKyBtX3Njcm9sbGluZ05vZGUu
c2Nyb2xsT3JpZ2luKCkueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgKyBtX3Njcm9sbGluZ05vZGUu
c2Nyb2xsT3JpZ2luKCkueSgpKV07CisgICAgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNj
cm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TOjp1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pCi0tIAoyLjExLjAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316539</attachid>
            <date>2017-07-27 02:46:24 -0700</date>
            <delta_ts>2017-08-04 07:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0002-Bug-174130-Move-more-code-from-ScrollingTreeScrollin.patch</filename>
            <type>text/plain</type>
            <size>32409</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBjOGVhOTY4NTVmZDc3ZTE1NDBlZDhkZDRjZjg5YmQ3MTI0NTFmOWRlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVGh1LCAyNyBKdWwgMjAxNyAxMToyODoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBC
dWcgMTc0MTMwIC0gTW92ZSBtb3JlIGNvZGUgZnJvbQogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUyB0byBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlCgotLS0K
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUz
ICsrKysrKwogLi4uL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgg
ICAgfCAgMTAgLQogLi4uL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Lm1tICAgfCAyMDIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAgICB8ICAzNCArKystCiAuLi4vaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gICB8IDE5NiArKysrKysrKysrKysrKysr
KysrLQogNSBmaWxlcyBjaGFuZ2VkLCAyODYgaW5zZXJ0aW9ucygrKSwgMjA5IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMDhhNmYzNTQ2MWIuLjdkN2QzZDM0YzhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDU4IEBACiAyMDE3LTA3LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4K
IAorICAgICAgICBNb3ZlIG1vcmUgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MTMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvU2Ny
b2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmg6IFJlbW92
ZSBzb21lIG1lbWJlcnMsCisgICAgICAgIGhlYWRlcnMgYW5kIHByZS1kZWNsYXJhdGlvbiB0aGF0
IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0ZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsTGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MubW06IFJlbW92ZSBzb21lIGhlYWRlcnMgYW5kCisgICAgICAgIFdLT3ZlcmZs
b3dTY3JvbGxWaWV3RGVsZWdhdGUgc2luY2UgdGhleSBhcmUgbW92ZWQgaW50byB0aGUgZGVsZWdh
dGUgZmlsZS4gQWxzbyBmaXggdGhlCisgICAgICAgIGNvbW1lbnQgdG8gY2xvc2luZyB0aGUgV2Vi
S2l0IG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MpOgor
ICAgICAgICBSZW1vdmUgc29tZSBjb2RlIG1vdmVkIGludG8gdGhlIGRlbGVnYXRlIGFuZCBjYWxs
IHRoZSBjb3JyZXNwb25kaW5nIGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBwcmVzZXJ2ZSB0
aGUgY3VycmVudCBiZWhhdmlvci4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6IERpdHRvLgor
ICAgICAgICBOb3RlIHRoYXQgaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gY2FzdCB0aGUgcGFyYW1l
dGVyIHRvIGEgU2Nyb2xsaW5nU3RhdGVUcmVlTm9kZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xs
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorICAgICAg
ICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdE
ZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092
ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxW
aWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZp
ZXdEaWRFbmREcmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5n
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaDogSW1wb3J0IGhlYWRlcnMgYW5kIG1lbWJl
cnMKKyAgICAgICAgZnJvbSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBE
ZWZpbmUgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBjb2RlIGltcG9ydGVkCisgICAgICAg
IGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4gUmVtb3ZlIHRoZSBm
cmllbmRzaGlwIHdpdGgKKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUyBhbmQgb25seSBtYWtlcyBwdWJsaWMgdGhlIGZ1bmN0aW9uIHVzZWQgYnkgdGhhdCBjbGFz
cy4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uzo6c2Nyb2xsTGF5ZXIpOiBUaGlzIGZ1bmN0aW9uIGlzIG1vdmVkIGZyb20KKyAgICAgICAgU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOiBB
ZGQgaGVhZGVycywKKyAgICAgICAgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSAocmVuYW1l
ZCBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUpIGFuZCBzb21lIGhlbHBlciBjb2Rl
CisgICAgICAgIGltcG9ydGVkIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9s
bFZpZXdEaWRTY3JvbGw6XSk6IE1vdmVkIGZyb20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmll
d0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERy
YWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmRE
cmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU2Nyb2xsaW5n
Tm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MpOgorICAgICAgICBJ
bXBvcnQgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisg
ICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJl
c2V0U2Nyb2xsVmlld0RlbGVnYXRlKTogTmV3IGhlbHBlciBmdW5jdGlvbgorICAgICAgICBpbXBv
cnRpbmcgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisg
ICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNv
bW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xs
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorCisyMDE3
LTA3LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKwogICAgICAgICBJbnRy
b2R1Y2UgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyB0byBzaGFyZSBjb2Rl
IGJldHdlZW4gb3ZlcmZsb3cgYW5kIGZyYW1lIHNjcm9sbGluZwogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MDk3CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKaW5kZXggMjBjNWM0MjdhNGMu
LmJmZWIzYTE1MDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxp
bmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1MuaApAQCAtMjgsMTIgKzI4LDggQEAKIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGUuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlOwotCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlSU9TOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDggKzM5LDYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2Rl
SUQpOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mo
KTsKIAotICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllci5nZXQoKTsgfQotCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6OlNjcm9sbGluZ05v
ZGVJRCk7CiAKQEAgLTYyLDEwICs1Niw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGUgeyB9
CiAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBSZXRhaW5QdHI8
Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRhaW5QdHI8V0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M+IG1fc2Nyb2xs
aW5nTm9kZURlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDZiYjVjYzcxNTdjLi44YjhiN2JmYTRhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uy5tbQpAQCAtMjksMTA4ICsyOSwxMSBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQogCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0
dXJlUmVjb2duaXplci5oPgotI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0
IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZv
Lmg+Ci0jZW5kaWYKLQogI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPiB7
Ci0gICAgV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKiBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRl
cj1faXNJblVzZXJJbnRlcmFjdGlvbikgQk9PTCBpblVzZXJJbnRlcmFjdGlvbjsKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTooV2ViS2l0OjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKilkZWxlZ2F0ZTsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlCi17Ci0gICAgaWYgKChzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRT
Y3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQs
IF9pblVzZXJJbnRlcmFjdGlvbik7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRy
YWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgX2luVXNlckludGVyYWN0
aW9uID0gWUVTOwotCi0gICAgaWYgKHNjcm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXIuc3Rh
dGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pCi0gICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOwotICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxXaWxsU3RhcnQoKTsKLX0KLQotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCi0tICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5
IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0
Ci17Ci0gICAgQ0dGbG9hdCBob3Jpem9udGFsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+
eDsKLSAgICBDR0Zsb2F0IHZlcnRpY2FsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+eTsK
LQotICAgIHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCgpOwotICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24g
PSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCksIGhv
cml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGluZGV4KTsKLSAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBo
b3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCi0gICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAg
IH0KLQotICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
ZGV4OwotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9m
ZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5Lnks
IGluZGV4KTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7Ci0gICAgICAgIGlm
ICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29u
dGVudFNpemUuaGVpZ2h0KQotICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAob3JpZ2luYWxIb3Jpem9udGFs
U25hcFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpCi0gICAgICAgIHx8IG9yaWdpbmFs
VmVydGljYWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKSB7Ci0gICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5n
ZShfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKLSAgICB9Ci19Ci0j
ZW5kaWYKLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERlY2VsZXJhdGUKLXsKLSAgICBp
ZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0ZSkgewotICAgICAgICBfaW5V
c2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50
ZXJhY3Rpb24pOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlk
RW5kKCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBpZiAoX2luVXNlckludGVyYWN0aW9u
KSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAgICBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRP
ZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAKLUBlbmQKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTQ3LDEyMSArNTAsMzYgQEAg
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6U2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUyhXZWIKIAogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKQogewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Ci0gICAg
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKLSAgICAgICAgLy8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFu
b3RoZXIgbm9kZSwgc28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgotICAg
ICAgICBpZiAoc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQo
KSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Ci0gICAgfQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogewotICAgIGlmIChzdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBpZiAoVUlT
Y3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRl
bGVnYXRlXSkgewotICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6
W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9
IG5pbDsKLSAgICAgICAgfQotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
fQorICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0
ZS0+cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKTsKIAogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2RlKTsKLQot
ICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0
YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5
ZXIpKQotICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmxheWVyKCk7
Ci0KLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgIG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVkQ29udGVu
dHNMYXllcigpOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5jb21taXRTdGF0ZUJlZm9y
ZUNoaWxkcmVuKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2Rl
KSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29t
bWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2Rl
KQogewogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRl
QWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRp
bmdDaGFuZ2UobV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPm1fdXBkYXRpbmdGcm9tU3RhdGVOb2Rl
LCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotCi0gICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29u
dGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKQot
ICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHx8IHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9s
bExheWVyKCkgZGVsZWdhdGVdOwotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZD
bGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxMYXllcikpIHsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUpCi0gICAg
ICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVyZmxvd1Nj
cm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
Om1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZp
ZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0g
bV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJl
Y29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKSkgewotICAgICAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGluZ1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1Np
emUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxl
Z2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0pIHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29u
dGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xs
T3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUluc2V0cykgewotICAgICAgICAgICAgVUlFZGdlSW5z
ZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAv
LyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9wIHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwg
d2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUgbGVmdCBvciB0b3AuCi0gICAgICAgICAgICBpZiAo
c2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAgICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVhY2hh
YmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAtIHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsK
LQotICAgICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLnkoKSkKLSAgICAgICAgICAgICAgICBp
bnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNl
dCA9IGluc2V0czsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAg
ICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0
aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQg
d2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8
IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcu
ZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0
aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZh
c3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOwotI2VuZGlmCi0gICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9CisgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3Qg
U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9z
aXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKIHsKLSAgICBpZiAo
IW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0
YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLQot
ICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0
ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0
LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxEZWx0YSk7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVk
UG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEpOwogfQogCiBGbG9hdFBvaW50IFNjcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgIEFT
U0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAg
ICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Nyb2xsUG9z
aXRpb24oKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
OjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBjb25zdCBGbG9hdFJlY3QmKQogewotICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNH
UG9pbnRNYWtlKC1zY3JvbGxQb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3Jv
bGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpXTsKLQotICAgIG1fc2Nyb2xsaW5n
Tm9kZURlbGVnYXRlLT51cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24p
OworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5zZXRTY3JvbGxMYXllclBvc2l0aW9uKHNj
cm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKQEAgLTI2OSw3ICs4Nyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwo
Y29uCiAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNj
cm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNl
bmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5oCmluZGV4IDZmZWM1MjRmOTJiLi42Yzk5NDU0MDhlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgK
QEAgLTI3LDcgKzI3LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCiAKKyNpbmNsdWRlIDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oPgorCitP
QkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdE
ZWxlZ2F0ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGU7CkBAIC0zNSwxMiArNDEsOSBAQCBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1M7Ci0KIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MgewotICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOwotCiBwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOwog
ICAgIH5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCk7CiAKICAgICBXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJu
IG1fc2Nyb2xsaW5nTm9kZTsgfQpAQCAtNDksMTUgKzUyLDM0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9pZCBzY3JvbGxW
aWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBi
b29sIGluVXNlckludGVyYXRpb24pIGNvbnN0OwogICAgIHZvaWQgY3VycmVudFNuYXBQb2ludElu
ZGljZXNEaWRDaGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpIGNv
bnN0OworICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllci5nZXQoKTsgfQogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUm
KTsKKyAgICB2b2lkIHJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKCk7CisgICAgdm9pZCBjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKTsKKyAgICB2b2lkIGNvbW1pdFN0YXRlQWZ0ZXJDaGls
ZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9sbGlu
Z1N0YXRlTm9kZSk7CisgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBjdW11bGF0aXZlRGVsdGEpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRp
b24oKSBjb25zdDsKKyAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgdXBkYXRlQ2hpbGROb2Rl
c0FmdGVyU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsK
IAorcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBS
ZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CisgICAgUmV0YWluUHRy
PFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7
CiAgICAgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIG1fc2Nyb2xsaW5nTm9k
ZTsKICAgICBib29sIG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitAaW50ZXJmYWNlIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0
ZSA6IE5TT2JqZWN0IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4geworICAgIFdlYktpdDo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyogX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGU7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzSW5Vc2VySW50ZXJhY3Rp
b24pIEJPT0wgaW5Vc2VySW50ZXJhY3Rpb247CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUyopZGVsZWdhdGU7CisKK0BlbmQKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRleCAxNTg3MzA1NzFmNi4uMTRmYjI2
NzcyZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3Mv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW0KQEAgLTI4LDExICsyOCw5OCBAQAogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVl
Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJ
UGFuR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oPgogCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKyNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCitAaW1wbGVtZW50YXRpb24gV0tTY3JvbGxpbmdOb2RlU2Nyb2xs
Vmlld0RlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2Rl
RGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyop
ZGVsZWdhdGUKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dworeworICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xs
KHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKK30KKworLSAo
dm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXcKK3sKKyAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7CisKKyAgICBpZiAoc2Nyb2xsVmll
dy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVC
ZWdhbikKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdXaWxs
U3RhcnRQYW5HZXN0dXJlKCk7CisgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bFdpbGxTdGFydCgpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKy0gKHZvaWQp
c2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRo
VmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQ
b2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKK3sKKyAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJn
ZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OworICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQg
PSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OworCisgICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9u
dGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgdW5zaWduZWQgb3Jp
Z2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5z
Y3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKKworICAgIGlm
ICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFs
U25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAg
ICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpv
bnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5k
ZXgpOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgp
LnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAo
aG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5j
b250ZW50U2l6ZS53aWR0aCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBw
b3RlbnRpYWxTbmFwUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbFNu
YXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2
ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOworICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGlj
YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAgICAgICAgICB0
YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKwor
ICAgIGlmIChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkKKyAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCkpIHsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPmN1cnJl
bnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5z
Y3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpLCBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KCkpOworICAgIH0KK30KKyNlbmRpZgorCistICh2b2lkKXNjcm9sbFZpZXdEaWRF
bmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9P
TCl3aWxsRGVjZWxlcmF0ZQoreworICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxE
ZWNlbGVyYXRlKSB7CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3
LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2Ny
b2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworewor
ICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9u
ID0gTk87CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlk
U2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKKyAg
ICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAgIH0K
K30KKworQGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUzo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyhT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSkKQEAgLTQzLDYgKzEzMCwx
MTMgQEAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyhTY3IKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoKQog
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcg
KnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7
CisgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcg
c2VsZl1dKTsKKyAgICAgICAgLy8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVk
IGJ5IGFub3RoZXIgbm9kZSwgc28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJz
LgorICAgICAgICBpZiAoc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0
ZS5nZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7CisgICAgfQor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlSU9TOjpyZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpCit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xs
VmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAg
ICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0p
OworICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSkKK3sKKyAgICBpZiAoc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExh
eWVyKSkKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigp
OworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBt
X3Njcm9sbGVkQ29udGVudHNMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRl
bnRzTGF5ZXIoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpCit7CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBk
YXRpbmdDaGFuZ2UobV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUsIHRydWUpOworICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6
ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKKyAgICAgICAg
fHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
T3JpZ2luKSkgeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAg
VUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigp
IGRlbGVnYXRlXTsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJ
U2Nyb2xsVmlldyBzZWxmXV0pOworCisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7CisgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsVmlld0RlbGVnYXRlKQorICAgICAgICAgICAg
ICAgIG1fc2Nyb2xsVmlld0RlbGVnYXRlID0gYWRvcHROUyhbW1dLU2Nyb2xsaW5nTm9kZVNjcm9s
bFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOnRo
aXNdKTsKKworICAgICAgICAgICAgc2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKKyAgICAg
ICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRv
dGFsQ29udGVudHNTaXplKTsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50
c1NpemUpKSB7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgcmVjb21wdXRl
SW5zZXRzID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bFBvc2l0aW9uKQorICAgICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCisgICAg
ICAgICAgICAmJiAhW21fc2Nyb2xsVmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkg
eworICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbGluZ05vZGUuc2Nyb2xsT3JpZ2luKCk7Cisg
ICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJlY29tcHV0ZUluc2V0cykgeworICAgICAgICAgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9
IFVJRWRnZUluc2V0c01ha2UoMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAvLyBXaXRoIFJUTCBv
ciBib3R0b20tdG8tdG9wIHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwgd2UgbmVlZCBleHRy
YSBzcGFjZSBvbiB0aGUgbGVmdCBvciB0b3AuCisgICAgICAgICAgICBpZiAobV9zY3JvbGxpbmdO
b2RlLnNjcm9sbE9yaWdpbigpLngoKSkKKyAgICAgICAgICAgICAgICBpbnNldHMubGVmdCA9IG1f
c2Nyb2xsaW5nTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxp
bmdOb2RlLnRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsKKworICAgICAgICAgICAgaWYgKG1f
c2Nyb2xsaW5nTm9kZS5zY3JvbGxPcmlnaW4oKS55KCkpCisgICAgICAgICAgICAgICAgaW5zZXRz
LnRvcCA9IG1fc2Nyb2xsaW5nTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKS5oZWlnaHQoKSAt
IG1fc2Nyb2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOworCisgICAgICAg
ICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKKyAgICAgICAgfQorCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4
aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUg
ZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ugd2FudD8KKyAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRz
KSkKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IG1fc2Nyb2xsaW5n
Tm9kZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5zaXplKCkgfHwgbV9zY3JvbGxpbmdOb2RlLnZl
cnRpY2FsU25hcE9mZnNldHMoKS5zaXplKCkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRl
RmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVOb3JtYWw7CisjZW5kaWYKKyAgICAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hh
bmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0
JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit7
CisgICAgaWYgKCFtX3Njcm9sbGluZ05vZGUuY2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbV9zY3JvbGxpbmdOb2RlLmxhc3RDb21taXR0
ZWRTY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxpbmdOb2RlLnNjcm9sbFBvc2l0aW9uKCk7CisK
KyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fc2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQorICAg
ICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwg
Zml4ZWRQb3NpdGlvblJlY3QsIGN1bXVsYXRpdmVEZWx0YSArIHNjcm9sbERlbHRhKTsKK30KKwor
RmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
VUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigp
IGRlbGVnYXRlXTsKKyAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3Jv
bGxWaWV3IHNlbGZdXSk7CisgICAgcmV0dXJuIFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9u
OkNHUG9pbnRNYWtlKHNjcm9sbFBvc2l0aW9uLngoKSArIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxP
cmlnaW4oKS54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSArIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxP
cmlnaW4oKS55KCkpXTsKKyAgICB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9z
aXRpb24pOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6
OnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKLS0gCjIuMTEuMCAoQXBwbGUgR2l0LTgxKQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317241</attachid>
            <date>2017-08-04 07:31:21 -0700</date>
            <delta_ts>2017-09-04 09:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-Bug-174130-Move-more-code-from-ScrollingTreeScrollin.patch</filename>
            <type>text/plain</type>
            <size>32426</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA5YjhiZGFiZWExYjQ1OThkY2E1MDYxMjI3NDk4YWJmNzE0MTZkMGUxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVGh1LCAyNyBKdWwgMjAxNyAxMToyODoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy80XSBC
dWcgMTc0MTMwIC0gTW92ZSBtb3JlIGNvZGUgZnJvbQogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUyB0byBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlCgotLS0K
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUz
ICsrKysrKwogLi4uL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgg
ICAgfCAgMTAgLQogLi4uL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Lm1tICAgfCAyMDIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAgICB8ICAzNCArKystCiAuLi4vaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gICB8IDE5NCArKysrKysrKysrKysrKysr
KysrKwogNSBmaWxlcyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMjA4IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNDc1NjZjMTM5YjQuLjEyZjBhNTQ5ZmZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDU4IEBACiAyMDE3LTA3LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4K
IAorICAgICAgICBNb3ZlIG1vcmUgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MTMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvU2Ny
b2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmg6IFJlbW92
ZSBzb21lIG1lbWJlcnMsCisgICAgICAgIGhlYWRlcnMgYW5kIHByZS1kZWNsYXJhdGlvbiB0aGF0
IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0ZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsTGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MubW06IFJlbW92ZSBzb21lIGhlYWRlcnMgYW5kCisgICAgICAgIFdLT3ZlcmZs
b3dTY3JvbGxWaWV3RGVsZWdhdGUgc2luY2UgdGhleSBhcmUgbW92ZWQgaW50byB0aGUgZGVsZWdh
dGUgZmlsZS4gQWxzbyBmaXggdGhlCisgICAgICAgIGNvbW1lbnQgdG8gY2xvc2luZyB0aGUgV2Vi
S2l0IG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MpOgor
ICAgICAgICBSZW1vdmUgc29tZSBjb2RlIG1vdmVkIGludG8gdGhlIGRlbGVnYXRlIGFuZCBjYWxs
IHRoZSBjb3JyZXNwb25kaW5nIGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBwcmVzZXJ2ZSB0
aGUgY3VycmVudCBiZWhhdmlvci4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6IERpdHRvLgor
ICAgICAgICBOb3RlIHRoYXQgaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gY2FzdCB0aGUgcGFyYW1l
dGVyIHRvIGEgU2Nyb2xsaW5nU3RhdGVUcmVlTm9kZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xs
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorICAgICAg
ICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdE
ZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092
ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxW
aWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZp
ZXdEaWRFbmREcmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5n
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaDogSW1wb3J0IGhlYWRlcnMgYW5kIG1lbWJl
cnMKKyAgICAgICAgZnJvbSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBE
ZWZpbmUgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBjb2RlIGltcG9ydGVkCisgICAgICAg
IGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4gUmVtb3ZlIHRoZSBm
cmllbmRzaGlwIHdpdGgKKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUyBhbmQgb25seSBtYWtlcyBwdWJsaWMgdGhlIGZ1bmN0aW9uIHVzZWQgYnkgdGhhdCBjbGFz
cy4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uzo6c2Nyb2xsTGF5ZXIpOiBUaGlzIGZ1bmN0aW9uIGlzIG1vdmVkIGZyb20KKyAgICAgICAgU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOiBB
ZGQgaGVhZGVycywKKyAgICAgICAgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSAocmVuYW1l
ZCBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUpIGFuZCBzb21lIGhlbHBlciBjb2Rl
CisgICAgICAgIGltcG9ydGVkIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9s
bFZpZXdEaWRTY3JvbGw6XSk6IE1vdmVkIGZyb20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmll
d0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERy
YWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmRE
cmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU2Nyb2xsaW5n
Tm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MpOgorICAgICAgICBJ
bXBvcnQgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisg
ICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJl
c2V0U2Nyb2xsVmlld0RlbGVnYXRlKTogTmV3IGhlbHBlciBmdW5jdGlvbgorICAgICAgICBpbXBv
cnRpbmcgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisg
ICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNv
bW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xs
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorCisyMDE3
LTA3LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKwogICAgICAgICBJbnRy
b2R1Y2UgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyB0byBzaGFyZSBjb2Rl
IGJldHdlZW4gb3ZlcmZsb3cgYW5kIGZyYW1lIHNjcm9sbGluZwogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MDk3CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKaW5kZXggMjBjNWM0MjdhNGMu
LmJmZWIzYTE1MDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxp
bmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1MuaApAQCAtMjgsMTIgKzI4LDggQEAKIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGUuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlOwotCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlSU9TOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDggKzM5LDYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2Rl
SUQpOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mo
KTsKIAotICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllci5nZXQoKTsgfQotCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6OlNjcm9sbGluZ05v
ZGVJRCk7CiAKQEAgLTYyLDEwICs1Niw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGUgeyB9
CiAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBSZXRhaW5QdHI8
Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRhaW5QdHI8V0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M+IG1fc2Nyb2xs
aW5nTm9kZURlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IGM1ZWQ0MTIyNDNlLi44YjhiN2JmYTRhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uy5tbQpAQCAtMjksMTA4ICsyOSwxMSBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQogCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNp
bXBvcnQgPFVJS2l0L1VJUGFuR2VzdHVyZVJlY29nbml6ZXIuaD4KLSNpbXBvcnQgPFVJS2l0L1VJ
U2Nyb2xsVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+Ci0jaW1wb3J0
IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZv
Lmg+Ci0jZW5kaWYKLQogI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUy5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPiB7
Ci0gICAgV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKiBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTsKLX0KLQotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRl
cj1faXNJblVzZXJJbnRlcmFjdGlvbikgQk9PTCBpblVzZXJJbnRlcmFjdGlvbjsKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTooV2ViS2l0OjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKilkZWxlZ2F0ZTsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlCi17Ci0gICAgaWYgKChzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRT
Y3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQs
IF9pblVzZXJJbnRlcmFjdGlvbik7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRy
YWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgX2luVXNlckludGVyYWN0
aW9uID0gWUVTOwotCi0gICAgaWYgKHNjcm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXIuc3Rh
dGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pCi0gICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOwotICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxXaWxsU3RhcnQoKTsKLX0KLQotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCi0tICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5
IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0
Ci17Ci0gICAgQ0dGbG9hdCBob3Jpem9udGFsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+
eDsKLSAgICBDR0Zsb2F0IHZlcnRpY2FsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+eTsK
LQotICAgIHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCgpOwotICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24g
PSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCk7Ci0KLSAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCksIGhv
cml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGluZGV4KTsKLSAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBo
b3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCi0gICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAg
IH0KLQotICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
ZGV4OwotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9m
ZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5Lnks
IGluZGV4KTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7Ci0gICAgICAgIGlm
ICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29u
dGVudFNpemUuaGVpZ2h0KQotICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAob3JpZ2luYWxIb3Jpem9udGFs
U25hcFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpCi0gICAgICAgIHx8IG9yaWdpbmFs
VmVydGljYWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKSB7Ci0gICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5n
ZShfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKLSAgICB9Ci19Ci0j
ZW5kaWYKLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERlY2VsZXJhdGUKLXsKLSAgICBp
ZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0ZSkgewotICAgICAgICBfaW5V
c2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50
ZXJhY3Rpb24pOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlk
RW5kKCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBpZiAoX2luVXNlckludGVyYWN0aW9u
KSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAgICBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRP
ZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAKLUBlbmQKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTQ3LDEyMSArNTAsMzYgQEAg
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6U2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUyhXZWIKIAogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKQogewotICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Ci0gICAg
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKLSAgICAgICAgLy8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFu
b3RoZXIgbm9kZSwgc28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgotICAg
ICAgICBpZiAoc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQo
KSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Ci0gICAgfQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogewotICAgIGlmIChzdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBpZiAoVUlT
Y3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRl
bGVnYXRlXSkgewotICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6
W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9
IG5pbDsKLSAgICAgICAgfQotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
fQorICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0
ZS0+cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKTsKIAogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2RlKTsKLQot
ICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0
YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5
ZXIpKQotICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmxheWVyKCk7
Ci0KLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgIG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVkQ29udGVu
dHNMYXllcigpOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5jb21taXRTdGF0ZUJlZm9y
ZUNoaWxkcmVuKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2Rl
KSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29t
bWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2Rl
KQogewogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRl
QWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRp
bmdDaGFuZ2UobV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPm1fdXBkYXRpbmdGcm9tU3RhdGVOb2Rl
LCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotCi0gICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29u
dGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKQot
ICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHx8IHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9s
bExheWVyKCkgZGVsZWdhdGVdOwotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZD
bGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxMYXllcikpIHsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUpCi0gICAg
ICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVyZmxvd1Nj
cm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
Om1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZp
ZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0g
bV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJl
Y29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKSkgewotICAgICAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGluZ1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1Np
emUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxl
Z2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0pIHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29u
dGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xs
T3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUluc2V0cykgewotICAgICAgICAgICAgVUlFZGdlSW5z
ZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAv
LyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9wIHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwg
d2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUgbGVmdCBvciB0b3AuCi0gICAgICAgICAgICBpZiAo
c2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAgICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVhY2hh
YmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAtIHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsK
LQotICAgICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLnkoKSkKLSAgICAgICAgICAgICAgICBp
bnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNl
dCA9IGluc2V0czsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAg
ICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0
aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQg
d2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8
IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcu
ZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0
aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZh
c3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOwotI2VuZGlmCi0gICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9CisgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3Qg
U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9z
aXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKIHsKLSAgICBpZiAo
IW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0
YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKLQot
ICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0
ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0
LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxEZWx0YSk7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVk
UG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEpOwogfQogCiBGbG9hdFBvaW50IFNjcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgIEFT
U0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAg
ICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Nyb2xsUG9z
aXRpb24oKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
OjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBjb25zdCBGbG9hdFJlY3QmKQogewotICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNH
UG9pbnRNYWtlKC1zY3JvbGxQb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3Jv
bGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpXTsKLQotICAgIG1fc2Nyb2xsaW5n
Tm9kZURlbGVnYXRlLT51cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24p
OworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5zZXRTY3JvbGxMYXllclBvc2l0aW9uKHNj
cm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKQEAgLTI2OSw3ICs4Nyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwo
Y29uCiAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNj
cm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNl
bmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5oCmluZGV4IGQ4NDg5NDE2OGFhLi43ODEyNGU4MmE4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgK
QEAgLTI3LDcgKzI3LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCiAKKyNpbmNsdWRlIDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oPgorCitP
QkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdE
ZWxlZ2F0ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGU7CkBAIC0zNSwxMiArNDEsOSBAQCBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1M7Ci0KIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MgewotICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOwotCiBwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOwog
ICAgIH5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCk7CiAKICAgICBXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJu
IG1fc2Nyb2xsaW5nTm9kZTsgfQpAQCAtNDksMTUgKzUyLDM0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9pZCBzY3JvbGxW
aWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBi
b29sIGluVXNlckludGVyYWN0aW9uKSBjb25zdDsKICAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJ
bmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBj
b25zdDsKKyAgICBDQUxheWVyICpzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
TGF5ZXIuZ2V0KCk7IH0KIAotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Jik7CisgICAgdm9pZCByZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOworICAgIHZvaWQgY29tbWl0
U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSk7CisgICAgdm9pZCBjb21taXRTdGF0ZUFmdGVyQ2hp
bGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxp
bmdTdGF0ZU5vZGUpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShj
b25zdCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgY3VtdWxhdGl2ZURlbHRhKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0
aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKICAgICB2b2lkIHVwZGF0ZUNoaWxkTm9k
ZXNBZnRlclNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7
CiAKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAg
UmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIFJldGFpblB0
cjxXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xsVmlld0RlbGVnYXRl
OwogICAgIFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBtX3Njcm9sbGluZ05v
ZGU7CiAgICAgYm9vbCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorQGludGVyZmFjZSBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdh
dGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0
aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhT
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlOworCitAZW5kCisKICNlbmRpZiAvLyBQTEFURk9STShJ
T1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXggNTg5NTNlY2Q4YTQuLjEzMTU4
ODNjM2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9z
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLm1tCkBAIC0yOCwxMiArMjgsOTkgQEAKIAogI2lmIFBMQVRGT1JNKElPUykgJiYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+CisjaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxV
SUtpdC9VSVNjcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVy
Zmxvd1Njcm9sbGluZ05vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+CisKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xsU25h
cE9mZnNldHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg+Cisj
ZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0BpbXBsZW1lbnRhdGlvbiBXS1Nj
cm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TKilkZWxlZ2F0ZQoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlID0gZGVsZWdhdGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9s
bFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJh
Y3Rpb24pOworfQorCistICh2b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlTY3Jv
bGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsKKwor
ICAgIGlmIChzY3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKQorICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0
ZS0+c2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKTsKKyAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsV2lsbFN0YXJ0KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50
T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVudE9mZnNldAoreworICAgIENHRmxv
YXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPng7CisgICAgQ0dGbG9h
dCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPnk7CisKKyAgICB1bnNpZ25l
ZCBvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsK
KyAgICB1bnNpZ25lZCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCgpOworCisgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNp
Z25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2Vz
dFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0
LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRl
eCk7CisgICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdl
dCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAo
IV9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFw
T2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAg
ZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCks
IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFw
T2Zmc2V0UmFuZ2VzKCksIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7CisgICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAodmVydGljYWxUYXJn
ZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdo
dCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9z
aXRpb247CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiAh
PSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKQorICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25hcFBv
c2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSkgeworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2lu
dEluZGV4KCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CisgICAgfQorfQorI2VuZGlmCisKKy0gKHZv
aWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdp
bGxEZWNlbGVyYXRlOihCT09MKXdpbGxEZWNlbGVyYXRlCit7CisgICAgaWYgKF9pblVzZXJJbnRl
cmFjdGlvbiAmJiAhd2lsbERlY2VsZXJhdGUpIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9u
ID0gTk87CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlk
U2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKKyAg
ICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAgIH0K
K30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3Cit7CisgICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBf
aW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2Vy
SW50ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
RGlkRW5kKCk7CisgICAgfQorfQorCitAZW5kCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdOb2Rl
KQpAQCAtNDQsNiArMTMxLDExMyBAQCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKFNjcgogCiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUygpCiB7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
aWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5
ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xh
c3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgICAgICAvLyBUaGUgc2Nyb2xsVmlldyBtYXkg
aGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNsZWFyIHRoZSBkZWxl
Z2F0ZSBpZiBpdCdzIG91cnMuCisgICAgICAgIGlmIChzY3JvbGxWaWV3LmRlbGVnYXRlID09IG1f
c2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0
ZSA9IG5pbDsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJlc2V0U2Nyb2xsVmlld0Rl
bGVnYXRlKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBpZiAoVUlT
Y3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRl
bGVnYXRlXSkgeworICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlT
Y3JvbGxWaWV3IHNlbGZdXSk7CisgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Cisg
ICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNv
bnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKQorewor
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLmxheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNM
YXllcikpCisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSkKK3sKKyAgICBTZXRG
b3JTY29wZTxib29sPiB1cGRhdGluZ0NoYW5nZShtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSwgdHJ1
ZSk7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKKyAgICAgICAgfHwgc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlRvdGFsQ29udGVudHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVu
dHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHx8
IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3
ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOworICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcg
aXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7CisKKyAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdh
dGUpCisgICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tT
Y3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGU6dGhpc10pOworCisgICAgICAgICAgICBzY3JvbGxWaWV3LnNjcm9sbHNU
b1RvcCA9IE5POworICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG1fc2Nyb2xsVmll
d0RlbGVnYXRlLmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZWNvbXB1dGVJbnNl
dHMgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpOworICAgICAgICBpZiAoc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkpIHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVu
dFNpemUgPSBzY3JvbGxpbmdTdGF0ZU5vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7CisgICAg
ICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCisgICAgICAgICAgICB8fCBzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsT3JpZ2luKSkKKyAgICAgICAgICAgICYmICFbbV9zY3JvbGxWaWV3RGVsZWdhdGUgX2lzSW5V
c2VySW50ZXJhY3Rpb25dKSB7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsaW5nTm9kZS5z
Y3JvbGxPcmlnaW4oKTsKKyAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocmVjb21wdXRlSW5zZXRzKSB7CisgICAgICAgICAgICBVSUVk
Z2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCAwLCAwLCAwKTsKKyAgICAgICAg
ICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Agc2Nyb2xsaW5nIChub24temVybyBvcmln
aW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBsZWZ0IG9yIHRvcC4KKyAgICAgICAgICAg
IGlmIChtX3Njcm9sbGluZ05vZGUuc2Nyb2xsT3JpZ2luKCkueCgpKQorICAgICAgICAgICAgICAg
IGluc2V0cy5sZWZ0ID0gbV9zY3JvbGxpbmdOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgLSBtX3Njcm9sbGluZ05vZGUudG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpOworCisg
ICAgICAgICAgICBpZiAobV9zY3JvbGxpbmdOb2RlLnNjcm9sbE9yaWdpbigpLnkoKSkKKyAgICAg
ICAgICAgICAgICBpbnNldHMudG9wID0gbV9zY3JvbGxpbmdOb2RlLnJlYWNoYWJsZUNvbnRlbnRz
U2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxpbmdOb2RlLnRvdGFsQ29udGVudHNTaXplKCkuaGVp
Z2h0KCk7CisKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOwor
ICAgICAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhN
RTogSWYgb25seSBvbmUgYXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlz
IHdpbGwgZGVjZWxlcmF0ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAg
ICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZl
cnRpY2FsU25hcE9mZnNldHMpKQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25S
YXRlID0gbV9zY3JvbGxpbmdOb2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCBt
X3Njcm9sbGluZ05vZGUudmVydGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmll
d0RlY2VsZXJhdGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1h
bDsKKyNlbmRpZgorICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfQorfQor
Cit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUxheWVy
c0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2Rl
LCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1
bXVsYXRpdmVEZWx0YSkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsaW5nTm9kZS5jaGlsZHJlbigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGlu
Z05vZGUubGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGluZ05vZGUuc2Ny
b2xsUG9zaXRpb24oKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9zY3JvbGxpbmdOb2Rl
LmNoaWxkcmVuKCkpCisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hh
bmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsgc2Ny
b2xsRGVsdGEpOworfQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKyAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3
ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOworICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tp
bmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcg
Y29udGVudE9mZnNldF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnNldFNjcm9sbExheWVyUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgW21fc2Nyb2xs
TGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2Uoc2Nyb2xsUG9zaXRpb24ueCgpICsgbV9zY3Jv
bGxpbmdOb2RlLnNjcm9sbE9yaWdpbigpLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpICsgbV9zY3Jv
bGxpbmdOb2RlLnNjcm9sbE9yaWdpbigpLnkoKSldOworICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRl
clNjcm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUzo6dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotLSAKMi4xMS4wIChBcHBsZSBHaXQtODEpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319856</attachid>
            <date>2017-09-04 09:48:31 -0700</date>
            <delta_ts>2017-09-05 03:25:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-Bug-174130-Move-more-code-from-ScrollingStateOverflo.patch</filename>
            <type>text/plain</type>
            <size>33975</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA5OGRmNDU1MTdiNTNhYTBmMDI5YmJhZjMxMzkzYmZlOTU1MmI4OWFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/RnI9QzM9QTlkPUMzPUE5cmljPTIwV2FuZz89
IDxmd2FuZ0BpZ2FsaWEuY29tPgpEYXRlOiBNb24sIDQgU2VwIDIwMTcgMTg6Mjg6MzkgKzAyMDAK
U3ViamVjdDogW1BBVENIIDMvNF0gQnVnIDE3NDEzMCAtIE1vdmUgbW9yZSBjb2RlIGZyb20KIFNj
cm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TIHRvIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGUKCi0tLQogLi4uL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGUuY3BwICAgICAgICAgfCAgMTUgKysKIC4uLi9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZS5oIHwgICAzICsKIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUzICsrKysrKwogLi4uL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggICAgfCAgMTAgLQogLi4uL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tICAgfCAyMDIgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAg
ICB8ICAzMiArKystCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MubW0gICB8IDE5NCArKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAzMDIg
aW5zZXJ0aW9ucygrKSwgMjA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZS5jcHAKaW5kZXggOWRhYWM3NzVkLi5kNDI0ZDNmOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwCkBAIC01MSw2ICs1MSwyMSBAQCBGbG9hdFBvaW50
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6Omxhc3RDb21taXR0ZWRTY3JvbGxQ
b3NpdGlvbigpIGNvbgogICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGUubGFzdENvbW1pdHRlZFNj
cm9sbFBvc2l0aW9uKCk7CiB9CiAKK2NvbnN0IEZsb2F0U2l6ZSYgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZTo6dG90YWxDb250ZW50c1NpemUoKQoreworICAgIHJldHVybiBtX3Nj
cm9sbGluZ05vZGUudG90YWxDb250ZW50c1NpemUoKTsKK30KKworY29uc3QgRmxvYXRTaXplJiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlOjpyZWFjaGFibGVDb250ZW50c1NpemUo
KQoreworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7
Cit9CisKK2NvbnN0IEludFBvaW50JiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
OjpzY3JvbGxPcmlnaW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGUuc2Ny
b2xsT3JpZ2luKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGUuaAppbmRleCAyNjM5ZDEwNTEuLmYxMDZhYzY3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaApAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSgp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQgbGFzdENvbW1pdHRlZFNjcm9s
bFBvc2l0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRmxvYXRTaXplJiB0
b3RhbENvbnRlbnRzU2l6ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0U2l6ZSYg
cmVhY2hhYmxlQ29udGVudHNTaXplKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgSW50UG9p
bnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlJiBtX3Njcm9sbGluZ05vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI4MTZjZGViMy4uZjRj
MTE0MzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA3LTA0ICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBNb3ZlIG1vcmUgY29kZSBmcm9tIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLmg6IFJlbW92ZSBzb21lIG1lbWJlcnMsCisgICAgICAgIGhl
YWRlcnMgYW5kIHByZS1kZWNsYXJhdGlvbiB0aGF0IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0
ZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uzo6c2Nyb2xsTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW06IFJlbW92
ZSBzb21lIGhlYWRlcnMgYW5kCisgICAgICAgIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUg
c2luY2UgdGhleSBhcmUgbW92ZWQgaW50byB0aGUgZGVsZWdhdGUgZmlsZS4gQWxzbyBmaXggdGhl
CisgICAgICAgIGNvbW1lbnQgdG8gY2xvc2luZyB0aGUgV2ViS2l0IG5hbWVzcGFjZS4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6flNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MpOgorICAgICAgICBSZW1vdmUgc29tZSBj
b2RlIG1vdmVkIGludG8gdGhlIGRlbGVnYXRlIGFuZCBjYWxsIHRoZSBjb3JyZXNwb25kaW5nIGhl
bHBlciBmdW5jdGlvbiB0bworICAgICAgICBwcmVzZXJ2ZSB0aGUgY3VycmVudCBiZWhhdmlvci4K
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6
Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6IERpdHRvLgorICAgICAgICBOb3RlIHRoYXQgaXQg
aXMgb25seSBuZWNlc3NhcnkgdG8gY2FzdCB0aGUgcGFyYW1ldGVyIHRvIGEgU2Nyb2xsaW5nU3Rh
dGVUcmVlTm9kZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVy
c0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2V0
U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xs
Vmlld0RlbGVnYXRlIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlk
U2Nyb2xsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVn
YXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndp
dGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzp3aWxs
RGVjZWxlcmF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdE
ZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MuaDogSW1wb3J0IGhlYWRlcnMgYW5kIG1lbWJlcnMKKyAgICAgICAgZnJv
bSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBEZWZpbmUgbmV3IGhlbHBl
ciBmdW5jdGlvbnMgZm9yIHRoZSBjb2RlIGltcG9ydGVkCisgICAgICAgIGZyb20gU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4gUmVtb3ZlIHRoZSBmcmllbmRzaGlwIHdpdGgK
KyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQgb25seSBt
YWtlcyBwdWJsaWMgdGhlIGZ1bmN0aW9uIHVzZWQgYnkgdGhhdCBjbGFzcy4KKyAgICAgICAgKFdl
YktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsTGF5ZXIp
OiBUaGlzIGZ1bmN0aW9uIGlzIG1vdmVkIGZyb20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOiBBZGQgaGVhZGVy
cywKKyAgICAgICAgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSAocmVuYW1lZCBXS1Njcm9s
bGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUpIGFuZCBzb21lIGhlbHBlciBjb2RlCisgICAgICAg
IGltcG9ydGVkIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAg
ICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRT
Y3JvbGw6XSk6IE1vdmVkIGZyb20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRl
IHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU2Ny
b2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndp
dGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tT
Y3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzp3
aWxsRGVjZWxlcmF0ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9s
bFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6flNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MpOgorICAgICAgICBJbXBvcnQgY29k
ZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisgICAgICAgIChX
ZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJlc2V0U2Nyb2xs
Vmlld0RlbGVnYXRlKTogTmV3IGhlbHBlciBmdW5jdGlvbgorICAgICAgICBpbXBvcnRpbmcgY29k
ZSBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisgICAgICAgIChX
ZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRl
QmVmb3JlQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6
OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsUG9zaXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorCiAyMDE3LTA5LTA0ICBG
csOpZMOpcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TIHRvIHNoYXJlIGNvZGUgYmV0d2Vl
biBvdmVyZmxvdyBhbmQgZnJhbWUgc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCmluZGV4IGY0ZGZlNDQz
ZS4uMzM5MmJjYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaApAQCAtMjcsMTIgKzI3LDggQEAKIAogI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNv
cmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19D
TEFTUyBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzsKQEAgLTQyLDgg
KzM4LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQpOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MoKTsKIAotICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxMYXllci5nZXQoKTsgfQotCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6
OlNjcm9sbGluZ05vZGVJRCk7CiAKQEAgLTYxLDEwICs1NSw2IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Jikg
b3ZlcnJpZGUgeyB9CiAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRh
aW5QdHI8V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1M+IG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDk2
MWU0YWUwNS4uNzUzNjY3ZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0yOSwxMDggKzI5LDExIEBA
CiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKLSNpbXBv
cnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0dXJl
UmVjb2duaXplci5oPgotI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KLSNlbmRpZgotCiAjaW1wb3J0ICJT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgiCiAKLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgOiBO
U09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOwot
fQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0aW9uKSBC
T09MIGluVXNlckludGVyYWN0aW9uOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MqKWRlbGVnYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS092ZXJmbG93
U2Nyb2xsVmlld0RlbGVnYXRlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUyopZGVsZWdhdGUKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldwotewotICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlk
U2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLX0K
LQotLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNj
cm9sbFZpZXcKLXsKLSAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBpZiAoc2Ny
b2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVCZWdhbikKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZp
ZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbFdpbGxTdGFydCgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLS0g
KHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5v
dXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhvcml6b250
YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVydGljYWxU
YXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3JpZ2luYWxI
b3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgdW5zaWdu
ZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLQot
ICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jp
em9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7
Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0
KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNu
YXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCku
aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHku
eCwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwotICAgICAg
ICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xs
Vmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQt
PnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVu
dGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdl
cygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYg
dmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCi0gICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAg
IH0KLQotICAgIGlmIChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KCkpIHsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpLCBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0tICh2b2lkKXNjcm9sbFZp
ZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0
ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYg
IXdpbGxEZWNlbGVyYXRlKSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3Jv
bGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19Ci0KLS0gKHZv
aWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dwotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgX2luVXNlckludGVy
YWN0aW9uID0gTk87Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxW
aWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9u
KTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOwot
ICAgIH0KLX0KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGlu
Z05vZGUuaD4KIAotQGVuZAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC0xNDcsMTIxICs1MCwzNiBAQCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYgog
CiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUygpCiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi0gICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilb
c2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlz
S2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAvLyBUaGUgc2Nyb2xs
VmlldyBtYXkgaGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNsZWFy
IHRoZSBkZWxlZ2F0ZSBpZiBpdCdzIG91cnMuCi0gICAgICAgIGlmIChzY3JvbGxWaWV3LmRlbGVn
YXRlID09IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQotICAgICAgICAgICAgc2Nyb2xsVmll
dy5kZWxlZ2F0ZSA9IG5pbDsKLSAgICB9Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
fQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0
YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0
ZU5vZGUpCiB7Ci0gICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCi0gICAgICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAo
VUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0g
ICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOwotICAgICAgICB9Ci0gICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9CisgICAgaWYgKHN0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikp
CisgICAgICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5yZXNldFNjcm9sbFZpZXdEZWxlZ2F0
ZSgpOwogCiAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3Rh
dGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgY29uc3QgYXV0byYgc2Nyb2xsaW5n
U3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+
KHN0YXRlTm9kZSk7Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCi0gICAgICAgIG1fc2Nyb2xsTGF5
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKLQotICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsZWRDb250ZW50c0xheWVyKSkKLSAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisgICAgbV9zY3JvbGxp
bmdOb2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oZG93bmNhc3Q8U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29u
c3QgU2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCiB7CiAgICAgU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKHN0YXRlTm9kZSk7
Ci0KLSAgICBTZXRGb3JTY29wZTxib29sPiB1cGRhdGluZ0NoYW5nZShtX3Njcm9sbGluZ05vZGVE
ZWxlZ2F0ZS0+bV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUsIHRydWUpOwotCi0gICAgY29uc3QgYXV0
byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Ci0KLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVy
KQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpCi0gICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxQb3NpdGlvbikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpIHsKLSAgICAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgIFVJU2Nyb2xsVmlldyAqc2Ny
b2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07Ci0gICAg
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKLQotICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkgewotICAgICAgICAgICAg
aWYgKCFtX3Njcm9sbFZpZXdEZWxlZ2F0ZSkKLSAgICAgICAgICAgICAgICBtX3Njcm9sbFZpZXdE
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6bV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUu
Z2V0KCldKTsKLQotICAgICAgICAgICAgc2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKLSAg
ICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlRvdGFsQ29udGVudHNTaXplKTsKLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250
ZW50c1NpemUpKSB7Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xs
aW5nU3RhdGVOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOwotICAgICAgICAgICAgcmVjb21w
dXRlSW5zZXRzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbFBvc2l0aW9uKQotICAgICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCi0g
ICAgICAgICAgICAmJiAhW21fc2Nyb2xsVmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9u
XSkgewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxPcmlnaW4oKTsKLSAgICAgICAgICAgIHJl
Y29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjb21wdXRl
SW5zZXRzKSB7Ci0gICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRz
TWFrZSgwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10
b3Agc2Nyb2xsaW5nIChub24temVybyBvcmlnaW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRo
ZSBsZWZ0IG9yIHRvcC4KLSAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS54KCkpCi0gICAg
ICAgICAgICAgICAgaW5zZXRzLmxlZnQgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgp
IC0gdG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpOwotCi0gICAgICAgICAgICBpZiAoc2Nyb2xs
T3JpZ2luKCkueSgpKQotICAgICAgICAgICAgICAgIGluc2V0cy50b3AgPSByZWFjaGFibGVDb250
ZW50c1NpemUoKS5oZWlnaHQoKSAtIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7Ci0KLSAg
ICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOwotICAgICAgICB9Ci0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgICAgICAvLyBGSVhNRTogSWYgb25seSBv
bmUgYXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxl
cmF0ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PwotICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9m
ZnNldHMpKQotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gaG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXplKCkg
PyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJh
dGlvblJhdGVOb3JtYWw7Ci0jZW5kaWYKLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwotICAgIH0KKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+Y29tbWl0U3RhdGVBZnRlckNo
aWxkcmVuKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKSk7
CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdl
ZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6
ZSYgY3VtdWxhdGl2ZURlbHRhKQogewotICAgIGlmICghbV9jaGlsZHJlbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1pdHRlZFNjcm9sbFBv
c2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwotCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6ICpt
X2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5n
ZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGN1bXVsYXRpdmVEZWx0YSArIHNjcm9s
bERlbHRhKTsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+dXBkYXRlTGF5ZXJzQWZ0ZXJB
bmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGN1bXVsYXRpdmVE
ZWx0YSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilb
c2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07Ci0gICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9m
Q2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgIHJldHVybiBbc2Nyb2xsVmlldyBjb250
ZW50T2Zmc2V0XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgcmV0dXJuIG1f
c2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiB2b2lkIFNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNldFNjcm9sbExheWVyUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYpCiB7Ci0g
ICAgW21fc2Nyb2xsTGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoLXNjcm9sbFBvc2l0aW9u
LngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSArIHNjcm9sbE9y
aWdpbigpLnkoKSldOwotCi0gICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUNoaWxk
Tm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7CisgICAgbV9zY3JvbGxpbmdOb2RlRGVs
ZWdhdGUtPnNldFNjcm9sbExheWVyUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogfQogCiB2b2lk
IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVy
RGVsZWdhdGVkU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpAQCAtMjY5
LDcgKzg3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1
cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb24KICAgICBtX3Njcm9sbGluZ05vZGVE
ZWxlZ2F0ZS0+dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNjcm9sbFBvc2l0aW9uKTsKIH0K
IAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLmgKaW5kZXggYWZmNTM2NWVjLi4yMTU5ZTBjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCkBAIC0y
NywyMCArMjcsMjIgQEAKIAogI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKIAorI2luY2x1ZGUgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmg+CiAKK09CSkNf
Q0xBU1MgQ0FMYXllcjsKK09CSkNfQ0xBU1MgV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVn
YXRlOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1M7Ci0KIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MgOiBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZSB7Ci0gICAgZnJpZW5kIGNsYXNzIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M7Ci0KIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJik7CiAg
ICAgflNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoKSBmaW5hbDsKQEAgLTUw
LDEzICs1MiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2Vz
dHVyZSgpIGNvbnN0OwogICAgIHZvaWQgc2Nyb2xsVmlld0RpZFNjcm9sbChjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBpblVzZXJJbnRlcmFjdGlvbikgY29u
c3Q7CiAgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25lZCBo
b3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkgY29uc3Q7CisgICAgQ0FMYXllciAqc2Nyb2xs
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVyLmdldCgpOyB9CiAKLXByaXZhdGU6
CisgICAgdm9pZCByZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOworICAgIHZvaWQgY29tbWl0U3Rh
dGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSk7CisgICAgdm9pZCBjb21taXRTdGF0ZUFmdGVyQ2hpbGRy
ZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdT
dGF0ZU5vZGUpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25z
dCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
Y3VtdWxhdGl2ZURlbHRhKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKICAgICB2b2lkIHVwZGF0ZUNoaWxkTm9kZXNB
ZnRlclNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAK
K3ByaXZhdGU6CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgUmV0
YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIFJldGFpblB0cjxX
S1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xsVmlld0RlbGVnYXRlOwog
ICAgIGJvb2wgbV91cGRhdGluZ0Zyb21TdGF0ZU5vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAorQGludGVyZmFjZSBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgOiBO
U09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOwor
fQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0aW9uKSBC
T09MIGluVXNlckludGVyYWN0aW9uOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MqKWRlbGVnYXRlOworCitAZW5kCisKICNlbmRpZiAvLyBQTEFURk9STShJT1MpICYm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXggOGJiYmFiZTQ3Li4w
NDE4NDMxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KQEAgLTI4LDEyICsyOCw5OSBAQAogCiAjaWYgUExB
VEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCisjaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJUGFuR2VzdHVyZVJlY29nbml6ZXIu
aD4KKyNpbXBvcnQgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxpbmdUcmVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4K
KyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvU2V0Rm9y
U2NvcGUuaD4KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW1wb3J0IDxXZWJDb3Jl
L0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorQGltcGxl
bWVudGF0aW9uIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlCit7CisgICAgaWYgKChzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRT
Y3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQs
IF9pblVzZXJJbnRlcmFjdGlvbik7Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRy
YWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgX2luVXNlckludGVyYWN0
aW9uID0gWUVTOworCisgICAgaWYgKHNjcm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXIuc3Rh
dGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pCisgICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOworICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxXaWxsU3RhcnQoKTsKK30KKworI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCistICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5
IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0
Cit7CisgICAgQ0dGbG9hdCBob3Jpem9udGFsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+
eDsKKyAgICBDR0Zsb2F0IHZlcnRpY2FsVGFyZ2V0ID0gdGFyZ2V0Q29udGVudE9mZnNldC0+eTsK
KworICAgIHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCgpOworICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24g
PSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCk7CisKKyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCksIGhv
cml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGluZGV4KTsKKyAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBo
b3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCisgICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAg
IH0KKworICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9m
ZnNldChfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwgdmVydGljYWxUYXJnZXQsIHZlbG9jaXR5Lnks
IGluZGV4KTsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7CisgICAgICAgIGlm
ICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29u
dGVudFNpemUuaGVpZ2h0KQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAob3JpZ2luYWxIb3Jpem9udGFs
U25hcFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpCisgICAgICAgIHx8IG9yaWdpbmFs
VmVydGljYWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKSB7CisgICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5jdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5n
ZShfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKKyAgICB9Cit9Cisj
ZW5kaWYKKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERlY2VsZXJhdGUKK3sKKyAgICBp
ZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0ZSkgeworICAgICAgICBfaW5V
c2VySW50ZXJhY3Rpb24gPSBOTzsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50
ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlk
RW5kKCk7CisgICAgfQorfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoX2luVXNlckludGVyYWN0aW9u
KSB7CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRP
ZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKKyAgICB9Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUm
IHNjcm9sbGluZ05vZGUpCkBAIC00NCw2ICsxMzEsMTEzIEBAIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1M6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1Mo
U2NyCiAKIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6On5TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCkKIHsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICBpZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmll
dyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXSkgeworICAgICAgICBBU1NFUlQoW3Njcm9sbFZp
ZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7CisgICAgICAgIC8vIFRoZSBz
Y3JvbGxWaWV3IG1heSBoYXZlIGJlZW4gYWRvcHRlZCBieSBhbm90aGVyIG5vZGUsIHNvIG9ubHkg
Y2xlYXIgdGhlIGRlbGVnYXRlIGlmIGl0J3Mgb3Vycy4KKyAgICAgICAgaWYgKHNjcm9sbFZpZXcu
ZGVsZWdhdGUgPT0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCkpCisgICAgICAgICAgICBzY3Jv
bGxWaWV3LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6cmVz
ZXRTY3JvbGxWaWV3RGVsZWdhdGUoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Nj
cm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tp
bmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICAgICAgc2Nyb2xsVmlldy5kZWxl
Z2F0ZSA9IG5pbDsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRlQmVm
b3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdT
dGF0ZU5vZGUpCit7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xsTGF5
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2Rl
KQoreworICAgIFNldEZvclNjb3BlPGJvb2w+IHVwZGF0aW5nQ2hhbmdlKG1fdXBkYXRpbmdGcm9t
U3RhdGVOb2RlLCB0cnVlKTsKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKQorICAgICAg
ICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpS
ZWFjaGFibGVDb250ZW50c1NpemUpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlv
bikKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpIHsKKyAgICAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9
IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgICAgIEFTU0VS
VChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKworICAg
ICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkgeworICAgICAgICAgICAgaWYgKCFtX3Nj
cm9sbFZpZXdEZWxlZ2F0ZSkKKyAgICAgICAgICAgICAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTp0aGlzXSk7CisKKyAgICAgICAgICAgIHNjcm9s
bFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87CisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRl
ID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHJlY29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSk7CisgICAgICAg
IGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKSkgeworICAgICAgICAgICAgc2Ny
b2xsVmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGluZ1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50
c1NpemUoKTsKKyAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgICAgIHx8
IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQorICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdE
ZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0pIHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcu
Y29udGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Ny
b2xsT3JpZ2luKCk7CisgICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHJlY29tcHV0ZUluc2V0cykgeworICAgICAgICAgICAgVUlFZGdl
SW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgMCwgMCwgMCk7CisgICAgICAgICAg
ICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9wIHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2lu
KSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUgbGVmdCBvciB0b3AuCisgICAgICAgICAgICBp
ZiAoc2Nyb2xsT3JpZ2luKCkueCgpKQorICAgICAgICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVh
Y2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAtIHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgo
KTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLnkoKSkKKyAgICAgICAgICAgICAg
ICBpbnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENv
bnRlbnRzU2l6ZSgpLmhlaWdodCgpOworCisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJ
bnNldCA9IGluc2V0czsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
KyAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5n
LCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdo
YXQgd2Ugd2FudD8KKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMp
IHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgICAgIHNjcm9sbFZp
ZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IHNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNl
dHMoKS5zaXplKCkgfHwgc2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXpl
KCkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2Vs
ZXJhdGlvblJhdGVOb3JtYWw7CisjZW5kaWYKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVO
b2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29u
c3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit7CisgICAgaWYgKCFzY3JvbGxpbmdOb2Rl
KCkuY2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRTaXplIHNjcm9sbERl
bHRhID0gbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxpbmdOb2RlKCkuc2Ny
b2xsUG9zaXRpb24oKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiAqc2Nyb2xsaW5nTm9kZSgp
LmNoaWxkcmVuKCkpCisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hh
bmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsgc2Ny
b2xsRGVsdGEpOworfQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKyAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3
ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOworICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tp
bmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcg
Y29udGVudE9mZnNldF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnNldFNjcm9sbExheWVyUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgW21fc2Nyb2xs
TGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2Uoc2Nyb2xsUG9zaXRpb24ueCgpICsgc2Nyb2xs
T3JpZ2luKCkueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpXTsK
KyAgICB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24pOwogfQogCiB2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUNoaWxkTm9k
ZXNBZnRlclNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLS0gCjIuMTQu
MQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319891</attachid>
            <date>2017-09-05 03:25:37 -0700</date>
            <delta_ts>2017-09-06 05:49:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-Bug-174130-Move-more-code-from-ScrollingStateOverflo.patch</filename>
            <type>text/plain</type>
            <size>34363</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA5YjI0NzIyNDJkMDA5Y2IxMTYzMGFhYjllOTQ2Y2RhZjhlMzc2M2Y2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/RnI9QzM9QTlkPUMzPUE5cmljPTIwV2FuZz89
IDxmd2FuZ0BpZ2FsaWEuY29tPgpEYXRlOiBNb24sIDQgU2VwIDIwMTcgMTg6Mjg6MzkgKzAyMDAK
U3ViamVjdDogW1BBVENIIDMvNF0gQnVnIDE3NDEzMCAtIE1vdmUgbW9yZSBjb2RlIGZyb20KIFNj
cm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TIHRvIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGUKCi0tLQogLi4uL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGUuY3BwICAgICAgICAgfCAgMTUgKysKIC4uLi9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZS5oIHwgICA1ICsKIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUzICsrKysrKwogLi4uL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggICAgfCAgMTAgLQogLi4uL2lvcy9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tICAgfCAyMDYgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAg
ICB8ICAzNCArKystCiAuLi4vaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MubW0gICB8IDE5NCArKysrKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDMwNiBp
bnNlcnRpb25zKCspLCAyMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlLmNwcAppbmRleCA5ZGFhYzc3NWQuLmQ0MjRkM2Y5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKQEAgLTUxLDYgKzUxLDIxIEBAIEZsb2F0UG9pbnQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6bGFzdENvbW1pdHRlZFNjcm9sbFBv
c2l0aW9uKCkgY29uCiAgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5sYXN0Q29tbWl0dGVkU2Ny
b2xsUG9zaXRpb24oKTsKIH0KIAorY29uc3QgRmxvYXRTaXplJiBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlOjp0b3RhbENvbnRlbnRzU2l6ZSgpCit7CisgICAgcmV0dXJuIG1fc2Ny
b2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpOworfQorCitjb25zdCBGbG9hdFNpemUmIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6OnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgp
Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKTsK
K30KKworY29uc3QgSW50UG9pbnQmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6
OnNjcm9sbE9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5zY3Jv
bGxPcmlnaW4oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZS5oCmluZGV4IGU4OGQ3YzdjMy4uYmVhYTUyNzUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oCkBAIC0zMCw2ICszMCw4IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBJbnRQ
b2ludDsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5n
VHJlZTsKIApAQCAtNDMsNiArNDUsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09S
RV9FWFBPUlQgU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0UG9pbnQgbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRmxvYXRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0U2l6ZSYgcmVhY2hhYmxlQ29udGVudHNT
aXplKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBtX3Nj
cm9sbGluZ05vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE3YjNmY2RmOC4uZWVmYjNhNWZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU2IEBACisyMDE3LTA3LTA0ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlh
LmNvbT4KKworICAgICAgICBNb3ZlIG1vcmUgY29kZSBmcm9tIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MTMwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLmg6IFJlbW92ZSBzb21lIG1lbWJlcnMsCisgICAgICAgIGhlYWRlcnMgYW5kIHByZS1kZWNs
YXJhdGlvbiB0aGF0IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0ZS4KKyAgICAgICAgKFdlYktp
dDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsTGF5ZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW06IFJlbW92ZSBzb21lIGhlYWRlcnMgYW5k
CisgICAgICAgIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2luY2UgdGhleSBhcmUgbW92
ZWQgaW50byB0aGUgZGVsZWdhdGUgZmlsZS4gQWxzbyBmaXggdGhlCisgICAgICAgIGNvbW1lbnQg
dG8gY2xvc2luZyB0aGUgV2ViS2l0IG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1MpOgorICAgICAgICBSZW1vdmUgc29tZSBjb2RlIG1vdmVkIGludG8gdGhl
IGRlbGVnYXRlIGFuZCBjYWxsIHRoZSBjb3JyZXNwb25kaW5nIGhlbHBlciBmdW5jdGlvbiB0bwor
ICAgICAgICBwcmVzZXJ2ZSB0aGUgY3VycmVudCBiZWhhdmlvci4KKyAgICAgICAgKFdlYktpdDo6
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVD
aGlsZHJlbik6IERpdHRvLgorICAgICAgICBOb3RlIHRoYXQgaXQgaXMgb25seSBuZWNlc3Nhcnkg
dG8gY2FzdCB0aGUgcGFyYW1ldGVyIHRvIGEgU2Nyb2xsaW5nU3RhdGVUcmVlTm9kZS4KKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0
U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6c2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlv
bik6IERpdHRvLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIGluaXRX
aXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tP
dmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxs
QmVnaW5EcmFnZ2luZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZp
ZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRD
b250ZW50T2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmll
d0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3
RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaDog
SW1wb3J0IGhlYWRlcnMgYW5kIG1lbWJlcnMKKyAgICAgICAgZnJvbSBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBEZWZpbmUgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIHRo
ZSBjb2RlIGltcG9ydGVkCisgICAgICAgIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUy4gUmVtb3ZlIHRoZSBmcmllbmRzaGlwIHdpdGgKKyAgICAgICAgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQgb25seSBtYWtlcyBwdWJsaWMgdGhlIGZ1
bmN0aW9uIHVzZWQgYnkgdGhhdCBjbGFzcy4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsTGF5ZXIpOiBUaGlzIGZ1bmN0aW9uIGlz
IG1vdmVkIGZyb20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uy4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOiBBZGQgaGVhZGVycywKKyAgICAgICAgV0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSAocmVuYW1lZCBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3
RGVsZWdhdGUpIGFuZCBzb21lIGhlbHBlciBjb2RlCisgICAgICAgIGltcG9ydGVkIGZyb20gU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgKC1bV0tTY3JvbGxp
bmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRTY3JvbGw6XSk6IE1vdmVkIGZy
b20KKyAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAg
ICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVn
aW5EcmFnZ2luZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZp
ZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRD
b250ZW50T2Zmc2V0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xs
Vmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzp3aWxsRGVjZWxlcmF0ZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3Jv
bGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6flNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MpOgorICAgICAgICBJbXBvcnQgY29kZSBmcm9tIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKTogTmV3
IGhlbHBlciBmdW5jdGlvbgorICAgICAgICBpbXBvcnRpbmcgY29kZSBmcm9tIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuCisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVy
QW5jZXN0b3JDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2V0U2Nyb2xs
TGF5ZXJQb3NpdGlvbik6IERpdHRvLgorCiAyMDE3LTA5LTA0ICBGcsOpZMOpcmljIFdhbmcgIDxm
d2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBvdmVyZmxvdyBhbmQgZnJh
bWUgc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCmluZGV4IGY0ZGZlNDQzZS4uMzM5MmJjYTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MuaApAQCAtMjcsMTIgKzI3LDggQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGUuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092ZXJmbG93U2Ny
b2xsVmlld0RlbGVnYXRlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzsKQEAgLTQyLDggKzM4LDYgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUz4gY3Jl
YXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwog
ICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKTsKIAot
ICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllci5n
ZXQoKTsgfQotCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCk7
CiAKQEAgLTYxLDEwICs1NSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGUgeyB9CiAKLSAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRhaW5QdHI8V0tPdmVyZmxvd1Nj
cm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M+IG1fc2Nyb2xsaW5nTm9k
ZURlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDFlOWFhZWVjNC4uNzUzNjY3ZmYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0yOSwxMDggKzI5LDExIEBACiAjaWYgUExBVEZPUk0oSU9T
KQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0dXJlUmVjb2duaXplci5oPgotI2lt
cG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0
YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1Ry
ZWUuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
U2V0Rm9yU2NvcGUuaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxX
ZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uaD4KLSNlbmRpZgotCiAjaW1wb3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50
ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgOiBOU09iamVjdCA8VUlTY3JvbGxW
aWV3RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOwotfQotCi1AcHJvcGVydHkgKG5v
bmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0aW9uKSBCT09MIGluVXNlckludGVyYWN0
aW9uOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
OihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRl
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRl
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdl
YktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyopZGVsZWdhdGUKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
c2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcu
Y29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLX0KLQotLSAodm9pZClzY3JvbGxW
aWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBf
aW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBpZiAoc2Nyb2xsVmlldy5wYW5HZXN0dXJl
UmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikKLSAgICAg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0
dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFdpbGxTdGFydCgp
OwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLS0gKHZvaWQpc2Nyb2xsVmlld1dp
bGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENH
UG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2ludCAqKXRhcmdl
dENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRD
b250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250
ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0
aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNh
bFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLQotICAgIGlmICghX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBv
dGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwotICAgICAg
ICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRI
b3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFRh
cmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53
aWR0aCkKLSAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFw
UG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+
c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9
IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdO
b2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+
c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2ZXJ0aWNhbFRhcmdl
dCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0
ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4
KTsKLSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0g
c2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCi0gICAgICAgICAgICB0YXJnZXRDb250ZW50
T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChvcmln
aW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkKLSAgICAg
ICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkp
IHsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPmN1cnJlbnRTbmFwUG9pbnRJ
bmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkp
OwotICAgIH0KLX0KLSNlbmRpZgotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxl
cmF0ZQotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7
Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVu
ZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIGlmIChfaW5V
c2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87Ci0gICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9s
bFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOwotICAgIH0KLX0KKyNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KIAotQGVuZAor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0xNDcs
MTI1ICs1MCwzNiBAQCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYgogCiBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUygpCiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgaWYgKFVJU2Ny
b2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxl
Z2F0ZV0pIHsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Ny
b2xsVmlldyBzZWxmXV0pOwotICAgICAgICAvLyBUaGUgc2Nyb2xsVmlldyBtYXkgaGF2ZSBiZWVu
IGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNsZWFyIHRoZSBkZWxlZ2F0ZSBpZiBp
dCdzIG91cnMuCi0gICAgICAgIGlmIChzY3JvbGxWaWV3LmRlbGVnYXRlID09IG1fc2Nyb2xsVmll
d0RlbGVnYXRlLmdldCgpKQotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsK
LSAgICB9Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotCi0gICAgLy8gV0tPdmVyZmxv
d1Njcm9sbFZpZXdEZWxlZ2F0ZSBob2xkcyBhIHBvaW50ZXIgdG8gU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUywgc28gd2UgZW5zdXJlIGl0IGlzIGRlc3Ryb3llZCBmaXJzdC4K
LSAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5jbGVhcigpOwotICAgIG1fc2Nyb2xsaW5nTm9kZURl
bGVnYXRlLnJlc2V0KCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKLSAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkgewotICAg
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgaWYgKFVJU2Nyb2xsVmll
dyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0p
IHsKLSAgICAgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9s
bFZpZXcgc2VsZl1dKTsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0KKyAgICBp
ZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnJlc2V0
U2Nyb2xsVmlld0RlbGVnYXRlKCk7CiAKICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7Ci0KLSAgICBjb25z
dCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKLSAg
ICAgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpOwotCi0gICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICBtX3Njcm9sbGVk
Q29udGVudHNMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIo
KTsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwogfQog
CiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0YXRl
QWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKICAg
ICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUFmdGVyQ2hp
bGRyZW4oc3RhdGVOb2RlKTsKLQotICAgIFNldEZvclNjb3BlPGJvb2w+IHVwZGF0aW5nQ2hhbmdl
KG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5tX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSwgdHJ1ZSk7
Ci0KLSAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxp
bmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKLQotICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsTGF5ZXIpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6
ZSkKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKLSAgICAgICAg
fHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
T3JpZ2luKSkgewotICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAg
VUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigp
IGRlbGVnYXRlXTsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJ
U2Nyb2xsVmlldyBzZWxmXV0pOwotCi0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsVmlld0RlbGVnYXRlKQotICAgICAgICAgICAg
ICAgIG1fc2Nyb2xsVmlld0RlbGVnYXRlID0gYWRvcHROUyhbW1dLT3ZlcmZsb3dTY3JvbGxWaWV3
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTptX3Njcm9s
bGluZ05vZGVEZWxlZ2F0ZS5nZXQoKV0pOwotCi0gICAgICAgICAgICBzY3JvbGxWaWV3LnNjcm9s
bHNUb1RvcCA9IE5POwotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG1fc2Nyb2xs
Vmlld0RlbGVnYXRlLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZWNvbXB1dGVJ
bnNldHMgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpOwotICAgICAgICBpZiAoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkpIHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29u
dGVudFNpemUgPSBzY3JvbGxpbmdTdGF0ZU5vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7Ci0g
ICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgICAgICB8fCBzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsT3JpZ2luKSkKLSAgICAgICAgICAgICYmICFbbV9zY3JvbGxWaWV3RGVsZWdhdGUgX2lz
SW5Vc2VySW50ZXJhY3Rpb25dKSB7Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbE9yaWdpbigp
OwotICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChyZWNvbXB1dGVJbnNldHMpIHsKLSAgICAgICAgICAgIFVJRWRnZUluc2V0cyBpbnNl
dHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIDAsIDAsIDApOwotICAgICAgICAgICAgLy8gV2l0aCBS
VEwgb3IgYm90dG9tLXRvLXRvcCBzY3JvbGxpbmcgKG5vbi16ZXJvIG9yaWdpbiksIHdlIG5lZWQg
ZXh0cmEgc3BhY2Ugb24gdGhlIGxlZnQgb3IgdG9wLgotICAgICAgICAgICAgaWYgKHNjcm9sbE9y
aWdpbigpLngoKSkKLSAgICAgICAgICAgICAgICBpbnNldHMubGVmdCA9IHJlYWNoYWJsZUNvbnRl
bnRzU2l6ZSgpLndpZHRoKCkgLSB0b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS55KCkpCi0gICAgICAgICAgICAgICAgaW5zZXRzLnRv
cCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gdG90YWxDb250ZW50c1NpemUo
KS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNl
dHM7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgICAgIC8v
IEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNuYXBzIGluIDJEIHNjcm9sbGluZywgdGhlIG90aGVy
IGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3QgYXMgd2VsbC4gSXMgdGhpcyB3aGF0IHdlIHdhbnQ/
Ci0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCi0gICAgICAgICAgICBzY3JvbGxWaWV3LmRlY2VsZXJh
dGlvblJhdGUgPSBob3Jpem9udGFsU25hcE9mZnNldHMoKS5zaXplKCkgfHwgdmVydGljYWxTbmFw
T2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0IDogVUlT
Y3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKLSNlbmRpZgotICAgICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCi0gICAgfQorICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5j
b21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlPihzdGF0ZU5vZGUpKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGlu
Z1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7Ci0gICAgaWYgKCFtX2NoaWxk
cmVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0
Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNB
ZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxh
dGl2ZURlbHRhICsgc2Nyb2xsRGVsdGEpOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51
cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9u
UmVjdCwgY3VtdWxhdGl2ZURlbHRhKTsKIH0KIAogRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0g
KFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKLSAgICBBU1NFUlQoW3Nj
cm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgcmV0dXJu
IFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnNjcm9sbFBvc2l0aW9uKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2V0U2Ny
b2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JikKIHsKLSAgICBbbV9zY3JvbGxMYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFr
ZSgtc2Nyb2xsUG9zaXRpb24ueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpLCAtc2Nyb2xsUG9zaXRp
b24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKV07Ci0KLSAgICBtX3Njcm9sbGluZ05vZGVEZWxl
Z2F0ZS0+dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNjcm9sbFBvc2l0aW9uKTsKKyAgICBt
X3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6
dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xs
UG9zaXRpb24pCkBAIC0yNzMsNyArODcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbgogICAg
IG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Ny
b2xsUG9zaXRpb24pOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaAppbmRleCAwMmE5OTNjM2YuLmQ1ZGQ3ZDk4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLmgKQEAgLTI3LDIyICsyNywyNiBAQAogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCisjaW5jbHVkZSA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaD4KIAorT0JKQ19DTEFTUyBDQUxheWVy
OworT0JKQ19DTEFTUyBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU7CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEZsb2F0U2l6ZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwogCiB9CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOwotCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
IDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUgewot
ICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOwot
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOwogICAgIH5TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKCkgZmluYWw7CkBAIC01MiwxMyArNTYsMzMg
QEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKSBjb25z
dDsKICAgICB2b2lkIHNjcm9sbFZpZXdEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgaW5Vc2VySW50ZXJhY3Rpb24pIGNvbnN0OwogICAgIHZv
aWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UodW5zaWduZWQgaG9yaXpvbnRhbCwg
dW5zaWduZWQgdmVydGljYWwpIGNvbnN0OworICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxMYXllci5nZXQoKTsgfQogCi1wcml2YXRlOgorICAgIHZvaWQg
cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKTsKKyAgICB2b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hp
bGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxp
bmdTdGF0ZU5vZGUpOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGN1bXVsYXRpdmVE
ZWx0YSk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbik7CiAgICAgdm9pZCB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCitwcml2YXRlOgor
ICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFJldGFpblB0cjxDQUxh
eWVyPiBtX3Njcm9sbGVkQ29udGVudHNMYXllcjsKKyAgICBSZXRhaW5QdHI8V0tTY3JvbGxpbmdO
b2RlU2Nyb2xsVmlld0RlbGVnYXRlPiBtX3Njcm9sbFZpZXdEZWxlZ2F0ZTsKICAgICBib29sIG1f
dXBkYXRpbmdGcm9tU3RhdGVOb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKK0Bp
bnRlcmZhY2UgV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJ
U2Nyb2xsVmlld0RlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TKiBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTsKK30KKworQHByb3Bl
cnR5IChub25hdG9taWMsIGdldHRlcj1faXNJblVzZXJJbnRlcmFjdGlvbikgQk9PTCBpblVzZXJJ
bnRlcmFjdGlvbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKilk
ZWxlZ2F0ZTsKKworQGVuZAorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4IDhiYmJhYmU0Ny4uMDQxODQzMTRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlSU9TLm1tCkBAIC0yOCwxMiArMjgsOTkgQEAKIAogI2lmIFBMQVRGT1JNKElPUykg
JiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0
IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVP
dmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDx3
dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1NldEZvclNjb3BlLmg+CisK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xs
U25hcE9mZnNldHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg+
CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0BpbXBsZW1lbnRhdGlvbiBX
S1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoU2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TKilkZWxlZ2F0ZQoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlID0gZGVsZWdhdGU7CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNj
cm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50
ZXJhY3Rpb24pOworfQorCistICh2b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlT
Y3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsK
KworICAgIGlmIChzY3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKQorICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKTsKKyAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsV2lsbFN0YXJ0KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250
ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVudE9mZnNldAoreworICAgIENH
RmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPng7CisgICAgQ0dG
bG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPnk7CisKKyAgICB1bnNp
Z25lZCBvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgo
KTsKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9p
bnRJbmRleCgpOworCisgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1
bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xv
c2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUo
KS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFy
Z2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChp
bmRleCk7CisgICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRh
cmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBp
ZiAoIV9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxT
bmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAg
ICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRz
KCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxT
bmFwT2Zmc2V0UmFuZ2VzKCksIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7Cisg
ICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAodmVydGljYWxU
YXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhl
aWdodCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFw
UG9zaXRpb247CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlv
biAhPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRI
b3Jpem9udGFsU25hcFBvaW50SW5kZXgoKQorICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25h
cFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCku
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSkgeworICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCku
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CisgICAgfQorfQorI2VuZGlmCisKKy0g
KHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
IHdpbGxEZWNlbGVyYXRlOihCT09MKXdpbGxEZWNlbGVyYXRlCit7CisgICAgaWYgKF9pblVzZXJJ
bnRlcmFjdGlvbiAmJiAhd2lsbERlY2VsZXJhdGUpIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0
aW9uID0gTk87CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3
RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsK
KyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAg
IH0KK30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3Cit7CisgICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbikgeworICAgICAg
ICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5V
c2VySW50ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsRGlkRW5kKCk7CisgICAgfQorfQorCitAZW5kCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdO
b2RlKQpAQCAtNDQsNiArMTMxLDExMyBAQCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKFNjcgogCiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp+U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUygpCiB7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisg
ICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xs
TGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9m
Q2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgICAgICAvLyBUaGUgc2Nyb2xsVmlldyBt
YXkgaGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNsZWFyIHRoZSBk
ZWxlZ2F0ZSBpZiBpdCdzIG91cnMuCisgICAgICAgIGlmIChzY3JvbGxWaWV3LmRlbGVnYXRlID09
IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxl
Z2F0ZSA9IG5pbDsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJlc2V0U2Nyb2xsVmll
d0RlbGVnYXRlKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBpZiAo
VUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigp
IGRlbGVnYXRlXSkgeworICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpb
VUlTY3JvbGxWaWV3IHNlbGZdXSk7CisgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7
CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVu
KGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlKQor
eworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xs
aW5nU3RhdGVOb2RlLmxheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVu
dHNMYXllcikpCisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSkKK3sKKyAgICBT
ZXRGb3JTY29wZTxib29sPiB1cGRhdGluZ0NoYW5nZShtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSwg
dHJ1ZSk7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKKyAgICAgICAgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlRvdGFsQ29udGVudHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29u
dGVudHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCisgICAgICAg
IHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxW
aWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOworICAgICAgICBBU1NFUlQoW3Njcm9sbFZp
ZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7CisKKyAgICAgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVs
ZWdhdGUpCisgICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtb
V0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGU6dGhpc10pOworCisgICAgICAgICAgICBzY3JvbGxWaWV3LnNjcm9s
bHNUb1RvcCA9IE5POworICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG1fc2Nyb2xs
Vmlld0RlbGVnYXRlLmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZWNvbXB1dGVJ
bnNldHMgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpOworICAgICAgICBpZiAoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkpIHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29u
dGVudFNpemUgPSBzY3JvbGxpbmdTdGF0ZU5vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7Cisg
ICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCisgICAgICAgICAgICB8fCBzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsT3JpZ2luKSkKKyAgICAgICAgICAgICYmICFbbV9zY3JvbGxWaWV3RGVsZWdhdGUgX2lz
SW5Vc2VySW50ZXJhY3Rpb25dKSB7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsUG9zaXRpb24oKSArIHNjcm9sbE9yaWdpbigp
OworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChyZWNvbXB1dGVJbnNldHMpIHsKKyAgICAgICAgICAgIFVJRWRnZUluc2V0cyBpbnNl
dHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIDAsIDAsIDApOworICAgICAgICAgICAgLy8gV2l0aCBS
VEwgb3IgYm90dG9tLXRvLXRvcCBzY3JvbGxpbmcgKG5vbi16ZXJvIG9yaWdpbiksIHdlIG5lZWQg
ZXh0cmEgc3BhY2Ugb24gdGhlIGxlZnQgb3IgdG9wLgorICAgICAgICAgICAgaWYgKHNjcm9sbE9y
aWdpbigpLngoKSkKKyAgICAgICAgICAgICAgICBpbnNldHMubGVmdCA9IHJlYWNoYWJsZUNvbnRl
bnRzU2l6ZSgpLndpZHRoKCkgLSB0b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCk7CisKKyAgICAg
ICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS55KCkpCisgICAgICAgICAgICAgICAgaW5zZXRzLnRv
cCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gdG90YWxDb250ZW50c1NpemUo
KS5oZWlnaHQoKTsKKworICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNl
dHM7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIC8v
IEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNuYXBzIGluIDJEIHNjcm9sbGluZywgdGhlIG90aGVy
IGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3QgYXMgd2VsbC4gSXMgdGhpcyB3aGF0IHdlIHdhbnQ/
CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlY2VsZXJh
dGlvblJhdGUgPSBzY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgp
IHx8IHNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3Jv
bGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRl
Tm9ybWFsOworI2VuZGlmCisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6dXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdl
ZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6
ZSYgY3VtdWxhdGl2ZURlbHRhKQoreworICAgIGlmICghc2Nyb2xsaW5nTm9kZSgpLmNoaWxkcmVu
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxhc3RD
b21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsaW5nTm9kZSgpLnNjcm9sbFBvc2l0aW9u
KCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKnNjcm9sbGluZ05vZGUoKS5jaGlsZHJlbigp
KQorICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2Vk
Tm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGN1bXVsYXRpdmVEZWx0YSArIHNjcm9sbERlbHRhKTsK
K30KKworRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxM
YXllcigpIGRlbGVnYXRlXTsKKyAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpb
VUlTY3JvbGxWaWV3IHNlbGZdXSk7CisgICAgcmV0dXJuIFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZz
ZXRdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIFttX3Njcm9sbExheWVyIHNldFBv
c2l0aW9uOkNHUG9pbnRNYWtlKHNjcm9sbFBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngo
KSwgc2Nyb2xsUG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKV07CisgICAgdXBkYXRl
Q2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNjcm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3Jv
bGwoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCi0tIAoyLjE0LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320011</attachid>
            <date>2017-09-06 05:49:15 -0700</date>
            <delta_ts>2017-09-07 13:03:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174130-20170906144914.patch</filename>
            <type>text/plain</type>
            <size>33983</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhlN2I5Y2I5NThiOGE3M2M4
NjRhNzVmZGE2YTdjNzZhYjZiNTNmMDguLjczMGY5NDlmODMwYWE2ODAwOGZiYWNkZTJmNjkyNzcx
OGUwYWYzMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTctMDktMDYgIEZyZWRlcmlj
IFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgIE1vdmUgbW9yZSBjb2RlIGZyb20g
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyB0byBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQxMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaDogUmVtb3ZlIHNvbWUgbWVtYmVycywKKyAgICAgICAg
aGVhZGVycyBhbmQgcHJlLWRlY2xhcmF0aW9uIHRoYXQgYXJlIG1vdmVkIGludG8gdGhlIGRlbGVn
YXRlLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TOjpzY3JvbGxMYXllcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbTogUmVt
b3ZlIHNvbWUgaGVhZGVycyBhbmQKKyAgICAgICAgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0
ZSBzaW5jZSB0aGV5IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0ZSBmaWxlLiBBbHNvIGZpeCB0
aGUKKyAgICAgICAgY29tbWVudCB0byBjbG9zaW5nIHRoZSBXZWJLaXQgbmFtZXNwYWNlLgorICAg
ICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyk6CisgICAgICAgIFJlbW92ZSBzb21l
IGNvZGUgbW92ZWQgaW50byB0aGUgZGVsZWdhdGUgYW5kIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcg
aGVscGVyIGZ1bmN0aW9uIHRvCisgICAgICAgIHByZXNlcnZlIHRoZSBjdXJyZW50IGJlaGF2aW9y
LgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
Ojpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIE5vdGUgdGhhdCBp
dCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBjYXN0IHRoZSBwYXJhbWV0ZXIgdG8gYSBTY3JvbGxpbmdT
dGF0ZVRyZWVOb2RlLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5
ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxQb3NpdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3Jv
bGxWaWV3RGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdE
aWRTY3JvbGw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVs
ZWdhdGUgc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6
d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOndp
bGxEZWNlbGVyYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmll
d0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6XSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUy5oOiBJbXBvcnQgaGVhZGVycyBhbmQgbWVtYmVycworICAgICAgICBm
cm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuIERlZmluZSBuZXcgaGVs
cGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvZGUgaW1wb3J0ZWQKKyAgICAgICAgZnJvbSBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLiBSZW1vdmUgdGhlIGZyaWVuZHNoaXAgd2l0
aAorICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TIGFuZCBvbmx5
IG1ha2VzIHB1YmxpYyB0aGUgZnVuY3Rpb24gdXNlZCBieSB0aGF0IGNsYXNzLgorICAgICAgICAo
V2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxMYXll
cik6IFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgZnJvbQorICAgICAgICBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IEFkZCBoZWFk
ZXJzLAorICAgICAgICBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIChyZW5hbWVkIFdLU2Ny
b2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSkgYW5kIHNvbWUgaGVscGVyIGNvZGUKKyAgICAg
ICAgaW1wb3J0ZWQgZnJvbSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLgor
ICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld0Rp
ZFNjcm9sbDpdKTogTW92ZWQgZnJvbQorICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdh
dGUgc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tT
Y3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6
d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5n
OndpbGxEZWNlbGVyYXRlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Ny
b2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdEaWRFbmREZWNlbGVyYXRpbmc6XSk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp+
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyk6CisgICAgICAgIEltcG9ydCBj
b2RlIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAg
KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6cmVzZXRTY3Jv
bGxWaWV3RGVsZWdhdGUpOiBOZXcgaGVscGVyIGZ1bmN0aW9uCisgICAgICAgIGltcG9ydGluZyBj
b2RlIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAg
KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3Rh
dGVCZWZvcmVDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4pOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uzo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxQb3NpdGlv
bik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKTogRGl0dG8uCisKIDIwMTctMDktMDYg
IEZyw6lkw6lyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgSW50cm9kdWNl
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MgdG8gc2hhcmUgY29kZSBiZXR3
ZWVuIG92ZXJmbG93IGFuZCBmcmFtZSBzY3JvbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZS5jcHAKaW5kZXggOWRhYWM3NzVkN2QxYjQ4NWY1NmVhYWU0OTdkMjg4Zjk1YjE1
MTkwNC4uZDQyNGQzZjk0Y2U3NzdlNWUzYTk2MjE5ZTcyODdhNmU5NjAxOTA3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKQEAgLTUxLDYgKzUxLDIxIEBAIEZsb2F0
UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6bGFzdENvbW1pdHRlZFNj
cm9sbFBvc2l0aW9uKCkgY29uCiAgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5sYXN0Q29tbWl0
dGVkU2Nyb2xsUG9zaXRpb24oKTsKIH0KIAorY29uc3QgRmxvYXRTaXplJiBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlOjp0b3RhbENvbnRlbnRzU2l6ZSgpCit7CisgICAgcmV0dXJu
IG1fc2Nyb2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpOworfQorCitjb25zdCBGbG9hdFNp
emUmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6OnJlYWNoYWJsZUNvbnRlbnRz
U2l6ZSgpCit7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5yZWFjaGFibGVDb250ZW50c1Np
emUoKTsKK30KKworY29uc3QgSW50UG9pbnQmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGU6OnNjcm9sbE9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9k
ZS5zY3JvbGxPcmlnaW4oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZS5oCmluZGV4IGU4OGQ3YzdjMzcyZjcwNGFlN2I0OWExMjgwMGU3
ZDhiODRhZTQzYTcuLmJlYWE1Mjc1MjlkYzg4YTU0M2MyNTAwMmE3NTdiODExNTNmMTg1YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmgKQEAgLTMwLDYgKzMwLDggQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0U2l6ZTsK
K2NsYXNzIEludFBvaW50OwogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU7CiBjbGFz
cyBTY3JvbGxpbmdUcmVlOwogCkBAIC00Myw2ICs0NSw5IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlKCkgY29uc3Q7
CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludCBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRp
b24oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGbG9hdFNpemUmIHRvdGFsQ29u
dGVudHNTaXplKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRmxvYXRTaXplJiByZWFjaGFi
bGVDb250ZW50c1NpemUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBJbnRQb2ludCYgc2Ny
b2xsT3JpZ2luKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGUmIG1fc2Nyb2xsaW5nTm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKaW5kZXggZjRkZmU0NDNlOTE0ZTk4
OTgzODI2NzI4NjFmZDIzNDg0NzJlZjAyZS4uMzM5MmJjYTZlYmVjYmY5Mjc3YmMxMzJiZWY5M2Jh
NjI3MWZlODE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKQEAgLTI3LDEyICsyNyw4IEBACiAKICNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1MpCiAKLSNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xB
U1MgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZTsKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M7CkBAIC00Miw4ICsz
OCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1M+IGNyZWF0ZShXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Ny
b2xsaW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TKCk7CiAKLSAgICBDQUxheWVyICpzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQpOwogCkBAIC02MSwxMCArNTUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYpIG92
ZXJyaWRlIHsgfQogCi0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7Ci0gICAg
UmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOwotCi0gICAgUmV0YWlu
UHRyPFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xsVmlld0RlbGVnYXRlOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
PiBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQppbmRleCAxZTlh
YWVlYzQyNDU3ZDc2MDU5NzRjNzNhOGE0MDg5YzYyZDhkNmIwLi43NTM2NjdmZjIyN2FlZjMzNjJl
NTU0YTlkOGZkM2Y5MTU2OWM3MmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0yOSwxMDggKzI5LDEx
IEBACiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKLSNp
bXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0
dXJlUmVjb2duaXplci5oPgotI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KLQotI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KLSNlbmRpZgotCiAjaW1wb3J0
ICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmgiCiAKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUg
OiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
OwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0aW9u
KSBCT09MIGluVXNlckludGVyYWN0aW9uOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MqKWRlbGVnYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUyopZGVsZWdhdGUKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlldwotewotICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3
RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsK
LX0KLQotLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcKLXsKLSAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBpZiAo
c2Nyb2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGVCZWdhbikKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbFdpbGxTdGFydCgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xs
VmlldyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDoo
aW5vdXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhvcml6
b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVydGlj
YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3JpZ2lu
YWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgdW5z
aWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsK
LQotICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5o
b3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5k
ZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zm
c2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2Np
dHkueCwgaW5kZXgpOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwotICAg
ICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Ny
b2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZz
ZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBv
dGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJh
bmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAg
JiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCi0gICAg
ICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwot
ICAgIH0KLQotICAgIGlmIChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNu
YXBQb2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAh
PSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCkpIHsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgp
LCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0tICh2b2lkKXNjcm9s
bFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxl
cmF0ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24g
JiYgIXdpbGxEZWNlbGVyYXRlKSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwot
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xs
VmlldwotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgX2luVXNlcklu
dGVyYWN0aW9uID0gTk87Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0
aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgp
OwotICAgIH0KLX0KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUuaD4KIAotQGVuZAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC0xNDcsMTI1ICs1MCwzNiBAQCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdl
YgogCiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUygpCiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi0gICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcg
Kilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3
IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAvLyBUaGUgc2Ny
b2xsVmlldyBtYXkgaGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBzbyBvbmx5IGNs
ZWFyIHRoZSBkZWxlZ2F0ZSBpZiBpdCdzIG91cnMuCi0gICAgICAgIGlmIChzY3JvbGxWaWV3LmRl
bGVnYXRlID09IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQotICAgICAgICAgICAgc2Nyb2xs
Vmlldy5kZWxlZ2F0ZSA9IG5pbDsKLSAgICB9Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwotCi0gICAgLy8gV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBob2xkcyBhIHBvaW50ZXIg
dG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUywgc28gd2UgZW5zdXJlIGl0
IGlzIGRlc3Ryb3llZCBmaXJzdC4KLSAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5jbGVhcigpOwot
ICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLnJlc2V0KCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihj
b25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKLSAgICBpZiAo
c3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbExheWVyKSkgewotICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAg
ICAgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Ny
b2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBp
c0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAgICAgICAgICAgIHNjcm9sbFZp
ZXcuZGVsZWdhdGUgPSBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIH0KKyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgbV9zY3JvbGxp
bmdOb2RlRGVsZWdhdGUtPnJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKCk7CiAKICAgICBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKHN0
YXRlTm9kZSk7Ci0KLSAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2Fz
dDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKLSAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5v
ZGU6OlNjcm9sbExheWVyKSkKLSAgICAgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5sYXllcigpOwotCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIp
KQotICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+Y29t
bWl0U3RhdGVCZWZvcmVDaGlsZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU+KHN0YXRlTm9kZSkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmIHN0YXRlTm9kZSkKIHsKICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
Ojpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oc3RhdGVOb2RlKTsKLQotICAgIFNldEZvclNjb3Bl
PGJvb2w+IHVwZGF0aW5nQ2hhbmdlKG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5tX3VwZGF0aW5n
RnJvbVN0YXRlTm9kZSwgdHJ1ZSk7Ci0KLSAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5v
ZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVO
b2RlKTsKLQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpCi0gICAgICAgIHx8IHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNv
bnRlbnRzU2l6ZSkKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQotICAgICAg
ICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkgewotICAgICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKLSAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xs
VmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKLSAgICAgICAgQVNTRVJUKFtzY3JvbGxW
aWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotCi0gICAgICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsVmlld0Rl
bGVnYXRlKQotICAgICAgICAgICAgICAgIG1fc2Nyb2xsVmlld0RlbGVnYXRlID0gYWRvcHROUyhb
W1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZTptX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS5nZXQoKV0pOwotCi0gICAgICAg
ICAgICBzY3JvbGxWaWV3LnNjcm9sbHNUb1RvcCA9IE5POwotICAgICAgICAgICAgc2Nyb2xsVmll
dy5kZWxlZ2F0ZSA9IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYm9vbCByZWNvbXB1dGVJbnNldHMgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUp
OwotICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkpIHsKLSAgICAg
ICAgICAgIHNjcm9sbFZpZXcuY29udGVudFNpemUgPSBzY3JvbGxpbmdTdGF0ZU5vZGUucmVhY2hh
YmxlQ29udGVudHNTaXplKCk7Ci0gICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFBy
b3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAg
ICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkKLSAgICAgICAgICAgICYmICFbbV9z
Y3JvbGxWaWV3RGVsZWdhdGUgX2lzSW5Vc2VySW50ZXJhY3Rpb25dKSB7Ci0gICAgICAgICAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsUG9zaXRp
b24oKSArIHNjcm9sbE9yaWdpbigpOwotICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWNvbXB1dGVJbnNldHMpIHsKLSAgICAgICAg
ICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIDAsIDAsIDApOwot
ICAgICAgICAgICAgLy8gV2l0aCBSVEwgb3IgYm90dG9tLXRvLXRvcCBzY3JvbGxpbmcgKG5vbi16
ZXJvIG9yaWdpbiksIHdlIG5lZWQgZXh0cmEgc3BhY2Ugb24gdGhlIGxlZnQgb3IgdG9wLgotICAg
ICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLngoKSkKLSAgICAgICAgICAgICAgICBpbnNldHMu
bGVmdCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSB0b3RhbENvbnRlbnRzU2l6
ZSgpLndpZHRoKCk7Ci0KLSAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS55KCkpCi0gICAg
ICAgICAgICAgICAgaW5zZXRzLnRvcCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLmhlaWdodCgp
IC0gdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc2Nyb2xsVmll
dy5jb250ZW50SW5zZXQgPSBpbnNldHM7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0gICAgICAgIC8vIEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNuYXBzIGluIDJE
IHNjcm9sbGluZywgdGhlIG90aGVyIGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3QgYXMgd2VsbC4g
SXMgdGhpcyB3aGF0IHdlIHdhbnQ/Ci0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNu
YXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCi0gICAgICAgICAg
ICBzY3JvbGxWaWV3LmRlY2VsZXJhdGlvblJhdGUgPSBob3Jpem9udGFsU25hcE9mZnNldHMoKS5z
aXplKCkgfHwgdmVydGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2Vs
ZXJhdGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKLSNl
bmRpZgotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgfQorICAgIG1fc2Ny
b2xsaW5nTm9kZURlbGVnYXRlLT5jb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oZG93bmNhc3Q8U2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpKTsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9y
Q2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRS
ZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEp
CiB7Ci0gICAgaWYgKCFtX2NoaWxkcmVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFNp
emUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbFBv
c2l0aW9uKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCi0gICAgICAg
IGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhl
ZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsgc2Nyb2xsRGVsdGEpOworICAgIG1fc2Ny
b2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5n
ZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhKTsKIH0KIAogRmxvYXRQ
b2ludCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxQb3NpdGlv
bigpIGNvbnN0CiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgVUlTY3Jv
bGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVn
YXRlXTsKLSAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3
IHNlbGZdXSk7Ci0gICAgcmV0dXJuIFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlRGVsZWdh
dGUtPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JikKIHsKLSAgICBbbV9zY3JvbGxMYXllciBz
ZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgtc2Nyb2xsUG9zaXRpb24ueCgpICsgc2Nyb2xsT3JpZ2lu
KCkueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKV07Ci0KLSAg
ICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNj
cm9sbFBvc2l0aW9uKTsKKyAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2V0U2Nyb2xsTGF5
ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwoY29u
c3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCkBAIC0yNzMsNyArODcsNyBAQCB2b2lkIFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVs
ZWdhdGVkU2Nyb2xsKGNvbgogICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVDaGls
ZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9zaXRpb24pOwogfQogCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaAppbmRleCAwMmE5
OTNjM2ZjMWQ0MmFkMTMwNDExMDI1MjY2YTcyNTEyZmQ1M2U5Li5kNWRkN2Q5ODIzNzNkNzNhZTA3
MzVkZWEyMDc4ZWNkZjg3NWMxZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJ
T1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaApAQCAtMjcsMjIgKzI3LDI2IEBA
CiAKICNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKKyNpbmNs
dWRlIDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZS5oPgogCitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdLU2Nyb2xsaW5nTm9kZVNj
cm9sbFZpZXdEZWxlZ2F0ZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBv
aW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGU7CiAKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M7Ci0KIGNsYXNzIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MgOiBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSB7Ci0gICAgZnJpZW5kIGNsYXNzIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1M7Ci0KIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlJik7CiAgICAgflNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1Mo
KSBmaW5hbDsKQEAgLTUyLDEzICs1NiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxWaWV3
V2lsbFN0YXJ0UGFuR2VzdHVyZSgpIGNvbnN0OwogICAgIHZvaWQgc2Nyb2xsVmlld0RpZFNjcm9s
bChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBpblVzZXJJ
bnRlcmFjdGlvbikgY29uc3Q7CiAgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENo
YW5nZSh1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkgY29uc3Q7CisgICAg
Q0FMYXllciAqc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVyLmdldCgp
OyB9CiAKLXByaXZhdGU6CisgICAgdm9pZCByZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpOworICAg
IHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSk7CisgICAgdm9pZCBjb21taXRT
dGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNl
c3RvckNoYW5nZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKICAgICB2b2lkIHVw
ZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbik7CiAKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xs
TGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOwor
ICAgIFJldGFpblB0cjxXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGU+IG1fc2Nyb2xs
Vmlld0RlbGVnYXRlOwogICAgIGJvb2wgbV91cGRhdGluZ0Zyb21TdGF0ZU5vZGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorQGludGVyZmFjZSBXS1Njcm9sbGluZ05vZGVTY3JvbGxW
aWV3RGVsZWdhdGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKKyAgICBXZWJL
aXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNl
ckludGVyYWN0aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOworCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqKWRlbGVnYXRlOworCitAZW5kCisKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5k
ZXggOGJiYmFiZTQ3NWIxZTE2ZWU3Y2EzYzA0YjNjZmExYWQyZWE3YTY3NS4uMDQxODQzMTRkNzY2
OTRmMDdjODZhMmRmZGVlOTVkYzMyYzIyNzkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpAQCAtMjgsMTIg
KzI4LDk5IEBACiAKICNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CiAKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQ
YW5HZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCitAaW1wbGVtZW50YXRpb24gV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0Rl
bGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyopZGVsZWdh
dGUKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBfc2Nyb2xsaW5n
VHJlZU5vZGVEZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworewor
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9s
bFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKK30KKworLSAodm9pZClz
Y3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sK
KyAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7CisKKyAgICBpZiAoc2Nyb2xsVmlldy5wYW5H
ZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikK
KyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdXaWxsU3RhcnRQ
YW5HZXN0dXJlKCk7CisgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFdpbGxT
dGFydCgpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKy0gKHZvaWQpc2Nyb2xs
Vmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVsb2Np
dHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2ludCAq
KXRhcmdldENvbnRlbnRPZmZzZXQKK3sKKyAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0
YXJnZXRDb250ZW50T2Zmc2V0LT54OworICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJn
ZXRDb250ZW50T2Zmc2V0LT55OworCisgICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25h
cFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgdW5zaWduZWQgb3JpZ2luYWxW
ZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxp
bmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKKworICAgIGlmICghX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9m
ZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIGZs
b2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCks
IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNu
YXBPZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwor
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAoaG9yaXpv
bnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50
U2l6ZS53aWR0aCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRp
YWxTbmFwUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3Np
dGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2ZXJ0aWNh
bFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4
KGluZGV4KTsKKyAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJn
ZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAgICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlm
IChvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVs
ZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkK
KyAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCkpIHsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPmN1cnJlbnRTbmFw
UG9pbnRJbmRpY2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxp
bmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpLCBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCkpOworICAgIH0KK30KKyNlbmRpZgorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFn
Z2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxs
RGVjZWxlcmF0ZQoreworICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVy
YXRlKSB7CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRl
bnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxEaWRFbmQoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmll
d0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIGlm
IChfaW5Vc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87
CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xs
KHNjcm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAg
X3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAgIH0KK30KKwor
QGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUzo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyhTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZSYgc2Nyb2xsaW5nTm9kZSkKQEAgLTQ0LDYgKzEzMSwxMTMgQEAg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6U2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUyhTY3IKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoKQogeworICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAg
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKKyAgICAgICAgLy8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFu
b3RoZXIgbm9kZSwgc28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgorICAg
ICAgICBpZiAoc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQo
KSkKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7CisgICAgfQorICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TOjpyZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9
IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNT
RVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAg
ICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSkKK3sKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkK
KyAgICAgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpOworCisg
ICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBtX3Njcm9s
bGVkQ29udGVudHNMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5
ZXIoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpj
b21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
JiBzY3JvbGxpbmdTdGF0ZU5vZGUpCit7CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdD
aGFuZ2UobV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUsIHRydWUpOworICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsTGF5ZXIpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkKKyAg
ICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNjcm9sbFBvc2l0aW9uKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2lu
KSkgeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgVUlTY3Jv
bGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVn
YXRlXTsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xs
VmlldyBzZWxmXV0pOworCisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fc2Nyb2xsVmlld0RlbGVnYXRlKQorICAgICAgICAgICAgICAgIG1f
c2Nyb2xsVmlld0RlbGVnYXRlID0gYWRvcHROUyhbW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdE
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOnRoaXNdKTsK
KworICAgICAgICAgICAgc2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29u
dGVudHNTaXplKTsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUp
KSB7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRz
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0
aW9uKQorICAgICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCisgICAgICAgICAg
ICAmJiAhW21fc2Nyb2xsVmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkgeworICAg
ICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNj
cm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxPcmlnaW4oKTsKKyAgICAgICAgICAgIHJlY29tcHV0ZUlu
c2V0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVjb21wdXRlSW5zZXRzKSB7
CisgICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCAw
LCAwLCAwKTsKKyAgICAgICAgICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Agc2Nyb2xs
aW5nIChub24temVybyBvcmlnaW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBsZWZ0IG9y
IHRvcC4KKyAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS54KCkpCisgICAgICAgICAgICAg
ICAgaW5zZXRzLmxlZnQgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gdG90YWxD
b250ZW50c1NpemUoKS53aWR0aCgpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCku
eSgpKQorICAgICAgICAgICAgICAgIGluc2V0cy50b3AgPSByZWFjaGFibGVDb250ZW50c1NpemUo
KS5oZWlnaHQoKSAtIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7CisKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgICAgICB9CisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUgYXhpcyBz
bmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0ZSBmYXN0
IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhv
cml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpKQor
ICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gc2Nyb2xsaW5nTm9kZSgp
Lmhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCBzY3JvbGxpbmdOb2RlKCkudmVydGlj
YWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0
IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKKyNlbmRpZgorICAgICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZp
eGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKK3sKKyAg
ICBpZiAoIXNjcm9sbGluZ05vZGUoKS5jaGlsZHJlbigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAt
IHNjcm9sbGluZ05vZGUoKS5zY3JvbGxQb3NpdGlvbigpOworCisgICAgZm9yIChhdXRvJiBjaGls
ZCA6ICpzY3JvbGxpbmdOb2RlKCkuY2hpbGRyZW4oKSkKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBj
dW11bGF0aXZlRGVsdGEgKyBzY3JvbGxEZWx0YSk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xs
VmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgQVNT
RVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAg
IHJldHVybiBbc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
bikKK3sKKyAgICBbbV9zY3JvbGxMYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShzY3JvbGxQ
b3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSArIHNj
cm9sbE9yaWdpbigpLnkoKSldOworICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3Jv
bGxQb3NpdGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUzo6dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320162</attachid>
            <date>2017-09-07 13:03:34 -0700</date>
            <delta_ts>2017-09-07 13:21:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-174130-20170907220332.patch</filename>
            <type>text/plain</type>
            <size>33968</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxMmE0ZTA1ODUyZTU4MzZj
YjcxMWVlMDhhODhjNjllNmM4MTExYmYuLjM4MGE0OTI0MzU3OGQ5M2RkODAxMTljNDUxY2E5YWY1
Mzk3YzQyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTctMDktMDcgIEZyZWRlcmlj
IFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgICBNb3ZlIG1vcmUgY29kZSBmcm9t
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MgdG8gU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZQorICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDEzMAorCisgICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIu
CisKKyAgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oOiBSZW1vdmUgc29tZSBtZW1iZXJzLAorICAgICAg
ICAgaGVhZGVycyBhbmQgcHJlLWRlY2xhcmF0aW9uIHRoYXQgYXJlIG1vdmVkIGludG8gdGhlIGRl
bGVnYXRlLgorICAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUzo6c2Nyb2xsTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAgKiBVSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1t
OiBSZW1vdmUgc29tZSBoZWFkZXJzIGFuZAorICAgICAgICAgV0tPdmVyZmxvd1Njcm9sbFZpZXdE
ZWxlZ2F0ZSBzaW5jZSB0aGV5IGFyZSBtb3ZlZCBpbnRvIHRoZSBkZWxlZ2F0ZSBmaWxlLiBBbHNv
IGZpeCB0aGUKKyAgICAgICAgIGNvbW1lbnQgdG8gY2xvc2luZyB0aGUgV2ViS2l0IG5hbWVzcGFj
ZS4KKyAgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6On5TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKToKKyAgICAgICAgIFJl
bW92ZSBzb21lIGNvZGUgbW92ZWQgaW50byB0aGUgZGVsZWdhdGUgYW5kIGNhbGwgdGhlIGNvcnJl
c3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9uIHRvCisgICAgICAgICBwcmVzZXJ2ZSB0aGUgY3VycmVu
dCBiZWhhdmlvci4KKyAgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAg
IE5vdGUgdGhhdCBpdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBjYXN0IHRoZSBwYXJhbWV0ZXIgdG8g
YSBTY3JvbGxpbmdTdGF0ZVRyZWVOb2RlLgorICAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKTogRGl0dG8uCisgICAgICAgICAo
V2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxQb3Np
dGlvbik6IERpdHRvLgorICAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAg
KC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2Rl
RGVsZWdhdGU6XSk6IERlbGV0ZWQuCisgICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0Rl
bGVnYXRlIHNjcm9sbFZpZXdEaWRTY3JvbGw6XSk6IERlbGV0ZWQuCisgICAgICAgICAoLVtXS092
ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKTog
RGVsZXRlZC4KKyAgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xs
Vmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTog
RGVsZXRlZC4KKyAgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xs
Vmlld0RpZEVuZERyYWdnaW5nOndpbGxEZWNlbGVyYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAg
KC1bV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0
aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lv
cy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmg6IEltcG9ydCBoZWFkZXJz
IGFuZCBtZW1iZXJzCisgICAgICAgICBmcm9tIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MuIERlZmluZSBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvZGUgaW1wb3J0
ZWQKKyAgICAgICAgIGZyb20gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4g
UmVtb3ZlIHRoZSBmcmllbmRzaGlwIHdpdGgKKyAgICAgICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MgYW5kIG9ubHkgbWFrZXMgcHVibGljIHRoZSBmdW5jdGlvbiB1c2Vk
IGJ5IHRoYXQgY2xhc3MuCisgICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TOjpzY3JvbGxMYXllcik6IFRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgZnJv
bQorICAgICAgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAg
ICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZUlPUy5tbTogQWRkIGhlYWRlcnMsCisgICAgICAgICBXS092ZXJmbG93U2Ny
b2xsVmlld0RlbGVnYXRlIChyZW5hbWVkIFdLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0
ZSkgYW5kIHNvbWUgaGVscGVyIGNvZGUKKyAgICAgICAgIGltcG9ydGVkIGZyb20gU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9k
ZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBNb3ZlZCBmcm9tCisg
ICAgICAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLgorICAgICAgICAg
KC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsQmVnaW5E
cmFnZ2luZzpdKTogRGl0dG8uCisgICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3
RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29u
dGVudE9mZnNldDpdKTogRGl0dG8uCisgICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxW
aWV3RGVsZWdhdGUgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOndpbGxEZWNlbGVyYXRlOl0pOiBE
aXR0by4KKyAgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3Jv
bGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOl0pOiBEaXR0by4KKyAgICAgICAgIChXZWJLaXQ6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6On5TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TKToKKyAgICAgICAgIEltcG9ydCBjb2RlIGZyb20gU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy4KKyAgICAgICAgIChXZWJLaXQ6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKTog
TmV3IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAgaW1wb3J0aW5nIGNvZGUgZnJvbSBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLgorICAgICAgICAgKFdlYktpdDo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bik6IERpdHRvLgorICAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICAo
V2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp1cGRhdGVMYXll
cnNBZnRlckFuY2VzdG9yQ2hhbmdlKTogRGl0dG8uCisgICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxQb3NpdGlvbik6IERpdHRvLgor
ICAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6
c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6IERpdHRvLgorCiAyMDE3LTA5LTA3ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gTm90aWZ5IGNsaWVudCB3aGVu
IGRvd25sb2FkcyBhcmUgcmVkaXJlY3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlLmNwcAppbmRleCA5ZGFhYzc3NWQ3ZDFiNDg1ZjU2ZWFhZTQ5N2QyODhmOTViMTUxOTA0Li5k
NDI0ZDNmOTRjZTc3N2U1ZTNhOTYyMTllNzI4N2E2ZTk2MDE5MDdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcApAQCAtNTEsNiArNTEsMjEgQEAgRmxvYXRQb2ludCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlOjpsYXN0Q29tbWl0dGVkU2Nyb2xsUG9z
aXRpb24oKSBjb24KICAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlLmxhc3RDb21taXR0ZWRTY3Jv
bGxQb3NpdGlvbigpOwogfQogCitjb25zdCBGbG9hdFNpemUmIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGU6OnRvdGFsQ29udGVudHNTaXplKCkKK3sKKyAgICByZXR1cm4gbV9zY3Jv
bGxpbmdOb2RlLnRvdGFsQ29udGVudHNTaXplKCk7Cit9CisKK2NvbnN0IEZsb2F0U2l6ZSYgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6cmVhY2hhYmxlQ29udGVudHNTaXplKCkK
K3sKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOwor
fQorCitjb25zdCBJbnRQb2ludCYgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6
c2Nyb2xsT3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlLnNjcm9s
bE9yaWdpbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlLmgKaW5kZXggZTg4ZDdjN2MzNzJmNzA0YWU3YjQ5YTEyODAwZTdkOGI4NGFl
NDNhNy4uYmVhYTUyNzUyOWRjODhhNTQzYzI1MDAyYTc1N2I4MTE1M2YxODVjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaApAQCAtMzAsNiArMzAsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRTaXplOworY2xhc3Mg
SW50UG9pbnQ7CiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9s
bGluZ1RyZWU7CiAKQEAgLTQzLDYgKzQ1LDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdF
QkNPUkVfRVhQT1JUIFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFBvaW50IGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0U2l6ZSYgdG90YWxDb250ZW50c1Np
emUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGbG9hdFNpemUmIHJlYWNoYWJsZUNvbnRl
bnRzU2l6ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmln
aW4oKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYg
bV9zY3JvbGxpbmdOb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAppbmRleCBmNGRmZTQ0M2U5MTRlOTg5ODM4MjY3
Mjg2MWZkMjM0ODQ3MmVmMDJlLi4zMzkyYmNhNmViZWNiZjkyNzdiYzEzMmJlZjkzYmE2MjcxZmU4
MTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
aW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MuaApAQCAtMjcsMTIgKzI3LDggQEAKIAogI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKElPUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGUuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092
ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlOwotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzsKQEAgLTQyLDggKzM4LDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdO
b2RlSUQpOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1MoKTsKIAotICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxMYXllci5nZXQoKTsgfQotCiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6OlNjcm9sbGlu
Z05vZGVJRCk7CiAKQEAgLTYxLDEwICs1NSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGUg
eyB9CiAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBSZXRhaW5Q
dHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0KLSAgICBSZXRhaW5QdHI8V0tP
dmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M+IG1fc2Ny
b2xsaW5nTm9kZURlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmluZGV4IDFlOWFhZWVjNDI0
NTdkNzYwNTk3NGM3M2E4YTQwODljNjJkOGQ2YjAuLjc1MzY2N2ZmMjI3YWVmMzM2MmU1NTRhOWQ4
ZmQzZjkxNTY5YzcyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0KQEAgLTI5LDEwOCArMjksMTEgQEAKICNp
ZiBQTEFURk9STShJT1MpCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAotI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1cmVSZWNv
Z25pemVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsaW5nVHJlZS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKLSNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgotI2VuZGlmCi0KICNpbXBvcnQgIlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLUBpbnRlcmZhY2UgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyogX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU7Ci19Ci0K
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2lzSW5Vc2VySW50ZXJhY3Rpb24pIEJPT0wg
aW5Vc2VySW50ZXJhY3Rpb247Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUyopZGVsZWdhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLT3ZlcmZsb3dTY3Jv
bGxWaWV3RGVsZWdhdGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5v
ZGVEZWxlZ2F0ZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
KilkZWxlZ2F0ZQotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlID0gZGVsZWdhdGU7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3JvbGxW
aWV3Ci17Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdEaWRTY3Jv
bGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOwotfQotCi0t
ICh2b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xs
VmlldwotewotICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsKLQotICAgIGlmIChzY3JvbGxW
aWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUJlZ2FuKQotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsVmlld1dp
bGxTdGFydFBhbkdlc3R1cmUoKTsKLSAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsV2lsbFN0YXJ0KCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotLSAodm9p
ZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdp
dGhWZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBD
R1BvaW50ICopdGFyZ2V0Q29udGVudE9mZnNldAotewotICAgIENHRmxvYXQgaG9yaXpvbnRhbFRh
cmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPng7Ci0gICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdl
dCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPnk7Ci0KLSAgICB1bnNpZ25lZCBvcmlnaW5hbEhvcml6
b250YWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKLSAgICB1bnNpZ25lZCBv
cmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwotCi0gICAg
aWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmhvcml6b250
YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAg
ICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9m
ZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jp
em9udGFsU25hcE9mZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBp
bmRleCk7Ci0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7Ci0gICAgICAgIGlm
IChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3
LmNvbnRlbnRTaXplLndpZHRoKQotICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9
IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoIV9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1w
dHkoKSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgZmxvYXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbGluZ05vZGUoKS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCks
IHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7Ci0gICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0
aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKLSAgICAgICAgICAg
IHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQot
Ci0gICAgaWYgKG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgoKQotICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uICE9IF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXgoKSkgewotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+Y3Vy
cmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUt
PnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCksIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXgoKSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLS0gKHZvaWQpc2Nyb2xsVmlld0Rp
ZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihC
T09MKXdpbGxEZWNlbGVyYXRlCi17Ci0gICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbiAmJiAhd2ls
bERlY2VsZXJhdGUpIHsKLSAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87Ci0gICAgICAg
IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZp
ZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOwotICAgIH0KLX0KLQotLSAodm9pZClz
Y3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17
Ci0gICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBfaW5Vc2VySW50ZXJhY3Rp
b24gPSBOTzsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdE
aWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOwot
ICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsRGlkRW5kKCk7Ci0gICAg
fQotfQorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZS5oPgogCi1AZW5kCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKQEAgLTE0NywxMjUgKzUwLDM2IEBAIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoV2ViCiAKIFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6On5TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TKCkKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBpZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3Jv
bGxMYXllcigpIGRlbGVnYXRlXSkgewotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5k
T2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgICAgIC8vIFRoZSBzY3JvbGxWaWV3
IG1heSBoYXZlIGJlZW4gYWRvcHRlZCBieSBhbm90aGVyIG5vZGUsIHNvIG9ubHkgY2xlYXIgdGhl
IGRlbGVnYXRlIGlmIGl0J3Mgb3Vycy4KLSAgICAgICAgaWYgKHNjcm9sbFZpZXcuZGVsZWdhdGUg
PT0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCkpCi0gICAgICAgICAgICBzY3JvbGxWaWV3LmRl
bGVnYXRlID0gbmlsOwotICAgIH0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0KLSAg
ICAvLyBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIGhvbGRzIGEgcG9pbnRlciB0byBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLCBzbyB3ZSBlbnN1cmUgaXQgaXMgZGVz
dHJveWVkIGZpcnN0LgotICAgIG1fc2Nyb2xsVmlld0RlbGVnYXRlLmNsZWFyKCk7Ci0gICAgbV9z
Y3JvbGxpbmdOb2RlRGVsZWdhdGUucmVzZXQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogewotICAgIGlmIChzdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
TGF5ZXIpKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBp
ZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXll
cigpIGRlbGVnYXRlXSkgewotICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9m
Q2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxl
Z2F0ZSA9IG5pbDsKLSAgICAgICAgfQotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
Ci0gICAgfQorICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGluZ05vZGVE
ZWxlZ2F0ZS0+cmVzZXRTY3JvbGxWaWV3RGVsZWdhdGUoKTsKIAogICAgIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2Rl
KTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9s
bGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwotICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Ny
b2xsTGF5ZXIpKQotICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmxh
eWVyKCk7Ci0KLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAg
ICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVk
Q29udGVudHNMYXllcigpOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5jb21taXRTdGF0
ZUJlZm9yZUNoaWxkcmVuKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3Rh
dGVOb2RlKSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3Rh
dGVOb2RlKQogewogICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OmNvbW1p
dFN0YXRlQWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4g
dXBkYXRpbmdDaGFuZ2UobV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPm1fdXBkYXRpbmdGcm9tU3Rh
dGVOb2RlLCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwot
Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRv
dGFsQ29udGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNT
aXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICop
W3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNL
aW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUp
Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURl
bGVnYXRlOm1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICAgICAgICAgIHNj
cm9sbFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVn
YXRlID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIHJlY29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAg
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplKSkgewotICAgICAgICAgICAg
c2Nyb2xsVmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGluZ1N0YXRlTm9kZS5yZWFjaGFibGVDb250
ZW50c1NpemUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgICAg
IHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZp
ZXdEZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0pIHsKLSAgICAgICAgICAgIHNjcm9sbFZp
ZXcuY29udGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsg
c2Nyb2xsT3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNvbXB1dGVJbnNldHMgPSB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUluc2V0cykgewotICAgICAgICAgICAgVUlF
ZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgMCwgMCwgMCk7Ci0gICAgICAg
ICAgICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9wIHNjcm9sbGluZyAobm9uLXplcm8gb3Jp
Z2luKSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUgbGVmdCBvciB0b3AuCi0gICAgICAgICAg
ICBpZiAoc2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAgICAgICAgICAgIGluc2V0cy5sZWZ0ID0g
cmVhY2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAtIHRvdGFsQ29udGVudHNTaXplKCkud2lk
dGgoKTsKLQotICAgICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLnkoKSkKLSAgICAgICAgICAg
ICAgICBpbnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB0b3Rh
bENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRl
bnRJbnNldCA9IGluc2V0czsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKLSAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xs
aW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlz
IHdoYXQgd2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNl
dHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKLSAgICAgICAgICAgIHNjcm9s
bFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8
fCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9u
UmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOwotI2VuZGlmCi0g
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9CisgICAgbV9zY3JvbGxpbmdO
b2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihkb3duY2FzdDxTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZp
eGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKIHsKLSAg
ICBpZiAoIW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0U2l6ZSBzY3Jv
bGxEZWx0YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24o
KTsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRp
b25SZWN0LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxEZWx0YSk7CisgICAgbV9zY3JvbGxpbmdO
b2RlRGVsZWdhdGUtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUs
IGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEpOwogfQogCiBGbG9hdFBvaW50IFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBVSVNjcm9sbFZpZXcg
KnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwot
ICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1d
KTsKLSAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Ci0gICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Ny
b2xsUG9zaXRpb24oKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBv
c2l0aW9uLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0
aW9uOkNHUG9pbnRNYWtlKC1zY3JvbGxQb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCks
IC1zY3JvbGxQb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpXTsKLQotICAgIG1fc2Ny
b2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xsUG9z
aXRpb24pOworICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5zZXRTY3JvbGxMYXllclBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9h
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTI3Myw3ICs4Nyw3IEBAIHZvaWQgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRT
Y3JvbGwoY29uCiAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPnVwZGF0ZUNoaWxkTm9kZXNB
ZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCmluZGV4IDAyYTk5M2MzZmMx
ZDQyYWQxMzA0MTEwMjUyNjZhNzI1MTJmZDUzZTkuLjAyYTQ0NThmNTEwYTNhNWE4NWMxNTFiNzEx
MTk5MGNhYzBhY2M1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oCkBAIC0yNywyMiArMjcsMjYgQEAKIAogI2lm
IFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2luY2x1ZGUgPFVJ
S2l0L1VJU2Nyb2xsVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmg+CiAK
K09CSkNfQ0xBU1MgQ0FMYXllcjsKK09CSkNfQ0xBU1MgV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmll
d0RlbGVnYXRlOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZTsKIAogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzsKLQogY2xhc3MgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUyA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlIHsKLSAgICBmcmllbmQgY2xhc3MgU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUzsKLQogcHVibGljOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUmKTsKICAgICB+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUygpIGZpbmFs
OwpAQCAtNTIsMTMgKzU2LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFZpZXdXaWxsU3Rh
cnRQYW5HZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9pZCBzY3JvbGxWaWV3RGlkU2Nyb2xsKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIGluVXNlckludGVyYWN0
aW9uKSBjb25zdDsKICAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKHVu
c2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBjb25zdDsKKyAgICBDQUxheWVy
ICpzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KIAot
cHJpdmF0ZToKKyAgICB2b2lkIHJlc2V0U2Nyb2xsVmlld0RlbGVnYXRlKCk7CisgICAgdm9pZCBj
b21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSYpOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYpOworICAgIHZvaWQgdXBkYXRlTGF5
ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYg
Y2hhbmdlZE5vZGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxM
YXllclBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICB2b2lkIHVwZGF0
ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQ
b3NpdGlvbik7CiAKLSAgICBib29sIG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlOworcHJpdmF0ZToK
KyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CisgICAgUmV0YWluUHRyPFdLU2Nyb2xsaW5n
Tm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CisgICAgYm9vbCBt
X3VwZGF0aW5nRnJvbVN0YXRlTm9kZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAorQGludGVyZmFjZSBXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgOiBO
U09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOwor
fQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9pc0luVXNlckludGVyYWN0aW9uKSBC
T09MIGluVXNlckludGVyYWN0aW9uOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxp
bmdUcmVlTm9kZURlbGVnYXRlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MqKWRlbGVnYXRlOworCitAZW5kCisKICNlbmRpZiAvLyBQTEFURk9STShJT1MpICYm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXggOGJiYmFiZTQ3NWIx
ZTE2ZWU3Y2EzYzA0YjNjZmExYWQyZWE3YTY3NS4uMDQxODQzMTRkNzY2OTRmMDdjODZhMmRmZGVl
OTVkYzMyYzIyNzkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpAQCAtMjgsMTIgKzI4LDk5IEBACiAKICNp
ZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0dXJlUmVjb2du
aXplci5oPgorI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1Njcm9sbGluZ1RyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9T
ZXRGb3JTY29wZS5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBvcnQgPFdl
YkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitA
aW1wbGVtZW50YXRpb24gV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlCisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGU6KFdlYktpdDo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyopZGVsZWdhdGUKK3sKKyAgICBpZiAo
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0
ZSA9IGRlbGVnYXRlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmll
d0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIF9zY3JvbGxpbmdU
cmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9m
ZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKK30KKworLSAodm9pZClzY3JvbGxWaWV3V2lsbEJl
Z2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBfaW5Vc2VySW50
ZXJhY3Rpb24gPSBZRVM7CisKKyAgICBpZiAoc2Nyb2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXpl
ci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikKKyAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Cisg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbFdpbGxTdGFydCgpOworfQorCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKy0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFn
Z2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVs
b2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRP
ZmZzZXQKK3sKKyAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zm
c2V0LT54OworICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0
LT55OworCisgICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KCk7CisgICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3Np
dGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKKworICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2Rl
RGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbFNu
YXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRl
LT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMo
KSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOworICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFs
U25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAw
ICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKKyAg
ICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247
CisgICAgfQorCisgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXg7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RT
bmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkudmVy
dGljYWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5n
Tm9kZSgpLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2Np
dHkueSwgaW5kZXgpOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xs
aW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKKyAgICAg
ICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmll
dy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55
ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmIChvcmlnaW5hbEhvcml6
b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGlu
Z05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkKKyAgICAgICAgfHwgb3Jp
Z2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+
c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpIHsKKyAgICAg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+
c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpOworICAgIH0K
K30KKyNlbmRpZgorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxW
aWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQorewor
ICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7CisgICAgICAg
IF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVz
ZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3Jv
bGxEaWRFbmQoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJh
dGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIGlmIChfaW5Vc2VySW50ZXJh
Y3Rpb24pIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87CisgICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29u
dGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbERpZEVuZCgpOworICAgIH0KK30KKworQGVuZAorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUyhTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZSYgc2Nyb2xsaW5nTm9kZSkKQEAgLTQ0LDYgKzEzMSwxMTMgQEAgU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUyhTY3IKIAogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6flNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MoKQogeworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3Jv
bGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAgICAgIEFTU0VSVChbc2Ny
b2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICAgICAgLy8g
VGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFub3RoZXIgbm9kZSwgc28g
b25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgorICAgICAgICBpZiAoc2Nyb2xs
Vmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKSkKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
OjpyZXNldFNjcm9sbFZpZXdEZWxlZ2F0ZSgpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcg
Kilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3
IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgICAgICBzY3JvbGxWaWV3
LmRlbGVnYXRlID0gbmlsOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6Y29tbWl0U3Rh
dGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIHNjcm9s
bGluZ1N0YXRlTm9kZSkKK3sKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgbV9zY3Jv
bGxMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpOworCisgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpjb21taXRTdGF0ZUFmdGVy
Q2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0
ZU5vZGUpCit7CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdDaGFuZ2UobV91cGRhdGlu
Z0Zyb21TdGF0ZU5vZGUsIHRydWUpOworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpCisg
ICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBv
c2l0aW9uKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkgeworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxW
aWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKKyAgICAgICAg
QVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwor
CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgICAgICBpZiAo
IW1fc2Nyb2xsVmlld0RlbGVnYXRlKQorICAgICAgICAgICAgICAgIG1fc2Nyb2xsVmlld0RlbGVn
YXRlID0gYWRvcHROUyhbW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlOnRoaXNdKTsKKworICAgICAgICAgICAg
c2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVs
ZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKTsKKyAg
ICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpKSB7CisgICAgICAgICAg
ICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnJlYWNoYWJsZUNv
bnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRzID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQorICAgICAgICAg
ICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCisgICAgICAgICAgICAmJiAhW21fc2Nyb2xs
Vmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkgeworICAgICAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbFBvc2l0aW9uKCkg
KyBzY3JvbGxPcmlnaW4oKTsKKyAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocmVjb21wdXRlSW5zZXRzKSB7CisgICAgICAgICAgICBV
SUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCAwLCAwLCAwKTsKKyAgICAg
ICAgICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Agc2Nyb2xsaW5nIChub24temVybyBv
cmlnaW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBsZWZ0IG9yIHRvcC4KKyAgICAgICAg
ICAgIGlmIChzY3JvbGxPcmlnaW4oKS54KCkpCisgICAgICAgICAgICAgICAgaW5zZXRzLmxlZnQg
PSByZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gdG90YWxDb250ZW50c1NpemUoKS53
aWR0aCgpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCkueSgpKQorICAgICAgICAg
ICAgICAgIGluc2V0cy50b3AgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHRv
dGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29u
dGVudEluc2V0ID0gaW5zZXRzOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorICAgICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUgYXhpcyBzbmFwcyBpbiAyRCBzY3Jv
bGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0ZSBmYXN0IGFzIHdlbGwuIElzIHRo
aXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zm
c2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpKQorICAgICAgICAgICAgc2Ny
b2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gc2Nyb2xsaW5nTm9kZSgpLmhvcml6b250YWxTbmFw
T2Zmc2V0cygpLnNpemUoKSB8fCBzY3JvbGxpbmdOb2RlKCkudmVydGljYWxTbmFwT2Zmc2V0cygp
LnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3
RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKKyNlbmRpZgorICAgICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5n
VHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0
LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKK3sKKyAgICBpZiAoIXNjcm9sbGlu
Z05vZGUoKS5jaGlsZHJlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFNpemUgc2Ny
b2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbGluZ05vZGUo
KS5zY3JvbGxQb3NpdGlvbigpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6ICpzY3JvbGxpbmdO
b2RlKCkuY2hpbGRyZW4oKSkKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEg
KyBzY3JvbGxEZWx0YSk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9s
bFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgQVNTRVJUKFtzY3JvbGxWaWV3
IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgIHJldHVybiBbc2Nyb2xs
VmlldyBjb250ZW50T2Zmc2V0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6c2V0U2Nyb2xsTGF5
ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBbbV9z
Y3JvbGxMYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShzY3JvbGxQb3NpdGlvbi54KCkgKyBz
Y3JvbGxPcmlnaW4oKS54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnko
KSldOworICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7CiB9
CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6dXBkYXRlQ2hp
bGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>