<?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>73855</bug_id>
          
          <creation_ts>2011-12-05 12:37:44 -0800</creation_ts>
          <short_desc>WebInspectorServer for WebKit2.</short_desc>
          <delta_ts>2012-04-03 06:35:25 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73094</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>sam</cc>
    
    <cc>seokju.kwon</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>515308</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-12-05 12:37:44 -0800</bug_when>
    <thetext>WebInspectorServer for WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515309</commentid>
    <comment_count>1</comment_count>
      <attachid>117921</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-12-05 12:38:46 -0800</bug_when>
    <thetext>Created attachment 117921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540206</commentid>
    <comment_count>2</comment_count>
      <attachid>117921</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-01-21 18:32:06 -0800</bug_when>
    <thetext>Comment on attachment 117921
Patch

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

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:100
&gt; +    ASSERT(connection);

You need to handle a NULL connection here. That will happen e.g. when the user closes the remote client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591361</commentid>
    <comment_count>3</comment_count>
      <attachid>134625</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-03-29 11:27:52 -0700</bug_when>
    <thetext>Created attachment 134625
Patch

- Rebased
- Fixed the disconnection null connection bug
- Fixed another problem when reconnecting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593134</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-01 19:31:32 -0700</bug_when>
    <thetext>Can you explain what this is for, and why WebKit2 needs code for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593290</commentid>
    <comment_count>5</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-02 02:47:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can you explain what this is for, and why WebKit2 needs code for it?

This is an implementation of Chromium&apos;s remote debugging for WebKit2.
http://www.webkit.org/blog/1620/webkit-remote-debugging/

We&apos;re planning to primarily support remote debugging for the Qt port of WebKit2 instead of an in-process inspector, to make it easier to deploy on devices.
We&apos;ll check later if we need to also expose the in-process inspector in our API.

The code could be either owned by WebCore, WebKit2 or the Qt port of WebKit2. I can&apos;t say if WebKit2 needs it, but this code would be beneficial for Qt and other WebKit2 ports only need to compile the code and start the server if they want to use it.
See bug #51364 and bug #73094 to see where this came from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593371</commentid>
    <comment_count>6</comment_count>
      <attachid>134625</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-02 05:11:39 -0700</bug_when>
    <thetext>Comment on attachment 134625
Patch

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

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:55
&gt; +    static WebInspectorServer* staticServer = new WebInspectorServer;

s_server ?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:144
&gt; +    // Invalid page id.
&gt; +    int pageId = pageIdFromRequestPath(path);
&gt; +    if (!pageId)

Shouldnt that comment be on the next line

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:165
&gt; +    // Ignore connections to a page that already have a remote inspector connected.
&gt; +    if (m_connectionMap.contains(pageId)) {
&gt; +        connection-&gt;shutdownNow();
&gt; +        return;
&gt; +    }

Shouldn&apos;t the user be notified in some way?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:186
&gt; +    // Connection has already shutdown.

shut down*

