<?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>229907</bug_id>
          
          <creation_ts>2021-09-03 18:02:58 -0700</creation_ts>
          <short_desc>Add a fast path for atomizing strings when parsing HTML</short_desc>
          <delta_ts>2021-09-08 07:01:59 -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>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>saam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1790453</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-03 18:02:58 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790564</commentid>
    <comment_count>1</comment_count>
      <attachid>437365</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-05 13:26:55 -0700</bug_when>
    <thetext>Created attachment 437365
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790584</commentid>
    <comment_count>2</comment_count>
      <attachid>437365</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-09-05 17:41:44 -0700</bug_when>
    <thetext>Comment on attachment 437365
For EWS

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

Looks good, so a non-reviewer r+ from me.

&gt; Source/WebCore/html/parser/AtomHTMLToken.h:215
&gt; +    static constexpr auto maxStringLengthForCache = 36;

Might be worth a comment (here or in the ChangeLog entry) to say where 36 comes from.

&gt; Source/WebCore/html/parser/AtomHTMLToken.h:222
&gt; +    if (!WTF::equal(foundImpl.get(), string.data(), string.size())) {

Use length rather than string.size(), or drop the length variable earlier.

&gt; Source/WebCore/html/parser/AtomHTMLToken.h:258
&gt; +        m_name = atomize&lt;AtomStringType::TagOrAttributeName&gt;(token.name());

I guess this will let us fast path one more atomization, since the name in the &lt;!DOCTYPE&gt; is almost certainly &quot;html&quot;, and we&apos;ll later probably have an &lt;html&gt; and an &lt;/html&gt; tag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790749</commentid>
    <comment_count>3</comment_count>
      <attachid>437365</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-06 11:27:05 -0700</bug_when>
    <thetext>Comment on attachment 437365
For EWS

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

Thanks for taking a look!

&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:215
&gt;&gt; +    static constexpr auto maxStringLengthForCache = 36;
&gt; 
&gt; Might be worth a comment (here or in the ChangeLog entry) to say where 36 comes from.

Good point — I&apos;ll add an explanation for this in the ChangeLog.

I chose to add an upper bound longer strings are less likely in practice to be very frequently re-atomized, compared to shorter strings. This specific 36-character limit actually allows us to cache certain UUIDs in Speedometer that are repeatedly atomized during parsing, which significantly increases the cache hit rate in Speedometer.

&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:222
&gt;&gt; +    if (!WTF::equal(foundImpl.get(), string.data(), string.size())) {
&gt; 
&gt; Use length rather than string.size(), or drop the length variable earlier.

👍🏻 Changed to use `length` here.

&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:258
&gt;&gt; +        m_name = atomize&lt;AtomStringType::TagOrAttributeName&gt;(token.name());
&gt; 
&gt; I guess this will let us fast path one more atomization, since the name in the &lt;!DOCTYPE&gt; is almost certainly &quot;html&quot;, and we&apos;ll later probably have an &lt;html&gt; and an &lt;/html&gt; tag.

Indeed — while this part is not really critical for the performance boost, I figured it would be nice to just change all of the atomization call sites to use the `atomize&lt;&gt;` helper for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790751</commentid>
    <comment_count>4</comment_count>
      <attachid>437430</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-06 11:38:04 -0700</bug_when>
    <thetext>Created attachment 437430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790998</commentid>
    <comment_count>5</comment_count>
      <attachid>437430</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-07 07:23:44 -0700</bug_when>
    <thetext>Comment on attachment 437430
Patch

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

&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; +    static NeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];

Use `MainThreadNeverDestroyed&lt;&gt;` instead :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791025</commentid>
    <comment_count>6</comment_count>
      <attachid>437510</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 08:30:43 -0700</bug_when>
    <thetext>Created attachment 437510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791026</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 08:30:58 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; Comment on attachment 437430 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=437430&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; &gt; +    static NeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt; 
&gt; Use `MainThreadNeverDestroyed&lt;&gt;` instead :)

Fixed — thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791140</commentid>
    <comment_count>8</comment_count>
      <attachid>437510</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-07 11:33:17 -0700</bug_when>
    <thetext>Comment on attachment 437510
Patch

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

&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];

