<?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>195948</bug_id>
          
          <creation_ts>2019-03-19 08:58:57 -0700</creation_ts>
          <short_desc>[GStreamer] Switch back to webkitwebsrc for adaptive streaming fragments downloading</short_desc>
          <delta_ts>2019-03-20 04:26:34 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>189967</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>calvaris</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1518288</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-19 08:58:57 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518303</commentid>
    <comment_count>1</comment_count>
      <attachid>365172</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-19 09:39:45 -0700</bug_when>
    <thetext>Created attachment 365172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518824</commentid>
    <comment_count>2</comment_count>
      <attachid>365172</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-03-20 02:59:15 -0700</bug_when>
    <thetext>Comment on attachment 365172
Patch

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

It is not necessarily wrong but I think we should handle the context in a different and probably more efficient way.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1342
&gt; +            const char* uri = gst_structure_get_string(structure, &quot;uri&quot;);
&gt; +            const char* redirectionUri = gst_structure_get_string(structure, &quot;redirection-uri&quot;);
&gt; +            uri = redirectionUri ? redirectionUri : uri;

You can do:

const char* redirectionUri = gst_structure_get_string(structure, &quot;redirection-uri&quot;);
uri = redirectionUri ? redirectionUri : gst_structure_get_string(structure, &quot;uri&quot;);

and you might be saving one call.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1347
&gt; +                auto origin = SecurityOrigin::create(url);
&gt; +                m_origins.add(WTFMove(origin));

m_origins.add(SecurityOrigin::create(url));

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:346
&gt; +    if (!g_strcmp0(contextType, WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME)) {
&gt; +        GRefPtr&lt;GstContext&gt; context = adoptGRef(gst_context_new(WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME, FALSE));
&gt; +        GstStructure* contextStructure = gst_context_writable_structure(context.get());
&gt; +
&gt; +        ASSERT(m_player);
&gt; +        gst_structure_set(contextStructure, &quot;player&quot;, G_TYPE_POINTER, m_player, nullptr);
&gt; +        gst_element_set_context(GST_ELEMENT(GST_MESSAGE_SRC(message)), context.get());
&gt; +        return true;
&gt; +    }

This code is ok but unnecessary here.

GstContext is meant to the set on pipelines so that it is the pipeline that dispatches the context to the elements when they are created and added to it.

The pipeline cannot exist without the player private,  the private creates the pipeline and the player is (or should be) set to the private prior to that. So when the pipeline is created, we can set the context to it immediately (fire and forget!). Once the elements are created and added to it, the context should be immediately available.

Summing up, IMHO you should neither listen to this message nor send it (read my comment below) and just set the context to the pipeline when the pipeline is created.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:165
&gt;      gst_element_class_add_static_pad_template(eklass, &amp;srcTemplate);
&gt;  
&gt; +    gst_element_class_add_static_pad_template(eklass, &amp;srcTemplate);

Am I seeing double here?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:498
&gt; +    if (!priv-&gt;player) {
&gt; +        GRefPtr&lt;GstQuery&gt; query = adoptGRef(gst_query_new_context(WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME));
&gt; +        if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {
&gt; +            GstContext* context;
&gt; +
&gt; +            gst_query_parse_context(query.get(), &amp;context);
&gt; +            gst_element_set_context(GST_ELEMENT_CAST(src), context);
&gt; +        } else
&gt; +            gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_need_context(GST_OBJECT_CAST(src), WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME));
&gt; +    }

I doubt this is ever run. You could keep it but I&apos;d suggest replacing it with a [RELEASE_]ASSERT(priv-&gt;player) because this is dead code.

My rationale behind  this is that GStreamer doc does indeed suggest querying for context if you don&apos;t have it. Here the context should be available just after the element is created and added to the pipeline, if the context was already set to the pipeline (see my comment above).

You can add a comment to explain this.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:768
&gt; -    static const char* protocols[] = {&quot;webkit+http&quot;, &quot;webkit+https&quot;, &quot;webkit+blob&quot;, nullptr };
&gt; +    static const char* protocols[] = {&quot;http&quot;, &quot;https&quot;, &quot;blob&quot;, nullptr };

Really nice to know that we are not leaking these element anymore cause this leaves in the web process :D

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:886
&gt; +    long long length = response.expectedContentLength();

uint64_t?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:920
&gt; +    auto scopeExit = makeScopeExit([&amp;] {
&gt; +        GstStructure* structure = gst_structure_copy(src-&gt;priv-&gt;httpHeaders.get());
&gt; +        gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_element(GST_OBJECT_CAST(src), structure));
&gt; +    });

Are you ok with this running at the end of the function, AFTER the completion handler?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518829</commentid>
    <comment_count>3</comment_count>
      <attachid>365172</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-20 03:36:50 -0700</bug_when>
    <thetext>Comment on attachment 365172
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:346
&gt;&gt; +    }
&gt; 
&gt; This code is ok but unnecessary here.
&gt; 
&gt; GstContext is meant to the set on pipelines so that it is the pipeline that dispatches the context to the elements when they are created and added to it.
&gt; 
&gt; The pipeline cannot exist without the player private,  the private creates the pipeline and the player is (or should be) set to the private prior to that. So when the pipeline is created, we can set the context to it immediately (fire and forget!). Once the elements are created and added to it, the context should be immediately available.
&gt; 
&gt; Summing up, IMHO you should neither listen to this message nor send it (read my comment below) and just set the context to the pipeline when the pipeline is created.