&gt; Source/WebKit2/UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:37
&gt; +bool WebInspectorServer::platformResourceForPath(const String&amp; path, Vector&lt;char&gt;&amp; data, String&amp; contentType)
&gt; +{
&gt; +    if (path == &quot;/pagelist.json&quot;) {
&gt; +        buildPageList(data, contentType);

Wouldn&apos;t the comments form the change log make sense here as well?

&gt; Source/WebKit2/UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:69
&gt; +        builder.append(&quot;{ \&quot;description\&quot;: \&quot;&quot;);
&gt; +        builder.append(webPage-&gt;pageTitle());
&gt; +        builder.append(&quot;\&quot;, \&quot;inspectorLocation\&quot;: \&quot;&quot;);
&gt; +        builder.append(&quot;/webkit/inspector/inspector.html?page=&quot; + String::number(iter-&gt;first));

wouldn&apos;t adding the url make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593455</commentid>
    <comment_count>7</comment_count>
      <attachid>135099</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-02 07:38:31 -0700</bug_when>
    <thetext>Created attachment 135099
Patch

- Addressed noted issues.
- Changed touched Nokia copyrights to 2012.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594345</commentid>
    <comment_count>8</comment_count>
      <attachid>135099</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-03 03:32:10 -0700</bug_when>
    <thetext>Comment on attachment 135099
Patch

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

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:57
&gt; +WebInspectorServer* WebInspectorServer::server()
&gt; +{
&gt; +    static WebInspectorServer* s_server = new WebInspectorServer;
&gt; +    return s_server;
&gt; +}

I think the more common pattern is a reference and a shared() method, like this:


WebProcess&amp; WebProcess::shared()
{
    static WebProcess&amp; process = *new WebProcess;
    return process;
}

&gt; Source/WebKit2/UIProcess/InspectorServer/WebInspectorServer.cpp:106
&gt; +    String path = request-&gt;url();

A comment would be good here explaining how what seems like a generic url is just the path that follows the &quot;GET &quot; of the HTTP request.

&gt; Source/WebKit2/UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:65
&gt; +    ClientMap::iterator end = m_clientMap.end();
&gt; +
&gt; +    StringBuilder builder;
&gt; +    builder.append(&quot;[ &quot;);
&gt; +    for (ClientMap::iterator iter = m_clientMap.begin(); iter != end; ++iter) {

I suggest to move the end variable declaration closer to the for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594433</commentid>
    <comment_count>9</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-03 06:35:25 -0700</bug_when>
    <thetext>Committed r113027: &lt;http://trac.webkit.org/changeset/113027&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117921</attachid>
            <date>2011-12-05 12:38:46 -0800</date>
            <delta_ts>2012-03-29 11:27:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73855-20111205213844.patch</filename>
            <type>text/plain</type>
            <size>20295</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjVjZGI3YWFkMWM5OGMx
NTI4NGFmOWE0MDBjMjgxOTc1YTRlYWRlZS4uNzBhMDNiMjUxMmY1ZGU4MGZkNWNjYTM1OGQwZWE0
YWZjYjQxMDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDExLTEyLTA1ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKKyAgICAgICAgV2ViSW5zcGVjdG9yU2VydmVy
IGZvciBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzM4NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgc2VydmVyIHVzZXMgV2ViU29ja2V0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhl
IHJlbW90ZSBjbGllbnQgYW5kCisgICAgICAgIG5vcm1hbCBIVFRQIHJlcXVlc3RzIGFyZSBoYW5k
bGVkIHRvIG9wdGlvbmFsbHkgc2VuZCB0aGUgZnJvbnRlbmQgb24gdGhlCisgICAgICAgIHdpcmUu
IFRob3NlIGRlY2lzaW9uIGFyZSBoYW5kbGVkIHBlciBwbGF0Zm9ybSBhbmQgUXQgY3VycmVudGx5
IG1hcHM6CisKKyAgICAgICAgICAtICIvIiB0byBhIHN0YXRpYyBsaXN0aW5nIHBhZ2UuCisgICAg
ICAgICAgLSAiL3BhZ2VsaXN0Lmpzb24iIHRvIHRoZSBwYWdlIGxpc3QgZm9yIHRoZSBsaXN0aW5n
IHBhZ2Ugb3IgdG9vbHMuCisgICAgICAgICAgLSBhbnl0aGluZyBlbHNlLCBmb3IgZXhhbXBsZSAi
L2luc3BlY3Rvci5qcyIgdG8gdGhlIGZpbGUgd2l0aCB0aGUKKyAgICAgICAgICAgIHNhbWUgbmFt
ZSBpbiB0aGUgZHluYW1pYyBsaWJyYXJpZXMgYnVpbHQgcmVzb3VyY2VzLgorICAgICAgICAgICAg
SW52YWxpZCBmaWxlcyBzaG91bGQgcmV0dXJuIGEgNDA0LgorCisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpwYWdlSWRGcm9tUmVxdWVzdFBhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNlcnZlcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6V2ViSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpyZWdpc3RlclBhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OnVucmVnaXN0ZXJQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZU92ZXJDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlVW5yZWNvZ25pemVk
SFRUUFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJl
Y2VpdmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JTZXJ2ZXI6OmRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2VpdmVXZWJTb2NrZXRNZXNzYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRDbG9zZVdlYlNvY2tl
dENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmNsb3Nl
Q29ubmVjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNw
ZWN0b3JTZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JTZXJ2ZXI6OnBsYXRmb3JtUmVzb3VyY2VGb3JQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KToKKyAgICAgICAgKiBXZWJL
aXQyLnFyYzogQWRkZWQuCisgICAgICAgICogcXQvUmVzb3VyY2VzL2luc3BlY3RvclBhZ2VJbmRl
eC5odG1sOiBBZGRlZC4KKworMjAxMS0xMi0wNSAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3
ZWJraXQub3JnPiBhbmQgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEu
Y29tPgorCiAgICAgICAgIEFkZCBhIEdlbmVyaWMgV2ViU29ja2V0IFNlcnZlci4KICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDkzCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CmluZGV4IDVlMDhiYzBhZmIxYTk1NzY4NTYzMGVmZjkwY2NhN2QzZmI1MGQzNzAuLjNkY2I2ZWM5
NTA3MzcxNzc2NGNiMjc2MjVmZTVlM2M5ODZkYWQyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMTksNiAr
MTksOCBAQCBERVNURElSID0gJCRXRUJLSVQyX0RFU1RESVIKIAogUVQgKz0gZGVjbGFyYXRpdmUK
IAorUkVTT1VSQ0VTICs9ICQkUFdEL1dlYktpdDIucXJjCisKIFdFQktJVDJfR0VORVJBVEVEX0hF
QURFUlMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9BdXRoZW50aWNh
dGlvbk1hbmFnZXJNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSL0Rvd25sb2FkUHJveHlNZXNzYWdlcy5oIFwKQEAgLTI2NCw2ICsyNjYsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBVSVByb2Nlc3MvR2VuZXJpY0NhbGxiYWNrLmggXAogICAgIFVJUHJvY2Vzcy9H
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vz
cy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBcCisgICAgVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmggXApAQCAtNTczLDggKzU3NiwxMCBAQCBT
T1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAgICAg
VUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAgXAorICAgIFVJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBcCiAgICAgVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIuY3BwIFwKICAgICBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIFwKKyAgICBV
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MmNiMGY2NTcwODU3NGQ0M2NkZWFkNDFjZjJlYWM5ODE3YzY0YzBh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCisKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisj
aW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUFJlcXVlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdGF0aWMgdW5zaWduZWQgcGFnZUlkRnJvbVJlcXVlc3RQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBzaXplX3Qgc3RhcnQgPSBwYXRoLnJldmVyc2VGaW5kKCcvJyk7
CisgICAgU3RyaW5nIG51bWJlclN0cmluZyA9IHBhdGguc3Vic3RyaW5nKHN0YXJ0ICsgMSwgcGF0
aC5sZW5ndGgoKSAtIHN0YXJ0IC0gMSk7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgdW5z
aWduZWQgbnVtYmVyID0gbnVtYmVyU3RyaW5nLnRvVUludFN0cmljdCgmb2spOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK1dlYkluc3Bl
Y3RvclNlcnZlciogV2ViSW5zcGVjdG9yU2VydmVyOjpzZXJ2ZXIoKQoreworICAgIHN0YXRpYyBX
ZWJJbnNwZWN0b3JTZXJ2ZXIqIHN0YXRpY1NlcnZlciA9IG5ldyBXZWJJbnNwZWN0b3JTZXJ2ZXI7
CisgICAgcmV0dXJuIHN0YXRpY1NlcnZlcjsKK30KKworV2ViSW5zcGVjdG9yU2VydmVyOjpXZWJJ
bnNwZWN0b3JTZXJ2ZXIoKQorICAgIDogV2ViU29ja2V0U2VydmVyKHRoaXMpCisgICAgLCBtX25l
eHRBdmFpbGFibGVQYWdlSWQoMSkKK3sKK30KKworV2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5z
cGVjdG9yU2VydmVyKCkKK3sKKyAgICAvLyBDbG9zZSBhbnkgcmVtYWluaW5nIG9wZW4gY29ubmVj
dGlvbnMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+
OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5lY3Rpb25NYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFw
PHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9j
b25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IG1fY2xpZW50TWFwLmdldChjb25uZWN0aW9uLT5pZGVu
dGlmaWVyKCkpOworICAgICAgICBjbG9zZUNvbm5lY3Rpb24oY2xpZW50LCBjb25uZWN0aW9uKTsK
KyAgICB9Cit9CisKK2ludCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZShXZWJJbnNw
ZWN0b3JQcm94eSogY2xpZW50KQoreworI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKKyAgICBDbGll
bnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50TWFwLmVuZCgpOworICAgIGZvciAoQ2xpZW50
TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gY2xpZW50KTsKKyNlbmRpZgorCisgICAgaW50
IHBhZ2VJZCA9IG1fbmV4dEF2YWlsYWJsZVBhZ2VJZCsrOworICAgIG1fY2xpZW50TWFwLnNldChw
YWdlSWQsIGNsaWVudCk7CisgICAgcmV0dXJuIHBhZ2VJZDsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JTZXJ2ZXI6OnVucmVnaXN0ZXJQYWdlKGludCBwYWdlSWQpCit7CisgICAgbV9jbGllbnRNYXAu
cmVtb3ZlKHBhZ2VJZCk7CisgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbk1hcC5nZXQocGFnZUlkKTsKKyAgICBpZiAoY29ubmVjdGlvbikKKyAg
ICAgICAgY2xvc2VDb25uZWN0aW9uKDAsIGNvbm5lY3Rpb24pOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbih1bnNpZ25lZCBwYWdlSWRGb3JD
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbk1hcC5nZXQocGFnZUlkRm9yQ29u
bmVjdGlvbik7CisgICAgQVNTRVJUKGNvbm5lY3Rpb24pOworICAgIGNvbm5lY3Rpb24tPnNlbmRX
ZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6
ZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAg
U3RyaW5nIHBhdGggPSByZXF1ZXN0LT51cmwoKTsKKyAgICBzaXplX3QgcGF0aEVuZCA9IHBhdGgu
ZmluZCgnPycpOworICAgIGlmIChwYXRoRW5kID09IG5vdEZvdW5kKQorICAgICAgICBwYXRoRW5k
ID0gcGF0aC5maW5kKCcjJyk7CisgICAgaWYgKHBhdGhFbmQgIT0gbm90Rm91bmQpCisgICAgICAg
IHBhdGgudHJ1bmNhdGUocGF0aEVuZCk7CisKKyAgICAvLyBBc2sgZm9yIHRoZSBjb21wbGV0ZSBw
YXlsb2FkIGluIG1lbW9yeSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS4gQSBtb3JlIGVmZmlj
aWVudCB3YXkgd291bGQgYmUKKyAgICAvLyB0byBhc2sgZm9yIGhlYWRlciBkYXRhIGFuZCB0aGVu
IGxldCB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gd3JpdGUgdGhlIHBheWxvYWQgc3RyYWlnaHQg
b24gdGhlIGNvbm5lY3Rpb24uCisgICAgVmVjdG9yPGNoYXI+IGJvZHk7CisgICAgU3RyaW5nIGNv
bnRlbnRUeXBlOworICAgIGJvb2wgZm91bmQgPSBwbGF0Zm9ybVJlc291cmNlRm9yUGF0aChwYXRo
LCBib2R5LCBjb250ZW50VHlwZSk7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsK
KyAgICBoZWFkZXJGaWVsZHMuc2V0KCJDb25uZWN0aW9uIiwgImNsb3NlIik7CisgICAgaGVhZGVy
RmllbGRzLnNldCgiQ29udGVudC1MZW5ndGgiLCBTdHJpbmc6Om51bWJlcihib2R5LnNpemUoKSkp
OworICAgIGlmIChmb3VuZCkKKyAgICAgICAgaGVhZGVyRmllbGRzLnNldCgiQ29udGVudC1UeXBl
IiwgY29udGVudFR5cGUpOworCisgICAgLy8gU2VuZCB3aGVuIHJlYWR5IGFuZCBjbG9zZSBpbW1l
ZGlhdGVseSBhZnRlcndhcmRzLgorICAgIGNvbm5lY3Rpb24tPnNlbmRIVFRQUmVzcG9uc2VIZWFk
ZXIoZm91bmQgPyAyMDAgOiA0MDQsIGZvdW5kID8gIk9LIiA6ICJOb3QgRm91bmQiLCBoZWFkZXJG
aWVsZHMpOworICAgIGNvbm5lY3Rpb24tPnNlbmRSYXdEYXRhKGJvZHkuZGF0YSgpLCBib2R5LnNp
emUoKSk7CisgICAgY29ubmVjdGlvbi0+c2h1dGRvd25BZnRlclNlbmRPck5vdygpOworfQorCiti
b29sIFdlYkluc3BlY3RvclNlcnZlcjo6ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVx
dWVzdChXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgUGFzc1JlZlB0cjxIVFRQUmVxdWVzdD4g
cmVxdWVzdCkKK3sKKyAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QtPnVybCgpOworCisgICAgLy8g
Tk9URTogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnNw
ZWN0b3JXZWJTb2NrZXRDb25uZWN0aW9uUGF0aFByZWZpeCwgKCIvZGV2dG9vbHMvcGFnZS8iKSk7
CisKKyAgICAvLyBVbmtub3duIHBhdGggcmVxdWVzdGVkLgorICAgIGlmICghcGF0aC5zdGFydHNX
aXRoKGluc3BlY3RvcldlYlNvY2tldENvbm5lY3Rpb25QYXRoUHJlZml4KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gSW52YWxpZCBwYWdlIGlkLgorICAgIGludCBwYWdlSWQgPSBw
YWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0aCk7CisgICAgaWYgKCFwYWdlSWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRoZXJlIGlzIG5vIGNsaWVudCBmb3IgdGhhdCBwYWdlIGlk
LgorICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQocGFnZUlk
KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpkaWRFc3RhYmxpc2hXZWJTb2Nr
ZXRDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFBhc3NS
ZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0
LT51cmwoKTsKKyAgICB1bnNpZ25lZCBwYWdlSWQgPSBwYWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0
aCk7CisgICAgQVNTRVJUKHBhZ2VJZCk7CisKKyAgICAvLyBNYXAgdGhlIHBhZ2VJZCB0byB0aGUg
Y29ubmVjdGlvbiBpbiBjYXNlIGxvY2FsbHkgd2UgbmVlZCB0byBjbG9zZSB0aGUgY29ubmVjdGlv
bi4KKyAgICBjb25uZWN0aW9uLT5zZXRJZGVudGlmaWVyKHBhZ2VJZCk7CisgICAgbV9jb25uZWN0
aW9uTWFwLnNldChwYWdlSWQsIGNvbm5lY3Rpb24pOworCisgICAgV2ViSW5zcGVjdG9yUHJveHkq
IGNsaWVudCA9IG1fY2xpZW50TWFwLmdldChwYWdlSWQpOworICAgIGNsaWVudC0+cmVtb3RlRnJv
bnRlbmRDb25uZWN0ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2Vp
dmVXZWJTb2NrZXRNZXNzYWdlKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICAvLyBEaXNwYXRjaCBpbmNvbWluZyByZW1v
dGUgbWVzc2FnZSBsb2NhbGx5LgorICAgIHVuc2lnbmVkIHBhZ2VJZCA9IGNvbm5lY3Rpb24tPmlk
ZW50aWZpZXIoKTsKKyAgICBBU1NFUlQocGFnZUlkKTsKKyAgICBXZWJJbnNwZWN0b3JQcm94eSog
Y2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7CisgICAgY2xpZW50LT5kaXNwYXRjaE1l
c3NhZ2VGcm9tUmVtb3RlRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
U2VydmVyOjpkaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbiogY29ubmVjdGlvbikKK3sKKyAgICAvLyBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHNodXRk
b3duLgorICAgIHVuc2lnbmVkIHBhZ2VJZCA9IGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKTsKKyAg
ICBpZiAoIXBhZ2VJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHNvY2tldCBjbG9z
aW5nIG1lYW5zIHRoZSByZW1vdGUgc2lkZSBoYXMgY2F1c2VkIHRoZSBjbG9zZS4KKyAgICBXZWJJ
bnNwZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7CisgICAgY2xv
c2VDb25uZWN0aW9uKGNsaWVudCwgY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
U2VydmVyOjpjbG9zZUNvbm5lY3Rpb24oV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCwgV2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICAvLyBMb2NhbCBzaWRlIGNs
ZWFudXAuCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgY2xpZW50LT5yZW1vdGVGcm9udGVuZERp
c2Nvbm5lY3RlZCgpOworCisgICAgLy8gUmVtb3RlIHNpZGUgY2xlYW51cC4KKyAgICBtX2Nvbm5l
Y3Rpb25NYXAucmVtb3ZlKGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKSk7CisgICAgY29ubmVjdGlv
bi0+c2V0SWRlbnRpZmllcigwKTsKKyAgICBjb25uZWN0aW9uLT5zaHV0ZG93bk5vdygpOworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3Rv
clNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlZDQ4MWNlZDRkYjVhMGJhNDFkYzVlZmUzYjdkOGZjOWEx
MTNiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkluc3BlY3RvclNlcnZlcl9oCisjZGVmaW5lIFdlYkluc3BlY3RvclNlcnZlcl9oCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlci5o
IgorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yU2Vy
dmVyIDogcHVibGljIFdlYlNvY2tldFNlcnZlciwgcHVibGljIFdlYlNvY2tldFNlcnZlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBXZWJJbnNwZWN0b3JQ
cm94eSo+IENsaWVudE1hcDsKKyAgICAvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlLgorICAgIHN0
YXRpYyBXZWJJbnNwZWN0b3JTZXJ2ZXIqIHNlcnZlcigpOworCisgICAgLy8gUGFnZSByZWdpc3Ry
eSB0byBtYW5hZ2Uga25vd24gcGFnZXMuCisgICAgaW50IHJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0
b3JQcm94eSogY2xpZW50KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJQYWdlKGludCBwYWdlSWQpOwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbih1bnNpZ25lZCBwYWdlSWRGb3JDb25u
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCitwcml2YXRlOgorICAgIFdlYkluc3Bl
Y3RvclNlcnZlcigpOworICAgIH5XZWJJbnNwZWN0b3JTZXJ2ZXIoKTsKKworICAgIC8vIFdlYlNv
Y2tldFNlcnZlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4gRXZlbnRzIGNvbWluZyBmcm9tIHJlbW90
ZSBjb25uZWN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVVucmVjb2duaXplZEhU
VFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPFdlYkNvcmU6
OkhUVFBSZXF1ZXN0Pik7CisgICAgdmlydHVhbCBib29sIGRpZFJlY2VpdmVXZWJTb2NrZXRVcGdy
YWRlSFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SFRUUFJlcXVlc3Q+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXN0YWJsaXNoV2ViU29j
a2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpIVFRQUmVxdWVzdD4pOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0
TWVzc2FnZShXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24qKTsKKworICAgIGJvb2wgcGxhdGZvcm1SZXNvdXJjZUZvclBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIFN0cmluZyYgY29udGVudFR5
cGUpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgYnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hh
cj4mIGRhdGEsIFN0cmluZyYgY29udGVudFR5cGUpOworI2VuZGlmCisKKyAgICB2b2lkIGNsb3Nl
Q29ubmVjdGlvbihXZWJJbnNwZWN0b3JQcm94eSosIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24q
KTsKKworICAgIHVuc2lnbmVkIG1fbmV4dEF2YWlsYWJsZVBhZ2VJZDsKKyAgICBDbGllbnRNYXAg
bV9jbGllbnRNYXA7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbio+IG1fY29ubmVjdGlvbk1hcDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfU0VSVkVSKQorCisjZW5kaWYgLy8gV2ViSW5zcGVjdG9yU2VydmVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVj
dG9yU2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAyM2VmYzcyM2ViNDA4
N2MxMWNiZTY0MTE4N2ZjODI5ZTgzNDI3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3Bw
CkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvclNlcnZlci5oIgorCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworYm9vbCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnBsYXRmb3JtUmVzb3VyY2VGb3JQYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCwgVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRUeXBlKQor
eworICAgIGlmIChwYXRoID09ICIvcGFnZWxpc3QuanNvbiIpIHsKKyAgICAgICAgYnVpbGRQYWdl
TGlzdChkYXRhLCBjb250ZW50VHlwZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIFN0cmluZyBsb2NhbFBhdGggPSAocGF0aCA9PSAiLyIpID8gIi93ZWJraXQvcmVzb3VyY2Vz
L2luc3BlY3RvclBhZ2VJbmRleC5odG1sIiA6IHBhdGg7CisgICAgUUZpbGUgZmlsZShRU3RyaW5n
Ojpmcm9tTGF0aW4xKCI6JTEiKS5hcmcobG9jYWxQYXRoKSk7CisgICAgaWYgKGZpbGUuZXhpc3Rz
KCkpIHsKKyAgICAgICAgZmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgICAgICBk
YXRhLmdyb3coZmlsZS5zaXplKCkpOworICAgICAgICBmaWxlLnJlYWQoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKKworICAgICAgICBzaXplX3QgZXh0U3RhcnQgPSBsb2NhbFBhdGgucmV2ZXJz
ZUZpbmQoJy4nKTsKKyAgICAgICAgU3RyaW5nIGV4dCA9IGxvY2FsUGF0aC5zdWJzdHJpbmcoZXh0
U3RhcnQgIT0gbm90Rm91bmQgPyBleHRTdGFydCArIDEgOiAwKTsKKyAgICAgICAgY29udGVudFR5
cGUgPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihl
eHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6YnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hhcj4mIGRh
dGEsIFN0cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQg
PSBtX2NsaWVudE1hcC5lbmQoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiWyAiKTsKKyAgICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgV2Vi
UGFnZVByb3h5KiB3ZWJQYWdlID0gaXRlci0+c2Vjb25kLT5wYWdlKCk7CisgICAgICAgIGlmIChp
dGVyICE9IG1fY2xpZW50TWFwLmJlZ2luKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
LCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoInsgXCJkZXNjcmlwdGlvblwiOiBcIiIpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5wYWdlVGl0bGUoKSk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCJcIiwgXCJpbnNwZWN0b3JMb2NhdGlvblwiOiBcIiIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiL3dlYmtpdC9pbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWw/cGFnZT0iICsg
U3RyaW5nOjpudW1iZXIoaXRlci0+Zmlyc3QpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwi
IH0iKTsKKyAgICB9CisgICAgYnVpbGRlci5hcHBlbmQoIiBdIik7CisgICAgQ1N0cmluZyBjc3Ry
ID0gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBkYXRhLmFwcGVuZChjc3RyLmRhdGEo
KSwgY3N0ci5sZW5ndGgoKSk7CisgICAgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbjsg
Y2hhcnNldD11dGYtOCI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucXJjIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5xcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUwNDE2Yzdl
YWI4MzZjNTBjOWIzMGIxMTcwMzc2ZThlMWQ0M2M5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucXJjCkBAIC0wLDAgKzEsNSBAQAorPCFET0NUWVBFIFJDQz48UkND
IHZlcnNpb249IjEuMCI+Cis8cXJlc291cmNlIHByZWZpeD0iL3dlYmtpdC9yZXNvdXJjZXMiPgor
ICAgIDxmaWxlIGFsaWFzPSJpbnNwZWN0b3JQYWdlSW5kZXguaHRtbCI+cXQvUmVzb3VyY2VzL2lu
c3BlY3RvclBhZ2VJbmRleC5odG1sPC9maWxlPgorPC9xcmVzb3VyY2U+Cis8L1JDQz4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRt
bCBiL1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YTczMjQ3ZDdkMDcyZDU2YzAxMDdhZjRiNTcwYzExZWE5MmZjMmExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvcXQvUmVzb3VyY2VzL2luc3BlY3RvclBhZ2VJ
bmRleC5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+PGhlYWQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBjcmVhdGVQYWdlTGlz
dCgpIHsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHhoci5vcGVuKCJH
RVQiLCAiL3BhZ2VsaXN0Lmpzb24iKTsKKyAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICAgIHZhciBwYWdlcyA9
IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICBpZiAocGFnZXMubGVu
Z3RoKQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub1BhZ2VOb3Rp
Y2UiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBw
YWdlcykgeworICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiYSIpOworICAgICAgICAgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUocGFnZXNbaV0uZGVzY3JpcHRpb24gPyBwYWdlc1tpXS5kZXNjcmlwdGlvbiA6ICgi
UGFnZSAiICsgKE51bWJlcihpKSsxKSkpKTsKKyAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJp
YnV0ZSgiaHJlZiIsIHBhZ2VzW2ldLmluc3BlY3RvckxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOworICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHhoci5zZW5kKCk7Cit9CisKK2RvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBjcmVhdGVQYWdlTGlzdCwg
ZmFsc2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+PGJvZHk+Cis8aDE+SW5zcGVjdGFibGUgd2ViIHZp
ZXdzPC9oMT4KKzxwIGlkPSJub1BhZ2VOb3RpY2UiIHN0eWxlPSJjb2xvcjpncmV5Ij5Ob25lIGZv
dW5kLCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBzZXQgdGhlIGRldmVsb3BlckV4dHJhc0VuYWJs
ZWQgcHJlZmVyZW5jZSBwcm9wZXJ0eSBvbiB5b3VyIFdlYlZpZXcuPC9wPgorPC9ib2R5PjwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134625</attachid>
            <date>2012-03-29 11:27:52 -0700</date>
            <delta_ts>2012-04-02 07:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73855-20120329202544.patch</filename>
            <type>text/plain</type>
            <size>20520</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDg5MmQ2M2JkZTgwNWUy
OWU5NDBkYWIxNTI1Zjk0MWI1ZDdmMDZjYS4uZWEyOWM4OGIwNGI2ZTI3ZjMyNGY5YTAwMzQ2NjVh
ZjMwY2UwOTNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTAzLTI5ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKKyAgICAgICAgV2ViSW5zcGVjdG9yU2VydmVy
IGZvciBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzM4NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgc2VydmVyIHVzZXMgV2ViU29ja2V0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhl
IHJlbW90ZSBjbGllbnQgYW5kCisgICAgICAgIG5vcm1hbCBIVFRQIHJlcXVlc3RzIGFyZSBoYW5k
bGVkIHRvIG9wdGlvbmFsbHkgc2VuZCB0aGUgZnJvbnRlbmQgb24gdGhlCisgICAgICAgIHdpcmUu
IFRob3NlIGRlY2lzaW9uIGFyZSBoYW5kbGVkIHBlciBwbGF0Zm9ybSBhbmQgUXQgY3VycmVudGx5
IG1hcHM6CisKKyAgICAgICAgICAtICIvIiB0byBhIHN0YXRpYyBsaXN0aW5nIHBhZ2UuCisgICAg
ICAgICAgLSAiL3BhZ2VsaXN0Lmpzb24iIHRvIHRoZSBwYWdlIGxpc3QgZm9yIHRoZSBsaXN0aW5n
IHBhZ2Ugb3IgdG9vbHMuCisgICAgICAgICAgLSBhbnl0aGluZyBlbHNlLCBmb3IgZXhhbXBsZSAi
L2luc3BlY3Rvci5qcyIgdG8gdGhlIGZpbGUgd2l0aCB0aGUKKyAgICAgICAgICAgIHNhbWUgbmFt
ZSBpbiB0aGUgZHluYW1pYyBsaWJyYXJpZXMgYnVpbHQgcmVzb3VyY2VzLgorICAgICAgICAgICAg
SW52YWxpZCBmaWxlcyBzaG91bGQgcmV0dXJuIGEgNDA0LgorCisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cGFnZUlk
RnJvbVJlcXVlc3RQYXRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpz
ZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OldlYkluc3BlY3Rv
clNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6fldlYkluc3Bl
Y3RvclNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0
ZXJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjp1bnJlZ2lzdGVy
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VP
dmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6ZGlk
UmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRFc3RhYmxpc2hXZWJTb2NrZXRD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNl
aXZlV2ViU29ja2V0TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZl
cjo6ZGlkQ2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yU2VydmVyOjpjbG9zZUNvbm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYkluc3BlY3RvclNlcnZlcik6CisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpwbGF0Zm9y
bVJlc291cmNlRm9yUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6
YnVpbGRQYWdlTGlzdCk6CisgICAgICAgICogV2ViS2l0Mi5xcmM6IEFkZGVkLgorICAgICAgICAq
IHF0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbDogQWRkZWQuCisKKzIwMTItMDMt
MjkgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4gYW5kIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKwogICAgICAgICBBZGQgYSBHZW5l
cmljIFdlYlNvY2tldCBTZXJ2ZXIuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA5MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA3MGM1ODIwM2MxYzk0OGRiODFl
MmYyMTE5MGIzNWFmNzdhYTQ0Yjg4Li42NDJlMzRjMDE0YTIzNDU5NzM5MDA0YTlmZjMyYmEzNDYz
YmQyZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTE2LDYgKzE2LDggQEAgUVQgKz0gZGVjbGFyYXRpdmUg
cXVpY2sgcXVpY2stcHJpdmF0ZQogCiBDT05GSUcgKz0gc3RhdGljbGliCiAKK1JFU09VUkNFUyAr
PSAkJFBXRC9XZWJLaXQyLnFyYworCiBIRUFERVJTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5oIFwKQEAgLTIwMiw2ICsyMDQsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2Vu
ZXJpY0NhbGxiYWNrLmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0UHJveHkuaCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0
b3JTZXJ2ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGll
bnQuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmggXApAQCAtNTQxLDggKzU0NCwxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvRmluZEluZGljYXRvci5jcHAgXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViSW5zcGVjdG9yU2VydmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJTb2NrZXRTZXJ2ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNo
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWFiZDE4
MzQ4NWM4N2ZkMTE1MDE2MDkwNTNjY2QyNjVmNGMyYWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIu
Y3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9TRVJWRVIpCisKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JTZXJ2ZXIuaCIKKwor
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFJlcXVlc3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgdW5zaWdu
ZWQgcGFnZUlkRnJvbVJlcXVlc3RQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzaXpl
X3Qgc3RhcnQgPSBwYXRoLnJldmVyc2VGaW5kKCcvJyk7CisgICAgU3RyaW5nIG51bWJlclN0cmlu
ZyA9IHBhdGguc3Vic3RyaW5nKHN0YXJ0ICsgMSwgcGF0aC5sZW5ndGgoKSAtIHN0YXJ0IC0gMSk7
CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgdW5zaWduZWQgbnVtYmVyID0gbnVtYmVyU3Ry
aW5nLnRvVUludFN0cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudW1iZXI7Cit9CisKK1dlYkluc3BlY3RvclNlcnZlciogV2ViSW5zcGVjdG9y
U2VydmVyOjpzZXJ2ZXIoKQoreworICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JTZXJ2ZXIqIHN0YXRp
Y1NlcnZlciA9IG5ldyBXZWJJbnNwZWN0b3JTZXJ2ZXI7CisgICAgcmV0dXJuIHN0YXRpY1NlcnZl
cjsKK30KKworV2ViSW5zcGVjdG9yU2VydmVyOjpXZWJJbnNwZWN0b3JTZXJ2ZXIoKQorICAgIDog
V2ViU29ja2V0U2VydmVyKHRoaXMpCisgICAgLCBtX25leHRBdmFpbGFibGVQYWdlSWQoMSkKK3sK
K30KKworV2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKCkKK3sKKyAgICAv
LyBDbG9zZSBhbnkgcmVtYWluaW5nIG9wZW4gY29ubmVjdGlvbnMuCisgICAgSGFzaE1hcDx1bnNp
Z25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5l
Y3Rpb25NYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9jb25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25u
ZWN0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9
IG1fY2xpZW50TWFwLmdldChjb25uZWN0aW9uLT5pZGVudGlmaWVyKCkpOworICAgICAgICBjbG9z
ZUNvbm5lY3Rpb24oY2xpZW50LCBjb25uZWN0aW9uKTsKKyAgICB9Cit9CisKK2ludCBXZWJJbnNw
ZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50KQorewor
I2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKKyAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
Y2xpZW50TWFwLmVuZCgpOworICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xp
ZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQgIT0gY2xpZW50KTsKKyNlbmRpZgorCisgICAgaW50IHBhZ2VJZCA9IG1fbmV4dEF2YWlsYWJs
ZVBhZ2VJZCsrOworICAgIG1fY2xpZW50TWFwLnNldChwYWdlSWQsIGNsaWVudCk7CisgICAgcmV0
dXJuIHBhZ2VJZDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnVucmVnaXN0ZXJQYWdl
KGludCBwYWdlSWQpCit7CisgICAgbV9jbGllbnRNYXAucmVtb3ZlKHBhZ2VJZCk7CisgICAgV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbk1hcC5nZXQo
cGFnZUlkKTsKKyAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgY2xvc2VDb25uZWN0aW9uKDAs
IGNvbm5lY3Rpb24pOworfQorCit2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VP
dmVyQ29ubmVjdGlvbih1bnNpZ25lZCBwYWdlSWRGb3JDb25uZWN0aW9uLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9
IG1fY29ubmVjdGlvbk1hcC5nZXQocGFnZUlkRm9yQ29ubmVjdGlvbik7CisgICAgaWYgKGNvbm5l
Y3Rpb24pCisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRXZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2Up
OworfQorCit2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6ZGlkUmVjZWl2ZVVucmVjb2duaXplZEhU
VFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFBhc3NSZWZQ
dHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0LT51
cmwoKTsKKyAgICBzaXplX3QgcGF0aEVuZCA9IHBhdGguZmluZCgnPycpOworICAgIGlmIChwYXRo
RW5kID09IG5vdEZvdW5kKQorICAgICAgICBwYXRoRW5kID0gcGF0aC5maW5kKCcjJyk7CisgICAg
aWYgKHBhdGhFbmQgIT0gbm90Rm91bmQpCisgICAgICAgIHBhdGgudHJ1bmNhdGUocGF0aEVuZCk7
CisKKyAgICAvLyBBc2sgZm9yIHRoZSBjb21wbGV0ZSBwYXlsb2FkIGluIG1lbW9yeSBmb3IgdGhl
IHNha2Ugb2Ygc2ltcGxpY2l0eS4gQSBtb3JlIGVmZmljaWVudCB3YXkgd291bGQgYmUKKyAgICAv
LyB0byBhc2sgZm9yIGhlYWRlciBkYXRhIGFuZCB0aGVuIGxldCB0aGUgcGxhdGZvcm0gYWJzdHJh
Y3Rpb24gd3JpdGUgdGhlIHBheWxvYWQgc3RyYWlnaHQgb24gdGhlIGNvbm5lY3Rpb24uCisgICAg
VmVjdG9yPGNoYXI+IGJvZHk7CisgICAgU3RyaW5nIGNvbnRlbnRUeXBlOworICAgIGJvb2wgZm91
bmQgPSBwbGF0Zm9ybVJlc291cmNlRm9yUGF0aChwYXRoLCBib2R5LCBjb250ZW50VHlwZSk7CisK
KyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBoZWFkZXJGaWVsZHMuc2V0KCJD
b25uZWN0aW9uIiwgImNsb3NlIik7CisgICAgaGVhZGVyRmllbGRzLnNldCgiQ29udGVudC1MZW5n
dGgiLCBTdHJpbmc6Om51bWJlcihib2R5LnNpemUoKSkpOworICAgIGlmIChmb3VuZCkKKyAgICAg
ICAgaGVhZGVyRmllbGRzLnNldCgiQ29udGVudC1UeXBlIiwgY29udGVudFR5cGUpOworCisgICAg
Ly8gU2VuZCB3aGVuIHJlYWR5IGFuZCBjbG9zZSBpbW1lZGlhdGVseSBhZnRlcndhcmRzLgorICAg
IGNvbm5lY3Rpb24tPnNlbmRIVFRQUmVzcG9uc2VIZWFkZXIoZm91bmQgPyAyMDAgOiA0MDQsIGZv
dW5kID8gIk9LIiA6ICJOb3QgRm91bmQiLCBoZWFkZXJGaWVsZHMpOworICAgIGNvbm5lY3Rpb24t
PnNlbmRSYXdEYXRhKGJvZHkuZGF0YSgpLCBib2R5LnNpemUoKSk7CisgICAgY29ubmVjdGlvbi0+
c2h1dGRvd25BZnRlclNlbmRPck5vdygpOworfQorCitib29sIFdlYkluc3BlY3RvclNlcnZlcjo6
ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVxdWVzdChXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKiwgUGFzc1JlZlB0cjxIVFRQUmVxdWVzdD4gcmVxdWVzdCkKK3sKKyAgICBTdHJpbmcg
cGF0aCA9IHJlcXVlc3QtPnVybCgpOworCisgICAgLy8gTk9URTogS2VlcCB0aGlzIGluIHN5bmMg
d2l0aCBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzLgorICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnNwZWN0b3JXZWJTb2NrZXRDb25uZWN0aW9u
UGF0aFByZWZpeCwgKCIvZGV2dG9vbHMvcGFnZS8iKSk7CisKKyAgICAvLyBVbmtub3duIHBhdGgg
cmVxdWVzdGVkLgorICAgIGlmICghcGF0aC5zdGFydHNXaXRoKGluc3BlY3RvcldlYlNvY2tldENv
bm5lY3Rpb25QYXRoUHJlZml4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSW52
YWxpZCBwYWdlIGlkLgorICAgIGludCBwYWdlSWQgPSBwYWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0
aCk7CisgICAgaWYgKCFwYWdlSWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRo
ZXJlIGlzIG5vIGNsaWVudCBmb3IgdGhhdCBwYWdlIGlkLgorICAgIFdlYkluc3BlY3RvclByb3h5
KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQocGFnZUlkKTsKKyAgICBpZiAoIWNsaWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yU2VydmVyOjpkaWRFc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVl
c3QpCit7CisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0LT51cmwoKTsKKyAgICB1bnNpZ25lZCBw
YWdlSWQgPSBwYWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0aCk7CisgICAgQVNTRVJUKHBhZ2VJZCk7
CisKKyAgICAvLyBJZ25vcmUgY29ubmVjdGlvbnMgdG8gYSBwYWdlIHRoYXQgYWxyZWFkeSBoYXZl
IGEgcmVtb3RlIGluc3BlY3RvciBjb25uZWN0ZWQuCisgICAgaWYgKG1fY29ubmVjdGlvbk1hcC5j
b250YWlucyhwYWdlSWQpKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNodXRkb3duTm93KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBNYXAgdGhlIHBhZ2VJZCB0byB0aGUgY29u
bmVjdGlvbiBpbiBjYXNlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gbG9jYWxseS4K
KyAgICBjb25uZWN0aW9uLT5zZXRJZGVudGlmaWVyKHBhZ2VJZCk7CisgICAgbV9jb25uZWN0aW9u
TWFwLnNldChwYWdlSWQsIGNvbm5lY3Rpb24pOworCisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNs
aWVudCA9IG1fY2xpZW50TWFwLmdldChwYWdlSWQpOworICAgIGNsaWVudC0+cmVtb3RlRnJvbnRl
bmRDb25uZWN0ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2VpdmVX
ZWJTb2NrZXRNZXNzYWdlKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICAvLyBEaXNwYXRjaCBpbmNvbWluZyByZW1vdGUg
bWVzc2FnZSBsb2NhbGx5LgorICAgIHVuc2lnbmVkIHBhZ2VJZCA9IGNvbm5lY3Rpb24tPmlkZW50
aWZpZXIoKTsKKyAgICBBU1NFUlQocGFnZUlkKTsKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xp
ZW50ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7CisgICAgY2xpZW50LT5kaXNwYXRjaE1lc3Nh
Z2VGcm9tUmVtb3RlRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpkaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
biogY29ubmVjdGlvbikKK3sKKyAgICAvLyBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHNodXRkb3du
LgorICAgIHVuc2lnbmVkIHBhZ2VJZCA9IGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKTsKKyAgICBp
ZiAoIXBhZ2VJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHNvY2tldCBjbG9zaW5n
IG1lYW5zIHRoZSByZW1vdGUgc2lkZSBoYXMgY2F1c2VkIHRoZSBjbG9zZS4KKyAgICBXZWJJbnNw
ZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7CisgICAgY2xvc2VD
b25uZWN0aW9uKGNsaWVudCwgY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpjbG9zZUNvbm5lY3Rpb24oV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCwgV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICAvLyBMb2NhbCBzaWRlIGNsZWFu
dXAuCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgY2xpZW50LT5yZW1vdGVGcm9udGVuZERpc2Nv
bm5lY3RlZCgpOworCisgICAgLy8gUmVtb3RlIHNpZGUgY2xlYW51cC4KKyAgICBtX2Nvbm5lY3Rp
b25NYXAucmVtb3ZlKGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKSk7CisgICAgY29ubmVjdGlvbi0+
c2V0SWRlbnRpZmllcigwKTsKKyAgICBjb25uZWN0aW9uLT5zaHV0ZG93bk5vdygpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNl
cnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNlZDQ4MWNlZDRkYjVhMGJhNDFkYzVlZmUzYjdkOGZjOWExMTNi
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
Ykluc3BlY3RvclNlcnZlcl9oCisjZGVmaW5lIFdlYkluc3BlY3RvclNlcnZlcl9oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlci5oIgor
I2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yU2VydmVy
IDogcHVibGljIFdlYlNvY2tldFNlcnZlciwgcHVibGljIFdlYlNvY2tldFNlcnZlckNsaWVudCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBXZWJJbnNwZWN0b3JQcm94
eSo+IENsaWVudE1hcDsKKyAgICAvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlLgorICAgIHN0YXRp
YyBXZWJJbnNwZWN0b3JTZXJ2ZXIqIHNlcnZlcigpOworCisgICAgLy8gUGFnZSByZWdpc3RyeSB0
byBtYW5hZ2Uga25vd24gcGFnZXMuCisgICAgaW50IHJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQ
cm94eSogY2xpZW50KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJQYWdlKGludCBwYWdlSWQpOworICAg
IHZvaWQgc2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbih1bnNpZ25lZCBwYWdlSWRGb3JDb25uZWN0
aW9uLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCitwcml2YXRlOgorICAgIFdlYkluc3BlY3Rv
clNlcnZlcigpOworICAgIH5XZWJJbnNwZWN0b3JTZXJ2ZXIoKTsKKworICAgIC8vIFdlYlNvY2tl
dFNlcnZlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4gRXZlbnRzIGNvbWluZyBmcm9tIHJlbW90ZSBj
b25uZWN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBS
ZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkhU
VFBSZXF1ZXN0Pik7CisgICAgdmlydHVhbCBib29sIGRpZFJlY2VpdmVXZWJTb2NrZXRVcGdyYWRl
SFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SFRUUFJlcXVlc3Q+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXN0YWJsaXNoV2ViU29ja2V0
Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpIVFRQUmVxdWVzdD4pOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0TWVz
c2FnZShXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24qKTsKKworICAgIGJvb2wgcGxhdGZvcm1SZXNvdXJjZUZvclBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIFN0cmluZyYgY29udGVudFR5cGUp
OworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgYnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hhcj4m
IGRhdGEsIFN0cmluZyYgY29udGVudFR5cGUpOworI2VuZGlmCisKKyAgICB2b2lkIGNsb3NlQ29u
bmVjdGlvbihXZWJJbnNwZWN0b3JQcm94eSosIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qKTsK
KworICAgIHVuc2lnbmVkIG1fbmV4dEF2YWlsYWJsZVBhZ2VJZDsKKyAgICBDbGllbnRNYXAgbV9j
bGllbnRNYXA7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bio+IG1fY29ubmVjdGlvbk1hcDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfU0VSVkVSKQorCisjZW5kaWYgLy8gV2ViSW5zcGVjdG9yU2VydmVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9y
U2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9x
dC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAyM2VmYzcyM2ViNDA4N2Mx
MWNiZTY0MTE4N2ZjODI5ZTgzNDI3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIldlYkluc3BlY3RvclNlcnZlci5oIgorCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ym9vbCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnBsYXRmb3JtUmVzb3VyY2VGb3JQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCwgVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorewor
ICAgIGlmIChwYXRoID09ICIvcGFnZWxpc3QuanNvbiIpIHsKKyAgICAgICAgYnVpbGRQYWdlTGlz
dChkYXRhLCBjb250ZW50VHlwZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IFN0cmluZyBsb2NhbFBhdGggPSAocGF0aCA9PSAiLyIpID8gIi93ZWJraXQvcmVzb3VyY2VzL2lu
c3BlY3RvclBhZ2VJbmRleC5odG1sIiA6IHBhdGg7CisgICAgUUZpbGUgZmlsZShRU3RyaW5nOjpm
cm9tTGF0aW4xKCI6JTEiKS5hcmcobG9jYWxQYXRoKSk7CisgICAgaWYgKGZpbGUuZXhpc3RzKCkp
IHsKKyAgICAgICAgZmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgICAgICBkYXRh
Lmdyb3coZmlsZS5zaXplKCkpOworICAgICAgICBmaWxlLnJlYWQoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKTsKKworICAgICAgICBzaXplX3QgZXh0U3RhcnQgPSBsb2NhbFBhdGgucmV2ZXJzZUZp
bmQoJy4nKTsKKyAgICAgICAgU3RyaW5nIGV4dCA9IGxvY2FsUGF0aC5zdWJzdHJpbmcoZXh0U3Rh
cnQgIT0gbm90Rm91bmQgPyBleHRTdGFydCArIDEgOiAwKTsKKyAgICAgICAgY29udGVudFR5cGUg
PSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6YnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hhcj4mIGRhdGEs
IFN0cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBt
X2NsaWVudE1hcC5lbmQoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWls
ZGVyLmFwcGVuZCgiWyAiKTsKKyAgICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
Y2xpZW50TWFwLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViUGFn
ZVByb3h5KiB3ZWJQYWdlID0gaXRlci0+c2Vjb25kLT5wYWdlKCk7CisgICAgICAgIGlmIChpdGVy
ICE9IG1fY2xpZW50TWFwLmJlZ2luKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAi
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoInsgXCJkZXNjcmlwdGlvblwiOiBcIiIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5wYWdlVGl0bGUoKSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCJcIiwgXCJpbnNwZWN0b3JMb2NhdGlvblwiOiBcIiIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgiL3dlYmtpdC9pbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWw/cGFnZT0iICsgU3Ry
aW5nOjpudW1iZXIoaXRlci0+Zmlyc3QpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiIH0i
KTsKKyAgICB9CisgICAgYnVpbGRlci5hcHBlbmQoIiBdIik7CisgICAgQ1N0cmluZyBjc3RyID0g
YnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBkYXRhLmFwcGVuZChjc3RyLmRhdGEoKSwg
Y3N0ci5sZW5ndGgoKSk7CisgICAgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbjsgY2hh
cnNldD11dGYtOCI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cXJjIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5xcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUwNDE2YzdlYWI4
MzZjNTBjOWIzMGIxMTcwMzc2ZThlMWQ0M2M5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucXJjCkBAIC0wLDAgKzEsNSBAQAorPCFET0NUWVBFIFJDQz48UkNDIHZl
cnNpb249IjEuMCI+Cis8cXJlc291cmNlIHByZWZpeD0iL3dlYmtpdC9yZXNvdXJjZXMiPgorICAg
IDxmaWxlIGFsaWFzPSJpbnNwZWN0b3JQYWdlSW5kZXguaHRtbCI+cXQvUmVzb3VyY2VzL2luc3Bl
Y3RvclBhZ2VJbmRleC5odG1sPC9maWxlPgorPC9xcmVzb3VyY2U+Cis8L1JDQz4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbCBi
L1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44YTczMjQ3ZDdkMDcyZDU2YzAxMDdhZjRiNTcwYzExZWE5MmZjMmExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvcXQvUmVzb3VyY2VzL2luc3BlY3RvclBhZ2VJbmRl
eC5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+PGhlYWQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBjcmVhdGVQYWdlTGlzdCgp
IHsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHhoci5vcGVuKCJHRVQi
LCAiL3BhZ2VsaXN0Lmpzb24iKTsKKyAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICAgIHZhciBwYWdlcyA9IEpT
T04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICBpZiAocGFnZXMubGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub1BhZ2VOb3RpY2Ui
KS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBwYWdl
cykgeworICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YSIpOworICAgICAgICAgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUocGFnZXNbaV0uZGVzY3JpcHRpb24gPyBwYWdlc1tpXS5kZXNjcmlwdGlvbiA6ICgiUGFn
ZSAiICsgKE51bWJlcihpKSsxKSkpKTsKKyAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0
ZSgiaHJlZiIsIHBhZ2VzW2ldLmluc3BlY3RvckxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOworICAgICAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHhoci5zZW5kKCk7Cit9CisKK2RvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBjcmVhdGVQYWdlTGlzdCwgZmFs
c2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+PGJvZHk+Cis8aDE+SW5zcGVjdGFibGUgd2ViIHZpZXdz
PC9oMT4KKzxwIGlkPSJub1BhZ2VOb3RpY2UiIHN0eWxlPSJjb2xvcjpncmV5Ij5Ob25lIGZvdW5k
LCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBzZXQgdGhlIGRldmVsb3BlckV4dHJhc0VuYWJsZWQg
cHJlZmVyZW5jZSBwcm9wZXJ0eSBvbiB5b3VyIFdlYlZpZXcuPC9wPgorPC9ib2R5PjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135099</attachid>
            <date>2012-04-02 07:38:31 -0700</date>
            <delta_ts>2012-04-03 03:32:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73855-20120402163606.patch</filename>
            <type>text/plain</type>
            <size>21109</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTI5MGIyM2M1ODNjNmZk
ZDg1MTE5YzdmODM5NWU3NjJhNWU4NjUxNS4uNTQ1NTcxYTgyZjJkZTc2MTI4NWMyODZlZDEzMTJm
NGZiZWFkMDgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTAzLTI5ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKKyAgICAgICAgV2ViSW5zcGVjdG9yU2VydmVy
IGZvciBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzM4NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgc2VydmVyIHVzZXMgV2ViU29ja2V0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhl
IHJlbW90ZSBjbGllbnQgYW5kCisgICAgICAgIG5vcm1hbCBIVFRQIHJlcXVlc3RzIGFyZSBoYW5k
bGVkIHRvIG9wdGlvbmFsbHkgc2VuZCB0aGUgZnJvbnRlbmQgb24gdGhlCisgICAgICAgIHdpcmUu
IFRob3NlIGRlY2lzaW9uIGFyZSBoYW5kbGVkIHBlciBwbGF0Zm9ybSBhbmQgUXQgY3VycmVudGx5
IG1hcHM6CisKKyAgICAgICAgICAtICIvIiB0byBhIHN0YXRpYyBsaXN0aW5nIHBhZ2UuCisgICAg
ICAgICAgLSAiL3BhZ2VsaXN0Lmpzb24iIHRvIHRoZSBwYWdlIGxpc3QgZm9yIHRoZSBsaXN0aW5n
IHBhZ2Ugb3IgdG9vbHMuCisgICAgICAgICAgLSBhbnl0aGluZyBlbHNlLCBmb3IgZXhhbXBsZSAi
L2luc3BlY3Rvci5qcyIgdG8gdGhlIGZpbGUgd2l0aCB0aGUKKyAgICAgICAgICAgIHNhbWUgbmFt
ZSBpbiB0aGUgZHluYW1pYyBsaWJyYXJpZXMgYnVpbHQgcmVzb3VyY2VzLgorICAgICAgICAgICAg
SW52YWxpZCBmaWxlcyBzaG91bGQgcmV0dXJuIGEgNDA0LgorCisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cGFnZUlk
RnJvbVJlcXVlc3RQYXRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpz
ZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OldlYkluc3BlY3Rv
clNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6fldlYkluc3Bl
Y3RvclNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0
ZXJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjp1bnJlZ2lzdGVy
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VP
dmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6ZGlk
UmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRFc3RhYmxpc2hXZWJTb2NrZXRD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNl
aXZlV2ViU29ja2V0TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZl
cjo6ZGlkQ2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yU2VydmVyOjpjbG9zZUNvbm5lY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYkluc3BlY3RvclNlcnZlcik6CisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpwbGF0Zm9y
bVJlc291cmNlRm9yUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6
YnVpbGRQYWdlTGlzdCk6CisgICAgICAgICogV2ViS2l0Mi5xcmM6IEFkZGVkLgorICAgICAgICAq
IHF0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbDogQWRkZWQuCisKKzIwMTItMDMt
MjkgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4gYW5kIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKwogICAgICAgICBBZGQgYSBHZW5l
cmljIFdlYlNvY2tldCBTZXJ2ZXIuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA5MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA3MGM1ODIwM2MxYzk0OGRiODFl
MmYyMTE5MGIzNWFmNzdhYTQ0Yjg4Li42NDJlMzRjMDE0YTIzNDU5NzM5MDA0YTlmZjMyYmEzNDYz
YmQyZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTE2LDYgKzE2LDggQEAgUVQgKz0gZGVjbGFyYXRpdmUg
cXVpY2sgcXVpY2stcHJpdmF0ZQogCiBDT05GSUcgKz0gc3RhdGljbGliCiAKK1JFU09VUkNFUyAr
PSAkJFBXRC9XZWJLaXQyLnFyYworCiBIRUFERVJTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5oIFwKQEAgLTIwMiw2ICsyMDQsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2Vu
ZXJpY0NhbGxiYWNrLmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0UHJveHkuaCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0
b3JTZXJ2ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGll
bnQuaCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmggXApAQCAtNTQxLDggKzU0NCwxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvRmluZEluZGljYXRvci5jcHAgXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViSW5zcGVjdG9yU2VydmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJTb2NrZXRTZXJ2ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNo
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2QxODk1
ODQyMzgxOTIyNGIwMDQyZTY5YTU0ZTJlYzcyMWZhZTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIu
Y3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9TRVJWRVIpCisKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JTZXJ2ZXIuaCIKKwor
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFJlcXVlc3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgdW5zaWdu
ZWQgcGFnZUlkRnJvbVJlcXVlc3RQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzaXpl
X3Qgc3RhcnQgPSBwYXRoLnJldmVyc2VGaW5kKCcvJyk7CisgICAgU3RyaW5nIG51bWJlclN0cmlu
ZyA9IHBhdGguc3Vic3RyaW5nKHN0YXJ0ICsgMSwgcGF0aC5sZW5ndGgoKSAtIHN0YXJ0IC0gMSk7
CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgdW5zaWduZWQgbnVtYmVyID0gbnVtYmVyU3Ry
aW5nLnRvVUludFN0cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudW1iZXI7Cit9CisKK1dlYkluc3BlY3RvclNlcnZlciogV2ViSW5zcGVjdG9y
U2VydmVyOjpzZXJ2ZXIoKQoreworICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JTZXJ2ZXIqIHNfc2Vy
dmVyID0gbmV3IFdlYkluc3BlY3RvclNlcnZlcjsKKyAgICByZXR1cm4gc19zZXJ2ZXI7Cit9CisK
K1dlYkluc3BlY3RvclNlcnZlcjo6V2ViSW5zcGVjdG9yU2VydmVyKCkKKyAgICA6IFdlYlNvY2tl
dFNlcnZlcih0aGlzKQorICAgICwgbV9uZXh0QXZhaWxhYmxlUGFnZUlkKDEpCit7Cit9CisKK1dl
Ykluc3BlY3RvclNlcnZlcjo6fldlYkluc3BlY3RvclNlcnZlcigpCit7CisgICAgLy8gQ2xvc2Ug
YW55IHJlbWFpbmluZyBvcGVuIGNvbm5lY3Rpb25zLgorICAgIEhhc2hNYXA8dW5zaWduZWQsIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9uTWFw
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbio+OjppdGVyYXRvciBpdCA9IG1fY29ubmVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVu
dE1hcC5nZXQoY29ubmVjdGlvbi0+aWRlbnRpZmllcigpKTsKKyAgICAgICAgY2xvc2VDb25uZWN0
aW9uKGNsaWVudCwgY29ubmVjdGlvbik7CisgICAgfQorfQorCitpbnQgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpyZWdpc3RlclBhZ2UoV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCkKK3sKKyNpZm5kZWYg
QVNTRVJUX0RJU0FCTEVECisgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1h
cC5lbmQoKTsKKyAgICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGNs
aWVudCk7CisjZW5kaWYKKworICAgIGludCBwYWdlSWQgPSBtX25leHRBdmFpbGFibGVQYWdlSWQr
KzsKKyAgICBtX2NsaWVudE1hcC5zZXQocGFnZUlkLCBjbGllbnQpOworICAgIHJldHVybiBwYWdl
SWQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjp1bnJlZ2lzdGVyUGFnZShpbnQgcGFn
ZUlkKQoreworICAgIG1fY2xpZW50TWFwLnJlbW92ZShwYWdlSWQpOworICAgIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb25NYXAuZ2V0KHBhZ2VJZCk7
CisgICAgaWYgKGNvbm5lY3Rpb24pCisgICAgICAgIGNsb3NlQ29ubmVjdGlvbigwLCBjb25uZWN0
aW9uKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlT3ZlckNvbm5l
Y3Rpb24odW5zaWduZWQgcGFnZUlkRm9yQ29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBtX2Nvbm5l
Y3Rpb25NYXAuZ2V0KHBhZ2VJZEZvckNvbm5lY3Rpb24pOworICAgIGlmIChjb25uZWN0aW9uKQor
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kV2ViU29ja2V0TWVzc2FnZShtZXNzYWdlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2VpdmVVbnJlY29nbml6ZWRIVFRQUmVxdWVz
dChXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPEhUVFBS
ZXF1ZXN0PiByZXF1ZXN0KQoreworICAgIFN0cmluZyBwYXRoID0gcmVxdWVzdC0+dXJsKCk7Cisg
ICAgc2l6ZV90IHBhdGhFbmQgPSBwYXRoLmZpbmQoJz8nKTsKKyAgICBpZiAocGF0aEVuZCA9PSBu
b3RGb3VuZCkKKyAgICAgICAgcGF0aEVuZCA9IHBhdGguZmluZCgnIycpOworICAgIGlmIChwYXRo
RW5kICE9IG5vdEZvdW5kKQorICAgICAgICBwYXRoLnRydW5jYXRlKHBhdGhFbmQpOworCisgICAg
Ly8gQXNrIGZvciB0aGUgY29tcGxldGUgcGF5bG9hZCBpbiBtZW1vcnkgZm9yIHRoZSBzYWtlIG9m
IHNpbXBsaWNpdHkuIEEgbW9yZSBlZmZpY2llbnQgd2F5IHdvdWxkIGJlCisgICAgLy8gdG8gYXNr
IGZvciBoZWFkZXIgZGF0YSBhbmQgdGhlbiBsZXQgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIHdy
aXRlIHRoZSBwYXlsb2FkIHN0cmFpZ2h0IG9uIHRoZSBjb25uZWN0aW9uLgorICAgIFZlY3Rvcjxj
aGFyPiBib2R5OworICAgIFN0cmluZyBjb250ZW50VHlwZTsKKyAgICBib29sIGZvdW5kID0gcGxh
dGZvcm1SZXNvdXJjZUZvclBhdGgocGF0aCwgYm9keSwgY29udGVudFR5cGUpOworCisgICAgSFRU
UEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgaGVhZGVyRmllbGRzLnNldCgiQ29ubmVjdGlv
biIsICJjbG9zZSIpOworICAgIGhlYWRlckZpZWxkcy5zZXQoIkNvbnRlbnQtTGVuZ3RoIiwgU3Ry
aW5nOjpudW1iZXIoYm9keS5zaXplKCkpKTsKKyAgICBpZiAoZm91bmQpCisgICAgICAgIGhlYWRl
ckZpZWxkcy5zZXQoIkNvbnRlbnQtVHlwZSIsIGNvbnRlbnRUeXBlKTsKKworICAgIC8vIFNlbmQg
d2hlbiByZWFkeSBhbmQgY2xvc2UgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4KKyAgICBjb25uZWN0
aW9uLT5zZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGZvdW5kID8gMjAwIDogNDA0LCBmb3VuZCA/ICJP
SyIgOiAiTm90IEZvdW5kIiwgaGVhZGVyRmllbGRzKTsKKyAgICBjb25uZWN0aW9uLT5zZW5kUmF3
RGF0YShib2R5LmRhdGEoKSwgYm9keS5zaXplKCkpOworICAgIGNvbm5lY3Rpb24tPnNodXRkb3du
QWZ0ZXJTZW5kT3JOb3coKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2Vp
dmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbios
IFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgU3RyaW5nIHBhdGggPSBy
ZXF1ZXN0LT51cmwoKTsKKworICAgIC8vIE5PVEU6IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcy4KKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgaW5zcGVjdG9yV2ViU29ja2V0Q29ubmVjdGlvblBhdGhQcmVm
aXgsICgiL2RldnRvb2xzL3BhZ2UvIikpOworCisgICAgLy8gVW5rbm93biBwYXRoIHJlcXVlc3Rl
ZC4KKyAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChpbnNwZWN0b3JXZWJTb2NrZXRDb25uZWN0aW9u
UGF0aFByZWZpeCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBwYWdlSWQgPSBw
YWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0aCk7CisgICAgLy8gSW52YWxpZCBwYWdlIGlkLgorICAg
IGlmICghcGFnZUlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGVyZSBpcyBu
byBjbGllbnQgZm9yIHRoYXQgcGFnZSBpZC4KKyAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50
ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkluc3BlY3RvclNl
cnZlcjo6ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPEhUVFBSZXF1ZXN0PiByZXF1ZXN0KQorewor
ICAgIFN0cmluZyBwYXRoID0gcmVxdWVzdC0+dXJsKCk7CisgICAgdW5zaWduZWQgcGFnZUlkID0g
cGFnZUlkRnJvbVJlcXVlc3RQYXRoKHBhdGgpOworICAgIEFTU0VSVChwYWdlSWQpOworCisgICAg
Ly8gSWdub3JlIGNvbm5lY3Rpb25zIHRvIGEgcGFnZSB0aGF0IGFscmVhZHkgaGF2ZSBhIHJlbW90
ZSBpbnNwZWN0b3IgY29ubmVjdGVkLgorICAgIGlmIChtX2Nvbm5lY3Rpb25NYXAuY29udGFpbnMo
cGFnZUlkKSkgeworICAgICAgICBMT0dfRVJST1IoIkEgcmVtb3RlIGluc3BlY3RvciBjb25uZWN0
aW9uIGFscmVhZHkgZXhpc3QgZm9yIHBhZ2UgSUQgJWQuIElnbm9yaW5nLiIsIHBhZ2VJZCk7Cisg
ICAgICAgIGNvbm5lY3Rpb24tPnNodXRkb3duTm93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBNYXAgdGhlIHBhZ2VJZCB0byB0aGUgY29ubmVjdGlvbiBpbiBjYXNlIHdlIG5l
ZWQgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gbG9jYWxseS4KKyAgICBjb25uZWN0aW9uLT5zZXRJ
ZGVudGlmaWVyKHBhZ2VJZCk7CisgICAgbV9jb25uZWN0aW9uTWFwLnNldChwYWdlSWQsIGNvbm5l
Y3Rpb24pOworCisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IG1fY2xpZW50TWFwLmdl
dChwYWdlSWQpOworICAgIGNsaWVudC0+cmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmRpZFJlY2VpdmVXZWJTb2NrZXRNZXNzYWdlKFdlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICAvLyBEaXNwYXRjaCBpbmNvbWluZyByZW1vdGUgbWVzc2FnZSBsb2NhbGx5LgorICAg
IHVuc2lnbmVkIHBhZ2VJZCA9IGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKTsKKyAgICBBU1NFUlQo
cGFnZUlkKTsKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0
KHBhZ2VJZCk7CisgICAgY2xpZW50LT5kaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlRnJvbnRlbmQo
bWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpkaWRDbG9zZVdlYlNvY2tl
dENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAg
ICAvLyBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHNodXQgZG93bi4KKyAgICB1bnNpZ25lZCBwYWdl
SWQgPSBjb25uZWN0aW9uLT5pZGVudGlmaWVyKCk7CisgICAgaWYgKCFwYWdlSWQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRoZSBzb2NrZXQgY2xvc2luZyBtZWFucyB0aGUgcmVtb3RlIHNp
ZGUgaGFzIGNhdXNlZCB0aGUgY2xvc2UuCisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9
IG1fY2xpZW50TWFwLmdldChwYWdlSWQpOworICAgIGNsb3NlQ29ubmVjdGlvbihjbGllbnQsIGNv
bm5lY3Rpb24pOworfQorCit2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6Y2xvc2VDb25uZWN0aW9u
KFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24pCit7CisgICAgLy8gTG9jYWwgc2lkZSBjbGVhbnVwLgorICAgIGlmIChjbGllbnQp
CisgICAgICAgIGNsaWVudC0+cmVtb3RlRnJvbnRlbmREaXNjb25uZWN0ZWQoKTsKKworICAgIC8v
IFJlbW90ZSBzaWRlIGNsZWFudXAuCisgICAgbV9jb25uZWN0aW9uTWFwLnJlbW92ZShjb25uZWN0
aW9uLT5pZGVudGlmaWVyKCkpOworICAgIGNvbm5lY3Rpb24tPnNldElkZW50aWZpZXIoMCk7Cisg
ICAgY29ubmVjdGlvbi0+c2h1dGRvd25Ob3coKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9TRVJWRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NDJmNWQ4Y2QxMzBkYmRlOTNmYWJkNmE1ZmY4Nzc0N2FlZjMzODZiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JT
ZXJ2ZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJJbnNwZWN0b3JTZXJ2ZXJfaAor
I2RlZmluZSBXZWJJbnNwZWN0b3JTZXJ2ZXJfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJW
RVIpCisKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRT
ZXJ2ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSW5zcGVj
dG9yUHJveHk7CisKK2NsYXNzIFdlYkluc3BlY3RvclNlcnZlciA6IHB1YmxpYyBXZWJTb2NrZXRT
ZXJ2ZXIsIHB1YmxpYyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSGFzaE1hcDx1bnNpZ25lZCwgV2ViSW5zcGVjdG9yUHJveHkqPiBDbGllbnRNYXA7CisgICAg
Ly8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKyAgICBzdGF0aWMgV2ViSW5zcGVjdG9yU2VydmVy
KiBzZXJ2ZXIoKTsKKworICAgIC8vIFBhZ2UgcmVnaXN0cnkgdG8gbWFuYWdlIGtub3duIHBhZ2Vz
LgorICAgIGludCByZWdpc3RlclBhZ2UoV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCk7CisgICAg
dm9pZCB1bnJlZ2lzdGVyUGFnZShpbnQgcGFnZUlkKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlT3Zl
ckNvbm5lY3Rpb24odW5zaWduZWQgcGFnZUlkRm9yQ29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBXZWJJbnNwZWN0b3JTZXJ2ZXIoKTsKKyAgICB+V2Vi
SW5zcGVjdG9yU2VydmVyKCk7CisKKyAgICAvLyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgaW1wbGVt
ZW50YXRpb24uIEV2ZW50cyBjb21pbmcgZnJvbSByZW1vdGUgY29ubmVjdGlvbnMuCisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVVbnJlY29nbml6ZWRIVFRQUmVxdWVzdChXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIVFRQUmVxdWVzdD4pOworICAgIHZp
cnR1YWwgYm9vbCBkaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkhUVFBSZXF1ZXN0Pik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRUUFJlcXVlc3Q+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldE1lc3NhZ2UoV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKik7CisK
KyAgICBib29sIHBsYXRmb3JtUmVzb3VyY2VGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgVmVj
dG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyNpZiBQTEFURk9STShRVCkK
KyAgICB2b2lkIGJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRl
bnRUeXBlKTsKKyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUNvbm5lY3Rpb24oV2ViSW5zcGVjdG9y
UHJveHkqLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKik7CisKKyAgICB1bnNpZ25lZCBtX25l
eHRBdmFpbGFibGVQYWdlSWQ7CisgICAgQ2xpZW50TWFwIG1fY2xpZW50TWFwOworICAgIEhhc2hN
YXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPiBtX2Nvbm5lY3Rpb25NYXA7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlm
IC8vIFdlYkluc3BlY3RvclNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVy
UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE0MzIwNzk2OGZjMWE5MjM2NzNiNTNhZmQ1ODIxZmE0MmFiZDk1
NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpwbGF0Zm9ybVJlc291cmNlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIFZlY3Rvcjxj
aGFyPiYgZGF0YSwgU3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICAvLyBUaGUgcGFnZSBsaXN0
IGNvbnRhaW5zIGFuIHVuZm9ybWF0ZWQgbGlzdCBvZiBwYWdlcyB0aGF0IGNhbiBiZSBpbnNwZWN0
ZWQgd2l0aCBhIGxpbmsgdG8gb3BlbiBhIHNlc3Npb24uCisgICAgaWYgKHBhdGggPT0gIi9wYWdl
bGlzdC5qc29uIikgeworICAgICAgICBidWlsZFBhZ2VMaXN0KGRhdGEsIGNvbnRlbnRUeXBlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhlIGRlZmF1bHQg
cGF0aCB0byBhIGZvcm1hdHRlZCBwYWdlIHRoYXQgcXVlcmllcyB0aGUgcGFnZSBsaXN0IGFuZCBk
aXNwbGF5IHRoZW0uCisgICAgU3RyaW5nIGxvY2FsUGF0aCA9IChwYXRoID09ICIvIikgPyAiL3dl
YmtpdC9yZXNvdXJjZXMvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwiIDogcGF0aDsKKyAgICAvLyBB
bGwgb3RoZXIgcGF0aHMgYXJlIG1hcHBlZCBkaXJlY3RseSB0byBhIHJlc291cmNlLCBpZiBwb3Nz
aWJsZS4KKyAgICBRRmlsZSBmaWxlKFFTdHJpbmc6OmZyb21MYXRpbjEoIjolMSIpLmFyZyhsb2Nh
bFBhdGgpKTsKKyAgICBpZiAoZmlsZS5leGlzdHMoKSkgeworICAgICAgICBmaWxlLm9wZW4oUUlP
RGV2aWNlOjpSZWFkT25seSk7CisgICAgICAgIGRhdGEuZ3JvdyhmaWxlLnNpemUoKSk7CisgICAg
ICAgIGZpbGUucmVhZChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworCisgICAgICAgIHNpemVf
dCBleHRTdGFydCA9IGxvY2FsUGF0aC5yZXZlcnNlRmluZCgnLicpOworICAgICAgICBTdHJpbmcg
ZXh0ID0gbG9jYWxQYXRoLnN1YnN0cmluZyhleHRTdGFydCAhPSBub3RGb3VuZCA/IGV4dFN0YXJ0
ICsgMSA6IDApOworICAgICAgICBjb250ZW50VHlwZSA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpi
dWlsZFBhZ2VMaXN0KFZlY3RvcjxjaGFyPiYgZGF0YSwgU3RyaW5nJiBjb250ZW50VHlwZSkKK3sK
KyAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50TWFwLmVuZCgpOworCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJbICIpOworICAgIGZv
ciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdGVyID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdGVyLT5z
ZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9jbGllbnRNYXAuYmVnaW4oKSkK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZCgieyBcImRlc2NyaXB0aW9uXCI6IFwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdlYlBh
Z2UtPnBhZ2VUaXRsZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBcInVybFwiOiBc
IiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5hY3RpdmVVUkwoKSk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiwgXCJpbnNwZWN0b3JMb2NhdGlvblwiOiBcIiIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiL3dlYmtpdC9pbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWw/cGFn
ZT0iICsgU3RyaW5nOjpudW1iZXIoaXRlci0+Zmlyc3QpKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoIlwiIH0iKTsKKyAgICB9CisgICAgYnVpbGRlci5hcHBlbmQoIiBdIik7CisgICAgQ1N0cmlu
ZyBjc3RyID0gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBkYXRhLmFwcGVuZChjc3Ry
LmRhdGEoKSwgY3N0ci5sZW5ndGgoKSk7CisgICAgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24v
anNvbjsgY2hhcnNldD11dGYtOCI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucXJjIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5xcmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUw
NDE2YzdlYWI4MzZjNTBjOWIzMGIxMTcwMzc2ZThlMWQ0M2M5MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucXJjCkBAIC0wLDAgKzEsNSBAQAorPCFET0NUWVBFIFJD
Qz48UkNDIHZlcnNpb249IjEuMCI+Cis8cXJlc291cmNlIHByZWZpeD0iL3dlYmtpdC9yZXNvdXJj
ZXMiPgorICAgIDxmaWxlIGFsaWFzPSJpbnNwZWN0b3JQYWdlSW5kZXguaHRtbCI+cXQvUmVzb3Vy
Y2VzL2luc3BlY3RvclBhZ2VJbmRleC5odG1sPC9maWxlPgorPC9xcmVzb3VyY2U+Cis8L1JDQz4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5k
ZXguaHRtbCBiL1NvdXJjZS9XZWJLaXQyL3F0L1Jlc291cmNlcy9pbnNwZWN0b3JQYWdlSW5kZXgu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMDc0NTQxMjc3NGE0ODRiODdhODFlYTE5MmRmZjQ1ZmM3NTU3MjU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvcXQvUmVzb3VyY2VzL2luc3BlY3Rv
clBhZ2VJbmRleC5odG1sCkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
PGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBjcmVhdGVQ
YWdlTGlzdCgpIHsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHhoci5v
cGVuKCJHRVQiLCAiL3BhZ2VsaXN0Lmpzb24iKTsKKyAgICB4aHIub25sb2FkID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICAgIHZhciBw
YWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICBpZiAocGFn
ZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub1Bh
Z2VOb3RpY2UiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgZm9yICh2YXIg
aSBpbiBwYWdlcykgeworICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYSIpOworICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IHBhZ2VzW2ld
LmRlc2NyaXB0aW9uID8gcGFnZXNbaV0uZGVzY3JpcHRpb24gOiAoIlBhZ2UgIiArIChOdW1iZXIo
aSkrMSkpOworICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwYWdlc1tpXS51cmw7CisgICAgICAg
ICAgICAgICAgbGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkZXNjcmlw
dGlvbiArICh1cmwgPyAoIiBbIiArIHVybCArICJdIikgOiAiIiApKSk7CisgICAgICAgICAgICAg
ICAgbGluay5zZXRBdHRyaWJ1dGUoImhyZWYiLCBwYWdlc1tpXS5pbnNwZWN0b3JMb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsKKyAgICAg
ICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImJyIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICB4aHIuc2Vu
ZCgpOworfQorCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwg
Y3JlYXRlUGFnZUxpc3QsIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFkPjxib2R5PgorPGgxPklu
c3BlY3RhYmxlIHdlYiB2aWV3czwvaDE+Cis8cCBpZD0ibm9QYWdlTm90aWNlIiBzdHlsZT0iY29s
b3I6Z3JleSI+Tm9uZSBmb3VuZCwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgc2V0IHRoZSBkZXZl
bG9wZXJFeHRyYXNFbmFibGVkIHByZWZlcmVuY2UgcHJvcGVydHkgb24geW91ciBXZWJWaWV3Ljwv
cD4KKzwvYm9keT48L2h0bWw+Cg==
</data>
<flag name="review"
          id="139515"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>