<?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>233350</bug_id>
          
          <creation_ts>2021-11-18 19:38:24 -0800</creation_ts>
          <short_desc>Add support for web app manifest icons in WebKit/UI Process layer</short_desc>
          <delta_ts>2023-05-07 20:09:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>233602</blocked>
    
    <blocked>256438</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>hi</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>rginsberg</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1816729</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-18 19:38:24 -0800</bug_when>
    <thetext>Various icon features were added to WebCore in Bug 231339. This change threads these concepts through the WebKit layer so they can be accessed by WKWebView clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816733</commentid>
    <comment_count>1</comment_count>
      <attachid>444775</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-18 19:57:35 -0800</bug_when>
    <thetext>Created attachment 444775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816734</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-18 19:58:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/84311569&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816856</commentid>
    <comment_count>3</comment_count>
      <attachid>444775</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-19 07:27:12 -0800</bug_when>
    <thetext>Comment on attachment 444775
Patch

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

r=me

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:56
&gt; +static NSArray&lt;NSNumber *&gt; *fromPurposes(const OptionSet&lt;WebCore::ApplicationManifest::Icon::Purpose&gt;&amp; purposes)

An OptionSet is just an integer, we should pass it by value.

Also, this function should probably return a RetainPtr&lt;NSArray&lt;NSNumber *&gt;&gt;. The call site can call .autorelease() if needed.

&gt; Tools/TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:168
&gt; +        EXPECT_TRUE(testIndex &lt; value.size());

Could use EXPECT_LT()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816891</commentid>
    <comment_count>4</comment_count>
      <attachid>444775</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-19 09:24:17 -0800</bug_when>
    <thetext>Comment on attachment 444775
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:56
&gt;&gt; +static NSArray&lt;NSNumber *&gt; *fromPurposes(const OptionSet&lt;WebCore::ApplicationManifest::Icon::Purpose&gt;&amp; purposes)
&gt; 
&gt; An OptionSet is just an integer, we should pass it by value.
&gt; 
&gt; Also, this function should probably return a RetainPtr&lt;NSArray&lt;NSNumber *&gt;&gt;. The call site can call .autorelease() if needed.

Sounds good -- will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816893</commentid>
    <comment_count>5</comment_count>
      <attachid>444775</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-11-19 09:27:57 -0800</bug_when>
    <thetext>Comment on attachment 444775
Patch

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

The leaks/over-releases need to be fixed before landing this.  You can do that and use Chris&apos; r+ if desired.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:56
&gt;&gt; +static NSArray&lt;NSNumber *&gt; *fromPurposes(const OptionSet&lt;WebCore::ApplicationManifest::Icon::Purpose&gt;&amp; purposes)
&gt; 
&gt; An OptionSet is just an integer, we should pass it by value.
&gt; 
&gt; Also, this function should probably return a RetainPtr&lt;NSArray&lt;NSNumber *&gt;&gt;. The call site can call .autorelease() if needed.

+1 to return RetainPtr&lt;&gt; here to avoid the autorelease().

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:60
&gt; +        [purposeArray addObject:[NSNumber numberWithUnsignedChar:static_cast&lt;uint8_t&gt;(purpose)]];

Could probably use OptionSet&lt;WebCore::ApplicationManifest::Icon::Purpose&gt;::StorageType  instead of uint8_t here since Purpose is also defined as a uint8_t.

Could also use std::underlying_type&lt;WebCore::ApplicationManifest::Icon::Purpose&gt; instead of uint8_t.

Not required to land the patch.  Also, the first pattern is not used anywhere else--I just now realized it may be possible.  The second pattern is used in a couple places.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:69
&gt; +    _WKApplicationManifestIcon *icon = arrayElement;

This should be:

        auto icon = dynamic_objc_cast&lt;_WKApplicationManifestIcon&gt;(arrayElement);
        if (!icon)
            return std::nullopt;

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:94
&gt; +    _src = [coder decodeObjectOfClass:[NSString class] forKey:@&quot;src&quot;];
&gt; +    _sizes = [coder decodeObjectOfClasses:[NSSet setWithArray:@[[NSArray class], [NSString class]]] forKey:@&quot;sizes&quot;];
&gt; +    _type = [coder decodeObjectOfClass:[NSString class] forKey:@&quot;type&quot;];
&gt; +    _purposes = [coder decodeObjectOfClasses:[NSSet setWithArray:@[[NSArray class], [NSString class]]] forKey:@&quot;purposes&quot;];

These will all be over-released once -dealloc method is fixed, or if any setter is used.  (If WebKit was built with ARC enabled, no changes would be required unless you wanted to enforce the &quot;copy&quot; @property attribute.)

You need to either add a -copy call to every one (to implement the @property attribute of `copy`), OR you need to use `self.src =`, `self.sizes =`, etc. to set the values.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:105
&gt; +        _src = icon-&gt;src;

This needs to use -copy, OR use `self.src =`.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:108
&gt; +        _sizes = createNSArray(icon-&gt;sizes, [] (auto&amp; size) -&gt; NSString * {
&gt; +            return size;
&gt; +        }).leakRef();

This is okay as-is.

However, if you change all of them to `self.sizes =`, you need to use .get() instead of .leakRef() here.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:109
&gt; +        _type = icon-&gt;type;

This needs to use -copy, OR use `self.type =`.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:110
&gt; +        _purposes = fromPurposes(icon-&gt;purposes);

Change to .leakRef() if `fromPurposes()` returns a RetainPtr&lt;&gt;, OR change to use`self.purposes =` and .get().

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:121
&gt; +    [coder encodeObject:self.src forKey:@&quot;src&quot;];
&gt; +    [coder encodeObject:self.sizes forKey:@&quot;sizes&quot;];
&gt; +    [coder encodeObject:self.type forKey:@&quot;type&quot;];
&gt; +    [coder encodeObject:self.purposes forKey:@&quot;purposes&quot;];

This will be more efficient if you use _src, _sizes, _type, _purposes here with (or without) ARC.

Without ARC, you also force each of these objects to be autoreleased by calling its getter.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:130
&gt; +- (void)dealloc
&gt; +{
&gt; +    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=232959
&gt; +    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKApplicationManifestIcon.class, self))
&gt; +        return;
&gt; +    [super dealloc];
&gt; +}

The following code is missing and must be added to release the properties with &quot;copy&quot; attributes:

        [_src release];
        [_sizes release];
        [_type release];
        [_purposes release];

If you didn&apos;t fix the -init methods to properly retain the values, this would not crash most of the time, unless any setter was called to set new values.

Under ARC, none of the -release calls would be necessary.  (I&apos;m trying to show why switching to ARC will save you a lot of grief.)

Note that the clang static analyzer (if you&apos;re patient enough to run it for all of WebKit) would catch this issue (and some of the others).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816909</commentid>
    <comment_count>6</comment_count>
      <attachid>444832</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-19 10:22:42 -0800</bug_when>
    <thetext>Created attachment 444832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816976</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-19 13:21:02 -0800</bug_when>
    <thetext>Committed r286073 (244460@main): &lt;https://commits.webkit.org/244460@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444832.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818504</commentid>
    <comment_count>8</comment_count>
      <attachid>444832</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-11-29 15:23:37 -0800</bug_when>
    <thetext>Comment on attachment 444832
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:96
&gt; +    _purposes = [[coder decodeObjectOfClasses:[NSSet setWithArray:@[[NSArray class], [NSString class]]] forKey:@&quot;purposes&quot;] copy];

Should this be `@[[NSArray class], [NSNumber class]]`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818510</commentid>
    <comment_count>9</comment_count>
      <attachid>444832</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-29 15:39:34 -0800</bug_when>
    <thetext>Comment on attachment 444832
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:96
&gt;&gt; +    _purposes = [[coder decodeObjectOfClasses:[NSSet setWithArray:@[[NSArray class], [NSString class]]] forKey:@&quot;purposes&quot;] copy];
&gt; 
&gt; Should this be `@[[NSArray class], [NSNumber class]]`?

I think you are correct. I&apos;ll file a bug to correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818513</commentid>
    <comment_count>10</comment_count>
      <attachid>444832</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-29 15:43:41 -0800</bug_when>
    <thetext>Comment on attachment 444832
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:96
&gt;&gt;&gt; +    _purposes = [[coder decodeObjectOfClasses:[NSSet setWithArray:@[[NSArray class], [NSString class]]] forKey:@&quot;purposes&quot;] copy];
&gt;&gt; 
&gt;&gt; Should this be `@[[NSArray class], [NSNumber class]]`?
&gt; 
&gt; I think you are correct. I&apos;ll file a bug to correct.

See Bug 233602.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1946213</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2023-04-03 09:13:29 -0700</bug_when>
    <thetext>*** Bug 232959 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444775</attachid>
            <date>2021-11-18 19:57:35 -0800</date>
            <delta_ts>2021-11-19 10:22:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233350-20211118195734.patch</filename>
            <type>text/plain</type>
            <size>21756</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZmNGYxOTJkOGIwZTVh
ZTVlYmMxNWQ4NmU0YjE4MWMxNTNkMTE2ZC4uNTEyM2Y4ODJhOTgyMDAzNzBlMWJhMGY2MWRjYjZh
MDExMTFlN2IxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTExLTE4ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zIGluIFdlYktpdC9VSSBQcm9jZXNzIGxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzNTAKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzg0MzExNTY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYnVpbGRzIG9uIHRoZSB3b3JrIGluIEJ1
ZyAyMzEzMzkgYW5kIHRocmVhZHMgdGhlIG5ldyBpY29ucworICAgICAgICBmZWF0dXJlIHRocm91
Z2ggdGhlIFdlYktpdCBsYXllci4KKworICAgICAgICBUaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUg
cGFyc2VyIHRvIHJlcHJlc2VudCB0aGUgJ3NpemVzJyBtZW1iZXIgb2YgdGhlCisgICAgICAgIGlj
b24gYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgcmF0aGVyIHRoYW4gYSBzaW5nbGUgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlCisgICAgICAgIHNpemVzIGFzIGEgc2V0IG9mIHNwYWNlLXNlcGFyYXRlZCBp
dGVtcy4gVGhpcyBtb3JlIGNsb3Nlc2x5IG1hdGNoZXMgdGhlCisgICAgICAgIGJlaGF2aW9yIG9m
IHRoZSBXZWJLaXQgQVBJIGxheWVyLgorCisgICAgICAgIFRlc3RlZCBieSBUZXN0V2ViS2l0QVBJ
LgorCisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFu
aWZlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyOjpwYXJzZUljb25zKToKKwogMjAyMS0xMS0xMiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMaWJdIERldmVsb3BlciBidWlsZCB3
aXRoIHJlbGVhc2UgbG9ncyBkaXNhYmxlZCBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2MjJiNTNmNWExN2Qz
NTFjNThiNTFlOWVmNTZjNGRjYTUwNzAzODg2Li5mZmZjYmRkMDI1ZTQ5M2YwZmZlYzU5Y2I4YmFm
MjA2NmQ5ZTJiNzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTExLTE4ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zIGluIFdlYktpdC9VSSBQcm9jZXNzIGxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzNTAKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzg0MzExNTY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYnVpbGRzIG9uIHRoZSB3b3JrIGluIEJ1
ZyAyMzEzMzkgYW5kIHRocmVhZHMgdGhlIG5ldyBpY29ucworICAgICAgICBmZWF0dXJlIHRocm91
Z2ggdGhlIFdlYktpdCBsYXllci4KKworICAgICAgICBOb3RlOiBUaGlzIGNoYW5nZSBhbHNvIG1v
dmVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbgorICAg
ICAgICBlYXJsaWVyIGluIHRoZSBmaWxlIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVk
ZWQgZm9yIHByb3BlciBzZXJpYWxpemF0aW9uCisgICAgICAgIG9mIHRoZSBfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0LgorCisgICAgICAgIFRlc3RlZCBieSBUZXN0V2ViS2l0QVBJIChBcHBsaWNhdGlv
bk1hbmlmZXN0Lkljb25zKSB0ZXN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBcHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tOgorICAgICAgICAoZnJvbVB1cnBvc2VzKTogTmV3IGhl
bHBlciBmdW5jdGlvbi4KKyAgICAgICAgKG1ha2VWZWN0b3JFbGVtZW50KTogRGl0dG8uCisgICAg
ICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uIGluaXRXaXRoQ29kZXI6XSk6IFVwZGF0
ZWQgdG8gY2FsbCBwcm9wZXIKKyAgICAgICAgc2VyaWFsaXphdGlvbiBtZXRob2RzLgorICAgICAg
ICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBpbml0V2l0aENvcmVJY29uOl0pOiBBZGRl
ZC4KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENvZGVyOl0pOiBV
cGRhdGVkIHRvIHByb3Blcmx5IGhhbmRsZQorICAgICAgICBzZXJpYWxpemluZyB0aGUgb2JqZWN0
LgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGljb25zXSk6IEFkZGVkLgorCiAy
MDIxLTExLTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRGlz
YWJsZSBnZXRVc2VyTWVkaWEoKSB3aGVuIGluIENhcHRpdmUgUG9ydGFsIE1vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IDY3NTE4YTkzZTA5YTA3ODNhZWFhMTA3NDQwMjg0
NzczYTdmZDgyNTcuLjczMDI1NTk3ZDdlNGUxOTcxYTg5NmE0MzRhNjkxY2E3YzA2MjAwNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlv
bm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHN0cnVjdCBBcHBs
aWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgfTsKIAogICAgICAgICBVUkwgc3JjOwotICAgICAg
ICBTdHJpbmcgc2l6ZXM7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNpemVzOwogICAgICAgICBT
dHJpbmcgdHlwZTsKICAgICAgICAgT3B0aW9uU2V0PFB1cnBvc2U+IHB1cnBvc2VzOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0
aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggMDQzMjhlNTNl
OTJmZGVjNTlhZGU1YmU0OTY1N2FkMzY4YzU3OGUxZi4uMTA1M2UwNTM3YmJjMDNhYzVkNTY0MTJk
YTExODdmMmZhNTVkM2VmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMTMsNyArMjEzLDcgQEAgVmVjdG9yPEFwcGxpY2F0aW9uTWFuaWZlc3Q6Oklj
b24+IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlSWNvbnMoY29uc3QgSlMKICAgICAg
ICAgfQogICAgICAgICBjdXJyZW50SWNvbi5zcmMgPSBzcmNVUkw7CiAKLSAgICAgICAgY3VycmVu
dEljb24uc2l6ZXMgPSBwYXJzZUdlbmVyaWNTdHJpbmcoaWNvbkpTT04sICJzaXplcyJfcyk7Cisg
ICAgICAgIGN1cnJlbnRJY29uLnNpemVzID0gcGFyc2VHZW5lcmljU3RyaW5nKGljb25KU09OLCAi
c2l6ZXMiX3MpLnNwbGl0KCcgJyk7CiAKICAgICAgICAgY3VycmVudEljb24udHlwZSA9IHBhcnNl
R2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInR5cGUiX3MpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaApp
bmRleCAyZWRmMGVkY2FmNWZkOTJlYzAwYmI5NTgyYTdiZWU2MTk5YjYxZjA2Li4wOGQyOTlmY2I3
Yzg4MTUyM2E5NzM0OGFjMmI5ZmNjNTVjYTZhYWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcs
NyArNTcsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSkK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIE5TVVJMICpz
Y29wZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVUkwgKnN0YXJ0
VVJMOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0RGlzcGxheU1vZGUgZGlzcGxheU1vZGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TQXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKj4gKmljb25zIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVz
dEljb24gKj4gKmljb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBVSUNvbG9yICp0aGVtZUNvbG9yIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDE1LjApKTsKQEAgLTcxLDcgKzcxLDEyIEBAIFdLX0NMQVNTX0FWQUlMQUJM
RShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKQogCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24gOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+Ci0vLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQorCitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICpzcmM7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnNpemVzOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqdHlwZTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxOU051bWJlciAqPiAqcHVycG9zZXM7CisKIEBl
bmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCmluZGV4IDAw
Y2ZiNDgwMjUxNDM5NmI5YjdiNWEyNDliYzk5NGNhMDIyZDYxMzguLjNjMDg0OGFlZTA4OTRiMjli
ZTE1MzZhY2Q0ZTJlNjhjMTZjZTlhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JD
b2NvYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2lt
cG9ydCAiVUlLaXRTUEkuaCIKQEAgLTQxLDE3ICs0Miw5NiBAQAogI2ltcG9ydCAiQXBwS2l0U1BJ
LmgiCiAjZW5kaWYKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25N
YW5pZmVzdDo6SWNvbj4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6QXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbiosIGlkIGFycmF5RWxlbWVudCkKK3N0YXRpYyBPcHRpb25TZXQ8V2Vi
Q29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gZnJvbVB1cnBvc2VzKE5T
QXJyYXk8TlNOdW1iZXIgKj4gKnB1cnBvc2VzKQoreworICAgIE9wdGlvblNldDxXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBwdXJwb3NlU2V0OworICAgIGZvciAo
TlNOdW1iZXIgKnB1cnBvc2VOdW1iZXIgaW4gcHVycG9zZXMpIHsKKyAgICAgICAgYXV0byBwdXJw
b3NlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVy
cG9zZT4ocHVycG9zZU51bWJlci5pbnRlZ2VyVmFsdWUpOworICAgICAgICBwdXJwb3NlU2V0LmFk
ZChwdXJwb3NlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHVycG9zZVNldDsKK30KKworc3RhdGlj
IE5TQXJyYXk8TlNOdW1iZXIgKj4gKmZyb21QdXJwb3Nlcyhjb25zdCBPcHRpb25TZXQ8V2ViQ29y
ZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4mIHB1cnBvc2VzKQogeworICAg
IGF1dG8gcHVycG9zZUFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7CisgICAgZm9yIChhdXRvIHB1cnBvc2UgOiBwdXJwb3NlcykKKyAgICAgICAgW3B1cnBvc2VB
cnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZENoYXI6c3RhdGljX2Nh
c3Q8dWludDhfdD4ocHVycG9zZSldXTsKKyAgICByZXR1cm4gcHVycG9zZUFycmF5LmF1dG9yZWxl
YXNlKCk7Cit9CiAKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3Q6Okljb24+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb24qLCBpZCBhcnJheUVsZW1lbnQpCit7CiAgICAgaWYgKCFbYXJyYXlFbGVt
ZW50IGlzS2luZE9mQ2xhc3M6IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uLmNsYXNzXSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAorICAgIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
Y29uICppY29uID0gYXJyYXlFbGVtZW50OworICAgIAogICAgIHJldHVybiBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5NTkKKyAgICAgICAgaWNvbi5zcmMsCisgICAg
ICAgIG1ha2VWZWN0b3I8U3RyaW5nPihpY29uLnNpemVzKSwKKyAgICAgICAgaWNvbi50eXBlLAor
ICAgICAgICBmcm9tUHVycG9zZXMoaWNvbi5wdXJwb3NlcykKICAgICB9OwogfQogCitAaW1wbGVt
ZW50YXRpb24gX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24KKworKyAoQk9PTClzdXBwb3J0c1Nl
Y3VyZUNvZGluZworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICBpZiAoIShzZWxmID0gW3NlbGYgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3NyYyA9IFtjb2RlciBkZWNvZGVPYmpl
Y3RPZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAic3JjIl07CisgICAgX3NpemVzID0g
W2NvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFycmF5OkBbW05TQXJy
YXkgY2xhc3NdLCBbTlNTdHJpbmcgY2xhc3NdXV0gZm9yS2V5OkAic2l6ZXMiXTsKKyAgICBfdHlw
ZSA9IFtjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAi
dHlwZSJdOworICAgIF9wdXJwb3NlcyA9IFtjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6W05T
U2V0IHNldFdpdGhBcnJheTpAW1tOU0FycmF5IGNsYXNzXSwgW05TU3RyaW5nIGNsYXNzXV1dIGZv
cktleTpAInB1cnBvc2VzIl07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29yZUljb246KGNvbnN0IFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb24gKilpY29uCit7CisgICAgaWYgKCEoc2VsZiA9IFtbX1dLQXBwbGljYXRpb25NYW5pZmVz
dEljb24gYWxsb2NdIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChpY29u
KSB7CisgICAgICAgIF9zcmMgPSBpY29uLT5zcmM7CisgICAgICAgIF9zaXplcyA9IGNyZWF0ZU5T
QXJyYXkoaWNvbi0+c2l6ZXMsIFtdIChhdXRvJiBzaXplKSAtPiBOU1N0cmluZyAqIHsKKyAgICAg
ICAgICAgIHJldHVybiBzaXplOworICAgICAgICB9KS5sZWFrUmVmKCk7CisgICAgICAgIF90eXBl
ID0gaWNvbi0+dHlwZTsKKyAgICAgICAgX3B1cnBvc2VzID0gZnJvbVB1cnBvc2VzKGljb24tPnB1
cnBvc2VzKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCllbmNvZGVX
aXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgoreworICAgIFtjb2RlciBlbmNvZGVPYmplY3Q6c2Vs
Zi5zcmMgZm9yS2V5OkAic3JjIl07CisgICAgW2NvZGVyIGVuY29kZU9iamVjdDpzZWxmLnNpemVz
IGZvcktleTpAInNpemVzIl07CisgICAgW2NvZGVyIGVuY29kZU9iamVjdDpzZWxmLnR5cGUgZm9y
S2V5OkAidHlwZSJdOworICAgIFtjb2RlciBlbmNvZGVPYmplY3Q6c2VsZi5wdXJwb3NlcyBmb3JL
ZXk6QCJwdXJwb3NlcyJdOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQorICAgIGlmIChX
ZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblJ1bkxvb3AoX1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24uY2xhc3MsIHNlbGYpKQorICAgICAgICByZXR1cm47CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCitAZW5kCisKKyAgICAKIEBpbXBsZW1lbnRhdGlvbiBfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0CiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCkBAIC02MywyNCAr
MTQzLDI0IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb24+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0CiAKIC0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvZGVyOihOU0NvZGVyICopYURlY29kZXIKIHsKLSAgICBOU1N0cmluZyAqbmFtZSA9IFth
RGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAibmFt
ZSJdOwotICAgIE5TU3RyaW5nICpzaG9ydE5hbWUgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdIGZvcktleTpAInNob3J0X25hbWUiXTsKLSAgICBOU1N0cmlu
ZyAqZGVzY3JpcHRpb24gPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdIGZvcktleTpAImRlc2NyaXB0aW9uIl07Ci0gICAgTlNVUkwgKnNjb3BlVVJMID0gW2FE
ZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzY29wZSJd
OworICAgIFN0cmluZyBuYW1lID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXSBmb3JLZXk6QCJuYW1lIl07CisgICAgU3RyaW5nIHNob3J0TmFtZSA9IFthRGVj
b2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAic2hvcnRf
bmFtZSJdOworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RP
ZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAiZGVzY3JpcHRpb24iXTsKKyAgICBVUkwg
c2NvcGVVUkwgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZv
cktleTpAInNjb3BlIl07CiAgICAgTlNJbnRlZ2VyIGRpc3BsYXkgPSBbYURlY29kZXIgZGVjb2Rl
SW50ZWdlckZvcktleTpAImRpc3BsYXkiXTsKLSAgICBOU1VSTCAqc3RhcnRVUkwgPSBbYURlY29k
ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZvcktleTpAInN0YXJ0X3VybCJd
OworICAgIFVSTCBzdGFydFVSTCA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1VS
TCBjbGFzc10gZm9yS2V5OkAic3RhcnRfdXJsIl07CiAgICAgQ29jb2FDb2xvciAqdGhlbWVDb2xv
ciA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltDb2NvYUNvbG9yIGNsYXNzXSBmb3JL
ZXk6QCJ0aGVtZV9jb2xvciJdOwogICAgIE5TQXJyYXk8X1dLQXBwbGljYXRpb25NYW5pZmVzdElj
b24gKj4gKmljb25zID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0
V2l0aEFycmF5OkBbW05TQXJyYXkgY2xhc3NdLCBbX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24g
Y2xhc3NdXV0gZm9yS2V5OkAiaWNvbnMiXTsKIAogICAgIFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3QgY29yZUFwcGxpY2F0aW9uTWFuaWZlc3QgewotICAgICAgICBXVEY6OlN0cmluZyhuYW1l
KSwKLSAgICAgICAgV1RGOjpTdHJpbmcoc2hvcnROYW1lKSwKLSAgICAgICAgV1RGOjpTdHJpbmco
ZGVzY3JpcHRpb24pLAotICAgICAgICBVUkwoc2NvcGVVUkwpLAorICAgICAgICBXVEZNb3ZlKG5h
bWUpLAorICAgICAgICBXVEZNb3ZlKHNob3J0TmFtZSksCisgICAgICAgIFdURk1vdmUoZGVzY3Jp
cHRpb24pLAorICAgICAgICBXVEZNb3ZlKHNjb3BlVVJMKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheT4oZGlzcGxheSksCi0gICAgICAg
IFVSTChzdGFydFVSTCksCisgICAgICAgIFdURk1vdmUoc3RhcnRVUkwpLAogICAgICAgICBXZWJD
b3JlOjpyb3VuZEFuZENsYW1wVG9TUkdCQUxvc3N5KHRoZW1lQ29sb3IuQ0dDb2xvciksCi0gICAg
ICAgIFZlY3RvcjxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihtYWtlVmVjdG9y
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+KGljb25zKSksCisgICAgICAgIG1h
a2VWZWN0b3I8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4oaWNvbnMpLAogICAg
IH07CiAKICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6QXBwbGljYXRp
b25NYW5pZmVzdD4oc2VsZiwgV1RGTW92ZShjb3JlQXBwbGljYXRpb25NYW5pZmVzdCkpOwpAQCAt
MTc0LDggKzI1NCw5IEBAIHN0YXRpYyBOU1N0cmluZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBX
VEY6OlN0cmluZyYgc3RyaW5nKQogCiAtIChOU0FycmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJ
Y29uICo+ICopaWNvbnMKIHsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMjk1OQotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoX2FwcGxpY2F0aW9uTWFuaWZlc3QtPmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5pY29u
cywgW10gKGF1dG8mIGNvcmVJY29uKSAtPiBpZCB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtb
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gYWxsb2NdIGluaXRXaXRoQ29yZUljb246JmNvcmVJ
Y29uXSkuYXV0b3JlbGVhc2UoKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAjZWxzZSAv
LyBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCkBAIC0yNDMsMzQgKzMyNCwzIEBAIHN0YXRp
YyBOU1N0cmluZyAqbnVsbGFibGVOU1N0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQog
I2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKIAogQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24KLQotKyAoQk9PTClzdXBwb3J0c1Nl
Y3VyZUNvZGluZwotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvZGVyOihOU0NvZGVyICopYURlY29kZXIKLXsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQotICAgIFVOVVNFRF9QQVJBTShh
RGVjb2Rlcik7Ci0gICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
dm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKilhQ29kZXIKLXsKLSAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQotICAgIFVOVVNF
RF9QQVJBTShhQ29kZXIpOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk1OQotICAgIGlmIChX
ZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblJ1bkxvb3AoX1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24uY2xhc3MsIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0gICAgW3N1cGVyIGRl
YWxsb2NdOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZDE1YzA5OGY4MjgzZGUxMzUzYWI4ZTU3MWU2YzQ0MWE3NWMxZmE5Yy4u
YzgzM2M1N2M4M2RjMzlhMTM3MGMxNzRiYjVhMWRhZTIxNWNlOWY4ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIx
LTExLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zIGluIFdlYktpdC9VSSBQcm9jZXNz
IGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzMzNTAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg0MzExNTY5PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBBUEkgdGVzdCB0byBl
eGVyY2lzZSB0aGUgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gQVBJLiAKKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cDoKKyAgICAgICAgKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0Ojp0ZXN0SWNvbnNTaXpl
cyk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorCiAyMDIxLTExLTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgRGlzYWJsZSBnZXRVc2VyTWVkaWEoKSB3aGVuIGluIENhcHRpdmUgUG9ydGFsIE1v
ZGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA3MmNlNzU1OTA0M2ViMzcxYTE4
Njk2ZGNmMjUyMjllOWVmZjAwNjZhLi5hZjdhMjFiYjA0M2Y4YmIyODU5Y2ZiZGUzNDMyZTgwMzYx
MTdhMzdkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MCwxMSArMTYwLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEo
KSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgdm9pZCB0ZXN0SWNvbnNTaXpl
cyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkKKyAg
ICB2b2lkIHRlc3RJY29uc1NpemVzKGNvbnN0IFN0cmluZyAmcmF3SlNPTiwgc2l6ZV90IGV4cGVj
dGVkQ291bnQsIHNpemVfdCB0ZXN0SW5kZXgsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWYWx1ZSkK
ICAgICB7CiAgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZUljb25GaXJzdFRvcExldmVsUHJv
cGVydHkoInNpemVzIiwgcmF3SlNPTik7CiAgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5p
Y29uc1swXS5zaXplczsKLSAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgp
LmRhdGEoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEVYUEVDVF9FUShleHBlY3Rl
ZENvdW50LCB2YWx1ZS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXN0SW5kZXggPCB2
YWx1ZS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRWYWx1ZS51dGY4KCku
ZGF0YSgpLCB2YWx1ZVt0ZXN0SW5kZXhdLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHZv
aWQgdGVzdEljb25zUHVycG9zZXMoY29uc3QgU3RyaW5nICZyYXdKU09OLCBPcHRpb25TZXQ8QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gZXhwZWN0ZWRWYWx1ZXMpCkBAIC0zNjgs
OCArMzcwLDkgQEAgVEVTVF9GKEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXJUZXN0LCBJY29ucykK
ICAgICBVUkwgc3JjVVJMID0geyB7IH0sICJodHRwczovL2V4YW1wbGUuY29tL2ljb24uanBnIiB9
OwogICAgIHRlc3RJY29uc1NyYygiXCJpY29uLmpwZ1wiIiwgc3JjVVJMKTsKICAgICB0ZXN0SWNv
bnNUeXBlKCJcImltYWdlL3dlYnBcIiIsICJpbWFnZS93ZWJwIik7Ci0gICAgdGVzdEljb25zU2l6
ZXMoIlwiMjU2eDI1NlwiIiwgIjI1NngyNTYiKTsKLSAgICB0ZXN0SWNvbnNTaXplcygiXCI3Mng3
MiA5Nng5NlwiIiwgIjcyeDcyIDk2eDk2Iik7CisgICAgdGVzdEljb25zU2l6ZXMoIlwiMjU2eDI1
NlwiIiwgMSwgMCwgIjI1NngyNTYiKTsKKyAgICB0ZXN0SWNvbnNTaXplcygiXCI3Mng3MiA5Nng5
NlwiIiwgMiwgMCwgIjcyeDcyIik7CisgICAgdGVzdEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZc
IiIsIDIsIDEsICI5Nng5NiIpOwogCiAgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6
Okljb246OlB1cnBvc2U+IHB1cnBvc2VBbnkgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQ
dXJwb3NlOjpBbnkgfTsKICAgICBPcHRpb25TZXQ8QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6
UHVycG9zZT4gcHVycG9zZU1vbm9jaHJvbWUgeyBBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQ
dXJwb3NlOjpNb25vY2hyb21lIH07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KaW5kZXggYzliZjhj
ZDAxZTU2YWI5ZWEzMzM0ODA4NTFjYzVjNTQ0OWUzNmUyYy4uOGU2NWI1ZDAwYjFhMTEzZjA1Mzlm
MzBlMTRjMmQ1MGVkODkxMDI0YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzgsNiArMjc4
LDg5IEBAIFRFU1QoQXBwbGljYXRpb25NYW5pZmVzdCwgQmxvY2tlZCkKICAgICBVdGlsOjpydW4o
JmRvbmUpOwogfQogCitURVNUKEFwcGxpY2F0aW9uTWFuaWZlc3QsIEljb25zKQoreworICAgIHN0
YXRpYyBib29sIGRvbmUgPSBmYWxzZTsKKworICAgIE5TQXJyYXkgKmV4cGVjdGVkSWNvbnMgPSBA
WyBAeworICAgICAgICBAInNyYyI6IEAiaHR0cHM6Ly9leGFtcGxlLmNvbS9pbWFnZXMvdG91Y2gv
aG9tZXNjcmVlbjMyLnBuZyIsCisgICAgICAgIEAic2l6ZXMiOiBAIjMyeDMyIiwKKyAgICAgICAg
QCJ0eXBlIjogQCJpbWFnZS9wbmciCisgICAgfSwgQHsKKyAgICAgICAgQCJzcmMiOiBAImh0dHBz
Oi8vZXhhbXBsZS5jb20vaW1hZ2VzL3RvdWNoL2hvbWVzY3JlZW40OC5wbmciLAorICAgICAgICBA
InNpemVzIjogQCI0OHg0OCIsCisgICAgICAgIEAidHlwZSI6IEAiaW1hZ2UvcG5nIiwKKyAgICAg
ICAgQCJwdXJwb3NlIjogQCJtb25vY2hyb21lIG1hc2thYmxlIgorICAgIH0sIEB7CisgICAgICAg
IEAic3JjIjogQCJodHRwczovL2V4YW1wbGUuY29tL2ltYWdlcy90b3VjaC9ob21lc2NyZWVuMTI4
LmpwZyIsCisgICAgICAgIEAic2l6ZXMiOiBAIjk2eDk2IDEyOHgxMjgiLAorICAgICAgICBAInR5
cGUiOiBAImltYWdlL2pwZyIsCisgICAgICAgIEAicHVycG9zZSI6IEAibW9ub2Nocm9tZSIKKyAg
ICB9XTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICBOU0RpY3Rpb25hcnkgKm1hbmlmZXN0
T2JqZWN0ID0gQHsKKyAgICAgICAgQCJuYW1lIjogQCJBIFdlYiBBcHBsaWNhdGlvbiIsCisgICAg
ICAgIEAic2hvcnRfbmFtZSI6IEAiV2ViQXBwIiwKKyAgICAgICAgQCJkZXNjcmlwdGlvbiI6IEAi
SGVsbG8uIiwKKyAgICAgICAgQCJzdGFydF91cmwiOiBAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAv
c3RhcnQiLAorICAgICAgICBAInNjb3BlIjogQCJodHRwOi8vZXhhbXBsZS5jb20vYXBwIiwKKyAg
ICAgICAgQCJ0aGVtZV9jb2xvciI6IEAicmVkIiwKKyAgICAgICAgQCJpY29ucyI6IGV4cGVjdGVk
SWNvbnMKKyAgICB9OworICAgIE5TU3RyaW5nICpodG1sU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCI8bGluayByZWw9XCJtYW5pZmVzdFwiIGhyZWY9XCJkYXRhOnRleHQvcGxh
aW47Y2hhcnNldD11dGYtODtiYXNlNjQsJUBcIj4iLCBbW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0
YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0T2JqZWN0IG9wdGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2
NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXV07CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJp
bmc6aHRtbFN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V4YW1w
bGUuY29tL2FwcC9pbmRleCJdXTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNo
TmF2aWdhdGlvbl07CisgICAgW3dlYlZpZXcgX2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XihfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICptYW5pZmVzdCkgeworICAg
ICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3QubmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBIFdlYiBB
cHBsaWNhdGlvbiJdKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW21hbmlmZXN0LnNob3J0TmFtZSBp
c0VxdWFsVG9TdHJpbmc6QCJXZWJBcHAiXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFttYW5pZmVz
dC5hcHBsaWNhdGlvbkRlc2NyaXB0aW9uIGlzRXF1YWxUb1N0cmluZzpAIkhlbGxvLiJdKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoW21hbmlmZXN0LnN0YXJ0VVJMIGlzRXF1YWw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwOi8vZXhhbXBsZS5jb20vYXBwL3N0YXJ0Il1dKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoW21hbmlmZXN0LnNjb3BlIGlzRXF1YWw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vZXhhbXBsZS5jb20vYXBwIl1dKTsKKworICAgICAgICBhdXRvIHNSR0JDb2xvclNwYWNl
ID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikp
OworICAgICAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xv
clNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
Q0dDb2xvckVxdWFsVG9Db2xvcihtYW5pZmVzdC50aGVtZUNvbG9yLkNHQ29sb3IsIHJlZENvbG9y
LmdldCgpKSk7CisKKyAgICAgICAgc2l6ZV90IGljb25JbmRleCA9IDA7CisgICAgICAgIGZvciAo
X1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24gKmljb24gaW4gbWFuaWZlc3QuaWNvbnMpIHsKKyAg
ICAgICAgICAgIE5TRGljdGlvbmFyeSAqZXhwZWN0ZWRJY29uID0gZXhwZWN0ZWRJY29uc1tpY29u
SW5kZXhdOworICAgICAgICAgICAgTlNTdHJpbmcgKmV4cGVjdGVkVVJMU3RyaW5nID0gW2V4cGVj
dGVkSWNvbiBvYmplY3RGb3JLZXk6QCJzcmMiXTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtp
Y29uLnNyYyBpc0VxdWFsOltOU1VSTCBVUkxXaXRoU3RyaW5nOmV4cGVjdGVkVVJMU3RyaW5nXV0p
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW2ljb24udHlwZSBpc0VxdWFsOltleHBlY3RlZElj
b24gb2JqZWN0Rm9yS2V5OkAidHlwZSJdXSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaWNvbklu
ZGV4KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGlj
b24uc2l6ZXMuY291bnQsIDF1bCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW2ljb24u
c2l6ZXNbMF0gaXNFcXVhbDpbZXhwZWN0ZWRJY29uIG9iamVjdEZvcktleTpAInNpemVzIl1dKTsK
KyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaWNvbi5wdXJwb3Nlcy5jb3VudCwgMXVsKTsKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfRVEoaWNvbi5wdXJwb3Nlc1swXS51bnNpZ25lZExvbmdWYWx1
ZSwgMXVsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpY29uLnNpemVzLmNvdW50LCAxdWwpOworICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKFtpY29uLnNpemVzWzBdIGlzRXF1YWw6W2V4cGVjdGVkSWNv
biBvYmplY3RGb3JLZXk6QCJzaXplcyJdXSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGlj
b24ucHVycG9zZXMuY291bnQsIDJ1bCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGljb24u
cHVycG9zZXNbMF0udW5zaWduZWRMb25nVmFsdWUsIDJ1bCk7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX0VRKGljb24ucHVycG9zZXNbMV0udW5zaWduZWRMb25nVmFsdWUsIDR1bCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBF
WFBFQ1RfRVEoaWNvbi5zaXplcy5jb3VudCwgMnVsKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShbaWNvbi5zaXplc1swXSBpc0VxdWFsOkAiOTZ4OTYiXSk7CisgICAgICAgICAgICAgICAg
RVhQRUNUX1RSVUUoW2ljb24uc2l6ZXNbMV0gaXNFcXVhbDpAIjEyOHgxMjgiXSk7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKGljb24ucHVycG9zZXMuY291bnQsIDF1bCk7CisgICAgICAgICAg
ICAgICAgRVhQRUNUX0VRKGljb24ucHVycG9zZXNbMF0udW5zaWduZWRMb25nVmFsdWUsIDJ1bCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICsr
aWNvbkluZGV4OworICAgICAgICB9CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFV0aWw6OnJ1bigmZG9uZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAog
I2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444832</attachid>
            <date>2021-11-19 10:22:42 -0800</date>
            <delta_ts>2021-11-19 13:21:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233350-20211119102241.patch</filename>
            <type>text/plain</type>
            <size>22027</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE4MmFjNGRhOTVjNjc2