This code is needed because secondary webkitwebsrc elements created by adaptivedemux/uridownloader have no relationship whatsoever with the first webkitwebsrc that was used to download the manifest. Anyway, I tried what you suggest, set the context on the whole pipeline when it was created, and secondary webkitwebsrc element now crashes because of the RELEASE_ASSERT I added in webKitWebSrcStart(), which means the element context is not set early enough.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:920
&gt;&gt; +    });
&gt; 
&gt; Are you ok with this running at the end of the function, AFTER the completion handler?

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518834</commentid>
    <comment_count>4</comment_count>
      <attachid>365172</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-03-20 04:08:57 -0700</bug_when>
    <thetext>Comment on attachment 365172
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:346
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; This code is ok but unnecessary here.
&gt;&gt; 
&gt;&gt; GstContext is meant to the set on pipelines so that it is the pipeline that dispatches the context to the elements when they are created and added to it.
&gt;&gt; 
&gt;&gt; The pipeline cannot exist without the player private,  the private creates the pipeline and the player is (or should be) set to the private prior to that. So when the pipeline is created, we can set the context to it immediately (fire and forget!). Once the elements are created and added to it, the context should be immediately available.
&gt;&gt; 
&gt;&gt; Summing up, IMHO you should neither listen to this message nor send it (read my comment below) and just set the context to the pipeline when the pipeline is created.
&gt; 
&gt; This code is needed because secondary webkitwebsrc elements created by adaptivedemux/uridownloader have no relationship whatsoever with the first webkitwebsrc that was used to download the manifest. Anyway, I tried what you suggest, set the context on the whole pipeline when it was created, and secondary webkitwebsrc element now crashes because of the RELEASE_ASSERT I added in webKitWebSrcStart(), which means the element context is not set early enough.

I understand, then we&apos;re cool regarding the messages, queries and context. Please fix the other minor things and we&apos;re good to go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518836</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-20 04:23:14 -0700</bug_when>
    <thetext>Committed r243197: &lt;https://trac.webkit.org/changeset/243197&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518837</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-20 04:26:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/49057856&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365172</attachid>
            <date>2019-03-19 09:39:45 -0700</date>
            <delta_ts>2019-03-20 04:08:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195948-20190319163944.patch</filename>
            <type>text/plain</type>
            <size>24872</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZkNmEwNGQ5ZmEzYmVh
