<?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>57203</bug_id>
          
          <creation_ts>2011-03-27 22:15:50 -0700</creation_ts>
          <short_desc>http streams don&apos;t always display video with AVFoundation backend</short_desc>
          <delta_ts>2022-02-12 18:40:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374278</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-27 22:15:50 -0700</bug_when>
    <thetext>http streams, live or stored, don&apos;t always display video when displayed with the new AVFoundation backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374624</commentid>
    <comment_count>1</comment_count>
      <attachid>87167</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-28 11:12:03 -0700</bug_when>
    <thetext>Created attachment 87167
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374632</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-28 11:24:27 -0700</bug_when>
    <thetext>rdar://9172549</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374635</commentid>
    <comment_count>3</comment_count>
      <attachid>87167</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-28 11:32:36 -0700</bug_when>
    <thetext>Comment on attachment 87167
Proposed patch

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

&gt; Source/WebCore/platform/graphics/MediaPlayer.h:322
&gt; +    bool m_isAllowedToRender;

&apos;allowed&apos; is a bit vague here. Allowed by whom? By MediaPlayer, or by the underlying framework?

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:113
&gt; +    static const NSArray* assetMetadataKeyNames();
&gt; +    static const NSArray* itemKVOProperties();

I think these should just be static functions in the impl. file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374637</commentid>
    <comment_count>4</comment_count>
      <attachid>87167</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-28 11:33:57 -0700</bug_when>
    <thetext>Comment on attachment 87167
Proposed patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:444
&gt; -    if (isReadyForVideoSetup() &amp;&amp; !hasSetUpVideoRendering())
&gt; +    if (isReadyForVideoSetup() &amp;&amp; currentRenderingMode() != preferredRenderingMode())

This looks fine, but I have no understanding of the reason for the change. The change log says what changed, but not why, and similarly the code does not say why. I’m not asking for a comment, just noting that there’s no way for me to verify this is a good change.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:156
&gt; +        const NSArray *keys = itemKVOProperties();
&gt; +        for (NSString *keyName in keys)

No need for a local variable here.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:264
&gt; +        const NSArray *keys = itemKVOProperties();
&gt; +        for (NSString *keyName in keys)

No need for a local variable here.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:676
&gt; +const NSArray* MediaPlayerPrivateAVFoundationObjC::itemKVOProperties()

