<?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>164771</bug_id>
          
          <creation_ts>2016-11-15 03:55:01 -0800</creation_ts>
          <short_desc>[GTK] Notifications API does not expose or respect the &quot;tag&quot; attribute</short_desc>
          <delta_ts>2016-11-26 05:17:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=163366</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=164986</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrian Perez">aperez</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251422</commentid>
    <comment_count>0</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2016-11-15 03:55:01 -0800</bug_when>
    <thetext>According to https://webkitgtk.org/reference/webkit2gtk/stable/WebKitNotification.html
the WebKitNotification objects expose the following attributes:

 * body
 * title
 * id

Meanwhile, the HTML5 specification for WebNotifications includes a “tag” attribute and
a few others which are not exposed by WebKitGTK+. Documentation:

 * https://developer.mozilla.org/en-US/docs/Web/API/notification

In particular, the “tag” attribute can be used to indicate that one notification may
replace a previous one which has the same value for “tag”, instead of letting many
related notifications pile up in systems where replacing notifications is supported.
For example, when using “g_application_send_notification()” to display notifications
from a GTK+ application, it is possible to replace previous notifications, so it would
be desirable that WebKitGTK+ exposes the “tag” attribute in order to know when an
application running in an embedded WebKitWebView wants to replace a notification.

For an example usage of “tag” in the WebNotification API, see:

 * https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API#Tag_example</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253076</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 07:28:33 -0800</bug_when>
    <thetext>Test page:

https://mdn.github.io/emogotchi/

With Firefox, as your emo becomes well-adjusted, Firefox creates a new notification and withdraws the previous one. With Epiphany (using our default WebKitGTK+ notification implementation) we just get a notification spam. So just exposing the property is insufficient, we also have to actually respect it in our default implementation, so applications don&apos;t have to manage this themselves.

We are also missing the icon that&apos;s supposed to be displayed. We should expose that too. Bug #164986.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253077</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 07:32:47 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; With Firefox, as your emo becomes well-adjusted, Firefox creates a new
&gt; notification and withdraws the previous one. With Epiphany (using our
&gt; default WebKitGTK+ notification implementation) we just get a notification
&gt; spam.

Hm, actually I must have tested this wrong. Seems it withdraws notifications itself, just after a short delay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253078</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 07:39:48 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Test page:
&gt; 
&gt; https://mdn.github.io/emogotchi/

Maybe I should actually examine the test before posting it here. It doesn&apos;t use a tag at all. :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253079</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 08:04:32 -0800</bug_when>
    <thetext>*Temporarily* rehosted it, modified to use tags: https://people.gnome.org/~mcatanzaro/emogotchi-gh-pages/

Unfortunately our notifications do not work at all using file:// URIs, unlike Firefox. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253100</commentid>
    <comment_count>5</comment_count>
      <attachid>295268</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 12:24:14 -0800</bug_when>
    <thetext>Created attachment 295268
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253117</commentid>
    <comment_count>6</comment_count>
      <attachid>295271</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-19 14:44:35 -0800</bug_when>
    <thetext>Created attachment 295271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253592</commentid>
    <comment_count>7</comment_count>
      <attachid>295271</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2016-11-24 08:25:18 -0800</bug_when>
    <thetext>Comment on attachment 295271
Patch

This looks good to me =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253605</commentid>
    <comment_count>8</comment_count>
      <attachid>295271</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-24 12:10:38 -0800</bug_when>
    <thetext>Comment on attachment 295271
Patch

Clearing flags on attachment: 295271

Committed r208974: &lt;http://trac.webkit.org/changeset/208974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253606</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-24 12:10:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253626</commentid>
    <comment_count>10</comment_count>
      <attachid>295271</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-24 22:47:03 -0800</bug_when>
    <thetext>Comment on attachment 295271
Patch

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

Please, remember that patches adding new API require the approval of two reviewers.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotification.cpp:275
&gt; +    const gchar* tag = notification-&gt;priv-&gt;tag.data();
&gt; +    return strlen(tag) &gt; 0 ? tag : nullptr;

You don&apos;t need to do strlen again, you have a CString with a length already:

return notification-&gt;priv-&gt;tag.length() ? notification-&gt;priv-&gt;tag.data() : nullptr;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.cpp:111
&gt; +        if (tag == webkit_notification_get_tag(notification.get())) {

Here you are comparing strings with different encondings, the public API method returns a UTF-8 string that here is implicitly converted to String for the comparison. You should either use String::fromUT8() or even better pass a UTF8 string to this function so that you only convert once.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.cpp:128
&gt; +        withdrawAnyPreviousNotificationMatchingTag(webNotification.tag());

Here you could pass webNotification.tag().utf8() instead, and use the CString.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.cpp:129
&gt;          notification = adoptGRef(webkitNotificationCreate(WEBKIT_WEB_VIEW(page-&gt;viewWidget()), webNotification));

Or you could create the new notification first, and pass it to withdrawAnyPreviousNotificationMatchingTag and then you would be comparing two WebKitNotification:tag properties.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.h:51
&gt; +    void withdrawAnyPreviousNotificationMatchingTag(const String&amp;);

Why isn&apos;t this static instead? It&apos;s only called from WebKitNotificationProvider.cpp, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253648</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-25 07:50:07 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 295271 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295271&amp;action=review
&gt; 
&gt; Please, remember that patches adding new API require the approval of two
&gt; reviewers.

Gustavo and me, you had the rule that one reviewer could be the submitter. Remember I did ask you to look at it first.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotification.cpp:275
&gt; &gt; +    const gchar* tag = notification-&gt;priv-&gt;tag.data();
&gt; &gt; +    return strlen(tag) &gt; 0 ? tag : nullptr;
&gt; 
&gt; You don&apos;t need to do strlen again, you have a CString with a length already:
&gt; 
&gt; return notification-&gt;priv-&gt;tag.length() ? notification-&gt;priv-&gt;tag.data() :
&gt; nullptr;

OK
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.cpp:111
&gt; &gt; +        if (tag == webkit_notification_get_tag(notification.get())) {
&gt; 
&gt; Here you are comparing strings with different encondings, the public API
&gt; method returns a UTF-8 string that here is implicitly converted to String
&gt; for the comparison. You should either use String::fromUT8() or even better
&gt; pass a UTF8 string to this function so that you only convert once.

Ow, thanks for catching this.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.h:51
&gt; &gt; +    void withdrawAnyPreviousNotificationMatchingTag(const String&amp;);
&gt; 
&gt; Why isn&apos;t this static instead? It&apos;s only called from
&gt; WebKitNotificationProvider.cpp, no?

That can&apos;t be the rule to decide whether to make a function file-static as then we would never have any private member functions at all, and that&apos;s not the code style we follow. But it could indeed be easily made static if we pass the m_notificationPermissions member. I chose to make it private to avoid doing that because we don&apos;t have any guidance on which style is preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253660</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-25 10:38:31 -0800</bug_when>
    <thetext>Committed r208977: &lt;http://trac.webkit.org/changeset/208977&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253680</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-26 01:05:41 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Comment on attachment 295271 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=295271&amp;action=review
&gt; &gt; 
&gt; &gt; Please, remember that patches adding new API require the approval of two
&gt; &gt; reviewers.
&gt; 
&gt; Gustavo and me, you had the rule that one reviewer could be the submitter.

Oh, right, I invented that rule for me :-P

&gt; Remember I did ask you to look at it first.

And I told you, ask Gustavo, who wrote the notifications API, and I&apos;ll just check the API after his review.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotification.cpp:275
&gt; &gt; &gt; +    const gchar* tag = notification-&gt;priv-&gt;tag.data();
&gt; &gt; &gt; +    return strlen(tag) &gt; 0 ? tag : nullptr;
&gt; &gt; 
&gt; &gt; You don&apos;t need to do strlen again, you have a CString with a length already:
&gt; &gt; 
&gt; &gt; return notification-&gt;priv-&gt;tag.length() ? notification-&gt;priv-&gt;tag.data() :
&gt; &gt; nullptr;
&gt; 
&gt; OK
&gt;  
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.cpp:111
&gt; &gt; &gt; +        if (tag == webkit_notification_get_tag(notification.get())) {
&gt; &gt; 
&gt; &gt; Here you are comparing strings with different encondings, the public API
&gt; &gt; method returns a UTF-8 string that here is implicitly converted to String
&gt; &gt; for the comparison. You should either use String::fromUT8() or even better
&gt; &gt; pass a UTF8 string to this function so that you only convert once.
&gt; 
&gt; Ow, thanks for catching this.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNotificationProvider.h:51
&gt; &gt; &gt; +    void withdrawAnyPreviousNotificationMatchingTag(const String&amp;);
&gt; &gt; 
&gt; &gt; Why isn&apos;t this static instead? It&apos;s only called from
&gt; &gt; WebKitNotificationProvider.cpp, no?
&gt; 
&gt; That can&apos;t be the rule to decide whether to make a function file-static as
&gt; then we would never have any private member functions at all, and that&apos;s not
&gt; the code style we follow. But it could indeed be easily made static if we
&gt; pass the m_notificationPermissions member. I chose to make it private to
&gt; avoid doing that because we don&apos;t have any guidance on which style is
&gt; preferred.

I&apos;m sorry, I thought that was Private.h header for a GObject implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253682</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-26 05:17:18 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Oh, right, I invented that rule for me :-P

I thought so. ;)
 
&gt; And I told you, ask Gustavo, who wrote the notifications API, and I&apos;ll just
&gt; check the API after his review.

I must have missed that, sorry.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295268</attachid>
            <date>2016-11-19 12:24:14 -0800</date>
            <delta_ts>2016-11-19 14:44:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164771-20161119142405.patch</filename>
            <type>text/plain</type>
            <size>12355</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzZiMWYxYjRhNWUxMjg0
M2UxNTliNjFjN2U4ZDJhZDU2MzRhZmE5ZC4uNTRjM2FjZGUwNThiZTgwMjNjZWExMGM4NjdhZWM1
NDRlYmFiZTI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE2LTExLTE5ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBO
b3RpZmljYXRpb25zIEFQSSBkb2VzIG5vdCBleHBvc2Ugb3IgcmVzcGVjdCB0aGUgInRhZyIgYXR0
cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHBvc2UgYSB0YWcgcHJvcGVydHkgb24gV2ViS2l0Tm90aWZpY2F0aW9uLiBFbnN1cmUgdGhhdCBh
bnkgcHJldmlvdXMgbm90aWZpY2F0aW9uIHdpdGggdGhlCisgICAgICAgIHNhbWUgdGFnIGlzIGNs
b3NlZCB3aGVuIHNob3dpbmcgYSBuZXcgbm90aWZpY2F0aW9uIHdpdGggdGhhdCB0YWcuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb24uY3BwOgorICAgICAg
ICAod2Via2l0X25vdGlmaWNhdGlvbl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdE5vdGlm
aWNhdGlvbkNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvbi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyOjp3aXRoZHJhd0FueVByZXZpb3VzTm90
aWZpY2F0aW9uTWF0Y2hpbmdUYWcpOgorICAgICAgICAoV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlk
ZXI6OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlv
blByb3ZpZGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LTQuMC1zZWN0aW9ucy50eHQ6CisKIDIwMTYtMTEtMTggIEplcmVteSBKb25lcyAgPGplcmVteWpA
YXBwbGUuY29tPgogCiAgICAgICAgIFVTRSBXS19NQUNfVEJBIGZvciB2ZXJzaW9uIG51bWJlciBp
biBfd2ViVmlld1JlcXVlc3RQb2ludGVyTG9jazooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElf
QVZBSUxBQkxFKG1hY29zeCgxMC4xMikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uLmNwcAppbmRleCBiMTdmMmUxOTJiZWVk
MjdlODQwNzdjNTFhNTE2YWVkODIyNTM5MGIxLi5kYjBhNjk0MDU5OWNiZTM2YTllZTliY2Q4Y2Jh
ZmQ3ZGUyZDc2OTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXROb3RpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvbi5jcHAKQEAgLTM5LDcgKzM5LDggQEAgZW51bSB7CiAK
ICAgICBQUk9QX0lELAogICAgIFBST1BfVElUTEUsCi0gICAgUFJPUF9CT0RZCisgICAgUFJPUF9C
T0RZLAorICAgIFBST1BfVEFHCiB9OwogCiBlbnVtIHsKQEAgLTUyLDYgKzUzLDcgQEAgZW51bSB7
CiBzdHJ1Y3QgX1dlYktpdE5vdGlmaWNhdGlvblByaXZhdGUgewogICAgIENTdHJpbmcgdGl0bGU7
CiAgICAgQ1N0cmluZyBib2R5OworICAgIENTdHJpbmcgdGFnOwogICAgIGd1aW50NjQgaWQ7CiAK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwpAQCAtNzUsNiArNzcsOSBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXROb3RpZmljYXRpb25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJZCwgR1ZhbHVlKgogICAgIGNhc2UgUFJPUF9CT0RZOgogICAgICAgICBnX3ZhbHVlX3NldF9z
dHJpbmcodmFsdWUsIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2JvZHkobm90aWZpY2F0aW9uKSk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQUc6CisgICAgICAgIGdfdmFsdWVfc2V0
X3N0cmluZyh2YWx1ZSwgd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfdGFnKG5vdGlmaWNhdGlvbikp
OworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAt
MTMxLDYgKzEzNiwyMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbm90aWZpY2F0aW9uX2NsYXNzX2lu
aXQoV2ViS2l0Tm90aWZpY2F0aW9uQ2xhc3MqIG5vdGlmaWNhdGlvbgogICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXROb3RpZmljYXRp
b246dGFnOgorICAgICAqCisgICAgICogVGhlIHRhZyBpZGVudGlmaWVyIGZvciB0aGUgbm90aWZp
Y2F0aW9uLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTYKKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBRywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygidGFnIiwKKyAgICAgICAgICAgIF8oIlRhZyIp
LAorICAgICAgICAgICAgXygiVGhlIHRhZyBpZGVudGlmaWVyIGZvciB0aGUgbm90aWZpY2F0aW9u
IiksCisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICAvKioKICAgICAgKiBXZWJLaXROb3RpZmljYXRpb246OmNsb3NlZDoKICAg
ICAgKiBAbm90aWZpY2F0aW9uOiB0aGUgI1dlYktpdE5vdGlmaWNhdGlvbiBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKgpAQCAtMTc2LDYgKzE5Niw3IEBAIFdlYktpdE5vdGlm
aWNhdGlvbiogd2Via2l0Tm90aWZpY2F0aW9uQ3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IFdlYktpCiAgICAgbm90aWZpY2F0aW9uLT5wcml2LT5pZCA9IHdlYk5vdGlmaWNhdGlv
bi5ub3RpZmljYXRpb25JRCgpOwogICAgIG5vdGlmaWNhdGlvbi0+cHJpdi0+dGl0bGUgPSB3ZWJO
b3RpZmljYXRpb24udGl0bGUoKS51dGY4KCk7CiAgICAgbm90aWZpY2F0aW9uLT5wcml2LT5ib2R5
ID0gd2ViTm90aWZpY2F0aW9uLmJvZHkoKS51dGY4KCk7CisgICAgbm90aWZpY2F0aW9uLT5wcml2
LT50YWcgPSB3ZWJOb3RpZmljYXRpb24udGFnKCkudXRmOCgpOwogICAgIG5vdGlmaWNhdGlvbi0+
cHJpdi0+d2ViVmlldyA9IHdlYlZpZXc7CiAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbjsKIH0KQEAg
LTIzNyw2ICsyNTgsMjMgQEAgY29uc3QgZ2NoYXIqIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2Jv
ZHkoV2ViS2l0Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB9CiAKIC8qKgorICogd2Via2l0
X25vdGlmaWNhdGlvbl9nZXRfdGFnOgorICogQG5vdGlmaWNhdGlvbjogYSAjV2ViS2l0Tm90aWZp
Y2F0aW9uCisgKgorICogT2J0YWlucyB0aGUgdGFnIGlkZW50aWZpZXIgZm9yIHRoZSBub3RpZmlj
YXRpb24uCisgKgorICogUmV0dXJuczogdGhlIHRhZyBmb3IgdGhlIG5vdGlmaWNhdGlvbgorICoK
KyAqIFNpbmNlOiAyLjE2CisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfbm90aWZpY2F0aW9uX2dl
dF90YWcoV2ViS2l0Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05PVElGSUNBVElPTihub3RpZmljYXRpb24pLCBudWxscHRy
KTsKKworICAgIHJldHVybiBub3RpZmljYXRpb24tPnByaXYtPnRhZy5kYXRhKCk7Cit9CisKKy8q
KgogICogd2Via2l0X25vdGlmaWNhdGlvbl9jbG9zZToKICAqIEBub3RpZmljYXRpb246IGEgI1dl
YktpdE5vdGlmaWNhdGlvbgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uLmgKaW5kZXggZjk5ZGQ5ODRhZmRhN2JlYjgxNDhk
NDMxNmU2N2RhOGQxZmFiOWYxYS4uMWZkOWFjNjQ2ODZkNDkxMzExY2U0MzRmOWMzZTQ0YzcwMTE2
NjJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Tm90aWZpY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Tm90aWZpY2F0aW9uLmgKQEAgLTcwLDYgKzcwLDkgQEAgd2Via2l0X25vdGlmaWNhdGlvbl9n
ZXRfdGl0bGUgICAgICAgICAgICAgICAgKFdlYktpdE5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9u
KTsKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfYm9k
eSAgICAgICAgICAgICAgICAgKFdlYktpdE5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKTsKIAor
V0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcgICAg
ICAgICAgICAgICAgICAoV2ViS2l0Tm90aWZpY2F0aW9uICpub3RpZmljYXRpb24pOworCiBXRUJL
SVRfQVBJIHZvaWQKIHdlYmtpdF9ub3RpZmljYXRpb25fY2xvc2UgICAgICAgICAgICAgICAgICAg
IChXZWJLaXROb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblBy
b3ZpZGVyLmNwcAppbmRleCA2MjA3NTBhNDQ3MDNlNmVhYTBmNTY2ODY0YmU3MTEwZDczZTI5ZWYy
Li5hOTE4NTNmZjZkOGQ0ZTMwYmQxZDk5ZmM2ZGIyMjg2NjU5NTU3ZGVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZp
Y2F0aW9uUHJvdmlkZXIuY3BwCkBAIC0xMDIsMTEgKzEwMiwzMCBAQCB2b2lkIFdlYktpdE5vdGlm
aWNhdGlvblByb3ZpZGVyOjpub3RpZmljYXRpb25DbGlja2VkQ2FsbGJhY2soV2ViS2l0Tm90aWZp
Y2F0aW9uKgogICAgIHByb3ZpZGVyLT5tX25vdGlmaWNhdGlvbk1hbmFnZXItPnByb3ZpZGVyRGlk
Q2xpY2tOb3RpZmljYXRpb24od2Via2l0X25vdGlmaWNhdGlvbl9nZXRfaWQobm90aWZpY2F0aW9u
KSk7CiB9CiAKK3ZvaWQgV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlkZXI6OndpdGhkcmF3QW55UHJl
dmlvdXNOb3RpZmljYXRpb25NYXRjaGluZ1RhZyhjb25zdCBTdHJpbmcmIHRhZykKK3sKKyAgICBp
ZiAodGFnLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBub3Rp
ZmljYXRpb24gOiBtX25vdGlmaWNhdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHRhZyA9
PSB3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcobm90aWZpY2F0aW9uLmdldCgpKSkgeworICAg
ICAgICAgICAgd2Via2l0X25vdGlmaWNhdGlvbl9jbG9zZShub3RpZmljYXRpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgZm9yIChhdXRvJiBub3RpZmljYXRpb24gOiBtX25vdGlmaWNhdGlvbnMudmFsdWVzKCkpCisg
ICAgICAgIEFTU0VSVCh0YWcgIT0gd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfdGFnKG5vdGlmaWNh
dGlvbi5nZXQoKSkpOworI2VuZGlmCit9CisKIHZvaWQgV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlk
ZXI6OnNob3coV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBXZWJOb3RpZmljYXRpb24mIHdlYk5v
dGlmaWNhdGlvbikKIHsKICAgICBHUmVmUHRyPFdlYktpdE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0
aW9uID0gbV9ub3RpZmljYXRpb25zLmdldCh3ZWJOb3RpZmljYXRpb24ubm90aWZpY2F0aW9uSUQo
KSk7CiAKICAgICBpZiAoIW5vdGlmaWNhdGlvbikgeworICAgICAgICB3aXRoZHJhd0FueVByZXZp
b3VzTm90aWZpY2F0aW9uTWF0Y2hpbmdUYWcod2ViTm90aWZpY2F0aW9uLnRhZygpKTsKICAgICAg
ICAgbm90aWZpY2F0aW9uID0gYWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNhdGlvbkNyZWF0ZShXRUJL
SVRfV0VCX1ZJRVcocGFnZS0+dmlld1dpZGdldCgpKSwgd2ViTm90aWZpY2F0aW9uKSk7CiAgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qobm90aWZpY2F0aW9uLmdldCgpLCAiY2xvc2VkIiwgR19DQUxM
QkFDSyhub3RpZmljYXRpb25DbG9zZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3Qobm90aWZpY2F0aW9uLmdldCgpLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sobm90aWZp
Y2F0aW9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlkZXIuaApp
bmRleCBlMDlkMmMwNDM1NTAzNmFkYzNjZjkzNTIxOWZiMDBlMjliZjYyMzMxLi5lOWIwMjVmNDU1
M2NhODA1MDFhNjgzNmI4OGVhMmNjN2E0ZDllYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVy
LmgKQEAgLTQ4LDYgKzQ4LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBub3RpZmljYXRp
b25DbG9zZUNhbGxiYWNrKFdlYktpdE5vdGlmaWNhdGlvbiosIFdlYktpdE5vdGlmaWNhdGlvblBy
b3ZpZGVyKik7CiAgICAgc3RhdGljIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZENhbGxiYWNrKFdl
YktpdE5vdGlmaWNhdGlvbiosIFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyKik7CiAKKyAgICB2
b2lkIHdpdGhkcmF3QW55UHJldmlvdXNOb3RpZmljYXRpb25NYXRjaGluZ1RhZyhjb25zdCBTdHJp
bmcmKTsKKwogICAgIFJlZlB0cjxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+IG1fbm90aWZp
Y2F0aW9uTWFuYWdlcjsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBHUmVmUHRyPFdlYktpdE5vdGlm
aWNhdGlvbj4+IG1fbm90aWZpY2F0aW9uczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlv
bnMudHh0CmluZGV4IDAwMmVmMzNhYTc5MmMyNWVhNjUzYjMxNjY0MTYyMmUzNDE4NDBkZGMuLjAx
MzAzZjY4OTM5ZTVjNDU1NTM2YWMzNDFmMjdmODgwYjI4MGVmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay00LjAtc2VjdGlvbnMudHh0CkBAIC02NzAsNiArNjcwLDcgQEAgV2ViS2l0Tm90aWZpY2F0aW9u
CiB3ZWJraXRfbm90aWZpY2F0aW9uX2dldF9pZAogd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfdGl0
bGUKIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2JvZHkKK3dlYmtpdF9ub3RpZmljYXRpb25fZ2V0
X3RhZwogd2Via2l0X25vdGlmaWNhdGlvbl9jbG9zZQogd2Via2l0X25vdGlmaWNhdGlvbl9jbGlj
a2VkCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA1NDljYTM5NzI4Mjc3OTYyNTQ1MjNmNGRmZjFhZDVhMmY3ZWM5NDNmLi5iOGM5ZjE1YWI1Njg5
MmFmYzNjOTZhNjk3MjZhNjU5YTFlNjk2MzkyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMTEtMTkgIE1pY2hh
ZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE5v
dGlmaWNhdGlvbnMgQVBJIGRvZXMgbm90IGV4cG9zZSBvciByZXNwZWN0IHRoZSAidGFnIiBhdHRy
aWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDc3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZl
cmlmeSB0aGF0IHNob3dpbmcgYSBub3RpZmljYXRpb24gd2l0aCB0aGUgc2FtZSB0YWcgYXMgYW5v
dGhlciBub3RpZmljYXRpb24gY2xvc2VzIHRoZQorICAgICAgICBwcmV2aW91cyBub3RpZmljYXRp
b24gYmVmb3JlIHRoZSBuZXcgbm90aWZpY2F0aW9uIGlzIHNob3duLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAg
ICAgKHRlc3RXZWJWaWV3Tm90aWZpY2F0aW9uKToKKwogMjAxNi0xMS0xOCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBBUEkgdGVzdCBh
ZnRlciByMjA4OTAyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAppbmRleCBmOGUzY2JmN2I3OWRlYWQ2ZjJk
ZmYzMzdiNGJhNDBmYWIyMGExOGZiLi4xNmI3NWY4YjRlM2Y0NGEyZWQ5NDhhMjZmN2I0YmMxN2Ex
ZGFkNTdmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTY3Nyw2ICs2NzcsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgZ2Jvb2xlYW4gc2hvd05vdGlmaWNhdGlvbkNhbGxiYWNrKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXROb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgTm90aWZpY2F0aW9uV2Vi
Vmlld1Rlc3QqIHRlc3QpCiAgICAgeworICAgICAgICBnX2Fzc2VydCghdGVzdC0+bV9ub3RpZmlj
YXRpb24pOwogICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKG5vdGlmaWNhdGlvbikpOwogICAgICAgICB0ZXN0LT5tX25vdGlmaWNhdGlv
biA9IG5vdGlmaWNhdGlvbjsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChub3RpZmljYXRpb24s
ICJjbG9zZWQiLCBHX0NBTExCQUNLKG5vdGlmaWNhdGlvbkNsb3NlZENhbGxiYWNrKSwgdGVzdCk7
CkBAIC03MjIsMTEgKzcyMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKICAgICB9CiAKLSAgICB2b2lkIHJlcXVlc3ROb3RpZmljYXRpb25BbmRXYWl0
VW50aWxTaG93bihjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogYm9keSkKKyAgICB2b2lk
IHJlcXVlc3ROb3RpZmljYXRpb25BbmRXYWl0VW50aWxTaG93bihjb25zdCBjaGFyKiB0aXRsZSwg
Y29uc3QgY2hhciogYm9keSwgY29uc3QgY2hhciogdGFnKQogICAgIHsKICAgICAgICAgbV9ldmVu
dCA9IE5vbmU7CiAKLSAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBqc2NvZGUoZ19zdHJkdXBfcHJp
bnRmKCJuID0gbmV3IE5vdGlmaWNhdGlvbignJXMnLCB7IGJvZHk6ICclcyd9KTsiLCB0aXRsZSwg
Ym9keSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGpzY29kZShnX3N0cmR1cF9wcmludGYo
Im4gPSBuZXcgTm90aWZpY2F0aW9uKCclcycsIHsgYm9keTogJyVzJywgdGFnOiAnJXMnfSk7Iiwg
dGl0bGUsIGJvZHksIHRhZykpOwogICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3Jp
cHQobV93ZWJWaWV3LCBqc2NvZGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwog
CiAgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKQEAgLTc3MywxMiArNzc0LDE0
IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbldlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdGl0
bGUgPSAiVGhpcyBpcyBhIG5vdGlmaWNhdGlvbiI7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGJv
ZHkgPSAiVGhpcyBpcyB0aGUgYm9keS4iOwotICAgIHRlc3QtPnJlcXVlc3ROb3RpZmljYXRpb25B
bmRXYWl0VW50aWxTaG93bih0aXRsZSwgYm9keSk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRh
ZyA9ICJUaGlzIGlzIHRoZSB0YWcuIjsKKyAgICB0ZXN0LT5yZXF1ZXN0Tm90aWZpY2F0aW9uQW5k
V2FpdFVudGlsU2hvd24odGl0bGUsIGJvZHksIHRhZyk7CiAKICAgICBnX2Fzc2VydCh0ZXN0LT5t
X2V2ZW50ID09IE5vdGlmaWNhdGlvbldlYlZpZXdUZXN0OjpTaG93bik7CiAgICAgZ19hc3NlcnQo
dGVzdC0+bV9ub3RpZmljYXRpb24pOwogICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbm90aWZp
Y2F0aW9uX2dldF90aXRsZSh0ZXN0LT5tX25vdGlmaWNhdGlvbiksID09LCB0aXRsZSk7CiAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2JvZHkodGVzdC0+bV9ub3Rp
ZmljYXRpb24pLCA9PSwgYm9keSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9ub3RpZmlj
YXRpb25fZ2V0X3RhZyh0ZXN0LT5tX25vdGlmaWNhdGlvbiksID09LCB0YWcpOwogCiAgICAgdGVz
dC0+Y2xpY2tOb3RpZmljYXRpb25BbmRXYWl0VW50aWxDbGlja2VkKCk7CiAgICAgZ19hc3NlcnQo
dGVzdC0+bV9ldmVudCA9PSBOb3RpZmljYXRpb25XZWJWaWV3VGVzdDo6T25DbGlja2VkKTsKQEAg
LTc4NiwxNSArNzg5LDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Tm90aWZpY2F0aW9uKE5v
dGlmaWNhdGlvbldlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAgICAgdGVzdC0+Y2xv
c2VOb3RpZmljYXRpb25BbmRXYWl0VW50aWxDbG9zZWQoKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5t
X2V2ZW50ID09IE5vdGlmaWNhdGlvbldlYlZpZXdUZXN0OjpDbG9zZWQpOwogCi0gICAgdGVzdC0+
cmVxdWVzdE5vdGlmaWNhdGlvbkFuZFdhaXRVbnRpbFNob3duKHRpdGxlLCBib2R5KTsKKyAgICB0
ZXN0LT5yZXF1ZXN0Tm90aWZpY2F0aW9uQW5kV2FpdFVudGlsU2hvd24odGl0bGUsIGJvZHksIHRh
Zyk7CiAgICAgZ19hc3NlcnQodGVzdC0+bV9ldmVudCA9PSBOb3RpZmljYXRpb25XZWJWaWV3VGVz
dDo6U2hvd24pOwogCiAgICAgdGVzdC0+Y2xvc2VOb3RpZmljYXRpb25BbmRXYWl0VW50aWxPbkNs
b3NlZCgpOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXZlbnQgPT0gTm90aWZpY2F0aW9uV2ViVmll
d1Rlc3Q6Ok9uQ2xvc2VkKTsKIAotICAgIHRlc3QtPnJlcXVlc3ROb3RpZmljYXRpb25BbmRXYWl0
VW50aWxTaG93bih0aXRsZSwgYm9keSk7CisgICAgLy8gVGhlIGZpcnN0IG5vdGlmaWNhdGlvbiBz
aG91bGQgYmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSB0aGUgdGFnIGlzCisgICAgLy8g
dGhlIHNhbWUuIEl0IHdpbGwgY3Jhc2ggaW4gc2hvd05vdGlmaWNhdGlvbkNhbGxiYWNrIG9uIGZh
aWx1cmUuCisgICAgdGVzdC0+cmVxdWVzdE5vdGlmaWNhdGlvbkFuZFdhaXRVbnRpbFNob3duKHRp
dGxlLCBib2R5LCB0YWcpOworICAgIHRlc3QtPnJlcXVlc3ROb3RpZmljYXRpb25BbmRXYWl0VW50
aWxTaG93bih0aXRsZSwgYm9keSwgdGFnKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5tX2V2ZW50ID09
IE5vdGlmaWNhdGlvbldlYlZpZXdUZXN0OjpTaG93bik7CiAKKyAgICAvLyBOb3RpZmljYXRpb24g
c2hvdWxkIGJlIGNsb3NlZCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgd2VicGFnZS4K
ICAgICB0ZXN0LT5sb2FkVVJJKGdTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwog
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1f
ZXZlbnQgPT0gTm90aWZpY2F0aW9uV2ViVmlld1Rlc3Q6OkNsb3NlZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295271</attachid>
            <date>2016-11-19 14:44:35 -0800</date>
            <delta_ts>2016-11-24 12:10:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164771-20161119164426.patch</filename>
            <type>text/plain</type>
            <size>12243</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzBlYTg0NTEwOGI4MjFh
MjVlOWNjZWM3OWM4OTQ2OGM4ZmRlNzM5Zi4uMzY4ZjNhZDc0ZTIwN2M3ZTZjNzdjODdiOTM1NTBi
MzliNjAyMmYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE2LTExLTE5ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBO
b3RpZmljYXRpb25zIEFQSSBkb2VzIG5vdCBleHBvc2Ugb3IgcmVzcGVjdCB0aGUgInRhZyIgYXR0
cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHBvc2UgYSB0YWcgcHJvcGVydHkgb24gV2ViS2l0Tm90aWZpY2F0aW9uLiBFbnN1cmUgdGhhdCBh
bnkgcHJldmlvdXMgbm90aWZpY2F0aW9uIHdpdGggdGhlCisgICAgICAgIHNhbWUgdGFnIGlzIGNs
b3NlZCB3aGVuIHNob3dpbmcgYSBuZXcgbm90aWZpY2F0aW9uIHdpdGggdGhhdCB0YWcuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb24uY3BwOgorICAgICAg
ICAod2Via2l0X25vdGlmaWNhdGlvbl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdE5vdGlm
aWNhdGlvbkNyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvbi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyOjp3aXRoZHJhd0FueVByZXZpb3VzTm90
aWZpY2F0aW9uTWF0Y2hpbmdUYWcpOgorICAgICAgICAoV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlk
ZXI6OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlv
blByb3ZpZGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LTQuMC1zZWN0aW9ucy50eHQ6CisKIDIwMTYtMTEtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBXSzJdIFdoZW4gem9vbWVkIGluIGFuZCBw
YW5uaW5nIG9uIHBhZ2VzIHdpdGggZml4ZWQgYmFycywgcGFydHMgb2YgdGhlIGJhcnMgYXJlIHNv
bWV0aW1lcyBtaXNzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROb3RpZmljYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uLmNwcAppbmRleCBiMTdmMmUxOTJiZWVkMjdlODQwNzdj
NTFhNTE2YWVkODIyNTM5MGIxLi41ZjY4ZTkxNjA1ZmZlYWU4YmE5NWYyNDE1MWU4MTRhMjYyMDZm
YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
b3RpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE5vdGlmaWNhdGlvbi5jcHAKQEAgLTM5LDcgKzM5LDggQEAgZW51bSB7CiAKICAgICBQUk9Q
X0lELAogICAgIFBST1BfVElUTEUsCi0gICAgUFJPUF9CT0RZCisgICAgUFJPUF9CT0RZLAorICAg
IFBST1BfVEFHCiB9OwogCiBlbnVtIHsKQEAgLTUyLDYgKzUzLDcgQEAgZW51bSB7CiBzdHJ1Y3Qg
X1dlYktpdE5vdGlmaWNhdGlvblByaXZhdGUgewogICAgIENTdHJpbmcgdGl0bGU7CiAgICAgQ1N0
cmluZyBib2R5OworICAgIENTdHJpbmcgdGFnOwogICAgIGd1aW50NjQgaWQ7CiAKICAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OwpAQCAtNzUsNiArNzcsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRO
b3RpZmljYXRpb25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1Zh
bHVlKgogICAgIGNhc2UgUFJPUF9CT0RZOgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFs
dWUsIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2JvZHkobm90aWZpY2F0aW9uKSk7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9UQUc6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2
YWx1ZSwgd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfdGFnKG5vdGlmaWNhdGlvbikpOworICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAtMTMxLDYgKzEz
NiwyMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbm90aWZpY2F0aW9uX2NsYXNzX2luaXQoV2ViS2l0
Tm90aWZpY2F0aW9uQ2xhc3MqIG5vdGlmaWNhdGlvbgogICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXROb3RpZmljYXRpb246dGFnOgor
ICAgICAqCisgICAgICogVGhlIHRhZyBpZGVudGlmaWVyIGZvciB0aGUgbm90aWZpY2F0aW9uLgor
ICAgICAqCisgICAgICogU2luY2U6IDIuMTYKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBRywKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygidGFnIiwKKyAgICAgICAgICAgIF8oIlRhZyIpLAorICAgICAg
ICAgICAgXygiVGhlIHRhZyBpZGVudGlmaWVyIGZvciB0aGUgbm90aWZpY2F0aW9uIiksCisgICAg
ICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAvKioKICAgICAgKiBXZWJLaXROb3RpZmljYXRpb246OmNsb3NlZDoKICAgICAgKiBAbm90
aWZpY2F0aW9uOiB0aGUgI1dlYktpdE5vdGlmaWNhdGlvbiBvbiB3aGljaCB0aGUgc2lnbmFsIGlz
IGVtaXR0ZWQKICAgICAgKgpAQCAtMTc2LDYgKzE5Niw3IEBAIFdlYktpdE5vdGlmaWNhdGlvbiog
d2Via2l0Tm90aWZpY2F0aW9uQ3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IFdl
YktpCiAgICAgbm90aWZpY2F0aW9uLT5wcml2LT5pZCA9IHdlYk5vdGlmaWNhdGlvbi5ub3RpZmlj
YXRpb25JRCgpOwogICAgIG5vdGlmaWNhdGlvbi0+cHJpdi0+dGl0bGUgPSB3ZWJOb3RpZmljYXRp
b24udGl0bGUoKS51dGY4KCk7CiAgICAgbm90aWZpY2F0aW9uLT5wcml2LT5ib2R5ID0gd2ViTm90
aWZpY2F0aW9uLmJvZHkoKS51dGY4KCk7CisgICAgbm90aWZpY2F0aW9uLT5wcml2LT50YWcgPSB3
ZWJOb3RpZmljYXRpb24udGFnKCkudXRmOCgpOwogICAgIG5vdGlmaWNhdGlvbi0+cHJpdi0+d2Vi
VmlldyA9IHdlYlZpZXc7CiAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbjsKIH0KQEAgLTIzNyw2ICsy
NTgsMjQgQEAgY29uc3QgZ2NoYXIqIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2JvZHkoV2ViS2l0
Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB9CiAKIC8qKgorICogd2Via2l0X25vdGlmaWNh
dGlvbl9nZXRfdGFnOgorICogQG5vdGlmaWNhdGlvbjogYSAjV2ViS2l0Tm90aWZpY2F0aW9uCisg
KgorICogT2J0YWlucyB0aGUgdGFnIGlkZW50aWZpZXIgZm9yIHRoZSBub3RpZmljYXRpb24uCisg
KgorICogUmV0dXJuczogKGFsbG93LW5vbmUpOiB0aGUgdGFnIGZvciB0aGUgbm90aWZpY2F0aW9u
CisgKgorICogU2luY2U6IDIuMTYKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9ub3RpZmljYXRp
b25fZ2V0X3RhZyhXZWJLaXROb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTk9USUZJQ0FUSU9OKG5vdGlmaWNhdGlvbiksIG51
bGxwdHIpOworCisgICAgY29uc3QgZ2NoYXIqIHRhZyA9IG5vdGlmaWNhdGlvbi0+cHJpdi0+dGFn
LmRhdGEoKTsKKyAgICByZXR1cm4gc3RybGVuKHRhZykgPiAwID8gdGFnIDogbnVsbHB0cjsKK30K
KworLyoqCiAgKiB3ZWJraXRfbm90aWZpY2F0aW9uX2Nsb3NlOgogICogQG5vdGlmaWNhdGlvbjog
YSAjV2ViS2l0Tm90aWZpY2F0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb24uaAppbmRleCBmOTlkZDk4NGFmZGE3YmVi
ODE0OGQ0MzE2ZTY3ZGE4ZDFmYWI5ZjFhLi4xZmQ5YWM2NDY4NmQ0OTEzMTFjZTQzNGY5YzNlNDRj
NzAxMTY2MmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXROb3RpZmljYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXROb3RpZmljYXRpb24uaApAQCAtNzAsNiArNzAsOSBAQCB3ZWJraXRfbm90aWZpY2F0
aW9uX2dldF90aXRsZSAgICAgICAgICAgICAgICAoV2ViS2l0Tm90aWZpY2F0aW9uICpub3RpZmlj
YXRpb24pOwogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCiB3ZWJraXRfbm90aWZpY2F0aW9uX2dl
dF9ib2R5ICAgICAgICAgICAgICAgICAoV2ViS2l0Tm90aWZpY2F0aW9uICpub3RpZmljYXRpb24p
OwogCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9ub3RpZmljYXRpb25fZ2V0X3Rh
ZyAgICAgICAgICAgICAgICAgIChXZWJLaXROb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbik7CisK
IFdFQktJVF9BUEkgdm9pZAogd2Via2l0X25vdGlmaWNhdGlvbl9jbG9zZSAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdE5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlk
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0
aW9uUHJvdmlkZXIuY3BwCmluZGV4IDYyMDc1MGE0NDcwM2U2ZWFhMGY1NjY4NjRiZTcxMTBkNzNl
MjllZjIuLmE5MTg1M2ZmNmQ4ZDRlMzBiZDFkOTlmYzZkYjIyODY2NTk1NTdkZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblBy
b3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTEwMiwxMSArMTAyLDMwIEBAIHZvaWQgV2ViS2l0
Tm90aWZpY2F0aW9uUHJvdmlkZXI6Om5vdGlmaWNhdGlvbkNsaWNrZWRDYWxsYmFjayhXZWJLaXRO
b3RpZmljYXRpb24qCiAgICAgcHJvdmlkZXItPm1fbm90aWZpY2F0aW9uTWFuYWdlci0+cHJvdmlk
ZXJEaWRDbGlja05vdGlmaWNhdGlvbih3ZWJraXRfbm90aWZpY2F0aW9uX2dldF9pZChub3RpZmlj
YXRpb24pKTsKIH0KIAordm9pZCBXZWJLaXROb3RpZmljYXRpb25Qcm92aWRlcjo6d2l0aGRyYXdB
bnlQcmV2aW91c05vdGlmaWNhdGlvbk1hdGNoaW5nVGFnKGNvbnN0IFN0cmluZyYgdGFnKQorewor
ICAgIGlmICh0YWcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8m
IG5vdGlmaWNhdGlvbiA6IG1fbm90aWZpY2F0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBpZiAo
dGFnID09IHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X3RhZyhub3RpZmljYXRpb24uZ2V0KCkpKSB7
CisgICAgICAgICAgICB3ZWJraXRfbm90aWZpY2F0aW9uX2Nsb3NlKG5vdGlmaWNhdGlvbi5nZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBOREVC
VUcKKyAgICBmb3IgKGF1dG8mIG5vdGlmaWNhdGlvbiA6IG1fbm90aWZpY2F0aW9ucy52YWx1ZXMo
KSkKKyAgICAgICAgQVNTRVJUKHRhZyAhPSB3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcobm90
aWZpY2F0aW9uLmdldCgpKSk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJLaXROb3RpZmljYXRpb25Q
cm92aWRlcjo6c2hvdyhXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYg
d2ViTm90aWZpY2F0aW9uKQogewogICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZpY2F0aW9uPiBub3Rp
ZmljYXRpb24gPSBtX25vdGlmaWNhdGlvbnMuZ2V0KHdlYk5vdGlmaWNhdGlvbi5ub3RpZmljYXRp
b25JRCgpKTsKIAogICAgIGlmICghbm90aWZpY2F0aW9uKSB7CisgICAgICAgIHdpdGhkcmF3QW55
UHJldmlvdXNOb3RpZmljYXRpb25NYXRjaGluZ1RhZyh3ZWJOb3RpZmljYXRpb24udGFnKCkpOwog
ICAgICAgICBub3RpZmljYXRpb24gPSBhZG9wdEdSZWYod2Via2l0Tm90aWZpY2F0aW9uQ3JlYXRl
KFdFQktJVF9XRUJfVklFVyhwYWdlLT52aWV3V2lkZ2V0KCkpLCB3ZWJOb3RpZmljYXRpb24pKTsK
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChub3RpZmljYXRpb24uZ2V0KCksICJjbG9zZWQiLCBH
X0NBTExCQUNLKG5vdGlmaWNhdGlvbkNsb3NlQ2FsbGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19z
aWduYWxfY29ubmVjdChub3RpZmljYXRpb24uZ2V0KCksICJjbGlja2VkIiwgR19DQUxMQkFDSyhu
b3RpZmljYXRpb25DbGlja2VkQ2FsbGJhY2spLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb25Qcm92aWRl
ci5oCmluZGV4IGUwOWQyYzA0MzU1MDM2YWRjM2NmOTM1MjE5ZmIwMGUyOWJmNjIzMzEuLmU5YjAy
NWY0NTUzY2E4MDUwMWE2ODM2Yjg4ZWEyY2M3YTRkOWViOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9uUHJv
dmlkZXIuaApAQCAtNDgsNiArNDgsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIG5vdGlm
aWNhdGlvbkNsb3NlQ2FsbGJhY2soV2ViS2l0Tm90aWZpY2F0aW9uKiwgV2ViS2l0Tm90aWZpY2F0
aW9uUHJvdmlkZXIqKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZmljYXRpb25DbGlja2VkQ2FsbGJh
Y2soV2ViS2l0Tm90aWZpY2F0aW9uKiwgV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlkZXIqKTsKIAor
ICAgIHZvaWQgd2l0aGRyYXdBbnlQcmV2aW91c05vdGlmaWNhdGlvbk1hdGNoaW5nVGFnKGNvbnN0
IFN0cmluZyYpOworCiAgICAgUmVmUHRyPFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4gbV9u
b3RpZmljYXRpb25NYW5hZ2VyOwogICAgIEhhc2hNYXA8dWludDY0X3QsIEdSZWZQdHI8V2ViS2l0
Tm90aWZpY2F0aW9uPj4gbV9ub3RpZmljYXRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1z
ZWN0aW9ucy50eHQKaW5kZXggMDAyZWYzM2FhNzkyYzI1ZWE2NTNiMzE2NjQxNjIyZTM0MTg0MGRk
Yy4uMDEzMDNmNjg5MzllNWM0NTU1MzZhYzM0MWYyN2Y4ODBiMjgwZWY1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0
aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTY3MCw2ICs2NzAsNyBAQCBXZWJLaXROb3RpZmlj
YXRpb24KIHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X2lkCiB3ZWJraXRfbm90aWZpY2F0aW9uX2dl
dF90aXRsZQogd2Via2l0X25vdGlmaWNhdGlvbl9nZXRfYm9keQord2Via2l0X25vdGlmaWNhdGlv
bl9nZXRfdGFnCiB3ZWJraXRfbm90aWZpY2F0aW9uX2Nsb3NlCiB3ZWJraXRfbm90aWZpY2F0aW9u
X2NsaWNrZWQKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDA4YzA4NDY4M2Y1MmU5YzZhZGQyNWQzOGY0Y2RhYThiMmYwYWY1NjguLmY3MGRjZTk1
OTY4OWQ1ZGE2YTBjYTg4YjRlZmQwYzM4ODlhN2M2NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMS0xOSAg
TWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gTm90aWZpY2F0aW9ucyBBUEkgZG9lcyBub3QgZXhwb3NlIG9yIHJlc3BlY3QgdGhlICJ0YWci
IGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0NzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVmVyaWZ5IHRoYXQgc2hvd2luZyBhIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHRhZyBh
cyBhbm90aGVyIG5vdGlmaWNhdGlvbiBjbG9zZXMgdGhlCisgICAgICAgIHByZXZpb3VzIG5vdGlm
aWNhdGlvbiBiZWZvcmUgdGhlIG5ldyBub3RpZmljYXRpb24gaXMgc2hvd24uCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgor
ICAgICAgICAodGVzdFdlYlZpZXdOb3RpZmljYXRpb24pOgorCiAyMDE2LTExLTE4ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdGVzdCBub24tc3RhYmxlLXN0YXRlIHNjcm9sbGluZyBvbiBpT1MKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZp
ZXcuY3BwCmluZGV4IGY4ZTNjYmY3Yjc5ZGVhZDZmMmRmZjMzN2I0YmE0MGZhYjIwYTE4ZmIuLjI5
MmY1NTYxNjAzMDhhMGI5Yzk1M2UxYmEzMjE0YjUwZDUzNWVlZjkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApAQCAtNjc3LDYgKzY3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBnYm9vbGVhbiBz
aG93Tm90aWZpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdE5vdGlmaWNhdGlv
biogbm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25XZWJWaWV3VGVzdCogdGVzdCkKICAgICB7Cisg
ICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX25vdGlmaWNhdGlvbik7CiAgICAgICAgIHRlc3QtPmFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qobm90aWZpY2F0aW9u
KSk7CiAgICAgICAgIHRlc3QtPm1fbm90aWZpY2F0aW9uID0gbm90aWZpY2F0aW9uOwogICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG5vdGlmaWNhdGlvbiwgImNsb3NlZCIsIEdfQ0FMTEJBQ0sobm90
aWZpY2F0aW9uQ2xvc2VkQ2FsbGJhY2spLCB0ZXN0KTsKQEAgLTczMiw2ICs3MzMsMTYgQEAgcHVi
bGljOgogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiAgICAgfQogCisgICAg
dm9pZCByZXF1ZXN0Tm90aWZpY2F0aW9uQW5kV2FpdFVudGlsU2hvd24oY29uc3QgY2hhciogdGl0
bGUsIGNvbnN0IGNoYXIqIGJvZHksIGNvbnN0IGNoYXIqIHRhZykKKyAgICB7CisgICAgICAgIG1f
ZXZlbnQgPSBOb25lOworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4ganNjb2RlKGdfc3RyZHVw
X3ByaW50ZigibiA9IG5ldyBOb3RpZmljYXRpb24oJyVzJywgeyBib2R5OiAnJXMnLCB0YWc6ICcl
cyd9KTsiLCB0aXRsZSwgYm9keSwgdGFnKSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19ydW5f
amF2YXNjcmlwdChtX3dlYlZpZXcsIGpzY29kZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0cik7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKwog
ICAgIHZvaWQgY2xpY2tOb3RpZmljYXRpb25BbmRXYWl0VW50aWxDbGlja2VkKCkKICAgICB7CiAg
ICAgICAgIG1fZXZlbnQgPSBOb25lOwpAQCAtNzczLDEyICs3ODQsMTQgQEAgc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uV2ViVmlld1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0aXRsZSA9ICJUaGlzIGlzIGEg
bm90aWZpY2F0aW9uIjsKICAgICBzdGF0aWMgY29uc3QgY2hhciogYm9keSA9ICJUaGlzIGlzIHRo
ZSBib2R5LiI7Ci0gICAgdGVzdC0+cmVxdWVzdE5vdGlmaWNhdGlvbkFuZFdhaXRVbnRpbFNob3du
KHRpdGxlLCBib2R5KTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGFnID0gIlRoaXMgaXMgdGhl
IHRhZy4iOworICAgIHRlc3QtPnJlcXVlc3ROb3RpZmljYXRpb25BbmRXYWl0VW50aWxTaG93bih0
aXRsZSwgYm9keSwgdGFnKTsKIAogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXZlbnQgPT0gTm90aWZp
Y2F0aW9uV2ViVmlld1Rlc3Q6OlNob3duKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5tX25vdGlmaWNh
dGlvbik7CiAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9ub3RpZmljYXRpb25fZ2V0X3RpdGxl
KHRlc3QtPm1fbm90aWZpY2F0aW9uKSwgPT0sIHRpdGxlKTsKICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X25vdGlmaWNhdGlvbl9nZXRfYm9keSh0ZXN0LT5tX25vdGlmaWNhdGlvbiksID09LCBi
b2R5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25vdGlmaWNhdGlvbl9nZXRfdGFnKHRl
c3QtPm1fbm90aWZpY2F0aW9uKSwgPT0sIHRhZyk7CiAKICAgICB0ZXN0LT5jbGlja05vdGlmaWNh
dGlvbkFuZFdhaXRVbnRpbENsaWNrZWQoKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5tX2V2ZW50ID09
IE5vdGlmaWNhdGlvbldlYlZpZXdUZXN0OjpPbkNsaWNrZWQpOwpAQCAtNzg4LDEzICs4MDEsMTgg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIKIAogICAgIHRlc3QtPnJlcXVlc3ROb3RpZmljYXRp
b25BbmRXYWl0VW50aWxTaG93bih0aXRsZSwgYm9keSk7CiAgICAgZ19hc3NlcnQodGVzdC0+bV9l
dmVudCA9PSBOb3RpZmljYXRpb25XZWJWaWV3VGVzdDo6U2hvd24pOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfbm90aWZpY2F0aW9uX2dldF90YWcodGVzdC0+bV9ub3RpZmljYXRpb24pLCA9
PSwgbnVsbHB0cik7CiAKICAgICB0ZXN0LT5jbG9zZU5vdGlmaWNhdGlvbkFuZFdhaXRVbnRpbE9u
Q2xvc2VkKCk7CiAgICAgZ19hc3NlcnQodGVzdC0+bV9ldmVudCA9PSBOb3RpZmljYXRpb25XZWJW
aWV3VGVzdDo6T25DbG9zZWQpOwogCi0gICAgdGVzdC0+cmVxdWVzdE5vdGlmaWNhdGlvbkFuZFdh
aXRVbnRpbFNob3duKHRpdGxlLCBib2R5KTsKKyAgICAvLyBUaGUgZmlyc3Qgbm90aWZpY2F0aW9u
IHNob3VsZCBiZSBjbG9zZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIHRoZSB0YWcgaXMKKyAgICAv
LyB0aGUgc2FtZS4gSXQgd2lsbCBjcmFzaCBpbiBzaG93Tm90aWZpY2F0aW9uQ2FsbGJhY2sgb24g
ZmFpbHVyZS4KKyAgICB0ZXN0LT5yZXF1ZXN0Tm90aWZpY2F0aW9uQW5kV2FpdFVudGlsU2hvd24o
dGl0bGUsIGJvZHksIHRhZyk7CisgICAgdGVzdC0+cmVxdWVzdE5vdGlmaWNhdGlvbkFuZFdhaXRV
bnRpbFNob3duKHRpdGxlLCBib2R5LCB0YWcpOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXZlbnQg
PT0gTm90aWZpY2F0aW9uV2ViVmlld1Rlc3Q6OlNob3duKTsKIAorICAgIC8vIE5vdGlmaWNhdGlv
biBzaG91bGQgYmUgY2xvc2VkIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCB3ZWJwYWdl
LgogICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7
CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgZ19hc3NlcnQodGVzdC0+
bV9ldmVudCA9PSBOb3RpZmljYXRpb25XZWJWaWV3VGVzdDo6Q2xvc2VkKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>