<?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>158940</bug_id>
          
          <creation_ts>2016-06-20 06:42:47 -0700</creation_ts>
          <short_desc>WebRTC: Add support for RTCPeerConnection legacy MediaStream-based API</short_desc>
          <delta_ts>2016-06-23 06:52:29 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>158777</dependson>
    
    <dependson>158832</dependson>
          <blocked>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1203747</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-20 06:42:47 -0700</bug_when>
    <thetext>The MediaStream-based API on RTCPeerConnection (addStream, removeStream, getLocalStreams, getRemoteStreams, getStreamById) has been removed from the WebRTC 1.0 specification, but is widely implemented and used. We should be able to support it with JS built-ins and some hooks down in native code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203817</commentid>
    <comment_count>1</comment_count>
      <attachid>281658</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-20 12:02:14 -0700</bug_when>
    <thetext>Created attachment 281658
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203819</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-20 12:04:02 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 281658 [details]
&gt; Proposed patch

This won&apos;t build until the JS constructor is in place (http://webkit.org/b/158832).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203911</commentid>
    <comment_count>3</comment_count>
      <attachid>281658</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-20 14:56:22 -0700</bug_when>
    <thetext>Comment on attachment 281658
Proposed patch

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

&gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.js:57
&gt; +    return this.@localStreams.slice();

Array.slice may be corrupted by user scripts.
The same applies to find findIndex, push, forEach, splice methods.
This should be robustified.

&gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.js:94
&gt; +    stream.getTracks().forEach(track =&gt; this.@addTrack(track, stream));

Potentially, we know that this, track and stream are of the right type.
So we could replace if statements by assert statements in the binding generated code.
That said, this might be too early to do so.

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:87
&gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().MediaStreamPrivateName(), JSMediaStream::getConstructor(vm, this), DontDelete | ReadOnly),

It might be good to add a keyword similar to PrivateAlso for exposing DOM constructors safely to JS builtins.
Ideally, we should not need to create the constructor but just pass a getter function that would create it if needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204083</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-21 00:37:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 281658 [details]
&gt; Proposed patch

Thanks for reviewing Youenn.

&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281658&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.js:57
&gt; &gt; +    return this.@localStreams.slice();
&gt; 
&gt; Array.slice may be corrupted by user scripts.
&gt; The same applies to find findIndex, push, forEach, splice methods.
&gt; This should be robustified.

Looking at the array prototype implementation, we seem to have a private name for push, but the rest needs fixing. New bug: [1].

[1] http://webkit.org/b/158978

&gt; &gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.js:94
&gt; &gt; +    stream.getTracks().forEach(track =&gt; this.@addTrack(track, stream));
&gt; 
&gt; Potentially, we know that this, track and stream are of the right type.
&gt; So we could replace if statements by assert statements in the binding
&gt; generated code.
&gt; That said, this might be too early to do so.

MediaStream.getTracks is actually part of the public API so we need a safe way to call it. New bug [2].

[2] webkit.org/b/158979

I agree that assertions would be sufficient for [PrivateOnly] bindings. The bug [3] suggests that one might want to use the type checking of a [PrivateOnly] function as part of a public API call, but that might be unlikely now when we have [PrivateAlso]. I wouldn&apos;t mind closing [3] as a WONTFIX.

[3] webkit.org/b/158778

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:87
&gt; &gt; +        JSDOMGlobalObject::GlobalPropertyInfo(clientData.builtinNames().MediaStreamPrivateName(), JSMediaStream::getConstructor(vm, this), DontDelete | ReadOnly),
&gt; 
&gt; It might be good to add a keyword similar to PrivateAlso for exposing DOM
&gt; constructors safely to JS builtins.
&gt; Ideally, we should not need to create the constructor but just pass a getter
&gt; function that would create it if needed

That would be useful indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204084</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-21 00:39:18 -0700</bug_when>
    <thetext>Clickable links for the previous post

[2] http://webkit.org/b/158979
[3] http://webkit.org/b/158778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204446</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-21 23:17:36 -0700</bug_when>
    <thetext>*** Bug 158979 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204778</commentid>
    <comment_count>7</comment_count>
      <attachid>281899</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-22 23:28:46 -0700</bug_when>
    <thetext>Created attachment 281899
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204779</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-22 23:30:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; MediaStream.getTracks is actually part of the public API so we need a safe
&gt; way to call it. New bug [2].
&gt; 
&gt; [2] webkit.org/b/158979

This is included in the updated patch (closed bug:158979).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204810</commentid>
    <comment_count>9</comment_count>
      <attachid>281899</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-06-23 06:30:11 -0700</bug_when>
    <thetext>Comment on attachment 281899
Updated patch

Thank you Eric and Youenn for reviewing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204813</commentid>
    <comment_count>10</comment_count>
      <attachid>281899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-23 06:52:26 -0700</bug_when>
    <thetext>Comment on attachment 281899
Updated patch

Clearing flags on attachment: 281899

Committed r202376: &lt;http://trac.webkit.org/changeset/202376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204814</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-23 06:52:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281658</attachid>
            <date>2016-06-20 12:02:14 -0700</date>
            <delta_ts>2016-06-22 23:28:46 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>pc-legacy-stream-api_0.patch</filename>
            <type>text/plain</type>
            <size>24799</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTFmMGU2Li5mOWY5N2YxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDYt
MjAgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogQWRkIHN1cHBvcnQgZm9yIFJUQ1BlZXJDb25uZWN0aW9uIGxlZ2FjeSBNZWRp
YVN0cmVhbS1iYXNlZCBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODk0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCB0ZXN0IGZvciBSVENQZWVyQ29ubmVjdGlvbiBsZWdhY3kgTWVkaWFTdHJl
YW0tYmFzZWQgQVBJLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1sZWdhY3ktc3RyZWFtLWJhc2VkLWFwaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNl
ZC1hcGkuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnM6CisgICAgICAgIFNraXAgdGVzdCBmb3IgbWFjIHBvcnQgKGRvZXNuJ3QgYnVpbGQgd2l0aCBX
RUJfUlRDIHlldCkKKwogMjAxNi0wNi0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgOmluZGV0ZXJtaW5hdGUgcHNldWRvLWNsYXNzIHNob3VsZCBt
YXRjaCByYWRpb3Mgd2hvc2UgZ3JvdXAgaGFzIG5vIGNoZWNrZWQgcmFkaW8KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0
cmVhbS1iYXNlZC1hcGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1sZWdhY3ktc3RyZWFtLWJhc2VkLWFwaS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhODBiYQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVn
YWN5LXN0cmVhbS1iYXNlZC1hcGktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjIgQEAKK1Rlc3Qg
UlRDUGVlckNvbm5lY3Rpb24ncyBsZWdhY3kgTWVkaWFTdHJlYW0tYmFzZWQgQVBJCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitTdHJlYW0gc2V0cyBzaG91bGQgYmUgZW1wdHkgaW5p
dGlhbGx5CitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCBpcyAwCitQQVNTIHBjLmdl
dFJlbW90ZVN0cmVhbXMoKS5sZW5ndGggaXMgMAorCitUZXN0IHdpdGggc2luZ2xlIHRyYWNrIE1l
ZGlhU3RyZWFtCithdWRpb1RyYWNrID0gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0KK1BBU1Mg
cGMuYWRkU3RyZWFtKHN0cmVhbSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHBjLmdl
dExvY2FsU3RyZWFtcygpLmxlbmd0aCBpcyAxCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpWzBd
IGlzIHN0cmVhbQorUEFTUyBwYy5nZXRTdHJlYW1CeUlkKHN0cmVhbS5pZCkgaXMgc3RyZWFtCitQ
QVNTIHBjLmdldFNlbmRlcnMoKS5sZW5ndGggaXMgMQorUEFTUyBwYy5nZXRTZW5kZXJzKClbMF0u
dHJhY2sgaXMgYXVkaW9UcmFjaworQWRkaW5nIHRoZSBzYW1lIHN0cmVhbSBhZ2FpbiBzaG91bGQg
YmUgYSBuby1vcAorUEFTUyBwYy5hZGRTdHJlYW0oc3RyZWFtKSBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgcGMuZ2V0TG9jYWxTdHJlYW1zKCkubGVuZ3RoIGlzIDEKKworVGVzdCB3aXRo
IGF1ZGlvIGFuZCB2aWRlbyBNZWRpYVN0cmVhbQorYXVkaW9UcmFjayA9IHN0cmVhbS5nZXRBdWRp
b1RyYWNrcygpWzBdCit2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0KK1BB
U1MgcGMuYWRkU3RyZWFtKHN0cmVhbSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHBj
LmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCBpcyAyCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygp
LmluY2x1ZGVzKHN0cmVhbSkgaXMgdHJ1ZQorUEFTUyBwYy5nZXRTdHJlYW1CeUlkKHN0cmVhbS5p
ZCkgaXMgc3RyZWFtCitQQVNTIHBjLmdldFNlbmRlcnMoKS5sZW5ndGggaXMgMworUEFTUyBhdWRp
b1RyYWNrRm91bmRBbW9uZ1NlbmRlcnMgaXMgdHJ1ZQorUEFTUyB2aWRlb1RyYWNrRm91bmRBbW9u
Z1NlbmRlcnMgaXMgdHJ1ZQorCitUZXN0IHJlbW92ZVN0cmVhbQorUmVtb3ZlIGEgbm9uLWV4aXN0
ZW50IHN0cmVhbQorb3RoZXJTdHJlYW0gPSBzdHJlYW0uY2xvbmUoKQorUEFTUyBwYy5yZW1vdmVT
dHJlYW0ob3RoZXJTdHJlYW0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorQm90aCBzdHJlYW1z
IHNob3VsZCBzdGlsbCBiZSBwcmVzZW50CitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0
aCBpcyAyCitQQVNTIHBjLnJlbW92ZVN0cmVhbShzdHJlYW0pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBwYy5nZXRMb2NhbFN0cmVhbXMoKS5sZW5ndGggaXMgMQorUEFTUyBwYy5nZXRT
dHJlYW1CeUlkKHN0cmVhbS5pZCkgaXMgbnVsbAorQWxsIHNlbmRlcnMgc2hvdWxkIHN0aWxsIGJl
IHByZXNlbnQKK1BBU1MgcGMuZ2V0U2VuZGVycygpLmxlbmd0aCBpcyAzCitSZW1vdmluZyB0aGUg
c2FtZSBzdHJlYW0gYWdhaW4gc2hvdWxkIGJlIGEgbm8tb3AKK1BBU1MgcGMucmVtb3ZlU3RyZWFt
KHN0cmVhbSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHBjLmdldExvY2FsU3RyZWFt
cygpLmxlbmd0aCBpcyAxCisKK1Rlc3QgYXBwbHlpbmcgYSByZW1vdGUgZGVzY3JpcHRpb24gb2Zm
ZXJpbmcgYSBzdHJlYW0gd2l0aCB0d28gdHJhY2tzCitDcmVhdGUgcmVtb3RlIG9mZmVyCitHb3Qg
cmVtb3RlIG9mZmVyLCBzZXQgaXQKK1BBU1MgR290ICdhZGRzdHJlYW0nIGV2ZW50IChiZWZvcmUg
c2V0UmVtb3RlRGVzY3JpcHRpb24gcHJvbWlzZSBmdWxmaWxsZWQpCitQQVNTIHJlbW90ZVN0cmVh
bS5nZXRUcmFja3MoKS5sZW5ndGggaXMgMgorUEFTUyBwYy5nZXRSZW1vdGVTdHJlYW1zKCkubGVu
Z3RoIGlzIDEKK1BBU1MgcGMuZ2V0UmVtb3RlU3RyZWFtcygpWzBdIGlzIHJlbW90ZVN0cmVhbQor
UEFTUyBwYy5nZXRTdHJlYW1CeUlkKHJlbW90ZVN0cmVhbS5pZCkgaXMgcmVtb3RlU3RyZWFtCitS
ZW1vdGUgb2ZmZXIgc2V0CitQQVNTIEVuZCBvZiB0ZXN0IHByb21pc2UgY2hhaW4KKworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0
cmVhbS1iYXNlZC1hcGkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNlZC1hcGkuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sZWdhY3ktc3RyZWFtLWJhc2Vk
LWFwaS5odG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAg
IDxoZWFkPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzY3JpcHQ+
CisgICAgICAgICAgICBkZXNjcmlwdGlvbigiVGVzdCBSVENQZWVyQ29ubmVjdGlvbidzIGxlZ2Fj
eSBNZWRpYVN0cmVhbS1iYXNlZCBBUEkiKTsKKworICAgICAgICAgICAgbGV0IHN0cmVhbTsKKyAg
ICAgICAgICAgIGxldCBvdGhlclN0cmVhbTsKKyAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrOwor
ICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2s7CisgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0Zv
dW5kQW1vbmdTZW5kZXJzOworICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGb3VuZEFtb25nU2Vu
ZGVyczsKKyAgICAgICAgICAgIGxldCByZW1vdGVTdHJlYW07CisKKyAgICAgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFVzZXJNZWRp
YVBlcm1pc3Npb24odHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBk
ZWJ1ZygiVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIHRlc3RSdW5uZXIiKTsK
KyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY29uc3QgcGMgPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oe2ljZVNlcnZlcnM6
W3t1cmxzOidzdHVuOmZvby5jb20nfV19KTsKKyAgICAgICAgICAgIGNvbnN0IHJlbW90ZVBjID0g
bmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKHtpY2VTZXJ2ZXJzOlt7dXJsczonc3R1bjpmb28u
Y29tJ31dfSk7CisKKyAgICAgICAgICAgIGRlYnVnKCJTdHJlYW0gc2V0cyBzaG91bGQgYmUgZW1w
dHkgaW5pdGlhbGx5IikKKyAgICAgICAgICAgIHNob3VsZEJlKCJwYy5nZXRMb2NhbFN0cmVhbXMo
KS5sZW5ndGgiLCAiMCIpOworICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFJlbW90ZVN0cmVh
bXMoKS5sZW5ndGgiLCAiMCIpOworCisgICAgICAgICAgICBwYy5vbmFkZHN0cmVhbSA9IGV2dCA9
PiB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiR290ICdhZGRzdHJlYW0nIGV2ZW50IChi
ZWZvcmUgc2V0UmVtb3RlRGVzY3JpcHRpb24gcHJvbWlzZSBmdWxmaWxsZWQpIik7CisgICAgICAg
ICAgICAgICAgcmVtb3RlU3RyZWFtID0gZXZ0LnN0cmVhbTsKKworICAgICAgICAgICAgICAgIHNo
b3VsZEJlKCJyZW1vdGVTdHJlYW0uZ2V0VHJhY2tzKCkubGVuZ3RoIiwgIjIiKTsKKworICAgICAg
ICAgICAgICAgIHNob3VsZEJlKCJwYy5nZXRSZW1vdGVTdHJlYW1zKCkubGVuZ3RoIiwgIjEiKTsK
KyAgICAgICAgICAgICAgICBzaG91bGRCZSgicGMuZ2V0UmVtb3RlU3RyZWFtcygpWzBdIiwgInJl
bW90ZVN0cmVhbSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFN0cmVhbUJ5
SWQocmVtb3RlU3RyZWFtLmlkKSIsICJyZW1vdGVTdHJlYW0iKTsKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgImF1ZGlv
IjogdHJ1ZSB9KQorICAgICAgICAgICAgLnRoZW4ocyA9PiB7CisgICAgICAgICAgICAgICAgc3Ry
ZWFtID0gczsKKworICAgICAgICAgICAgICAgIGRlYnVnKCI8YnI+VGVzdCB3aXRoIHNpbmdsZSB0
cmFjayBNZWRpYVN0cmVhbSIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coImF1ZGlvVHJh
Y2sgPSBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSIpOworICAgICAgICAgICAgICAgIHNob3Vs
ZE5vdFRocm93KCJwYy5hZGRTdHJlYW0oc3RyZWFtKSIpOworCisgICAgICAgICAgICAgICAgc2hv
dWxkQmUoInBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCIsICIxIik7CisgICAgICAgICAgICAg
ICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3RyZWFtcygpWzBdIiwgInN0cmVhbSIpOworCisgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFN0cmVhbUJ5SWQoc3RyZWFtLmlkKSIsICJzdHJl
YW0iKTsKKworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJwYy5nZXRTZW5kZXJzKCkubGVuZ3Ro
IiwgIjEiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgicGMuZ2V0U2VuZGVycygpWzBdLnRy
YWNrIiwgImF1ZGlvVHJhY2siKTsKKworICAgICAgICAgICAgICAgIGRlYnVnKCJBZGRpbmcgdGhl
IHNhbWUgc3RyZWFtIGFnYWluIHNob3VsZCBiZSBhIG5vLW9wIik7CisgICAgICAgICAgICAgICAg
c2hvdWxkTm90VGhyb3coInBjLmFkZFN0cmVhbShzdHJlYW0pIik7CisgICAgICAgICAgICAgICAg
c2hvdWxkQmUoInBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCIsICIxIik7CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyAiYXVk
aW8iOiB0cnVlLCAidmlkZW8iOiB0cnVlIH0pOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAg
IC50aGVuKHMgPT4geworICAgICAgICAgICAgICAgIHN0cmVhbSA9IHM7CisKKyAgICAgICAgICAg
ICAgICBkZWJ1ZygiPGJyPlRlc3Qgd2l0aCBhdWRpbyBhbmQgdmlkZW8gTWVkaWFTdHJlYW0iKTsK
KyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJhdWRpb1RyYWNrID0gc3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0iKTsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJ2aWRlb1RyYWNrID0g
c3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0iKTsKKworICAgICAgICAgICAgICAgIHNob3VsZE5v
dFRocm93KCJwYy5hZGRTdHJlYW0oc3RyZWFtKSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxk
QmUoInBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCIsICIyIik7CisgICAgICAgICAgICAgICAg
c2hvdWxkQmVUcnVlKCJwYy5nZXRMb2NhbFN0cmVhbXMoKS5pbmNsdWRlcyhzdHJlYW0pIik7CisK
KyAgICAgICAgICAgICAgICBzaG91bGRCZSgicGMuZ2V0U3RyZWFtQnlJZChzdHJlYW0uaWQpIiwg
InN0cmVhbSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFNlbmRlcnMoKS5s
ZW5ndGgiLCAiMyIpOworCisgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZvdW5kQW1vbmdTZW5k
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZvdW5kQW1vbmdTZW5kZXJz
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcGMuZ2V0U2VuZGVycygpLmZvckVhY2goc2VuZGVy
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbmRlci50cmFjayA9PT0gYXVkaW9UcmFj
aykKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2tGb3VuZEFtb25nU2VuZGVycyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRlci50cmFjayA9PT0gdmlk
ZW9UcmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGb3VuZEFtb25nU2Vu
ZGVycyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBzaG91
bGRCZVRydWUoImF1ZGlvVHJhY2tGb3VuZEFtb25nU2VuZGVycyIpOworICAgICAgICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgidmlkZW9UcmFja0ZvdW5kQW1vbmdTZW5kZXJzIik7CisKKyAgICAgICAg
ICAgICAgICBkZWJ1ZygiPGJyPlRlc3QgcmVtb3ZlU3RyZWFtIik7CisgICAgICAgICAgICAgICAg
ZGVidWcoIlJlbW92ZSBhIG5vbi1leGlzdGVudCBzdHJlYW0iKTsKKyAgICAgICAgICAgICAgICBl
dmFsQW5kTG9nKCJvdGhlclN0cmVhbSA9IHN0cmVhbS5jbG9uZSgpIik7CisgICAgICAgICAgICAg
ICAgc2hvdWxkTm90VGhyb3coInBjLnJlbW92ZVN0cmVhbShvdGhlclN0cmVhbSkiKTsKKworICAg
ICAgICAgICAgICAgIGRlYnVnKCJCb3RoIHN0cmVhbXMgc2hvdWxkIHN0aWxsIGJlIHByZXNlbnQi
KTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgicGMuZ2V0TG9jYWxTdHJlYW1zKCkubGVuZ3Ro
IiwgIjIiKTsKKworICAgICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJwYy5yZW1vdmVTdHJl
YW0oc3RyZWFtKSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3Ry
ZWFtcygpLmxlbmd0aCIsICIxIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFN0
cmVhbUJ5SWQoc3RyZWFtLmlkKSIsICJudWxsIik7CisKKyAgICAgICAgICAgICAgICBkZWJ1Zygi
QWxsIHNlbmRlcnMgc2hvdWxkIHN0aWxsIGJlIHByZXNlbnQiKQorICAgICAgICAgICAgICAgIHNo
b3VsZEJlKCJwYy5nZXRTZW5kZXJzKCkubGVuZ3RoIiwgIjMiKTsKKworICAgICAgICAgICAgICAg
IGRlYnVnKCJSZW1vdmluZyB0aGUgc2FtZSBzdHJlYW0gYWdhaW4gc2hvdWxkIGJlIGEgbm8tb3Ai
KTsKKyAgICAgICAgICAgICAgICBzaG91bGROb3RUaHJvdygicGMucmVtb3ZlU3RyZWFtKHN0cmVh
bSkiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgicGMuZ2V0TG9jYWxTdHJlYW1zKCkubGVu
Z3RoIiwgIjEiKTsKKworICAgICAgICAgICAgICAgIGRlYnVnKCI8YnI+VGVzdCBhcHBseWluZyBh
IHJlbW90ZSBkZXNjcmlwdGlvbiBvZmZlcmluZyBhIHN0cmVhbSB3aXRoIHR3byB0cmFja3MiKTsK
KyAgICAgICAgICAgICAgICByZW1vdGVQYy5hZGRTdHJlYW0oc3RyZWFtKTsKKworICAgICAgICAg
ICAgICAgIGRlYnVnKCJDcmVhdGUgcmVtb3RlIG9mZmVyIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlbW90ZVBjLmNyZWF0ZU9mZmVyKCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAg
LnRoZW4ocmVtb3RlT2ZmZXIgPT4geworICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgcmVtb3Rl
IG9mZmVyLCBzZXQgaXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGMuc2V0UmVtb3RlRGVz
Y3JpcHRpb24ocmVtb3RlT2ZmZXIpOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVu
KCgpID0+IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiUmVtb3RlIG9mZmVyIHNldCIpOworICAg
ICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkVuZCBvZiB0ZXN0IHByb21pc2UgY2hhaW4iKTsKKyAg
ICAgICAgICAgICAgICBkZWJ1ZygiIik7CisKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4geworICAgICAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIkVycm9yIGluIHByb21pc2UgY2hhaW46ICIgKyBlcnJvcik7
CisgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAgICAgd2luZG93
LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCAxNWNmNjhlLi5hNGE3NmZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
VGVzdEV4cGVjdGF0aW9ucwpAQCAtMjAyLDYgKzIwMiw3IEBAIGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3ZXIuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLmh0bWwKIGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtdHdvLWRpYWxvZ3MuaHRtbAogZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1jYWxsYmFja3Mtc2lu
Z2xlLWRpYWxvZy5odG1sCitmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxlZ2Fj
eS1zdHJlYW0tYmFzZWQtYXBpLmh0bWwKIAogIyBBc3NlcnRzIGluIGRlYnVnLgogWyBEZWJ1ZyBd
IGZhc3QvaW1hZ2VzL2xhcmdlLXNpemUtaW1hZ2UtY3Jhc2guaHRtbCBbIFNraXAgXQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGU0NmQ2ZWIuLmQ3NGE4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAx
Ni0wNi0yMCAgQWRhbSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisK
KyAgICAgICAgV2ViUlRDOiBBZGQgc3VwcG9ydCBmb3IgUlRDUGVlckNvbm5lY3Rpb24gbGVnYWN5
IE1lZGlhU3RyZWFtLWJhc2VkIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU4OTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBsZWdhY3kgTWVkaWFTdHJlYW0tYmFzZWQgUlRD
UGVlckNvbm5lY3Rpb24gQVBJIGFzIEpTIGJ1aWx0LWlucy4gVGhlCisgICAgICAgIGdldFJlbW90
ZVN0cmVhbXMoKSBmdW5jdGlvbiBhbmQgdGhlICdhZGRzdHJlYW0nIGV2ZW50IGlzIHBhcnRseSBp
bXBsZW1lbnRlZCB3aXRoIG5hdGl2ZQorICAgICAgICBjb2RlLgorCisgICAgICAgIFRlc3Q6IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNlZC1hcGku
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uOjpzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpnZXRSZW1vdGVTdHJlYW1zKToKKyAgICAgICAgVGhlIGdl
dFJlbW90ZVN0cmVhbXMoKSBmdW5jdGlvbiBhbmQgdGhlICdhZGRzdHJlYW0nIGV2ZW50IGlzIGJh
Y2tlZCB1cCBieSBuYXRpdmUgY29kZS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uanM6CisgICAgICAgIChpbml0aWFsaXplUlRDUGVlckNvbm5lY3Rpb24pOgor
ICAgICAgICAoZ2V0TG9jYWxTdHJlYW1zKToKKyAgICAgICAgKGdldFJlbW90ZVN0cmVhbXMpOgor
ICAgICAgICAoZ2V0U3RyZWFtQnlJZCk6CisgICAgICAgIChhZGRTdHJlYW0pOgorICAgICAgICAo
cmVtb3ZlU3RyZWFtKToKKyAgICAgICAgTGVnYWN5IEFQSSBpbXBsZW1lbnRlZCBhcyBKUyBidWls
dC1pbnMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWxzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmg6CisKIDIwMTYtMDYtMTgg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSB0aW1lIGxp
dGVyYWxzIGluIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAppbmRl
eCA1YmFiNThmLi4wNjMwNDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtRXZlbnQuaCIKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiUGVlck1lZGlhRGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKQEAgLTQ3Niw2ICs0NzcsOSBAQCB2b2lkIE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJlZlB0
cjxSVENTZXNzaW9uRGVzYwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gT25lIGxl
Z2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5IG5ldyBNZWRpYVN0
cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNldC4KKyAgICBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVhbUV2ZW50czsKKwog
ICAgIGZvciAoYXV0byBtZWRpYURlc2NyaXB0aW9uIDogbWVkaWFEZXNjcmlwdGlvbnMpIHsKICAg
ICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZlckJ5
TWlkKHRyYW5zY2VpdmVycywgbWVkaWFEZXNjcmlwdGlvbi0+bWlkKCkpOwogICAgICAgICBpZiAo
IXRyYW5zY2VpdmVyKSB7CkBAIC01MjksNiArNTMzLDcgQEAgdm9pZCBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246OnNldFJlbW90ZURlc2NyaXB0aW9uVGFzayhSZWZQdHI8UlRDU2Vzc2lvbkRl
c2MKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBhdXRvIG5l
d1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fY2xpZW50LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIE1lZGlhU3RyZWFtVHJhY2tWZWN0b3IoeyByZWNlaXZlci50cmFjaygpIH0pKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9yZW1vdGVTdHJlYW1NYXAuYWRkKGlkLCBuZXdTdHJlYW0u
Y29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVnYWN5TWVkaWFTdHJlYW1FdmVudHMu
YXBwZW5kKE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZl
bnQsIGZhbHNlLCBmYWxzZSwgbmV3U3RyZWFtLmNvcHlSZWYoKSkpOwogICAgICAgICAgICAgICAg
ICAgICB0cmFja0V2ZW50TWVkaWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShuZXdTdHJlYW0pKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDEsNiArNTQ2LDEwIEBAIHZv
aWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRSZW1vdGVEZXNjcmlwdGlvblRhc2so
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBGaXJlIGxl
Z2FjeSBhZGRzdHJlYW0gZXZlbnRzLgorICAgIGZvciAoYXV0byYgZXZlbnQgOiBsZWdhY3lNZWRp
YVN0cmVhbUV2ZW50cykKKyAgICAgICAgbV9jbGllbnQtPmZpcmVFdmVudCgqZXZlbnQpOworCiAg
ICAgU2lnbmFsaW5nU3RhdGUgbmV3U2lnbmFsaW5nU3RhdGU7CiAKICAgICAvLyBVcGRhdGUgc3Rh
dGUgYW5kIGxvY2FsIGRlc2NyaXB0aW9ucyBhY2NvcmRpbmcgdG8gc2V0TG9jYWwvUmVtb3RlRGVz
Y3JpcHRpb24gcHJvY2Vzc2luZyBtb2RlbApAQCAtNjcxLDYgKzY4MCwxMyBAQCB2b2lkIE1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJD
b25uZWN0aW9uOjpTdAogICAgIHByb21pc2UucmVqZWN0KE5PVF9TVVBQT1JURURfRVJSKTsKIH0K
IAorVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0
cmVhbT4+IHJlbW90ZVN0cmVhbXM7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1fcmVtb3RlU3Ry
ZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKKyAgICByZXR1cm4gcmVtb3RlU3RyZWFtczsKK30KKwog
UmVmUHRyPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0
ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQsIGNvbnN0IFN0cmluZyYgdHJh
Y2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJhdWRpbyIgPyBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKaW5kZXggY2Y3NmI1Zi4uZjVhZTRiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCkBAIC03Myw2ICs3Myw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9uOjpT
dGF0c1Byb21pc2UmJikgb3ZlcnJpZGU7CiAKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4gZ2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgUmVmUHRyPFJUQ1J0
cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihjb25zdCBTdHJpbmcmIHRyYW5zY2VpdmVyTWlkLCBj
b25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImLCBSZWZQdHI8TWVkaWFTdHJlYW1U
cmFjaz4mJiwgUGVlckNvbm5lY3Rpb246OlZvaWRQcm9taXNlJiYpIG92ZXJyaWRlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9u
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVj
dGlvbkJhY2tlbmQuaAppbmRleCA3NTUyYjJjLi5hYjA0MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01FcnJv
cjsKIGNsYXNzIEV2ZW50OworY2xhc3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVhbVRy
YWNrOwogY2xhc3MgUGVlckNvbm5lY3Rpb25CYWNrZW5kOwogY2xhc3MgUlRDQW5zd2VyT3B0aW9u
czsKQEAgLTEwNiw2ICsxMDcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Rh
dHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9uOjpTdGF0c1Byb21pc2UmJikgPSAw
OwogCisgICAgdmlydHVhbCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gZ2V0UmVtb3RlU3Ry
ZWFtcygpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgUmVmUHRyPFJUQ1J0cFJlY2VpdmVyPiBj
cmVhdGVSZWNlaXZlcihjb25zdCBTdHJpbmcmIHRyYW5zY2VpdmVyTWlkLCBjb25zdCBTdHJpbmcm
IHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImLCBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4mJiwg
UGVlckNvbm5lY3Rpb246OlZvaWRQcm9taXNlJiYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCmluZGV4IDlh
MmJlYmIuLmVjZGYzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgKQEAgLTY5LDYgKzY5LDkgQEAgcHVibGljOgog
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UlRDUnRwUmVjZWl2ZXI+PiYgZ2V0UmVjZWl2ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2NlaXZlclNldC0+Z2V0UmVjZWl2ZXJzKCk7IH0KICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIGdldFRyYW5zY2VpdmVycygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNjZWl2ZXJTZXQtPmxpc3QoKTsgfQogCisg
ICAgLy8gUGFydCBvZiBsZWdhY3kgTWVkaWFTdHJlYW0tYmFzZWQgQVBJIChtb3N0bHkgaW1wbGVt
ZW50ZWQgYXMgSlMgYnVpbHQtaW5zKQorICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBn
ZXRSZW1vdGVTdHJlYW1zKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5nZXRSZW1vdGVTdHJl
YW1zKCk7IH0KKwogICAgIFJlZlB0cjxSVENSdHBTZW5kZXI+IGFkZFRyYWNrKFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBjb25zdCBWZWN0b3I8TWVkaWFTdHJlYW0qPiYsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYsIEV4Y2VwdGlvbkNvZGUmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmlkbAppbmRleCA3MGYwY2E0Li5jOTYxY2M0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmlk
bApAQCAtMzgsMTkgKzM4LDI3IEBACiAgICAgSW50ZXJmYWNlTmFtZT13ZWJraXRSVENQZWVyQ29u
bmVjdGlvbiwKIF0gaW50ZXJmYWNlIFJUQ1BlZXJDb25uZWN0aW9uIDogRXZlbnRUYXJnZXQgewog
ICAgIC8vIFByaXZhdGUgaW5pdGlhbGl6ZXIKLSAgICBbUHJpdmF0ZSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIGluaXRpYWxpemVXaXRoKERpY3Rpb25hcnkgcGFyYW1ldGVycyk7CisgICAgW1ByaXZh
dGVPbmx5LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgaW5pdGlhbGl6ZVdpdGgoRGljdGlvbmFyeSBw
YXJhbWV0ZXJzKTsKIAogICAgIC8vIFJUUCBNZWRpYSBBUEkgZXh0ZW5zaW9ucwotICAgIHNlcXVl
bmNlPFJUQ1J0cFNlbmRlcj4gZ2V0U2VuZGVycygpOworICAgIFtQcml2YXRlQWxzb10gc2VxdWVu
Y2U8UlRDUnRwU2VuZGVyPiBnZXRTZW5kZXJzKCk7CiAgICAgc2VxdWVuY2U8UlRDUnRwUmVjZWl2
ZXI+IGdldFJlY2VpdmVycygpOwogICAgIHNlcXVlbmNlPFJUQ1J0cFRyYW5zY2VpdmVyPiBnZXRU
cmFuc2NlaXZlcnMoKTsKIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gUlRDUnRwU2VuZGVyIGFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sgdHJhY2ssIE1lZGlhU3Ry
ZWFtLi4uIHN0cmVhbXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCByZW1vdmVUcmFjayhSVENSdHBTZW5kZXIgc2VuZGVyKTsKKyAgICBbUHJpdmF0ZUFs
c28sIFN0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBSVENSdHBTZW5kZXIgYWRk
VHJhY2soTWVkaWFTdHJlYW1UcmFjayB0cmFjaywgTWVkaWFTdHJlYW0uLi4gc3RyZWFtcyk7Cisg
ICAgW1ByaXZhdGVBbHNvLCBTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCByZW1vdmVUcmFjayhSVENSdHBTZW5kZXIgc2VuZGVyKTsKIAogICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gUlRDUnRwVHJhbnNjZWl2ZXIgYWRkVHJhbnNjZWl2ZXIo
TWVkaWFTdHJlYW1UcmFjayB0cmFjaywgb3B0aW9uYWwgUlRDUnRwVHJhbnNjZWl2ZXJJbml0IGlu
aXQpOwogICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gUlRDUnRwVHJh
bnNjZWl2ZXIgYWRkVHJhbnNjZWl2ZXIoRE9NU3RyaW5nIGtpbmQsIG9wdGlvbmFsIFJUQ1J0cFRy
YW5zY2VpdmVySW5pdCBpbml0KTsKIAorICAgIC8vIExlZ2FjeSBNZWRpYVNyZWFtLWJhc2VkIEFQ
SSAoaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZSBSVFAgTWVkaWEgQVBJKQorICAgIFtKU0J1aWx0
aW5dIHNlcXVlbmNlPE1lZGlhU3RyZWFtPiBnZXRMb2NhbFN0cmVhbXMoKTsKKyAgICBbUHJpdmF0
ZUFsc29dIHNlcXVlbmNlPE1lZGlhU3RyZWFtPiBnZXRSZW1vdGVTdHJlYW1zKCk7CisgICAgW0pT
QnVpbHRpbl0gTWVkaWFTdHJlYW0gZ2V0U3RyZWFtQnlJZChET01TdHJpbmcgc3RyZWFtSWQpOwor
CisgICAgW0pTQnVpbHRpbl0gdm9pZCBhZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKTsKKyAg
ICBbSlNCdWlsdGluXSB2b2lkIHJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pOworCiAg
ICAgW0pTQnVpbHRpbl0gUHJvbWlzZSBjcmVhdGVPZmZlcihvcHRpb25hbCBEaWN0aW9uYXJ5IG9m
ZmVyT3B0aW9ucyk7CiAgICAgLy8gTGVnYWN5IHNpZ25hdHVyZTogUHJvbWlzZSBjcmVhdGVPZmZl
cihSVENTZXNzaW9uRGVzY3JpcHRpb25DYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2sKICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ1BlZXJDb25uZWN0aW9uRXJy
b3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLApAQCAtMTE3LDYgKzEyNSw5IEBACiAgICAgYXR0cmli
dXRlIEV2ZW50SGFuZGxlciBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTsKICAgICBhdHRyaWJ1
dGUgRXZlbnRIYW5kbGVyIG9uaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2U7CiAgICAgYXR0cmlidXRl
IEV2ZW50SGFuZGxlciBvbmRhdGFjaGFubmVsOworCisgICAgLy8gTGVnYWN5IGV2ZW50IGhhbmRs
ZXIgKE1lZGlhU3RyZWFtLWJhc2VkIEFQSSkKKyAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9u
YWRkc3RyZWFtOwogfTsKIAogLy8gVGhpcyBlbnVtIGlzIG1pcnJvcmVkIGluIFJUQ1J0cFRyYW5z
Y2VpdmVyLmlkbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uanMKaW5kZXggNzc2MzE2Zi4uMTI3MGI5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmpzCkBAIC00MSw5ICs0MSw4NiBAQCBmdW5jdGlvbiBpbml0aWFsaXplUlRDUGVlckNvbm5l
Y3Rpb24oY29uZmlndXJhdGlvbikKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlJUQ1Bl
ZXJDb25uZWN0aW9uIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5Iik7CiAKICAg
ICB0aGlzLkBpbml0aWFsaXplV2l0aChjb25maWd1cmF0aW9uKTsKKworICAgIHRoaXMuQGxvY2Fs
U3RyZWFtcyA9IFtdOworCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKK2Z1bmN0aW9uIGdldExvY2Fs
U3RyZWFtcygpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNSVENQZWVyQ29u
bmVjdGlvbih0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkZ1bmN0aW9uIHNo
b3VsZCBiZSBjYWxsZWQgb24gYW4gUlRDUGVlckNvbm5lY3Rpb24iKTsKKworICAgIHJldHVybiB0
aGlzLkBsb2NhbFN0cmVhbXMuc2xpY2UoKTsKK30KKworZnVuY3Rpb24gZ2V0U3RyZWFtQnlJZChz
dHJlYW1JZEFyZykKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc1JUQ1BlZXJD
b25uZWN0aW9uKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiRnVuY3Rpb24g
c2hvdWxkIGJlIGNhbGxlZCBvbiBhbiBSVENQZWVyQ29ubmVjdGlvbiIpOworCisgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPCAxKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTm90IGVu
b3VnaCBhcmd1bWVudHMiKTsKKworICAgIGNvbnN0IHN0cmVhbUlkID0gQFN0cmluZyhzdHJlYW1J
ZEFyZyk7CisKKyAgICByZXR1cm4gdGhpcy5AbG9jYWxTdHJlYW1zLmZpbmQoc3RyZWFtID0+IHN0
cmVhbS5pZCA9PT0gc3RyZWFtSWQpCisgICAgICAgIHx8IHRoaXMuQGdldFJlbW90ZVN0cmVhbXMo
KS5maW5kKHN0cmVhbSA9PiBzdHJlYW0uaWQgPT09IHN0cmVhbUlkKQorICAgICAgICB8fCBudWxs
OworfQorCitmdW5jdGlvbiBhZGRTdHJlYW0oc3RyZWFtKQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGlmICghQGlzUlRDUGVlckNvbm5lY3Rpb24odGhpcykpCisgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJGdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9uIGFuIFJUQ1BlZXJDb25u
ZWN0aW9uIik7CisKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpCisgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisgICAgaWYgKCEoc3Ry
ZWFtIGluc3RhbmNlb2YgQE1lZGlhU3RyZWFtKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIkFyZ3VtZW50IDEgKCdzdHJlYW0nKSB0byBSVENQZWVyQ29ubmVjdGlvbi5hZGRTdHJlYW0g
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNZWRpYVN0cmVhbSIpOworCisgICAgaWYgKHRoaXMuQGxv
Y2FsU3RyZWFtcy5maW5kKGxvY2FsU3RyZWFtID0+IGxvY2FsU3RyZWFtLmlkID09PSBzdHJlYW0u
aWQpKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGlzLkBsb2NhbFN0cmVhbXMucHVzaChzdHJl
YW0pOworICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRoaXMuQGFkZFRy
YWNrKHRyYWNrLCBzdHJlYW0pKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlU3RyZWFtKHN0cmVhbSkK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc1JUQ1BlZXJDb25uZWN0aW9uKHRo
aXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiRnVuY3Rpb24gc2hvdWxkIGJlIGNh
bGxlZCBvbiBhbiBSVENQZWVyQ29ubmVjdGlvbiIpOworCisgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPCAxKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTm90IGVub3VnaCBhcmd1bWVu
dHMiKTsKKworICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIEBNZWRpYVN0cmVhbSkpCisgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcmd1bWVudCAxICgnc3RyZWFtJykgdG8gUlRDUGVl
ckNvbm5lY3Rpb24ucmVtb3ZlU3RyZWFtIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgTWVkaWFTdHJl
YW0iKTsKKworICAgIGNvbnN0IGluZGV4T2ZTdHJlYW1Ub1JlbW92ZSA9IHRoaXMuQGxvY2FsU3Ry
ZWFtcy5maW5kSW5kZXgobG9jYWxTdHJlYW0gPT4gbG9jYWxTdHJlYW0uaWQgPT09IHN0cmVhbS5p
ZCk7CisgICAgaWYgKGluZGV4T2ZTdHJlYW1Ub1JlbW92ZSA9PT0gLTEpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IHNlbmRlcnMgPSB0aGlzLkBnZXRTZW5kZXJzKCk7CisgICAgdGhpcy5A
bG9jYWxTdHJlYW1zW2luZGV4T2ZTdHJlYW1Ub1JlbW92ZV0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0
cmFjayA9PiB7CisgICAgICAgIGNvbnN0IHNlbmRlckZvclRyYWNrID0gc2VuZGVycy5maW5kKHNl
bmRlciA9PiBzZW5kZXIudHJhY2sgJiYgc2VuZGVyLnRyYWNrLmlkID09PSB0cmFjay5pZCk7Cisg
ICAgICAgIGlmIChzZW5kZXJGb3JUcmFjaykKKyAgICAgICAgICAgIHRoaXMuQHJlbW92ZVRyYWNr
KHNlbmRlckZvclRyYWNrKTsKKyAgICB9KTsKKworICAgIHRoaXMuQGxvY2FsU3RyZWFtcy5zcGxp
Y2UoaW5kZXhPZlN0cmVhbVRvUmVtb3ZlLCAxKTsKK30KKwogZnVuY3Rpb24gY3JlYXRlT2ZmZXIo
KQogewogICAgICJ1c2Ugc3RyaWN0IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCAxY2M1NjZlLi41ZjA4NThlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTTWVkaWFTdHJlYW0u
aCIKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtVHJhY2suaCIKICNpbmNsdWRlICJKU1JUQ0ljZUNh
bmRpZGF0ZS5oIgogI2luY2x1ZGUgIkpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCkBAIC04Myw2
ICs4NCw3IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWxzKFZNJiB2
bSkKICAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnRE
YXRhLmJ1aWx0aW5OYW1lcygpLnN0cmVhbVdhaXRpbmdQcml2YXRlTmFtZSgpLCBqc051bWJlcig1
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okds
b2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLnN0cmVhbVdyaXRhYmxl
UHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoNiksIERvbnREZWxldGUgfCBSZWFkT25seSksCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFBy
b3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLk1lZGlhU3RyZWFtUHJpdmF0ZU5h
bWUoKSwgSlNNZWRpYVN0cmVhbTo6Z2V0Q29uc3RydWN0b3Iodm0sIHRoaXMpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJ
bmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVOYW1l
KCksIEpTTWVkaWFTdHJlYW1UcmFjazo6Z2V0Q29uc3RydWN0b3Iodm0sIHRoaXMpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAogI2VuZGlmCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCmluZGV4IDM0
OTM4NjMuLjg2OWQ4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVCdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlQnVpbHRpbk5hbWVzLmgKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogI2RlZmluZSBXRUJDT1JFX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVS
VFlfTkFNRShtYWNybylcCisgICAgbWFjcm8oYWRkVHJhY2spIFwKICAgICBtYWNybyhhcHBlbmRG
cm9tSlMpIFwKICAgICBtYWNybyhjbG9zZVJlcXVlc3RlZCkgXAogICAgIG1hY3JvKGNsb3NlZFBy
b21pc2VDYXBhYmlsaXR5KSBcCkBAIC00MCw3ICs0MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgbWFjcm8oZGlzdHVyYmVkKSBcCiAgICAgbWFjcm8oZmlsbEZyb21KUykgXAogICAgIG1h
Y3JvKGdldFVzZXJNZWRpYUZyb21KUykgXAorICAgIG1hY3JvKGdldFJlbW90ZVN0cmVhbXMpIFwK
KyAgICBtYWNybyhnZXRTZW5kZXJzKSBcCiAgICAgbWFjcm8oaW5pdGlhbGl6ZVdpdGgpIFwKKyAg
ICBtYWNybyhsb2NhbFN0cmVhbXMpIFwKICAgICBtYWNybyhvcGVyYXRpb25zKSBcCiAgICAgbWFj
cm8ob3duZXJSZWFkYWJsZVN0cmVhbSkgXAogICAgIG1hY3JvKHByaXZhdGVHZXRTdGF0cykgXApA
QCAtNTUsNiArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8ocmVhZGVyKSBc
CiAgICAgbWFjcm8ocmVhZFJlcXVlc3RzKSBcCiAgICAgbWFjcm8ocmVhZHlQcm9taXNlQ2FwYWJp
bGl0eSkgXAorICAgIG1hY3JvKHJlbW92ZVRyYWNrKSBcCiAgICAgbWFjcm8oc3RhdGUpIFwKICAg
ICBtYWNybyhzdGFydGVkKSBcCiAgICAgbWFjcm8oc3RhcnRlZFByb21pc2UpIFwKQEAgLTY5LDYg
Kzc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKHVuZGVybHlpbmdTaW5rKSBc
CiAgICAgbWFjcm8odW5kZXJseWluZ1NvdXJjZSkgXAogICAgIG1hY3JvKHdyaXRpbmcpIFwKKyAg
ICBtYWNybyhNZWRpYVN0cmVhbSkgXAogICAgIG1hY3JvKE1lZGlhU3RyZWFtVHJhY2spIFwKICAg
ICBtYWNybyhSZWFkYWJsZVN0cmVhbSkgXAogICAgIG1hY3JvKFJlYWRhYmxlU3RyZWFtUmVhZGVy
KSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281899</attachid>
            <date>2016-06-22 23:28:46 -0700</date>
            <delta_ts>2016-06-23 06:52:26 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>pc-legacy-stream-api_1.patch</filename>
            <type>text/plain</type>
            <size>25388</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2Y2UyYWMzLi41OGVmYTQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDYt
MjIgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogQWRkIHN1cHBvcnQgZm9yIFJUQ1BlZXJDb25uZWN0aW9uIGxlZ2FjeSBNZWRp
YVN0cmVhbS1iYXNlZCBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODk0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCB0ZXN0IGZvciBSVENQZWVyQ29ubmVjdGlvbiBsZWdhY3kgTWVkaWFTdHJl
YW0tYmFzZWQgQVBJLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1sZWdhY3ktc3RyZWFtLWJhc2VkLWFwaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNl
ZC1hcGkuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnM6CisgICAgICAgIFNraXAgdGVzdCBmb3IgbWFjIHBvcnQgKG5vdCBidWlsZGluZyB3aXRoIFdF
Ql9SVEMgeWV0KQorCiAyMDE2LTA2LTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDE2MjkpOiBXZWlyZCBidXR0b24gZ2xp
dGNoaW5nIG9uIGdpdGh1Yi5jb20KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNlZC1hcGktZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sZWdh
Y3ktc3RyZWFtLWJhc2VkLWFwaS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzJhODBiYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNlZC1hcGktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjIgQEAKK1Rlc3QgUlRDUGVlckNvbm5lY3Rpb24ncyBsZWdh
Y3kgTWVkaWFTdHJlYW0tYmFzZWQgQVBJCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitTdHJlYW0gc2V0cyBzaG91bGQgYmUgZW1wdHkgaW5pdGlhbGx5CitQQVNTIHBjLmdldExvY2Fs
U3RyZWFtcygpLmxlbmd0aCBpcyAwCitQQVNTIHBjLmdldFJlbW90ZVN0cmVhbXMoKS5sZW5ndGgg
aXMgMAorCitUZXN0IHdpdGggc2luZ2xlIHRyYWNrIE1lZGlhU3RyZWFtCithdWRpb1RyYWNrID0g
c3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0KK1BBU1MgcGMuYWRkU3RyZWFtKHN0cmVhbSkgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCBp
cyAxCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpWzBdIGlzIHN0cmVhbQorUEFTUyBwYy5nZXRT
dHJlYW1CeUlkKHN0cmVhbS5pZCkgaXMgc3RyZWFtCitQQVNTIHBjLmdldFNlbmRlcnMoKS5sZW5n
dGggaXMgMQorUEFTUyBwYy5nZXRTZW5kZXJzKClbMF0udHJhY2sgaXMgYXVkaW9UcmFjaworQWRk
aW5nIHRoZSBzYW1lIHN0cmVhbSBhZ2FpbiBzaG91bGQgYmUgYSBuby1vcAorUEFTUyBwYy5hZGRT
dHJlYW0oc3RyZWFtKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcGMuZ2V0TG9jYWxT
dHJlYW1zKCkubGVuZ3RoIGlzIDEKKworVGVzdCB3aXRoIGF1ZGlvIGFuZCB2aWRlbyBNZWRpYVN0
cmVhbQorYXVkaW9UcmFjayA9IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdCit2aWRlb1RyYWNr
ID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0KK1BBU1MgcGMuYWRkU3RyZWFtKHN0cmVhbSkg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0
aCBpcyAyCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmluY2x1ZGVzKHN0cmVhbSkgaXMgdHJ1
ZQorUEFTUyBwYy5nZXRTdHJlYW1CeUlkKHN0cmVhbS5pZCkgaXMgc3RyZWFtCitQQVNTIHBjLmdl
dFNlbmRlcnMoKS5sZW5ndGggaXMgMworUEFTUyBhdWRpb1RyYWNrRm91bmRBbW9uZ1NlbmRlcnMg
aXMgdHJ1ZQorUEFTUyB2aWRlb1RyYWNrRm91bmRBbW9uZ1NlbmRlcnMgaXMgdHJ1ZQorCitUZXN0
IHJlbW92ZVN0cmVhbQorUmVtb3ZlIGEgbm9uLWV4aXN0ZW50IHN0cmVhbQorb3RoZXJTdHJlYW0g
PSBzdHJlYW0uY2xvbmUoKQorUEFTUyBwYy5yZW1vdmVTdHJlYW0ob3RoZXJTdHJlYW0pIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorQm90aCBzdHJlYW1zIHNob3VsZCBzdGlsbCBiZSBwcmVzZW50
CitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCBpcyAyCitQQVNTIHBjLnJlbW92ZVN0
cmVhbShzdHJlYW0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBwYy5nZXRMb2NhbFN0
cmVhbXMoKS5sZW5ndGggaXMgMQorUEFTUyBwYy5nZXRTdHJlYW1CeUlkKHN0cmVhbS5pZCkgaXMg
bnVsbAorQWxsIHNlbmRlcnMgc2hvdWxkIHN0aWxsIGJlIHByZXNlbnQKK1BBU1MgcGMuZ2V0U2Vu
ZGVycygpLmxlbmd0aCBpcyAzCitSZW1vdmluZyB0aGUgc2FtZSBzdHJlYW0gYWdhaW4gc2hvdWxk
IGJlIGEgbm8tb3AKK1BBU1MgcGMucmVtb3ZlU3RyZWFtKHN0cmVhbSkgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCBpcyAxCisKK1Rlc3Qg
YXBwbHlpbmcgYSByZW1vdGUgZGVzY3JpcHRpb24gb2ZmZXJpbmcgYSBzdHJlYW0gd2l0aCB0d28g
dHJhY2tzCitDcmVhdGUgcmVtb3RlIG9mZmVyCitHb3QgcmVtb3RlIG9mZmVyLCBzZXQgaXQKK1BB
U1MgR290ICdhZGRzdHJlYW0nIGV2ZW50IChiZWZvcmUgc2V0UmVtb3RlRGVzY3JpcHRpb24gcHJv
bWlzZSBmdWxmaWxsZWQpCitQQVNTIHJlbW90ZVN0cmVhbS5nZXRUcmFja3MoKS5sZW5ndGggaXMg
MgorUEFTUyBwYy5nZXRSZW1vdGVTdHJlYW1zKCkubGVuZ3RoIGlzIDEKK1BBU1MgcGMuZ2V0UmVt
b3RlU3RyZWFtcygpWzBdIGlzIHJlbW90ZVN0cmVhbQorUEFTUyBwYy5nZXRTdHJlYW1CeUlkKHJl
bW90ZVN0cmVhbS5pZCkgaXMgcmVtb3RlU3RyZWFtCitSZW1vdGUgb2ZmZXIgc2V0CitQQVNTIEVu
ZCBvZiB0ZXN0IHByb21pc2UgY2hhaW4KKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVhbS1iYXNlZC1hcGkuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbGVnYWN5LXN0cmVh
bS1iYXNlZC1hcGkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2
OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1sZWdhY3ktc3RyZWFtLWJhc2VkLWFwaS5odG1sCkBAIC0wLDAgKzEsMTQx
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8L2hl
YWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBkZXNjcmlwdGlv
bigiVGVzdCBSVENQZWVyQ29ubmVjdGlvbidzIGxlZ2FjeSBNZWRpYVN0cmVhbS1iYXNlZCBBUEki
KTsKKworICAgICAgICAgICAgbGV0IHN0cmVhbTsKKyAgICAgICAgICAgIGxldCBvdGhlclN0cmVh
bTsKKyAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrOworICAgICAgICAgICAgbGV0IHZpZGVvVHJh
Y2s7CisgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZvdW5kQW1vbmdTZW5kZXJzOworICAgICAg
ICAgICAgbGV0IHZpZGVvVHJhY2tGb3VuZEFtb25nU2VuZGVyczsKKyAgICAgICAgICAgIGxldCBy
ZW1vdGVTdHJlYW07CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgICAgICB0ZXN0UnVubmVyLnNldFVzZXJNZWRpYVBlcm1pc3Npb24odHJ1ZSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IGNhbiBub3Qg
YmUgcnVuIHdpdGhvdXQgdGhlIHRlc3RSdW5uZXIiKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgd2Vi
a2l0UlRDUGVlckNvbm5lY3Rpb24oe2ljZVNlcnZlcnM6W3t1cmxzOidzdHVuOmZvby5jb20nfV19
KTsKKyAgICAgICAgICAgIGNvbnN0IHJlbW90ZVBjID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0
aW9uKHtpY2VTZXJ2ZXJzOlt7dXJsczonc3R1bjpmb28uY29tJ31dfSk7CisKKyAgICAgICAgICAg
IGRlYnVnKCJTdHJlYW0gc2V0cyBzaG91bGQgYmUgZW1wdHkgaW5pdGlhbGx5IikKKyAgICAgICAg
ICAgIHNob3VsZEJlKCJwYy5nZXRMb2NhbFN0cmVhbXMoKS5sZW5ndGgiLCAiMCIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoInBjLmdldFJlbW90ZVN0cmVhbXMoKS5sZW5ndGgiLCAiMCIpOworCisg
ICAgICAgICAgICBwYy5vbmFkZHN0cmVhbSA9IGV2dCA9PiB7CisgICAgICAgICAgICAgICAgdGVz
dFBhc3NlZCgiR290ICdhZGRzdHJlYW0nIGV2ZW50IChiZWZvcmUgc2V0UmVtb3RlRGVzY3JpcHRp
b24gcHJvbWlzZSBmdWxmaWxsZWQpIik7CisgICAgICAgICAgICAgICAgcmVtb3RlU3RyZWFtID0g
ZXZ0LnN0cmVhbTsKKworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJyZW1vdGVTdHJlYW0uZ2V0
VHJhY2tzKCkubGVuZ3RoIiwgIjIiKTsKKworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJwYy5n
ZXRSZW1vdGVTdHJlYW1zKCkubGVuZ3RoIiwgIjEiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRC
ZSgicGMuZ2V0UmVtb3RlU3RyZWFtcygpWzBdIiwgInJlbW90ZVN0cmVhbSIpOworCisgICAgICAg
ICAgICAgICAgc2hvdWxkQmUoInBjLmdldFN0cmVhbUJ5SWQocmVtb3RlU3RyZWFtLmlkKSIsICJy
ZW1vdGVTdHJlYW0iKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIG5hdmlnYXRvci5t
ZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgImF1ZGlvIjogdHJ1ZSB9KQorICAgICAgICAgICAg
LnRoZW4ocyA9PiB7CisgICAgICAgICAgICAgICAgc3RyZWFtID0gczsKKworICAgICAgICAgICAg
ICAgIGRlYnVnKCI8YnI+VGVzdCB3aXRoIHNpbmdsZSB0cmFjayBNZWRpYVN0cmVhbSIpOworICAg
ICAgICAgICAgICAgIGV2YWxBbmRMb2coImF1ZGlvVHJhY2sgPSBzdHJlYW0uZ2V0QXVkaW9UcmFj
a3MoKVswXSIpOworICAgICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJwYy5hZGRTdHJlYW0o
c3RyZWFtKSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3RyZWFt
cygpLmxlbmd0aCIsICIxIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2Fs
U3RyZWFtcygpWzBdIiwgInN0cmVhbSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBj
LmdldFN0cmVhbUJ5SWQoc3RyZWFtLmlkKSIsICJzdHJlYW0iKTsKKworICAgICAgICAgICAgICAg
IHNob3VsZEJlKCJwYy5nZXRTZW5kZXJzKCkubGVuZ3RoIiwgIjEiKTsKKyAgICAgICAgICAgICAg
ICBzaG91bGRCZSgicGMuZ2V0U2VuZGVycygpWzBdLnRyYWNrIiwgImF1ZGlvVHJhY2siKTsKKwor
ICAgICAgICAgICAgICAgIGRlYnVnKCJBZGRpbmcgdGhlIHNhbWUgc3RyZWFtIGFnYWluIHNob3Vs
ZCBiZSBhIG5vLW9wIik7CisgICAgICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInBjLmFkZFN0
cmVhbShzdHJlYW0pIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3Ry
ZWFtcygpLmxlbmd0aCIsICIxIik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9y
Lm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyAiYXVkaW8iOiB0cnVlLCAidmlkZW8iOiB0cnVl
IH0pOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKHMgPT4geworICAgICAgICAg
ICAgICAgIHN0cmVhbSA9IHM7CisKKyAgICAgICAgICAgICAgICBkZWJ1ZygiPGJyPlRlc3Qgd2l0
aCBhdWRpbyBhbmQgdmlkZW8gTWVkaWFTdHJlYW0iKTsKKyAgICAgICAgICAgICAgICBldmFsQW5k
TG9nKCJhdWRpb1RyYWNrID0gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0iKTsKKyAgICAgICAg
ICAgICAgICBldmFsQW5kTG9nKCJ2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClb
MF0iKTsKKworICAgICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJwYy5hZGRTdHJlYW0oc3Ry
ZWFtKSIpOworCisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3RyZWFtcygp
Lmxlbmd0aCIsICIyIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJwYy5nZXRMb2Nh
bFN0cmVhbXMoKS5pbmNsdWRlcyhzdHJlYW0pIik7CisKKyAgICAgICAgICAgICAgICBzaG91bGRC
ZSgicGMuZ2V0U3RyZWFtQnlJZChzdHJlYW0uaWQpIiwgInN0cmVhbSIpOworCisgICAgICAgICAg
ICAgICAgc2hvdWxkQmUoInBjLmdldFNlbmRlcnMoKS5sZW5ndGgiLCAiMyIpOworCisgICAgICAg
ICAgICAgICAgYXVkaW9UcmFja0ZvdW5kQW1vbmdTZW5kZXJzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgdmlkZW9UcmFja0ZvdW5kQW1vbmdTZW5kZXJzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcGMuZ2V0U2VuZGVycygpLmZvckVhY2goc2VuZGVyID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNlbmRlci50cmFjayA9PT0gYXVkaW9UcmFjaykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1ZGlvVHJhY2tGb3VuZEFtb25nU2VuZGVycyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHNlbmRlci50cmFjayA9PT0gdmlkZW9UcmFjaykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZpZGVvVHJhY2tGb3VuZEFtb25nU2VuZGVycyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBzaG91bGRCZVRydWUoImF1ZGlvVHJhY2tGb3Vu
ZEFtb25nU2VuZGVycyIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgidmlkZW9UcmFj
a0ZvdW5kQW1vbmdTZW5kZXJzIik7CisKKyAgICAgICAgICAgICAgICBkZWJ1ZygiPGJyPlRlc3Qg
cmVtb3ZlU3RyZWFtIik7CisgICAgICAgICAgICAgICAgZGVidWcoIlJlbW92ZSBhIG5vbi1leGlz
dGVudCBzdHJlYW0iKTsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJvdGhlclN0cmVhbSA9
IHN0cmVhbS5jbG9uZSgpIik7CisgICAgICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInBjLnJl
bW92ZVN0cmVhbShvdGhlclN0cmVhbSkiKTsKKworICAgICAgICAgICAgICAgIGRlYnVnKCJCb3Ro
IHN0cmVhbXMgc2hvdWxkIHN0aWxsIGJlIHByZXNlbnQiKTsKKyAgICAgICAgICAgICAgICBzaG91
bGRCZSgicGMuZ2V0TG9jYWxTdHJlYW1zKCkubGVuZ3RoIiwgIjIiKTsKKworICAgICAgICAgICAg
ICAgIHNob3VsZE5vdFRocm93KCJwYy5yZW1vdmVTdHJlYW0oc3RyZWFtKSIpOworCisgICAgICAg
ICAgICAgICAgc2hvdWxkQmUoInBjLmdldExvY2FsU3RyZWFtcygpLmxlbmd0aCIsICIxIik7Cisg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoInBjLmdldFN0cmVhbUJ5SWQoc3RyZWFtLmlkKSIsICJu
dWxsIik7CisKKyAgICAgICAgICAgICAgICBkZWJ1ZygiQWxsIHNlbmRlcnMgc2hvdWxkIHN0aWxs
IGJlIHByZXNlbnQiKQorICAgICAgICAgICAgICAgIHNob3VsZEJlKCJwYy5nZXRTZW5kZXJzKCku
bGVuZ3RoIiwgIjMiKTsKKworICAgICAgICAgICAgICAgIGRlYnVnKCJSZW1vdmluZyB0aGUgc2Ft
ZSBzdHJlYW0gYWdhaW4gc2hvdWxkIGJlIGEgbm8tb3AiKTsKKyAgICAgICAgICAgICAgICBzaG91
bGROb3RUaHJvdygicGMucmVtb3ZlU3RyZWFtKHN0cmVhbSkiKTsKKyAgICAgICAgICAgICAgICBz
aG91bGRCZSgicGMuZ2V0TG9jYWxTdHJlYW1zKCkubGVuZ3RoIiwgIjEiKTsKKworICAgICAgICAg
ICAgICAgIGRlYnVnKCI8YnI+VGVzdCBhcHBseWluZyBhIHJlbW90ZSBkZXNjcmlwdGlvbiBvZmZl
cmluZyBhIHN0cmVhbSB3aXRoIHR3byB0cmFja3MiKTsKKyAgICAgICAgICAgICAgICByZW1vdGVQ
Yy5hZGRTdHJlYW0oc3RyZWFtKTsKKworICAgICAgICAgICAgICAgIGRlYnVnKCJDcmVhdGUgcmVt
b3RlIG9mZmVyIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbW90ZVBjLmNyZWF0ZU9mZmVy
KCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4ocmVtb3RlT2ZmZXIgPT4gewor
ICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgcmVtb3RlIG9mZmVyLCBzZXQgaXQiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlT2ZmZXIpOwor
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICBkZWJ1ZygiUmVtb3RlIG9mZmVyIHNldCIpOworICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQo
IkVuZCBvZiB0ZXN0IHByb21pc2UgY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiIik7
CisKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0pCisgICAg
ICAgICAgICAuY2F0Y2goZXJyb3IgPT4geworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVy
cm9yIGluIHByb21pc2UgY2hhaW46ICIgKyBlcnJvcik7CisgICAgICAgICAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworICAgICAgICAgICAgd2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBiMzJmNTUxLi4zM2M2
ZmUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjA0
LDYgKzIwNCw3IEBAIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1h
bnN3ZXIuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1
cC1zaW5nbGUtZGlhbG9nLmh0bWwKIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
bWVkaWEtc2V0dXAtdHdvLWRpYWxvZ3MuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1tZWRpYS1zZXR1cC1jYWxsYmFja3Mtc2luZ2xlLWRpYWxvZy5odG1sCitmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxlZ2FjeS1zdHJlYW0tYmFzZWQtYXBpLmh0bWwK
IAogIyBBc3NlcnRzIGluIGRlYnVnLgogWyBEZWJ1ZyBdIGZhc3QvaW1hZ2VzL2xhcmdlLXNpemUt
aW1hZ2UtY3Jhc2guaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRiODkwZGUuLjQ5ZmEzZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxNi0wNi0yMiAgQWRhbSBCZXJna3Zpc3Qg
IDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgV2ViUlRDOiBBZGQgc3Vw
cG9ydCBmb3IgUlRDUGVlckNvbm5lY3Rpb24gbGVnYWN5IE1lZGlhU3RyZWFtLWJhc2VkIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4OTQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSBsZWdhY3kgTWVkaWFTdHJlYW0tYmFzZWQgUlRDUGVlckNvbm5lY3Rpb24gQVBJIGFzIEpT
IGJ1aWx0LWlucy4gVGhlCisgICAgICAgIGdldFJlbW90ZVN0cmVhbXMoKSBmdW5jdGlvbiBhbmQg
dGhlICdhZGRzdHJlYW0nIGV2ZW50IGFyZSBwYXJ0bHkgaW1wbGVtZW50ZWQgd2l0aCBuYXRpdmUK
KyAgICAgICAgY29kZS4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWxlZ2FjeS1zdHJlYW0tYmFzZWQtYXBpLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRp
b25UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6
Z2V0UmVtb3RlU3RyZWFtcyk6CisgICAgICAgIFRoZSBnZXRSZW1vdGVTdHJlYW1zKCkgZnVuY3Rp
b24gYW5kIHRoZSAnYWRkc3RyZWFtJyBldmVudCBpcyBiYWNrZWQgdXAgYnkgbmF0aXZlIGNvZGUu
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b24uaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmlkbDoKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaDoKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmpzOgorICAgICAgICAoaW5pdGlh
bGl6ZVJUQ1BlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKGdldExvY2FsU3RyZWFtcyk6CisgICAg
ICAgIChnZXRSZW1vdGVTdHJlYW1zKToKKyAgICAgICAgKGdldFN0cmVhbUJ5SWQpOgorICAgICAg
ICAoYWRkU3RyZWFtKToKKyAgICAgICAgKHJlbW92ZVN0cmVhbSk6CisgICAgICAgIExlZ2FjeSBB
UEkgaW1wbGVtZW50ZWQgYXMgSlMgYnVpbHQtaW5zLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0
OjphZGRCdWlsdGluR2xvYmFscyk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0
aW5OYW1lcy5oOgorCiAyMDE2LTA2LTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDE2MjkpOiBXZWlyZCBidXR0b24gZ2xp
dGNoaW5nIG9uIGdpdGh1Yi5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcApp
bmRleCAxYjc3NGJmLi5iYzRkNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNSVENTZXNzaW9uRGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtRXZlbnQuaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiUGVlck1lZGlhRGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKQEAgLTQ3Niw2ICs0NzcsOSBAQCB2b2lk
IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb25UYXNrKFJl
ZlB0cjxSVENTZXNzaW9uRGVzYwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gT25l
IGxlZ2FjeSBNZWRpYVN0cmVhbUV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yIGV2ZXJ5IG5ldyBNZWRp
YVN0cmVhbSBjcmVhdGVkIGFzIHRoaXMgcmVtb3RlIGRlc2NyaXB0aW9uIGlzIHNldC4KKyAgICBW
ZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtRXZlbnQ+PiBsZWdhY3lNZWRpYVN0cmVhbUV2ZW50czsK
KwogICAgIGZvciAoYXV0byBtZWRpYURlc2NyaXB0aW9uIDogbWVkaWFEZXNjcmlwdGlvbnMpIHsK
ICAgICAgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIHRyYW5zY2VpdmVyID0gbWF0Y2hUcmFuc2NlaXZl
ckJ5TWlkKHRyYW5zY2VpdmVycywgbWVkaWFEZXNjcmlwdGlvbi0+bWlkKCkpOwogICAgICAgICBp
ZiAoIXRyYW5zY2VpdmVyKSB7CkBAIC01MjksNiArNTMzLDcgQEAgdm9pZCBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OnNldFJlbW90ZURlc2NyaXB0aW9uVGFzayhSZWZQdHI8UlRDU2Vzc2lv
bkRlc2MKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBhdXRv
IG5ld1N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoKm1fY2xpZW50LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIE1lZGlhU3RyZWFtVHJhY2tWZWN0b3IoeyByZWNlaXZlci50cmFjaygpIH0p
KTsKICAgICAgICAgICAgICAgICAgICAgbV9yZW1vdGVTdHJlYW1NYXAuYWRkKGlkLCBuZXdTdHJl
YW0uY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVnYWN5TWVkaWFTdHJlYW1FdmVu
dHMuYXBwZW5kKE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRkc3RyZWFt
RXZlbnQsIGZhbHNlLCBmYWxzZSwgbmV3U3RyZWFtLmNvcHlSZWYoKSkpOwogICAgICAgICAgICAg
ICAgICAgICB0cmFja0V2ZW50TWVkaWFTdHJlYW1zLmFkZChpZCwgV1RGTW92ZShuZXdTdHJlYW0p
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDEsNiArNTQ2LDEwIEBA
IHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpzZXRSZW1vdGVEZXNjcmlwdGlvblRh
c2soUmVmUHRyPFJUQ1Nlc3Npb25EZXNjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBGaXJl
IGxlZ2FjeSBhZGRzdHJlYW0gZXZlbnRzLgorICAgIGZvciAoYXV0byYgZXZlbnQgOiBsZWdhY3lN
ZWRpYVN0cmVhbUV2ZW50cykKKyAgICAgICAgbV9jbGllbnQtPmZpcmVFdmVudCgqZXZlbnQpOwor
CiAgICAgU2lnbmFsaW5nU3RhdGUgbmV3U2lnbmFsaW5nU3RhdGU7CiAKICAgICAvLyBVcGRhdGUg
c3RhdGUgYW5kIGxvY2FsIGRlc2NyaXB0aW9ucyBhY2NvcmRpbmcgdG8gc2V0TG9jYWwvUmVtb3Rl
RGVzY3JpcHRpb24gcHJvY2Vzc2luZyBtb2RlbApAQCAtNjcxLDYgKzY4MCwxMyBAQCB2b2lkIE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBl
ZXJDb25uZWN0aW9uOjpTdAogICAgIHByb21pc2UucmVqZWN0KE5PVF9TVVBQT1JURURfRVJSKTsK
IH0KIAorVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6Z2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRp
YVN0cmVhbT4+IHJlbW90ZVN0cmVhbXM7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1fcmVtb3Rl
U3RyZWFtTWFwLCByZW1vdGVTdHJlYW1zKTsKKyAgICByZXR1cm4gcmVtb3RlU3RyZWFtczsKK30K
KwogUmVmUHRyPFJUQ1J0cFJlY2VpdmVyPiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNy
ZWF0ZVJlY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhbnNjZWl2ZXJNaWQsIGNvbnN0IFN0cmluZyYg
dHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7CiAgICAgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSBzb3VyY2VUeXBlID0gdHJhY2tLaW5kID09ICJhdWRpbyIgPyBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVv
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKaW5kZXggMDE3ZjlkNC4uZTZlYTAwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCkBAIC03Myw2ICs3Myw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9u
OjpTdGF0c1Byb21pc2UmJikgb3ZlcnJpZGU7CiAKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3Ry
ZWFtPj4gZ2V0UmVtb3RlU3RyZWFtcygpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgUmVmUHRyPFJU
Q1J0cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihjb25zdCBTdHJpbmcmIHRyYW5zY2VpdmVyTWlk
LCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKSBvdmVycmlk
ZTsKICAgICB2b2lkIHJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImLCBSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4mJiwgUGVlckNvbm5lY3Rpb246OlZvaWRQcm9taXNlJiYpIG92ZXJyaWRlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaWRs
CmluZGV4IDcyZjUwOWEuLmI1NjkwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaWRsCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBz
ZXF1ZW5jZTxNZWRpYVN0cmVhbVRyYWNrPiBnZXRBdWRpb1RyYWNrcygpOwogICAgIHNlcXVlbmNl
PE1lZGlhU3RyZWFtVHJhY2s+IGdldFZpZGVvVHJhY2tzKCk7Ci0gICAgc2VxdWVuY2U8TWVkaWFT
dHJlYW1UcmFjaz4gZ2V0VHJhY2tzKCk7CisgICAgW1ByaXZhdGVJZGVudGlmaWVyLCBQdWJsaWNJ
ZGVudGlmaWVyXSBzZXF1ZW5jZTxNZWRpYVN0cmVhbVRyYWNrPiBnZXRUcmFja3MoKTsKICAgICBN
ZWRpYVN0cmVhbVRyYWNrIGdldFRyYWNrQnlJZChET01TdHJpbmcgdHJhY2tJZCk7CiAKICAgICB2
b2lkIGFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sgdHJhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgK
aW5kZXggNzU1MmIyYy4uYWIwNDA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oCkBAIC00MCw2ICs0
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NRXJyb3I7CiBjbGFzcyBFdmVu
dDsKK2NsYXNzIE1lZGlhU3RyZWFtOwogY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKIGNsYXNzIFBl
ZXJDb25uZWN0aW9uQmFja2VuZDsKIGNsYXNzIFJUQ0Fuc3dlck9wdGlvbnM7CkBAIC0xMDYsNiAr
MTA3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldFN0YXRzKE1lZGlhU3RyZWFt
VHJhY2sqLCBQZWVyQ29ubmVjdGlvbjo6U3RhdHNQcm9taXNlJiYpID0gMDsKIAorICAgIHZpcnR1
YWwgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IGdldFJlbW90ZVN0cmVhbXMoKSBjb25zdCA9
IDA7CisKICAgICB2aXJ0dWFsIFJlZlB0cjxSVENSdHBSZWNlaXZlcj4gY3JlYXRlUmVjZWl2ZXIo
Y29uc3QgU3RyaW5nJiB0cmFuc2NlaXZlck1pZCwgY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNv
bnN0IFN0cmluZyYgdHJhY2tJZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlVHJhY2so
UlRDUnRwU2VuZGVyJiwgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+JiYsIFBlZXJDb25uZWN0aW9u
OjpWb2lkUHJvbWlzZSYmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAppbmRleCA1OWU4MTgwLi42MmEzOTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5oCkBAIC02OSw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFJUQ1J0cFJlY2VpdmVyPj4mIGdldFJlY2VpdmVycygpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNjZWl2ZXJTZXQtPmdldFJlY2VpdmVycygpOyB9CiAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxSVENSdHBUcmFuc2NlaXZlcj4+JiBnZXRUcmFuc2NlaXZlcnMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3RyYW5zY2VpdmVyU2V0LT5saXN0KCk7IH0KIAorICAgIC8vIFBhcnQgb2Yg
bGVnYWN5IE1lZGlhU3RyZWFtLWJhc2VkIEFQSSAobW9zdGx5IGltcGxlbWVudGVkIGFzIEpTIGJ1
aWx0LWlucykKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gZ2V0UmVtb3RlU3RyZWFt
cygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+Z2V0UmVtb3RlU3RyZWFtcygpOyB9CisKICAg
ICBSZWZQdHI8UlRDUnRwU2VuZGVyPiBhZGRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwg
Y29uc3QgVmVjdG9yPE1lZGlhU3RyZWFtKj4mLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBy
ZW1vdmVUcmFjayhSVENSdHBTZW5kZXImLCBFeGNlcHRpb25Db2RlJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5p
ZGwKaW5kZXggNDBhYzg3Ny4uZmVjZGFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5pZGwKQEAgLTQxLDE2ICs0
MSwyNCBAQAogICAgIFtQcml2YXRlSWRlbnRpZmllciwgQ2FsbFdpdGg9RG9jdW1lbnQsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBpbml0aWFsaXplV2l0aChEaWN0aW9uYXJ5IHBhcmFtZXRlcnMpOwog
CiAgICAgLy8gUlRQIE1lZGlhIEFQSSBleHRlbnNpb25zCi0gICAgc2VxdWVuY2U8UlRDUnRwU2Vu
ZGVyPiBnZXRTZW5kZXJzKCk7CisgICAgW1ByaXZhdGVJZGVudGlmaWVyLCBQdWJsaWNJZGVudGlm
aWVyXSBzZXF1ZW5jZTxSVENSdHBTZW5kZXI+IGdldFNlbmRlcnMoKTsKICAgICBzZXF1ZW5jZTxS
VENSdHBSZWNlaXZlcj4gZ2V0UmVjZWl2ZXJzKCk7CiAgICAgc2VxdWVuY2U8UlRDUnRwVHJhbnNj
ZWl2ZXI+IGdldFRyYW5zY2VpdmVycygpOwogCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSBSVENSdHBTZW5kZXIgYWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayB0cmFj
aywgTWVkaWFTdHJlYW0uLi4gc3RyZWFtcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciBzZW5kZXIpOworICAg
IFtQcml2YXRlSWRlbnRpZmllciwgUHVibGljSWRlbnRpZmllciwgU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIFJUQ1J0cFNlbmRlciBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNr
IHRyYWNrLCBNZWRpYVN0cmVhbS4uLiBzdHJlYW1zKTsKKyAgICBbUHJpdmF0ZUlkZW50aWZpZXIs
IFB1YmxpY0lkZW50aWZpZXIsIFN0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciBzZW5kZXIpOwogCiAgICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBSVENSdHBUcmFuc2NlaXZlciBhZGRUcmFuc2NlaXZl
cihNZWRpYVN0cmVhbVRyYWNrIHRyYWNrLCBvcHRpb25hbCBSVENSdHBUcmFuc2NlaXZlckluaXQg
aW5pdCk7CiAgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBSVENSdHBU
cmFuc2NlaXZlciBhZGRUcmFuc2NlaXZlcihET01TdHJpbmcga2luZCwgb3B0aW9uYWwgUlRDUnRw
VHJhbnNjZWl2ZXJJbml0IGluaXQpOwogCisgICAgLy8gTGVnYWN5IE1lZGlhU3JlYW0tYmFzZWQg
QVBJIChpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIFJUUCBNZWRpYSBBUEkpCisgICAgW0pTQnVp
bHRpbl0gc2VxdWVuY2U8TWVkaWFTdHJlYW0+IGdldExvY2FsU3RyZWFtcygpOworICAgIFtQcml2
YXRlSWRlbnRpZmllciwgUHVibGljSWRlbnRpZmllcl0gc2VxdWVuY2U8TWVkaWFTdHJlYW0+IGdl
dFJlbW90ZVN0cmVhbXMoKTsKKyAgICBbSlNCdWlsdGluXSBNZWRpYVN0cmVhbSBnZXRTdHJlYW1C
eUlkKERPTVN0cmluZyBzdHJlYW1JZCk7CisKKyAgICBbSlNCdWlsdGluXSB2b2lkIGFkZFN0cmVh
bShNZWRpYVN0cmVhbSBzdHJlYW0pOworICAgIFtKU0J1aWx0aW5dIHZvaWQgcmVtb3ZlU3RyZWFt
KE1lZGlhU3RyZWFtIHN0cmVhbSk7CisKICAgICBbSlNCdWlsdGluXSBQcm9taXNlIGNyZWF0ZU9m
ZmVyKG9wdGlvbmFsIERpY3Rpb25hcnkgb2ZmZXJPcHRpb25zKTsKICAgICAvLyBMZWdhY3kgc2ln
bmF0dXJlOiBQcm9taXNlIGNyZWF0ZU9mZmVyKFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjawogICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUlRDUGVlckNvbm5lY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssCkBAIC0x
MTcsNiArMTI1LDkgQEAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uaWNlY29ubmVjdGlv
bnN0YXRlY2hhbmdlOwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25pY2VnYXRoZXJpbmdz
dGF0ZWNoYW5nZTsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uZGF0YWNoYW5uZWw7CisK
KyAgICAvLyBMZWdhY3kgZXZlbnQgaGFuZGxlciAoTWVkaWFTdHJlYW0tYmFzZWQgQVBJKQorICAg
IGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25hZGRzdHJlYW07CiB9OwogCiAvLyBUaGlzIGVudW0g
aXMgbWlycm9yZWQgaW4gUlRDUnRwVHJhbnNjZWl2ZXIuaWRsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmpzIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5qcwppbmRleCA5
MWU3ZWNmLi5hNGEzMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uanMKQEAgLTQ4LDkgKzQ4LDg2IEBAIGZ1bmN0
aW9uIGluaXRpYWxpemVSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKQogICAgICAgICAg
ICAgOiAiRXJyb3IgY3JlYXRpbmcgUlRDUGVlckNvbm5lY3Rpb24iOwogICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcihtZXNzYWdlKTsKICAgICB9CisKKyAgICB0aGlzLkBsb2NhbFN0cmVhbXMg
PSBbXTsKKwogICAgIHJldHVybiB0aGlzOwogfQogCitmdW5jdGlvbiBnZXRMb2NhbFN0cmVhbXMo
KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzUlRDUGVlckNvbm5lY3Rpb24o
dGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJGdW5jdGlvbiBzaG91bGQgYmUg
Y2FsbGVkIG9uIGFuIFJUQ1BlZXJDb25uZWN0aW9uIik7CisKKyAgICByZXR1cm4gdGhpcy5AbG9j
YWxTdHJlYW1zLnNsaWNlKCk7Cit9CisKK2Z1bmN0aW9uIGdldFN0cmVhbUJ5SWQoc3RyZWFtSWRB
cmcpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNSVENQZWVyQ29ubmVjdGlv
bih0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkZ1bmN0aW9uIHNob3VsZCBi
ZSBjYWxsZWQgb24gYW4gUlRDUGVlckNvbm5lY3Rpb24iKTsKKworICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoIDwgMSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIik7CisKKyAgICBjb25zdCBzdHJlYW1JZCA9IEBTdHJpbmcoc3RyZWFtSWRBcmcpOwor
CisgICAgcmV0dXJuIHRoaXMuQGxvY2FsU3RyZWFtcy5maW5kKHN0cmVhbSA9PiBzdHJlYW0uaWQg
PT09IHN0cmVhbUlkKQorICAgICAgICB8fCB0aGlzLkBnZXRSZW1vdGVTdHJlYW1zKCkuZmluZChz
dHJlYW0gPT4gc3RyZWFtLmlkID09PSBzdHJlYW1JZCkKKyAgICAgICAgfHwgbnVsbDsKK30KKwor
ZnVuY3Rpb24gYWRkU3RyZWFtKHN0cmVhbSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBp
ZiAoIUBpc1JUQ1BlZXJDb25uZWN0aW9uKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiRnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbiBhbiBSVENQZWVyQ29ubmVjdGlvbiIp
OworCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKQorICAgICAgICB0aHJvdyBuZXcgQFR5
cGVFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIGlmICghKHN0cmVhbSBpbnN0
YW5jZW9mIEBNZWRpYVN0cmVhbSkpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcmd1
bWVudCAxICgnc3RyZWFtJykgdG8gUlRDUGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtIG11c3QgYmUg
YW4gaW5zdGFuY2Ugb2YgTWVkaWFTdHJlYW0iKTsKKworICAgIGlmICh0aGlzLkBsb2NhbFN0cmVh
bXMuZmluZChsb2NhbFN0cmVhbSA9PiBsb2NhbFN0cmVhbS5pZCA9PT0gc3RyZWFtLmlkKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdGhpcy5AbG9jYWxTdHJlYW1zLkBwdXNoKHN0cmVhbSk7Cisg
ICAgc3RyZWFtLkBnZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRoaXMuQGFkZFRyYWNrKHRy
YWNrLCBzdHJlYW0pKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlU3RyZWFtKHN0cmVhbSkKK3sKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc1JUQ1BlZXJDb25uZWN0aW9uKHRoaXMpKQor
ICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiRnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBv
biBhbiBSVENQZWVyQ29ubmVjdGlvbiIpOworCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAx
KQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTsK
KworICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIEBNZWRpYVN0cmVhbSkpCisgICAgICAgIHRo
cm93IG5ldyBAVHlwZUVycm9yKCJBcmd1bWVudCAxICgnc3RyZWFtJykgdG8gUlRDUGVlckNvbm5l
Y3Rpb24ucmVtb3ZlU3RyZWFtIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgTWVkaWFTdHJlYW0iKTsK
KworICAgIGNvbnN0IGluZGV4T2ZTdHJlYW1Ub1JlbW92ZSA9IHRoaXMuQGxvY2FsU3RyZWFtcy5m
aW5kSW5kZXgobG9jYWxTdHJlYW0gPT4gbG9jYWxTdHJlYW0uaWQgPT09IHN0cmVhbS5pZCk7Cisg
ICAgaWYgKGluZGV4T2ZTdHJlYW1Ub1JlbW92ZSA9PT0gLTEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IHNlbmRlcnMgPSB0aGlzLkBnZXRTZW5kZXJzKCk7CisgICAgdGhpcy5AbG9jYWxT
dHJlYW1zW2luZGV4T2ZTdHJlYW1Ub1JlbW92ZV0uQGdldFRyYWNrcygpLmZvckVhY2godHJhY2sg
PT4geworICAgICAgICBjb25zdCBzZW5kZXJGb3JUcmFjayA9IHNlbmRlcnMuZmluZChzZW5kZXIg
PT4gc2VuZGVyLnRyYWNrICYmIHNlbmRlci50cmFjay5pZCA9PT0gdHJhY2suaWQpOworICAgICAg
ICBpZiAoc2VuZGVyRm9yVHJhY2spCisgICAgICAgICAgICB0aGlzLkByZW1vdmVUcmFjayhzZW5k
ZXJGb3JUcmFjayk7CisgICAgfSk7CisKKyAgICB0aGlzLkBsb2NhbFN0cmVhbXMuc3BsaWNlKGlu
ZGV4T2ZTdHJlYW1Ub1JlbW92ZSwgMSk7Cit9CisKIGZ1bmN0aW9uIGNyZWF0ZU9mZmVyKCkKIHsK
ICAgICAidXNlIHN0cmljdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKaW5kZXggMWNjNTY2ZS4uNWYwODU4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNp
bmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU01lZGlhU3RyZWFtLmgiCiAj
aW5jbHVkZSAiSlNNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiSlNSVENJY2VDYW5kaWRh
dGUuaCIKICNpbmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgpAQCAtODMsNiArODQs
NyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjphZGRCdWlsdGluR2xvYmFscyhWTSYgdm0pCiAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5i
dWlsdGluTmFtZXMoKS5zdHJlYW1XYWl0aW5nUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoNSksIERv
bnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQ
cm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1Xcml0YWJsZVByaXZh
dGVOYW1lKCksIGpzTnVtYmVyKDYpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0
eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5NZWRpYVN0cmVhbVByaXZhdGVOYW1lKCks
IEpTTWVkaWFTdHJlYW06OmdldENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKICAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhj
bGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlTmFtZSgpLCBK
U01lZGlhU3RyZWFtVHJhY2s6OmdldENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKICNlbmRpZgogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAppbmRleCAzNDkzODYz
Li5kNjUxYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
QnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1
aWx0aW5OYW1lcy5oCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNk
ZWZpbmUgV0VCQ09SRV9DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05B
TUUobWFjcm8pXAorICAgIG1hY3JvKGFkZFRyYWNrKSBcCiAgICAgbWFjcm8oYXBwZW5kRnJvbUpT
KSBcCiAgICAgbWFjcm8oY2xvc2VSZXF1ZXN0ZWQpIFwKICAgICBtYWNybyhjbG9zZWRQcm9taXNl
Q2FwYWJpbGl0eSkgXApAQCAtNDAsNyArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IG1hY3JvKGRpc3R1cmJlZCkgXAogICAgIG1hY3JvKGZpbGxGcm9tSlMpIFwKICAgICBtYWNybyhn
ZXRVc2VyTWVkaWFGcm9tSlMpIFwKKyAgICBtYWNybyhnZXRSZW1vdGVTdHJlYW1zKSBcCisgICAg
bWFjcm8oZ2V0U2VuZGVycykgXAorICAgIG1hY3JvKGdldFRyYWNrcykgXAogICAgIG1hY3JvKGlu
aXRpYWxpemVXaXRoKSBcCisgICAgbWFjcm8obG9jYWxTdHJlYW1zKSBcCiAgICAgbWFjcm8ob3Bl
cmF0aW9ucykgXAogICAgIG1hY3JvKG93bmVyUmVhZGFibGVTdHJlYW0pIFwKICAgICBtYWNybyhw
cml2YXRlR2V0U3RhdHMpIFwKQEAgLTU1LDYgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIG1hY3JvKHJlYWRlcikgXAogICAgIG1hY3JvKHJlYWRSZXF1ZXN0cykgXAogICAgIG1hY3Jv
KHJlYWR5UHJvbWlzZUNhcGFiaWxpdHkpIFwKKyAgICBtYWNybyhyZW1vdmVUcmFjaykgXAogICAg
IG1hY3JvKHN0YXRlKSBcCiAgICAgbWFjcm8oc3RhcnRlZCkgXAogICAgIG1hY3JvKHN0YXJ0ZWRQ
cm9taXNlKSBcCkBAIC02OSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNy
byh1bmRlcmx5aW5nU2luaykgXAogICAgIG1hY3JvKHVuZGVybHlpbmdTb3VyY2UpIFwKICAgICBt
YWNybyh3cml0aW5nKSBcCisgICAgbWFjcm8oTWVkaWFTdHJlYW0pIFwKICAgICBtYWNybyhNZWRp
YVN0cmVhbVRyYWNrKSBcCiAgICAgbWFjcm8oUmVhZGFibGVTdHJlYW0pIFwKICAgICBtYWNybyhS
ZWFkYWJsZVN0cmVhbVJlYWRlcikgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>