One problem I found is that this table is caching arbitrary string. It is possible that this string is very large and it is not know tag name.
So I think we need a good story of clearing this cache, otherwise, we will potentially leak large strings.
Can you add some mechanism to make this cache cleared? (e.g. clearing this when innerHTML finishes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791144</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 11:46:23 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #8)
&gt; Comment on attachment 437510 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=437510&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; &gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt; 
&gt; One problem I found is that this table is caching arbitrary string. It is
&gt; possible that this string is very large and it is not know tag name.
&gt; So I think we need a good story of clearing this cache, otherwise, we will
&gt; potentially leak large strings.
&gt; Can you add some mechanism to make this cache cleared? (e.g. clearing this
&gt; when innerHTML finishes).

I did think about clearing after `setInnerHTML`, but I was worried that that would hinder some of the performance benefit of using this approach :/.

Do you think that the upper-bound on cached String length (36) might be enough to mitigate this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791149</commentid>
    <comment_count>10</comment_count>
      <attachid>437510</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-07 11:59:49 -0700</bug_when>
    <thetext>Comment on attachment 437510
Patch

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

&gt;&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt;&gt;&gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt;&gt; 
&gt;&gt; One problem I found is that this table is caching arbitrary string. It is possible that this string is very large and it is not know tag name.
&gt;&gt; So I think we need a good story of clearing this cache, otherwise, we will potentially leak large strings.
&gt;&gt; Can you add some mechanism to make this cache cleared? (e.g. clearing this when innerHTML finishes).
&gt; 
&gt; I did think about clearing after `setInnerHTML`, but I was worried that that would hinder some of the performance benefit of using this approach :/.
&gt; 
&gt; Do you think that the upper-bound on cached String length (36) might be enough to mitigate this?

I think adding an upperbound sounds good. And at least, we should clear this cache when memory warning happens.

1. Can you add length upperbound here?
2. Can you wire memory warning thing to this cache to clear things when warning happens?
3. And can you add FIXME+bugzilla URL about more periodic clearing?
4. What do you think about clearing this cache when GC timer is fired? (GCController.cpp in WebCore)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791150</commentid>
    <comment_count>11</comment_count>
      <attachid>437510</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-07 12:02:38 -0700</bug_when>
    <thetext>Comment on attachment 437510
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt;&gt;&gt;&gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt;&gt;&gt; 
&gt;&gt;&gt; One problem I found is that this table is caching arbitrary string. It is possible that this string is very large and it is not know tag name.
&gt;&gt;&gt; So I think we need a good story of clearing this cache, otherwise, we will potentially leak large strings.
&gt;&gt;&gt; Can you add some mechanism to make this cache cleared? (e.g. clearing this when innerHTML finishes).
&gt;&gt; 
&gt;&gt; I did think about clearing after `setInnerHTML`, but I was worried that that would hinder some of the performance benefit of using this approach :/.
&gt;&gt; 
&gt;&gt; Do you think that the upper-bound on cached String length (36) might be enough to mitigate this?
&gt; 
&gt; I think adding an upperbound sounds good. And at least, we should clear this cache when memory warning happens.
&gt; 
&gt; 1. Can you add length upperbound here?
&gt; 2. Can you wire memory warning thing to this cache to clear things when warning happens?
&gt; 3. And can you add FIXME+bugzilla URL about more periodic clearing?
&gt; 4. What do you think about clearing this cache when GC timer is fired? (GCController.cpp in WebCore)

Maybe we should clear this cache when full GC happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791151</commentid>
    <comment_count>12</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 12:03:10 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; Comment on attachment 437510 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=437510&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; &gt;&gt;&gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt; &gt;&gt; 
&gt; &gt;&gt; One problem I found is that this table is caching arbitrary string. It is possible that this string is very large and it is not know tag name.
&gt; &gt;&gt; So I think we need a good story of clearing this cache, otherwise, we will potentially leak large strings.
&gt; &gt;&gt; Can you add some mechanism to make this cache cleared? (e.g. clearing this when innerHTML finishes).
&gt; &gt; 
&gt; &gt; I did think about clearing after `setInnerHTML`, but I was worried that that would hinder some of the performance benefit of using this approach :/.
&gt; &gt; 
&gt; &gt; Do you think that the upper-bound on cached String length (36) might be enough to mitigate this?
&gt; 
&gt; I think adding an upperbound sounds good. And at least, we should clear this
&gt; cache when memory warning happens.
&gt; 
&gt; 1. Can you add length upperbound here?

Ah, so this patch already enforces a 36-character upper limit on strings that are cached.

&gt; 2. Can you wire memory warning thing to this cache to clear things when
&gt; warning happens?

Will do!

&gt; 3. And can you add FIXME+bugzilla URL about more periodic clearing?

👍🏻

&gt; 4. What do you think about clearing this cache when GC timer is fired?
&gt; (GCController.cpp in WebCore)

Yes, I think that makes sense! Will look into this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791223</commentid>
    <comment_count>13</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 14:25:54 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #11)
&gt; Comment on attachment 437510 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=437510&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/html/parser/AtomHTMLToken.h:200
&gt; &gt;&gt;&gt;&gt; +    static MainThreadNeverDestroyed&lt;std::array&lt;RefPtr&lt;AtomStringImpl&gt;, atomizedStringImplTableCapacity&gt;&gt; tables[2];
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; One problem I found is that this table is caching arbitrary string. It is possible that this string is very large and it is not know tag name.
&gt; &gt;&gt;&gt; So I think we need a good story of clearing this cache, otherwise, we will potentially leak large strings.
&gt; &gt;&gt;&gt; Can you add some mechanism to make this cache cleared? (e.g. clearing this when innerHTML finishes).
&gt; &gt;&gt; 
&gt; &gt;&gt; I did think about clearing after `setInnerHTML`, but I was worried that that would hinder some of the performance benefit of using this approach :/.
&gt; &gt;&gt; 
&gt; &gt;&gt; Do you think that the upper-bound on cached String length (36) might be enough to mitigate this?
&gt; &gt; 
&gt; &gt; I think adding an upperbound sounds good. And at least, we should clear this cache when memory warning happens.
&gt; &gt; 
&gt; &gt; 1. Can you add length upperbound here?
&gt; &gt; 2. Can you wire memory warning thing to this cache to clear things when warning happens?
&gt; &gt; 3. And can you add FIXME+bugzilla URL about more periodic clearing?
&gt; &gt; 4. What do you think about clearing this cache when GC timer is fired? (GCController.cpp in WebCore)
&gt; 
&gt; Maybe we should clear this cache when full GC happens.

We discussed this in Slack, and think it might be sufficient to clear the cache when navigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791242</commentid>
    <comment_count>14</comment_count>
      <attachid>437562</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 15:27:23 -0700</bug_when>
    <thetext>Created attachment 437562
v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791264</commentid>
    <comment_count>15</comment_count>
      <attachid>437562</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-07 16:30:00 -0700</bug_when>
    <thetext>Comment on attachment 437562
v2

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

r=me

&gt; Source/WebCore/page/MemoryRelease.cpp:89
&gt; +    HTMLAtomStringCache::clear();

I believe this releaseNoncriticalMemory function is only running under the main thread, but can you double-check?

&gt; Source/WebCore/page/cocoa/MemoryReleaseCocoa.mm:104
&gt; +    HTMLAtomStringCache::clear();

This runs only under the main thread, correct? If so, then looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791269</commentid>
    <comment_count>16</comment_count>
      <attachid>437562</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 16:45:17 -0700</bug_when>
    <thetext>Comment on attachment 437562
v2

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

Thanks for the review!

&gt;&gt; Source/WebCore/page/MemoryRelease.cpp:89
&gt;&gt; +    HTMLAtomStringCache::clear();
&gt; 
&gt; I believe this releaseNoncriticalMemory function is only running under the main thread, but can you double-check?

Yes, I think that&apos;s the case…it at a least looks like we can guarantee that isMainThread() is true, since there are some places in WebKitLegacy on iOS that call into `releaseMemory` through a block in `WebThreadRun`. But (IIUC) that should be okay.

&gt;&gt; Source/WebCore/page/cocoa/MemoryReleaseCocoa.mm:104
&gt;&gt; +    HTMLAtomStringCache::clear();
&gt; 
&gt; This runs only under the main thread, correct? If so, then looks good to me!

Yes! This one definitely only runs on the (real) main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791274</commentid>
    <comment_count>17</comment_count>
      <attachid>437562</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-09-07 16:59:29 -0700</bug_when>
    <thetext>Comment on attachment 437562
v2

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

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:36
&gt; +    enum class Type : uint8_t { TagOrAttributeName = 0, AttributeValue = 1 };

How about bool instead of uint8_t?

Also, it’s so wordy. Can we have two overloads of get so the caller doesn’t have to write such a long identifier? The Type can be a secret implementation detail.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:39
&gt; +    ALWAYS_INLINE static AtomString get(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

I’d be tempted to call this &quot;create&quot; even though it does a &quot;create if needed and return existing if available&quot; operation. Usually &quot;get&quot; only means &quot;return existing if available&quot;. Or &quot;make&quot;, or &quot;atom&quot;.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:49
&gt; +        auto firstChararacter = string[0];
&gt; +        auto lastChararacter = string[length - 1];

I suggest the traditional spelling for character; extra &quot;ra&quot; here.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:68
&gt; +    ALWAYS_INLINE static RefPtr&lt;AtomStringImpl&gt;&amp; getImpl(Type type, UChar firstChararacter, UChar lastCharacter, UChar length)

More misspelling here.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:73
&gt; +        unsigned hash = (firstChararacter &lt;&lt; 6) ^ ((lastCharacter &lt;&lt; 14) ^ firstChararacter);
&gt; +        hash += (hash &gt;&gt; 14) + (length &lt;&lt; 14);
&gt; +        hash ^= hash &lt;&lt; 14;
&gt; +        return cache(type)[(hash + (hash &gt;&gt; 6)) % capacity];

Would be nice to comment what kind of hash function this is, and why it’s a good choice.

&gt;&gt;&gt; Source/WebCore/page/MemoryRelease.cpp:89
&gt;&gt;&gt; +    HTMLAtomStringCache::clear();
&gt;&gt; 
&gt;&gt; I believe this releaseNoncriticalMemory function is only running under the main thread, but can you double-check?
&gt; 
&gt; Yes, I think that&apos;s the case…it at a least looks like we can guarantee that isMainThread() is true, since there are some places in WebKitLegacy on iOS that call into `releaseMemory` through a block in `WebThreadRun`. But (IIUC) that should be okay.

Is there something that will do ASSERT(isMainThread()) to help keep us honest? I don’t see anything explicit, but maybe something implicit?

&gt; Source/WebCore/page/cocoa/MemoryReleaseCocoa.mm:102
&gt; +#endif // PLATFORM(IOS_FAMILY)

I don’t think the #endif needs a comment when it is *so* close to the #if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791288</commentid>
    <comment_count>18</comment_count>
      <attachid>437562</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 17:38:29 -0700</bug_when>
    <thetext>Comment on attachment 437562
v2

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

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:36
&gt;&gt; +    enum class Type : uint8_t { TagOrAttributeName = 0, AttributeValue = 1 };
&gt; 
&gt; How about bool instead of uint8_t?
&gt; 
&gt; Also, it’s so wordy. Can we have two overloads of get so the caller doesn’t have to write such a long identifier? The Type can be a secret implementation detail.

Sounds good — changed the `uint8_t` to `bool`, and made this enum private (with `makeTagOrAttributeName` and `makeAttributeValue` exposed as public methods instead).

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:39
&gt;&gt; +    ALWAYS_INLINE static AtomString get(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)
&gt; 
&gt; I’d be tempted to call this &quot;create&quot; even though it does a &quot;create if needed and return existing if available&quot; operation. Usually &quot;get&quot; only means &quot;return existing if available&quot;. Or &quot;make&quot;, or &quot;atom&quot;.

Good point — I&apos;ll go with `makeTagOrAttributeName` and `makeAttributeValue`.

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:49
&gt;&gt; +        auto lastChararacter = string[length - 1];
&gt; 
&gt; I suggest the traditional spelling for character; extra &quot;ra&quot; here.

Whoops! Fixed.

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:68
&gt;&gt; +    ALWAYS_INLINE static RefPtr&lt;AtomStringImpl&gt;&amp; getImpl(Type type, UChar firstChararacter, UChar lastCharacter, UChar length)
&gt; 
&gt; More misspelling here.

Fixed!

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:73
&gt;&gt; +        return cache(type)[(hash + (hash &gt;&gt; 6)) % capacity];
&gt; 
&gt; Would be nice to comment what kind of hash function this is, and why it’s a good choice.

👍🏻 Added an explanation to the ChangeLog.

&gt;&gt;&gt;&gt; Source/WebCore/page/MemoryRelease.cpp:89
&gt;&gt;&gt;&gt; +    HTMLAtomStringCache::clear();
&gt;&gt;&gt; 
&gt;&gt;&gt; I believe this releaseNoncriticalMemory function is only running under the main thread, but can you double-check?
&gt;&gt; 
&gt;&gt; Yes, I think that&apos;s the case…it at a least looks like we can guarantee that isMainThread() is true, since there are some places in WebKitLegacy on iOS that call into `releaseMemory` through a block in `WebThreadRun`. But (IIUC) that should be okay.
&gt; 
&gt; Is there something that will do ASSERT(isMainThread()) to help keep us honest? I don’t see anything explicit, but maybe something implicit?

That&apos;s a good question! It looks like anything here that would attempt to ref or deref RefCounted objects would trigger an ASSERT, if this were to fire when `!isMainThread()`. From code inspection, I think the call to `InlineStyleSheetOwner::clearCache();` above would trigger this as long as the style sheet cache is non-empty, since the values of that map are `RefPtr&lt;StyleSheetContents&gt;`.

&gt;&gt; Source/WebCore/page/cocoa/MemoryReleaseCocoa.mm:102
&gt;&gt; +#endif // PLATFORM(IOS_FAMILY)
&gt; 
&gt; I don’t think the #endif needs a comment when it is *so* close to the #if.

True — removed the #endif.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791289</commentid>
    <comment_count>19</comment_count>
      <attachid>437574</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 17:49:54 -0700</bug_when>
    <thetext>Created attachment 437574
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791300</commentid>
    <comment_count>20</comment_count>
      <attachid>437574</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-09-07 18:22:43 -0700</bug_when>
    <thetext>Comment on attachment 437574
For EWS

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

Pondered this a little more.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:56
&gt; +    enum class Type : bool { TagOrAttributeName = 0, AttributeValue = 1 };

Just a super-tiny nit pick in an already great patch: the &quot;= 0&quot; and &quot;= 1&quot; here aren’t really needed, even though we do use these booleans as array indices. For one thing, it doesn’t matter which is 0 and which is 1. And for another, converting enum to a size_t doesn’t somehow become more &quot;well defined&quot; if we specify numeric values for them.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:70
&gt; +        auto&amp; foundImpl = getImpl(type, firstCharacter, lastCharacter, length);

I probably would not use the word &quot;impl&quot; at all in the implementation; would look for different words. I think maybe I would name both the function and the local variable cacheSlot, cacheBucket, slot, or bucket.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:71
&gt; +        if (!WTF::equal(foundImpl.get(), string.data(), length)) {

Surprised that you need to use the WTF:: prefix explicitly here.

&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:90
&gt; +    using Cache = std::array&lt;RefPtr&lt;AtomStringImpl&gt;, capacity&gt;;

Any good reason the array elements are not AtomString rather than RefPtr&lt;AtomStringImpl&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791350</commentid>
    <comment_count>21</comment_count>
      <attachid>437574</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 21:25:17 -0700</bug_when>
    <thetext>Comment on attachment 437574
For EWS

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

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:56
&gt;&gt; +    enum class Type : bool { TagOrAttributeName = 0, AttributeValue = 1 };
&gt; 
&gt; Just a super-tiny nit pick in an already great patch: the &quot;= 0&quot; and &quot;= 1&quot; here aren’t really needed, even though we do use these booleans as array indices. For one thing, it doesn’t matter which is 0 and which is 1. And for another, converting enum to a size_t doesn’t somehow become more &quot;well defined&quot; if we specify numeric values for them.

Makes sense! Removed the =0 and =1.

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:70
&gt;&gt; +        auto&amp; foundImpl = getImpl(type, firstCharacter, lastCharacter, length);
&gt; 
&gt; I probably would not use the word &quot;impl&quot; at all in the implementation; would look for different words. I think maybe I would name both the function and the local variable cacheSlot, cacheBucket, slot, or bucket.

👍🏻 Renamed `getImpl` to `cacheSlot` (and made it return an AtomString&amp;), and also renamed `foundImpl` to just `slot`.

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:71
&gt;&gt; +        if (!WTF::equal(foundImpl.get(), string.data(), length)) {
&gt; 
&gt; Surprised that you need to use the WTF:: prefix explicitly here.

Ah, I must&apos;ve copied it from elsewhere but kept the WTF::. Removed.

&gt;&gt; Source/WebCore/html/parser/HTMLAtomStringCache.h:90
&gt;&gt; +    using Cache = std::array&lt;RefPtr&lt;AtomStringImpl&gt;, capacity&gt;;
&gt; 
&gt; Any good reason the array elements are not AtomString rather than RefPtr&lt;AtomStringImpl&gt;?

That&apos;s true, making this an AtomString directly should simplify this a bit.

I&apos;ve changed this to be a std::array of AtomString, and changed the `RefPtr&lt;AtomStringImpl&gt;&amp; getImpl(…)` method above to just `AtomString&amp; get(…)`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791351</commentid>
    <comment_count>22</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-07 21:27:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/82854612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791352</commentid>
    <comment_count>23</comment_count>
      <attachid>437590</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-07 21:36:14 -0700</bug_when>
    <thetext>Created attachment 437590
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791449</commentid>
    <comment_count>24</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-08 07:01:57 -0700</bug_when>
    <thetext>Committed r282142 (241439@main): &lt;https://commits.webkit.org/241439@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 437590.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437365</attachid>
            <date>2021-09-05 13:26:55 -0700</date>
            <delta_ts>2021-09-06 11:38:02 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-229907-20210905132654.patch</filename>
            <type>text/plain</type>
            <size>6787</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI4M2ZkOWY2YWE0NGZk
MGMxODFiZjhiZTEyNmRhMjVlOWJiY2RlZS4uYTA0ZWM2NWZiMDRkNzY0NmQ5YWFjYWIwY2RlZTAx
NGI2NGQxNTFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA5LTA1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIHZhcmlvdXMgc3VidGVzdHMg
aW4gU3BlZWRvbWV0ZXIgMiwgYSBub250cml2aWFsIGFtb3VudCBvZiB0aW1lIGlzIHNwZW50IG1h
cHBpbmcgcmF3IFVDaGFyIGRhdGEgdmVjdG9ycyBpbnRvCisgICAgICAgIEF0b21TdHJpbmdzIHdo
aWxlIHBhcnNpbmcgSFRNTCB0YWcgbmFtZXMsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgYXR0cmlidXRl
IHZhbHVlcy4gTW9zdCBvZiB0aGlzIGhhcHBlbnMgdW5kZXJuZWF0aAorICAgICAgICB0aGUgQXRv
bUhUTUxUb2tlbiBjb25zdHJ1Y3Rvciwgd2hpY2ggY29tcHV0ZXMgYSBoYXNoIGZvciBlYWNoIHN0
cmluZyBpbiB0aGUgcHJvY2VzcyBvZiBhZGRpbmcgaXQgdG8gdGhlIGF0b20KKyAgICAgICAgc3Ry
aW5nIHRhYmxlOyB0aGUgdGltZSBpdCB0YWtlcyB0byBjb21wdXRlIHRoaXMgc3RyaW5nIGhhc2gg
aW5jcmVhc2VzIGxpbmVhcmx5IHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorCisgICAg
ICAgIEhvd2V2ZXIsIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgYmVuY2htYXJrLCB0aGUgdmFzdCBt
YWpvcml0eSBvZiBBdG9tU3RyaW5ncyBjcmVhdGVkIG91dCBvZiB0YWcgbmFtZXMsIGF0dHJpYnV0
ZQorICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgYm90aDoKKworICAgICAg
ICAoMSkgU3RyaW5ncyB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVjZW50bHkgYXRvbWl6ZWQsIGFuZAor
ICAgICAgICAoMikgVXN1YWxseSBkaXN0aW5ndWlzaGFibGUgZnJvbSBvdGhlciBhdG9tIHN0cmlu
Z3MgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGZpcnN0IGNoYXJhY3RlciwgbGFzdCBjaGFyYWN0ZXIs
IGFuZAorICAgICAgICAgICAgb3ZlcmFsbCBzdHJpbmcgbGVuZ3RoLgorCisgICAgICAgIEFzIHN1
Y2gsIGl0J3MgcG9zc2libGUgdG8gc2xpZ2h0bHkgaW1wcm92ZSBzdHJpbmcgYXRvbWl6YXRpb24g
cGVyZm9ybWFuY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgKGkuZS4gcGFyc2luZworICAgICAg
ICBIVE1MKSBieSBtYWludGFpbmluZyBhIHNtYWxsZXIgY2FjaGUgb2YgcmVjZW50bHkgYXRvbWl6
ZWQgQXRvbVN0cmluZ0ltcGxzIHRoYXQgd2UgaW5kZXggdXNpbmcgYSBzaW1wbGUsCisgICAgICAg
IGNvbnN0YW50LXRpbWUgaGFzaCBmdW5jdGlvbiB0aGF0IGNvbnNpZGVycyBvbmx5IHRoZSBmaXJz
dCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisg
ICAgICAgIEluIHRlcm1zIG9mIHRoZSBjYWNoZSBoaXQgcmF0ZSBpbiB0aGlzIEF0b21TdHJpbmdJ
bXBsIGNhY2hlLCB0aGUgZGVmYXVsdCBzdHJpbmcgaGFzaGluZyBhbGdvcml0aG0gb25seSBiYXJl
bHkKKyAgICAgICAgb3V0cGVyZm9ybXMgdGhpcyBzaW1wbGUgaGFzaCBmdW5jdGlvbiBvbiBTcGVl
ZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBoaXQgcmF0ZSBvZiA5OS4yNCUgdXNpbmcgdGhlIGRlZmF1
bHQgaGFzaAorICAgICAgICBhbGdvcml0aG0gdnMuIDk5LjE1JSB1c2luZyB0aGUgImZpcnN0L2xh
c3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgiIGhhc2gpLgorCisgICAgICAgIFVzaW5nIHRoaXMgdGVj
aG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQg
b24gU3BlZWRvbWV0ZXIgYnkgaW50cm9kdWNpbmcgdHdvIHNtYWxsLAorICAgICAgICBmaXhlZC1z
aXplICg1MTIgY2FwYWNpdHkpIEF0b21TdHJpbmdJbXBsIHRhYmxlczogb25lIHRvIGhvbGQgdGFn
IG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhbm90aGVyIHRvIGhvbGQKKyAgICAgICAg
YXR0cmlidXRlIHZhbHVlcyAod2hpY2ggc2VlbXMgdG8gY29udGFpbiBhIG11Y2ggbGFyZ2VyIHNl
dCBvZiB1bmlxdWUgc3RyaW5ncyk7IHdlIGFkZGl0aW9uYWxseSB1c2UgdGhlIGNoZWFwICIyLQor
ICAgICAgICBjaGFyICYgbGVuZ3RoIiBoYXNoIGFsZ29yaXRobSBkZXNjcmliZWQgYWJvdmUgdG8g
aW5kZXggaW50byB0aGVzZSBmaXhlZC1zaXplIHRhYmxlcy4KKworICAgICAgICBUaGlzIGFsbG93
cyB1cyB0byBtb3JlIGVmZmljaWVudGx5IGF0b21pemUgbm90IG9ubHkga25vd24gdGFnIGFuZCBh
dHRyaWJ1dGUgbmFtZXMsIGJ1dCBhbHNvIGN1c3RvbSBlbGVtZW50IHRhZworICAgICAgICBuYW1l
cyBhbmQgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCB0ZW5kIHRvIGFwcGVhciBmcmVx
dWVudGx5IGluIG1hcmt1cCAoZS5nLiBkdWUgdG8gdXNpbmcgY2VydGFpbgorICAgICAgICBKYXZh
U2NyaXB0IGZyYW1ld29ya3MgdGhhdCBnZXQgYW5kIHNldCBIVE1MIGF0dHJpYnV0ZXMpLgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkQXRvbVN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6YXRvbWl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9tSFRNTFRva2VuOjppbml0aWFsaXplQXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKToKKwogMjAyMS0wOC0z
MCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBJ
bnRyb2R1Y2UgTGluZTo6UnVuOjpUZXh0IHRvIGhvbGQgdGV4dCBjb250ZW50IHJlbGF0ZWQgcHJv
cGVydGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxU
b2tlbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCmluZGV4
IDJhNDU1MjFkMzRlYzQyZDg5NGViZDZlZmYyOTIyYjdhZjRlYzZjNjMuLmNmMTM0NzMzZDM0MjNk
MmIxNjg0MDM0YzBlNDZhOGEyYWM2N2ZhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9BdG9tSFRNTFRva2VuLmgKQEAgLTI3LDYgKzI3LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5MSw2ICsx
OTMsNDEgQEAgaW5saW5lIGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+
JiBhdHRyaWJ1dGVzLCBjb25zdCBBdG9tU3RyaW5nJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
ZW51bSBjbGFzcyBBdG9tU3RyaW5nVHlwZSA6IHVpbnQ4X3QgeyBUYWdPckF0dHJpYnV0ZU5hbWUg
PSAwLCBBdHRyaWJ1dGVWYWx1ZSA9IDEgfTsKK3N0YXRpYyBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+
JiBjYWNoZWRBdG9tU3RyaW5nSW1wbChBdG9tU3RyaW5nVHlwZSB0eXBlLCBVQ2hhciBmaXJzdENo
YXJhcmFjdGVyLCBVQ2hhciBsYXN0Q2hhcmFjdGVyLCBVQ2hhciBsZW5ndGgpCit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGF0b21pemVkU3RyaW5nSW1wbFRhYmxlQ2FwYWNpdHkgPSA1MTI7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6YXJyYXk8UmVmUHRyPEF0b21TdHJpbmdJ
bXBsPiwgYXRvbWl6ZWRTdHJpbmdJbXBsVGFibGVDYXBhY2l0eT4+IHRhYmxlc1syXTsKKyAgICBh
dXRvJiB0YWJsZSA9IHRhYmxlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUpXS5nZXQoKTsKKyAg
ICB1bnNpZ25lZCBoYXNoID0gKGZpcnN0Q2hhcmFyYWN0ZXIgPDwgNikgXiAoKGxhc3RDaGFyYWN0
ZXIgPDwgMTQpIF4gZmlyc3RDaGFyYXJhY3Rlcik7CisgICAgaGFzaCArPSAoaGFzaCA+PiAxNCkg
KyAobGVuZ3RoIDw8IDE0KTsKKyAgICBoYXNoIF49IGhhc2ggPDwgMTQ7CisgICAgcmV0dXJuIHRh
YmxlWyhoYXNoICsgKGhhc2ggPj4gNikpICUgYXRvbWl6ZWRTdHJpbmdJbXBsVGFibGVDYXBhY2l0
eV07Cit9CisKK3RlbXBsYXRlPEF0b21TdHJpbmdUeXBlIHR5cGUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KK0F0b21TdHJpbmcgYXRvbWl6ZShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFj
aXR5PiYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZW1wdHlBdG9tKCk7CisKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmluZy5zaXplKCk7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIG1heFN0cmluZ0xlbmd0aEZvckNhY2hlID0gMzY7CisgICAg
aWYgKGxlbmd0aCA+IG1heFN0cmluZ0xlbmd0aEZvckNhY2hlKQorICAgICAgICByZXR1cm4gQXRv
bVN0cmluZyhzdHJpbmcpOworCisgICAgYXV0byBmaXJzdENoYXJhcmFjdGVyID0gc3RyaW5nWzBd
OworICAgIGF1dG8gbGFzdENoYXJhcmFjdGVyID0gc3RyaW5nW2xlbmd0aCAtIDFdOworICAgIGF1
dG8mIGZvdW5kSW1wbCA9IGNhY2hlZEF0b21TdHJpbmdJbXBsKHR5cGUsIGZpcnN0Q2hhcmFyYWN0
ZXIsIGxhc3RDaGFyYXJhY3RlciwgbGVuZ3RoKTsKKyAgICBpZiAoIVdURjo6ZXF1YWwoZm91bmRJ
bXBsLmdldCgpLCBzdHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpKSkgeworICAgICAgICBBdG9t
U3RyaW5nIHJlc3VsdChzdHJpbmcpOworICAgICAgICBmb3VuZEltcGwgPSByZXN1bHQuaW1wbCgp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHJldHVybiBBdG9tU3RyaW5n
KGZvdW5kSW1wbC5nZXQoKSk7Cit9CisKIGlubGluZSB2b2lkIEF0b21IVE1MVG9rZW46OmluaXRp
YWxpemVBdHRyaWJ1dGVzKGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRl
cykKIHsKICAgICB1bnNpZ25lZCBzaXplID0gYXR0cmlidXRlcy5zaXplKCk7CkBAIC0yMDIsMTEg
KzIzOSwxMSBAQCBpbmxpbmUgdm9pZCBBdG9tSFRNTFRva2VuOjppbml0aWFsaXplQXR0cmlidXRl
cyhjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmCiAgICAgICAgIGlmIChhdHRyaWJ1dGUu
bmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBBdG9tU3Ry
aW5nIGxvY2FsTmFtZShhdHRyaWJ1dGUubmFtZSk7CisgICAgICAgIGF1dG8gbG9jYWxOYW1lID0g
YXRvbWl6ZTxBdG9tU3RyaW5nVHlwZTo6VGFnT3JBdHRyaWJ1dGVOYW1lPihhdHRyaWJ1dGUubmFt
ZSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgTl4yIGZvciB0aGUgbnVtYmVyIG9mIGF0
dHJpYnV0ZXMuCiAgICAgICAgIGlmICghaGFzQXR0cmlidXRlKG1fYXR0cmlidXRlcywgbG9jYWxO
YW1lKSkKLSAgICAgICAgICAgIG1fYXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoQXR0cmlidXRl
KFF1YWxpZmllZE5hbWUobnVsbEF0b20oKSwgbG9jYWxOYW1lLCBudWxsQXRvbSgpKSwgQXRvbVN0
cmluZyhhdHRyaWJ1dGUudmFsdWUpKSk7CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMudW5jaGVj
a2VkQXBwZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwg
bnVsbEF0b20oKSksIGF0b21pemU8QXRvbVN0cmluZ1R5cGU6OkF0dHJpYnV0ZVZhbHVlPihhdHRy
aWJ1dGUudmFsdWUpKSk7CiAgICAgfQogfQogCkBAIC0yMTgsNyArMjU1LDcgQEAgaW5saW5lIEF0
b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlbjo6
RE9DVFlQRToKLSAgICAgICAgbV9uYW1lID0gQXRvbVN0cmluZyh0b2tlbi5uYW1lKCkpOworICAg
ICAgICBtX25hbWUgPSBhdG9taXplPEF0b21TdHJpbmdUeXBlOjpUYWdPckF0dHJpYnV0ZU5hbWU+
KHRva2VuLm5hbWUoKSk7CiAgICAgICAgIG1fZG9jdHlwZURhdGEgPSB0b2tlbi5yZWxlYXNlRG9j
dHlwZURhdGEoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRPZkZp
bGU6CkBAIC0yMjYsNyArMjYzLDcgQEAgaW5saW5lIEF0b21IVE1MVG9rZW46OkF0b21IVE1MVG9r
ZW4oSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEhUTUxUb2tlbjo6U3RhcnRUYWc6CiAgICAg
Y2FzZSBIVE1MVG9rZW46OkVuZFRhZzoKICAgICAgICAgbV9zZWxmQ2xvc2luZyA9IHRva2VuLnNl
bGZDbG9zaW5nKCk7Ci0gICAgICAgIG1fbmFtZSA9IEF0b21TdHJpbmcodG9rZW4ubmFtZSgpKTsK
KyAgICAgICAgbV9uYW1lID0gYXRvbWl6ZTxBdG9tU3RyaW5nVHlwZTo6VGFnT3JBdHRyaWJ1dGVO
YW1lPih0b2tlbi5uYW1lKCkpOwogICAgICAgICBpbml0aWFsaXplQXR0cmlidXRlcyh0b2tlbi5h
dHRyaWJ1dGVzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkNvbW1l
bnQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437430</attachid>
            <date>2021-09-06 11:38:04 -0700</date>
            <delta_ts>2021-09-07 08:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229907-20210906113803.patch</filename>
            <type>text/plain</type>
            <size>7085</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI4M2ZkOWY2YWE0NGZk
MGMxODFiZjhiZTEyNmRhMjVlOWJiY2RlZS4uZDI0OGVhMDcyMTU1M2I4ZjljMmI2N2VkZTcyMzY2
MjJkZGJlN2UxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA5LTA1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIHZhcmlvdXMgc3VidGVzdHMg
aW4gU3BlZWRvbWV0ZXIgMiwgYSBub250cml2aWFsIGFtb3VudCBvZiB0aW1lIGlzIHNwZW50IG1h
cHBpbmcgcmF3IFVDaGFyIGRhdGEgdmVjdG9ycyBpbnRvCisgICAgICAgIEF0b21TdHJpbmdzIHdo
aWxlIHBhcnNpbmcgSFRNTCB0YWcgbmFtZXMsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgYXR0cmlidXRl
IHZhbHVlcy4gTW9zdCBvZiB0aGlzIGhhcHBlbnMgdW5kZXJuZWF0aAorICAgICAgICB0aGUgQXRv
bUhUTUxUb2tlbiBjb25zdHJ1Y3Rvciwgd2hpY2ggY29tcHV0ZXMgYSBoYXNoIGZvciBlYWNoIHN0
cmluZyBpbiB0aGUgcHJvY2VzcyBvZiBhZGRpbmcgaXQgdG8gdGhlIGF0b20KKyAgICAgICAgc3Ry
aW5nIHRhYmxlOyB0aGUgdGltZSBpdCB0YWtlcyB0byBjb21wdXRlIHRoaXMgc3RyaW5nIGhhc2gg
aW5jcmVhc2VzIGxpbmVhcmx5IHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorCisgICAg
ICAgIEhvd2V2ZXIsIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgYmVuY2htYXJrLCB0aGUgdmFzdCBt
YWpvcml0eSBvZiBBdG9tU3RyaW5ncyBjcmVhdGVkIG91dCBvZiB0YWcgbmFtZXMsIGF0dHJpYnV0
ZQorICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgYm90aDoKKworICAgICAg
ICAoMSkgU3RyaW5ncyB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVjZW50bHkgYXRvbWl6ZWQsIGFuZAor
ICAgICAgICAoMikgVXN1YWxseSBkaXN0aW5ndWlzaGFibGUgZnJvbSBvdGhlciBhdG9tIHN0cmlu
Z3MgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGZpcnN0IGNoYXJhY3RlciwgbGFzdCBjaGFyYWN0ZXIs
IGFuZAorICAgICAgICAgICAgb3ZlcmFsbCBzdHJpbmcgbGVuZ3RoLgorCisgICAgICAgIEFzIHN1
Y2gsIGl0J3MgcG9zc2libGUgdG8gc2xpZ2h0bHkgaW1wcm92ZSBzdHJpbmcgYXRvbWl6YXRpb24g
cGVyZm9ybWFuY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgKGkuZS4gcGFyc2luZworICAgICAg
ICBIVE1MKSBieSBtYWludGFpbmluZyBhIHNtYWxsZXIgY2FjaGUgb2YgcmVjZW50bHkgYXRvbWl6
ZWQgQXRvbVN0cmluZ0ltcGxzIHRoYXQgd2UgaW5kZXggdXNpbmcgYSBzaW1wbGUsCisgICAgICAg
IGNvbnN0YW50LXRpbWUgaGFzaCBmdW5jdGlvbiB0aGF0IGNvbnNpZGVycyBvbmx5IHRoZSBmaXJz
dCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisg
ICAgICAgIEluIHRlcm1zIG9mIHRoZSBjYWNoZSBoaXQgcmF0ZSBpbiB0aGlzIEF0b21TdHJpbmdJ
bXBsIGNhY2hlLCB0aGUgZGVmYXVsdCBzdHJpbmcgaGFzaGluZyBhbGdvcml0aG0gb25seSBiYXJl
bHkKKyAgICAgICAgb3V0cGVyZm9ybXMgdGhpcyBzaW1wbGUgaGFzaCBmdW5jdGlvbiBvbiBTcGVl
ZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBoaXQgcmF0ZSBvZiA5OS4yNCUgdXNpbmcgdGhlIGRlZmF1
bHQgaGFzaAorICAgICAgICBhbGdvcml0aG0gdnMuIDk5LjE1JSB1c2luZyB0aGUgImZpcnN0L2xh
c3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgiIGhhc2gpLgorCisgICAgICAgIFVzaW5nIHRoaXMgdGVj
aG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQg
b24gU3BlZWRvbWV0ZXIgYnkgaW50cm9kdWNpbmcgdHdvIHNtYWxsLAorICAgICAgICBmaXhlZC1z
aXplICg1MTIgY2FwYWNpdHkpIEF0b21TdHJpbmdJbXBsIHRhYmxlczogb25lIHRvIGhvbGQgdGFn
IG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhbm90aGVyIHRvIGhvbGQKKyAgICAgICAg
YXR0cmlidXRlIHZhbHVlcyAod2hpY2ggc2VlbXMgdG8gY29udGFpbiBhIG11Y2ggbGFyZ2VyIHNl
dCBvZiB1bmlxdWUgc3RyaW5ncyk7IHdlIGFkZGl0aW9uYWxseSB1c2UgdGhlIGNoZWFwICIyLQor
ICAgICAgICBjaGFyICYgbGVuZ3RoIiBoYXNoIGFsZ29yaXRobSBkZXNjcmliZWQgYWJvdmUgdG8g
aW5kZXggaW50byB0aGVzZSBmaXhlZC1zaXplIHRhYmxlcy4KKworICAgICAgICBUaGlzIGFsbG93
cyB1cyB0byBtb3JlIGVmZmljaWVudGx5IGF0b21pemUgbm90IG9ubHkga25vd24gdGFnIGFuZCBh
dHRyaWJ1dGUgbmFtZXMsIGJ1dCBhbHNvIGN1c3RvbSBlbGVtZW50IHRhZworICAgICAgICBuYW1l
cyBhbmQgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCB0ZW5kIHRvIGFwcGVhciBmcmVx
dWVudGx5IGluIG1hcmt1cCAoZS5nLiBkdWUgdG8gdXNpbmcgY2VydGFpbgorICAgICAgICBKYXZh
U2NyaXB0IGZyYW1ld29ya3MgdGhhdCBnZXQgYW5kIHNldCBIVE1MIGF0dHJpYnV0ZXMpLgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkQXRvbVN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6YXRvbWl6ZSk6CisKKyAg
ICAgICAgQWRkaXRpb25hbGx5IGFkZCBhbiB1cHBlciBsZW5ndGggbGltaXQgZm9yIGNoYXJhY3Rl
cnMgdGhhdCB3ZSBpbmNsdWRlIGluIHRoaXMgY2FjaGU7IGluIHByYWN0aWNlLCBsb25nZXIgc3Ry
aW5ncworICAgICAgICB0ZW5kIHRvIGJlIHJlcGVhdGVkbHkgYXRvbWl6ZWQgbGVzcyBmcmVxdWVu
dGx5IHRoYW4gc2hvcnRlciBzdHJpbmdzLiBUaGUgMzYtY2hhcmFjdGVyIGxpbWl0IGFsc28gYWxs
b3dzIGZvcgorICAgICAgICBmcmVxdWVudGx5LXBhcnNlZCAoYW5kIGF0b21pemVkKSBVVUlEcyB0
byBiZSBjYWNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxp
emVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1M
VG9rZW4pOgorCiAyMDIxLTA4LTMwICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtJRkNdIEludHJvZHVjZSBMaW5lOjpSdW46OlRleHQgdG8gaG9sZCB0ZXh0
IGNvbnRlbnQgcmVsYXRlZCBwcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9B
dG9tSFRNTFRva2VuLmgKaW5kZXggMmE0NTUyMWQzNGVjNDJkODk0ZWJkNmVmZjI5MjJiN2FmNGVj
NmM2My4uMTM2ZmZiNDY3Yzg2ZDU0MGNlY2I1ZjRjNzRkYTM5NWZhNmMwYjFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaApAQCAtMjcsNiArMjcsOCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTkxLDYgKzE5Myw0MSBAQCBpbmxpbmUgYm9vbCBoYXNBdHRyaWJ1dGUoY29u
c3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMsIGNvbnN0IEF0b21TdHJpbmcmCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCitlbnVtIGNsYXNzIEF0b21TdHJpbmdUeXBlIDogdWludDhfdCB7
IFRhZ09yQXR0cmlidXRlTmFtZSA9IDAsIEF0dHJpYnV0ZVZhbHVlID0gMSB9Oworc3RhdGljIFJl
ZlB0cjxBdG9tU3RyaW5nSW1wbD4mIGNhY2hlZEF0b21TdHJpbmdJbXBsKEF0b21TdHJpbmdUeXBl
IHR5cGUsIFVDaGFyIGZpcnN0Q2hhcmFyYWN0ZXIsIFVDaGFyIGxhc3RDaGFyYWN0ZXIsIFVDaGFy
IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gYXRvbWl6ZWRTdHJpbmdJbXBs
VGFibGVDYXBhY2l0eSA9IDUxMjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjphcnJh
eTxSZWZQdHI8QXRvbVN0cmluZ0ltcGw+LCBhdG9taXplZFN0cmluZ0ltcGxUYWJsZUNhcGFjaXR5
Pj4gdGFibGVzWzJdOworICAgIGF1dG8mIHRhYmxlID0gdGFibGVzW3N0YXRpY19jYXN0PHNpemVf
dD4odHlwZSldLmdldCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSAoZmlyc3RDaGFyYXJhY3RlciA8
PCA2KSBeICgobGFzdENoYXJhY3RlciA8PCAxNCkgXiBmaXJzdENoYXJhcmFjdGVyKTsKKyAgICBo
YXNoICs9IChoYXNoID4+IDE0KSArIChsZW5ndGggPDwgMTQpOworICAgIGhhc2ggXj0gaGFzaCA8
PCAxNDsKKyAgICByZXR1cm4gdGFibGVbKGhhc2ggKyAoaGFzaCA+PiA2KSkgJSBhdG9taXplZFN0
cmluZ0ltcGxUYWJsZUNhcGFjaXR5XTsKK30KKwordGVtcGxhdGU8QXRvbVN0cmluZ1R5cGUgdHlw
ZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorQXRvbVN0cmluZyBhdG9taXplKGNvbnN0IFZlY3Rv
cjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKKworICAgIGF1dG8gbGVuZ3RoID0g
c3RyaW5nLnNpemUoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbWF4U3RyaW5nTGVuZ3Ro
Rm9yQ2FjaGUgPSAzNjsKKyAgICBpZiAobGVuZ3RoID4gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUp
CisgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHN0cmluZyk7CisKKyAgICBhdXRvIGZpcnN0Q2hh
cmFyYWN0ZXIgPSBzdHJpbmdbMF07CisgICAgYXV0byBsYXN0Q2hhcmFyYWN0ZXIgPSBzdHJpbmdb
bGVuZ3RoIC0gMV07CisgICAgYXV0byYgZm91bmRJbXBsID0gY2FjaGVkQXRvbVN0cmluZ0ltcGwo
dHlwZSwgZmlyc3RDaGFyYXJhY3RlciwgbGFzdENoYXJhcmFjdGVyLCBsZW5ndGgpOworICAgIGlm
ICghV1RGOjplcXVhbChmb3VuZEltcGwuZ2V0KCksIHN0cmluZy5kYXRhKCksIGxlbmd0aCkpIHsK
KyAgICAgICAgQXRvbVN0cmluZyByZXN1bHQoc3RyaW5nKTsKKyAgICAgICAgZm91bmRJbXBsID0g
cmVzdWx0LmltcGwoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1
cm4gQXRvbVN0cmluZyhmb3VuZEltcGwuZ2V0KCkpOworfQorCiBpbmxpbmUgdm9pZCBBdG9tSFRN
TFRva2VuOjppbml0aWFsaXplQXR0cmlidXRlcyhjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxp
c3QmIGF0dHJpYnV0ZXMpCiB7CiAgICAgdW5zaWduZWQgc2l6ZSA9IGF0dHJpYnV0ZXMuc2l6ZSgp
OwpAQCAtMjAyLDExICsyMzksMTEgQEAgaW5saW5lIHZvaWQgQXRvbUhUTUxUb2tlbjo6aW5pdGlh
bGl6ZUF0dHJpYnV0ZXMoY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0JgogICAgICAgICBp
ZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgQXRvbVN0cmluZyBsb2NhbE5hbWUoYXR0cmlidXRlLm5hbWUpOworICAgICAgICBhdXRv
IGxvY2FsTmFtZSA9IGF0b21pemU8QXRvbVN0cmluZ1R5cGU6OlRhZ09yQXR0cmlidXRlTmFtZT4o
YXR0cmlidXRlLm5hbWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIE5eMiBmb3IgdGhl
IG51bWJlciBvZiBhdHRyaWJ1dGVzLgogICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShtX2F0dHJp
YnV0ZXMsIGxvY2FsTmFtZSkpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0
b20oKSksIEF0b21TdHJpbmcoYXR0cmlidXRlLnZhbHVlKSkpOworICAgICAgICAgICAgbV9hdHRy
aWJ1dGVzLnVuY2hlY2tlZEFwcGVuZChBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSgp
LCBsb2NhbE5hbWUsIG51bGxBdG9tKCkpLCBhdG9taXplPEF0b21TdHJpbmdUeXBlOjpBdHRyaWJ1
dGVWYWx1ZT4oYXR0cmlidXRlLnZhbHVlKSkpOwogICAgIH0KIH0KIApAQCAtMjE4LDcgKzI1NSw3
IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAgIG1fbmFtZSA9IEF0b21TdHJpbmcodG9rZW4u
bmFtZSgpKTsKKyAgICAgICAgbV9uYW1lID0gYXRvbWl6ZTxBdG9tU3RyaW5nVHlwZTo6VGFnT3JB
dHRyaWJ1dGVOYW1lPih0b2tlbi5uYW1lKCkpOwogICAgICAgICBtX2RvY3R5cGVEYXRhID0gdG9r
ZW4ucmVsZWFzZURvY3R5cGVEYXRhKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxU
b2tlbjo6RW5kT2ZGaWxlOgpAQCAtMjI2LDcgKzI2Myw3IEBAIGlubGluZSBBdG9tSFRNTFRva2Vu
OjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBIVE1MVG9rZW46OlN0
YXJ0VGFnOgogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRUYWc6CiAgICAgICAgIG1fc2VsZkNsb3Np
bmcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAgICAgICBtX25hbWUgPSBBdG9tU3RyaW5nKHRv
a2VuLm5hbWUoKSk7CisgICAgICAgIG1fbmFtZSA9IGF0b21pemU8QXRvbVN0cmluZ1R5cGU6OlRh
Z09yQXR0cmlidXRlTmFtZT4odG9rZW4ubmFtZSgpKTsKICAgICAgICAgaW5pdGlhbGl6ZUF0dHJp
YnV0ZXModG9rZW4uYXR0cmlidXRlcygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRN
TFRva2VuOjpDb21tZW50Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437510</attachid>
            <date>2021-09-07 08:30:43 -0700</date>
            <delta_ts>2021-09-07 12:05:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229907-20210907083043.patch</filename>
            <type>text/plain</type>
            <size>7169</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNjZjNjZjQ2OTYwNzNk
YjcwN2I3NTlkODUwYTgyNTEyNzBkMTI3Zi4uNDA5NTliNjVkNzAyYjgxNWEwYjYzMzlmZDdmNGRi
ZmVlNTQ0OTA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA5LTA2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIHZhcmlvdXMgc3VidGVzdHMg
aW4gU3BlZWRvbWV0ZXIgMiwgYSBub250cml2aWFsIGFtb3VudCBvZiB0aW1lIGlzIHNwZW50IG1h
cHBpbmcgcmF3IFVDaGFyIGRhdGEgdmVjdG9ycyBpbnRvCisgICAgICAgIEF0b21TdHJpbmdzIHdo
aWxlIHBhcnNpbmcgSFRNTCB0YWcgbmFtZXMsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgYXR0cmlidXRl
IHZhbHVlcy4gTW9zdCBvZiB0aGlzIGhhcHBlbnMgdW5kZXJuZWF0aAorICAgICAgICB0aGUgQXRv
bUhUTUxUb2tlbiBjb25zdHJ1Y3Rvciwgd2hpY2ggY29tcHV0ZXMgYSBoYXNoIGZvciBlYWNoIHN0
cmluZyBpbiB0aGUgcHJvY2VzcyBvZiBhZGRpbmcgaXQgdG8gdGhlIGF0b20KKyAgICAgICAgc3Ry
aW5nIHRhYmxlOyB0aGUgdGltZSBpdCB0YWtlcyB0byBjb21wdXRlIHRoaXMgc3RyaW5nIGhhc2gg
aW5jcmVhc2VzIGxpbmVhcmx5IHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorCisgICAg
ICAgIEhvd2V2ZXIsIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgYmVuY2htYXJrLCB0aGUgdmFzdCBt
YWpvcml0eSBvZiBBdG9tU3RyaW5ncyBjcmVhdGVkIG91dCBvZiB0YWcgbmFtZXMsIGF0dHJpYnV0
ZQorICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgYm90aDoKKworICAgICAg
ICAoMSkgU3RyaW5ncyB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVjZW50bHkgYXRvbWl6ZWQsIGFuZAor
ICAgICAgICAoMikgVXN1YWxseSBkaXN0aW5ndWlzaGFibGUgZnJvbSBvdGhlciBhdG9tIHN0cmlu
Z3MgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGZpcnN0IGNoYXJhY3RlciwgbGFzdCBjaGFyYWN0ZXIs
IGFuZAorICAgICAgICAgICAgb3ZlcmFsbCBzdHJpbmcgbGVuZ3RoLgorCisgICAgICAgIEFzIHN1
Y2gsIGl0J3MgcG9zc2libGUgdG8gc2xpZ2h0bHkgaW1wcm92ZSBzdHJpbmcgYXRvbWl6YXRpb24g
cGVyZm9ybWFuY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgKGkuZS4gcGFyc2luZworICAgICAg
ICBIVE1MKSBieSBtYWludGFpbmluZyBhIHNtYWxsZXIgY2FjaGUgb2YgcmVjZW50bHkgYXRvbWl6
ZWQgQXRvbVN0cmluZ0ltcGxzIHRoYXQgd2UgaW5kZXggdXNpbmcgYSBzaW1wbGUsCisgICAgICAg
IGNvbnN0YW50LXRpbWUgaGFzaCBmdW5jdGlvbiB0aGF0IGNvbnNpZGVycyBvbmx5IHRoZSBmaXJz
dCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisg
ICAgICAgIEluIHRlcm1zIG9mIHRoZSBjYWNoZSBoaXQgcmF0ZSBpbiB0aGlzIEF0b21TdHJpbmdJ
bXBsIGNhY2hlLCB0aGUgZGVmYXVsdCBzdHJpbmcgaGFzaGluZyBhbGdvcml0aG0gb25seSBiYXJl
bHkKKyAgICAgICAgb3V0cGVyZm9ybXMgdGhpcyBzaW1wbGUgaGFzaCBmdW5jdGlvbiBvbiBTcGVl
ZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBoaXQgcmF0ZSBvZiA5OS4yNCUgdXNpbmcgdGhlIGRlZmF1
bHQgaGFzaAorICAgICAgICBhbGdvcml0aG0gdnMuIDk5LjE1JSB1c2luZyB0aGUgImZpcnN0L2xh
c3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgiIGhhc2gpLgorCisgICAgICAgIFVzaW5nIHRoaXMgdGVj
aG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQg
b24gU3BlZWRvbWV0ZXIgYnkgaW50cm9kdWNpbmcgdHdvIHNtYWxsLAorICAgICAgICBmaXhlZC1z
aXplICg1MTIgY2FwYWNpdHkpIEF0b21TdHJpbmdJbXBsIHRhYmxlczogb25lIHRvIGhvbGQgdGFn
IG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhbm90aGVyIHRvIGhvbGQKKyAgICAgICAg
YXR0cmlidXRlIHZhbHVlcyAod2hpY2ggc2VlbXMgdG8gY29udGFpbiBhIG11Y2ggbGFyZ2VyIHNl
dCBvZiB1bmlxdWUgc3RyaW5ncyk7IHdlIGFkZGl0aW9uYWxseSB1c2UgdGhlIGNoZWFwICIyLQor
ICAgICAgICBjaGFyICYgbGVuZ3RoIiBoYXNoIGFsZ29yaXRobSBkZXNjcmliZWQgYWJvdmUgdG8g
aW5kZXggaW50byB0aGVzZSBmaXhlZC1zaXplIHRhYmxlcy4KKworICAgICAgICBUaGlzIGFsbG93
cyB1cyB0byBtb3JlIGVmZmljaWVudGx5IGF0b21pemUgbm90IG9ubHkga25vd24gdGFnIGFuZCBh
dHRyaWJ1dGUgbmFtZXMsIGJ1dCBhbHNvIGN1c3RvbSBlbGVtZW50IHRhZworICAgICAgICBuYW1l
cyBhbmQgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCB0ZW5kIHRvIGFwcGVhciBmcmVx
dWVudGx5IGluIG1hcmt1cCAoZS5nLiBkdWUgdG8gdXNpbmcgY2VydGFpbgorICAgICAgICBKYXZh
U2NyaXB0IGZyYW1ld29ya3MgdGhhdCBnZXQgYW5kIHNldCBIVE1MIGF0dHJpYnV0ZXMpLgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkQXRvbVN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6YXRvbWl6ZSk6CisKKyAg
ICAgICAgQWRkaXRpb25hbGx5IGFkZCBhbiB1cHBlciBsZW5ndGggbGltaXQgZm9yIGNoYXJhY3Rl
cnMgdGhhdCB3ZSBpbmNsdWRlIGluIHRoaXMgY2FjaGU7IGluIHByYWN0aWNlLCBsb25nZXIgc3Ry
aW5ncworICAgICAgICB0ZW5kIHRvIGJlIHJlcGVhdGVkbHkgYXRvbWl6ZWQgbGVzcyBmcmVxdWVu
dGx5IHRoYW4gc2hvcnRlciBzdHJpbmdzLiBUaGUgMzYtY2hhcmFjdGVyIGxpbWl0IGFsc28gYWxs
b3dzIGZvcgorICAgICAgICBmcmVxdWVudGx5LXBhcnNlZCAoYW5kIGF0b21pemVkKSBVVUlEcyB0
byBiZSBjYWNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxp
emVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1M
VG9rZW4pOgorCiAyMDIxLTA5LTA2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyODAwMTcpOiBDYWxsaW5nIGdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpIG9uIGFuIGVtcHR5IGVsZW1lbnQgd2l0aCAiYnJlYWstYmVmb3JlOiBjb2x1
bW4iIGluIGNvbHVtbnMgcmV0dXJucyBhIHJlY3Qgd2l0aCBhbGwgemVyb3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaAppbmRleCAyYTQ1NTIxZDM0ZWM0MmQ4OTRl
YmQ2ZWZmMjkyMmI3YWY0ZWM2YzYzLi45Y2I3YjY3NDU3YzQyMDVkNDljNWZkZmRmZDc2OTAzZTVm
NjdmZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9BdG9tSFRNTFRv
a2VuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCkBA
IC0yNyw2ICsyNyw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xOTEsNiArMTkzLDQxIEBAIGlubGluZSBib29s
IGhhc0F0dHJpYnV0ZShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcywgY29uc3Qg
QXRvbVN0cmluZyYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2VudW0gY2xhc3MgQXRvbVN0cmlu
Z1R5cGUgOiB1aW50OF90IHsgVGFnT3JBdHRyaWJ1dGVOYW1lID0gMCwgQXR0cmlidXRlVmFsdWUg
PSAxIH07CitzdGF0aWMgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiYgY2FjaGVkQXRvbVN0cmluZ0lt
cGwoQXRvbVN0cmluZ1R5cGUgdHlwZSwgVUNoYXIgZmlyc3RDaGFyYXJhY3RlciwgVUNoYXIgbGFz
dENoYXJhY3RlciwgVUNoYXIgbGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBh
dG9taXplZFN0cmluZ0ltcGxUYWJsZUNhcGFjaXR5ID0gNTEyOworICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8c3RkOjphcnJheTxSZWZQdHI8QXRvbVN0cmluZ0ltcGw+LCBhdG9t
aXplZFN0cmluZ0ltcGxUYWJsZUNhcGFjaXR5Pj4gdGFibGVzWzJdOworICAgIGF1dG8mIHRhYmxl
ID0gdGFibGVzW3N0YXRpY19jYXN0PHNpemVfdD4odHlwZSldLmdldCgpOworICAgIHVuc2lnbmVk
IGhhc2ggPSAoZmlyc3RDaGFyYXJhY3RlciA8PCA2KSBeICgobGFzdENoYXJhY3RlciA8PCAxNCkg
XiBmaXJzdENoYXJhcmFjdGVyKTsKKyAgICBoYXNoICs9IChoYXNoID4+IDE0KSArIChsZW5ndGgg
PDwgMTQpOworICAgIGhhc2ggXj0gaGFzaCA8PCAxNDsKKyAgICByZXR1cm4gdGFibGVbKGhhc2gg
KyAoaGFzaCA+PiA2KSkgJSBhdG9taXplZFN0cmluZ0ltcGxUYWJsZUNhcGFjaXR5XTsKK30KKwor
dGVtcGxhdGU8QXRvbVN0cmluZ1R5cGUgdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorQXRv
bVN0cmluZyBhdG9taXplKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJp
bmcpCit7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUF0
b20oKTsKKworICAgIGF1dG8gbGVuZ3RoID0gc3RyaW5nLnNpemUoKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUgPSAzNjsKKyAgICBpZiAobGVuZ3Ro
ID4gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUpCisgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHN0
cmluZyk7CisKKyAgICBhdXRvIGZpcnN0Q2hhcmFyYWN0ZXIgPSBzdHJpbmdbMF07CisgICAgYXV0
byBsYXN0Q2hhcmFyYWN0ZXIgPSBzdHJpbmdbbGVuZ3RoIC0gMV07CisgICAgYXV0byYgZm91bmRJ
bXBsID0gY2FjaGVkQXRvbVN0cmluZ0ltcGwodHlwZSwgZmlyc3RDaGFyYXJhY3RlciwgbGFzdENo
YXJhcmFjdGVyLCBsZW5ndGgpOworICAgIGlmICghV1RGOjplcXVhbChmb3VuZEltcGwuZ2V0KCks
IHN0cmluZy5kYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgQXRvbVN0cmluZyByZXN1bHQoc3Ry
aW5nKTsKKyAgICAgICAgZm91bmRJbXBsID0gcmVzdWx0LmltcGwoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4gQXRvbVN0cmluZyhmb3VuZEltcGwuZ2V0KCkp
OworfQorCiBpbmxpbmUgdm9pZCBBdG9tSFRNTFRva2VuOjppbml0aWFsaXplQXR0cmlidXRlcyhj
b25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCiB7CiAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGF0dHJpYnV0ZXMuc2l6ZSgpOwpAQCAtMjAyLDExICsyMzksMTEgQEAgaW5saW5l
IHZvaWQgQXRvbUhUTUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgSFRNTFRva2Vu
OjpBdHRyaWJ1dGVMaXN0JgogICAgICAgICBpZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQXRvbVN0cmluZyBsb2NhbE5hbWUoYXR0
cmlidXRlLm5hbWUpOworICAgICAgICBhdXRvIGxvY2FsTmFtZSA9IGF0b21pemU8QXRvbVN0cmlu
Z1R5cGU6OlRhZ09yQXR0cmlidXRlTmFtZT4oYXR0cmlidXRlLm5hbWUpOwogCiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIE5eMiBmb3IgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLgogICAgICAg
ICBpZiAoIWhhc0F0dHJpYnV0ZShtX2F0dHJpYnV0ZXMsIGxvY2FsTmFtZSkpCi0gICAgICAgICAg
ICBtX2F0dHJpYnV0ZXMudW5jaGVja2VkQXBwZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51
bGxBdG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0b20oKSksIEF0b21TdHJpbmcoYXR0cmlidXRlLnZh
bHVlKSkpOworICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVuZChBdHRyaWJ1
dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSgpLCBsb2NhbE5hbWUsIG51bGxBdG9tKCkpLCBhdG9t
aXplPEF0b21TdHJpbmdUeXBlOjpBdHRyaWJ1dGVWYWx1ZT4oYXR0cmlidXRlLnZhbHVlKSkpOwog
ICAgIH0KIH0KIApAQCAtMjE4LDcgKzI1NSw3IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9t
SFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAg
IG1fbmFtZSA9IEF0b21TdHJpbmcodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9uYW1lID0gYXRv
bWl6ZTxBdG9tU3RyaW5nVHlwZTo6VGFnT3JBdHRyaWJ1dGVOYW1lPih0b2tlbi5uYW1lKCkpOwog
ICAgICAgICBtX2RvY3R5cGVEYXRhID0gdG9rZW4ucmVsZWFzZURvY3R5cGVEYXRhKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlbjo6RW5kT2ZGaWxlOgpAQCAtMjI2LDcgKzI2
Myw3IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFnOgogICAgIGNhc2UgSFRNTFRva2VuOjpF
bmRUYWc6CiAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAg
ICAgICBtX25hbWUgPSBBdG9tU3RyaW5nKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fbmFtZSA9
IGF0b21pemU8QXRvbVN0cmluZ1R5cGU6OlRhZ09yQXR0cmlidXRlTmFtZT4odG9rZW4ubmFtZSgp
KTsKICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuOjpDb21tZW50Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437562</attachid>
            <date>2021-09-07 15:27:23 -0700</date>
            <delta_ts>2021-09-07 17:49:52 -0700</delta_ts>
            <desc>v2</desc>
            <filename>bug-229907-20210907152723.patch</filename>
            <type>text/plain</type>
            <size>18873</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNmODk4NWRjOWEyYmI3
NmFkMTdmMWE1MGE0NmU1N2QyZDYzYzY4OS4uZDljZjg4MWYzMzdkYmYwMjkyNTllMDRmYTE1MTg3
YmYzMzMxYzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA5LTA3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIHZhcmlvdXMgc3VidGVzdHMg
aW4gU3BlZWRvbWV0ZXIgMiwgYSBub250cml2aWFsIGFtb3VudCBvZiB0aW1lIGlzIHNwZW50IG1h
cHBpbmcgcmF3IFVDaGFyIGRhdGEgdmVjdG9ycyBpbnRvCisgICAgICAgIEF0b21TdHJpbmdzIHdo
aWxlIHBhcnNpbmcgSFRNTCB0YWcgbmFtZXMsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgYXR0cmlidXRl
IHZhbHVlcy4gTW9zdCBvZiB0aGlzIGhhcHBlbnMgdW5kZXJuZWF0aAorICAgICAgICB0aGUgQXRv
bUhUTUxUb2tlbiBjb25zdHJ1Y3Rvciwgd2hpY2ggY29tcHV0ZXMgYSBoYXNoIGZvciBlYWNoIHN0
cmluZyBpbiB0aGUgcHJvY2VzcyBvZiBhZGRpbmcgaXQgdG8gdGhlIGF0b20KKyAgICAgICAgc3Ry
aW5nIHRhYmxlOyB0aGUgdGltZSBpdCB0YWtlcyB0byBjb21wdXRlIHRoaXMgc3RyaW5nIGhhc2gg
aW5jcmVhc2VzIGxpbmVhcmx5IHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorCisgICAg
ICAgIEhvd2V2ZXIsIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgYmVuY2htYXJrLCB0aGUgdmFzdCBt
YWpvcml0eSBvZiBBdG9tU3RyaW5ncyBjcmVhdGVkIG91dCBvZiB0YWcgbmFtZXMsIGF0dHJpYnV0
ZQorICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgYm90aDoKKworICAgICAg
ICAoMSkgU3RyaW5ncyB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVjZW50bHkgYXRvbWl6ZWQsIGFuZAor
ICAgICAgICAoMikgVXN1YWxseSBkaXN0aW5ndWlzaGFibGUgZnJvbSBvdGhlciBhdG9tIHN0cmlu
Z3MgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGZpcnN0IGNoYXJhY3RlciwgbGFzdCBjaGFyYWN0ZXIs
IGFuZAorICAgICAgICAgICAgb3ZlcmFsbCBzdHJpbmcgbGVuZ3RoLgorCisgICAgICAgIEFzIHN1
Y2gsIGl0J3MgcG9zc2libGUgdG8gc2xpZ2h0bHkgaW1wcm92ZSBzdHJpbmcgYXRvbWl6YXRpb24g
cGVyZm9ybWFuY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgKGkuZS4gcGFyc2luZworICAgICAg
ICBIVE1MKSBieSBtYWludGFpbmluZyBhIHNtYWxsZXIgY2FjaGUgb2YgcmVjZW50bHkgYXRvbWl6
ZWQgQXRvbVN0cmluZ0ltcGxzIHRoYXQgd2UgaW5kZXggdXNpbmcgYSBzaW1wbGUsCisgICAgICAg
IGNvbnN0YW50LXRpbWUgaGFzaCBmdW5jdGlvbiB0aGF0IGNvbnNpZGVycyBvbmx5IHRoZSBmaXJz
dCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisg
ICAgICAgIEluIHRlcm1zIG9mIHRoZSBjYWNoZSBoaXQgcmF0ZSBpbiB0aGlzIEF0b21TdHJpbmdJ
bXBsIGNhY2hlLCB0aGUgZGVmYXVsdCBzdHJpbmcgaGFzaGluZyBhbGdvcml0aG0gb25seSBiYXJl
bHkKKyAgICAgICAgb3V0cGVyZm9ybXMgdGhpcyBzaW1wbGUgaGFzaCBmdW5jdGlvbiBvbiBTcGVl
ZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBoaXQgcmF0ZSBvZiA5OS4yNCUgdXNpbmcgdGhlIGRlZmF1
bHQgaGFzaAorICAgICAgICBhbGdvcml0aG0gdnMuIDk5LjE1JSB1c2luZyB0aGUgImZpcnN0L2xh
c3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgiIGhhc2gpLgorCisgICAgICAgIFVzaW5nIHRoaXMgdGVj
aG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQg
b24gU3BlZWRvbWV0ZXIgYnkgaW50cm9kdWNpbmcgdHdvIHNtYWxsLAorICAgICAgICBmaXhlZC1z
aXplICg1MTIgY2FwYWNpdHkpIEF0b21TdHJpbmdJbXBsIHRhYmxlczogb25lIHRvIGhvbGQgdGFn
IG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhbm90aGVyIHRvIGhvbGQKKyAgICAgICAg
YXR0cmlidXRlIHZhbHVlcyAod2hpY2ggc2VlbXMgdG8gY29udGFpbiBhIG11Y2ggbGFyZ2VyIHNl
dCBvZiB1bmlxdWUgc3RyaW5ncyk7IHdlIGFkZGl0aW9uYWxseSB1c2UgdGhlIGNoZWFwICIyLQor
ICAgICAgICBjaGFyICYgbGVuZ3RoIiBoYXNoIGFsZ29yaXRobSBkZXNjcmliZWQgYWJvdmUgdG8g
aW5kZXggaW50byB0aGVzZSBmaXhlZC1zaXplIHRhYmxlcy4KKworICAgICAgICBUaGlzIGFsbG93
cyB1cyB0byBtb3JlIGVmZmljaWVudGx5IGF0b21pemUgbm90IG9ubHkga25vd24gdGFnIGFuZCBh
dHRyaWJ1dGUgbmFtZXMsIGJ1dCBhbHNvIGN1c3RvbSBlbGVtZW50IHRhZworICAgICAgICBuYW1l
cyBhbmQgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCB0ZW5kIHRvIGFwcGVhciBmcmVx
dWVudGx5IGluIG1hcmt1cCAoZS5nLiBkdWUgdG8gdXNpbmcgY2VydGFpbgorICAgICAgICBKYXZh
U2NyaXB0IGZyYW1ld29ya3MgdGhhdCBnZXQgYW5kIHNldCBIVE1MIGF0dHJpYnV0ZXMpLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxpemVBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4pOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MQXRvbVN0cmluZ0NhY2hlLmg6IEFkZGVkLgorCisgICAgICAgIEFkZCBhIGhlbHBlciBjbGFz
cyB0aGF0IGV4cG9zZXMgdHdvIHN0YXRpYyBpbmxpbmUgaGVscGVyIG1ldGhvZHM6IGBnZXRgLCB3
aGljaCByZXR1cm5zIGFuIEF0b21TdHJpbmcgZm9yIHRoZQorICAgICAgICBnaXZlbiBgVmVjdG9y
PFVDaGFyPmAgYnkgY29uc3VsdGluZyB0aGUgY2FjaGUgaWYgcG9zc2libGU7IGFuZCBgY2xlYXJg
LCB3aGljaCBlbXB0aWVzIGFsbCBjYWNoZWQgYXRvbSBzdHJpbmcKKyAgICAgICAgaW1wbHMuCisK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6OmdldCk6CisKKyAgICAgICAg
QWRkaXRpb25hbGx5IGFkZCBhbiB1cHBlciBsZW5ndGggbGltaXQgZm9yIGNoYXJhY3RlcnMgdGhh
dCB3ZSBpbmNsdWRlIGluIHRoaXMgY2FjaGU7IGluIHByYWN0aWNlLCBsb25nZXIgc3RyaW5ncwor
ICAgICAgICB0ZW5kIHRvIGJlIHJlcGVhdGVkbHkgYXRvbWl6ZWQgbGVzcyBmcmVxdWVudGx5IHRo
YW4gc2hvcnRlciBzdHJpbmdzLiBUaGUgMzYtY2hhcmFjdGVyIGxpbWl0IGFsc28gYWxsb3dzIGZv
cgorICAgICAgICBmcmVxdWVudGx5LXBhcnNlZCAoYW5kIGF0b21pemVkKSBVVUlEcyB0byBiZSBj
YWNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6OmdldEltcGwpOgorICAgICAg
ICAqIHBhZ2UvTWVtb3J5UmVsZWFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlTm9u
Y3JpdGljYWxNZW1vcnkpOgorICAgICAgICAqIHBhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6amV0dGlzb25FeHBlbnNpdmVPYmplY3RzT25Ub3BMZXZl
bE5hdmlnYXRpb24pOgorCisgICAgICAgIEFkZCBsb2dpYyB0byBjbGVhciB0aGUgSFRNTCBhdG9t
IHN0cmluZyBjYWNoZSB1cG9uIHJlY2VpdmluZyBhIGxvdyBtZW1vcnkgd2FybmluZywgYW5kIHVw
b24gdG9wLWxldmVsCisgICAgICAgIG5hdmlnYXRpb24uCisKIDIwMjEtMDktMDQgIFBlbmcgTGl1
ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBQbGF5L3BhdXNlIGJ1dHRv
bidzIGljb24gZG9lcyBub3QgdXBkYXRlIHdoZW4gcGF1c2luZyBpbiBmdWxsIHNjcmVlbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA2MjE5Zjc3ZGNlMjg2NjY1NjQ3Mzg0Y2Q0N2RiM2Q4NzBkODA0M2RkLi5h
NWQ4ZDdiZTU1NTlhYjMzNWIyYTIwMjJiNDA3M2Q2NDQ4YzU3MmViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTMxMSw2ICsxMzExLDcgQEAgaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuY3BwCiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAogaHRtbC9m
b3Jtcy9GaWxlSWNvbkxvYWRlci5jcHAKIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNw
cAoraHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAKIGh0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcAogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAog
aHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZjEyM2Y1YTc4OWUyMWU1YTNl
NTc3NGMwNmE4YjFhZDhkOGE5MjFkLi5lOWUwZTdiZmNhMTI2YzkyZTA2M2Q1NjVmNDgyOTE1ZDdh
NDY4YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC01NDAyLDYgKzU0MDIsNyBAQAogCQlGNDhEMkE3RTIxNTcxODI2MDBDNjc1
MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2NzUyQiAvKiBGb250QXR0cmlidXRlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0OEQy
QUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFBMzIxNTk3NDBEMDBDNjc1MkIgLyogQ29s
b3JDb2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUY0OTc4Njg4MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTc4Njg3MUZGNDVG
QTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyog
SFRNTEF0b21TdHJpbmdDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2Fj
aGUuaCAqLzsgfTsKIAkJRjRCMkE5MDkyNjUwMzBCQTAwOUU3Mjg2IC8qIERhdGFEZXRlY3Rvckhp
Z2hsaWdodC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRCMkE5MDYyNjUwMkJBMDAwOUU3Mjg2IC8qIERhdGFEZXRlY3RvckhpZ2hsaWdodC5oICovOyB9
OwogCQlGNEI0MjJDNDIyMEMwNTY4MDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjQyMkMyMjIwQzAwMDAw
MDlFMUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUY0QkZCOTg1MUUxRERGOUIwMDg2MkMyNCAvKiBEdW1wRWRp
dGluZ0hpc3RvcnkuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0ODM4OTgzMUUxRERGMkIwMDc2QjdFQSAvKiBEdW1wRWRpdGluZ0hpc3Rvcnku
anMgKi87IH07CkBAIC0xNjYyNCw2ICsxNjYyNSw4IEBACiAJCUY0OEQyQUE0MjE1OTc0MEQwMEM2
NzUyQiAvKiBDb2xvckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFC
IC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkSXRlbUlu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5RTk4RTQyMURFRTZDMTAwOUFF
NTVFIC8qIEVkaXRBY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdEFjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAv
KiBIVE1MQXRvbVN0cmluZ0NhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxBdG9tU3RyaW5nQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRCMDAxODgyNkU3RjIxRjAwNkVB
QUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEF0
b21TdHJpbmdDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjJBOTA2
MjY1MDJCQTAwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0YURldGVjdG9ySGlnaGxpZ2h0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0QjJBOTA4MjY1MDJCQzAwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0b3JIaWdobGlnaHQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0QjJBOTBDMjY1MDg3RTQwMDlFNzI4NiAvKiBJbWFnZU92ZXJs
YXlDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW1hZ2VPdmVybGF5Q29u
dHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTU5LDYgKzI0
MTYyLDggQEAKIAkJCQk5N0MxRjU1MjEyMjg1NUNCMDBFREU2MTcgLyogQXRvbUhUTUxUb2tlbi5o
ICovLAogCQkJCTk3N0IzODQ5MTIyODgzRTkwMEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5lci5j
cHAgKi8sCiAJCQkJOTc3QjM4NEExMjI4ODNFOTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVy
LmggKi8sCisJCQkJRjRCMDAxODgyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2Fj
aGUuY3BwICovLAorCQkJCUY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmlu
Z0NhY2hlLmggKi8sCiAJCQkJOTc3QjM4NEIxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcCAqLywKIAkJCQk5NzdCMzg0QzEyMjg4M0U5MDBCODFGRjggLyogSFRNTENv
bnN0cnVjdGlvblNpdGUuaCAqLywKIAkJCQk5NzdCMzg0RDEyMjg4M0U5MDBCODFGRjggLyogSFRN
TERvY3VtZW50UGFyc2VyLmNwcCAqLywKQEAgLTM0MDMzLDYgKzM0MDM4LDcgQEAKIAkJCQlBMURG
RDUyNjIzMzQ1OTQ4MDA0MkZDREIgLyogUGF5bWVudFN1bW1hcnlJdGVtcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE2NzdERkQyMTNFMDA2NjAwQTA4QzM0IC8qIFBheW1lbnRWYWxpZGF0aW9uRXJy
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2NTBCMDUzODE0MDAyQ0U2NEYgLyogUERG
RG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRCMDAxODkyNkU3RjIxRjAwNkVB
QUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE1MzI5
MjU2MDU2M0IwMDI4QzU5MiAvKiBQREZJbWFnZUNhY2hpbmdQb2xpY3kuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVFMkM0MzUxMUJDRUUyRjYwMDAxRTJCQyAvKiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVFQkI4OTM5MUM3N0MzOTkwMEM2NUQ0MSAvKiBQZWVyTWVk
aWFEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9BdG9tSFRNTFRva2VuLmgKaW5kZXggMmE0NTUyMWQzNGVjNDJkODk0ZWJkNmVmZjI5MjJiN2Fm
NGVjNmM2My4uNTEyNGM2ZWQzYmMyMDc3MDVjYjgzMWU4YTBjNTUzNjQ5ZWQ5NjIxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaApAQCAtMjYsNyArMjYsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJIVE1MQXRvbVN0cmluZ0NhY2hlLmgiCiAj
aW5jbHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIwMiwx
MSArMjA1LDExIEBAIGlubGluZSB2b2lkIEF0b21IVE1MVG9rZW46OmluaXRpYWxpemVBdHRyaWJ1
dGVzKGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYKICAgICAgICAgaWYgKGF0dHJpYnV0
ZS5uYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEF0b21T
dHJpbmcgbG9jYWxOYW1lKGF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgYXV0byBsb2NhbE5hbWUg
PSBIVE1MQXRvbVN0cmluZ0NhY2hlOjpnZXQ8SFRNTEF0b21TdHJpbmdDYWNoZTo6VHlwZTo6VGFn
T3JBdHRyaWJ1dGVOYW1lPihhdHRyaWJ1dGUubmFtZSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgTl4yIGZvciB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCiAgICAgICAgIGlmICghaGFz
QXR0cmlidXRlKG1fYXR0cmlidXRlcywgbG9jYWxOYW1lKSkKLSAgICAgICAgICAgIG1fYXR0cmli
dXRlcy51bmNoZWNrZWRBcHBlbmQoQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20oKSwg
bG9jYWxOYW1lLCBudWxsQXRvbSgpKSwgQXRvbVN0cmluZyhhdHRyaWJ1dGUudmFsdWUpKSk7Cisg
ICAgICAgICAgICBtX2F0dHJpYnV0ZXMudW5jaGVja2VkQXBwZW5kKEF0dHJpYnV0ZShRdWFsaWZp
ZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0b20oKSksIEhUTUxBdG9tU3RyaW5n
Q2FjaGU6OmdldDxIVE1MQXRvbVN0cmluZ0NhY2hlOjpUeXBlOjpBdHRyaWJ1dGVWYWx1ZT4oYXR0
cmlidXRlLnZhbHVlKSkpOwogICAgIH0KIH0KIApAQCAtMjE4LDcgKzIyMSw3IEBAIGlubGluZSBB
dG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46
OkRPQ1RZUEU6Ci0gICAgICAgIG1fbmFtZSA9IEF0b21TdHJpbmcodG9rZW4ubmFtZSgpKTsKKyAg
ICAgICAgbV9uYW1lID0gSFRNTEF0b21TdHJpbmdDYWNoZTo6Z2V0PEhUTUxBdG9tU3RyaW5nQ2Fj
aGU6OlR5cGU6OlRhZ09yQXR0cmlidXRlTmFtZT4odG9rZW4ubmFtZSgpKTsKICAgICAgICAgbV9k
b2N0eXBlRGF0YSA9IHRva2VuLnJlbGVhc2VEb2N0eXBlRGF0YSgpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZE9mRmlsZToKQEAgLTIyNiw3ICsyMjksNyBAQCBpbmxp
bmUgQXRvbUhUTUxUb2tlbjo6QXRvbUhUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogICAgIGNh
c2UgSFRNTFRva2VuOjpTdGFydFRhZzoKICAgICBjYXNlIEhUTUxUb2tlbjo6RW5kVGFnOgogICAg
ICAgICBtX3NlbGZDbG9zaW5nID0gdG9rZW4uc2VsZkNsb3NpbmcoKTsKLSAgICAgICAgbV9uYW1l
ID0gQXRvbVN0cmluZyh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX25hbWUgPSBIVE1MQXRvbVN0
cmluZ0NhY2hlOjpnZXQ8SFRNTEF0b21TdHJpbmdDYWNoZTo6VHlwZTo6VGFnT3JBdHRyaWJ1dGVO
YW1lPih0b2tlbi5uYW1lKCkpOwogICAgICAgICBpbml0aWFsaXplQXR0cmlidXRlcyh0b2tlbi5h
dHRyaWJ1dGVzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkNvbW1l
bnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmlu
Z0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2Fj
aGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYwNDUyMGNiYmQwOGQxZGYxNTM0MjYyMzNjODI5YjI1NjYyMDUx
YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRv
bVN0cmluZ0NhY2hlLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitIVE1MQXRvbVN0cmluZ0NhY2hlOjpDYWNoZSYgSFRNTEF0b21TdHJpbmdD
YWNoZTo6Y2FjaGUoVHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Q2FjaGU+IGNhY2hlc1syXTsKKyAgICByZXR1cm4gY2FjaGVzW3N0YXRpY19jYXN0PHNp
emVfdD4odHlwZSldLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDBlNGM1ZDMxNWQ2ODlhNDcyNzM2OTE0ZjdlMWZjMjI2YjUwYjgyZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhU
TUxBdG9tU3RyaW5nQ2FjaGUgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgeyBUYWdPckF0dHJpYnV0ZU5hbWUgPSAwLCBBdHRyaWJ1dGVWYWx1ZSA9IDEgfTsKKworICAg
IHRlbXBsYXRlPEhUTUxBdG9tU3RyaW5nQ2FjaGU6OlR5cGUgdHlwZSwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEF0b21TdHJpbmcgZ2V0KGNvbnN0IFZl
Y3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKKworICAg
ICAgICBhdXRvIGxlbmd0aCA9IHN0cmluZy5zaXplKCk7CisgICAgICAgIGlmIChsZW5ndGggPiBt
YXhTdHJpbmdMZW5ndGhGb3JDYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHN0
cmluZyk7CisKKyAgICAgICAgYXV0byBmaXJzdENoYXJhcmFjdGVyID0gc3RyaW5nWzBdOworICAg
ICAgICBhdXRvIGxhc3RDaGFyYXJhY3RlciA9IHN0cmluZ1tsZW5ndGggLSAxXTsKKyAgICAgICAg
YXV0byYgZm91bmRJbXBsID0gZ2V0SW1wbCh0eXBlLCBmaXJzdENoYXJhcmFjdGVyLCBsYXN0Q2hh
cmFyYWN0ZXIsIGxlbmd0aCk7CisgICAgICAgIGlmICghV1RGOjplcXVhbChmb3VuZEltcGwuZ2V0
KCksIHN0cmluZy5kYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIEF0b21TdHJpbmcgcmVz
dWx0KHN0cmluZyk7CisgICAgICAgICAgICBmb3VuZEltcGwgPSByZXN1bHQuaW1wbCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBBdG9t
U3RyaW5nKGZvdW5kSW1wbC5nZXQoKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICAvLyBGSVhNRSAod2Via2l0Lm9yZy9iLzIz
MDAxOSk6IFdlIHNob3VsZCB0cnkgdG8gZmluZCBtb3JlIG9wcG9ydHVuaXRpZXMgdG8gY2xlYXIg
dGhpcyBjYWNoZSB3aXRob3V0IGhpbmRlcmluZyB0aGlzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlv
bi4KKyAgICAgICAgY2FjaGUoVHlwZTo6VGFnT3JBdHRyaWJ1dGVOYW1lKS5maWxsKHsgfSk7Cisg
ICAgICAgIGNhY2hlKFR5cGU6OkF0dHJpYnV0ZVZhbHVlKS5maWxsKHsgfSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4m
IGdldEltcGwoVHlwZSB0eXBlLCBVQ2hhciBmaXJzdENoYXJhcmFjdGVyLCBVQ2hhciBsYXN0Q2hh
cmFjdGVyLCBVQ2hhciBsZW5ndGgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoID0gKGZp
cnN0Q2hhcmFyYWN0ZXIgPDwgNikgXiAoKGxhc3RDaGFyYWN0ZXIgPDwgMTQpIF4gZmlyc3RDaGFy
YXJhY3Rlcik7CisgICAgICAgIGhhc2ggKz0gKGhhc2ggPj4gMTQpICsgKGxlbmd0aCA8PCAxNCk7
CisgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAxNDsKKyAgICAgICAgcmV0dXJuIGNhY2hlKHR5cGUp
WyhoYXNoICsgKGhhc2ggPj4gNikpICUgY2FwYWNpdHldOworICAgIH0KKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBtYXhTdHJpbmdMZW5ndGhGb3JDYWNoZSA9IDM2OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBjYXBhY2l0eSA9IDUxMjsKKyAgICB1c2luZyBDYWNoZSA9IHN0ZDo6YXJy
YXk8UmVmUHRyPEF0b21TdHJpbmdJbXBsPiwgY2FwYWNpdHk+OworICAgIHN0YXRpYyBDYWNoZSYg
Y2FjaGUoVHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9NZW1vcnlSZWxlYXNlLmNwcAppbmRleCA2ZGU2YzBlMjYzMzMyYmUxZDY3MGUxYTY5YWZlM2M4
NjdiNGYzMDk3Li4xYjRlNDg1ZjdhNzVjMjFkNTY4ZmQ4NWIyNTQwNmUyNWRmNTU2MGI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdDQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKICNpbmNsdWRlICJIVE1M
TWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lU3R5bGVTaGVldE93bmVyLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC04NSw2ICs4Niw3IEBAIHN0YXRp
YyB2b2lkIHJlbGVhc2VOb25jcml0aWNhbE1lbW9yeShNYWludGFpbk1lbW9yeUNhY2hlIG1haW50
YWluTWVtb3J5Q2FjaGUpCiAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZURl
YWRSZXNvdXJjZXNUb1NpemUoMCk7CiAKICAgICBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNsZWFy
Q2FjaGUoKTsKKyAgICBIVE1MQXRvbVN0cmluZ0NhY2hlOjpjbGVhcigpOwogfQogCiBzdGF0aWMg
dm9pZCByZWxlYXNlQ3JpdGljYWxNZW1vcnkoU3luY2hyb25vdXMgc3luY2hyb25vdXMsIE1haW50
YWluQmFja0ZvcndhcmRDYWNoZSBtYWludGFpbkJhY2tGb3J3YXJkQ2FjaGUsIE1haW50YWluTWVt
b3J5Q2FjaGUgbWFpbnRhaW5NZW1vcnlDYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9j
b2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KaW5kZXggMzNjZGU5YjY5YTA1Yzg1OWU5MWJkYjc5
NDQwYjM4Njk3YTg4MjE1MS4uZjRmZGY2YjMxM2JmNzRmMDgwYzM4ZDdiOTVlYmJjYjg3NzZjOTFj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2Eu
bW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiRm9udEZhbWlseVNwZWNpZmljYXRpb25D
b3JlVGV4dC5oIgogI2ltcG9ydCAiR0NDb250cm9sbGVyLmgiCisjaW1wb3J0ICJIVE1MQXRvbVN0
cmluZ0NhY2hlLmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJMYXllclBv
b2wuaCIKICNpbXBvcnQgIkxvY2FsZUNvY29hLmgiCkBAIC04Myw3ICs4NCw2IEBAIHZvaWQgcGxh
dGZvcm1SZWxlYXNlR3JhcGhpY3NNZW1vcnkoQ3JpdGljYWwpCiAKIHZvaWQgamV0dGlzb25FeHBl
bnNpdmVPYmplY3RzT25Ub3BMZXZlbE5hdmlnYXRpb24oKQogewotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGRvaW5nIGV4Y2Vzc2l2ZSBqZXR0aXNvbmlu
ZyBkdXJpbmcgcmVwZWF0ZWQgbmF2aWdhdGlvbnMuCiAgICAgY29uc3QgYXV0byBtaW5pbXVtVGlt
ZVNpbmNlTmF2aWdhdGlvbiA9IDJfczsKIApAQCAtOTUsMTAgKzk1LDEzIEBAIHZvaWQgamV0dGlz
b25FeHBlbnNpdmVPYmplY3RzT25Ub3BMZXZlbE5hdmlnYXRpb24oKQogICAgIGlmICghc2hvdWxk
SmV0dGlzb24pCiAgICAgICAgIHJldHVybjsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgLy8gVGhyb3cgYXdheSBsaW5rZWQgSlMgY29kZS4gTGlua2VkIGNvZGUgaXMgdGllZCB0byBh
IGdsb2JhbCBvYmplY3QgYW5kIGlzIG5vdCByZXVzYWJsZS4KICAgICAvLyBUaGUgaW1tZWRpYXRl
IG1lbW9yeSBzYXZpbmdzIG91dHdlaWdoIHRoZSBjb3N0IG9mIHJlY29tcGlsYXRpb24gaW4gY2Fz
ZSB3ZSBnbyBiYWNrIGFnYWluLgogICAgIEdDQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGVsZXRl
QWxsTGlua2VkQ29kZShKU0M6OkRlbGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpOwotI2VuZGlm
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworICAgIEhUTUxBdG9tU3RyaW5nQ2Fj
aGU6OmNsZWFyKCk7CiB9CiAKIHZvaWQgcmVnaXN0ZXJNZW1vcnlSZWxlYXNlTm90aWZ5Q2FsbGJh
Y2tzKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437574</attachid>
            <date>2021-09-07 17:49:54 -0700</date>
            <delta_ts>2021-09-07 21:36:12 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-229907-20210907174953.patch</filename>
            <type>text/plain</type>
            <size>19510</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNmODk4NWRjOWEyYmI3
NmFkMTdmMWE1MGE0NmU1N2QyZDYzYzY4OS4uZTk1M2RiNWQ4ODZlNTE4ODhlYWU1MThhOWE2NWQ2
ZjIxODU0ZWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDIxLTA5LTA3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kgYW5kIERhcmluIEFkbGVyLgorCisgICAgICAgIE9uIHZh
cmlvdXMgc3VidGVzdHMgaW4gU3BlZWRvbWV0ZXIgMiwgYSBub250cml2aWFsIGFtb3VudCBvZiB0
aW1lIGlzIHNwZW50IG1hcHBpbmcgcmF3IFVDaGFyIGRhdGEgdmVjdG9ycyBpbnRvCisgICAgICAg
IEF0b21TdHJpbmdzIHdoaWxlIHBhcnNpbmcgSFRNTCB0YWcgbmFtZXMsIGF0dHJpYnV0ZSBuYW1l
cyBhbmQgYXR0cmlidXRlIHZhbHVlcy4gTW9zdCBvZiB0aGlzIGhhcHBlbnMgdW5kZXJuZWF0aAor
ICAgICAgICB0aGUgQXRvbUhUTUxUb2tlbiBjb25zdHJ1Y3Rvciwgd2hpY2ggY29tcHV0ZXMgYSBo
YXNoIGZvciBlYWNoIHN0cmluZyBpbiB0aGUgcHJvY2VzcyBvZiBhZGRpbmcgaXQgdG8gdGhlIGF0
b20KKyAgICAgICAgc3RyaW5nIHRhYmxlOyB0aGUgdGltZSBpdCB0YWtlcyB0byBjb21wdXRlIHRo
aXMgc3RyaW5nIGhhc2ggaW5jcmVhc2VzIGxpbmVhcmx5IHdpdGggdGhlIGxlbmd0aCBvZiB0aGUg
c3RyaW5nLgorCisgICAgICAgIEhvd2V2ZXIsIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgYmVuY2ht
YXJrLCB0aGUgdmFzdCBtYWpvcml0eSBvZiBBdG9tU3RyaW5ncyBjcmVhdGVkIG91dCBvZiB0YWcg
bmFtZXMsIGF0dHJpYnV0ZQorICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUg
Ym90aDoKKworICAgICAgICAoMSkgU3RyaW5ncyB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVjZW50bHkg
YXRvbWl6ZWQsIGFuZAorICAgICAgICAoMikgVXN1YWxseSBkaXN0aW5ndWlzaGFibGUgZnJvbSBv
dGhlciBhdG9tIHN0cmluZ3MgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGZpcnN0IGNoYXJhY3Rlciwg
bGFzdCBjaGFyYWN0ZXIsIGFuZAorICAgICAgICAgICAgb3ZlcmFsbCBzdHJpbmcgbGVuZ3RoLgor
CisgICAgICAgIEFzIHN1Y2gsIGl0J3MgcG9zc2libGUgdG8gc2xpZ2h0bHkgaW1wcm92ZSBzdHJp
bmcgYXRvbWl6YXRpb24gcGVyZm9ybWFuY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgKGkuZS4g
cGFyc2luZworICAgICAgICBIVE1MKSBieSBtYWludGFpbmluZyBhIHNtYWxsZXIgY2FjaGUgb2Yg
cmVjZW50bHkgYXRvbWl6ZWQgQXRvbVN0cmluZ0ltcGxzIHRoYXQgd2UgaW5kZXggdXNpbmcgYSBz
aW1wbGUsCisgICAgICAgIGNvbnN0YW50LXRpbWUgaGFzaCBmdW5jdGlvbiB0aGF0IGNvbnNpZGVy
cyBvbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQgbGVuZ3RoIG9m
IHRoZSBzdHJpbmcuCisgICAgICAgIEluIHRlcm1zIG9mIHRoZSBjYWNoZSBoaXQgcmF0ZSBpbiB0
aGlzIEF0b21TdHJpbmdJbXBsIGNhY2hlLCB0aGUgZGVmYXVsdCBzdHJpbmcgaGFzaGluZyBhbGdv
cml0aG0gb25seSBiYXJlbHkKKyAgICAgICAgb3V0cGVyZm9ybXMgdGhpcyBzaW1wbGUgaGFzaCBm
dW5jdGlvbiBvbiBTcGVlZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBoaXQgcmF0ZSBvZiA5OS4yNCUg
dXNpbmcgdGhlIGRlZmF1bHQgaGFzaAorICAgICAgICBhbGdvcml0aG0gdnMuIDk5LjE1JSB1c2lu
ZyB0aGUgImZpcnN0L2xhc3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgiIGhhc2gpLgorCisgICAgICAg
IFVzaW5nIHRoaXMgdGVjaG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFu
Y2UgaW1wcm92ZW1lbnQgb24gU3BlZWRvbWV0ZXIgYnkgaW50cm9kdWNpbmcgdHdvIHNtYWxsLAor
ICAgICAgICBmaXhlZC1zaXplICg1MTIgY2FwYWNpdHkpIEF0b21TdHJpbmdJbXBsIHRhYmxlczog
b25lIHRvIGhvbGQgdGFnIG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhbm90aGVyIHRv
IGhvbGQKKyAgICAgICAgYXR0cmlidXRlIHZhbHVlcyAod2hpY2ggc2VlbXMgdG8gY29udGFpbiBh
IG11Y2ggbGFyZ2VyIHNldCBvZiB1bmlxdWUgc3RyaW5ncyk7IHdlIGFkZGl0aW9uYWxseSB1c2Ug
dGhlIGNoZWFwICIyLQorICAgICAgICBjaGFyICYgbGVuZ3RoIiBoYXNoIGFsZ29yaXRobSBkZXNj
cmliZWQgYWJvdmUgdG8gaW5kZXggaW50byB0aGVzZSBmaXhlZC1zaXplIHRhYmxlcy4KKworICAg
ICAgICBUaGlzIGFsbG93cyB1cyB0byBtb3JlIGVmZmljaWVudGx5IGF0b21pemUgbm90IG9ubHkg
a25vd24gdGFnIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGJ1dCBhbHNvIGN1c3RvbSBlbGVtZW50IHRh
ZworICAgICAgICBuYW1lcyBhbmQgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCB0ZW5k
IHRvIGFwcGVhciBmcmVxdWVudGx5IGluIG1hcmt1cCAoZS5nLiBkdWUgdG8gdXNpbmcgY2VydGFp
bgorICAgICAgICBKYXZhU2NyaXB0IGZyYW1ld29ya3MgdGhhdCBnZXQgYW5kIHNldCBIVE1MIGF0
dHJpYnV0ZXMpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0F0b21IVE1M
VG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxpemVBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4p
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmg6IEFkZGVkLgorCisgICAgICAgIEFk
ZCBhIGhlbHBlciBjbGFzcyB0aGF0IGV4cG9zZXMgdGhyZWUgc3RhdGljIGlubGluZSBoZWxwZXIg
bWV0aG9kczogYG1ha2VUYWdPckF0dHJpYnV0ZU5hbWVgIGFuZAorICAgICAgICBgbWFrZUF0dHJp
YnV0ZVZhbHVlYCwgd2hpY2ggcmV0dXJuIEF0b21TdHJpbmdzIGZvciB0aGUgZ2l2ZW4gYFZlY3Rv
cjxVQ2hhcj5gIChjb25zdWx0aW5nIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgIGNhY2hlIGlm
IHBvc3NpYmxlKTsgYW5kIGBjbGVhcmAsIHdoaWNoIGVtcHRpZXMgYWxsIGNhY2hlZCBhdG9tIHN0
cmluZyBpbXBscy4KKworICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdDYWNoZTo6bWFr
ZVRhZ09yQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXRvbVN0cmluZ0Nh
Y2hlOjptYWtlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJp
bmdDYWNoZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdDYWNoZTo6
bWFrZSk6CisKKyAgICAgICAgQWRkaXRpb25hbGx5IGFkZCBhbiB1cHBlciBsZW5ndGggbGltaXQg
Zm9yIGNoYXJhY3RlcnMgdGhhdCB3ZSBpbmNsdWRlIGluIHRoaXMgY2FjaGU7IGluIHByYWN0aWNl
LCBsb25nZXIgc3RyaW5ncworICAgICAgICB0ZW5kIHRvIGJlIHJlcGVhdGVkbHkgYXRvbWl6ZWQg
bGVzcyBmcmVxdWVudGx5IHRoYW4gc2hvcnRlciBzdHJpbmdzLiBUaGUgMzYtY2hhcmFjdGVyIGxp
bWl0IGFsc28gYWxsb3dzIGZvcgorICAgICAgICBmcmVxdWVudGx5LXBhcnNlZCAoYW5kIGF0b21p
emVkKSBVVUlEcyB0byBiZSBjYWNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3Ry
aW5nQ2FjaGU6OmdldEltcGwpOgorCisgICAgICAgIFRoaXMgaGFzaGluZyBhbGdvcml0aG0gd2Fz
IGluc3BpcmVkIGJ5IGBjYWxjdWxhdGVXaXRoVHdvQ2hhcmFjdGVyc2AsIGJ1dCB3aXRoIGNvbnN0
YW50cyBzcGVjaWZpY2FsbHkgY2hvc2VuIHRvCisgICAgICAgIG1pbmltaXplIGNvbGxpc2lvbnMg
YmV0d2VlbiBjb21tb24gSFRNTCB0YWcgYW5kIGF0dHJpYnV0ZSBuYW1lcy4KKworICAgICAgICAq
IHBhZ2UvTWVtb3J5UmVsZWFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlTm9uY3Jp
dGljYWxNZW1vcnkpOgorICAgICAgICAqIHBhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6amV0dGlzb25FeHBlbnNpdmVPYmplY3RzT25Ub3BMZXZlbE5h
dmlnYXRpb24pOgorCisgICAgICAgIEFkZCBsb2dpYyB0byBjbGVhciB0aGUgSFRNTCBhdG9tIHN0
cmluZyBjYWNoZSB1cG9uIHJlY2VpdmluZyBhIGxvdyBtZW1vcnkgd2FybmluZywgYW5kIHVwb24g
dG9wLWxldmVsCisgICAgICAgIG5hdmlnYXRpb24uCisKIDIwMjEtMDktMDQgIFBlbmcgTGl1ICA8
cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBQbGF5L3BhdXNlIGJ1dHRvbidz
IGljb24gZG9lcyBub3QgdXBkYXRlIHdoZW4gcGF1c2luZyBpbiBmdWxsIHNjcmVlbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA2MjE5Zjc3ZGNlMjg2NjY1NjQ3Mzg0Y2Q0N2RiM2Q4NzBkODA0M2RkLi5hNWQ4
ZDdiZTU1NTlhYjMzNWIyYTIwMjJiNDA3M2Q2NDQ4YzU3MmViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTMxMSw2ICsxMzExLDcgQEAgaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
Y3BwCiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAogaHRtbC9mb3Jt
cy9GaWxlSWNvbkxvYWRlci5jcHAKIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAor
aHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAKIGh0bWwvcGFyc2VyL0hUTUxDb25z
dHJ1Y3Rpb25TaXRlLmNwcAogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAogaHRt
bC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZjEyM2Y1YTc4OWUyMWU1YTNlNTc3
NGMwNmE4YjFhZDhkOGE5MjFkLi5hYzM0MWVjZDA0NjljN2Q0ZWZlYWIxZTJmM2ZhMGZhMWM4NTcw
Yjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01NDAyLDYgKzU0MDIsNyBAQAogCQlGNDhEMkE3RTIxNTcxODI2MDBDNjc1MkIg
LyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2NzUyQiAvKiBGb250QXR0cmlidXRlcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0OEQyQUE1
MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFBMzIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JD
b2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0OTc4Njg4MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTc4Njg3MUZGNDVGQTUw
MEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyogSFRN
TEF0b21TdHJpbmdDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUu
aCAqLzsgfTsKIAkJRjRCMkE5MDkyNjUwMzBCQTAwOUU3Mjg2IC8qIERhdGFEZXRlY3RvckhpZ2hs
aWdodC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRC
MkE5MDYyNjUwMkJBMDAwOUU3Mjg2IC8qIERhdGFEZXRlY3RvckhpZ2hsaWdodC5oICovOyB9Owog
CQlGNEI0MjJDNDIyMEMwNTY4MDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjQyMkMyMjIwQzAwMDAwMDlF
MUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0QkZCOTg1MUUxRERGOUIwMDg2MkMyNCAvKiBEdW1wRWRpdGlu
Z0hpc3RvcnkuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0ODM4OTgzMUUxRERGMkIwMDc2QjdFQSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMg
Ki87IH07CkBAIC0xNjYyNCw2ICsxNjYyNSw4IEBACiAJCUY0OEQyQUE0MjE1OTc0MEQwMEM2NzUy
QiAvKiBDb2xvckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JDb2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8q
IFBhc3RlYm9hcmRJdGVtSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkSXRlbUluZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5RTk4RTQyMURFRTZDMTAwOUFFNTVF
IC8qIEVkaXRBY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdEFjdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAvKiBI
VE1MQXRvbVN0cmluZ0NhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxBdG9tU3RyaW5nQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRCMDAxODgyNkU3RjIxRjAwNkVBQUJF
IC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEF0b21T
dHJpbmdDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjJBOTA2MjY1
MDJCQTAwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YURldGVjdG9ySGlnaGxpZ2h0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
QjJBOTA4MjY1MDJCQzAwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0b3JIaWdobGlnaHQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0QjJBOTBDMjY1MDg3RTQwMDlFNzI4NiAvKiBJbWFnZU92ZXJsYXlD
b250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW1hZ2VPdmVybGF5Q29udHJv
bGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTU5LDYgKzI0MTYy
LDggQEAKIAkJCQk5N0MxRjU1MjEyMjg1NUNCMDBFREU2MTcgLyogQXRvbUhUTUxUb2tlbi5oICov
LAogCQkJCTk3N0IzODQ5MTIyODgzRTkwMEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5lci5jcHAg
Ki8sCiAJCQkJOTc3QjM4NEExMjI4ODNFOTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVyLmgg
Ki8sCisJCQkJRjRCMDAxODgyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUu
Y3BwICovLAorCQkJCUY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmggKi8sCiAJCQkJOTc3QjM4NEIxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcCAqLywKIAkJCQk5NzdCMzg0QzEyMjg4M0U5MDBCODFGRjggLyogSFRNTENvbnN0
cnVjdGlvblNpdGUuaCAqLywKIAkJCQk5NzdCMzg0RDEyMjg4M0U5MDBCODFGRjggLyogSFRNTERv
Y3VtZW50UGFyc2VyLmNwcCAqLywKQEAgLTMyMjcyLDYgKzMyMjc3LDcgQEAKIAkJCQlCQzk3RTIz
QTEwOTE0NDk1MDAxMEQzNjEgLyogSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4Q0ZGN0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThFQTdEMkUwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxBcmVhRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRCMDAxODkyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxB
dG9tU3RyaW5nQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNUYyOEZDMUE4MjdEODQwMEMw
RjMxRiAvKiBIVE1MQXR0YWNobWVudEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYx
M0EyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODcxREMxRjBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1M
VG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaAppbmRl
eCAyYTQ1NTIxZDM0ZWM0MmQ4OTRlYmQ2ZWZmMjkyMmI3YWY0ZWM2YzYzLi4wNDQ5ZjlhMmM0ZjM5
YjJkODE5NmIyZDkwYmYwNGFiYjA0MjBlMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQXRvbUhUTUxUb2tlbi5oCkBAIC0yNiw3ICsyNiwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjAyLDExICsyMDUsMTEgQEAgaW5saW5lIHZv
aWQgQXRvbUhUTUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgSFRNTFRva2VuOjpB
dHRyaWJ1dGVMaXN0JgogICAgICAgICBpZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQXRvbVN0cmluZyBsb2NhbE5hbWUoYXR0cmli
dXRlLm5hbWUpOworICAgICAgICBhdXRvIGxvY2FsTmFtZSA9IEhUTUxBdG9tU3RyaW5nQ2FjaGU6
Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLm5hbWUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIE5eMiBmb3IgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLgogICAgICAgICBp
ZiAoIWhhc0F0dHJpYnV0ZShtX2F0dHJpYnV0ZXMsIGxvY2FsTmFtZSkpCi0gICAgICAgICAgICBt
X2F0dHJpYnV0ZXMudW5jaGVja2VkQXBwZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxB
dG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0b20oKSksIEF0b21TdHJpbmcoYXR0cmlidXRlLnZhbHVl
KSkpOworICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVuZChBdHRyaWJ1dGUo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSgpLCBsb2NhbE5hbWUsIG51bGxBdG9tKCkpLCBIVE1MQXRv
bVN0cmluZ0NhY2hlOjptYWtlQXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLnZhbHVlKSkpOwogICAg
IH0KIH0KIApAQCAtMjE4LDcgKzIyMSw3IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRN
TFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAgIG1f
bmFtZSA9IEF0b21TdHJpbmcodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9uYW1lID0gSFRNTEF0
b21TdHJpbmdDYWNoZTo6bWFrZVRhZ09yQXR0cmlidXRlTmFtZSh0b2tlbi5uYW1lKCkpOwogICAg
ICAgICBtX2RvY3R5cGVEYXRhID0gdG9rZW4ucmVsZWFzZURvY3R5cGVEYXRhKCk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlbjo6RW5kT2ZGaWxlOgpAQCAtMjI2LDcgKzIyOSw3
IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4p
CiAgICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFnOgogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRU
YWc6CiAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAgICAg
ICBtX25hbWUgPSBBdG9tU3RyaW5nKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fbmFtZSA9IEhU
TUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUodG9rZW4ubmFtZSgpKTsK
ICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuOjpDb21tZW50OgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MDQ1MjBjYmJkMDhkMWRmMTUzNDI2MjMzYzgyOWIyNTY2MjA1MWIyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJIVE1MQXRvbVN0cmluZ0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSFRNTEF0
b21TdHJpbmdDYWNoZTo6Q2FjaGUmIEhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlKFR5cGUgdHlw
ZSkKK3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPENhY2hlPiBjYWNoZXNb
Ml07CisgICAgcmV0dXJuIGNhY2hlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUpXS5nZXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0MTI2YTIyYmIxYjVkNDVj
ZjYxZWQ3MDU4OWZiZjlkYjg2YWUzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmgKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MQXRvbVN0cmluZ0NhY2hlIHsK
K3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlVGFnT3JBdHRyaWJ1dGVOYW1lKGNvbnN0IFZl
Y3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1
cm4gbWFrZTxUeXBlOjpUYWdPckF0dHJpYnV0ZU5hbWU+KHN0cmluZyk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEF0b21TdHJpbmcgbWFrZUF0dHJpYnV0ZVZhbHVlKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5l
Q2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZTxUeXBlOjpBdHRy
aWJ1dGVWYWx1ZT4oc3RyaW5nKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FICh3ZWJraXQub3JnL2IvMjMwMDE5
KTogV2Ugc2hvdWxkIHRyeSB0byBmaW5kIG1vcmUgb3Bwb3J0dW5pdGllcyB0byBjbGVhciB0aGlz
IGNhY2hlIHdpdGhvdXQgaGluZGVyaW5nIHRoaXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgor
ICAgICAgICBjYWNoZShUeXBlOjpUYWdPckF0dHJpYnV0ZU5hbWUpLmZpbGwoeyB9KTsKKyAgICAg
ICAgY2FjaGUoVHlwZTo6QXR0cmlidXRlVmFsdWUpLmZpbGwoeyB9KTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7IFRhZ09yQXR0cmlidXRlTmFtZSA9IDAs
IEF0dHJpYnV0ZVZhbHVlID0gMSB9OworCisgICAgdGVtcGxhdGU8SFRNTEF0b21TdHJpbmdDYWNo
ZTo6VHlwZSB0eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgQUxXQVlTX0lOTElORSBz
dGF0aWMgQXRvbVN0cmluZyBtYWtlKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+
JiBzdHJpbmcpCisgICAgeworICAgICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBlbXB0eUF0b20oKTsKKworICAgICAgICBhdXRvIGxlbmd0aCA9IHN0cmluZy5z
aXplKCk7CisgICAgICAgIGlmIChsZW5ndGggPiBtYXhTdHJpbmdMZW5ndGhGb3JDYWNoZSkKKyAg
ICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHN0cmluZyk7CisKKyAgICAgICAgYXV0byBmaXJz
dENoYXJhY3RlciA9IHN0cmluZ1swXTsKKyAgICAgICAgYXV0byBsYXN0Q2hhcmFjdGVyID0gc3Ry
aW5nW2xlbmd0aCAtIDFdOworICAgICAgICBhdXRvJiBmb3VuZEltcGwgPSBnZXRJbXBsKHR5cGUs
IGZpcnN0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyLCBsZW5ndGgpOworICAgICAgICBpZiAoIVdU
Rjo6ZXF1YWwoZm91bmRJbXBsLmdldCgpLCBzdHJpbmcuZGF0YSgpLCBsZW5ndGgpKSB7CisgICAg
ICAgICAgICBBdG9tU3RyaW5nIHJlc3VsdChzdHJpbmcpOworICAgICAgICAgICAgZm91bmRJbXBs
ID0gcmVzdWx0LmltcGwoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhmb3VuZEltcGwuZ2V0KCkpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4mIGdldEltcGwo
VHlwZSB0eXBlLCBVQ2hhciBmaXJzdENoYXJhY3RlciwgVUNoYXIgbGFzdENoYXJhY3RlciwgVUNo
YXIgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaCA9IChmaXJzdENoYXJhY3Rl
ciA8PCA2KSBeICgobGFzdENoYXJhY3RlciA8PCAxNCkgXiBmaXJzdENoYXJhY3Rlcik7CisgICAg
ICAgIGhhc2ggKz0gKGhhc2ggPj4gMTQpICsgKGxlbmd0aCA8PCAxNCk7CisgICAgICAgIGhhc2gg
Xj0gaGFzaCA8PCAxNDsKKyAgICAgICAgcmV0dXJuIGNhY2hlKHR5cGUpWyhoYXNoICsgKGhhc2gg
Pj4gNikpICUgY2FwYWNpdHldOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBt
YXhTdHJpbmdMZW5ndGhGb3JDYWNoZSA9IDM2OworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
YXBhY2l0eSA9IDUxMjsKKyAgICB1c2luZyBDYWNoZSA9IHN0ZDo6YXJyYXk8UmVmUHRyPEF0b21T
dHJpbmdJbXBsPiwgY2FwYWNpdHk+OworICAgIHN0YXRpYyBDYWNoZSYgY2FjaGUoVHlwZSk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL01lbW9yeVJlbGVhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNl
LmNwcAppbmRleCA2ZGU2YzBlMjYzMzMyYmUxZDY3MGUxYTY5YWZlM2M4NjdiNGYzMDk3Li4xYjRl
NDg1ZjdhNzVjMjFkNTY4ZmQ4NWIyNTQwNmUyNWRmNTU2MGI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TWVtb3J5UmVsZWFzZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW5saW5lU3R5bGVTaGVldE93bmVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCkBAIC04NSw2ICs4Niw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VO
b25jcml0aWNhbE1lbW9yeShNYWludGFpbk1lbW9yeUNhY2hlIG1haW50YWluTWVtb3J5Q2FjaGUp
CiAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZURlYWRSZXNvdXJjZXNUb1Np
emUoMCk7CiAKICAgICBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNsZWFyQ2FjaGUoKTsKKyAgICBI
VE1MQXRvbVN0cmluZ0NhY2hlOjpjbGVhcigpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlQ3Jp
dGljYWxNZW1vcnkoU3luY2hyb25vdXMgc3luY2hyb25vdXMsIE1haW50YWluQmFja0ZvcndhcmRD
YWNoZSBtYWludGFpbkJhY2tGb3J3YXJkQ2FjaGUsIE1haW50YWluTWVtb3J5Q2FjaGUgbWFpbnRh
aW5NZW1vcnlDYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvTWVt
b3J5UmVsZWFzZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxl
YXNlQ29jb2EubW0KaW5kZXggMzNjZGU5YjY5YTA1Yzg1OWU5MWJkYjc5NDQwYjM4Njk3YTg4MjE1
MS4uMzU2NWRiMzVmYjg5MjRmMTFlNWM3ODE3M2Y0YjI1OWEyODNjZTEyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2ltcG9ydCAiRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oIgogI2lt
cG9ydCAiR0NDb250cm9sbGVyLmgiCisjaW1wb3J0ICJIVE1MQXRvbVN0cmluZ0NhY2hlLmgiCiAj
aW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJMYXllclBvb2wuaCIKICNpbXBvcnQg
IkxvY2FsZUNvY29hLmgiCkBAIC04Myw3ICs4NCw2IEBAIHZvaWQgcGxhdGZvcm1SZWxlYXNlR3Jh
cGhpY3NNZW1vcnkoQ3JpdGljYWwpCiAKIHZvaWQgamV0dGlzb25FeHBlbnNpdmVPYmplY3RzT25U
b3BMZXZlbE5hdmlnYXRpb24oKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8g
UHJvdGVjdCBhZ2FpbnN0IGRvaW5nIGV4Y2Vzc2l2ZSBqZXR0aXNvbmluZyBkdXJpbmcgcmVwZWF0
ZWQgbmF2aWdhdGlvbnMuCiAgICAgY29uc3QgYXV0byBtaW5pbXVtVGltZVNpbmNlTmF2aWdhdGlv
biA9IDJfczsKIApAQCAtOTUsMTAgKzk1LDEzIEBAIHZvaWQgamV0dGlzb25FeHBlbnNpdmVPYmpl
Y3RzT25Ub3BMZXZlbE5hdmlnYXRpb24oKQogICAgIGlmICghc2hvdWxkSmV0dGlzb24pCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gVGhyb3cgYXdh
eSBsaW5rZWQgSlMgY29kZS4gTGlua2VkIGNvZGUgaXMgdGllZCB0byBhIGdsb2JhbCBvYmplY3Qg
YW5kIGlzIG5vdCByZXVzYWJsZS4KICAgICAvLyBUaGUgaW1tZWRpYXRlIG1lbW9yeSBzYXZpbmdz
IG91dHdlaWdoIHRoZSBjb3N0IG9mIHJlY29tcGlsYXRpb24gaW4gY2FzZSB3ZSBnbyBiYWNrIGFn
YWluLgogICAgIEdDQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGVsZXRlQWxsTGlua2VkQ29kZShK
U0M6OkRlbGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpOwogI2VuZGlmCisKKyAgICBIVE1MQXRv
bVN0cmluZ0NhY2hlOjpjbGVhcigpOwogfQogCiB2b2lkIHJlZ2lzdGVyTWVtb3J5UmVsZWFzZU5v
dGlmeUNhbGxiYWNrcygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437590</attachid>
            <date>2021-09-07 21:36:14 -0700</date>
            <delta_ts>2021-09-08 07:01:58 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-229907-20210907213613.patch</filename>
            <type>text/plain</type>
            <size>19376</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDU4NzQ4NWIxODYzZjRk
MDk1NzUyNjYzZmQ5YmQ2YTdmMDJlOGMwOS4uYzBmOWFkZWUzYjUwNzg2OGQxZGNlYWVmMzRkNGY5
NjZhMmI3YTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDIxLTA5LTA3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZhc3Qg
cGF0aCBmb3IgYXRvbWl6aW5nIHN0cmluZ3Mgd2hlbiBwYXJzaW5nIEhUTUwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTkwNworICAgICAgICByZGFy
Oi8vODI4NTQ2MTIKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpIGFuZCBEYXJp
biBBZGxlci4KKworICAgICAgICBPbiB2YXJpb3VzIHN1YnRlc3RzIGluIFNwZWVkb21ldGVyIDIs
IGEgbm9udHJpdmlhbCBhbW91bnQgb2YgdGltZSBpcyBzcGVudCBtYXBwaW5nIHJhdyBVQ2hhciBk
YXRhIHZlY3RvcnMgaW50bworICAgICAgICBBdG9tU3RyaW5ncyB3aGlsZSBwYXJzaW5nIEhUTUwg
dGFnIG5hbWVzLCBhdHRyaWJ1dGUgbmFtZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMuIE1vc3Qgb2Yg
dGhpcyBoYXBwZW5zIHVuZGVybmVhdGgKKyAgICAgICAgdGhlIEF0b21IVE1MVG9rZW4gY29uc3Ry
dWN0b3IsIHdoaWNoIGNvbXB1dGVzIGEgaGFzaCBmb3IgZWFjaCBzdHJpbmcgaW4gdGhlIHByb2Nl
c3Mgb2YgYWRkaW5nIGl0IHRvIHRoZSBhdG9tCisgICAgICAgIHN0cmluZyB0YWJsZTsgdGhlIHRp
bWUgaXQgdGFrZXMgdG8gY29tcHV0ZSB0aGlzIHN0cmluZyBoYXNoIGluY3JlYXNlcyBsaW5lYXJs
eSB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKworICAgICAgICBIb3dldmVyLCBvdmVy
IHRoZSBjb3Vyc2Ugb2YgdGhlIGJlbmNobWFyaywgdGhlIHZhc3QgbWFqb3JpdHkgb2YgQXRvbVN0
cmluZ3MgY3JlYXRlZCBvdXQgb2YgdGFnIG5hbWVzLCBhdHRyaWJ1dGUKKyAgICAgICAgbmFtZXMg
YW5kIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGJvdGg6CisKKyAgICAgICAgKDEpIFN0cmluZ3MgdGhh
dCB3ZSd2ZSBhbHJlYWR5IHJlY2VudGx5IGF0b21pemVkLCBhbmQKKyAgICAgICAgKDIpIFVzdWFs
bHkgZGlzdGluZ3Vpc2hhYmxlIGZyb20gb3RoZXIgYXRvbSBzdHJpbmdzIGJhc2VkIHNvbGVseSBv
biB0aGVpciBmaXJzdCBjaGFyYWN0ZXIsIGxhc3QgY2hhcmFjdGVyLCBhbmQKKyAgICAgICAgICAg
IG92ZXJhbGwgc3RyaW5nIGxlbmd0aC4KKworICAgICAgICBBcyBzdWNoLCBpdCdzIHBvc3NpYmxl
IHRvIHNsaWdodGx5IGltcHJvdmUgc3RyaW5nIGF0b21pemF0aW9uIHBlcmZvcm1hbmNlIGluIHRo
aXMgcGFydGljdWxhciBjYXNlIChpLmUuIHBhcnNpbmcKKyAgICAgICAgSFRNTCkgYnkgbWFpbnRh
aW5pbmcgYSBzbWFsbGVyIGNhY2hlIG9mIHJlY2VudGx5IGF0b21pemVkIEF0b21TdHJpbmdzIHRo
YXQgd2UgaW5kZXggdXNpbmcgYSBzaW1wbGUsIGNvbnN0YW50LQorICAgICAgICB0aW1lIGhhc2gg
ZnVuY3Rpb24gdGhhdCBjb25zaWRlcnMgb25seSB0aGUgZmlyc3QgY2hhcmFjdGVyLCBsYXN0IGNo
YXJhY3RlciwgYW5kIGxlbmd0aCBvZiB0aGUgc3RyaW5nLiBJbiB0ZXJtcworICAgICAgICBvZiB0
aGUgY2FjaGUgaGl0IHJhdGUgaW4gdGhpcyBBdG9tU3RyaW5nIGNhY2hlLCB0aGUgZGVmYXVsdCBz
dHJpbmcgaGFzaGluZyBhbGdvcml0aG0gb25seSBiYXJlbHkgb3V0cGVyZm9ybXMKKyAgICAgICAg
dGhpcyBzaW1wbGUgaGFzaCBmdW5jdGlvbiBvbiBTcGVlZG9tZXRlciAoaS5lLiwgYSBjYWNoZSBo
aXQgcmF0ZSBvZiA5OS4yNCUgdXNpbmcgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdnMuCisg
ICAgICAgIDk5LjE1JSB1c2luZyB0aGUgImZpcnN0L2xhc3QgY2hhcmFjdGVyIGFuZCBsZW5ndGgi
IGhhc2gpLgorCisgICAgICAgIFVzaW5nIHRoaXMgdGVjaG5pcXVlLCB3ZSBjYW4gZ2V0IGEgc2ln
bmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gU3BlZWRvbWV0ZXIgYnkgaW50cm9k
dWNpbmcgdHdvIHNtYWxsLAorICAgICAgICBmaXhlZC1zaXplICg1MTIgY2FwYWNpdHkpIEF0b21T
dHJpbmcgdGFibGVzOiBvbmUgdG8gaG9sZCB0YWcgbmFtZXMgYW5kIGF0dHJpYnV0ZSBuYW1lcywg
YW5kIGFub3RoZXIgdG8gaG9sZAorICAgICAgICBhdHRyaWJ1dGUgdmFsdWVzICh3aGljaCBzZWVt
cyB0byBjb250YWluIGEgbXVjaCBsYXJnZXIgc2V0IG9mIHVuaXF1ZSBzdHJpbmdzKTsgd2UgYWRk
aXRpb25hbGx5IHVzZSB0aGUgY2hlYXAgIjItCisgICAgICAgIGNoYXIgJiBsZW5ndGgiIGhhc2gg
YWxnb3JpdGhtIGRlc2NyaWJlZCBhYm92ZSB0byBpbmRleCBpbnRvIHRoZXNlIGZpeGVkLXNpemUg
dGFibGVzLgorCisgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIG1vcmUgZWZmaWNpZW50bHkgYXRv
bWl6ZSBub3Qgb25seSBrbm93biB0YWcgYW5kIGF0dHJpYnV0ZSBuYW1lcywgYnV0IGFsc28gY3Vz
dG9tIGVsZW1lbnQgdGFnCisgICAgICAgIG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZh
bHVlcyB0aGF0IHRlbmQgdG8gYXBwZWFyIGZyZXF1ZW50bHkgaW4gbWFya3VwIChlLmcuIGR1ZSB0
byB1c2luZyBjZXJ0YWluCisgICAgICAgIEphdmFTY3JpcHQgZnJhbWV3b3JrcyB0aGF0IGdldCBh
bmQgc2V0IEhUTUwgYXR0cmlidXRlcykuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9w
YXJzZXIvQXRvbUhUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbUhUTUxUb2tlbjo6
aW5pdGlhbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbUhUTUxUb2tlbjo6
QXRvbUhUTUxUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNo
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdDYWNoZTo6Y2Fj
aGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuaDogQWRkZWQu
CisKKyAgICAgICAgQWRkIGEgaGVscGVyIGNsYXNzIHRoYXQgZXhwb3NlcyB0aHJlZSBzdGF0aWMg
aW5saW5lIGhlbHBlciBtZXRob2RzOiBgbWFrZVRhZ09yQXR0cmlidXRlTmFtZWAgYW5kCisgICAg
ICAgIGBtYWtlQXR0cmlidXRlVmFsdWVgLCB3aGljaCByZXR1cm4gQXRvbVN0cmluZ3MgZm9yIHRo
ZSBnaXZlbiBgVmVjdG9yPFVDaGFyPmAgKGNvbnN1bHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAg
ICAgICAgY2FjaGUgaWYgcG9zc2libGUpOyBhbmQgYGNsZWFyYCwgd2hpY2ggZW1wdGllcyBhbGwg
Y2FjaGVkIGF0b20gc3RyaW5ncy4KKworICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdD
YWNoZTo6bWFrZVRhZ09yQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXRv
bVN0cmluZ0NhY2hlOjptYWtlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEF0b21TdHJpbmdDYWNoZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJp
bmdDYWNoZTo6bWFrZSk6CisKKyAgICAgICAgQWRkaXRpb25hbGx5IGFkZCBhbiB1cHBlciBsZW5n
dGggbGltaXQgZm9yIGNoYXJhY3RlcnMgdGhhdCB3ZSBpbmNsdWRlIGluIHRoaXMgY2FjaGU7IGlu
IHByYWN0aWNlLCBsb25nZXIgc3RyaW5ncworICAgICAgICB0ZW5kIHRvIGJlIHJlcGVhdGVkbHkg
YXRvbWl6ZWQgbGVzcyBmcmVxdWVudGx5IHRoYW4gc2hvcnRlciBzdHJpbmdzLiBUaGUgMzYtY2hh
cmFjdGVyIGxpbWl0IGFsc28gYWxsb3dzIGZvcgorICAgICAgICBmcmVxdWVudGx5LXBhcnNlZCAo
YW5kIGF0b21pemVkKSBVVUlEcyB0byBiZSBjYWNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlU2xvdCk6CisKKyAgICAgICAgVGhpcyBoYXNoaW5nIGFs
Z29yaXRobSB3YXMgaW5zcGlyZWQgYnkgYGNhbGN1bGF0ZVdpdGhUd29DaGFyYWN0ZXJzYCwgYnV0
IHdpdGggY29uc3RhbnRzIHNwZWNpZmljYWxseSBjaG9zZW4gdG8KKyAgICAgICAgbWluaW1pemUg
Y29sbGlzaW9ucyBiZXR3ZWVuIGNvbW1vbiBIVE1MIHRhZyBhbmQgYXR0cmlidXRlIG5hbWVzLgor
CisgICAgICAgICogcGFnZS9NZW1vcnlSZWxlYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
bGVhc2VOb25jcml0aWNhbE1lbW9yeSk6CisgICAgICAgICogcGFnZS9jb2NvYS9NZW1vcnlSZWxl
YXNlQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpqZXR0aXNvbkV4cGVuc2l2ZU9iamVjdHNP
blRvcExldmVsTmF2aWdhdGlvbik6CisKKyAgICAgICAgQWRkIGxvZ2ljIHRvIGNsZWFyIHRoZSBI
VE1MIGF0b20gc3RyaW5nIGNhY2hlIHVwb24gcmVjZWl2aW5nIGEgbG93IG1lbW9yeSB3YXJuaW5n
LCBhbmQgdXBvbiB0b3AtbGV2ZWwKKyAgICAgICAgbmF2aWdhdGlvbi4KKwogMjAyMS0wOS0wNyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFYWdlcmx5IHJlc29s
dmUgc2xvdCBlbGVtZW50cyB0byBzaW1wbHkgdGhlIGNvZGUgaW4gU2xvdEFzc2lnbm1lbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggNjIxOWY3N2RjZTI4NjY2NTY0NzM4NGNkNDdkYjNkODcwZDgwNDNkZC4u
YTVkOGQ3YmU1NTU5YWIzMzViMmEyMDIyYjQwNzNkNjQ0OGM1NzJlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTEzMTEsNiArMTMxMSw3IEBAIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmNwcAogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKIGh0bWwv
Zm9ybXMvRmlsZUljb25Mb2FkZXIuY3BwCiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5j
cHAKK2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwCiBodG1sL3BhcnNlci9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5jcHAKIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAK
IGh0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmY3OWE4M2JlMzQ4MjMyM2U4
MTYwZjE1MGM5Y2ZmMmRlOGYyYzhmZS4uZjFiZGNjMjA0MDg3MDc1NzQzNDkwYzA5MmNmM2VjYTEx
ODU5NjkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTQwNSw2ICs1NDA1LDcgQEAKIAkJRjQ4RDJBN0UyMTU3MTgyNjAwQzY3
NTJCIC8qIEZvbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDhEMkE3MTIxNTZEQzBBMDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDhE
MkFBNTIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENv
bG9yQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGNDk3ODY4ODFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk3ODY4NzFGRjQ1
RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjRCMDAxODkyNkU3RjIxRjAwNkVBQUJFIC8q
IEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmggKi87IH07CiAJCUY0QjJBOTA5MjY1MDMwQkEwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JI
aWdobGlnaHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0QjJBOTA2MjY1MDJCQTAwMDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQuaCAqLzsg
fTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAwOUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEI0MjJDMjIyMEMwMDAw
MDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEJGQjk4NTFFMURERjlCMDA4NjJDMjQgLyogRHVtcEVk
aXRpbmdIaXN0b3J5LmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDgzODk4MzFFMURERjJCMDA3NkI3RUEgLyogRHVtcEVkaXRpbmdIaXN0b3J5
LmpzICovOyB9OwpAQCAtMTY2MjksNiArMTY2MzAsOCBAQAogCQlGNDhEMkFBNDIxNTk3NDBEMDBD
Njc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbG9yQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3MUZGNDVGQTUwMEUwNjBB
QiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEl0ZW1J
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5OEU0MjFERUU2QzEwMDlB
RTU1RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRBY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEIwMDE4NzI2RTdGMjFGMDA2RUFBQkUg
LyogSFRNTEF0b21TdHJpbmdDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QjAwMTg4MjZFN0YyMUYwMDZF
QUFCRSAvKiBIVE1MQXRvbVN0cmluZ0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxB
dG9tU3RyaW5nQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIyQTkw
NjI2NTAyQkEwMDA5RTcyODYgLyogRGF0YURldGVjdG9ySGlnaGxpZ2h0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERhdGFEZXRlY3RvckhpZ2hsaWdodC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNEIyQTkwODI2NTAyQkMwMDA5RTcyODYgLyogRGF0YURldGVjdG9ySGlnaGxpZ2h0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVjdG9ySGlnaGxpZ2h0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNEIyQTkwQzI2NTA4N0U0MDA5RTcyODYgLyogSW1hZ2VPdmVy
bGF5Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEltYWdlT3ZlcmxheUNv
bnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDE2Niw2ICsy
NDE2OSw4IEBACiAJCQkJOTdDMUY1NTIxMjI4NTVDQjAwRURFNjE3IC8qIEF0b21IVE1MVG9rZW4u
aCAqLywKIAkJCQk5NzdCMzg0OTEyMjg4M0U5MDBCODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwICovLAogCQkJCTk3N0IzODRBMTIyODgzRTkwMEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5l
ci5oICovLAorCQkJCUY0QjAwMTg4MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmNwcCAqLywKKwkJCQlGNEIwMDE4NzI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0b21TdHJp
bmdDYWNoZS5oICovLAogCQkJCTk3N0IzODRCMTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAgKi8sCiAJCQkJOTc3QjM4NEMxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlLmggKi8sCiAJCQkJOTc3QjM4NEQxMjI4ODNFOTAwQjgxRkY4IC8qIEhU
TUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCkBAIC0zMjI3OSw2ICszMjI4NCw3IEBACiAJCQkJQkM5
N0UyM0ExMDkxNDQ5NTAwMTBEMzYxIC8qIEhUTUxBbGxDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOENGRjdBQjBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTEFuY2hvckVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3RDJFMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJlYUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QjAwMTg5MjZFN0YyMUYwMDZFQUFCRSAvKiBI
VE1MQXRvbVN0cmluZ0NhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzVGMjhGQzFBODI3RDg0
MDBDMEYzMUYgLyogSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDQ2MTNBMjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg3MURDMUYwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9BdG9t
SFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmgK
aW5kZXggMmE0NTUyMWQzNGVjNDJkODk0ZWJkNmVmZjI5MjJiN2FmNGVjNmM2My4uMTNiZTljYmRj
MmVlYTIxZTVkMTBjYzI3ZjNjOGZmODEyMThkZWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0F0b21IVE1MVG9rZW4uaApAQCAtMjYsNiArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjAyLDExICsyMDMsMTEgQEAgaW5saW5lIHZv
aWQgQXRvbUhUTUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgSFRNTFRva2VuOjpB
dHRyaWJ1dGVMaXN0JgogICAgICAgICBpZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQXRvbVN0cmluZyBsb2NhbE5hbWUoYXR0cmli
dXRlLm5hbWUpOworICAgICAgICBhdXRvIGxvY2FsTmFtZSA9IEhUTUxBdG9tU3RyaW5nQ2FjaGU6
Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLm5hbWUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIE5eMiBmb3IgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLgogICAgICAgICBp
ZiAoIWhhc0F0dHJpYnV0ZShtX2F0dHJpYnV0ZXMsIGxvY2FsTmFtZSkpCi0gICAgICAgICAgICBt
X2F0dHJpYnV0ZXMudW5jaGVja2VkQXBwZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxB
dG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0b20oKSksIEF0b21TdHJpbmcoYXR0cmlidXRlLnZhbHVl
KSkpOworICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVuZChBdHRyaWJ1dGUo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSgpLCBsb2NhbE5hbWUsIG51bGxBdG9tKCkpLCBIVE1MQXRv
bVN0cmluZ0NhY2hlOjptYWtlQXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLnZhbHVlKSkpOwogICAg
IH0KIH0KIApAQCAtMjE4LDcgKzIxOSw3IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRN
TFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAgIG1f
bmFtZSA9IEF0b21TdHJpbmcodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9uYW1lID0gSFRNTEF0
b21TdHJpbmdDYWNoZTo6bWFrZVRhZ09yQXR0cmlidXRlTmFtZSh0b2tlbi5uYW1lKCkpOwogICAg
ICAgICBtX2RvY3R5cGVEYXRhID0gdG9rZW4ucmVsZWFzZURvY3R5cGVEYXRhKCk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlbjo6RW5kT2ZGaWxlOgpAQCAtMjI2LDcgKzIyNyw3
IEBAIGlubGluZSBBdG9tSFRNTFRva2VuOjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4p
CiAgICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFnOgogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRU
YWc6CiAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAgICAg
ICBtX25hbWUgPSBBdG9tU3RyaW5nKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fbmFtZSA9IEhU
TUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUodG9rZW4ubmFtZSgpKTsK
ICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2VuOjpDb21tZW50OgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MDQ1MjBjYmJkMDhkMWRmMTUzNDI2MjMzYzgyOWIyNTY2MjA1MWIyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJIVE1MQXRvbVN0cmluZ0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSFRNTEF0
b21TdHJpbmdDYWNoZTo6Q2FjaGUmIEhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlKFR5cGUgdHlw
ZSkKK3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPENhY2hlPiBjYWNoZXNb
Ml07CisgICAgcmV0dXJuIGNhY2hlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUpXS5nZXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEF0b21TdHJpbmdDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjYWM1N2E0NTljMzliZDM3
MzM5NzJhNDExNGViMmQzNWU0MTI0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmgKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MQXRvbVN0cmluZ0NhY2hlIHsK
K3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlVGFnT3JBdHRyaWJ1dGVOYW1lKGNvbnN0IFZl
Y3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1
cm4gbWFrZTxUeXBlOjpUYWdPckF0dHJpYnV0ZU5hbWU+KHN0cmluZyk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEF0b21TdHJpbmcgbWFrZUF0dHJpYnV0ZVZhbHVlKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5l
Q2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZTxUeXBlOjpBdHRy
aWJ1dGVWYWx1ZT4oc3RyaW5nKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FICh3ZWJraXQub3JnL2IvMjMwMDE5
KTogV2Ugc2hvdWxkIHRyeSB0byBmaW5kIG1vcmUgb3Bwb3J0dW5pdGllcyB0byBjbGVhciB0aGlz
IGNhY2hlIHdpdGhvdXQgaGluZGVyaW5nIHRoaXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgor
ICAgICAgICBjYWNoZShUeXBlOjpUYWdPckF0dHJpYnV0ZU5hbWUpLmZpbGwoeyB9KTsKKyAgICAg
ICAgY2FjaGUoVHlwZTo6QXR0cmlidXRlVmFsdWUpLmZpbGwoeyB9KTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7IFRhZ09yQXR0cmlidXRlTmFtZSwgQXR0
cmlidXRlVmFsdWUgfTsKKworICAgIHRlbXBsYXRlPEhUTUxBdG9tU3RyaW5nQ2FjaGU6OlR5cGUg
dHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEF0
b21TdHJpbmcgbWFrZShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgc3RyaW5n
KQorICAgIHsKKyAgICAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gZW1wdHlBdG9tKCk7CisKKyAgICAgICAgYXV0byBsZW5ndGggPSBzdHJpbmcuc2l6ZSgpOwor
ICAgICAgICBpZiAobGVuZ3RoID4gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUpCisgICAgICAgICAg
ICByZXR1cm4gQXRvbVN0cmluZyhzdHJpbmcpOworCisgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0
ZXIgPSBzdHJpbmdbMF07CisgICAgICAgIGF1dG8gbGFzdENoYXJhY3RlciA9IHN0cmluZ1tsZW5n
dGggLSAxXTsKKyAgICAgICAgYXV0byYgc2xvdCA9IGNhY2hlU2xvdCh0eXBlLCBmaXJzdENoYXJh
Y3RlciwgbGFzdENoYXJhY3RlciwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFlcXVhbChzbG90Lmlt
cGwoKSwgc3RyaW5nLmRhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICAgICAgQXRvbVN0cmluZyBy
ZXN1bHQoc3RyaW5nKTsKKyAgICAgICAgICAgIHNsb3QgPSByZXN1bHQ7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNsb3Q7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyYgY2FjaGVTbG90KFR5cGUgdHlw
ZSwgVUNoYXIgZmlyc3RDaGFyYWN0ZXIsIFVDaGFyIGxhc3RDaGFyYWN0ZXIsIFVDaGFyIGxlbmd0
aCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSAoZmlyc3RDaGFyYWN0ZXIgPDwgNikg
XiAoKGxhc3RDaGFyYWN0ZXIgPDwgMTQpIF4gZmlyc3RDaGFyYWN0ZXIpOworICAgICAgICBoYXNo
ICs9IChoYXNoID4+IDE0KSArIChsZW5ndGggPDwgMTQpOworICAgICAgICBoYXNoIF49IGhhc2gg
PDwgMTQ7CisgICAgICAgIHJldHVybiBjYWNoZSh0eXBlKVsoaGFzaCArIChoYXNoID4+IDYpKSAl
IGNhcGFjaXR5XTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbWF4U3RyaW5n
TGVuZ3RoRm9yQ2FjaGUgPSAzNjsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2FwYWNpdHkg
PSA1MTI7CisgICAgdXNpbmcgQ2FjaGUgPSBzdGQ6OmFycmF5PEF0b21TdHJpbmcsIGNhcGFjaXR5
PjsKKyAgICBzdGF0aWMgQ2FjaGUmIGNhY2hlKFR5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKaW5kZXggNmRlNmMwZTI2
MzMzMmJlMWQ2NzBlMWE2OWFmZTNjODY3YjRmMzA5Ny4uMWI0ZTQ4NWY3YTc1YzIxZDU2OGZkODVi
MjU0MDZlMjVkZjU1NjBiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlS
ZWxlYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZVN0
eWxlU2hlZXRPd25lci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpA
QCAtODUsNiArODYsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlTm9uY3JpdGljYWxNZW1vcnkoTWFp
bnRhaW5NZW1vcnlDYWNoZSBtYWludGFpbk1lbW9yeUNhY2hlKQogICAgICAgICBNZW1vcnlDYWNo
ZTo6c2luZ2xldG9uKCkucHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKDApOwogCiAgICAgSW5saW5l
U3R5bGVTaGVldE93bmVyOjpjbGVhckNhY2hlKCk7CisgICAgSFRNTEF0b21TdHJpbmdDYWNoZTo6
Y2xlYXIoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNyaXRpY2FsTWVtb3J5KFN5bmNocm9u
b3VzIHN5bmNocm9ub3VzLCBNYWludGFpbkJhY2tGb3J3YXJkQ2FjaGUgbWFpbnRhaW5CYWNrRm9y
d2FyZENhY2hlLCBNYWludGFpbk1lbW9yeUNhY2hlIG1haW50YWluTWVtb3J5Q2FjaGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tCmluZGV4IDMz
Y2RlOWI2OWEwNWM4NTllOTFiZGI3OTQ0MGIzODY5N2E4ODIxNTEuLjM1NjVkYjM1ZmI4OTI0ZjEx
ZTVjNzgxNzNmNGIyNTlhMjgzY2UxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29j
b2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCIKICNpbXBvcnQgIkdDQ29udHJvbGxlci5o
IgorI2ltcG9ydCAiSFRNTEF0b21TdHJpbmdDYWNoZS5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9v
bC5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgiCiAjaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgpAQCAt
ODMsNyArODQsNiBAQCB2b2lkIHBsYXRmb3JtUmVsZWFzZUdyYXBoaWNzTWVtb3J5KENyaXRpY2Fs
KQogCiB2b2lkIGpldHRpc29uRXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKCkK
IHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFByb3RlY3QgYWdhaW5zdCBkb2lu
ZyBleGNlc3NpdmUgamV0dGlzb25pbmcgZHVyaW5nIHJlcGVhdGVkIG5hdmlnYXRpb25zLgogICAg
IGNvbnN0IGF1dG8gbWluaW11bVRpbWVTaW5jZU5hdmlnYXRpb24gPSAyX3M7CiAKQEAgLTk1LDEw
ICs5NSwxMyBAQCB2b2lkIGpldHRpc29uRXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0
aW9uKCkKICAgICBpZiAoIXNob3VsZEpldHRpc29uKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRocm93IGF3YXkgbGlua2VkIEpTIGNvZGUuIExp
bmtlZCBjb2RlIGlzIHRpZWQgdG8gYSBnbG9iYWwgb2JqZWN0IGFuZCBpcyBub3QgcmV1c2FibGUu
CiAgICAgLy8gVGhlIGltbWVkaWF0ZSBtZW1vcnkgc2F2aW5ncyBvdXR3ZWlnaCB0aGUgY29zdCBv
ZiByZWNvbXBpbGF0aW9uIGluIGNhc2Ugd2UgZ28gYmFjayBhZ2Fpbi4KICAgICBHQ0NvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmRlbGV0ZUFsbExpbmtlZENvZGUoSlNDOjpEZWxldGVBbGxDb2RlSWZO
b3RDb2xsZWN0aW5nKTsKICNlbmRpZgorCisgICAgSFRNTEF0b21TdHJpbmdDYWNoZTo6Y2xlYXIo
KTsKIH0KIAogdm9pZCByZWdpc3Rlck1lbW9yeVJlbGVhc2VOb3RpZnlDYWxsYmFja3MoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>