With an Objective-C type I don’t think the const does any good here other than requiring you to write const elsewhere. You can still call any method on such a pointer. Immutability in Objective-C and Foundation is a property of the class, not the constness of the pointer.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:680
&gt; +    static NSArray* keys;
&gt; +    if (!keys) {
&gt; +        keys = [[NSArray alloc] initWithObjects: @&quot;presentationSize&quot;,

This can just be static NSArray * keys = ... because C++ already handles the one time initialization for us.

On a separate note, I am worried that this code will not work properly under GC. I seem to recall that when global variables were in C++ functions that we had to do an explicit CFRetain. Tim Hatcher or Mark Rowe might remember.

Also we normally don’t put spaces after colons like this one.

We should be consistent about where we put the &quot;*&quot; for NSArray.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374821</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-28 15:14:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 87167 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87167&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:444
&gt; &gt; -    if (isReadyForVideoSetup() &amp;&amp; !hasSetUpVideoRendering())
&gt; &gt; +    if (isReadyForVideoSetup() &amp;&amp; currentRenderingMode() != preferredRenderingMode())
&gt; 
&gt; This looks fine, but I have no understanding of the reason for the change. The change log says what changed, but not why, and similarly the code does not say why. I’m not asking for a comment, just noting that there’s no way for me to verify this is a good change.
&gt; 
  Good point, I added a more thorough explanation to the ChangeLog.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:156
&gt; &gt; +        const NSArray *keys = itemKVOProperties();
&gt; &gt; +        for (NSString *keyName in keys)
&gt; 
&gt; No need for a local variable here.
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:264
&gt; &gt; +        const NSArray *keys = itemKVOProperties();
&gt; &gt; +        for (NSString *keyName in keys)
&gt; 
&gt; No need for a local variable here.
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:676
&gt; &gt; +const NSArray* MediaPlayerPrivateAVFoundationObjC::itemKVOProperties()
&gt; 
&gt; With an Objective-C type I don’t think the const does any good here other than requiring you to write const elsewhere. You can still call any method on such a pointer. Immutability in Objective-C and Foundation is a property of the class, not the constness of the pointer.
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:680
&gt; &gt; +    static NSArray* keys;
&gt; &gt; +    if (!keys) {
&gt; &gt; +        keys = [[NSArray alloc] initWithObjects: @&quot;presentationSize&quot;,
&gt; 
&gt; This can just be static NSArray * keys = ... because C++ already handles the one time initialization for us.
&gt; 
&gt; On a separate note, I am worried that this code will not work properly under GC. I seem to recall that when global variables were in C++ functions that we had to do an explicit CFRetain. Tim Hatcher or Mark Rowe might remember.
&gt; 
  Some code in WebCore does do an extra CFRetain() after allocating an NS type and some does not, but Anders says it should not be necessary as long as the variable is declared static.

&gt; Also we normally don’t put spaces after colons like this one.
&gt; 
&gt; We should be consistent about where we put the &quot;*&quot; for NSArray.
&gt;
  Oops, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374822</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-28 15:14:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840778</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-02-12 18:40:21 -0800</bug_when>
    <thetext>*** Bug 50358 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87167</attachid>
            <date>2011-03-28 11:12:03 -0700</date>
            <delta_ts>2011-03-28 11:33:57 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_1.txt</filename>
            <type>text/plain</type>
            <size>19325</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTE4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDMtMjggIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cCBzdHJlYW1zIGRvbid0IGFsd2F5cyBkaXNwbGF5
IHZpZGVvIHdpdGggQVZGb3VuZGF0aW9uIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjAzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0ZXN0cyBmb3IgaHR0cCBsaXZlIHN0cmVhbXMuIENoYW5n
ZXMgdmVyaWZpZWQgbWFudWFsbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6TWVkaWFQbGF5ZXIp
OiBJbml0aWFsaXplIG1faXNBbGxvd2VkVG9SZW5kZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllcjo6bG9hZFdpdGhOZXh0TWVkaWFFbmdpbmUpOiBDYWxsIHByZXBhcmVGb3JSZW5kZXJp
bmcgb24gbmV3IGVuZ2luZQorICAgICAgICAgICAgaWYgbV9pc0FsbG93ZWRUb1JlbmRlciBpcyBz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6cHJlcGFyZUZvclJlbmRlcmluZyk6
IFNldCBtX2lzQWxsb3dlZFRvUmVuZGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aXNSZWFkeUZvclZpZGVvU2V0dXApOiBEb24n
dCByZXR1cm4gdHJ1ZSB1bnRpbAorICAgICAgICAgICAgbV9pc0FsbG93ZWRUb1JlbmRlciBoYXMg
YmVlbiBzZXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OnByZXBhcmVGb3JSZW5kZXJpbmcpOiBBbHdheXMgY2FsbCBzZXRVcFZpZGVvUmVuZGVyaW5n
LAorICAgICAgICAgICAgaXQgaGFzIGxvZ2ljIHRvIGZpZ3VyZSBvdXQgd2hlbiBzZXR1cCBpcyBy
ZXF1aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6dXBkYXRlU3RhdGVzKTogQ2FsbCBzZXRVcFZpZGVvUmVuZGVyaW5nIHdoZW4gCisgICAgICAg
ICAgICBwcmVmZXJyZWQgcmVuZGVyaW5nIG1vZGUgaXMgbm90IHNldCB1cAorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptb3ZpZUxvYWRUeXBlKTogUmV0
dXJuICJ1bmtub3duIiB1bnRpbCB3ZSBoYXZlIG1ldGFkYXRhLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQpOiBVc2UgaXRlbUtWT1Byb3Bl
cnRpZXMoKSBpbnN0ZWFkIG9mCisgICAgICAgICAgICBhbiBleHBsaWNpdCBsaXN0IG9mIGtleSBw
YXRoIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJGb3JVUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRh
KTogbWV0YWRhdGFLZXlOYW1lcyByZW5hbWVkCisgICAgICAgICAgICB0byBhc3NldE1ldGFkYXRh
S2V5TmFtZXMsIHJldHVybiBhbiBOU0FycmF5IGluc3RlYWQgb2YgYSBDRkFycmF5UmVmIHNpbmNl
IHRoYXQgaXMgd2hhdCB0aGUKKyAgICAgICAgICAgIGNhbGxlcnMgbmVlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRp
b24pOiBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIHRoZSAKKyAgICAgICAgICAgIHBsYXllciBpdGVt
LCBub3QgdGhlIGFzc2V0LCBiZWNhdXNlIEFWQXNzZXQuZHVyYXRpb24gYWx3YXlzIHJldHVybnMg
YW4gaW5kZWZpbml0ZSB0aW1lCisgICAgICAgICAgICBmb3IgYWxsIHN0cmVhbWluZyBmaWxlcy4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmFz
c2V0U3RhdHVzKTogbWV0YWRhdGFLZXlOYW1lcyByZW5hbWVkCisgICAgICAgICAgICB0byBhc3Nl
dE1ldGFkYXRhS2V5TmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCk6IERvIG5vdGhpbmcg
dW50aWwKKyAgICAgICAgICAgIG1ldGFkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFj
a3NDaGFuZ2VkKTogU3BsaXQgc2l6ZSBjYWxjdWxhdGlvbiBsb2dpYyBvZmYKKyAgICAgICAgICAg
IGludG8gc2l6ZUNoYW5nZWQoKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKTogTmV3LiBVc2UgQVZQbGF5ZXJJdGVtLnBy
ZXNlbnRhdGlvblNpemUKKyAgICAgICAgICAgIHVudGlsIHRyYWNrcyBpcyBub24tTlVMTCBzbyB3
ZSBoYXZlIGEgc2l6ZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmFzc2V0TWV0YWRhdGFLZXlOYW1lcyk6
IFJlbmFtZWQgZnJvbSBtZXRhZGF0YUtleU5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aXRlbUtWT1Byb3BlcnRpZXMpOiBOZXcsIHJl
dHVybiBhbiBhcnJheSBvZgorICAgICAgICAgICAgS1ZPIG9ic2VydmFibGUgcHJvcGVydGllcy4K
KyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0
aDpvZk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKTogUmVzcG9uZCB0byAKKyAgICAgICAgICAgIHBy
ZXNlbnRhdGlvblNpemUgY2hhbmdlLgorCiAyMDExLTAzLTI4ICBKYXJra28gU2Fra2luZW4gIDxq
YXJra28uai5zYWtraW5lbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFt
aW4gUG91bGFpbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDgxOTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNiAr
Mjk2LDcgQEAgTWVkaWFQbGF5ZXI6Ok1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZQogICAgICwg
bV9tdXRlZChmYWxzZSkKICAgICAsIG1fcHJlc2VydmVzUGl0Y2godHJ1ZSkKICAgICAsIG1fcHJp
dmF0ZUJyb3dzaW5nKGZhbHNlKQorICAgICwgbV9pc0FsbG93ZWRUb1JlbmRlcihmYWxzZSkKICNp
ZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1fcGxheWVyUHJveHkoMCkK
ICNlbmRpZgpAQCAtMzY5LDYgKzM3MCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWRXaXRoTmV4
dE1lZGlhRW5naW4KICAgICAgICAgbV9wcml2YXRlLT5zZXRQcml2YXRlQnJvd3NpbmdNb2RlKG1f
cHJpdmF0ZUJyb3dzaW5nKTsKICAgICAgICAgbV9wcml2YXRlLT5zZXRQcmVsb2FkKG1fcHJlbG9h
ZCk7CiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UHJlc2VydmVzUGl0Y2gocHJlc2VydmVzUGl0Y2go
KSk7CisgICAgICAgIGlmIChtX2lzQWxsb3dlZFRvUmVuZGVyKQorICAgICAgICAgICAgbV9wcml2
YXRlLT5wcmVwYXJlRm9yUmVuZGVyaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJpdmF0ZSkK
QEAgLTM4Nyw3ICszOTAsOCBAQCBib29sIE1lZGlhUGxheWVyOjpoYXNBdmFpbGFibGVWaWRlb0Zy
YW1lCiAKIHZvaWQgTWVkaWFQbGF5ZXI6OnByZXBhcmVGb3JSZW5kZXJpbmcoKQogewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPnByZXBhcmVGb3JSZW5kZXJpbmcoKTsKKyAgICBtX2lzQWxsb3dlZFRv
UmVuZGVyID0gdHJ1ZTsKKyAgICBtX3ByaXZhdGUtPnByZXBhcmVGb3JSZW5kZXJpbmcoKTsKIH0K
IAogYm9vbCBNZWRpYVBsYXllcjo6Y2FuTG9hZFBvc3RlcigpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDgx
OTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX211
dGVkOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaDsKICAgICBib29sIG1fcHJpdmF0ZUJyb3dz
aW5nOworICAgIGJvb2wgbV9pc0FsbG93ZWRUb1JlbmRlcjsKICNpZiBFTkFCTEUoUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykKICAgICBXZWJNZWRpYVBsYXllclByb3h5KiBtX3BsYXllclByb3h5OyAg
ICAvLyBub3Qgb3duZWQgb3IgdXNlZCwgcGFzc2VkIHRvIG1fcHJpdmF0ZQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uLmNwcAkocmV2aXNpb24gODE5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw3IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjoKIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Omlz
UmVhZHlGb3JWaWRlb1NldHVwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZWFkeVN0YXRlID49
IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKKyAgICBy
ZXR1cm4gbV9pc0FsbG93ZWRUb1JlbmRlciAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSAmJiBtX3BsYXllci0+dmlzaWJsZSgpOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJlcGFyZUZvclJlbmRlcmluZygpCkBAIC0zNjgsOCAr
MzY4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZQogICAgICAg
ICByZXR1cm47CiAgICAgbV9pc0FsbG93ZWRUb1JlbmRlciA9IHRydWU7CiAKLSAgICBpZiAoIWhh
c1NldFVwVmlkZW9SZW5kZXJpbmcoKSkKLSAgICAgICAgc2V0VXBWaWRlb1JlbmRlcmluZygpOwor
ICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKIAogICAgIGlmIChjdXJyZW50UmVuZGVyaW5nTW9k
ZSgpID09IE1lZGlhUmVuZGVyaW5nVG9MYXllciB8fCBwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkg
PT0gTWVkaWFSZW5kZXJpbmdUb0xheWVyKQogICAgICAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJD
bGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7CkBAIC00
MzUsMTQgKzQzNCwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBk
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXR1cyA+
PSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5VG9QbGF5KQogICAgICAgICAgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IChtYXhMb2FkZWQgPT0gZHVyYXRpb24oKSkgPyBNZWRp
YVBsYXllcjo6TG9hZGVkIDogTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaXNSZWFkeUZvclZpZGVvU2V0dXAoKSAmJiAhaGFz
U2V0VXBWaWRlb1JlbmRlcmluZygpKQorICAgIGlmIChpc1JlYWR5Rm9yVmlkZW9TZXR1cCgpICYm
IGN1cnJlbnRSZW5kZXJpbmdNb2RlKCkgIT0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpKQogICAg
ICAgICBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CiAKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0g
b2xkTmV0d29ya1N0YXRlKQpAQCAtNTY3LDcgKzU2Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpyZXAKIAogTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKIHsKLSAgICBp
ZiAoYXNzZXRTdGF0dXMoKSA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtub3duKQorICAg
IGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCBhc3NldFN0YXR1cygpID09IE1lZGlhUGxheWVy
QVZBc3NldFN0YXR1c1Vua25vd24pCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93
bjsKIAogICAgIGlmIChpc2luZihkdXJhdGlvbigpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNp
b24gODE5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBwbGF0Zm9ybUR1cmF0
aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBwbGF0Zm9ybU1heFRpbWVMb2FkZWQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Mb2FkaW5nTWV0YWRhdGEoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2l6ZUNoYW5nZWQoKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZUNoYW5nZWQo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDb250ZXh0VmlkZW9SZW5kZXJlcigpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVyZXIoKTsKQEAgLTEwOSw3ICsx
MDksOCBAQCBwcml2YXRlOgogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdl
Rm9yVGltZUluUmVjdChmbG9hdCwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgc3RhdGljIENGQXJy
YXlSZWYgbWV0YWRhdGFLZXlOYW1lcygpOworICAgIHN0YXRpYyBjb25zdCBOU0FycmF5KiBhc3Nl
dE1ldGFkYXRhS2V5TmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgTlNBcnJheSogaXRlbUtWT1By
b3BlcnRpZXMoKTsKIAogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBSZXRhaW5QdHI8
QVZBc3NldD4gbV9hdkFzc2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDgxOTg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxNCAr
MTUyLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAg
ICAgbV9hdkFzc2V0ID0gbmlsOwogICAgIH0KICAgICBpZiAobV9hdlBsYXllckl0ZW0pIHsKLSAg
ICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVy
LmdldCgpIGZvcktleVBhdGg6QCJzdGF0dXMiXTsKLSAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdl
dCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJhc3Nl
dCJdOwotICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpj
T2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInRyYWNrcyJdOwotICAgICAgICBbbV9hdlBsYXll
ckl0ZW0uZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0
aDpAInNlZWthYmxlVGltZVJhbmdlcyJdOwotICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkg
cmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImxvYWRlZFRp
bWVSYW5nZXMiXTsKLSAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU9ic2VydmVy
Om1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJwbGF5YmFja0xpa2VseVRvS2VlcFVw
Il07Ci0gICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSByZW1vdmVPYnNlcnZlcjptX29iamNP
YnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicGxheWJhY2tCdWZmZXJGdWxsIl07Ci0gICAgICAg
IFttX2F2UGxheWVySXRlbS5nZXQoKSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBmb3JLZXlQYXRoOkAicGxheWJhY2tCdWZmZXJFbXB0eSJdOworICAgICAgICBjb25zdCBOU0Fy
cmF5ICprZXlzID0gaXRlbUtWT1Byb3BlcnRpZXMoKTsKKyAgICAgICAgZm9yIChOU1N0cmluZyAq
a2V5TmFtZSBpbiBrZXlzKQorICAgICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92
ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6a2V5TmFtZV07CisgICAg
ICAgIAogICAgICAgICBtX2F2UGxheWVySXRlbSA9IG5pbDsKICAgICB9CiAgICAgaWYgKG1fYXZQ
bGF5ZXIpIHsKQEAgLTI2MywxNSArMjU5LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKICAgICAgICAgbV9hdlBsYXllckl0ZW0uYWRvcHROUyhbW0FWUGxheWVy
SXRlbSBhbGxvY10gaW5pdFdpdGhBc3NldDptX2F2QXNzZXQuZ2V0KCldKTsKICAgICAgICAgCiAg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV9vYmpjT2JzZXJ2ZXIuZ2V0KClzZWxlY3RvcjpAc2VsZWN0b3IoZGlkRW5kOikgbmFtZTpBVlBs
YXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9uIG9iamVjdDptX2F2UGxheWVySXRl
bS5nZXQoKV07Ci0gICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBhZGRPYnNlcnZlcjptX29i
amNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAic3RhdHVzIiBvcHRpb25zOm5pbCBjb250ZXh0
Oih2b2lkICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJJ
dGVtXTsKLSAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09i
c2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJhc3NldCIgb3B0aW9uczpuaWwgY29udGV4dDoodm9p
ZCAqKU1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVySXRlbV07
Ci0gICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZl
ci5nZXQoKSBmb3JLZXlQYXRoOkAidHJhY2tzIiBvcHRpb25zOm5pbCBjb250ZXh0Oih2b2lkICop
TWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJJdGVtXTsKLSAg
ICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdl
dCgpIGZvcktleVBhdGg6QCJzZWVrYWJsZVRpbWVSYW5nZXMiIG9wdGlvbnM6bmlsIGNvbnRleHQ6
KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0
ZW1dOwotICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImxvYWRlZFRpbWVSYW5nZXMiIG9wdGlvbnM6bmlsIGNv
bnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBs
YXllckl0ZW1dOwotICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInBsYXliYWNrTGlrZWx5VG9LZWVwVXAiIG9w
dGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0
aW9uQ29udGV4dFBsYXllckl0ZW1dOwotICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRk
T2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInBsYXliYWNrQnVmZmVy
RnVsbCIgb3B0aW9uczpuaWwgY29udGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZGb3VuZGF0aW9u
T2JzZXJ2YXRpb25Db250ZXh0UGxheWVySXRlbV07Ci0gICAgICAgIFttX2F2UGxheWVySXRlbS5n
ZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicGxheWJh
Y2tCdWZmZXJFbXB0eSIgb3B0aW9uczpuaWwgY29udGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZG
b3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVySXRlbV07Ci0gICAgICAgIAorCisgICAg
ICAgIGNvbnN0IE5TQXJyYXkgKmtleXMgPSBpdGVtS1ZPUHJvcGVydGllcygpOworICAgICAgICBm
b3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGtleXMpCisgICAgICAgICAgICBbbV9hdlBsYXllckl0
ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDprZXlO
YW1lIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9i
c2VydmF0aW9uQ29udGV4dFBsYXllckl0ZW1dOworCiAgICAgICAgIFttX2F2UGxheWVyLmdldCgp
IHJlcGxhY2VDdXJyZW50SXRlbVdpdGhQbGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsK
ICAgICB9CiAKQEAgLTI5MCw3ICsyODIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJl
Z2luTG9hZGluZ01ldGFkYXRhKCkKIHsKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5YWJpbGl0eUtub3duKCVwKSAtIHJlcXVlc3RpbmcgbWV0
YWRhdGEgbG9hZGluZyIsIHRoaXMpOwotICAgIFttX2F2QXNzZXQuZ2V0KCkgbG9hZFZhbHVlc0Fz
eW5jaHJvbm91c2x5Rm9yS2V5czpbKE5TQXJyYXkgKiltZXRhZGF0YUtleU5hbWVzKCkgcmV0YWlu
XSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgIFttX2F2QXNzZXQuZ2V0KCkgbG9hZFZhbHVlc0Fz
eW5jaHJvbm91c2x5Rm9yS2V5czpbYXNzZXRNZXRhZGF0YUtleU5hbWVzKCkgcmV0YWluXSBjb21w
bGV0aW9uSGFuZGxlcjpeewogICAgICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgbWV0YWRhdGFM
b2FkZWRdOwogICAgIH1dOwogfQpAQCAtMzU0LDExICszNDYsMTEgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1ldGFE
YXRhQXZhaWxhYmxlKCkpCisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFtX2F2UGxh
eWVySXRlbSkKICAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICAKICAgICBmbG9hdCBkdXJhdGlvbjsK
LSAgICBDTVRpbWUgY21EdXJhdGlvbiA9IFttX2F2QXNzZXQuZ2V0KCkgZHVyYXRpb25dOworICAg
IENNVGltZSBjbUR1cmF0aW9uID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIGR1cmF0aW9uXTsKICAg
ICBpZiAoQ01USU1FX0lTX05VTUVSSUMoY21EdXJhdGlvbikpCiAgICAgICAgIGR1cmF0aW9uID0g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKGNtRHVyYXRpb24pKTsKICAg
ICBlbHNlIGlmIChDTVRJTUVfSVNfSU5ERUZJTklURShjbUR1cmF0aW9uKSkKQEAgLTUwNiw3ICs0
OTgsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OkFWQXNzZXRTCiAgICAgaWYg
KCFtX2F2QXNzZXQpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtu
b3duOwogCi0gICAgTlNBcnJheSAqa2V5cyA9IChOU0FycmF5ICopbWV0YWRhdGFLZXlOYW1lcygp
OworICAgIGNvbnN0IE5TQXJyYXkgKmtleXMgPSBhc3NldE1ldGFkYXRhS2V5TmFtZXMoKTsKICAg
ICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGtleXMpIHsKICAgICAgICAgQVZLZXlWYWx1ZVN0
YXR1cyBrZXlTdGF0dXMgPSBbbV9hdkFzc2V0LmdldCgpIHN0YXR1c09mVmFsdWVGb3JLZXk6a2V5
TmFtZSBlcnJvcjpuaWxdOwogICAgICAgICBpZiAoa2V5U3RhdHVzIDwgQVZLZXlWYWx1ZVN0YXR1
c0xvYWRlZCkKQEAgLTUyNiw3ICs1MTgsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OkFWQXNzZXRTCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFpbnQoY29udGV4dCwgcmVjdCk7CkBAIC01
MzQsNyArNTI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCBj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldERl
bGF5Q2FsbGJhY2tzKHRydWUpOwpAQCAtNjI3LDUxICs2MTksNzcgQEAgZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjp0cmFja3NDaGFuZ2VkKCkKIHsKICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVu
ZXZlciB0aGUgdHJhY2tzIGNvbGxlY3Rpb24gY2hhbmdlcyBzbyBjYWNoZSBoYXNWaWRlbyBhbmQg
aGFzQXVkaW8gc2luY2Ugd2UgZ2V0Ci0gICAgLy8gYXNrZWQgYWJvdXQgdGhvc2UgZmFpcmx5IGZl
cXVlbnRseSwgYW5kIGNhY2hlIHRoZSBuYXR1cmFsIHNpemUgKHNldE5hdHVyYWxTaXplIHdpbGwg
bm90aWZ5IHRoZSBwbGF5ZXIgCi0gICAgLy8gaWYgaXQgaGFzIGNoYW5nZWQpLgorICAgIC8vIGFz
a2VkIGFib3V0IHRob3NlIGZhaXJseSBmZXF1ZW50bHkuCiAgICAgc2V0SGFzVmlkZW8oW1ttX2F2
QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3Rl
cmlzdGljVmlzdWFsXSBjb3VudF0pOwogICAgIHNldEhhc0F1ZGlvKFtbbV9hdkFzc2V0LmdldCgp
IHRyYWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGli
bGVdIGNvdW50XSk7CiAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoW1ttX2F2QXNzZXQuZ2V0KCkg
dHJhY2tzV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dIGNvdW50XSk7CiAK
KyAgICBzaXplQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKK3sKKyAgICBOU0FycmF5ICp0cmFja3MgPSBbbV9hdkFz
c2V0LmdldCgpIHRyYWNrc107CisKKyAgICAvLyBTb21lIGFzc2V0cyBkb24ndCByZXBvcnQgdHJh
Y2sgcHJvcGVydGllcyB1bnRpbCB0aGV5IGFyZSBjb21wbGV0ZWx5IHJlYWR5IHRvIHBsYXksIGJ1
dCB3ZQorICAgIC8vIHdhbnQgdG8gcmVwb3J0IGEgc2l6ZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBz
byB1c2UgcHJlc2VudGF0aW9uU2l6ZSB3aGVuIGFuIGFzc2V0IGhhcyBub3QgdHJhY2tzLgorICAg
IGlmICghW3RyYWNrcyBjb3VudF0pIHsKKyAgICAgICAgc2V0TmF0dXJhbFNpemUoSW50U2l6ZShb
bV9hdlBsYXllckl0ZW0uZ2V0KCkgcHJlc2VudGF0aW9uU2l6ZV0pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIC8vIEFWQXNzZXQncyAnbmF0dXJhbFNpemUnIHByb3BlcnR5IG9ubHkg
Y29uc2lkZXJzIHRoZSBtb3ZpZSdzIGZpcnN0IHZpZGVvIHRyYWNrLCBzbyB3ZSBuZWVkIHRvIGNv
bXB1dGUKICAgICAvLyB0aGUgdW5pb24gb2YgYWxsIHZpc3VhbCB0cmFjayByZWN0cy4KLSAgICBD
R1JlY3QgdHJhY2tSZWN0VW5pb24gPSBDR1JlY3RaZXJvOwotICAgIE5TQXJyYXkgKnRyYWNrcyA9
IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzXTsKKyAgICBDR1JlY3QgdHJhY2tVbmlvblJlY3QgPSBD
R1JlY3RaZXJvOwogICAgIGZvciAoQVZBc3NldFRyYWNrICp0cmFjayBpbiB0cmFja3MpIHsKICAg
ICAgICAgQ0dTaXplIHRyYWNrU2l6ZSA9IFt0cmFjayBuYXR1cmFsU2l6ZV07CiAgICAgICAgIENH
UmVjdCB0cmFja1JlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIHRyYWNrU2l6ZS53aWR0aCwgdHJhY2tT
aXplLmhlaWdodCk7Ci0gICAgICAgIHRyYWNrUmVjdFVuaW9uID0gQ0dSZWN0VW5pb24odHJhY2tS
ZWN0VW5pb24sIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYWNrUmVjdCwgW3RyYWNrIHBy
ZWZlcnJlZFRyYW5zZm9ybV0pKTsKKyAgICAgICAgdHJhY2tVbmlvblJlY3QgPSBDR1JlY3RVbmlv
bih0cmFja1VuaW9uUmVjdCwgQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhY2tSZWN0LCBb
dHJhY2sgcHJlZmVycmVkVHJhbnNmb3JtXSkpOwogICAgIH0KLSAgICAvLyBUaGUgbW92aWUgaXMg
YWx3YXlzIGRpc3BsYXllZCBhdCAwLDAgc28gbW92ZSB0aGUgdHJhY2sgcmVjdCB0byB0aGUgb3Jp
Z2luIGJlZm9yZSB1c2luZyB3aWR0aCBhbmQgaGVpZ2h0LgotICAgIHRyYWNrUmVjdFVuaW9uID0g
Q0dSZWN0T2Zmc2V0KHRyYWNrUmVjdFVuaW9uLCB0cmFja1JlY3RVbmlvbi5vcmlnaW4ueCwgdHJh
Y2tSZWN0VW5pb24ub3JpZ2luLnkpOwotICAgIENHU2l6ZSBuYXR1cmFsU2l6ZSA9IHRyYWNrUmVj
dFVuaW9uLnNpemU7CiAKKyAgICAvLyBUaGUgbW92aWUgaXMgYWx3YXlzIGRpc3BsYXllZCBhdCAw
LDAgc28gbW92ZSB0aGUgdHJhY2sgcmVjdCB0byB0aGUgb3JpZ2luIGJlZm9yZSB1c2luZyB3aWR0
aCBhbmQgaGVpZ2h0LgorICAgIHRyYWNrVW5pb25SZWN0ID0gQ0dSZWN0T2Zmc2V0KHRyYWNrVW5p
b25SZWN0LCB0cmFja1VuaW9uUmVjdC5vcmlnaW4ueCwgdHJhY2tVbmlvblJlY3Qub3JpZ2luLnkp
OworICAgIAogICAgIC8vIEFsc28gbG9vayBhdCB0aGUgYXNzZXQncyBwcmVmZXJyZWQgdHJhbnNm
b3JtIHNvIHdlIGFjY291bnQgZm9yIGEgbW92aWUgbWF0cml4LgotICAgIENHU2l6ZSBtb3ZpZVNp
emUgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShbbV9hdkFzc2V0LmdldCgpIG5hdHVyYWxT
aXplXSwgW21fYXZBc3NldC5nZXQoKSBwcmVmZXJyZWRUcmFuc2Zvcm1dKTsKLSAgICBpZiAobW92
aWVTaXplLndpZHRoID4gbmF0dXJhbFNpemUud2lkdGgpCi0gICAgICAgIG5hdHVyYWxTaXplLndp
ZHRoID0gbW92aWVTaXplLndpZHRoOwotICAgIGlmIChtb3ZpZVNpemUuaGVpZ2h0ID4gbmF0dXJh
bFNpemUuaGVpZ2h0KQotICAgICAgICBuYXR1cmFsU2l6ZS5oZWlnaHQgPSBtb3ZpZVNpemUuaGVp
Z2h0OworICAgIENHU2l6ZSBuYXR1cmFsU2l6ZSA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHRyYWNrVW5pb25SZWN0LnNpemUsIFttX2F2QXNzZXQuZ2V0KCkgcHJlZmVycmVkVHJhbnNmb3Jt
XSk7CisKKyAgICAvLyBDYWNoZSB0aGUgbmF0dXJhbCBzaXplIChzZXROYXR1cmFsU2l6ZSB3aWxs
IG5vdGlmeSB0aGUgcGxheWVyIGlmIGl0IGhhcyBjaGFuZ2VkKS4KICAgICBzZXROYXR1cmFsU2l6
ZShJbnRTaXplKG5hdHVyYWxTaXplKSk7CiB9CiAKLUNGQXJyYXlSZWYgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6bWV0YWRhdGFLZXlOYW1lcygpCitjb25zdCBOU0FycmF5KiBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphc3NldE1ldGFkYXRhS2V5TmFtZXMo
KQogewotICAgIHN0YXRpYyBDRkFycmF5UmVmIGtleXM7Ci0KKyAgICBzdGF0aWMgTlNBcnJheSog
a2V5czsKICAgICBpZiAoIWtleXMpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtleU5hbWVzW10gPSB7IENGU1RSKCJkdXJhdGlvbiIpLAotICAgICAgICAgICAgQ0ZTVFIoIm5h
dHVyYWxTaXplIiksCi0gICAgICAgICAgICBDRlNUUigicHJlZmVycmVkVHJhbnNmb3JtIiksCi0g
ICAgICAgICAgICBDRlNUUigicHJlZmVycmVkVm9sdW1lIiksCi0gICAgICAgICAgICBDRlNUUigi
cHJlZmVycmVkUmF0ZSIpLAotICAgICAgICAgICAgQ0ZTVFIoInBsYXlhYmxlIiksCi0gICAgICAg
ICAgICBDRlNUUigidHJhY2tzIikgfTsKLSAgICAgICAga2V5cyA9IENGQXJyYXlDcmVhdGUoMCwg
KGNvbnN0IHZvaWQqKilrZXlOYW1lcywgc2l6ZW9mKGtleU5hbWVzKSAvIHNpemVvZihrZXlOYW1l
c1swXSksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAgICAgICBrZXlzID0gW1tOU0FycmF5
IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IEAiZHVyYXRpb24iLAorICAgICAgICAgICAgICAgICAg
ICBAIm5hdHVyYWxTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgQCJwcmVmZXJyZWRUcmFuc2Zv
cm0iLAorICAgICAgICAgICAgICAgICAgICBAInByZWZlcnJlZFZvbHVtZSIsCisgICAgICAgICAg
ICAgICAgICAgIEAicHJlZmVycmVkUmF0ZSIsCisgICAgICAgICAgICAgICAgICAgIEAicGxheWFi
bGUiLAorICAgICAgICAgICAgICAgICAgICBAInRyYWNrcyIsCisgICAgICAgICAgICAgICAgICAg
bmlsXTsKICAgICB9CiAgICAgcmV0dXJuIGtleXM7CiB9CiAKK2NvbnN0IE5TQXJyYXkqIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Oml0ZW1LVk9Qcm9wZXJ0aWVzKCkKK3sKKyAg
ICBzdGF0aWMgTlNBcnJheSoga2V5czsKKyAgICBpZiAoIWtleXMpIHsKKyAgICAgICAga2V5cyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBAInByZXNlbnRhdGlvblNpemUiLAor
ICAgICAgICAgICAgICAgIEAic3RhdHVzIiwKKyAgICAgICAgICAgICAgICBAImFzc2V0IiwKKyAg
ICAgICAgICAgICAgICBAInRyYWNrcyIsCisgICAgICAgICAgICAgICAgQCJzZWVrYWJsZVRpbWVS
YW5nZXMiLAorICAgICAgICAgICAgICAgIEAibG9hZGVkVGltZVJhbmdlcyIsCisgICAgICAgICAg
ICAgICAgQCJwbGF5YmFja0xpa2VseVRvS2VlcFVwIiwKKyAgICAgICAgICAgICAgICBAInBsYXli
YWNrQnVmZmVyRnVsbCIsCisgICAgICAgICAgICAgICAgQCJwbGF5YmFja0J1ZmZlckVtcHR5IiwK
KyAgICAgICAgICAgICAgICBuaWxdOworICAgIH0KKyAgICByZXR1cm4ga2V5czsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkBAIC03NDgsNyArNzY2LDkgQEAgLSAodm9pZClvYnNlcnZl
VmFsdWVGb3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgbV9jYWxsYmFjay0+c2NoZWR1
bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
Tm90aWZpY2F0aW9uOjpJdGVtU2Vla2FibGVUaW1lUmFuZ2VzQ2hhbmdlZCk7CiAgICAgICAgIGVs
c2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInRyYWNrcyJdKQogICAgICAgICAgICAg
bV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtVHJhY2tzQ2hhbmdlZCk7Ci0gICAg
ICAgIAorICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwcmVzZW50
YXRpb25TaXplIl0pCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWRO
b3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246
Okl0ZW1QcmVzZW50YXRpb25TaXplQ2hhbmdlZCk7CisKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAo=
</data>
<flag name="review"
          id="79570"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>