MGNiM2E3YzM1NjU1ODM5NzBlZDAyZjcyNS4uYTBhMzc1ZDA1ZmI0N2RhYjI5NDk5ZGU2OTY1M2Iy
YzM5MjJjNTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTExLTE5ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB3ZWIgYXBwIG1hbmlmZXN0IGljb25zIGluIFdlYktpdC9VSSBQcm9jZXNzIGxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMzNTAKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzg0MzExNTY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlz
IER1bWV6LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYnVpbGRzIG9uIHRoZSB3b3JrIGluIEJ1ZyAy
MzEzMzkgYW5kIHRocmVhZHMgdGhlIG5ldyBpY29ucworICAgICAgICBmZWF0dXJlIHRocm91Z2gg
dGhlIFdlYktpdCBsYXllci4KKworICAgICAgICBUaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgcGFy
c2VyIHRvIHJlcHJlc2VudCB0aGUgJ3NpemVzJyBtZW1iZXIgb2YgdGhlCisgICAgICAgIGljb24g
YXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgcmF0aGVyIHRoYW4gYSBzaW5nbGUgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlCisgICAgICAgIHNpemVzIGFzIGEgc2V0IG9mIHNwYWNlLXNlcGFyYXRlZCBpdGVt
cy4gVGhpcyBtb3JlIGNsb3Nlc2x5IG1hdGNoZXMgdGhlCisgICAgICAgIGJlaGF2aW9yIG9mIHRo
ZSBXZWJLaXQgQVBJIGxheWVyLgorCisgICAgICAgIFRlc3RlZCBieSBUZXN0V2ViS2l0QVBJLgor
CisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZl
c3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZUljb25zKToKKwogMjAyMS0xMS0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBDYXNjYWRlIExheWVyc10gW0RlYnVnXSBBU1NF
UlRJT04gRkFJTEVEOiBtX2NoaWxkUnVsZXMuaXNFbXB0eSgpIHdoZW4gdXNpbmcgQGltcG9ydCB3
aXRoIGxheWVyIG5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTk0OGUxOGFmMjk5YzY5N2Q0NzdhMmNiMTQxMjNk
OTdiMDY5OGQyOS4uZDYyMjU5ZTA5YmY1ZTE1Yzc3OGFhY2YwYmQ1YWRlZTZiZTUwYTMxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAyMS0xMS0xOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igd2ViIGFwcCBtYW5pZmVz
dCBpY29ucyBpbiBXZWJLaXQvVUkgUHJvY2VzcyBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMzUwCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS84NDMxMTU2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICBUaGlzIHBhdGNoIGJ1aWxkcyBvbiB0aGUgd29yayBpbiBCdWcgMjMxMzM5IGFuZCB0aHJlYWRz
IHRoZSBuZXcgaWNvbnMKKyAgICAgICAgZmVhdHVyZSB0aHJvdWdoIHRoZSBXZWJLaXQgbGF5ZXIu
CisKKyAgICAgICAgTm90ZTogVGhpcyBjaGFuZ2UgYWxzbyBtb3ZlcyB0aGUgaW1wbGVtZW50YXRp
b24gb2YgX1dLQXBwbGljYXRpb25NYW5pZmVzdEljb24KKyAgICAgICAgZWFybGllciBpbiB0aGUg
ZmlsZSBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgbmVlZGVkIGZvciBwcm9wZXIgc2VyaWFs
aXphdGlvbgorICAgICAgICBvZiB0aGUgX1dLQXBwbGljYXRpb25NYW5pZmVzdC4KKworICAgICAg
ICBUZXN0ZWQgYnkgVGVzdFdlYktpdEFQSSAoQXBwbGljYXRpb25NYW5pZmVzdC5JY29ucykgdGVz
dC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVz
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVz
dC5tbToKKyAgICAgICAgKGZyb21QdXJwb3Nlcyk6IE5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgIChtYWtlVmVjdG9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0SWNvbiBpbml0V2l0aENvZGVyOl0pOiBVcGRhdGVkIHRvIGNhbGwgcHJvcGVyCisg
ICAgICAgIHNlcmlhbGl6YXRpb24gbWV0aG9kcy4KKyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24gaW5pdFdpdGhDb3JlSWNvbjpdKTogQWRkZWQuCisgICAgICAgICgtW19XS0Fw
cGxpY2F0aW9uTWFuaWZlc3QgaW5pdFdpdGhDb2RlcjpdKTogVXBkYXRlZCB0byBwcm9wZXJseSBo
YW5kbGUKKyAgICAgICAgc2VyaWFsaXppbmcgdGhlIG9iamVjdC4KKyAgICAgICAgKC1bX1dLQXBw
bGljYXRpb25NYW5pZmVzdCBpY29uc10pOiBBZGRlZC4KKwogMjAyMS0xMS0xOCAgQW50b2luZSBR
dWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTW9kZWxdIGFkZCBzdXBwb3J0
IGZvciBwYXVzaW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9u
TWFuaWZlc3QuaAppbmRleCA2NzUxOGE5M2UwOWEwNzgzYWVhYTEwNzQ0MDI4NDc3M2E3ZmQ4MjU3
Li43MzAyNTU5N2Q3ZTRlMTk3MWE4OTZhNDM0YTY5MWNhN2MwNjIwMDQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5p
ZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9B
cHBsaWNhdGlvbk1hbmlmZXN0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBzdHJ1Y3QgQXBwbGljYXRpb25NYW5p
ZmVzdCB7CiAgICAgICAgIH07CiAKICAgICAgICAgVVJMIHNyYzsKLSAgICAgICAgU3RyaW5nIHNp
emVzOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzaXplczsKICAgICAgICAgU3RyaW5nIHR5cGU7
CiAgICAgICAgIE9wdGlvblNldDxQdXJwb3NlPiBwdXJwb3NlczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0
L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IDA0MzI4ZTUzZTkyZmRlYzU5YWRl
NWJlNDk2NTdhZDM2OGM1NzhlMWYuLjEwNTNlMDUzN2JiYzAzYWM1ZDU2NDEyZGExMTg3ZjJmYTU1
ZDNlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5p
ZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjEzLDcgKzIxMyw3IEBAIFZlY3RvcjxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBBcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZUljb25zKGNvbnN0IEpTCiAgICAgICAgIH0KICAgICAg
ICAgY3VycmVudEljb24uc3JjID0gc3JjVVJMOwogCi0gICAgICAgIGN1cnJlbnRJY29uLnNpemVz
ID0gcGFyc2VHZW5lcmljU3RyaW5nKGljb25KU09OLCAic2l6ZXMiX3MpOworICAgICAgICBjdXJy
ZW50SWNvbi5zaXplcyA9IHBhcnNlR2VuZXJpY1N0cmluZyhpY29uSlNPTiwgInNpemVzIl9zKS5z
cGxpdCgnICcpOwogCiAgICAgICAgIGN1cnJlbnRJY29uLnR5cGUgPSBwYXJzZUdlbmVyaWNTdHJp
bmcoaWNvbkpTT04sICJ0eXBlIl9zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggMmVkZjBl
ZGNhZjVmZDkyZWMwMGJiOTU4MmE3YmVlNjE5OWI2MWYwNi4uMDhkMjk5ZmNiN2M4ODE1MjNhOTcz
NDhhYzJiOWZjYzU1Y2E2YWFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAg
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBOU1VSTCAqc2NvcGU7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICpzdGFydFVSTDsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlN
b2RlIGRpc3BsYXlNb2RlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5
PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICppY29ucyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5LCBjb3B5KSBOU0FycmF5PF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uICo+ICpp
Y29ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBudWxsYWJsZSwgY29weSkgVUlDb2xvciAqdGhlbWVDb2xvciBXS19BUElfQVZBSUxBQkxFKGlv
cygxNS4wKSk7CkBAIC03MSw3ICs3MSwxMiBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCksIGlvcygxMS4zKSkKIAogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29u
IDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgotLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5NTkKKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5LCBjb3B5KSBOU1VSTCAqc3JjOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU0FycmF5PE5TU3RyaW5nICo+ICpzaXplczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnR5cGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnB1cnBvc2VzOworCiBAZW5kCiAKIE5TX0FT
U1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQppbmRleCAwMGNmYjQ4MDI1MTQz
OTZiOWI3YjVhMjQ5YmM5OTRjYTAyMmQ2MTM4Li5mNTI2YzJhOWI1ZTVjZDk1NGU2Zjk5YTMwMjU3
OTE0N2EyZmMxMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yQ29jb2EuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0
U1BJLmgiCkBAIC00MSwxNyArNDIsMTAzIEBACiAjaW1wb3J0ICJBcHBLaXRTUEkuaCIKICNlbmRp
ZgogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJ
Y29uPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
OjpJY29uKiwgaWQgYXJyYXlFbGVtZW50KQorc3RhdGljIE9wdGlvblNldDxXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPiBmcm9tUHVycG9zZXMoTlNBcnJheTxOU051
bWJlciAqPiAqcHVycG9zZXMpCit7CisgICAgT3B0aW9uU2V0PFdlYkNvcmU6OkFwcGxpY2F0aW9u
TWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBvc2VTZXQ7CisgICAgZm9yIChOU051bWJlciAq
cHVycG9zZU51bWJlciBpbiBwdXJwb3NlcykgeworICAgICAgICBhdXRvIHB1cnBvc2UgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3NlPihwdXJw
b3NlTnVtYmVyLmludGVnZXJWYWx1ZSk7CisgICAgICAgIHB1cnBvc2VTZXQuYWRkKHB1cnBvc2Up
OworICAgIH0KKworICAgIHJldHVybiBwdXJwb3NlU2V0OworfQorCitzdGF0aWMgUmV0YWluUHRy
PE5TQXJyYXk8TlNOdW1iZXIgKj4+IGZyb21QdXJwb3NlcyhPcHRpb25TZXQ8V2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZT4gcHVycG9zZXMpCiB7CisgICAgYXV0byBw
dXJwb3NlQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAg
ICBmb3IgKGF1dG8gcHVycG9zZSA6IHB1cnBvc2VzKQorICAgICAgICBbcHVycG9zZUFycmF5IGFk
ZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkQ2hhcjpzdGF0aWNfY2FzdDxzdGQ6
OnVuZGVybHlpbmdfdHlwZTxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJw
b3NlPjo6dHlwZT4ocHVycG9zZSldXTsKKyAgICByZXR1cm4gcHVycG9zZUFycmF5OworfQogCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPiBt
YWtlVmVjdG9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29u
KiwgaWQgYXJyYXlFbGVtZW50KQorewogICAgIGlmICghW2FycmF5RWxlbWVudCBpc0tpbmRPZkNs
YXNzOiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzc10pCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKKyAgICBhdXRvIGljb24gPSBkeW5hbWljX29iamNfY2FzdDxfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbj4oYXJyYXlFbGVtZW50KTsKKyAgICBpZiAoIWljb24pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICByZXR1cm4gV2ViQ29yZTo6QXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5CisgICAgICAgIGljb24uc3JjLAorICAgICAgICBt
YWtlVmVjdG9yPFN0cmluZz4oaWNvbi5zaXplcyksCisgICAgICAgIGljb24udHlwZSwKKyAgICAg
ICAgZnJvbVB1cnBvc2VzKGljb24ucHVycG9zZXMpCiAgICAgfTsKIH0KIAorQGltcGxlbWVudGF0
aW9uIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJY29uCisKKysgKEJPT0wpc3VwcG9ydHNTZWN1cmVD
b2RpbmcKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b2RlcjooTlNDb2RlciAqKWNvZGVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzZWxmIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9zcmMgPSBbW2NvZGVyIGRlY29kZU9iamVjdE9m
Q2xhc3M6W05TU3RyaW5nIGNsYXNzXSBmb3JLZXk6QCJzcmMiXSBjb3B5XTsKKyAgICBfc2l6ZXMg
PSBbW2NvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFycmF5OkBbW05T
QXJyYXkgY2xhc3NdLCBbTlNTdHJpbmcgY2xhc3NdXV0gZm9yS2V5OkAic2l6ZXMiXSBjb3B5XTsK
KyAgICBfdHlwZSA9IFtbY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
IGZvcktleTpAInR5cGUiXSBjb3B5XTsKKyAgICBfcHVycG9zZXMgPSBbW2NvZGVyIGRlY29kZU9i
amVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0aEFycmF5OkBbW05TQXJyYXkgY2xhc3NdLCBbTlNT
dHJpbmcgY2xhc3NdXV0gZm9yS2V5OkAicHVycG9zZXMiXSBjb3B5XTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb3JlSWNvbjooY29uc3QgV2ViQ29y
ZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbiAqKWljb24KK3sKKyAgICBpZiAoIShzZWxmID0g
W1tfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBhbGxvY10gaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgaWYgKGljb24pIHsKKyAgICAgICAgX3NyYyA9IFtpY29uLT5zcmMgY29w
eV07CisgICAgICAgIF9zaXplcyA9IGNyZWF0ZU5TQXJyYXkoaWNvbi0+c2l6ZXMsIFtdIChhdXRv
JiBzaXplKSAtPiBOU1N0cmluZyAqIHsKKyAgICAgICAgICAgIHJldHVybiBzaXplOworICAgICAg
ICB9KS5sZWFrUmVmKCk7CisgICAgICAgIF90eXBlID0gW2ljb24tPnR5cGUgY29weV07CisgICAg
ICAgIF9wdXJwb3NlcyA9IGZyb21QdXJwb3NlcyhpY29uLT5wdXJwb3NlcykubGVha1JlZigpOwor
ICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWVuY29kZVdpdGhDb2Rlcjoo
TlNDb2RlciAqKWNvZGVyCit7CisgICAgW2NvZGVyIGVuY29kZU9iamVjdDpfc3JjIGZvcktleTpA
InNyYyJdOworICAgIFtjb2RlciBlbmNvZGVPYmplY3Q6X3NpemVzIGZvcktleTpAInNpemVzIl07
CisgICAgW2NvZGVyIGVuY29kZU9iamVjdDpfdHlwZSBmb3JLZXk6QCJ0eXBlIl07CisgICAgW2Nv
ZGVyIGVuY29kZU9iamVjdDpfcHVycG9zZXMgZm9yS2V5OkAicHVycG9zZXMiXTsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25N
YWluUnVuTG9vcChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzcywgc2VsZikpCisgICAg
ICAgIHJldHVybjsKKworICAgIFtfc3JjIHJlbGVhc2VdOworICAgIFtfc2l6ZXMgcmVsZWFzZV07
CisgICAgW190eXBlIHJlbGVhc2VdOworICAgIFtfcHVycG9zZXMgcmVsZWFzZV07CisKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworICAgIAogQGltcGxlbWVudGF0aW9uIF9XS0Fw
cGxpY2F0aW9uTWFuaWZlc3QKIAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKQEAg
LTYzLDI0ICsxNTAsMjQgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRp
b25NYW5pZmVzdDo6SWNvbj4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QKIAogLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2RlcgogewotICAgIE5TU3RyaW5nICpu
YW1lID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXSBmb3JL
ZXk6QCJuYW1lIl07Ci0gICAgTlNTdHJpbmcgKnNob3J0TmFtZSA9IFthRGVjb2RlciBkZWNvZGVP
YmplY3RPZkNsYXNzOltOU1N0cmluZyBjbGFzc10gZm9yS2V5OkAic2hvcnRfbmFtZSJdOwotICAg
IE5TU3RyaW5nICpkZXNjcmlwdGlvbiA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltO
U1N0cmluZyBjbGFzc10gZm9yS2V5OkAiZGVzY3JpcHRpb24iXTsKLSAgICBOU1VSTCAqc2NvcGVV
UkwgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNVUkwgY2xhc3NdIGZvcktleTpA
InNjb3BlIl07CisgICAgU3RyaW5nIG5hbWUgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFz
czpbTlNTdHJpbmcgY2xhc3NdIGZvcktleTpAIm5hbWUiXTsKKyAgICBTdHJpbmcgc2hvcnROYW1l
ID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXSBmb3JLZXk6
QCJzaG9ydF9uYW1lIl07CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gW2FEZWNvZGVyIGRlY29k
ZU9iamVjdE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXSBmb3JLZXk6QCJkZXNjcmlwdGlvbiJdOwor
ICAgIFVSTCBzY29wZVVSTCA9IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1VSTCBj
bGFzc10gZm9yS2V5OkAic2NvcGUiXTsKICAgICBOU0ludGVnZXIgZGlzcGxheSA9IFthRGVjb2Rl
ciBkZWNvZGVJbnRlZ2VyRm9yS2V5OkAiZGlzcGxheSJdOwotICAgIE5TVVJMICpzdGFydFVSTCA9
IFthRGVjb2RlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU1VSTCBjbGFzc10gZm9yS2V5OkAic3Rh
cnRfdXJsIl07CisgICAgVVJMIHN0YXJ0VVJMID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xh
c3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzdGFydF91cmwiXTsKICAgICBDb2NvYUNvbG9yICp0
aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W0NvY29hQ29sb3IgY2xh
c3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07CiAgICAgTlNBcnJheTxfV0tBcHBsaWNhdGlvbk1h
bmlmZXN0SWNvbiAqPiAqaWNvbnMgPSBbYURlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOltO
U1NldCBzZXRXaXRoQXJyYXk6QFtbTlNBcnJheSBjbGFzc10sIFtfV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0SWNvbiBjbGFzc11dXSBmb3JLZXk6QCJpY29ucyJdOwogCiAgICAgV2ViQ29yZTo6QXBwbGlj
YXRpb25NYW5pZmVzdCBjb3JlQXBwbGljYXRpb25NYW5pZmVzdCB7Ci0gICAgICAgIFdURjo6U3Ry
aW5nKG5hbWUpLAotICAgICAgICBXVEY6OlN0cmluZyhzaG9ydE5hbWUpLAotICAgICAgICBXVEY6
OlN0cmluZyhkZXNjcmlwdGlvbiksCi0gICAgICAgIFVSTChzY29wZVVSTCksCisgICAgICAgIFdU
Rk1vdmUobmFtZSksCisgICAgICAgIFdURk1vdmUoc2hvcnROYW1lKSwKKyAgICAgICAgV1RGTW92
ZShkZXNjcmlwdGlvbiksCisgICAgICAgIFdURk1vdmUoc2NvcGVVUkwpLAogICAgICAgICBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNwbGF5KSwK
LSAgICAgICAgVVJMKHN0YXJ0VVJMKSwKKyAgICAgICAgV1RGTW92ZShzdGFydFVSTCksCiAgICAg
ICAgIFdlYkNvcmU6OnJvdW5kQW5kQ2xhbXBUb1NSR0JBTG9zc3kodGhlbWVDb2xvci5DR0NvbG9y
KSwKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb24+KG1h
a2VWZWN0b3I8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbj4oaWNvbnMpKSwKKyAg
ICAgICAgbWFrZVZlY3RvcjxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uPihpY29u
cyksCiAgICAgfTsKIAogICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpB
cHBsaWNhdGlvbk1hbmlmZXN0PihzZWxmLCBXVEZNb3ZlKGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0
KSk7CkBAIC0xNzQsOCArMjYxLDkgQEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5n
KGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiAKIC0gKE5TQXJyYXk8X1dLQXBwbGljYXRpb25N
YW5pZmVzdEljb24gKj4gKilpY29ucwogewotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5Ci0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1
cm4gY3JlYXRlTlNBcnJheShfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBwbGljYXRpb25NYW5pZmVz
dCgpLmljb25zLCBbXSAoYXV0byYgY29yZUljb24pIC0+IGlkIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0TlMoW1tfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBhbGxvY10gaW5pdFdpdGhDb3JlSWNv
bjomY29yZUljb25dKS5hdXRvcmVsZWFzZSgpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAK
ICNlbHNlIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKQEAgLTI0MywzNCArMzMxLDMg
QEAgc3RhdGljIE5TU3RyaW5nICpudWxsYWJsZU5TU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBz
dHJpbmcpCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCiBAZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbgotCi0rIChCT09MKXN1
cHBvcnRzU2VjdXJlQ29kaW5nCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilhRGVjb2RlcgotewotICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5Ci0gICAgVU5VU0VE
X1BBUkFNKGFEZWNvZGVyKTsKLSAgICBbc2VsZiByZWxlYXNlXTsKLSAgICByZXR1cm4gbmlsOwot
fQotCi0tICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWFDb2RlcgotewotICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5Ci0g
ICAgVU5VU0VEX1BBUkFNKGFDb2Rlcik7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTU5Ci0g
ICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluUnVuTG9vcChfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0SWNvbi5jbGFzcywgc2VsZikpCi0gICAgICAgIHJldHVybjsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YTNmZGE0MDE0YjJiYWFmOWQzM2U2NmE0ZWU0ZDgwMTU2
ZGVjN2E4Li5kM2FkNWM3Zjg2OGExMjk3ZjRjN2Y5MDUzYzA0NTdlZGQ1MmIzOGI5IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMjEtMTEtMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIHdlYiBhcHAgbWFuaWZlc3QgaWNvbnMgaW4gV2ViS2l0L1VJ
IFByb2Nlc3MgbGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMzM1MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODQzMTE1Njk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgQWRkIGEgbmV3IEFQSSB0ZXN0
IHRvIGV4ZXJjaXNlIHRoZSBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SWNvbiBBUEkuIAorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXIuY3BwOgorICAgICAgICAoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3Q6OnRlc3RJY29u
c1NpemVzKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjEtMTEtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW2ExMXldIEFkZCBpbXBsZW1lbnRhdGlvbiBv
ZiBkb2N1bWVudCBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHAKaW5kZXggNzJjZTc1NTkwNDNlYjM3MWExODY5NmRjZjI1MjI5ZTll
ZmYwMDY2YS4uYWY3YTIxYmIwNDNmOGJiMjg1OWNmYmRlMzQzMmU4MDM2MTE3YTM3ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsMTEgKzE2MCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnV0Zjgo
KS5kYXRhKCkpOwogICAgIH0KIAotICAgIHZvaWQgdGVzdEljb25zU2l6ZXMoY29uc3QgU3RyaW5n
ICZyYXdKU09OLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmFsdWUpCisgICAgdm9pZCB0ZXN0SWNv
bnNTaXplcyhjb25zdCBTdHJpbmcgJnJhd0pTT04sIHNpemVfdCBleHBlY3RlZENvdW50LCBzaXpl
X3QgdGVzdEluZGV4LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmFsdWUpCiAgICAgewogICAgICAg
ICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VJY29uRmlyc3RUb3BMZXZlbFByb3BlcnR5KCJzaXplcyIs
IHJhd0pTT04pOwogICAgICAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuaWNvbnNbMF0uc2l6ZXM7
Ci0gICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFZhbHVlLnV0ZjgoKS5kYXRhKCksIHZhbHVl
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRDb3VudCwgdmFsdWUu
c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVzdEluZGV4IDwgdmFsdWUuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkVmFsdWUudXRmOCgpLmRhdGEoKSwgdmFsdWVb
dGVzdEluZGV4XS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICB2b2lkIHRlc3RJY29uc1B1
cnBvc2VzKGNvbnN0IFN0cmluZyAmcmF3SlNPTiwgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZl
c3Q6Okljb246OlB1cnBvc2U+IGV4cGVjdGVkVmFsdWVzKQpAQCAtMzY4LDggKzM3MCw5IEBAIFRF
U1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgSWNvbnMpCiAgICAgVVJMIHNyY1VS
TCA9IHsgeyB9LCAiaHR0cHM6Ly9leGFtcGxlLmNvbS9pY29uLmpwZyIgfTsKICAgICB0ZXN0SWNv
bnNTcmMoIlwiaWNvbi5qcGdcIiIsIHNyY1VSTCk7CiAgICAgdGVzdEljb25zVHlwZSgiXCJpbWFn
ZS93ZWJwXCIiLCAiaW1hZ2Uvd2VicCIpOwotICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZc
IiIsICIyNTZ4MjU2Iik7Ci0gICAgdGVzdEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsICI3
Mng3MiA5Nng5NiIpOworICAgIHRlc3RJY29uc1NpemVzKCJcIjI1NngyNTZcIiIsIDEsIDAsICIy
NTZ4MjU2Iik7CisgICAgdGVzdEljb25zU2l6ZXMoIlwiNzJ4NzIgOTZ4OTZcIiIsIDIsIDAsICI3
Mng3MiIpOworICAgIHRlc3RJY29uc1NpemVzKCJcIjcyeDcyIDk2eDk2XCIiLCAyLCAxLCAiOTZ4
OTYiKTsKIAogICAgIE9wdGlvblNldDxBcHBsaWNhdGlvbk1hbmlmZXN0OjpJY29uOjpQdXJwb3Nl
PiBwdXJwb3NlQW55IHsgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6QW55IH07
CiAgICAgT3B0aW9uU2V0PEFwcGxpY2F0aW9uTWFuaWZlc3Q6Okljb246OlB1cnBvc2U+IHB1cnBv
c2VNb25vY2hyb21lIHsgQXBwbGljYXRpb25NYW5pZmVzdDo6SWNvbjo6UHVycG9zZTo6TW9ub2No
cm9tZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCmluZGV4IGM5YmY4Y2QwMWU1NmFiOWVhMzMz
NDgwODUxY2M1YzU0NDllMzZlMmMuLjhlNjViNWQwMGIxYTExM2YwNTM5ZjMwZTE0YzJkNTBlZDg5
MTAyNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
QXBwbGljYXRpb25NYW5pZmVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc4LDYgKzI3OCw4OSBAQCBURVNUKEFw
cGxpY2F0aW9uTWFuaWZlc3QsIEJsb2NrZWQpCiAgICAgVXRpbDo6cnVuKCZkb25lKTsKIH0KIAor
VEVTVChBcHBsaWNhdGlvbk1hbmlmZXN0LCBJY29ucykKK3sKKyAgICBzdGF0aWMgYm9vbCBkb25l
ID0gZmFsc2U7CisKKyAgICBOU0FycmF5ICpleHBlY3RlZEljb25zID0gQFsgQHsKKyAgICAgICAg
QCJzcmMiOiBAImh0dHBzOi8vZXhhbXBsZS5jb20vaW1hZ2VzL3RvdWNoL2hvbWVzY3JlZW4zMi5w
bmciLAorICAgICAgICBAInNpemVzIjogQCIzMngzMiIsCisgICAgICAgIEAidHlwZSI6IEAiaW1h
Z2UvcG5nIgorICAgIH0sIEB7CisgICAgICAgIEAic3JjIjogQCJodHRwczovL2V4YW1wbGUuY29t
L2ltYWdlcy90b3VjaC9ob21lc2NyZWVuNDgucG5nIiwKKyAgICAgICAgQCJzaXplcyI6IEAiNDh4
NDgiLAorICAgICAgICBAInR5cGUiOiBAImltYWdlL3BuZyIsCisgICAgICAgIEAicHVycG9zZSI6
IEAibW9ub2Nocm9tZSBtYXNrYWJsZSIKKyAgICB9LCBAeworICAgICAgICBAInNyYyI6IEAiaHR0
cHM6Ly9leGFtcGxlLmNvbS9pbWFnZXMvdG91Y2gvaG9tZXNjcmVlbjEyOC5qcGciLAorICAgICAg
ICBAInNpemVzIjogQCI5Nng5NiAxMjh4MTI4IiwKKyAgICAgICAgQCJ0eXBlIjogQCJpbWFnZS9q
cGciLAorICAgICAgICBAInB1cnBvc2UiOiBAIm1vbm9jaHJvbWUiCisgICAgfV07CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU1plcm9SZWN0XSk7CisgICAgTlNEaWN0aW9uYXJ5ICptYW5pZmVzdE9iamVjdCA9IEB7Cisg
ICAgICAgIEAibmFtZSI6IEAiQSBXZWIgQXBwbGljYXRpb24iLAorICAgICAgICBAInNob3J0X25h
bWUiOiBAIldlYkFwcCIsCisgICAgICAgIEAiZGVzY3JpcHRpb24iOiBAIkhlbGxvLiIsCisgICAg
ICAgIEAic3RhcnRfdXJsIjogQCJodHRwOi8vZXhhbXBsZS5jb20vYXBwL3N0YXJ0IiwKKyAgICAg
ICAgQCJzY29wZSI6IEAiaHR0cDovL2V4YW1wbGUuY29tL2FwcCIsCisgICAgICAgIEAidGhlbWVf
Y29sb3IiOiBAInJlZCIsCisgICAgICAgIEAiaWNvbnMiOiBleHBlY3RlZEljb25zCisgICAgfTsK
KyAgICBOU1N0cmluZyAqaHRtbFN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
PGxpbmsgcmVsPVwibWFuaWZlc3RcIiBocmVmPVwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm
LTg7YmFzZTY0LCVAXCI+IiwgW1tOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVj
dDptYW5pZmVzdE9iamVjdCBvcHRpb25zOjAgZXJyb3I6bmlsXSBiYXNlNjRFbmNvZGVkU3RyaW5n
V2l0aE9wdGlvbnM6MF1dOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmh0bWxTdHJpbmcg
YmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAvaW5k
ZXgiXV07CisgICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwor
ICAgIFt3ZWJWaWV3IF9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVy
Ol4oX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqbWFuaWZlc3QpIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUoW21hbmlmZXN0Lm5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQSBXZWIgQXBwbGljYXRpb24iXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFttYW5pZmVzdC5zaG9ydE5hbWUgaXNFcXVhbFRvU3RyaW5n
OkAiV2ViQXBwIl0pOworICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3QuYXBwbGljYXRpb25E
ZXNjcmlwdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJIZWxsby4iXSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKFttYW5pZmVzdC5zdGFydFVSTCBpc0VxdWFsOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cDovL2V4YW1wbGUuY29tL2FwcC9zdGFydCJdXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFttYW5p
ZmVzdC5zY29wZSBpc0VxdWFsOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V4YW1wbGUu
Y29tL2FwcCJdXSk7CisKKyAgICAgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAgICAgICAgYXV0
byByZWRDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwg
cmVkQ29sb3JDb21wb25lbnRzKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRv
Q29sb3IobWFuaWZlc3QudGhlbWVDb2xvci5DR0NvbG9yLCByZWRDb2xvci5nZXQoKSkpOworCisg
ICAgICAgIHNpemVfdCBpY29uSW5kZXggPSAwOworICAgICAgICBmb3IgKF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3RJY29uICppY29uIGluIG1hbmlmZXN0Lmljb25zKSB7CisgICAgICAgICAgICBOU0Rp
Y3Rpb25hcnkgKmV4cGVjdGVkSWNvbiA9IGV4cGVjdGVkSWNvbnNbaWNvbkluZGV4XTsKKyAgICAg
ICAgICAgIE5TU3RyaW5nICpleHBlY3RlZFVSTFN0cmluZyA9IFtleHBlY3RlZEljb24gb2JqZWN0
Rm9yS2V5OkAic3JjIl07CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbaWNvbi5zcmMgaXNFcXVh
bDpbTlNVUkwgVVJMV2l0aFN0cmluZzpleHBlY3RlZFVSTFN0cmluZ11dKTsKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFtpY29uLnR5cGUgaXNFcXVhbDpbZXhwZWN0ZWRJY29uIG9iamVjdEZvcktl
eTpAInR5cGUiXV0pOworCisgICAgICAgICAgICBzd2l0Y2ggKGljb25JbmRleCkgeworICAgICAg
ICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpY29uLnNpemVzLmNvdW50
LCAxdWwpOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtpY29uLnNpemVzWzBdIGlzRXF1
YWw6W2V4cGVjdGVkSWNvbiBvYmplY3RGb3JLZXk6QCJzaXplcyJdXSk7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX0VRKGljb24ucHVycG9zZXMuY291bnQsIDF1bCk7CisgICAgICAgICAgICAgICAg
RVhQRUNUX0VRKGljb24ucHVycG9zZXNbMF0udW5zaWduZWRMb25nVmFsdWUsIDF1bCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfRVEoaWNvbi5zaXplcy5jb3VudCwgMXVsKTsKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShbaWNvbi5zaXplc1swXSBpc0VxdWFsOltleHBlY3RlZEljb24gb2JqZWN0Rm9yS2V5
OkAic2l6ZXMiXV0pOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpY29uLnB1cnBvc2VzLmNv
dW50LCAydWwpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpY29uLnB1cnBvc2VzWzBdLnVu
c2lnbmVkTG9uZ1ZhbHVlLCAydWwpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpY29uLnB1
cnBvc2VzWzFdLnVuc2lnbmVkTG9uZ1ZhbHVlLCA0dWwpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGljb24u
c2l6ZXMuY291bnQsIDJ1bCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW2ljb24uc2l6
ZXNbMF0gaXNFcXVhbDpAIjk2eDk2Il0pOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtp
Y29uLnNpemVzWzFdIGlzRXF1YWw6QCIxMjh4MTI4Il0pOworICAgICAgICAgICAgICAgIEVYUEVD
VF9FUShpY29uLnB1cnBvc2VzLmNvdW50LCAxdWwpOworICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShpY29uLnB1cnBvc2VzWzBdLnVuc2lnbmVkTG9uZ1ZhbHVlLCAydWwpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICArK2ljb25JbmRleDsKKyAg
ICAgICAgfQorICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJmRv
bmUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBFTkFC
TEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>