MjgxMTM0OGU3NjkyM2NiZTM2MDM1ODVhOC4uNDY2NjJhYjA4NDM5MDQ0N2RiN2QzZDg5MWE3NWEx
MThhZmYyNDJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE5LTAzLTE5ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBTd2l0Y2ggYmFjayB0byB3ZWJraXR3ZWJzcmMgZm9yIGFkYXB0aXZlIHN0cmVhbWluZyBmcmFn
bWVudHMgZG93bmxvYWRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSB3ZWJraXR3ZWJzcmMgZWxlbWVudCBub3cgYmVoYXZlcyBtdWNoIGJldHRl
ciB3aGVuIHVzZWQgdGhyb3VnaAorICAgICAgICBHU3RyZWFtZXIncyBhZGFwdGl2ZWRlbXV4LCBz
byB1c2UgaXQgZm9yIGFsbCBXZWJLaXQgbWVkaWEKKyAgICAgICAgZG93bmxvYWRzLiBUaGUgTWVk
aWFQbGF5ZXIgbmVlZGVkIGJ5IHRoZSB3ZWJraXR3ZWJzcmMgZWxlbWVudCBub3cKKyAgICAgICAg
dHJhdmVscyB0aHJvdWdoIEdzdENvbnRleHQgbWVzc2FnZXMgYW5kIHF1ZXJpZXMgc28gdGhhdCBp
dCBjYW4gYmUKKyAgICAgICAgc2hhcmVkIGJ5IG11bHRpcGxlIGVsZW1lbnRzLCB0eXBpY2FsbHkg
dGhlIGZpcnN0IHdlYmtpdHdlYnNyYworICAgICAgICBlbGVtZW50IGRvd25sb2FkcyB0aGUgSExT
IG1hbmlmZXN0IGFuZCB0aGVuIGFkYXB0aXZlZGVtdXgsIHRocm91Z2gKKyAgICAgICAgdXJpZG93
bmxvYWRlciwgd2lsbCBjcmVhdGUgbmV3IHdlYmtpdHdlYnNyYyBlbGVtZW50cyBmb3IgZnJhZ21l
bnRzCisgICAgICAgIGRvd25sb2FkaW5nLiBUaG9zZSBuZXcgZWxlbWVudHMgd2lsbCBxdWVyeSB0
aGUgZmlyc3Qgd2Via2l0d2Vic3JjCisgICAgICAgIGVsZW1lbnQgZm9yIGl0cyBjb250ZXh0Lgor
CisgICAgICAgIFRoZSBwcmV2aW91cyBoYWNrIHVzZWQgdG8gY2hlY2sgU2VjdXJpdHlPcmlnaW5z
IGNhbgorICAgICAgICBhbHNvIGJlIGNsZWFuZWQtdXAuIFRoZSBvcmlnaW5zIGFyZSBub3cgY2Fj
aGVkIHVwb24gcmVjZXB0aW9uIG9mCisgICAgICAgIHRoZSBIVFRQIGhlYWRlcnMgbWVzc2FnZSBm
cm9tIHdlYmtpdHdlYnNyYy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5nIGh0dHAv
dGVzdHMvbWVkaWEvaGxzIHRlc3RzIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBsYXli
aW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjps
b2FkRnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpjb252ZXJ0VG9JbnRlcm5hbFByb3RvY29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Vi
a2l0X3dlYl9zcmNfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRDb250ZXh0
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0dl
dFByb3RvY29scyk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAoQ2Fj
aGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
Y29udmVydFBsYXliaW5VUkkpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0U3JjV291bGRUYWlu
dE9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDE5LTAzLTE5ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNDMwNTgp
OiBbR1N0cmVhbWVyXSAzIHRlc3RzIG5vdyB0aW1pbmcgb3V0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDYwZTRmZmZlZDJmZWI0NDk3ZTYz
ZmQxMWEzY2UzMWZkZDg3Yzk3NzYuLjRiODM4ODJhYmFhM2RjMTNkZTVjODFhNDNlYjk3ZjE0M2M1
NGNjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCkBAIC0yMjUsMTIgKzIyNSw2IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjb252
ZXJ0VG9JbnRlcm5hbFByb3RvY29sKFVSTCYgdXJsKQotewotICAgIGlmICh1cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKQotICAgICAgICB1cmwuc2V0
UHJvdG9jb2woIndlYmtpdCsiICsgdXJsLnByb3RvY29sKCkpOwotfQotCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGxheWJpblVSTChjb25zdCBVUkwmIHVybCkKIHsKICAg
ICAvLyBDbGVhbiBvdXQgZXZlcnl0aGluZyBhZnRlciBmaWxlOi8vIHVybCBwYXRoLgpAQCAtMjM5
LDggKzIzMyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQbGF5Ymlu
VVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICBjbGVhblVSTFN0cmluZyA9IGNsZWFuVVJMU3Ry
aW5nLnN1YnN0cmluZygwLCB1cmwucGF0aEVuZCgpKTsKIAogICAgIG1fdXJsID0gVVJMKFVSTCgp
LCBjbGVhblVSTFN0cmluZyk7Ci0gICAgY29udmVydFRvSW50ZXJuYWxQcm90b2NvbChtX3VybCk7
Ci0KICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkxvYWQgJXMiLCBtX3VybC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwg
InVyaSIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwogfQpAQCAtMzEx
LDcgKzMwMyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChj
b25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgZ2NoYXIqCiAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CiAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSBmYWxzZTsK
ICAgICBtX2R1cmF0aW9uQXRFT1MgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgbV9o
YXNUYWludGVkT3JpZ2luID0gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFtX2RlbGF5aW5nTG9h
ZCkKICAgICAgICAgY29tbWl0TG9hZCgpOwpAQCAtMTM0Niw5ICsxMzM3LDE1IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hh
c19uYW1lKHN0cnVjdHVyZSwgImh0dHAtaGVhZGVycyIpKSB7Ci0gICAgICAgICAgICBpZiAoY29u
c3QgY2hhciogdXJpID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInVyaSIp
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmkgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcoc3RydWN0dXJlLCAidXJpIik7CisgICAgICAgICAgICBjb25zdCBjaGFyKiByZWRpcmVjdGlv
blVyaSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJyZWRpcmVjdGlvbi11
cmkiKTsKKyAgICAgICAgICAgIHVyaSA9IHJlZGlyZWN0aW9uVXJpID8gcmVkaXJlY3Rpb25Vcmkg
OiB1cmk7CisgICAgICAgICAgICBpZiAodXJpKSB7CiAgICAgICAgICAgICAgICAgVVJMIHVybChV
UkwoKSwgdXJpKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9JbnRlcm5hbFByb3RvY29sKHVy
bCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUodXJsKTsKKyAgICAgICAgICAgICAgICBtX29yaWdpbnMuYWRkKFdURk1vdmUob3JpZ2luKSk7
CisKICAgICAgICAgICAgICAgICBpZiAodXJsICE9IG1fdXJsKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIklnbm9yaW5nIEhUVFAgcmVzcG9uc2Ug
aGVhZGVycyBmb3Igbm9uLW1haW4gVVJJLiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTEzNTgsMTYgKzEzNTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgInJlc3BvbnNlLWhlYWRlcnMiLCBHU1RfVFlQRV9TVFJV
Q1RVUkUsICZyZXNwb25zZUhlYWRlcnMub3V0UHRyKCksIG51bGxwdHIpKSB7CiAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogY29udGVudExlbmd0aEhlYWRlck5hbWUgPSBodHRwSGVhZGVyTmFt
ZVN0cmluZyhIVFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCkudXRmOCgpLmRhdGEoKTsKICAg
ICAgICAgICAgICAgICB1aW50NjRfdCBjb250ZW50TGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChyZXNwb25zZUhlYWRlcnMuZ2V0KCksIGNv
bnRlbnRMZW5ndGhIZWFkZXJOYW1lLCAmY29udGVudExlbmd0aCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gc291cGh0dHBzcmMgc2V0cyBhIHN0cmluZyBmb3IgQ29udGVudC1MZW5ndGgsIHNv
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLCB1bnRpbCB3ZSByZW1vdmUg
dGhlIHdlYmtpdCsgcHJvdG9jb2wKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZml4IGZyb20g
d2Via2l0d2Vic3JjLgotICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgY2hhciogY29udGVu
dExlbmd0aEFzU3RyaW5nID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHJlc3BvbnNlSGVhZGVy
cy5nZXQoKSwgY29udGVudExlbmd0aEhlYWRlck5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50TGVuZ3RoID0gZ19hc2NpaV9zdHJ0b3VsbChjb250ZW50TGVuZ3RoQXNTdHJp
bmcsIG51bGxwdHIsIDEwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50TGVu
Z3RoID09IEdfTUFYVUlOVDY0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRM
ZW5ndGggPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChyZXNwb25zZUhlYWRlcnMuZ2V0
KCksIGNvbnRlbnRMZW5ndGhIZWFkZXJOYW1lLCAmY29udGVudExlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIlcyBzdHJlYW0gZGV0ZWN0ZWQiLCAh
Y29udGVudExlbmd0aCA/ICJMaXZlIiA6ICJOb24tbGl2ZSIpOwogICAgICAgICAgICAgICAgIGlm
ICghY29udGVudExlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICBtX2lzU3RyZWFtaW5nID0g
dHJ1ZTsKQEAgLTEzNzcsMTAgKzEzNjUsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICB9IGVsc2Ug
aWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAid2Via2l0LW5ldHdvcmstc3Rh
dGlzdGljcyIpKSB7CiAgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0
cnVjdHVyZSwgInJlYWQtcG9zaXRpb24iLCAmbV9uZXR3b3JrUmVhZFBvc2l0aW9uKSkKICAgICAg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVcGRhdGVkIG5ldHdvcmsg
cmVhZCBwb3NpdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFULCBtX25ldHdvcmtSZWFkUG9zaXRpb24p
OwotICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAi
YWRhcHRpdmUtc3RyZWFtaW5nLXN0YXRpc3RpY3MiKSkgewotICAgICAgICAgICAgaWYgKFdFQktJ
VF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBpZiAoY29uc3Qg
Y2hhciogdXJpID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInVyaSIpKQot
ICAgICAgICAgICAgICAgICAgICBtX2hhc1RhaW50ZWRPcmlnaW4gPSB3ZWJLaXRTcmNXb3VsZFRh
aW50T3JpZ2luKFdFQktJVF9XRUJfU1JDKG1fc291cmNlLmdldCgpKSwgU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZShVUkwoVVJMKCksIHVyaSkpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRsZWQgZWxlbWVudCBtZXNzYWdlOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKICAgICAgICAgYnJlYWs7CkBAIC0yMTY4LDcg
KzIxNTIsNiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2Nh
dGlvbigpCiAgICAgICAgIC8vIGFwcGVuZCB0aGUgdmFsdWUgb2YgbmV3LWxvY2F0aW9uIHRvIGl0
LgogICAgICAgICBVUkwgYmFzZVVybCA9IGdzdF91cmlfaXNfdmFsaWQobmV3TG9jYXRpb24pID8g
VVJMKCkgOiBtX3VybDsKICAgICAgICAgVVJMIG5ld1VybCA9IFVSTChiYXNlVXJsLCBuZXdMb2Nh
dGlvbik7Ci0gICAgICAgIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wobmV3VXJsKTsKIAogICAg
ICAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3VybCk7
CiAgICAgICAgIGlmIChzZWN1cml0eU9yaWdpbi0+Y2FuUmVxdWVzdChuZXdVcmwpKSB7CkBAIC0y
NTMwLDE3ICsyNTEzLDE5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5T
YXZlTWVkaWFEYXRhKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9wdGlvbmFsPGJv
b2w+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbihjb25zdCBT
ZWN1cml0eU9yaWdpbiYpIGNvbnN0CitPcHRpb25hbDxib29sPiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikg
Y29uc3QKIHsKLSAgICAvLyBJZGVhbGx5IHRoZSBnaXZlbiBvcmlnaW4gc2hvdWxkIGFsd2F5cyBi
ZSB2ZXJpZmllZCB3aXRoCi0gICAgLy8gd2ViS2l0U3JjV291bGRUYWludE9yaWdpbigpIGluc3Rl
YWQgb2Ygb25seSBjaGVja2luZyBpdCBmb3IKLSAgICAvLyBhZGFwdGl2ZS1zdHJlYW1pbmctc3Rh
dGlzdGljcy4gV2UgY2FuJ3QgZG8gdGhpcyB5ZXQgYmVjYXVzZSBITFMgZnJhZ21lbnRzCi0gICAg
Ly8gYXJlIGN1cnJlbnRseSBkb3dubG9hZGVkIGluZGVwZW5kZW50bHkgZnJvbSBXZWJLaXQuCi0g
ICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
OTk2Ny4KLSAgICByZXR1cm4gbV9oYXNUYWludGVkT3JpZ2luOworICAgIEdTVF9UUkFDRV9PQkpF
Q1QocGlwZWxpbmUoKSwgIkNoZWNraW5nICV1IG9yaWdpbnMiLCBtX29yaWdpbnMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIHJlc3BvbnNlT3JpZ2luIDogbV9vcmlnaW5zKSB7CisgICAgICAgIGlm
ICghb3JpZ2luLmNhbkFjY2VzcygqcmVzcG9uc2VPcmlnaW4pKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGb3VuZCByZWFjaGFibGUgcmVzcG9uc2Ugb3JpZ2lu
Iik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJObyB2YWxpZCByZXNwb25zZSBvcmlnaW4gZm91bmQi
KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLQogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCAz
YmZhMjY5NTI0YTVjOTQ1YjljNGQxMTM5ZWJkNWFlZTRlN2JjYjBkLi40YTZmY2NlYjEzYTEyMzRh
YWVkNzQwMDI0NTc2NmJkN2ZmMmMyNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yOTEsOCArMjkxLDkgQEAgcHJpdmF0ZToKICAgICB1aW50
NjRfdCBtX25ldHdvcmtSZWFkUG9zaXRpb24geyAwIH07CiAgICAgbXV0YWJsZSB1aW50NjRfdCBt
X3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyB7IDAgfTsKIAotICAgIE9wdGlv
bmFsPGJvb2w+IG1faGFzVGFpbnRlZE9yaWdpbiB7IFdURjo6bnVsbG9wdCB9OworICAgIEhhc2hT
ZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogfTsKKwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCBkMjM4NjEwODc3NzQ5ZDE4YzY3NTY4
NTYxZDdhNDQ5ODZlZmQwZmY5Li5kZmY3ZmVlODAxNWNjMTY0ZGU4ZjVjYWRlMjM0NmQ4OTk5ZWYz
ZjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5o
IgorI2luY2x1ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zMzQsNiArMzM1LDE2IEBAIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwg
JmNvbnRleHRUeXBlKTsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJIYW5kbGlu
ZyAlcyBuZWVkLWNvbnRleHQgbWVzc2FnZSBmb3IgJXMiLCBjb250ZXh0VHlwZSwgR1NUX01FU1NB
R0VfU1JDX05BTUUobWVzc2FnZSkpOwogCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUs
IFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFNRSkpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldyhXRUJL
SVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUsIEZBTFNFKSk7CisgICAgICAgIEdz
dFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVj
dHVyZShjb250ZXh0LmdldCgpKTsKKworICAgICAgICBBU1NFUlQobV9wbGF5ZXIpOworICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAicGxheWVyIiwgR19UWVBFX1BP
SU5URVIsIG1fcGxheWVyLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRl
eHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAg
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBlbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0
R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7CiAgICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDE0N2ViMGJmMDE4
NDdmOWY1N2NkMDNjMjBjOTMwOWY0OTg1ZmNjNjEuLjJlZGFkNjQ0OTMzZWE1NzZiNGQ0OTQyNDQz
OTQ0MGUxMTU2YzUzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwCkBAIC0zMSw5ICszMSw5IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw4ICs0
NCw2IEBAIHB1YmxpYzoKICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJLaXRX
ZWJTcmMqLCBSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQoKTsKIAotICAgIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPj4mIHNlY3VyaXR5T3JpZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
czsgfQotCiBwcml2YXRlOgogICAgIHZvaWQgY2hlY2tVcGRhdGVCbG9ja3NpemUodWludDY0X3Qg
Ynl0ZXNSZWFkKTsKIApAQCAtNjcsNyArNjUsNiBAQCBwcml2YXRlOgogCiAgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBtX3NyYzsKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwotICAgIEhh
c2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogfTsKIAog
ZW51bSBNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uIHsKQEAgLTExMCw2ICsxMDcsNyBAQCBz
dHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIHVpbnQ2NF90IHF1ZXVlU2l6ZSB7IDAg
fTsKICAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CiAgICAgR1JlZlB0cjxHc3RFdmVu
dD4gaHR0cEhlYWRlcnNFdmVudDsKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaHR0cEhl
YWRlcnM7CiB9OwogCiBlbnVtIHsKQEAgLTE0Myw2ICsxNDEsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqLCBHc3RTZWdtZW50Kik7CiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyosIEdzdFF1ZXJ5Kik7CiBzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrKEdzdEJhc2VTcmMqKTsKIHN0YXRpYyBnYm9vbGVh
biB3ZWJLaXRXZWJTcmNVbkxvY2tTdG9wKEdzdEJhc2VTcmMqKTsKK3N0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY1NldENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQqKTsKIAogI2RlZmluZSB3
ZWJraXRfd2ViX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCiAvLyBXZSBzcGxpdCB0aGlz
IG91dCBpbnRvIGFub3RoZXIgbWFjcm8gdG8gYXZvaWQgYSBjaGVjay13ZWJraXQtc3R5bGUgZXJy
b3IuCkBAIC0xNjMsNiArMTYyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3Nf
aW5pdChXZWJLaXRXZWJTcmNDbGFzcyoga2xhc3MpCiAgICAgR3N0RWxlbWVudENsYXNzKiBla2xh
c3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CiAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRk
X3N0YXRpY19wYWRfdGVtcGxhdGUoZWtsYXNzLCAmc3JjVGVtcGxhdGUpOwogCisgICAgZ3N0X2Vs
ZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUoZWtsYXNzLCAmc3JjVGVtcGxhdGUp
OwogICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgV2Vi
IHNvdXJjZSBlbGVtZW50IiwgIlNvdXJjZSIsICJIYW5kbGVzIEhUVFAvSFRUUFMgdXJpcyIsCiAg
ICAgICAgICJQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiIpOwogCkBAIC0xOTMs
NiArMTkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJLaXRX
ZWJTcmNDbGFzcyoga2xhc3MpCiAgICAgICAgICAgICBudWxscHRyLCBzdGF0aWNfY2FzdDxHUGFy
YW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwog
CiAgICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJT
cmNDaGFuZ2VTdGF0ZSk7CisgICAgZWtsYXNzLT5zZXRfY29udGV4dCA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYktpdFdlYlNyY1NldENvbnRleHQpOwogCiAgICAgR3N0QmFzZVNyY0NsYXNzKiBiYXNl
U3JjQ2xhc3MgPSBHU1RfQkFTRV9TUkNfQ0xBU1Moa2xhc3MpOwogICAgIGJhc2VTcmNDbGFzcy0+
c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNTdGFydCk7CkBAIC0zMTcsNiAr
MzE4LDE4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgfQogfQogCitzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNTZXRDb250ZXh0KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQq
IGNvbnRleHQpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhlbGVt
ZW50KTsKKyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAg
aWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgV0VCS0lUX1dFQl9TUkNf
UExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVl
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250
ZXh0KSwgInBsYXllciIpOworICAgICAgICBwcml2LT5wbGF5ZXIgPSByZWludGVycHJldF9jYXN0
PE1lZGlhUGxheWVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgIH0KKyAgICBH
U1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zZXRfY29udGV4dChlbGVtZW50LCBjb250
ZXh0KTsKK30KKwogc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1
c2hTcmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZlcikKIHsKICAgICBHc3RCYXNlU3JjKiBi
YXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1QocHVzaFNyYyk7CkBAIC00NzIsNiArNDg1LDE4IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChHc3RCYXNlU3JjKiBiYXNlU3JjKQog
ewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7CiAgICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGlmICghcHJpdi0+
cGxheWVyKSB7CisgICAgICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdz
dF9xdWVyeV9uZXdfY29udGV4dChXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05B
TUUpKTsKKyAgICAgICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeShHU1RfQkFTRV9TUkNfUEFEKGJh
c2VTcmMpLCBxdWVyeS5nZXQoKSkpIHsKKyAgICAgICAgICAgIEdzdENvbnRleHQqIGNvbnRleHQ7
CisKKyAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb250ZXh0KHF1ZXJ5LmdldCgpLCAmY29u
dGV4dCk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVF9D
QVNUKHNyYyksIGNvbnRleHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdlX25ld19u
ZWVkX2NvbnRleHQoR1NUX09CSkVDVF9DQVNUKHNyYyksIFdFQktJVF9XRUJfU1JDX1BMQVlFUl9D
T05URVhUX1RZUEVfTkFNRSkpOworICAgIH0KKwogICAgIEFTU0VSVChwcml2LT5wbGF5ZXIpOwog
CiAgICAgcHJpdi0+d2VyZUhlYWRlcnNSZWNlaXZlZCA9IGZhbHNlOwpAQCAtNzQwLDE4ICs3NjUs
MTAgQEAgc3RhdGljIEdzdFVSSVR5cGUgd2ViS2l0V2ViU3JjVXJpR2V0VHlwZShHVHlwZSkKIAog
Y29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5cGUpCiB7Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3RvY29sc1tdID0geyJ3ZWJraXQraHR0cCIsICJ3ZWJr
aXQraHR0cHMiLCAid2Via2l0K2Jsb2IiLCBudWxscHRyIH07CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHByb3RvY29sc1tdID0geyJodHRwIiwgImh0dHBzIiwgImJsb2IiLCBudWxscHRyIH07CiAg
ICAgcmV0dXJuIHByb3RvY29sczsKIH0KIAotc3RhdGljIFVSTCBjb252ZXJ0UGxheWJpblVSSShj
b25zdCBjaGFyKiB1cmlTdHJpbmcpCi17Ci0gICAgVVJMIHVybChVUkwoKSwgdXJpU3RyaW5nKTsK
LSAgICBBU1NFUlQodXJsLnByb3RvY29sKCkuc3Vic3RyaW5nKDAsIDcpID09ICJ3ZWJraXQrIik7
Ci0gICAgdXJsLnNldFByb3RvY29sKHVybC5wcm90b2NvbCgpLnN1YnN0cmluZyg3KS50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gdXJsOwotfQotCiBzdGF0aWMgZ2NoYXIqIHdlYktpdFdlYlNyY0dl
dFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0g
V0VCS0lUX1dFQl9TUkMoaGFuZGxlcik7CkBAIC03NzQsNyArNzkxLDEyIEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2No
YXIqIHVyaSwgR0VyCiAgICAgaWYgKCF1cmkpCiAgICAgICAgIHJldHVybiBUUlVFOwogCi0gICAg
VVJMIHVybCA9IGNvbnZlcnRQbGF5YmluVVJJKHVyaSk7CisgICAgaWYgKHByaXYtPm9yaWdpbmFs
VVJJLmxlbmd0aCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiVVJJIGNhbiBv
bmx5IGJlIHNldCBpbiBzdGF0ZXMgPCBQQVVTRUQiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIH0KKworICAgIFVSTCB1cmwoVVJMKCksIHVyaSk7CiAgICAgaWYgKCF1cmxIYXNTdXBwb3J0
ZWRQcm90b2NvbCh1cmwpKSB7CiAgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHU1RfVVJJX0VS
Uk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9VUkksICJJbnZhbGlkIFVSSSAnJXMnIiwgdXJpKTsKICAg
ICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtODU3LDEzICs4NzksNDYgQEAgdm9pZCBDYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UmLCBjb24KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6
ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKLSAgICBhdXRvIG9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkpOwotICAgIG1fb3JpZ2lucy5hZGQo
V1RGTW92ZShvcmlnaW4pKTsKLQogICAgIGF1dG8gcmVzcG9uc2VVUkkgPSByZXNwb25zZS51cmwo
KS5zdHJpbmcoKS51dGY4KCk7CiAgICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJICE9IHJlc3BvbnNl
VVJJKQogICAgICAgICBwcml2LT5yZWRpcmVjdGVkVVJJID0gV1RGTW92ZShyZXNwb25zZVVSSSk7
CiAKKyAgICBsb25nIGxvbmcgbGVuZ3RoID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KCk7CisgICAgaWYgKGxlbmd0aCA+IDAgJiYgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gJiYgcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDYpCisgICAgICAgIGxlbmd0aCArPSBwcml2LT5y
ZXF1ZXN0ZWRQb3NpdGlvbjsKKworICAgIHByaXYtPmh0dHBIZWFkZXJzLnJlc2V0KGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJodHRwLWhlYWRlcnMiKSk7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQo
cHJpdi0+aHR0cEhlYWRlcnMuZ2V0KCksICJ1cmkiLCBHX1RZUEVfU1RSSU5HLCBwcml2LT5vcmln
aW5hbFVSSS5kYXRhKCksCisgICAgICAgICJodHRwLXN0YXR1cy1jb2RlIiwgR19UWVBFX1VJTlQs
IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCksIG51bGxwdHIpOworICAgIGlmICghcHJpdi0+cmVk
aXJlY3RlZFVSSS5pc051bGwoKSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocHJpdi0+aHR0
cEhlYWRlcnMuZ2V0KCksICJyZWRpcmVjdGlvbi11cmkiLCBHX1RZUEVfU1RSSU5HLCBwcml2LT5y
ZWRpcmVjdGVkVVJJLmRhdGEoKSwgbnVsbHB0cik7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1
cmU+IGhlYWRlcnMoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoInJlcXVlc3QtaGVhZGVycyIpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRz
KCkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXku
dXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRhKCks
IG51bGxwdHIpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVxdWVzdCBoZWFkZXJzIGdv
aW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKKyAgICBn
c3Rfc3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVy
cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisgICAgaGVh
ZGVycy5yZXNldChnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgicmVzcG9uc2UtaGVhZGVycyIpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMo
KSkgeworICAgICAgICBib29sIG9rID0gZmFsc2U7CisgICAgICAgIHVpbnQ2NF90IGNvbnZlcnRl
ZFZhbHVlID0gaGVhZGVyLnZhbHVlLnRvVUludDY0KCZvayk7CisgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXkudXRm
OCgpLmRhdGEoKSwgR19UWVBFX1VJTlQ2NCwgY29udmVydGVkVmFsdWUsIG51bGxwdHIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdldCgpLCBo
ZWFkZXIua2V5LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9TVFJJTkcsIGhlYWRlci52YWx1ZS51dGY4
KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICB9CisgICAgYXV0byBjb250ZW50TGVuZ3RoRmllbGRO
YW1lKGh0dHBIZWFkZXJOYW1lU3RyaW5nKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKS50
b1N0cmluZygpKTsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKGhlYWRlcnMuZ2V0
KCksIGNvbnRlbnRMZW5ndGhGaWVsZE5hbWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGNvbnRlbnRMZW5ndGhGaWVsZE5hbWUudXRmOCgp
LmRhdGEoKSwgR19UWVBFX1VJTlQ2NCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCksIG51
bGxwdHIpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpLCAi
cmVzcG9uc2UtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVs
bHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBoZWFkZXJzIGdvaW5n
IGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKKworICAgIHBy
aXYtPmh0dHBIZWFkZXJzRXZlbnQgPSBhZG9wdEdSZWYoZ3N0X2V2ZW50X25ld19jdXN0b20oR1NU
X0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSwgZ3N0X3N0cnVjdHVyZV9jb3B5KHByaXYt
Pmh0dHBIZWFkZXJzLmdldCgpKSkpOworCisgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVF
eGl0KFsmXSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVy
ZV9jb3B5KHNyYy0+cHJpdi0+aHR0cEhlYWRlcnMuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZWxl
bWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgc3RydWN0dXJlKSk7CisgICAgfSk7CisKICAgICBp
ZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKICAgICAgICAgR1NUX0VMRU1F
TlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSZWNlaXZlZCAlZCBIVFRQIGVycm9yIGNv
ZGUiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSwgKG51bGxwdHIpKTsKICAgICAgICAgcHJp
di0+ZG9lc0hhdmVFT1MgPSB0cnVlOwpAQCAtODkxLDEwICs5NDYsNiBAQCB2b2lkIENhY2hlZFJl
c291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYsIGNvbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbG9uZyBsb25nIGxlbmd0aCA9IHJl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAwICYmIHBy
aXYtPnJlcXVlc3RlZFBvc2l0aW9uICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2
KQotICAgICAgICBsZW5ndGggKz0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247Ci0KICAgICBwcml2
LT5pc1NlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAoIm5vbmUiLCBy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkFjY2VwdFJhbmdlcykudXRm
OCgpLmRhdGEoKSk7CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNpemU6ICVsbGQsIGlz
U2Vla2FibGU6ICVzIiwgbGVuZ3RoLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNTZWVrYWJsZSkp
OwpAQCAtOTI4LDM3ICs5NzksNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgogCiAgICAgewog
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOwotCi0gICAgICAg
IC8vIEVtaXQgYSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZIGV2ZW50IGFuZCBt
ZXNzYWdlIHRvIGxldAotICAgICAgICAvLyBHU3RyZWFtZXIga25vdyBhYm91dCB0aGUgSFRUUCBo
ZWFkZXJzIHNlbnQgYW5kIHJlY2VpdmVkLgotICAgICAgICBHc3RTdHJ1Y3R1cmUqIGh0dHBIZWFk
ZXJzID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImh0dHAtaGVhZGVycyIpOwotICAgICAgICBn
c3Rfc3RydWN0dXJlX3NldChodHRwSGVhZGVycywgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYt
Pm9yaWdpbmFsVVJJLmRhdGEoKSwKLSAgICAgICAgICAgICJodHRwLXN0YXR1cy1jb2RlIiwgR19U
WVBFX1VJTlQsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCksIG51bGxwdHIpOwotICAgICAgICBp
ZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCi0gICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChodHRwSGVhZGVycywgInJlZGlyZWN0aW9uLXVyaSIsIEdfVFlQRV9TVFJJTkcsIHBy
aXYtPnJlZGlyZWN0ZWRVUkkuZGF0YSgpLCBudWxscHRyKTsKLSAgICAgICAgR1VuaXF1ZVB0cjxH
c3RTdHJ1Y3R1cmU+IGhlYWRlcnMoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoInJlcXVlc3QtaGVh
ZGVycyIpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX3JlcXVlc3QuaHR0
cEhlYWRlckZpZWxkcygpKQotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5n
ZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfU1RSSU5HLCBoZWFkZXIudmFs
dWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBo
ZWFkZXJzLmdldCgpKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMsICJy
ZXF1ZXN0LWhlYWRlcnMiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGhlYWRlcnMuZ2V0KCksIG51bGxw
dHIpOwotICAgICAgICBoZWFkZXJzLnJlc2V0KGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJyZXNw
b25zZS1oZWFkZXJzIikpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkgewotICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOwot
ICAgICAgICAgICAgdWludDY0X3QgY29udmVydGVkVmFsdWUgPSBoZWFkZXIudmFsdWUudG9VSW50
NjQoJm9rKTsKLSAgICAgICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChoZWFkZXJzLmdldCgpLCBoZWFkZXIua2V5LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9V
SU5UNjQsIGNvbnZlcnRlZFZhbHVlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdldCgpLCBoZWFkZXIua2V5LnV0
ZjgoKS5kYXRhKCksIEdfVFlQRV9TVFJJTkcsIGhlYWRlci52YWx1ZS51dGY4KCkuZGF0YSgpLCBu
dWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGhGaWVsZE5hbWUo
aHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpLnRvU3Ry
aW5nKCkpOwotICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKGhlYWRlcnMuZ2V0
KCksIGNvbnRlbnRMZW5ndGhGaWVsZE5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdldCgpLCBjb250ZW50TGVuZ3RoRmllbGROYW1lLnV0
ZjgoKS5kYXRhKCksIEdfVFlQRV9VSU5UNjQsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgp
LCBudWxscHRyKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMsICJyZXNw
b25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBudWxscHRy
KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBoZWFkZXJzIGdvaW5n
IGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKLQotICAgICAg
ICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVz
c2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgZ3N0X3N0cnVjdHVyZV9jb3B5
KGh0dHBIZWFkZXJzKSkpOwotCi0gICAgICAgIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQgPSBhZG9w
dEdSZWYoZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NU
SUNLWSwgaHR0cEhlYWRlcnMpKTsKICAgICAgICAgcHJpdi0+d2VyZUhlYWRlcnNSZWNlaXZlZCA9
IHRydWU7CiAgICAgICAgIHByaXYtPmhlYWRlcnNDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAg
fQpAQCAtMTA0MSwxNiArMTA2MSw0IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKQogICAgICAgICBwcml2LT5p
c1NlZWtpbmcgPSBmYWxzZTsKIH0KIAotYm9vbCB3ZWJLaXRTcmNXb3VsZFRhaW50T3JpZ2luKFdl
YktpdFdlYlNyYyogc3JjLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQotewotICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBhdXRvKiBjYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQqPihwcml2LT5yZXNvdXJjZS0+Y2xpZW50KCkpOwotICAgIGZvciAoYXV0
byYgcmVzcG9uc2VPcmlnaW4gOiBjYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudC0+c2VjdXJp
dHlPcmlnaW5zKCkpIHsKLSAgICAgICAgaWYgKCFvcmlnaW4uY2FuQWNjZXNzKCpyZXNwb25zZU9y
aWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oCmluZGV4IGM4NmZiNTZhODJjZWE3Mzgw
NGM1YTZkOWI2M2EzZmVlOTVkNGM2NGMuLjcwOTk4NGM4ZmM3NGFhMzlhYjkzMjNiNWIzMzZiOTcy
OTdiMDQ2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKQEAg
LTI1LDcgKzI1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTWVkaWFQbGF5ZXI7
Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKIH0KIAogR19CRUdJTl9ERUNMUwpAQCAtMzYsNiArMzUs
OCBAQCBHX0JFR0lOX0RFQ0xTCiAjZGVmaW5lIFdFQktJVF9JU19XRUJfU1JDKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfU1JD
KSkKICNkZWZpbmUgV0VCS0lUX0lTX1dFQl9TUkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfV0VCX1NSQykpCiAKKyNkZWZpbmUgV0VC
S0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FICAid2Via2l0Lm1lZGlhLXBsYXll
ciIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyAgICAgICAgV2ViS2l0V2ViU3JjOwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyY0NsYXNzICAgV2ViS2l0V2ViU3JjQ2xhc3M7CiB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSBXZWJLaXRXZWJTcmNQcml2YXRlOwpA
QCAtNTMsNyArNTQsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY0NsYXNzIHsKIEdUeXBlIHdlYmtp
dF93ZWJfc3JjX2dldF90eXBlKHZvaWQpOwogdm9pZCB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXll
cihXZWJLaXRXZWJTcmMqLCBXZWJDb3JlOjpNZWRpYVBsYXllciopOwogYm9vbCB3ZWJLaXRTcmNQ
YXNzZWRDT1JTQWNjZXNzQ2hlY2soV2ViS2l0V2ViU3JjKik7Ci1ib29sIHdlYktpdFNyY1dvdWxk
VGFpbnRPcmlnaW4oV2ViS2l0V2ViU3JjKiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4m
KTsKIAogR19FTkRfREVDTFMKIAo=
</data>
<flag name="review"
          id="381637"
          type_id="1"
          status="+"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="381784"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>