<?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>237049</bug_id>
          
          <creation_ts>2022-02-22 11:46:51 -0800</creation_ts>
          <short_desc>Drop StringHasher::hashMemory() and use the modern Hasher instead</short_desc>
          <delta_ts>2022-02-23 12:00:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>236852</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844815</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 11:46:51 -0800</bug_when>
    <thetext>Drop StringHasher::hashMemory() and use the modern Hasher instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844816</commentid>
    <comment_count>1</comment_count>
      <attachid>452888</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 11:48:29 -0800</bug_when>
    <thetext>Created attachment 452888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844834</commentid>
    <comment_count>2</comment_count>
      <attachid>452895</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 12:56:55 -0800</bug_when>
    <thetext>Created attachment 452895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844961</commentid>
    <comment_count>3</comment_count>
      <attachid>452895</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-22 17:37:07 -0800</bug_when>
    <thetext>Comment on attachment 452895
Patch

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

&gt; Source/WTF/wtf/SchedulePair.h:77
&gt; +        return computeHash(reinterpret_cast&lt;uintptr_t&gt;(pair-&gt;runLoop()), pair-&gt;mode() ? CFHash(pair-&gt;mode()) : 0);

Not new, but we should probably not hash a CFHash() here and should just hash the CFStringRef (not needed for this change, just pointing it out).

&gt; Source/WTF/wtf/UUID.h:101
&gt; +    add(hasher, high, low);

Probably worth just adding an overload of add(Hasher, ..) for UInt128. But I think you can also use the UInt128Low64/UInt128High64 helpers instead of the explicit bit operations.

&gt; Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h:93
&gt; -    static unsigned hash(const IDBResourceIdentifier&amp; a) { return a.hash(); }
&gt; +    static unsigned hash(const IDBResourceIdentifier&amp; a) { return computeHash(a); }

Would be nice if we could avoid having this and instead have HashTable (or whatever is using these Hash structs) try to call add(Hasher,...) if it exists.

&gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));

This will compute a different hash value than the old one, and will be more expensive due to no using cached hash values in the strings. This is likely a better hash overall since you get more entropy per-byte, but it might be a slow down due to rehashing each string.

&gt; Source/WebKitLegacy/mac/History/BinaryPropertyList.cpp:81
&gt; +    auto* integers = array.integers();
&gt; +    for (size_t i = 0; i &lt; array.size(); ++i)
&gt; +        add(hasher, integers[i]);

I would be nice if this could be done instead:

    add(hasher, Span(array.integers(), array.size()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844962</commentid>
    <comment_count>4</comment_count>
      <attachid>452895</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 17:44:32 -0800</bug_when>
    <thetext>Comment on attachment 452895
Patch

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

Do we need to measure the performance effect of all these hashing changes?

&gt; Source/WTF/wtf/SchedulePair.h:77
&gt; +        return computeHash(reinterpret_cast&lt;uintptr_t&gt;(pair-&gt;runLoop()), pair-&gt;mode() ? CFHash(pair-&gt;mode()) : 0);

Seems like it would be slightly more elegant to have add(hasher&amp;, const SchedulePair&amp;) and call &quot;return computeHash(*pair)&quot; here.

This code is still doing a hash of hashes, by calling CFHash on CFStringRef. Is there an alternative? Should we teach Hasher how to hash a CFStringRef? Put that in a header somewhere so we can reuse it?

Do we really need to convert the run loop pointer to an integer to hash it? Can we hash pointers without reinterpret_cast, or is it ambiguous whether that means to hash the address or the data structure at that address? Is converting to an integer the way to say we want to hash the address? Mainly, I think uintptr_t is a leftover from wanting the same type for two integers that we wanted to pass to hashMemory.

&gt; Source/WTF/wtf/UUID.h:97
&gt; +inline void add(Hasher&amp; hasher, const UUID&amp; uuid)

Probably should take UUID instead of const UUID&amp;.

&gt; Source/WTF/wtf/UUID.h:101
&gt; +    auto high = static_cast&lt;uint64_t&gt;(uuid.m_data &gt;&gt; 64);
&gt; +    auto low = static_cast&lt;uint64_t&gt;(uuid.m_data &amp; 0xffffffffffffffff);
&gt; +    add(hasher, high, low);

Seems like we should have:

    void add(Hasher&amp;, UInt128)

And have this call that. Can still have it live in this header for now.

&gt; Source/WebCore/dom/QualifiedName.h:123
&gt; +inline void add(Hasher&amp; hasher, const QualifiedName&amp; name)
&gt; +{
&gt; +    auto impl = name.impl();
&gt; +    add(hasher, impl-&gt;m_prefix, impl-&gt;m_localName, impl-&gt;m_namespace);
&gt; +}

I often like to just overload and also have a second function:

    void add(Hasher&amp;, const QualifiedNameImpl&amp;)

And then have this one be:

    add(hasher, *name.impl());

Not *sure* that is better, but it seems appealing to me.

&gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));

I don’t think we need this value_or(0) here.

Also seems like we’d like to have:

    add(Hasher&amp;, const SecurityOrigin&amp;);

Then here just call computeHash(*origin);

&gt; Source/WebCore/platform/ScriptExecutionContextIdentifier.h:79
&gt; +inline void add(Hasher&amp; hasher, const ProcessQualified&lt;UUID&gt;&amp; uuid)
&gt; +{
&gt; +    add(hasher, uuid.object());
&gt; +}

Should this instead be a function template that works on all ProcessQualified&lt;&gt;?

&gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:50
&gt; +    return computeHash(fontHash, flags);

The use of uintptr_t in this function doesn’t really make sense any more. We can hash any integer types that are appropriate, and seems unlikely we need a pointer-sized int for the flags, nor do we need to cast CFHashCode to uintptr_t.

Also a little strange to put these bits all together in a flags integer when the hasher can just be passed multiple things; this is probably a bit more efficient, but why not just hash all the fields in the most straightforward way.

Another example of hashing a CFStringRef by hashing a hash, and it’s not great.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataCGWin.cpp:137
&gt;      unsigned fontHash = m_font ? m_font-&gt;hash() : 0;

Might need a hasher that knows how to dereference a pointer.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataCGWin.cpp:140
&gt; +    return computeHash(fontHash, cgFontHash, ctFontHash, m_useGDI);

The &quot;hashing a hash&quot; pattern again, on both CFStringRef but also on m_font. But how much do we care about code in CGWin? Probably close to retirement at this point.

&gt; Source/WebKitLegacy/mac/History/BinaryPropertyList.cpp:82
&gt; +inline void add(Hasher&amp; hasher, const IntegerArray&amp; array)
&gt; +{
&gt; +    auto* integers = array.integers();
&gt; +    for (size_t i = 0; i &lt; array.size(); ++i)
&gt; +        add(hasher, integers[i]);
&gt; +}

A little strange that if there’s nothing in the array the hash doesn’t get changed at all. I am confused about what the best practice should be for adding empty collections to a hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844963</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 17:44:53 -0800</bug_when>
    <thetext>Nice that Sam and I made many of the same comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844965</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 17:58:31 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 452895 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452895&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/SchedulePair.h:77
&gt; &gt; +        return computeHash(reinterpret_cast&lt;uintptr_t&gt;(pair-&gt;runLoop()), pair-&gt;mode() ? CFHash(pair-&gt;mode()) : 0);
&gt; 
&gt; Not new, but we should probably not hash a CFHash() here and should just
&gt; hash the CFStringRef (not needed for this change, just pointing it out).

Yes, I wondered about that but tried to be conservative since this is a pre-existing issue.
Hashing the CFStringRef would produce a better hash but would be more expensive.

&gt; &gt; Source/WTF/wtf/UUID.h:101
&gt; &gt; +    add(hasher, high, low);
&gt; 
&gt; Probably worth just adding an overload of add(Hasher, ..) for UInt128. But I
&gt; think you can also use the UInt128Low64/UInt128High64 helpers instead of the
&gt; explicit bit operations.

The reason UUID uses the bit operations and not UInt128Low64()/UInt128High64() is that those functions work on a UInt128Impl, which is an implementation detail.
On some platforms, UInt128 is a __uint128_t, not a UInt128Impl.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h:93
&gt; &gt; -    static unsigned hash(const IDBResourceIdentifier&amp; a) { return a.hash(); }
&gt; &gt; +    static unsigned hash(const IDBResourceIdentifier&amp; a) { return computeHash(a); }
&gt; 
&gt; Would be nice if we could avoid having this and instead have HashTable (or
&gt; whatever is using these Hash structs) try to call add(Hasher,...) if it
&gt; exists.
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; &gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));
&gt; 
&gt; This will compute a different hash value than the old one, and will be more
&gt; expensive due to no using cached hash values in the strings. This is likely
&gt; a better hash overall since you get more entropy per-byte, but it might be a
&gt; slow down due to rehashing each string.

Well, technically, those are AtomStrings so we are not actually going to re-hash strings per se. We&apos;ll just hash pointers.
Therefore, I think it isn&apos;t as expensive as it looks. You are right though that it is more expensive than using the cached hash.
The alternative though would be to use the cached hash and give that to Hasher. Sadly, this would hash a hash, which is not optimal.

Would we prefer that?

&gt; 
&gt; &gt; Source/WebKitLegacy/mac/History/BinaryPropertyList.cpp:81
&gt; &gt; +    auto* integers = array.integers();
&gt; &gt; +    for (size_t i = 0; i &lt; array.size(); ++i)
&gt; &gt; +        add(hasher, integers[i]);
&gt; 
&gt; I would be nice if this could be done instead:
&gt; 
&gt;     add(hasher, Span(array.integers(), array.size()));

This may work already, I&apos;ll give it a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844967</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 18:26:16 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 452895 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452895&amp;action=review
&gt; 
&gt; Do we need to measure the performance effect of all these hashing changes?
&gt; 
&gt; &gt; Source/WTF/wtf/SchedulePair.h:77
&gt; &gt; +        return computeHash(reinterpret_cast&lt;uintptr_t&gt;(pair-&gt;runLoop()), pair-&gt;mode() ? CFHash(pair-&gt;mode()) : 0);
&gt; 
&gt; Seems like it would be slightly more elegant to have add(hasher&amp;, const
&gt; SchedulePair&amp;) and call &quot;return computeHash(*pair)&quot; here.
&gt; 
&gt; This code is still doing a hash of hashes, by calling CFHash on CFStringRef.
&gt; Is there an alternative? Should we teach Hasher how to hash a CFStringRef?
&gt; Put that in a header somewhere so we can reuse it?
&gt; 
&gt; Do we really need to convert the run loop pointer to an integer to hash it?
&gt; Can we hash pointers without reinterpret_cast, or is it ambiguous whether
&gt; that means to hash the address or the data structure at that address? Is
&gt; converting to an integer the way to say we want to hash the address? Mainly,
&gt; I think uintptr_t is a leftover from wanting the same type for two integers
&gt; that we wanted to pass to hashMemory.
&gt; 
&gt; &gt; Source/WTF/wtf/UUID.h:97
&gt; &gt; +inline void add(Hasher&amp; hasher, const UUID&amp; uuid)
&gt; 
&gt; Probably should take UUID instead of const UUID&amp;.
&gt; 
&gt; &gt; Source/WTF/wtf/UUID.h:101
&gt; &gt; +    auto high = static_cast&lt;uint64_t&gt;(uuid.m_data &gt;&gt; 64);
&gt; &gt; +    auto low = static_cast&lt;uint64_t&gt;(uuid.m_data &amp; 0xffffffffffffffff);
&gt; &gt; +    add(hasher, high, low);
&gt; 
&gt; Seems like we should have:
&gt; 
&gt;     void add(Hasher&amp;, UInt128)
&gt; 
&gt; And have this call that. Can still have it live in this header for now.
&gt; 
&gt; &gt; Source/WebCore/dom/QualifiedName.h:123
&gt; &gt; +inline void add(Hasher&amp; hasher, const QualifiedName&amp; name)
&gt; &gt; +{
&gt; &gt; +    auto impl = name.impl();
&gt; &gt; +    add(hasher, impl-&gt;m_prefix, impl-&gt;m_localName, impl-&gt;m_namespace);
&gt; &gt; +}
&gt; 
&gt; I often like to just overload and also have a second function:
&gt; 
&gt;     void add(Hasher&amp;, const QualifiedNameImpl&amp;)
&gt; 
&gt; And then have this one be:
&gt; 
&gt;     add(hasher, *name.impl());
&gt; 
&gt; Not *sure* that is better, but it seems appealing to me.
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; &gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));
&gt; 
&gt; I don’t think we need this value_or(0) here.
&gt; 
&gt; Also seems like we’d like to have:
&gt; 
&gt;     add(Hasher&amp;, const SecurityOrigin&amp;);
&gt; 
&gt; Then here just call computeHash(*origin);
&gt; 
&gt; &gt; Source/WebCore/platform/ScriptExecutionContextIdentifier.h:79
&gt; &gt; +inline void add(Hasher&amp; hasher, const ProcessQualified&lt;UUID&gt;&amp; uuid)
&gt; &gt; +{
&gt; &gt; +    add(hasher, uuid.object());
&gt; &gt; +}
&gt; 
&gt; Should this instead be a function template that works on all
&gt; ProcessQualified&lt;&gt;?

There is already one generic one for ProcessQualified&lt;&gt; and hashes both the object and the processIdentifier. However, the ProcessQualified&lt;UUID&gt; specialization really only needs to hash the object which it is a UUID. It maintains pre-exiting behavior and performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844968</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 18:28:47 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; However, the ProcessQualified&lt;UUID&gt;
&gt; specialization really only needs to hash the object which it is a UUID. It
&gt; maintains pre-exiting behavior and performance.

Definitely needs a comment, something like this:

    // Since UUIDs are unique on their own, optimize by not hashing the process identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844972</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 18:41:55 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 452895 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452895&amp;action=review
&gt; 
&gt; Do we need to measure the performance effect of all these hashing changes?

You are right that there is a slight risk. I&apos;ll monitor the perf bots after I land to make sure there is no obvious regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844973</commentid>
    <comment_count>10</comment_count>
      <attachid>452926</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 18:42:45 -0800</bug_when>
    <thetext>Created attachment 452926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844974</commentid>
    <comment_count>11</comment_count>
      <attachid>452927</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 18:47:51 -0800</bug_when>
    <thetext>Created attachment 452927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844980</commentid>
    <comment_count>12</comment_count>
      <attachid>452927</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 19:09:49 -0800</bug_when>
    <thetext>Comment on attachment 452927
Patch

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

Looks great

&gt; Source/WTF/wtf/Hasher.h:79
&gt; +inline void add(Hasher&amp; hasher, const UInt128&amp; value)

I suggest UInt128 instead of const UInt128&amp;.

&gt; Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h:89
&gt; +    add(hasher, identifier.connectionIdentifier(), identifier.m_resourceNumber);

Just realized this is a friend, so maybe we should use both data members instead of using a getter for one and the data member for the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844983</commentid>
    <comment_count>13</comment_count>
      <attachid>452929</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 19:26:10 -0800</bug_when>
    <thetext>Created attachment 452929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845006</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-22 22:13:41 -0800</bug_when>
    <thetext>Committed r290349 (247667@main): &lt;https://commits.webkit.org/247667@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 452929.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845007</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-22 22:14:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/89337284&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845210</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-23 10:27:56 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; &gt; &gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));
&gt; &gt; 
&gt; &gt; This will compute a different hash value than the old one, and will be more
&gt; &gt; expensive due to no using cached hash values in the strings. This is likely
&gt; &gt; a better hash overall since you get more entropy per-byte, but it might be a
&gt; &gt; slow down due to rehashing each string.
&gt; 
&gt; Well, technically, those are AtomStrings so we are not actually going to
&gt; re-hash strings per se. We&apos;ll just hash pointers.
&gt; Therefore, I think it isn&apos;t as expensive as it looks. You are right though
&gt; that it is more expensive than using the cached hash.
&gt; The alternative though would be to use the cached hash and give that to
&gt; Hasher. Sadly, this would hash a hash, which is not optimal.
&gt; 
&gt; Would we prefer that?

I don&apos;t think those are AtomStrings, though perhaps I am missing something. SecurityOrigin::protocol() returns a const String&amp;.

I actually think this is likely better better, but that you should just be on the lookout for a possible perf regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845214</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-23 10:30:01 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #16)
&gt; &gt; &gt; &gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; &gt; &gt; &gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));
&gt; &gt; &gt; 
&gt; &gt; &gt; This will compute a different hash value than the old one, and will be more
&gt; &gt; &gt; expensive due to no using cached hash values in the strings. This is likely
&gt; &gt; &gt; a better hash overall since you get more entropy per-byte, but it might be a
&gt; &gt; &gt; slow down due to rehashing each string.
&gt; &gt; 
&gt; &gt; Well, technically, those are AtomStrings so we are not actually going to
&gt; &gt; re-hash strings per se. We&apos;ll just hash pointers.
&gt; &gt; Therefore, I think it isn&apos;t as expensive as it looks. You are right though
&gt; &gt; that it is more expensive than using the cached hash.
&gt; &gt; The alternative though would be to use the cached hash and give that to
&gt; &gt; Hasher. Sadly, this would hash a hash, which is not optimal.
&gt; &gt; 
&gt; &gt; Would we prefer that?
&gt; 
&gt; I don&apos;t think those are AtomStrings, though perhaps I am missing something.
&gt; SecurityOrigin::protocol() returns a const String&amp;.

Right, those are not. My comment was meant for QualifiedNameComponents / QualifiedName.

&gt; I actually think this is likely better better, but that you should just be
&gt; on the lookout for a possible perf regression.

Agreed. Will check the bots today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845251</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-23 12:00:40 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #17)
&gt; (In reply to Sam Weinig from comment #16)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/page/SecurityOriginHash.h:41
&gt; &gt; &gt; &gt; &gt; +        return computeHash(origin-&gt;protocol(), origin-&gt;host(), origin-&gt;port().value_or(0));
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This will compute a different hash value than the old one, and will be more
&gt; &gt; &gt; &gt; expensive due to no using cached hash values in the strings. This is likely
&gt; &gt; &gt; &gt; a better hash overall since you get more entropy per-byte, but it might be a
&gt; &gt; &gt; &gt; slow down due to rehashing each string.
&gt; &gt; &gt; 
&gt; &gt; &gt; Well, technically, those are AtomStrings so we are not actually going to
&gt; &gt; &gt; re-hash strings per se. We&apos;ll just hash pointers.
&gt; &gt; &gt; Therefore, I think it isn&apos;t as expensive as it looks. You are right though
&gt; &gt; &gt; that it is more expensive than using the cached hash.
&gt; &gt; &gt; The alternative though would be to use the cached hash and give that to
&gt; &gt; &gt; Hasher. Sadly, this would hash a hash, which is not optimal.
&gt; &gt; &gt; 
&gt; &gt; &gt; Would we prefer that?
&gt; &gt; 
&gt; &gt; I don&apos;t think those are AtomStrings, though perhaps I am missing something.
&gt; &gt; SecurityOrigin::protocol() returns a const String&amp;.
&gt; 
&gt; Right, those are not. My comment was meant for QualifiedNameComponents /
&gt; QualifiedName.
&gt; 
&gt; &gt; I actually think this is likely better better, but that you should just be
&gt; &gt; on the lookout for a possible perf regression.
&gt; 
&gt; Agreed. Will check the bots today.

I&apos;ve just checked the perf bots and it looks to be perf-neutral.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452888</attachid>
            <date>2022-02-22 11:48:29 -0800</date>
            <delta_ts>2022-02-22 12:56:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237049-20220222114829.patch</filename>
            <type>text/plain</type>
            <size>28207</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRmMmVmNWZkODRlNjQ3YTAzY2Y2M2Uz
YWVkMTMxZTIxNzZkMDE4ODcuLmRkOGEwMjkzNWVhZjY2NDliNmVjNTZkY2ZlZTNlNmYyNGRiN2Vl
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFu
ZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvU2NoZWR1bGVQYWlyLmg6CisgICAgICAgIChX
VEY6OlNjaGVkdWxlUGFpckhhc2g6Omhhc2gpOgorICAgICAgICAqIHd0Zi9VVUlELmNwcDoKKyAg
ICAgICAgKFdURjo6VVVJRDo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1VV
SUQuaDoKKyAgICAgICAgKFdURjo6VVVJRDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV1RGOjphZGQpOgorICAgICAgICAoV1RGOjpVVUlESGFzaDo6aGFzaCk6Cisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeSk6IERlbGV0ZWQuCisKIDIwMjItMDItMjIgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNlcnZpY2Ugd29ya2VyIGFuZCBwdXNo
IEFQSSBwcmVmZXJlbmNlIGZyb20gUnVudGltZUVuYWJsZWRGZWF0dXJlcyB0byBTZXR0aW5ncwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGExZjE5OTZhNmFlZDIxMzczMGRjOGQ5YTM0MzFhY2JmNTVhMTM4N2IuLjVl
MTgyZjZkMzExNTMxNjVhZDI1MmNlOTExZDJkYzIwZWY2MTEwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAyMi0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIERyb3AgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9k
ZXJuIEhhc2hlciBpbnN0ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzcwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZp
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXNv
dXJjZUlkZW50aWZpZXJIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc291cmNl
SWRlbnRpZmllcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0F0dHJpYnV0
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTaGFy
ZWRPYmplY3RQb29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U2hhcmVkT2JqZWN0
UG9vbDo6Y2FjaGVkU2hhcmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjphdHRyaWJ1dGVIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vUXVhbGlm
aWVkTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWRO
YW1lSW1wbDo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1l
Lmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzaENvbXBv
bmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UU5hbWVDb21wb25lbnRzVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgICogcGFnZS9HbG9iYWxXaW5kb3dJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV1RGOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVySGFzaDo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyOjpoYXNoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NRdWFsaWZpZWQ8VVVJRD46Omhhc2ggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpjb21wdXRlSGFzaCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZH
RWxlbWVudElubGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUhhc2hUcmFu
c2xhdG9yOjpoYXNoKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uS2V5OjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NlcnZp
Y2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRk
KToKKyAgICAgICAgKFdURjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleUhhc2g6Omhhc2gp
OgorCiAyMDIyLTAyLTIyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gUGFydGlhbCByb2xsb3V0IG9mIHIyODk5NDYsIGJyb2tlIE5ldGZsaXgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5NTI0NWI2ZmViMzNkMzQxM2U5NTI1YmIzYjZh
ZjgyMGMxNTQ4MjdmLi41ZGZmZDI3OWI5NDg3ZTA0ZjNmNGEwNzQ2ODcxMjljNjFiMDZlNGVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDItMjIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L0Jp
bmFyeVByb3BlcnR5TGlzdC5jcHA6CisgICAgICAgIChhZGQpOgorICAgICAgICAoSW50ZWdlckFy
cmF5SGFzaDo6aGFzaCk6CisKIDIwMjItMDItMTggIFJvYmVydCBKZW5uZXIgIDxKZW5uZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjkwMTQ5LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvU2NoZWR1bGVQYWlyLmggYi9Tb3VyY2UvV1RGL3d0Zi9TY2hl
ZHVsZVBhaXIuaAppbmRleCA0NDczYzVjY2YwMDdiN2VmNWM0OTM5YWI0Zjg3ZDE0YjY1ZTA3M2Fi
Li5jYTZiYzA2N2I5ZGYwNTc4NmI2MWZmOWE2YzYwYjkwMGJlOTIxMDNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVs
ZVBhaXIuaApAQCAtMjksNiArMjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03Myw4ICs3NCw3IEBAIHByaXZhdGU6CiBzdHJ1Y3Qg
U2NoZWR1bGVQYWlySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRy
PFNjaGVkdWxlUGFpcj4mIHBhaXIpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVz
WzJdID0geyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFpci0+cnVuTG9vcCgpKSwgcGFp
ci0+bW9kZSgpID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwIH07Ci0gICAgICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFp
ci0+cnVuTG9vcCgpKSwgcGFpci0+bW9kZSgpID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8U2NoZWR1bGVQYWly
PiYgYSwgY29uc3QgUmVmUHRyPFNjaGVkdWxlUGFpcj4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlE
LmNwcAppbmRleCAyZGVkOTlkZDJiNjBlYjNmNTY2Yjc0NWI2MGNkZWZlOTI1NDdjMDM1Li4wOWZl
Mjk3NTJkMzliNzRjMmY1MDA1YjFkNDkxZWEyYmVjZTA1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9VVUlELmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlELmNwcApAQCAtNTcsMTEg
KzU3LDYgQEAgVVVJRDo6VVVJRCgpCiAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PFVJbnQxMjg+
KGhpZ2gpIDw8IDY0KSB8IGxvdzsKIH0KIAotdW5zaWduZWQgVVVJRDo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPigmbV9kYXRhKSwgMTYpOwotfQotCiBTdHJpbmcgVVVJRDo6dG9T
dHJpbmcoKSBjb25zdAogewogICAgIGF1dG8gaGlnaCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RhdGEgPj4gNjQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5oIGIvU291cmNl
L1dURi93dGYvVVVJRC5oCmluZGV4IGZlMzNjMGY0YzJmM2EzMmIyNDc3ZWNjNWE3YzQzOGQ0YWQ5
YmY5NTEuLmRlZmEwNzJhNWJhZjAzMWEyZDVhNjUwZDc1ZTg1MGU5NDgyNjg0NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1VVSUQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlELmgKQEAg
LTgzLDE5ICs4MywyNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA9PSBkZWxldGVkVmFsdWU7IH0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fZGF0YTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBVVUlEKCk7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0IFVVSUQm
KTsKIAogICAgIFVJbnQxMjggbV9kYXRhOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYg
aGFzaGVyLCBjb25zdCBVVUlEJiB1dWlkKQoreworICAgIGF1dG8gaGlnaCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih1dWlkLm1fZGF0YSA+PiA2NCk7CisgICAgYXV0byBsb3cgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odXVpZC5tX2RhdGEgJiAweGZmZmZmZmZmZmZmZmZmZmYpOworICAgIGFkZCho
YXNoZXIsIGhpZ2gsIGxvdyk7Cit9CisKIHN0cnVjdCBVVUlESGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVVVJRCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVVVJRCYga2V5KSB7IHJldHVybiBjb21wdXRlSGFz
aChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVVVJRCYgYSwgY29uc3QgVVVJ
RCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2hl
ci5oCmluZGV4IGE1ZGQ4ZDhmYmI1MThhMTk3MzFlNTA1NzgzNWYzZmUyZTk2ZGYzZWMuLjI5Yjk4
N2M0Mzc3OWRjNDA2NmE1YjY1ZTljNGU1YTk1Nzc1NTBjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdIYXNoZXIuaApAQCAtMjI1LDIzICsyMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBEZWZhdWx0Q29udmVydGVyPihjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXJzQ291bnQgLSAxKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAg
ICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAg
IFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1p
bmdBbGlnbmVkKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIp
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFy
KTsgKytpKQotICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7Ci0KLSAg
ICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90
IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCiBw
cml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFs
YW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmll
ci5oCmluZGV4IGJkMzk1NGEyODk3M2NlYjhhNWJmNjQ4ZjRhYTUxMjNmMmVmYmVmNDUuLjNhMzIw
MTY2YjRkMjEyYjBhZTIzYTZlYWRhMTJkMzEzY2ZiZTI4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
UHJvY2Vzc0lkZW50aWZpZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDEy
ICs1NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFtX3Jlc291cmNlTnVtYmVyICYmICFt
X2lkYkNvbm5lY3Rpb25JZGVudGlmaWVyOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAotICAgIHsKLSAgICAgICAgdWludDY0X3QgaGFzaENvZGVzWzJdID0geyBtX2lkYkNvbm5l
Y3Rpb25JZGVudGlmaWVyLnRvVUludDY0KCksIG1fcmVzb3VyY2VOdW1iZXIgfTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENv
ZGVzKTsKLSAgICB9Ci0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBvdGhlcikgY29uc3QK
ICAgICB7CkBAIC04MywxNCArNzcsMjAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBzdHJ1Y3QgSURCUmVzb3VyY2VJZGVudGlmaWVySGFzaFRyYWl0czsKKyAgICBmcmllbmQgdm9p
ZCBhZGQoSGFzaGVyJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAKICAgICBJREJS
ZXNvdXJjZUlkZW50aWZpZXIoSURCQ29ubmVjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291
cmNlSWRlbnRpZmllcik7CiAgICAgSURCQ29ubmVjdGlvbklkZW50aWZpZXIgbV9pZGJDb25uZWN0
aW9uSWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX3Jlc291cmNlTnVtYmVyIHsgMCB9OwogfTsK
IAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci5jb25uZWN0
aW9uSWRlbnRpZmllcigpLCBpZGVudGlmaWVyLm1fcmVzb3VyY2VOdW1iZXIpOworfQorCiBzdHJ1
Y3QgSURCUmVzb3VyY2VJZGVudGlmaWVySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYSkgeyBy
ZXR1cm4gY29tcHV0ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIGEsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKaW5kZXggMGQ2MjVl
OTRlYzQ3YmYyY2EwOGY1ZDljYjVjN2IwNDJmZDY0NTI1YS4uOWFjNGRiYjFiMjBhZjRiMDcyMDgw
NjNiYzgyNzZmNWYyNTM0MzY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApAQCAtMjUsNiArMjUs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDYgKzc1LDEx
IEBAIHByaXZhdGU6CiAgICAgQXRvbVN0cmluZyBtX3ZhbHVlOwogfTsKIAoraW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKK3sKKyAgICBh
ZGQoaGFzaGVyLCBhdHRyaWJ1dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7Cit9CisKIGlu
bGluZSBib29sIEF0dHJpYnV0ZTo6bmFtZU1hdGNoZXNGaWx0ZXIoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyUHJlZml4LCBjb25zdCBBdG9tU3RyaW5n
JiBmaWx0ZXJMb2NhbE5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWVzcGFjZVVSSSkK
IHsKICAgICBpZiAoZmlsdGVyTG9jYWxOYW1lICE9IG5hbWUubG9jYWxOYW1lKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCmluZGV4IDhhYzQx
YmExYzBjZWFmZWQ3Zjk0MTczYWI4ZjNkNWEwZmIxMDI1MDcuLjliZTA4ZmM1YjU0Y2FkMGFlODUy
ODNlNWRmZDU0YzY2OWNiMWQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFNoYXJlZE9iamVjdFBvb2wuY3BwCkBAIC0zMiwxMSArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWlubGluZSB1bnNpZ25lZCBhdHRyaWJ1dGVIYXNoKGNvbnN0IFZlY3RvcjxBdHRy
aWJ1dGU+JiBhdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkoYXR0cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMuc2l6ZSgpICogc2l6ZW9mKEF0dHJpYnV0
ZSkpOwotfQotCiBpbmxpbmUgYm9vbCBoYXNTYW1lQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYgYXR0cmlidXRlcywgU2hhcmVhYmxlRWxlbWVudERhdGEmIGVsZW1lbnREYXRhKQog
ewogICAgIGlmIChhdHRyaWJ1dGVzLnNpemUoKSAhPSBlbGVtZW50RGF0YS5sZW5ndGgoKSkKQEAg
LTQ4LDcgKzQzLDcgQEAgUmVmPFNoYXJlYWJsZUVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9i
amVjdFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2kKIHsKICAgICBBU1NFUlQoIWF0
dHJpYnV0ZXMuaXNFbXB0eSgpKTsKIAotICAgIGF1dG8mIGNhY2hlZERhdGEgPSBtX3NoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGUuYWRkKGF0dHJpYnV0ZUhhc2goYXR0cmlidXRlcyksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBjYWNoZWREYXRhID0gbV9zaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlLmFkZChjb21wdXRlSGFzaChhdHRyaWJ1dGVzKSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogCiAgICAgLy8gRklYTUU6IFRoaXMgcHJldmVudHMgc2hhcmluZyB3aGVuIHRo
ZXJlJ3MgYSBoYXNoIGNvbGxpc2lvbi4KICAgICBpZiAoY2FjaGVkRGF0YSAmJiAhaGFzU2FtZUF0
dHJpYnV0ZXMoYXR0cmlidXRlcywgKmNhY2hlZERhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuY3BwCmluZGV4IDY2MDA4Y2YzMjI3OTBmMTgwMDdhMmNmNzRmMjhiMjJhZGIyMDY0M2Yu
LjY2MGQ5ZmFlYzdhZGUwMDRjNDVhYmM5NzcwMmM2MzJkOWNhNDY5ODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUXVhbGlmaWVkTmFtZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgY29uc3QgQXRvbVN0cmluZyYg
UXVhbGlmaWVkTmFtZTo6bG9jYWxOYW1lVXBwZXIoKSBjb25zdAogdW5zaWduZWQgUXVhbGlmaWVk
TmFtZTo6UXVhbGlmaWVkTmFtZUltcGw6OmNvbXB1dGVIYXNoKCkgY29uc3QKIHsKICAgICBRdWFs
aWZpZWROYW1lQ29tcG9uZW50cyBjb21wb25lbnRzID0geyBtX3ByZWZpeC5pbXBsKCksIG1fbG9j
YWxOYW1lLmltcGwoKSwgbV9uYW1lc3BhY2UuaW1wbCgpIH07Ci0gICAgcmV0dXJuIGhhc2hDb21w
b25lbnRzKGNvbXBvbmVudHMpOworICAgIHJldHVybiBXVEY6OmNvbXB1dGVIYXNoKGNvbXBvbmVu
dHMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFt
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAppbmRleCAzY2Y5OGNkMjA3
Yzk3NTQ3ZmEwN2FlYTZkZDQ2MDQzZjkwMGVhMTExLi41MjM4Njc0MzViMzQxYjI1ZWRmNDA5YjZl
MGIzN2U5OGY5MWQ2NWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVk
TmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKQEAgLTIxLDE3
ICsyMSwyMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RydWN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzIHsKLSAgICBTdHJpbmdJbXBsKiBtX3By
ZWZpeDsKLSAgICBTdHJpbmdJbXBsKiBtX2xvY2FsTmFtZTsKLSAgICBTdHJpbmdJbXBsKiBtX25h
bWVzcGFjZTsKKyAgICBBdG9tU3RyaW5nSW1wbCogbV9wcmVmaXg7CisgICAgQXRvbVN0cmluZ0lt
cGwqIG1fbG9jYWxOYW1lOworICAgIEF0b21TdHJpbmdJbXBsKiBtX25hbWVzcGFjZTsKIH07CiAK
K2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBv
bmVudHMmIGNvbXBvbmVudHMpCit7CisgICAgYWRkKGhhc2hlciwgY29tcG9uZW50cy5tX3ByZWZp
eCwgY29tcG9uZW50cy5tX2xvY2FsTmFtZSwgY29tcG9uZW50cy5tX25hbWVzcGFjZSk7Cit9CisK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFF1YWxpZmllZE5hbWUpOwog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUXVhbGlmaWVkTmFtZVF1YWxp
ZmllZE5hbWVJbXBsKTsKIApAQCAtMTEwLDYgKzExNiwxMiBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxRdWFsaWZpZWROYW1lSW1wbD4gbV9pbXBsOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIGF1dG8gaW1wbCA9
IG5hbWUuaW1wbCgpOworICAgIGFkZChoYXNoZXIsIGltcGwtPm1fcHJlZml4LCBpbXBsLT5tX2xv
Y2FsTmFtZSwgaW1wbC0+bV9uYW1lc3BhY2UpOworfQorCiBleHRlcm4gTGF6eU5ldmVyRGVzdHJv
eWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+IGFueU5hbWU7CiBpbmxpbmUgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYW55UU5hbWUoKSB7IHJldHVybiBhbnlOYW1lOyB9CiAKQEAgLTEyMCwxMSArMTMyLDYg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9tU3RyaW5nJiBhLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBxKSB7IHJldHVybiBhICEKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbVN0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxv
Y2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHEsIGNvbnN0IEF0b21TdHJpbmcmIGEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQog
Ci1pbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBv
bmVudHMmIGJ1ZikKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVv
ZihRdWFsaWZpZWROYW1lQ29tcG9uZW50cyk+KCZidWYpOwotfQotCiBzdHJ1Y3QgUXVhbGlmaWVk
TmFtZUhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIHsgcmV0dXJuIGhhc2gobmFtZS5pbXBsKCkpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKaW5kZXggZDc0YWJhODAzNGUyY2M4NTZlN2MxMGVhOWM4
M2JhOTE5ZmRjYWZiMS4uNzk2NWRmNzVlMzliMmY0NWQ4MmE5ZTkyNzk2NGZlOTBjNWI1OTdhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0
b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25l
bnRzJiBjb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNv
bXBvbmVudHMpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAg
fQogICAgIHN0YXRpYyBib29sIGVxdWFsKFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgYykKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dsb2JhbFdpbmRvd0lkZW50aWZpZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCmluZGV4IGMwNDY3ZDdjN2Rj
MDhhNmJiNmJiYzkwZmE5NDI3NDk4YmE2Y2JjNDIuLmIzZDQ4ZmFlMWRhNzBhYzA3MjdiMzgwMDQx
OGNkMzdkNWY4ODU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2lu
ZG93SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRl
bnRpZmllci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJQcm9jZXNzSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM5LDggKzQwLDYgQEAgc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50aWZpZXIgewogICAg
IFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyOwogICAgIFdpbmRvd0lkZW50aWZp
ZXIgd2luZG93SWRlbnRpZmllcjsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHbG9iYWxXaW5k
b3dJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKQEAgLTUwLDEzICs0OSw5IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFsV2luZG93SWRlbnRpZmllciYgYSwgY29u
c3QgR2xvYmFsV2luZG93SWRlbnRpCiAgICAgcmV0dXJuIGEucHJvY2Vzc0lkZW50aWZpZXIgPT0g
Yi5wcm9jZXNzSWRlbnRpZmllciAmJiAgYS53aW5kb3dJZGVudGlmaWVyID09IGIud2luZG93SWRl
bnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIEdsb2JhbFdpbmRvd0lkZW50aWZpZXI6Omhh
c2goKSBjb25zdAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHbG9iYWxX
aW5kb3dJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIHVpbnQ2NF90IGlkZW50aWZpZXJz
WzJdOwotICAgIGlkZW50aWZpZXJzWzBdID0gcHJvY2Vzc0lkZW50aWZpZXIudG9VSW50NjQoKTsK
LSAgICBpZGVudGlmaWVyc1sxXSA9IHdpbmRvd0lkZW50aWZpZXIudG9VSW50NjQoKTsKLQotICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaWRlbnRpZmllcnMsIHNpemVvZihpZGVu
dGlmaWVycykpOworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIs
IGlkZW50aWZpZXIud2luZG93SWRlbnRpZmllcik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CkBAIC04Niw3ICs4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8R2xvYmFsV2luZG93SWRlbnRpZmll
cj4gR2xvYmFsV2luZG93SWRlbnRpZmllcjo6ZGVjb2RlKERlY29kZXImIGRlCiBuYW1lc3BhY2Ug
V1RGIHsKIAogc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBX
ZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNo
KGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5k
b3dJZGVudGlmaWVyJiBhLCBjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW5IYXNoLmgKaW5kZXggOWZhODIxNjgzMTMyOWEzYTBmZDlhYmQyMTFiYWNkZjM4NDgwN2My
Zi4uMTJhZmM4MzhmMDNkZWRmZWEwOWJiYWE0ZWI4M2ZhNjM5OGVkNWQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM3LDEyICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7Ci0gICAgICAgICAgICBv
cmlnaW4tPnByb3RvY29sKCkuaW1wbCgpID8gb3JpZ2luLT5wcm90b2NvbCgpLmltcGwoKS0+aGFz
aCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+aG9zdCgpLmltcGwoKSA/IG9yaWdpbi0+aG9z
dCgpLmltcGwoKS0+aGFzaCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+cG9ydCgpLnZhbHVl
X29yKDApCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaChvcmlnaW4tPnByb3RvY29sKCksIG9yaWdpbi0+aG9zdCgpLCBvcmlnaW4tPnBvcnQoKS52
YWx1ZV9vcigwKSk7CiAgICAgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4mIG9yaWdpbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaAppbmRl
eCAzMDllYjE0OGJmZTMzM2QzNDE2Y2NmYzMxNGVjMWM3OGJkYmY2ZTc5Li5lNTAwNTliNDQwNjE4
NTczOWZkY2Q0ZDQ5ZWJlNzlkZTMwZTUwNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgKQEAgLTU4
LDcgKzU4LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFVVSUQmIG9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0OyB9CiAgICAgUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NJZGVudGlmaWVyOyB9CiAKLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QuaGFzaCgpOyB9CiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0lkZW50aWZpZXIuaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b2Nlc3NRdWFsaWZpZWQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX29iamVjdCA9PSBvdGhlci5t
X29iamVjdCAmJiBtX3Byb2Nlc3NJZGVudGlmaWVyID09IG90aGVyLm1fcHJvY2Vzc0lkZW50aWZp
ZXI7IH0KQEAgLTc0LDYgKzczLDExIEBAIHByaXZhdGU6CiAgICAgUHJvY2Vzc0lkZW50aWZpZXIg
bV9wcm9jZXNzSWRlbnRpZmllcjsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgUHJvY2Vzc1F1YWxpZmllZDxVVUlEPiYgdXVpZCkKK3sKKyAgICBhZGQoaGFzaGVy
LCB1dWlkLm9iamVjdCgpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpv
cHRpb25hbDxQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+PiBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBzdGQ6Om9wdGlvbmFsPFVVSUQ+IG9iamVj
dDsKQEAgLTk3LDEzICsxMDEsMyBAQCBpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUHJvY2Vzc1F1YWxpZmllZDxVVUlEPiYgcHJvYwogdXNpbmcgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgPSBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+Owog
CiB9Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgdWludDMyX3QgY29t
cHV0ZUhhc2goY29uc3QgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIGlkZW50aWZpZXIub2JqZWN0KCkuaGFzaCgpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggODU0MjFlM2RlNzA5Y2Ux
NTljNDk0YjQwZmI4ZDFhZDIzNTkzYzNiYi4uODE4YzU2OTQyMWIyNWJjMWNmM2ZlM2FkMjkwYTY3
NjkwYzNhYjdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMjcsNiArMjcs
NyBAQAogI2ltcG9ydCAiRm9udENhY2hlQ29yZVRleHQuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgorI2ltcG9ydCA8d3RmL0hh
c2hlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDYsOCArNDcsNyBAQCB1bnNpZ25lZCBGb250
UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKICAgICAgICAgfCBtX3N5bnRoZXRpY09ibGlxdWUp
OwogCiAgICAgdWludHB0cl90IGZvbnRIYXNoID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRkhh
c2gobV9mb250LmdldCgpKSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFz
aCwgZmxhZ3MgfTsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZiho
YXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJldHVybiBjb21wdXRlSGFzaChmb250SGFzaCwg
ZmxhZ3MpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5j
cHAKaW5kZXggYTQzMjJhNGRlZmYyYWQ4NWEzNzYwYzBmYTc3NmQ0NmQyMDQ3Y2ZhZi4uNDYxNjA4
MGUwYjllMzcxY2JiYzg2OTJmMDUxNmE4NGYyNWJhY2VlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFD
R1dpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0xMzYsOCArMTM3LDcgQEAgdW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgdW5zaWduZWQgZm9udEhhc2ggPSBtX2ZvbnQgPyBt
X2ZvbnQtPmhhc2goKSA6IDA7CiAgICAgQ0ZIYXNoQ29kZSBjZ0ZvbnRIYXNoID0gc2FmZUNGSGFz
aChtX2NnRm9udC5nZXQoKSk7CiAgICAgQ0ZIYXNoQ29kZSBjdEZvbnRIYXNoID0gc2FmZUNGSGFz
aChtX2N0Rm9udC5nZXQoKSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFz
aCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VHREkgfTsKLSAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJl
dHVybiBjb21wdXRlSGFzaChmb250SGFzaCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VH
REkpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJ
bmxpbmVzLmgKaW5kZXggMmQzNzIzMDU0ZTZhY2I3ODNjZDZmNmY4Zjc4NGZjY2QzMTIzNzA0NC4u
NTk3YWEwZWUxNTc2YzIxZTc1ZTI3ZDQxYWIxNjMyMzhiYjIwOGFiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IFNWR0F0dHJp
YnV0ZUhhc2hUcmFuc2xhdG9yIHsKICAgICB7CiAgICAgICAgIGlmIChrZXkuaGFzUHJlZml4KCkp
IHsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7IG51
bGxBdG9tKCkuaW1wbCgpLCBrZXkubG9jYWxOYW1lKCkuaW1wbCgpLCBrZXkubmFtZXNwYWNlVVJJ
KCkuaW1wbCgpIH07Ci0gICAgICAgICAgICByZXR1cm4gaGFzaENvbXBvbmVudHMoY29tcG9uZW50
cyk7CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPFF1YWxpZmllZE5hbWU+OjpoYXNoKGtleSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwCmluZGV4IDk2Y2RiM2E4MjI4NjYx
Y2FlYWFlY2IzN2NlZjYwMjJhNDBhMDUyMmQuLjEzNWQ5MTBmNGU4NjQyMjQ5NjUwNmQ3MDAzNjBm
NjIxM2EyMDg3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9T
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5jcHAKQEAgLTQ2LDE1ICs0
Niw2IEBAIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleTo6ZW1wdHlLZXkoKQogICAgIHJldHVybiB7IH07CiB9CiAKLXVuc2lnbmVkIFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6Omhhc2goKSBjb25zdAotewotICAgIHVuc2lnbmVkIGhh
c2hlc1syXTsKLSAgICBoYXNoZXNbMF0gPSBTZWN1cml0eU9yaWdpbkRhdGFIYXNoOjpoYXNoKG1f
dG9wT3JpZ2luKTsKLSAgICBoYXNoZXNbMV0gPSBTdHJpbmdIYXNoOjpoYXNoKG1fc2NvcGUuc3Ry
aW5nKCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoZXMsIHNp
emVvZihoYXNoZXMpKTsKLX0KLQogYm9vbCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpv
cGVyYXRvcj09KGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIG90aGVyKSBjb25z
dAogewogICAgIHJldHVybiBtX3RvcE9yaWdpbiA9PSBvdGhlci5tX3RvcE9yaWdpbiAmJiBtX3Nj
b3BlID09IG90aGVyLm1fc2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuaAppbmRleCBkMzJm
NGQ5ZmE3YWJkOTkyMzM5NjZkNTNjYTg2NzhmNmQwNzNhMmMwLi4yYzliYTYwNDgzNGMyYmRiOGVm
OGJlYjU3ZDY3NDg3MGRhMGJhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5KFNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgVVJMJiYgc2NvcGUpOwogCiAgICAgc3RhdGljIFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgZW1wdHlLZXkoKTsKLSAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleSYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uS2V5JiBrZXkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0ga2V5KTsgfQpA
QCAtOTYsMTIgKzk2LDE3IEBAIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZGVjb2RlCiAgICAgcmV0dXJuIFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgeyBXVEZNb3ZlKCp0b3BPcmlnaW4pLCBXVEZNb3Zl
KHNjb3BlKSB9OwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXku
dG9wT3JpZ2luKCksIGtleS5zY29wZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXlI
YXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBhLCBjb25z
dCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09
IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rv
cnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rv
cnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCA2OTkwYWEwMGMxNjk2ODFmOTZiMzBlYmQ3
MWM0ZjM5ZGEyMGNmNjM1Li5jMWI5Zjk3YWQwMmZlY2QzMWQyZjFjMDEzMzEyZjAzMWZhNGRhYWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHM+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGhlYWRlclNp
emUgPSA4OwpAQCAtNzMsMjIgKzc0LDI0IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SW50ZWdlckFycmF5JiBhLCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIpCiAgICAgcmV0dXJuIGEubV9p
bnRlZ2VycyA9PSBiLm1faW50ZWdlcnMgJiYgIGEubV9zaXplID09IGIubV9zaXplOwogfQogCitp
bmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkp
Cit7CisgICAgYXV0byogaW50ZWdlcnMgPSBhcnJheS5pbnRlZ2VycygpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkZChoYXNoZXIsIGlu
dGVnZXJzW2ldKTsKK30KKwogc3RydWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEludGVnZXJBcnJheT4gewogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShJbnRlZ2VyQXJyYXkmIHNsb3QpIHsgSGFzaFRyYWl0czxzaXplX3Q+Ojpjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoc2xvdC5tX3NpemUpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
Y29uc3QgSW50ZWdlckFycmF5JiBzbG90KSB7IHJldHVybiBIYXNoVHJhaXRzPHNpemVfdD46Omlz
RGVsZXRlZFZhbHVlKHNsb3QubV9zaXplKTsgfQogfTsKIAogc3RydWN0IEludGVnZXJBcnJheUhh
c2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVnZXJBcnJheSYpOworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJu
IGNvbXB1dGVIYXNoKGFycmF5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEludGVn
ZXJBcnJheSYsIGNvbnN0IEludGVnZXJBcnJheSYpOwogICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKLXVuc2lnbmVkIEludGVn
ZXJBcnJheUhhc2g6Omhhc2goY29uc3QgSW50ZWdlckFycmF5JiBhcnJheSkKLXsKLSAgICByZXR1
cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGFycmF5LmludGVnZXJzKCksIGFycmF5LnNpemUo
KSAqIHNpemVvZihpbnQpKTsKLX0KLQogYm9vbCBJbnRlZ2VyQXJyYXlIYXNoOjplcXVhbChjb25z
dCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKIHsKICAgICBpZiAoYS5p
c0RlbGV0ZWRWYWx1ZSgpIHx8IGIuaXNEZWxldGVkVmFsdWUoKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZGY1NmJhZDNlNWVhZDEyZjdkYzli
NWQxMjQ0OTcwNzc3OTc0ODcxLi5hZTcxOTA3Njg2OTkyNDNjODI4Yzk0NTQ2YTY5YzNhODljZDg5
MzU4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhl
IG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3Bw
OgorCiAyMDIyLTAyLTIyICBBbmdlbG9zIE9pa29ub21vcG91bG9zICA8YW5nZWxvc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtKU0NdIEd1YXJkIGFnYWluc3QgZGVhZCByZW1vdGVzIGluIG51bWJl
ck9mUHJvY2Vzc29ycwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3RyaW5nSGFzaGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hh
c2hlci5jcHAKaW5kZXggYTA5ZjQxYTM4NDkwOGQ5M2I5N2I0NGUyZGMyOWFmOTBkOWM3ZmI0Mi4u
MzFkMTEyNGI1ZjFiNTQ1M2Y1YzU0NjlmYWRjOGY0OGFmOWIzYzBhNCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwCkBAIC00NjIsMjAgKzQ2Miw0
IEBAIFRFU1QoV1RGLCBTdHJpbmdIYXNoZXJfY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMpCiAg
ICAgQVNTRVJUX0VRKHRlc3RCSGFzaDUgJiAweEZGRkZGRiwgU3RyaW5nSGFzaGVyOjpjb21wdXRl
SGFzaEFuZE1hc2tUb3A4Qml0cyh0ZXN0QlVDaGFycywgNSkpOwogfQogCi1URVNUKFdURiwgU3Ry
aW5nSGFzaGVyX2hhc2hNZW1vcnkpCi17Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwg
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KDAsIDApKTsKLSAgICBBU1NFUlRfRVEoZW1wdHlTdHJp
bmdIYXNoLCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobnVsbFVDaGFycywgMCkpOwotICAgIEFT
U0VSVF9FUShlbXB0eVN0cmluZ0hhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTwwPigwKSk7
Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5
PDA+KG51bGxVQ2hhcnMpKTsKLQotICAgIEFTU0VSVF9FUShzaW5nbGVOdWxsQ2hhcmFjdGVySGFz
aCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG51bGxVQ2hhcnMsIDIpKTsKLSAgICBBU1NFUlRf
RVEoc2luZ2xlTnVsbENoYXJhY3Rlckhhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTwyPihu
dWxsVUNoYXJzKSk7Ci0KLSAgICBBU1NFUlRfRVEodGVzdEFIYXNoNSwgU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5KHRlc3RBVUNoYXJzLCAxMCkpOwotICAgIEFTU0VSVF9FUSh0ZXN0QUhhc2g1LCBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8MTA+KHRlc3RBVUNoYXJzKSk7Ci0gICAgQVNTRVJUX0VR
KHRlc3RCSGFzaDUsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSh0ZXN0QlVDaGFycywgMTApKTsK
LSAgICBBU1NFUlRfRVEodGVzdEJIYXNoNSwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PDEwPih0
ZXN0QlVDaGFycykpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="480074"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452895</attachid>
            <date>2022-02-22 12:56:55 -0800</date>
            <delta_ts>2022-02-22 18:42:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>237049.patch</filename>
            <type>text/plain</type>
            <size>28207</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRmMmVmNWZkODRlNjQ3YTAzY2Y2M2Uz
YWVkMTMxZTIxNzZkMDE4ODcuLmRkOGEwMjkzNWVhZjY2NDliNmVjNTZkY2ZlZTNlNmYyNGRiN2Vl
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFu
ZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvU2NoZWR1bGVQYWlyLmg6CisgICAgICAgIChX
VEY6OlNjaGVkdWxlUGFpckhhc2g6Omhhc2gpOgorICAgICAgICAqIHd0Zi9VVUlELmNwcDoKKyAg
ICAgICAgKFdURjo6VVVJRDo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1VV
SUQuaDoKKyAgICAgICAgKFdURjo6VVVJRDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV1RGOjphZGQpOgorICAgICAgICAoV1RGOjpVVUlESGFzaDo6aGFzaCk6Cisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeSk6IERlbGV0ZWQuCisKIDIwMjItMDItMjIgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNlcnZpY2Ugd29ya2VyIGFuZCBwdXNo
IEFQSSBwcmVmZXJlbmNlIGZyb20gUnVudGltZUVuYWJsZWRGZWF0dXJlcyB0byBTZXR0aW5ncwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGExZjE5OTZhNmFlZDIxMzczMGRjOGQ5YTM0MzFhY2JmNTVhMTM4N2IuLjVl
MTgyZjZkMzExNTMxNjVhZDI1MmNlOTExZDJkYzIwZWY2MTEwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAyMi0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIERyb3AgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9k
ZXJuIEhhc2hlciBpbnN0ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzcwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZp
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXNv
dXJjZUlkZW50aWZpZXJIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc291cmNl
SWRlbnRpZmllcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0F0dHJpYnV0
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTaGFy
ZWRPYmplY3RQb29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50U2hhcmVkT2JqZWN0
UG9vbDo6Y2FjaGVkU2hhcmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjphdHRyaWJ1dGVIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vUXVhbGlm
aWVkTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWRO
YW1lSW1wbDo6Y29tcHV0ZUhhc2ggY29uc3QpOgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1l
Lmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzaENvbXBv
bmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UU5hbWVDb21wb25lbnRzVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgICogcGFnZS9HbG9iYWxXaW5kb3dJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV1RGOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVySGFzaDo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyOjpoYXNoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5IYXNoOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NRdWFsaWZpZWQ8VVVJRD46Omhhc2ggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpjb21wdXRlSGFzaCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZH
RWxlbWVudElubGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUhhc2hUcmFu
c2xhdG9yOjpoYXNoKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uS2V5OjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NlcnZp
Y2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRk
KToKKyAgICAgICAgKFdURjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleUhhc2g6Omhhc2gp
OgorCiAyMDIyLTAyLTIyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gUGFydGlhbCByb2xsb3V0IG9mIHIyODk5NDYsIGJyb2tlIE5ldGZsaXgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5NTI0NWI2ZmViMzNkMzQxM2U5NTI1YmIzYjZh
ZjgyMGMxNTQ4MjdmLi41ZGZmZDI3OWI5NDg3ZTA0ZjNmNGEwNzQ2ODcxMjljNjFiMDZlNGVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDItMjIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L0Jp
bmFyeVByb3BlcnR5TGlzdC5jcHA6CisgICAgICAgIChhZGQpOgorICAgICAgICAoSW50ZWdlckFy
cmF5SGFzaDo6aGFzaCk6CisKIDIwMjItMDItMTggIFJvYmVydCBKZW5uZXIgIDxKZW5uZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjkwMTQ5LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvU2NoZWR1bGVQYWlyLmggYi9Tb3VyY2UvV1RGL3d0Zi9TY2hl
ZHVsZVBhaXIuaAppbmRleCA0NDczYzVjY2YwMDdiN2VmNWM0OTM5YWI0Zjg3ZDE0YjY1ZTA3M2Fi
Li5jYTZiYzA2N2I5ZGYwNTc4NmI2MWZmOWE2YzYwYjkwMGJlOTIxMDNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVs
ZVBhaXIuaApAQCAtMjksNiArMjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03Myw4ICs3NCw3IEBAIHByaXZhdGU6CiBzdHJ1Y3Qg
U2NoZWR1bGVQYWlySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRy
PFNjaGVkdWxlUGFpcj4mIHBhaXIpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVz
WzJdID0geyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFpci0+cnVuTG9vcCgpKSwgcGFp
ci0+bW9kZSgpID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwIH07Ci0gICAgICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFp
ci0+cnVuTG9vcCgpKSwgcGFpci0+bW9kZSgpID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8U2NoZWR1bGVQYWly
PiYgYSwgY29uc3QgUmVmUHRyPFNjaGVkdWxlUGFpcj4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlE
LmNwcAppbmRleCAyZGVkOTlkZDJiNjBlYjNmNTY2Yjc0NWI2MGNkZWZlOTI1NDdjMDM1Li4wOWZl
Mjk3NTJkMzliNzRjMmY1MDA1YjFkNDkxZWEyYmVjZTA1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9VVUlELmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlELmNwcApAQCAtNTcsMTEg
KzU3LDYgQEAgVVVJRDo6VVVJRCgpCiAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PFVJbnQxMjg+
KGhpZ2gpIDw8IDY0KSB8IGxvdzsKIH0KIAotdW5zaWduZWQgVVVJRDo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPigmbV9kYXRhKSwgMTYpOwotfQotCiBTdHJpbmcgVVVJRDo6dG9T
dHJpbmcoKSBjb25zdAogewogICAgIGF1dG8gaGlnaCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
X2RhdGEgPj4gNjQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5oIGIvU291cmNl
L1dURi93dGYvVVVJRC5oCmluZGV4IGZlMzNjMGY0YzJmM2EzMmIyNDc3ZWNjNWE3YzQzOGQ0YWQ5
YmY5NTEuLmRlZmEwNzJhNWJhZjAzMWEyZDVhNjUwZDc1ZTg1MGU5NDgyNjg0NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1VVSUQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlELmgKQEAg
LTgzLDE5ICs4MywyNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA9PSBkZWxldGVkVmFsdWU7IH0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fZGF0YTsgfQogCiBwcml2YXRlOgogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBVVUlEKCk7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0IFVVSUQm
KTsKIAogICAgIFVJbnQxMjggbV9kYXRhOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYg
aGFzaGVyLCBjb25zdCBVVUlEJiB1dWlkKQoreworICAgIGF1dG8gaGlnaCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih1dWlkLm1fZGF0YSA+PiA2NCk7CisgICAgYXV0byBsb3cgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odXVpZC5tX2RhdGEgJiAweGZmZmZmZmZmZmZmZmZmZmYpOworICAgIGFkZCho
YXNoZXIsIGhpZ2gsIGxvdyk7Cit9CisKIHN0cnVjdCBVVUlESGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVVVJRCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVVVJRCYga2V5KSB7IHJldHVybiBjb21wdXRlSGFz
aChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVVVJRCYgYSwgY29uc3QgVVVJ
RCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2hl
ci5oCmluZGV4IGE1ZGQ4ZDhmYmI1MThhMTk3MzFlNTA1NzgzNWYzZmUyZTk2ZGYzZWMuLjI5Yjk4
N2M0Mzc3OWRjNDA2NmE1YjY1ZTljNGU1YTk1Nzc1NTBjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdIYXNoZXIuaApAQCAtMjI1LDIzICsyMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBEZWZhdWx0Q29udmVydGVyPihjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXJzQ291bnQgLSAxKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAg
ICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAg
IFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1p
bmdBbGlnbmVkKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIp
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFy
KTsgKytpKQotICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7Ci0KLSAg
ICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90
IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCiBw
cml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFs
YW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmll
ci5oCmluZGV4IGJkMzk1NGEyODk3M2NlYjhhNWJmNjQ4ZjRhYTUxMjNmMmVmYmVmNDUuLjNhMzIw
MTY2YjRkMjEyYjBhZTIzYTZlYWRhMTJkMzEzY2ZiZTI4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
UHJvY2Vzc0lkZW50aWZpZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDEy
ICs1NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFtX3Jlc291cmNlTnVtYmVyICYmICFt
X2lkYkNvbm5lY3Rpb25JZGVudGlmaWVyOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAotICAgIHsKLSAgICAgICAgdWludDY0X3QgaGFzaENvZGVzWzJdID0geyBtX2lkYkNvbm5l
Y3Rpb25JZGVudGlmaWVyLnRvVUludDY0KCksIG1fcmVzb3VyY2VOdW1iZXIgfTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENv
ZGVzKTsKLSAgICB9Ci0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBvdGhlcikgY29uc3QK
ICAgICB7CkBAIC04MywxNCArNzcsMjAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBzdHJ1Y3QgSURCUmVzb3VyY2VJZGVudGlmaWVySGFzaFRyYWl0czsKKyAgICBmcmllbmQgdm9p
ZCBhZGQoSGFzaGVyJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAKICAgICBJREJS
ZXNvdXJjZUlkZW50aWZpZXIoSURCQ29ubmVjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291
cmNlSWRlbnRpZmllcik7CiAgICAgSURCQ29ubmVjdGlvbklkZW50aWZpZXIgbV9pZGJDb25uZWN0
aW9uSWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX3Jlc291cmNlTnVtYmVyIHsgMCB9OwogfTsK
IAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci5jb25uZWN0
aW9uSWRlbnRpZmllcigpLCBpZGVudGlmaWVyLm1fcmVzb3VyY2VOdW1iZXIpOworfQorCiBzdHJ1
Y3QgSURCUmVzb3VyY2VJZGVudGlmaWVySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYSkgeyBy
ZXR1cm4gY29tcHV0ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIGEsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKaW5kZXggMGQ2MjVl
OTRlYzQ3YmYyY2EwOGY1ZDljYjVjN2IwNDJmZDY0NTI1YS4uOWFjNGRiYjFiMjBhZjRiMDcyMDgw
NjNiYzgyNzZmNWYyNTM0MzY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApAQCAtMjUsNiArMjUs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDYgKzc1LDEx
IEBAIHByaXZhdGU6CiAgICAgQXRvbVN0cmluZyBtX3ZhbHVlOwogfTsKIAoraW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKK3sKKyAgICBh
ZGQoaGFzaGVyLCBhdHRyaWJ1dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7Cit9CisKIGlu
bGluZSBib29sIEF0dHJpYnV0ZTo6bmFtZU1hdGNoZXNGaWx0ZXIoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyUHJlZml4LCBjb25zdCBBdG9tU3RyaW5n
JiBmaWx0ZXJMb2NhbE5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWVzcGFjZVVSSSkK
IHsKICAgICBpZiAoZmlsdGVyTG9jYWxOYW1lICE9IG5hbWUubG9jYWxOYW1lKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCmluZGV4IDhhYzQx
YmExYzBjZWFmZWQ3Zjk0MTczYWI4ZjNkNWEwZmIxMDI1MDcuLjliZTA4ZmM1YjU0Y2FkMGFlODUy
ODNlNWRmZDU0YzY2OWNiMWQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFNoYXJlZE9iamVjdFBvb2wuY3BwCkBAIC0zMiwxMSArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWlubGluZSB1bnNpZ25lZCBhdHRyaWJ1dGVIYXNoKGNvbnN0IFZlY3RvcjxBdHRy
aWJ1dGU+JiBhdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkoYXR0cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMuc2l6ZSgpICogc2l6ZW9mKEF0dHJpYnV0
ZSkpOwotfQotCiBpbmxpbmUgYm9vbCBoYXNTYW1lQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYgYXR0cmlidXRlcywgU2hhcmVhYmxlRWxlbWVudERhdGEmIGVsZW1lbnREYXRhKQog
ewogICAgIGlmIChhdHRyaWJ1dGVzLnNpemUoKSAhPSBlbGVtZW50RGF0YS5sZW5ndGgoKSkKQEAg
LTQ4LDcgKzQzLDcgQEAgUmVmPFNoYXJlYWJsZUVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9i
amVjdFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2kKIHsKICAgICBBU1NFUlQoIWF0
dHJpYnV0ZXMuaXNFbXB0eSgpKTsKIAotICAgIGF1dG8mIGNhY2hlZERhdGEgPSBtX3NoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGUuYWRkKGF0dHJpYnV0ZUhhc2goYXR0cmlidXRlcyksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBjYWNoZWREYXRhID0gbV9zaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlLmFkZChjb21wdXRlSGFzaChhdHRyaWJ1dGVzKSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogCiAgICAgLy8gRklYTUU6IFRoaXMgcHJldmVudHMgc2hhcmluZyB3aGVuIHRo
ZXJlJ3MgYSBoYXNoIGNvbGxpc2lvbi4KICAgICBpZiAoY2FjaGVkRGF0YSAmJiAhaGFzU2FtZUF0
dHJpYnV0ZXMoYXR0cmlidXRlcywgKmNhY2hlZERhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuY3BwCmluZGV4IDY2MDA4Y2YzMjI3OTBmMTgwMDdhMmNmNzRmMjhiMjJhZGIyMDY0M2Yu
LjY2MGQ5ZmFlYzdhZGUwMDRjNDVhYmM5NzcwMmM2MzJkOWNhNDY5ODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUXVhbGlmaWVkTmFtZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgY29uc3QgQXRvbVN0cmluZyYg
UXVhbGlmaWVkTmFtZTo6bG9jYWxOYW1lVXBwZXIoKSBjb25zdAogdW5zaWduZWQgUXVhbGlmaWVk
TmFtZTo6UXVhbGlmaWVkTmFtZUltcGw6OmNvbXB1dGVIYXNoKCkgY29uc3QKIHsKICAgICBRdWFs
aWZpZWROYW1lQ29tcG9uZW50cyBjb21wb25lbnRzID0geyBtX3ByZWZpeC5pbXBsKCksIG1fbG9j
YWxOYW1lLmltcGwoKSwgbV9uYW1lc3BhY2UuaW1wbCgpIH07Ci0gICAgcmV0dXJuIGhhc2hDb21w
b25lbnRzKGNvbXBvbmVudHMpOworICAgIHJldHVybiBXVEY6OmNvbXB1dGVIYXNoKGNvbXBvbmVu
dHMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFt
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAppbmRleCAzY2Y5OGNkMjA3
Yzk3NTQ3ZmEwN2FlYTZkZDQ2MDQzZjkwMGVhMTExLi41MjM4Njc0MzViMzQxYjI1ZWRmNDA5YjZl
MGIzN2U5OGY5MWQ2NWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVk
TmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKQEAgLTIxLDE3
ICsyMSwyMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RydWN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzIHsKLSAgICBTdHJpbmdJbXBsKiBtX3By
ZWZpeDsKLSAgICBTdHJpbmdJbXBsKiBtX2xvY2FsTmFtZTsKLSAgICBTdHJpbmdJbXBsKiBtX25h
bWVzcGFjZTsKKyAgICBBdG9tU3RyaW5nSW1wbCogbV9wcmVmaXg7CisgICAgQXRvbVN0cmluZ0lt
cGwqIG1fbG9jYWxOYW1lOworICAgIEF0b21TdHJpbmdJbXBsKiBtX25hbWVzcGFjZTsKIH07CiAK
K2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBv
bmVudHMmIGNvbXBvbmVudHMpCit7CisgICAgYWRkKGhhc2hlciwgY29tcG9uZW50cy5tX3ByZWZp
eCwgY29tcG9uZW50cy5tX2xvY2FsTmFtZSwgY29tcG9uZW50cy5tX25hbWVzcGFjZSk7Cit9CisK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFF1YWxpZmllZE5hbWUpOwog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUXVhbGlmaWVkTmFtZVF1YWxp
ZmllZE5hbWVJbXBsKTsKIApAQCAtMTEwLDYgKzExNiwxMiBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxRdWFsaWZpZWROYW1lSW1wbD4gbV9pbXBsOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIGF1dG8gaW1wbCA9
IG5hbWUuaW1wbCgpOworICAgIGFkZChoYXNoZXIsIGltcGwtPm1fcHJlZml4LCBpbXBsLT5tX2xv
Y2FsTmFtZSwgaW1wbC0+bV9uYW1lc3BhY2UpOworfQorCiBleHRlcm4gTGF6eU5ldmVyRGVzdHJv
eWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+IGFueU5hbWU7CiBpbmxpbmUgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYW55UU5hbWUoKSB7IHJldHVybiBhbnlOYW1lOyB9CiAKQEAgLTEyMCwxMSArMTMyLDYg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9tU3RyaW5nJiBhLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBxKSB7IHJldHVybiBhICEKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbVN0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxv
Y2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHEsIGNvbnN0IEF0b21TdHJpbmcmIGEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQog
Ci1pbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBv
bmVudHMmIGJ1ZikKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVv
ZihRdWFsaWZpZWROYW1lQ29tcG9uZW50cyk+KCZidWYpOwotfQotCiBzdHJ1Y3QgUXVhbGlmaWVk
TmFtZUhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIHsgcmV0dXJuIGhhc2gobmFtZS5pbXBsKCkpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKaW5kZXggZDc0YWJhODAzNGUyY2M4NTZlN2MxMGVhOWM4
M2JhOTE5ZmRjYWZiMS4uNzk2NWRmNzVlMzliMmY0NWQ4MmE5ZTkyNzk2NGZlOTBjNWI1OTdhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0
b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25l
bnRzJiBjb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNv
bXBvbmVudHMpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAg
fQogICAgIHN0YXRpYyBib29sIGVxdWFsKFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgYykKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dsb2JhbFdpbmRvd0lkZW50aWZpZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCmluZGV4IGMwNDY3ZDdjN2Rj
MDhhNmJiNmJiYzkwZmE5NDI3NDk4YmE2Y2JjNDIuLmIzZDQ4ZmFlMWRhNzBhYzA3MjdiMzgwMDQx
OGNkMzdkNWY4ODU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2lu
ZG93SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRl
bnRpZmllci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJQcm9jZXNzSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM5LDggKzQwLDYgQEAgc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50aWZpZXIgewogICAg
IFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyOwogICAgIFdpbmRvd0lkZW50aWZp
ZXIgd2luZG93SWRlbnRpZmllcjsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHbG9iYWxXaW5k
b3dJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKQEAgLTUwLDEzICs0OSw5IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFsV2luZG93SWRlbnRpZmllciYgYSwgY29u
c3QgR2xvYmFsV2luZG93SWRlbnRpCiAgICAgcmV0dXJuIGEucHJvY2Vzc0lkZW50aWZpZXIgPT0g
Yi5wcm9jZXNzSWRlbnRpZmllciAmJiAgYS53aW5kb3dJZGVudGlmaWVyID09IGIud2luZG93SWRl
bnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIEdsb2JhbFdpbmRvd0lkZW50aWZpZXI6Omhh
c2goKSBjb25zdAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHbG9iYWxX
aW5kb3dJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIHVpbnQ2NF90IGlkZW50aWZpZXJz
WzJdOwotICAgIGlkZW50aWZpZXJzWzBdID0gcHJvY2Vzc0lkZW50aWZpZXIudG9VSW50NjQoKTsK
LSAgICBpZGVudGlmaWVyc1sxXSA9IHdpbmRvd0lkZW50aWZpZXIudG9VSW50NjQoKTsKLQotICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaWRlbnRpZmllcnMsIHNpemVvZihpZGVu
dGlmaWVycykpOworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIs
IGlkZW50aWZpZXIud2luZG93SWRlbnRpZmllcik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CkBAIC04Niw3ICs4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8R2xvYmFsV2luZG93SWRlbnRpZmll
cj4gR2xvYmFsV2luZG93SWRlbnRpZmllcjo6ZGVjb2RlKERlY29kZXImIGRlCiBuYW1lc3BhY2Ug
V1RGIHsKIAogc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBX
ZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNo
KGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5k
b3dJZGVudGlmaWVyJiBhLCBjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBi
KSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW5IYXNoLmgKaW5kZXggOWZhODIxNjgzMTMyOWEzYTBmZDlhYmQyMTFiYWNkZjM4NDgwN2My
Zi4uMTJhZmM4MzhmMDNkZWRmZWEwOWJiYWE0ZWI4M2ZhNjM5OGVkNWQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM3LDEyICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7Ci0gICAgICAgICAgICBv
cmlnaW4tPnByb3RvY29sKCkuaW1wbCgpID8gb3JpZ2luLT5wcm90b2NvbCgpLmltcGwoKS0+aGFz
aCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+aG9zdCgpLmltcGwoKSA/IG9yaWdpbi0+aG9z
dCgpLmltcGwoKS0+aGFzaCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+cG9ydCgpLnZhbHVl
X29yKDApCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaChvcmlnaW4tPnByb3RvY29sKCksIG9yaWdpbi0+aG9zdCgpLCBvcmlnaW4tPnBvcnQoKS52
YWx1ZV9vcigwKSk7CiAgICAgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4mIG9yaWdpbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaAppbmRl
eCAzMDllYjE0OGJmZTMzM2QzNDE2Y2NmYzMxNGVjMWM3OGJkYmY2ZTc5Li5lNTAwNTliNDQwNjE4
NTczOWZkY2Q0ZDQ5ZWJlNzlkZTMwZTUwNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgKQEAgLTU4
LDcgKzU4LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFVVSUQmIG9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0OyB9CiAgICAgUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NJZGVudGlmaWVyOyB9CiAKLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QuaGFzaCgpOyB9CiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0lkZW50aWZpZXIuaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b2Nlc3NRdWFsaWZpZWQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX29iamVjdCA9PSBvdGhlci5t
X29iamVjdCAmJiBtX3Byb2Nlc3NJZGVudGlmaWVyID09IG90aGVyLm1fcHJvY2Vzc0lkZW50aWZp
ZXI7IH0KQEAgLTc0LDYgKzczLDExIEBAIHByaXZhdGU6CiAgICAgUHJvY2Vzc0lkZW50aWZpZXIg
bV9wcm9jZXNzSWRlbnRpZmllcjsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgUHJvY2Vzc1F1YWxpZmllZDxVVUlEPiYgdXVpZCkKK3sKKyAgICBhZGQoaGFzaGVy
LCB1dWlkLm9iamVjdCgpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpv
cHRpb25hbDxQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+PiBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBzdGQ6Om9wdGlvbmFsPFVVSUQ+IG9iamVj
dDsKQEAgLTk3LDEzICsxMDEsMyBAQCBpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUHJvY2Vzc1F1YWxpZmllZDxVVUlEPiYgcHJvYwogdXNpbmcgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgPSBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+Owog
CiB9Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgdWludDMyX3QgY29t
cHV0ZUhhc2goY29uc3QgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIGlkZW50aWZpZXIub2JqZWN0KCkuaGFzaCgpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggODU0MjFlM2RlNzA5Y2Ux
NTljNDk0YjQwZmI4ZDFhZDIzNTkzYzNiYi4uODE4YzU2OTQyMWIyNWJjMWNmM2ZlM2FkMjkwYTY3
NjkwYzNhYjdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMjcsNiArMjcs
NyBAQAogI2ltcG9ydCAiRm9udENhY2hlQ29yZVRleHQuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgorI2ltcG9ydCA8d3RmL0hh
c2hlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDYsOCArNDcsNyBAQCB1bnNpZ25lZCBGb250
UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKICAgICAgICAgfCBtX3N5bnRoZXRpY09ibGlxdWUp
OwogCiAgICAgdWludHB0cl90IGZvbnRIYXNoID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRkhh
c2gobV9mb250LmdldCgpKSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFz
aCwgZmxhZ3MgfTsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZiho
YXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJldHVybiBjb21wdXRlSGFzaChmb250SGFzaCwg
ZmxhZ3MpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5j
cHAKaW5kZXggYTQzMjJhNGRlZmYyYWQ4NWEzNzYwYzBmYTc3NmQ0NmQyMDQ3Y2ZhZi4uNDYxNjA4
MGUwYjllMzcxY2JiYzg2OTJmMDUxNmE4NGYyNWJhY2VlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFD
R1dpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0xMzYsOCArMTM3LDcgQEAgdW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgdW5zaWduZWQgZm9udEhhc2ggPSBtX2ZvbnQgPyBt
X2ZvbnQtPmhhc2goKSA6IDA7CiAgICAgQ0ZIYXNoQ29kZSBjZ0ZvbnRIYXNoID0gc2FmZUNGSGFz
aChtX2NnRm9udC5nZXQoKSk7CiAgICAgQ0ZIYXNoQ29kZSBjdEZvbnRIYXNoID0gc2FmZUNGSGFz
aChtX2N0Rm9udC5nZXQoKSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFz
aCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VHREkgfTsKLSAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJl
dHVybiBjb21wdXRlSGFzaChmb250SGFzaCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VH
REkpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJ
bmxpbmVzLmgKaW5kZXggMmQzNzIzMDU0ZTZhY2I3ODNjZDZmNmY4Zjc4NGZjY2QzMTIzNzA0NC4u
NTk3YWEwZWUxNTc2YzIxZTc1ZTI3ZDQxYWIxNjMyMzhiYjIwOGFiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IFNWR0F0dHJp
YnV0ZUhhc2hUcmFuc2xhdG9yIHsKICAgICB7CiAgICAgICAgIGlmIChrZXkuaGFzUHJlZml4KCkp
IHsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7IG51
bGxBdG9tKCkuaW1wbCgpLCBrZXkubG9jYWxOYW1lKCkuaW1wbCgpLCBrZXkubmFtZXNwYWNlVVJJ
KCkuaW1wbCgpIH07Ci0gICAgICAgICAgICByZXR1cm4gaGFzaENvbXBvbmVudHMoY29tcG9uZW50
cyk7CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPFF1YWxpZmllZE5hbWU+OjpoYXNoKGtleSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwCmluZGV4IDk2Y2RiM2E4MjI4NjYx
Y2FlYWFlY2IzN2NlZjYwMjJhNDBhMDUyMmQuLjEzNWQ5MTBmNGU4NjQyMjQ5NjUwNmQ3MDAzNjBm
NjIxM2EyMDg3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9T
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5jcHAKQEAgLTQ2LDE1ICs0
Niw2IEBAIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleTo6ZW1wdHlLZXkoKQogICAgIHJldHVybiB7IH07CiB9CiAKLXVuc2lnbmVkIFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6Omhhc2goKSBjb25zdAotewotICAgIHVuc2lnbmVkIGhh
c2hlc1syXTsKLSAgICBoYXNoZXNbMF0gPSBTZWN1cml0eU9yaWdpbkRhdGFIYXNoOjpoYXNoKG1f
dG9wT3JpZ2luKTsKLSAgICBoYXNoZXNbMV0gPSBTdHJpbmdIYXNoOjpoYXNoKG1fc2NvcGUuc3Ry
aW5nKCkpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoZXMsIHNp
emVvZihoYXNoZXMpKTsKLX0KLQogYm9vbCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpv
cGVyYXRvcj09KGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIG90aGVyKSBjb25z
dAogewogICAgIHJldHVybiBtX3RvcE9yaWdpbiA9PSBvdGhlci5tX3RvcE9yaWdpbiAmJiBtX3Nj
b3BlID09IG90aGVyLm1fc2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuaAppbmRleCBkMzJm
NGQ5ZmE3YWJkOTkyMzM5NjZkNTNjYTg2NzhmNmQwNzNhMmMwLi4yYzliYTYwNDgzNGMyYmRiOGVm
OGJlYjU3ZDY3NDg3MGRhMGJhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5KFNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgVVJMJiYgc2NvcGUpOwogCiAgICAgc3RhdGljIFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgZW1wdHlLZXkoKTsKLSAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleSYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uS2V5JiBrZXkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0ga2V5KTsgfQpA
QCAtOTYsMTIgKzk2LDE3IEBAIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZGVjb2RlCiAgICAgcmV0dXJuIFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkgeyBXVEZNb3ZlKCp0b3BPcmlnaW4pLCBXVEZNb3Zl
KHNjb3BlKSB9OwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXku
dG9wT3JpZ2luKCksIGtleS5zY29wZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXlI
YXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBhLCBjb25z
dCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09
IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rv
cnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rv
cnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCA2OTkwYWEwMGMxNjk2ODFmOTZiMzBlYmQ3
MWM0ZjM5ZGEyMGNmNjM1Li5jMWI5Zjk3YWQwMmZlY2QzMWQyZjFjMDEzMzEyZjAzMWZhNGRhYWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHM+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGhlYWRlclNp
emUgPSA4OwpAQCAtNzMsMjIgKzc0LDI0IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SW50ZWdlckFycmF5JiBhLCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIpCiAgICAgcmV0dXJuIGEubV9p
bnRlZ2VycyA9PSBiLm1faW50ZWdlcnMgJiYgIGEubV9zaXplID09IGIubV9zaXplOwogfQogCitp
bmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkp
Cit7CisgICAgYXV0byogaW50ZWdlcnMgPSBhcnJheS5pbnRlZ2VycygpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkZChoYXNoZXIsIGlu
dGVnZXJzW2ldKTsKK30KKwogc3RydWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEludGVnZXJBcnJheT4gewogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShJbnRlZ2VyQXJyYXkmIHNsb3QpIHsgSGFzaFRyYWl0czxzaXplX3Q+Ojpjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoc2xvdC5tX3NpemUpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
Y29uc3QgSW50ZWdlckFycmF5JiBzbG90KSB7IHJldHVybiBIYXNoVHJhaXRzPHNpemVfdD46Omlz
RGVsZXRlZFZhbHVlKHNsb3QubV9zaXplKTsgfQogfTsKIAogc3RydWN0IEludGVnZXJBcnJheUhh
c2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVnZXJBcnJheSYpOworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJu
IGNvbXB1dGVIYXNoKGFycmF5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEludGVn
ZXJBcnJheSYsIGNvbnN0IEludGVnZXJBcnJheSYpOwogICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKLXVuc2lnbmVkIEludGVn
ZXJBcnJheUhhc2g6Omhhc2goY29uc3QgSW50ZWdlckFycmF5JiBhcnJheSkKLXsKLSAgICByZXR1
cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGFycmF5LmludGVnZXJzKCksIGFycmF5LnNpemUo
KSAqIHNpemVvZihpbnQpKTsKLX0KLQogYm9vbCBJbnRlZ2VyQXJyYXlIYXNoOjplcXVhbChjb25z
dCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKIHsKICAgICBpZiAoYS5p
c0RlbGV0ZWRWYWx1ZSgpIHx8IGIuaXNEZWxldGVkVmFsdWUoKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZGY1NmJhZDNlNWVhZDEyZjdkYzli
NWQxMjQ0OTcwNzc3OTc0ODcxLi5hZTcxOTA3Njg2OTkyNDNjODI4Yzk0NTQ2YTY5YzNhODljZDg5
MzU4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhl
IG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3Bw
OgorCiAyMDIyLTAyLTIyICBBbmdlbG9zIE9pa29ub21vcG91bG9zICA8YW5nZWxvc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtKU0NdIEd1YXJkIGFnYWluc3QgZGVhZCByZW1vdGVzIGluIG51bWJl
ck9mUHJvY2Vzc29ycwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3RyaW5nSGFzaGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hh
c2hlci5jcHAKaW5kZXggYTA5ZjQxYTM4NDkwOGQ5M2I5N2I0NGUyZGMyOWFmOTBkOWM3ZmI0Mi4u
MzFkMTEyNGI1ZjFiNTQ1M2Y1YzU0NjlmYWRjOGY0OGFmOWIzYzBhNCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwCkBAIC00NjIsMjAgKzQ2Miw0
IEBAIFRFU1QoV1RGLCBTdHJpbmdIYXNoZXJfY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMpCiAg
ICAgQVNTRVJUX0VRKHRlc3RCSGFzaDUgJiAweEZGRkZGRiwgU3RyaW5nSGFzaGVyOjpjb21wdXRl
SGFzaEFuZE1hc2tUb3A4Qml0cyh0ZXN0QlVDaGFycywgNSkpOwogfQogCi1URVNUKFdURiwgU3Ry
aW5nSGFzaGVyX2hhc2hNZW1vcnkpCi17Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwg
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KDAsIDApKTsKLSAgICBBU1NFUlRfRVEoZW1wdHlTdHJp
bmdIYXNoLCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobnVsbFVDaGFycywgMCkpOwotICAgIEFT
U0VSVF9FUShlbXB0eVN0cmluZ0hhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTwwPigwKSk7
Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5
PDA+KG51bGxVQ2hhcnMpKTsKLQotICAgIEFTU0VSVF9FUShzaW5nbGVOdWxsQ2hhcmFjdGVySGFz
aCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG51bGxVQ2hhcnMsIDIpKTsKLSAgICBBU1NFUlRf
RVEoc2luZ2xlTnVsbENoYXJhY3Rlckhhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTwyPihu
dWxsVUNoYXJzKSk7Ci0KLSAgICBBU1NFUlRfRVEodGVzdEFIYXNoNSwgU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5KHRlc3RBVUNoYXJzLCAxMCkpOwotICAgIEFTU0VSVF9FUSh0ZXN0QUhhc2g1LCBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8MTA+KHRlc3RBVUNoYXJzKSk7Ci0gICAgQVNTRVJUX0VR
KHRlc3RCSGFzaDUsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSh0ZXN0QlVDaGFycywgMTApKTsK
LSAgICBBU1NFUlRfRVEodGVzdEJIYXNoNSwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PDEwPih0
ZXN0QlVDaGFycykpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452926</attachid>
            <date>2022-02-22 18:42:45 -0800</date>
            <delta_ts>2022-02-22 18:47:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237049-20220222184244.patch</filename>
            <type>text/plain</type>
            <size>30735</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMzMmQwNmQyNjJhN2FiZGEzOGYyM2Fk
NDlhMDhjNmI3MzZlMTEyY2MuLjUwZTk2ZDQ3N2E0ZTU1NTJjZDg2ZmUxMDc1ZWQzZDMzYzI1MTU3
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFu
ZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICAqIHd0Zi9TY2hlZHVsZVBhaXIuaDoKKyAgICAgICAgKFdURjo6
U2NoZWR1bGVQYWlySGFzaDo6aGFzaCk6CisgICAgICAgICogd3RmL1VVSUQuY3BwOgorICAgICAg
ICAoV1RGOjpVVUlEOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVVVJRC5o
OgorICAgICAgICAoV1RGOjpVVUlEOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OmFkZCk6CisgICAgICAgIChXVEY6OlVVSURIYXNoOjpoYXNoKToKKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0yMiAgRWxsaW90dCBXaWxsaWFtcyAg
PGVtd0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBsZWdhY3ktYnVpbGQtY29weS1uZXN0
ZWQtaGVhZGVycy5weSB3aXRoIGFuIHhjb2RlYnVpbGQgaW52b2NhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGMwNzQ1NWMyNTNiOWZjNzY5MGMyZjVhMDRhZjAwMTMwY2M4Mzc4M2YuLjU1NDZhNTAzYTA4OGFm
Njg4YTIzZGU1OTk1NTRlMzVkOGVjOTc1MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAor
MjAyMi0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERy
b3AgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9kZXJuIEhhc2hlciBp
bnN0ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzcwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oOgorICAgICAgICAo
V2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmllckhh
c2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyOjpoYXNo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vQXR0cmlidXRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjphZGQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOjpjYWNoZWRTaGFy
ZWFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJp
YnV0ZUhhc2gpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsOjpjb21wdXRl
SGFzaCBjb25zdCk6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNoQ29tcG9uZW50cyk6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKiBwYWdlL0dsb2Jh
bFdpbmRvd0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChX
VEY6Okdsb2JhbFdpbmRvd0lkZW50aWZpZXJIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
Okdsb2JhbFdpbmRvd0lkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvU2VjdXJpdHlPcmlnaW5IYXNoLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvY2Vzc1F1YWxpZmllZDxVVUlEPjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OmNvbXB1dGVIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50SW5saW5lcy5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I6Omhhc2gpOgor
ICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uS2V5Lmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV1RG
OjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5SGFzaDo6aGFzaCk6CisKIDIwMjItMDItMjIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaGFyZSBtb3JlIGNv
ZGUgYmV0d2VlbiBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKCkgYW5kIGRpc3BhdGNoTG9j
YWxTdG9yYWdlRXZlbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5NTI0NWI2
ZmViMzNkMzQxM2U5NTI1YmIzYjZhZjgyMGMxNTQ4MjdmLi5iOTg0Mzk5ODU5MThlYjJjN2E3NmJm
NzZhZGRjY2FlOTE0NGZkMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhlIG1vZGVy
biBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAg
ICAgICAqIEhpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKGFkZCk6Cisg
ICAgICAgIChJbnRlZ2VyQXJyYXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0xOCAgUm9iZXJ0IEpl
bm5lciAgPEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5n
IHIyOTAxNDkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oCmluZGV4IDViM2UwNzk0MzgxNTY0M2M5Y2QxOGJhMWIzMjNhYTdhMmJm
ZTQ5ODYuLjhiOWE1NzgwZmEwOWRkMzE1NWJhMTI3N2E4YmYwM2MwM2RmNDVlZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5o
CkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxvcHRpb25hbD4KICNpbmNsdWRlIDx2YXJp
YW50PgorI2luY2x1ZGUgPHd0Zi9JbnQxMjguaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KQEAgLTc1LDYgKzc2LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlcj4g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVkSW50CiAgICAgYWRkKGhh
c2hlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIgPj4gMzIpKTsKIH0KIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBVSW50MTI4JiB2YWx1ZSkKK3sKKyAgICBh
dXRvIGhpZ2ggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUgPj4gNjQpOworICAgIGF1dG8g
bG93ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBhZGQoaGFzaGVyLCBoaWdo
KTsKKyAgICBhZGQoaGFzaGVyLCBsb3cpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRB
cml0aG1ldGljPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2lnbmVkPFNpZ25lZEFyaXRobWV0
aWM+Ojp2YWx1ZSwgdm9pZD4gYWRkKEhhc2hlciYgaGFzaGVyLCBTaWduZWRBcml0aG1ldGljIG51
bWJlcikKIHsKICAgICAvLyBXZSBvdmVybG9hZGVkIGZvciBkb3VibGUgYW5kIGZsb2F0IGJlbG93
LCBqdXN0IGRlYWwgd2l0aCBpbnRlZ2VycyBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU2NoZWR1bGVQYWlyLmggYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaAppbmRleCA0
NDczYzVjY2YwMDdiN2VmNWM0OTM5YWI0Zjg3ZDE0YjY1ZTA3M2FiLi4xZmIwOTc3ZDZhMjc3ODQ4
NjI3NWVkOTNmMmNjOGEwNGY4Zjk0YTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TY2hl
ZHVsZVBhaXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaApAQCAtMjksNiAr
MjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC03MCwxMSArNzEsMTYgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG1fbW9kZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
U2NoZWR1bGVQYWlyJiBwYWlyKQoreworICAgIC8vIEZJWE1FOiBIYXNoaW5nIGEgQ0ZIYXNoIGhl
cmUgaXMgdW5mb3J0dW5hdGUuCisgICAgYWRkKGhhc2hlciwgcGFpci5ydW5Mb29wKCksIHBhaXIu
bW9kZSgpID8gQ0ZIYXNoKHBhaXIubW9kZSgpKSA6IDApOworfQorCiBzdHJ1Y3QgU2NoZWR1bGVQ
YWlySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFNjaGVkdWxl
UGFpcj4mIHBhaXIpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzJdID0geyBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFpci0+cnVuTG9vcCgpKSwgcGFpci0+bW9kZSgp
ID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJl
dHVybiBjb21wdXRlSGFzaCgqcGFpcik7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVmUHRyPFNjaGVkdWxlUGFpcj4mIGEsIGNvbnN0IFJlZlB0cjxTY2hlZHVsZVBhaXI+
JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VVSUQu
Y3BwIGIvU291cmNlL1dURi93dGYvVVVJRC5jcHAKaW5kZXggMmRlZDk5ZGQyYjYwZWIzZjU2NmI3
NDViNjBjZGVmZTkyNTQ3YzAzNS4uMDlmZTI5NzUyZDM5Yjc0YzJmNTAwNWIxZDQ5MWVhMmJlY2Uw
NWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVVVJRC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvVVVJRC5jcHAKQEAgLTU3LDExICs1Nyw2IEBAIFVVSUQ6OlVVSUQoKQogICAgIG1fZGF0
YSA9IChzdGF0aWNfY2FzdDxVSW50MTI4PihoaWdoKSA8PCA2NCkgfCBsb3c7CiB9CiAKLXVuc2ln
bmVkIFVVSUQ6Omhhc2goKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnkocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJm1fZGF0YSksIDE2
KTsKLX0KLQogU3RyaW5nIFVVSUQ6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBhdXRvIGhpZ2gg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9kYXRhID4+IDY0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1VVSUQuaCBiL1NvdXJjZS9XVEYvd3RmL1VVSUQuaAppbmRleCBmZTMzYzBmNGMy
ZjNhMzJiMjQ3N2VjYzVhN2M0MzhkNGFkOWJmOTUxLi5kYWZkNmVhYWRhMzFjNzQxYzE5NDY2YzIw
ZTNiMmM2MjZjZjVhMjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VVUlELmgKKysrIGIv
U291cmNlL1dURi93dGYvVVVJRC5oCkBAIC04MywxOSArODMsMjQgQEAgcHVibGljOgogICAgIH0K
IAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEgPT0gZGVsZXRlZFZhbHVlOyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGhh
c2goKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Q7CiAKICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2RhdGE7IH0KIAog
cHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVVVJRCgpOworICAgIGZyaWVuZCB2b2lk
IGFkZChIYXNoZXImLCBVVUlEKTsKIAogICAgIFVJbnQxMjggbV9kYXRhOwogfTsKIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBVVUlEIHV1aWQpCit7CisgICAgYWRkKGhhc2hlciwg
dXVpZC5tX2RhdGEpOworfQorCiBzdHJ1Y3QgVVVJREhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFVVSUQmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFVVSUQmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5
KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFVVSUQmIGEsIGNvbnN0IFVVSUQmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0hhc2hlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApp
bmRleCBhNWRkOGQ4ZmJiNTE4YTE5NzMxZTUwNTc4MzVmM2ZlMmU5NmRmM2VjLi4yOWI5ODdjNDM3
NzlkYzQwNjZhNWI2NWU5YzRlNWE5NTc3NTUwYzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aGVyLmgKQEAgLTIyNSwyMyArMjI1LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2hBbmRNYXNrVG9wOEJpdHM8VCwgRGVmYXVsdENvbnZlcnRlcj4oY2hhcmFjdGVycywgY2hh
cmFjdGVyc0NvdW50IC0gMSk7CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1v
cnkoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgc2l6
ZV90IGxlbmd0aEluVUNoYXIgPSBsZW5ndGggLyBzaXplb2YoVUNoYXIpOwotICAgICAgICBTdHJp
bmdIYXNoZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxp
Z25lZChzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEpLCBsZW5ndGhJblVDaGFyKTsKLQot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aCAlIHNpemVvZihVQ2hhcik7ICsr
aSkKLSAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEpW2xlbmd0aEluVUNoYXIgKiBzaXplb2YoVUNoYXIpICsgaV0pOwotCi0gICAgICAg
IHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBsZW5n
dGg+IHN0YXRpYyB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQqIGRhdGEpCi0gICAgewot
ICAgICAgICByZXR1cm4gaGFzaE1lbW9yeShkYXRhLCBsZW5ndGgpOwotICAgIH0KLQogcHJpdmF0
ZToKICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hl
Qml0cyh1bnNpZ25lZCBoYXNoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaApp
bmRleCBiZDM5NTRhMjg5NzNjZWI4YTViZjY0OGY0YWE1MTIzZjJlZmJlZjQ1Li4zYTMyMDE2NmI0
ZDIxMmIwYWUyM2E2ZWFkYTEyZDMxM2NmYmUyOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRp
Zmllci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlByb2Nl
c3NJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwxMiArNTUs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhbV9yZXNvdXJjZU51bWJlciAmJiAhbV9pZGJD
b25uZWN0aW9uSWRlbnRpZmllcjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hDb2Rlc1syXSA9IHsgbV9pZGJDb25uZWN0aW9u
SWRlbnRpZmllci50b1VJbnQ2NCgpLCBtX3Jlc291cmNlTnVtYmVyIH07Ci0gICAgICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7
Ci0gICAgfQotCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0CiAgICAg
ewpAQCAtODMsMTQgKzc3LDIwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3Ry
dWN0IElEQlJlc291cmNlSWRlbnRpZmllckhhc2hUcmFpdHM7CisgICAgZnJpZW5kIHZvaWQgYWRk
KEhhc2hlciYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogCiAgICAgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyKElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIElEQkNvbm5lY3Rpb25JZGVudGlmaWVyIG1faWRiQ29ubmVjdGlvbklk
ZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9yZXNvdXJjZU51bWJlciB7IDAgfTsKIH07CiAKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIuY29ubmVjdGlvbklk
ZW50aWZpZXIoKSwgaWRlbnRpZmllci5tX3Jlc291cmNlTnVtYmVyKTsKK30KKwogc3RydWN0IElE
QlJlc291cmNlSWRlbnRpZmllckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgYSkgeyByZXR1cm4gYS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGEpIHsgcmV0dXJu
IGNvbXB1dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiBhLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJpYnV0ZS5oCmluZGV4IDBkNjI1ZTk0ZWM0
N2JmMmNhMDhmNWQ5Y2I1YzdiMDQyZmQ2NDUyNWEuLjlhYzRkYmIxYjIwYWY0YjA3MjA4MDYzYmM4
Mjc2ZjVmMjUzNDM2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NCw2ICs3NSwxMSBAQCBw
cml2YXRlOgogICAgIEF0b21TdHJpbmcgbV92YWx1ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit7CisgICAgYWRkKGhh
c2hlciwgYXR0cmlidXRlLm5hbWUoKSwgYXR0cmlidXRlLnZhbHVlKCkpOworfQorCiBpbmxpbmUg
Ym9vbCBBdHRyaWJ1dGU6Om5hbWVNYXRjaGVzRmlsdGVyKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlclByZWZpeCwgY29uc3QgQXRvbVN0cmluZyYgZmls
dGVyTG9jYWxOYW1lLCBjb25zdCBBdG9tU3RyaW5nJiBmaWx0ZXJOYW1lc3BhY2VVUkkpCiB7CiAg
ICAgaWYgKGZpbHRlckxvY2FsTmFtZSAhPSBuYW1lLmxvY2FsTmFtZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcAppbmRleCA4YWM0MWJhMWMw
Y2VhZmVkN2Y5NDE3M2FiOGYzZDVhMGZiMTAyNTA3Li45YmUwOGZjNWI1NGNhZDBhZTg1MjgzZTVk
ZmQ1NGM2NjljYjFkMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFy
ZWRPYmplY3RQb29sLmNwcApAQCAtMzIsMTEgKzMyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1pbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlSGFzaChjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGF0
dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSAqIHNpemVvZihBdHRyaWJ1dGUpKTsK
LX0KLQogaW5saW5lIGJvb2wgaGFzU2FtZUF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZT4mIGF0dHJpYnV0ZXMsIFNoYXJlYWJsZUVsZW1lbnREYXRhJiBlbGVtZW50RGF0YSkKIHsKICAg
ICBpZiAoYXR0cmlidXRlcy5zaXplKCkgIT0gZWxlbWVudERhdGEubGVuZ3RoKCkpCkBAIC00OCw3
ICs0Myw3IEBAIFJlZjxTaGFyZWFibGVFbGVtZW50RGF0YT4gRG9jdW1lbnRTaGFyZWRPYmplY3RQ
b29sOjpjYWNoZWRTaGFyZWFibGVFbGVtZW50RGF0YVdpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1
dGVzLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvJiBjYWNoZWREYXRhID0gbV9zaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlLmFkZChhdHRyaWJ1dGVIYXNoKGF0dHJpYnV0ZXMpLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgYXV0byYgY2FjaGVkRGF0YSA9IG1fc2hhcmVhYmxlRWxlbWVudERh
dGFDYWNoZS5hZGQoY29tcHV0ZUhhc2goYXR0cmlidXRlcyksIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHByZXZlbnRzIHNoYXJpbmcgd2hlbiB0aGVyZSdz
IGEgaGFzaCBjb2xsaXNpb24uCiAgICAgaWYgKGNhY2hlZERhdGEgJiYgIWhhc1NhbWVBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMsICpjYWNoZWREYXRhKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1l
LmNwcAppbmRleCA2NjAwOGNmMzIyNzkwZjE4MDA3YTJjZjc0ZjI4YjIyYWRiMjA2NDNmLi42NjBk
OWZhZWM3YWRlMDA0YzQ1YWJjOTc3MDJjNjMyZDljYTQ2OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWUuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIFF1YWxp
ZmllZE5hbWU6OmxvY2FsTmFtZVVwcGVyKCkgY29uc3QKIHVuc2lnbmVkIFF1YWxpZmllZE5hbWU6
OlF1YWxpZmllZE5hbWVJbXBsOjpjb21wdXRlSGFzaCgpIGNvbnN0CiB7CiAgICAgUXVhbGlmaWVk
TmFtZUNvbXBvbmVudHMgY29tcG9uZW50cyA9IHsgbV9wcmVmaXguaW1wbCgpLCBtX2xvY2FsTmFt
ZS5pbXBsKCksIG1fbmFtZXNwYWNlLmltcGwoKSB9OwotICAgIHJldHVybiBoYXNoQ29tcG9uZW50
cyhjb21wb25lbnRzKTsKKyAgICByZXR1cm4gV1RGOjpjb21wdXRlSGFzaChjb21wb25lbnRzKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKaW5kZXggM2NmOThjZDIwN2M5NzU0
N2ZhMDdhZWE2ZGQ0NjA0M2Y5MDBlYTExMS4uMzMwMjY1MzhkYmJjZjMwM2JlNWI2ZGE1YzYzNDMz
MzM0ZDUxOWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0yMSwxNyArMjEs
MjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
cnVjdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyB7Ci0gICAgU3RyaW5nSW1wbCogbV9wcmVmaXg7
Ci0gICAgU3RyaW5nSW1wbCogbV9sb2NhbE5hbWU7Ci0gICAgU3RyaW5nSW1wbCogbV9uYW1lc3Bh
Y2U7CisgICAgQXRvbVN0cmluZ0ltcGwqIG1fcHJlZml4OworICAgIEF0b21TdHJpbmdJbXBsKiBt
X2xvY2FsTmFtZTsKKyAgICBBdG9tU3RyaW5nSW1wbCogbV9uYW1lc3BhY2U7CiB9OwogCitpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRz
JiBjb21wb25lbnRzKQoreworICAgIGFkZChoYXNoZXIsIGNvbXBvbmVudHMubV9wcmVmaXgsIGNv
bXBvbmVudHMubV9sb2NhbE5hbWUsIGNvbXBvbmVudHMubV9uYW1lc3BhY2UpOworfQorCiBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihRdWFsaWZpZWROYW1lKTsKIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFF1YWxpZmllZE5hbWVRdWFsaWZpZWRO
YW1lSW1wbCk7CiAKQEAgLTExMCw2ICsxMTYsMTYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UXVh
bGlmaWVkTmFtZUltcGw+IG1faW1wbDsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwmIGltcGwpCit7Cisg
ICAgYWRkKGhhc2hlciwgaW1wbC5tX3ByZWZpeCwgaW1wbC5tX2xvY2FsTmFtZSwgaW1wbC5tX25h
bWVzcGFjZSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBhZGQoaGFzaGVyLCAqbmFtZS5pbXBsKCkpOworfQor
CiBleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+IGFueU5hbWU7
CiBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55UU5hbWUoKSB7IHJldHVybiBhbnlOYW1l
OyB9CiAKQEAgLTEyMCwxMSArMTM2LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBB
dG9tU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVybiBhICEKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbVN0cmlu
ZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21TdHJpbmcmIGEpIHsgcmV0dXJu
IGEgIT0gcS5sb2NhbE5hbWUoKTsgfQogCi1pbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMo
Y29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGJ1ZikKLXsKLSAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihRdWFsaWZpZWROYW1lQ29tcG9uZW50cyk+KCZidWYp
OwotfQotCiBzdHJ1Y3QgUXVhbGlmaWVkTmFtZUhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIHsgcmV0dXJuIGhhc2gobmFtZS5pbXBsKCkp
OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKaW5kZXggZDc0
YWJhODAzNGUyY2M4NTZlN2MxMGVhOWM4M2JhOTE5ZmRjYWZiMS4uNzk2NWRmNzVlMzliMmY0NWQ4
MmE5ZTkyNzk2NGZlOTBjNWI1OTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5h
bWVDYWNoZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0
IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2goY29tcG9uZW50cyk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKFF1YWxpZmll
ZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9u
ZW50cyYgYykKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dsb2JhbFdp
bmRvd0lkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRp
Zmllci5oCmluZGV4IGMwNDY3ZDdjN2RjMDhhNmJiNmJiYzkwZmE5NDI3NDk4YmE2Y2JjNDIuLmIz
ZDQ4ZmFlMWRhNzBhYzA3MjdiMzgwMDQxOGNkMzdkNWY4ODU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJQcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDggKzQwLDYgQEAgc3RydWN0IEdsb2Jh
bFdpbmRvd0lkZW50aWZpZXIgewogICAgIFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlm
aWVyOwogICAgIFdpbmRvd0lkZW50aWZpZXIgd2luZG93SWRlbnRpZmllcjsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxHbG9iYWxXaW5kb3dJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYpOwog
fTsKQEAgLTUwLDEzICs0OSw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFs
V2luZG93SWRlbnRpZmllciYgYSwgY29uc3QgR2xvYmFsV2luZG93SWRlbnRpCiAgICAgcmV0dXJu
IGEucHJvY2Vzc0lkZW50aWZpZXIgPT0gYi5wcm9jZXNzSWRlbnRpZmllciAmJiAgYS53aW5kb3dJ
ZGVudGlmaWVyID09IGIud2luZG93SWRlbnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIEds
b2JhbFdpbmRvd0lkZW50aWZpZXI6Omhhc2goKSBjb25zdAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewot
ICAgIHVpbnQ2NF90IGlkZW50aWZpZXJzWzJdOwotICAgIGlkZW50aWZpZXJzWzBdID0gcHJvY2Vz
c0lkZW50aWZpZXIudG9VSW50NjQoKTsKLSAgICBpZGVudGlmaWVyc1sxXSA9IHdpbmRvd0lkZW50
aWZpZXIudG9VSW50NjQoKTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnko
aWRlbnRpZmllcnMsIHNpemVvZihpZGVudGlmaWVycykpOworICAgIGFkZChoYXNoZXIsIGlkZW50
aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZpZXIud2luZG93SWRlbnRpZmllcik7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC04Niw3ICs4MSw3IEBAIHN0ZDo6b3B0aW9u
YWw8R2xvYmFsV2luZG93SWRlbnRpZmllcj4gR2xvYmFsV2luZG93SWRlbnRpZmllcjo6ZGVjb2Rl
KERlY29kZXImIGRlCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50
aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9i
YWxXaW5kb3dJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBr
ZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBhLCBjb25zdCBXZWJDb3JlOjpH
bG9iYWxXaW5kb3dJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCmluZGV4IDIwM2JmNmIwODJkZmZiNGNkODRmOWZj
ZmQ4YmYwY2IzM2FlMGY1MTAuLjhjODZhZDU3ZmNkMmY4YzI2ODBiODg4ZWE0YWUwMjhhN2YzMDZh
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJTdG9yYWdlQmxvY2tp
bmdQb2xpY3kuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzA3LDQgKzMwOCw5IEBAIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IGlubGluZSBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2lu
OjpkZWNvZGUoRGVjCiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQoreworICAgIGFkZCho
YXNoZXIsIG9yaWdpbi5wcm90b2NvbCgpLCBvcmlnaW4uaG9zdCgpLCBvcmlnaW4ucG9ydCgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW5IYXNoLmgKaW5kZXggOWZhODIxNjgzMTMyOWEzYTBmZDlhYmQyMTFiYWNkZjM4NDgwN2My
Zi4uYmJhODNlZmM1ZjdiMzNhOWI4ODg3OTM5YzY1YTBjZGJjODRkZjdiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM3LDEyICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7Ci0gICAgICAgICAgICBv
cmlnaW4tPnByb3RvY29sKCkuaW1wbCgpID8gb3JpZ2luLT5wcm90b2NvbCgpLmltcGwoKS0+aGFz
aCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+aG9zdCgpLmltcGwoKSA/IG9yaWdpbi0+aG9z
dCgpLmltcGwoKS0+aGFzaCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+cG9ydCgpLnZhbHVl
X29yKDApCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaCgqb3JpZ2luKTsKICAgICB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiYgb3JpZ2luKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oCmlu
ZGV4IDMwOWViMTQ4YmZlMzMzZDM0MTZjY2ZjMzE0ZWMxYzc4YmRiZjZlNzkuLjhkZjYwNWIyZDE2
MzhkNTI1ZDQzMmFjMjRiNGUyYjlhMTBhMDQwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaApAQCAt
NTgsNyArNTgsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVVVJRCYgb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KICAgICBQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0lkZW50aWZpZXI7IH0KIAotICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdCB7IHJldHVybiBtX29iamVjdC5oYXNoKCk7IH0KICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzSWRlbnRpZmllci5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UHJvY2Vzc1F1YWxpZmllZCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVy
Lm1fb2JqZWN0ICYmIG1fcHJvY2Vzc0lkZW50aWZpZXIgPT0gb3RoZXIubV9wcm9jZXNzSWRlbnRp
ZmllcjsgfQpAQCAtNzQsNiArNzMsMTIgQEAgcHJpdmF0ZToKICAgICBQcm9jZXNzSWRlbnRpZmll
ciBtX3Byb2Nlc3NJZGVudGlmaWVyOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+JiB1dWlkKQoreworICAgIC8vIFNpbmNl
IFVVSURzIGFyZSB1bmlxdWUgb24gdGhlaXIgb3duLCBvcHRpbWl6ZSBieSBub3QgaGFzaGluZyB0
aGUgcHJvY2VzcyBpZGVudGlmaWVyLgorICAgIGFkZChoYXNoZXIsIHV1aWQub2JqZWN0KCkpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NRdWFs
aWZpZWQ8VVVJRD4+IFByb2Nlc3NRdWFsaWZpZWQ8VVVJRD46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIHN0ZDo6b3B0aW9uYWw8VVVJRD4gb2JqZWN0OwpAQCAtOTcsMTMgKzEwMiwz
IEBAIGlubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQ
cm9jZXNzUXVhbGlmaWVkPFVVSUQ+JiBwcm9jCiB1c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciA9IFByb2Nlc3NRdWFsaWZpZWQ8VVVJRD47CiAKIH0KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPD4KLWlubGluZSB1aW50MzJfdCBjb21wdXRlSGFzaChjb25zdCBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAg
ICByZXR1cm4gaWRlbnRpZmllci5vYmplY3QoKS5oYXNoKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0
Zm9ybURhdGFDb2NvYS5tbQppbmRleCBjYjJkMGJlODk3MDQ2YjdmZjlmMzI3NmM5NzY3OWFmYjRm
MDEyYWIzLi4wZDVhMGViYzdmZjM3NDU2OGFjNzEyMTI4YzlhMmFkMjZjMjJlNWE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJGb250
Q2FjaGVDb3JlVGV4dC5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxwYWwv
c3BpL2NmL0NvcmVUZXh0U1BJLmg+CisjaW1wb3J0IDx3dGYvSGFzaGVyLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC0zOCwxNiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVk
IEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogewotICAgIHVpbnRwdHJfdCBmbGFncyA9
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fd2lkdGhWYXJp
YW50KSA8PCA2Ci0gICAgICAgIHwgbV9pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSA8PCA1Ci0gICAg
ICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGV4dFJlbmRlcmluZ01vZGUpIDw8IDMKLSAg
ICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcmllbnRhdGlvbikgPDwgMgotICAgICAg
ICB8IG1fc3ludGhldGljQm9sZCA8PCAxCi0gICAgICAgIHwgbV9zeW50aGV0aWNPYmxpcXVlKTsK
LQotICAgIHVpbnRwdHJfdCBmb250SGFzaCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNo
KG1fZm9udC5nZXQoKSkpOwotICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9udEhhc2gs
IGZsYWdzIH07Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFz
aENvZGVzKT4oaGFzaENvZGVzKTsKKyAgICAvLyBGSVhNRTogSGFzaGluZyBhIENGSGFzaCBpcyB1
bmZvcnR1bmF0ZSBoZXJlLgorICAgIHJldHVybiBjb21wdXRlSGFzaChDRkhhc2gobV9mb250Lmdl
dCgpKSwgbV93aWR0aFZhcmlhbnQsIG1faXNIYXNoVGFibGVEZWxldGVkVmFsdWUsIG1fdGV4dFJl
bmRlcmluZ01vZGUsIG1fb3JpZW50YXRpb24sIG1fb3JpZW50YXRpb24sIG1fc3ludGhldGljQm9s
ZCwgbV9zeW50aGV0aWNPYmxpcXVlKTsKIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ0dXaW4uY3BwCmluZGV4IGE0MzIyYTRkZWZmMmFkODVhMzc2MGMwZmE3NzZkNDZk
MjA0N2NmYWYuLmRlOWY5Njk3NjQyZTQwMzk5MTk4NzQ5M2YxYmQ2OWIyMjc2NmQzMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4
dFNQSVdpbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hl
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMTMzLDExICsxMzQsMTEgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250
LCBDVEZvbnRSZWYgY3RGb250LCBDR0YKIAogdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFz
aCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhhc2hpbmcgaGFzaGVzIGhlcmUgaXMgdW5mb3J0
dW5hdGUuCiAgICAgdW5zaWduZWQgZm9udEhhc2ggPSBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6
IDA7CiAgICAgQ0ZIYXNoQ29kZSBjZ0ZvbnRIYXNoID0gc2FmZUNGSGFzaChtX2NnRm9udC5nZXQo
KSk7CiAgICAgQ0ZIYXNoQ29kZSBjdEZvbnRIYXNoID0gc2FmZUNGSGFzaChtX2N0Rm9udC5nZXQo
KSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFzaCwgY2dGb250SGFzaCwg
Y3RGb250SGFzaCwgbV91c2VHREkgfTsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJldHVybiBjb21wdXRlSGFz
aChmb250SGFzaCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VHREkpOwogfQogCiBib29s
IEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKaW5kZXgg
MmQzNzIzMDU0ZTZhY2I3ODNjZDZmNmY4Zjc4NGZjY2QzMTIzNzA0NC4uNTk3YWEwZWUxNTc2YzIx
ZTc1ZTI3ZDQxYWIxNjMyMzhiYjIwOGFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnRJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJ
bmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IFNWR0F0dHJpYnV0ZUhhc2hUcmFuc2xh
dG9yIHsKICAgICB7CiAgICAgICAgIGlmIChrZXkuaGFzUHJlZml4KCkpIHsKICAgICAgICAgICAg
IFF1YWxpZmllZE5hbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7IG51bGxBdG9tKCkuaW1wbCgp
LCBrZXkubG9jYWxOYW1lKCkuaW1wbCgpLCBrZXkubmFtZXNwYWNlVVJJKCkuaW1wbCgpIH07Ci0g
ICAgICAgICAgICByZXR1cm4gaGFzaENvbXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIERlZmF1bHRIYXNoPFF1YWxpZmllZE5hbWU+OjpoYXNoKGtleSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXkuY3BwCmluZGV4IDk2Y2RiM2E4MjI4NjYxY2FlYWFlY2IzN2NlZjYw
MjJhNDBhMDUyMmQuLjEzNWQ5MTBmNGU4NjQyMjQ5NjUwNmQ3MDAzNjBmNjIxM2EyMDg3NTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5jcHAKQEAgLTQ2LDE1ICs0Niw2IEBAIFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZW1wdHlL
ZXkoKQogICAgIHJldHVybiB7IH07CiB9CiAKLXVuc2lnbmVkIFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXk6Omhhc2goKSBjb25zdAotewotICAgIHVuc2lnbmVkIGhhc2hlc1syXTsKLSAgICBo
YXNoZXNbMF0gPSBTZWN1cml0eU9yaWdpbkRhdGFIYXNoOjpoYXNoKG1fdG9wT3JpZ2luKTsKLSAg
ICBoYXNoZXNbMV0gPSBTdHJpbmdIYXNoOjpoYXNoKG1fc2NvcGUuc3RyaW5nKCkpOwotCi0gICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsK
LX0KLQogYm9vbCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5OjpvcGVyYXRvcj09KGNvbnN0
IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIG90aGVyKSBjb25zdAogewogICAgIHJldHVy
biBtX3RvcE9yaWdpbiA9PSBvdGhlci5tX3RvcE9yaWdpbiAmJiBtX3Njb3BlID09IG90aGVyLm1f
c2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuaAppbmRleCBkMzJmNGQ5ZmE3YWJkOTkyMzM5
NjZkNTNjYTg2NzhmNmQwNzNhMmMwLi4yYzliYTYwNDgzNGMyYmRiOGVmOGJlYjU3ZDY3NDg3MGRh
MGJhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5KFNlY3VyaXR5T3JpZ2luRGF0YSYmIHRv
cE9yaWdpbiwgVVJMJiYgc2NvcGUpOwogCiAgICAgc3RhdGljIFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXkgZW1wdHlLZXkoKTsKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSYpIGNvbnN0
OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5
JiBrZXkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0ga2V5KTsgfQpAQCAtOTYsMTIgKzk2LDE3
IEBAIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4gU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbktleTo6ZGVjb2RlCiAgICAgcmV0dXJuIFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXkgeyBXVEZNb3ZlKCp0b3BPcmlnaW4pLCBXVEZNb3ZlKHNjb3BlKSB9OwogfQog
CitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkudG9wT3JpZ2luKCksIGtl
eS5zY29wZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RG
IHsKIAogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXlIYXNoIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBrZXkpIHsgcmV0
dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJD
b3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcAppbmRleCA2OTkwYWEwMGMxNjk2ODFmOTZiMzBlYmQ3MWM0ZjM5ZGEyMGNmNjM1
Li5kODJmMWJiOGNkYWJmNDg0ZDQ2YzBlZWI4NTQ3ODllYTQxOWYwMGQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGhlYWRlclNpemUgPSA4OwpAQCAtNzMs
MjIgKzc0LDIyIEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSW50ZWdlckFycmF5JiBh
LCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIpCiAgICAgcmV0dXJuIGEubV9pbnRlZ2VycyA9PSBiLm1f
aW50ZWdlcnMgJiYgIGEubV9zaXplID09IGIubV9zaXplOwogfQogCitpbmxpbmUgdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpCit7CisgICAgYWRkKGhh
c2hlciwgU3BhbiB7IGFycmF5LmludGVnZXJzKCksIGFycmF5LnNpemUoKSB9KSk7Cit9CisKIHN0
cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxJbnRlZ2VyQXJyYXk+IHsK
ICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSW50ZWdlckFycmF5JiBzbG90
KSB7IEhhc2hUcmFpdHM8c2l6ZV90Pjo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3QubV9zaXpl
KTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEludGVnZXJBcnJheSYg
c2xvdCkgeyByZXR1cm4gSGFzaFRyYWl0czxzaXplX3Q+Ojppc0RlbGV0ZWRWYWx1ZShzbG90Lm1f
c2l6ZSk7IH0KIH07CiAKIHN0cnVjdCBJbnRlZ2VyQXJyYXlIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBJbnRlZ2VyQXJyYXkmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KSB7IHJldHVybiBjb21wdXRlSGFzaChhcnJheSk7
IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJbnRlZ2VyQXJyYXkmLCBjb25zdCBJbnRl
Z2VyQXJyYXkmKTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CiB9OwogCi11bnNpZ25lZCBJbnRlZ2VyQXJyYXlIYXNoOjpoYXNoKGNv
bnN0IEludGVnZXJBcnJheSYgYXJyYXkpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeShhcnJheS5pbnRlZ2VycygpLCBhcnJheS5zaXplKCkgKiBzaXplb2YoaW50KSk7Ci19
Ci0KIGJvb2wgSW50ZWdlckFycmF5SGFzaDo6ZXF1YWwoY29uc3QgSW50ZWdlckFycmF5JiBhLCBj
b25zdCBJbnRlZ2VyQXJyYXkmIGIpCiB7CiAgICAgaWYgKGEuaXNEZWxldGVkVmFsdWUoKSB8fCBi
LmlzRGVsZXRlZFZhbHVlKCkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMDE5ZTFjM2MyOTZmNjczMTVhYmNhNGY4ZjdjOTQ4NzM1NDcxNjQxNi4u
NzNjYmRiZDFjM2MyMjgyNTQ5ZGFlN2QyN2I1ZjhiYzM5Mzc4OTRkYiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIy
LTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoKSBhbmQgdXNlIHRoZSBtb2Rlcm4gSGFzaGVyIGluc3Rl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA0
OQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwOgorCiAyMDIyLTAyLTIyICBSeWFuIEhh
ZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI4OTU4
MCk6IFsgaU9TIG1hY09TIF0gVGVzdFdlYktpdEFQSS5JUENUZXN0aW5nQVBJLkNhblJlY2VpdmVT
aGFyZWRNZW1vcnkgaXMgYSBjb25zdGFudCB0aW1lb3V0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAppbmRleCBhMDlmNDFhMzg0OTA4ZDkzYjk3YjQ0
ZTJkYzI5YWY5MGQ5YzdmYjQyLi4zMWQxMTI0YjVmMWI1NDUzZjVjNTQ2OWZhZGM4ZjQ4YWY5YjNj
MGE0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNo
ZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5j
cHAKQEAgLTQ2MiwyMCArNDYyLDQgQEAgVEVTVChXVEYsIFN0cmluZ0hhc2hlcl9jb21wdXRlSGFz
aEFuZE1hc2tUb3A4Qml0cykKICAgICBBU1NFUlRfRVEodGVzdEJIYXNoNSAmIDB4RkZGRkZGLCBT
dHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHRlc3RCVUNoYXJzLCA1KSk7
CiB9CiAKLVRFU1QoV1RGLCBTdHJpbmdIYXNoZXJfaGFzaE1lbW9yeSkKLXsKLSAgICBBU1NFUlRf
RVEoZW1wdHlTdHJpbmdIYXNoLCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoMCwgMCkpOwotICAg
IEFTU0VSVF9FUShlbXB0eVN0cmluZ0hhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShudWxs
VUNoYXJzLCAwKSk7Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwgU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5PDA+KDApKTsKLSAgICBBU1NFUlRfRVEoZW1wdHlTdHJpbmdIYXNoLCBTdHJp
bmdIYXNoZXI6Omhhc2hNZW1vcnk8MD4obnVsbFVDaGFycykpOwotCi0gICAgQVNTRVJUX0VRKHNp
bmdsZU51bGxDaGFyYWN0ZXJIYXNoLCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobnVsbFVDaGFy
cywgMikpOwotICAgIEFTU0VSVF9FUShzaW5nbGVOdWxsQ2hhcmFjdGVySGFzaCwgU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5PDI+KG51bGxVQ2hhcnMpKTsKLQotICAgIEFTU0VSVF9FUSh0ZXN0QUhh
c2g1LCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkodGVzdEFVQ2hhcnMsIDEwKSk7Ci0gICAgQVNT
RVJUX0VRKHRlc3RBSGFzaDUsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTwxMD4odGVzdEFVQ2hh
cnMpKTsKLSAgICBBU1NFUlRfRVEodGVzdEJIYXNoNSwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5
KHRlc3RCVUNoYXJzLCAxMCkpOwotICAgIEFTU0VSVF9FUSh0ZXN0Qkhhc2g1LCBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8MTA+KHRlc3RCVUNoYXJzKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452927</attachid>
            <date>2022-02-22 18:47:51 -0800</date>
            <delta_ts>2022-02-22 19:26:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237049-20220222184750.patch</filename>
            <type>text/plain</type>
            <size>30734</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMzMmQwNmQyNjJhN2FiZGEzOGYyM2Fk
NDlhMDhjNmI3MzZlMTEyY2MuLjUwZTk2ZDQ3N2E0ZTU1NTJjZDg2ZmUxMDc1ZWQzZDMzYzI1MTU3
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFu
ZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICAqIHd0Zi9TY2hlZHVsZVBhaXIuaDoKKyAgICAgICAgKFdURjo6
U2NoZWR1bGVQYWlySGFzaDo6aGFzaCk6CisgICAgICAgICogd3RmL1VVSUQuY3BwOgorICAgICAg
ICAoV1RGOjpVVUlEOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVVVJRC5o
OgorICAgICAgICAoV1RGOjpVVUlEOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OmFkZCk6CisgICAgICAgIChXVEY6OlVVSURIYXNoOjpoYXNoKToKKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0yMiAgRWxsaW90dCBXaWxsaWFtcyAg
PGVtd0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBsZWdhY3ktYnVpbGQtY29weS1uZXN0
ZWQtaGVhZGVycy5weSB3aXRoIGFuIHhjb2RlYnVpbGQgaW52b2NhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGMwNzQ1NWMyNTNiOWZjNzY5MGMyZjVhMDRhZjAwMTMwY2M4Mzc4M2YuLjU1NDZhNTAzYTA4OGFm
Njg4YTIzZGU1OTk1NTRlMzVkOGVjOTc1MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAor
MjAyMi0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERy
b3AgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9kZXJuIEhhc2hlciBp
bnN0ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzcwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oOgorICAgICAgICAo
V2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmllckhh
c2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVyOjpoYXNo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vQXR0cmlidXRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjphZGQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOjpjYWNoZWRTaGFy
ZWFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJp
YnV0ZUhhc2gpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsOjpjb21wdXRl
SGFzaCBjb25zdCk6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNoQ29tcG9uZW50cyk6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKiBwYWdlL0dsb2Jh
bFdpbmRvd0lkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChX
VEY6Okdsb2JhbFdpbmRvd0lkZW50aWZpZXJIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
Okdsb2JhbFdpbmRvd0lkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvU2VjdXJpdHlPcmlnaW5IYXNoLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvY2Vzc1F1YWxpZmllZDxVVUlEPjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OmNvbXB1dGVIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50SW5saW5lcy5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I6Omhhc2gpOgor
ICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uS2V5Lmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV1RG
OjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5SGFzaDo6aGFzaCk6CisKIDIwMjItMDItMjIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaGFyZSBtb3JlIGNv
ZGUgYmV0d2VlbiBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKCkgYW5kIGRpc3BhdGNoTG9j
YWxTdG9yYWdlRXZlbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5NTI0NWI2
ZmViMzNkMzQxM2U5NTI1YmIzYjZhZjgyMGMxNTQ4MjdmLi5iOTg0Mzk5ODU5MThlYjJjN2E3NmJm
NzZhZGRjY2FlOTE0NGZkMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhlIG1vZGVy
biBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAg
ICAgICAqIEhpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKGFkZCk6Cisg
ICAgICAgIChJbnRlZ2VyQXJyYXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0xOCAgUm9iZXJ0IEpl
bm5lciAgPEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5n
IHIyOTAxNDkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oCmluZGV4IDViM2UwNzk0MzgxNTY0M2M5Y2QxOGJhMWIzMjNhYTdhMmJm
ZTQ5ODYuLjhiOWE1NzgwZmEwOWRkMzE1NWJhMTI3N2E4YmYwM2MwM2RmNDVlZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5o
CkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxvcHRpb25hbD4KICNpbmNsdWRlIDx2YXJp
YW50PgorI2luY2x1ZGUgPHd0Zi9JbnQxMjguaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KQEAgLTc1LDYgKzc2LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlcj4g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVkSW50CiAgICAgYWRkKGhh
c2hlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIgPj4gMzIpKTsKIH0KIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBVSW50MTI4JiB2YWx1ZSkKK3sKKyAgICBh
dXRvIGhpZ2ggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUgPj4gNjQpOworICAgIGF1dG8g
bG93ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBhZGQoaGFzaGVyLCBoaWdo
KTsKKyAgICBhZGQoaGFzaGVyLCBsb3cpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRB
cml0aG1ldGljPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2lnbmVkPFNpZ25lZEFyaXRobWV0
aWM+Ojp2YWx1ZSwgdm9pZD4gYWRkKEhhc2hlciYgaGFzaGVyLCBTaWduZWRBcml0aG1ldGljIG51
bWJlcikKIHsKICAgICAvLyBXZSBvdmVybG9hZGVkIGZvciBkb3VibGUgYW5kIGZsb2F0IGJlbG93
LCBqdXN0IGRlYWwgd2l0aCBpbnRlZ2VycyBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU2NoZWR1bGVQYWlyLmggYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaAppbmRleCA0
NDczYzVjY2YwMDdiN2VmNWM0OTM5YWI0Zjg3ZDE0YjY1ZTA3M2FiLi4xZmIwOTc3ZDZhMjc3ODQ4
NjI3NWVkOTNmMmNjOGEwNGY4Zjk0YTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TY2hl
ZHVsZVBhaXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIuaApAQCAtMjksNiAr
MjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC03MCwxMSArNzEsMTYgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG1fbW9kZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
U2NoZWR1bGVQYWlyJiBwYWlyKQoreworICAgIC8vIEZJWE1FOiBIYXNoaW5nIGEgQ0ZIYXNoIGhl
cmUgaXMgdW5mb3J0dW5hdGUuCisgICAgYWRkKGhhc2hlciwgcGFpci5ydW5Mb29wKCksIHBhaXIu
bW9kZSgpID8gQ0ZIYXNoKHBhaXIubW9kZSgpKSA6IDApOworfQorCiBzdHJ1Y3QgU2NoZWR1bGVQ
YWlySGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFNjaGVkdWxl
UGFpcj4mIHBhaXIpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzJdID0geyBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFpci0+cnVuTG9vcCgpKSwgcGFpci0+bW9kZSgp
ID8gQ0ZIYXNoKHBhaXItPm1vZGUoKSkgOiAwIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJl
dHVybiBjb21wdXRlSGFzaCgqcGFpcik7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVmUHRyPFNjaGVkdWxlUGFpcj4mIGEsIGNvbnN0IFJlZlB0cjxTY2hlZHVsZVBhaXI+
JiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VVSUQu
Y3BwIGIvU291cmNlL1dURi93dGYvVVVJRC5jcHAKaW5kZXggMmRlZDk5ZGQyYjYwZWIzZjU2NmI3
NDViNjBjZGVmZTkyNTQ3YzAzNS4uMDlmZTI5NzUyZDM5Yjc0YzJmNTAwNWIxZDQ5MWVhMmJlY2Uw
NWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVVVJRC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvVVVJRC5jcHAKQEAgLTU3LDExICs1Nyw2IEBAIFVVSUQ6OlVVSUQoKQogICAgIG1fZGF0
YSA9IChzdGF0aWNfY2FzdDxVSW50MTI4PihoaWdoKSA8PCA2NCkgfCBsb3c7CiB9CiAKLXVuc2ln
bmVkIFVVSUQ6Omhhc2goKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnkocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJm1fZGF0YSksIDE2
KTsKLX0KLQogU3RyaW5nIFVVSUQ6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBhdXRvIGhpZ2gg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9kYXRhID4+IDY0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1VVSUQuaCBiL1NvdXJjZS9XVEYvd3RmL1VVSUQuaAppbmRleCBmZTMzYzBmNGMy
ZjNhMzJiMjQ3N2VjYzVhN2M0MzhkNGFkOWJmOTUxLi5kYWZkNmVhYWRhMzFjNzQxYzE5NDY2YzIw
ZTNiMmM2MjZjZjVhMjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VVUlELmgKKysrIGIv
U291cmNlL1dURi93dGYvVVVJRC5oCkBAIC04MywxOSArODMsMjQgQEAgcHVibGljOgogICAgIH0K
IAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEgPT0gZGVsZXRlZFZhbHVlOyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGhh
c2goKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Q7CiAKICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2RhdGE7IH0KIAog
cHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVVVJRCgpOworICAgIGZyaWVuZCB2b2lk
IGFkZChIYXNoZXImLCBVVUlEKTsKIAogICAgIFVJbnQxMjggbV9kYXRhOwogfTsKIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBVVUlEIHV1aWQpCit7CisgICAgYWRkKGhhc2hlciwg
dXVpZC5tX2RhdGEpOworfQorCiBzdHJ1Y3QgVVVJREhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFVVSUQmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFVVSUQmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5
KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFVVSUQmIGEsIGNvbnN0IFVVSUQmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0hhc2hlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApp
bmRleCBhNWRkOGQ4ZmJiNTE4YTE5NzMxZTUwNTc4MzVmM2ZlMmU5NmRmM2VjLi4yOWI5ODdjNDM3
NzlkYzQwNjZhNWI2NWU5YzRlNWE5NTc3NTUwYzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aGVyLmgKQEAgLTIyNSwyMyArMjI1LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2hBbmRNYXNrVG9wOEJpdHM8VCwgRGVmYXVsdENvbnZlcnRlcj4oY2hhcmFjdGVycywgY2hh
cmFjdGVyc0NvdW50IC0gMSk7CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1v
cnkoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgc2l6
ZV90IGxlbmd0aEluVUNoYXIgPSBsZW5ndGggLyBzaXplb2YoVUNoYXIpOwotICAgICAgICBTdHJp
bmdIYXNoZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxp
Z25lZChzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEpLCBsZW5ndGhJblVDaGFyKTsKLQot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aCAlIHNpemVvZihVQ2hhcik7ICsr
aSkKLSAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEpW2xlbmd0aEluVUNoYXIgKiBzaXplb2YoVUNoYXIpICsgaV0pOwotCi0gICAgICAg
IHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBsZW5n
dGg+IHN0YXRpYyB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQqIGRhdGEpCi0gICAgewot
ICAgICAgICByZXR1cm4gaGFzaE1lbW9yeShkYXRhLCBsZW5ndGgpOwotICAgIH0KLQogcHJpdmF0
ZToKICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hl
Qml0cyh1bnNpZ25lZCBoYXNoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaApp
bmRleCBiZDM5NTRhMjg5NzNjZWI4YTViZjY0OGY0YWE1MTIzZjJlZmJlZjQ1Li4zYTMyMDE2NmI0
ZDIxMmIwYWUyM2E2ZWFkYTEyZDMxM2NmYmUyOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRp
Zmllci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlByb2Nl
c3NJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwxMiArNTUs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhbV9yZXNvdXJjZU51bWJlciAmJiAhbV9pZGJD
b25uZWN0aW9uSWRlbnRpZmllcjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hDb2Rlc1syXSA9IHsgbV9pZGJDb25uZWN0aW9u
SWRlbnRpZmllci50b1VJbnQ2NCgpLCBtX3Jlc291cmNlTnVtYmVyIH07Ci0gICAgICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7
Ci0gICAgfQotCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0CiAgICAg
ewpAQCAtODMsMTQgKzc3LDIwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3Ry
dWN0IElEQlJlc291cmNlSWRlbnRpZmllckhhc2hUcmFpdHM7CisgICAgZnJpZW5kIHZvaWQgYWRk
KEhhc2hlciYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogCiAgICAgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyKElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIElEQkNvbm5lY3Rpb25JZGVudGlmaWVyIG1faWRiQ29ubmVjdGlvbklk
ZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9yZXNvdXJjZU51bWJlciB7IDAgfTsKIH07CiAKK2lu
bGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIuY29ubmVjdGlvbklk
ZW50aWZpZXIoKSwgaWRlbnRpZmllci5tX3Jlc291cmNlTnVtYmVyKTsKK30KKwogc3RydWN0IElE
QlJlc291cmNlSWRlbnRpZmllckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgYSkgeyByZXR1cm4gYS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGEpIHsgcmV0dXJu
IGNvbXB1dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiBhLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJpYnV0ZS5oCmluZGV4IDBkNjI1ZTk0ZWM0
N2JmMmNhMDhmNWQ5Y2I1YzdiMDQyZmQ2NDUyNWEuLjlhYzRkYmIxYjIwYWY0YjA3MjA4MDYzYmM4
Mjc2ZjVmMjUzNDM2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NCw2ICs3NSwxMSBAQCBw
cml2YXRlOgogICAgIEF0b21TdHJpbmcgbV92YWx1ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit7CisgICAgYWRkKGhh
c2hlciwgYXR0cmlidXRlLm5hbWUoKSwgYXR0cmlidXRlLnZhbHVlKCkpOworfQorCiBpbmxpbmUg
Ym9vbCBBdHRyaWJ1dGU6Om5hbWVNYXRjaGVzRmlsdGVyKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlclByZWZpeCwgY29uc3QgQXRvbVN0cmluZyYgZmls
dGVyTG9jYWxOYW1lLCBjb25zdCBBdG9tU3RyaW5nJiBmaWx0ZXJOYW1lc3BhY2VVUkkpCiB7CiAg
ICAgaWYgKGZpbHRlckxvY2FsTmFtZSAhPSBuYW1lLmxvY2FsTmFtZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcAppbmRleCA4YWM0MWJhMWMw
Y2VhZmVkN2Y5NDE3M2FiOGYzZDVhMGZiMTAyNTA3Li45YmUwOGZjNWI1NGNhZDBhZTg1MjgzZTVk
ZmQ1NGM2NjljYjFkMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFy
ZWRPYmplY3RQb29sLmNwcApAQCAtMzIsMTEgKzMyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1pbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlSGFzaChjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGF0
dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSAqIHNpemVvZihBdHRyaWJ1dGUpKTsK
LX0KLQogaW5saW5lIGJvb2wgaGFzU2FtZUF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZT4mIGF0dHJpYnV0ZXMsIFNoYXJlYWJsZUVsZW1lbnREYXRhJiBlbGVtZW50RGF0YSkKIHsKICAg
ICBpZiAoYXR0cmlidXRlcy5zaXplKCkgIT0gZWxlbWVudERhdGEubGVuZ3RoKCkpCkBAIC00OCw3
ICs0Myw3IEBAIFJlZjxTaGFyZWFibGVFbGVtZW50RGF0YT4gRG9jdW1lbnRTaGFyZWRPYmplY3RQ
b29sOjpjYWNoZWRTaGFyZWFibGVFbGVtZW50RGF0YVdpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1
dGVzLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvJiBjYWNoZWREYXRhID0gbV9zaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlLmFkZChhdHRyaWJ1dGVIYXNoKGF0dHJpYnV0ZXMpLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgYXV0byYgY2FjaGVkRGF0YSA9IG1fc2hhcmVhYmxlRWxlbWVudERh
dGFDYWNoZS5hZGQoY29tcHV0ZUhhc2goYXR0cmlidXRlcyksIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHByZXZlbnRzIHNoYXJpbmcgd2hlbiB0aGVyZSdz
IGEgaGFzaCBjb2xsaXNpb24uCiAgICAgaWYgKGNhY2hlZERhdGEgJiYgIWhhc1NhbWVBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMsICpjYWNoZWREYXRhKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1l
LmNwcAppbmRleCA2NjAwOGNmMzIyNzkwZjE4MDA3YTJjZjc0ZjI4YjIyYWRiMjA2NDNmLi42NjBk
OWZhZWM3YWRlMDA0YzQ1YWJjOTc3MDJjNjMyZDljYTQ2OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWUuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIFF1YWxp
ZmllZE5hbWU6OmxvY2FsTmFtZVVwcGVyKCkgY29uc3QKIHVuc2lnbmVkIFF1YWxpZmllZE5hbWU6
OlF1YWxpZmllZE5hbWVJbXBsOjpjb21wdXRlSGFzaCgpIGNvbnN0CiB7CiAgICAgUXVhbGlmaWVk
TmFtZUNvbXBvbmVudHMgY29tcG9uZW50cyA9IHsgbV9wcmVmaXguaW1wbCgpLCBtX2xvY2FsTmFt
ZS5pbXBsKCksIG1fbmFtZXNwYWNlLmltcGwoKSB9OwotICAgIHJldHVybiBoYXNoQ29tcG9uZW50
cyhjb21wb25lbnRzKTsKKyAgICByZXR1cm4gV1RGOjpjb21wdXRlSGFzaChjb21wb25lbnRzKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKaW5kZXggM2NmOThjZDIwN2M5NzU0
N2ZhMDdhZWE2ZGQ0NjA0M2Y5MDBlYTExMS4uMzMwMjY1MzhkYmJjZjMwM2JlNWI2ZGE1YzYzNDMz
MzM0ZDUxOWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0yMSwxNyArMjEs
MjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
cnVjdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyB7Ci0gICAgU3RyaW5nSW1wbCogbV9wcmVmaXg7
Ci0gICAgU3RyaW5nSW1wbCogbV9sb2NhbE5hbWU7Ci0gICAgU3RyaW5nSW1wbCogbV9uYW1lc3Bh
Y2U7CisgICAgQXRvbVN0cmluZ0ltcGwqIG1fcHJlZml4OworICAgIEF0b21TdHJpbmdJbXBsKiBt
X2xvY2FsTmFtZTsKKyAgICBBdG9tU3RyaW5nSW1wbCogbV9uYW1lc3BhY2U7CiB9OwogCitpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRz
JiBjb21wb25lbnRzKQoreworICAgIGFkZChoYXNoZXIsIGNvbXBvbmVudHMubV9wcmVmaXgsIGNv
bXBvbmVudHMubV9sb2NhbE5hbWUsIGNvbXBvbmVudHMubV9uYW1lc3BhY2UpOworfQorCiBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihRdWFsaWZpZWROYW1lKTsKIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFF1YWxpZmllZE5hbWVRdWFsaWZpZWRO
YW1lSW1wbCk7CiAKQEAgLTExMCw2ICsxMTYsMTYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UXVh
bGlmaWVkTmFtZUltcGw+IG1faW1wbDsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwmIGltcGwpCit7Cisg
ICAgYWRkKGhhc2hlciwgaW1wbC5tX3ByZWZpeCwgaW1wbC5tX2xvY2FsTmFtZSwgaW1wbC5tX25h
bWVzcGFjZSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBhZGQoaGFzaGVyLCAqbmFtZS5pbXBsKCkpOworfQor
CiBleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+IGFueU5hbWU7
CiBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55UU5hbWUoKSB7IHJldHVybiBhbnlOYW1l
OyB9CiAKQEAgLTEyMCwxMSArMTM2LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBB
dG9tU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVybiBhICEKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbVN0cmlu
ZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21TdHJpbmcmIGEpIHsgcmV0dXJu
IGEgIT0gcS5sb2NhbE5hbWUoKTsgfQogCi1pbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMo
Y29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGJ1ZikKLXsKLSAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihRdWFsaWZpZWROYW1lQ29tcG9uZW50cyk+KCZidWYp
OwotfQotCiBzdHJ1Y3QgUXVhbGlmaWVkTmFtZUhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIHsgcmV0dXJuIGhhc2gobmFtZS5pbXBsKCkp
OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAKaW5kZXggZDc0
YWJhODAzNGUyY2M4NTZlN2MxMGVhOWM4M2JhOTE5ZmRjYWZiMS4uNzk2NWRmNzVlMzliMmY0NWQ4
MmE5ZTkyNzk2NGZlOTBjNWI1OTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5h
bWVDYWNoZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0
IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2goY29tcG9uZW50cyk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKFF1YWxpZmll
ZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9u
ZW50cyYgYykKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dsb2JhbFdp
bmRvd0lkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRp
Zmllci5oCmluZGV4IGMwNDY3ZDdjN2RjMDhhNmJiNmJiYzkwZmE5NDI3NDk4YmE2Y2JjNDIuLmIz
ZDQ4ZmFlMWRhNzBhYzA3MjdiMzgwMDQxOGNkMzdkNWY4ODU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJQcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDggKzQwLDYgQEAgc3RydWN0IEdsb2Jh
bFdpbmRvd0lkZW50aWZpZXIgewogICAgIFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlm
aWVyOwogICAgIFdpbmRvd0lkZW50aWZpZXIgd2luZG93SWRlbnRpZmllcjsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxHbG9iYWxXaW5kb3dJZGVudGlmaWVyPiBkZWNvZGUoRGVjb2RlciYpOwog
fTsKQEAgLTUwLDEzICs0OSw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFs
V2luZG93SWRlbnRpZmllciYgYSwgY29uc3QgR2xvYmFsV2luZG93SWRlbnRpCiAgICAgcmV0dXJu
IGEucHJvY2Vzc0lkZW50aWZpZXIgPT0gYi5wcm9jZXNzSWRlbnRpZmllciAmJiAgYS53aW5kb3dJ
ZGVudGlmaWVyID09IGIud2luZG93SWRlbnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIEds
b2JhbFdpbmRvd0lkZW50aWZpZXI6Omhhc2goKSBjb25zdAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewot
ICAgIHVpbnQ2NF90IGlkZW50aWZpZXJzWzJdOwotICAgIGlkZW50aWZpZXJzWzBdID0gcHJvY2Vz
c0lkZW50aWZpZXIudG9VSW50NjQoKTsKLSAgICBpZGVudGlmaWVyc1sxXSA9IHdpbmRvd0lkZW50
aWZpZXIudG9VSW50NjQoKTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnko
aWRlbnRpZmllcnMsIHNpemVvZihpZGVudGlmaWVycykpOworICAgIGFkZChoYXNoZXIsIGlkZW50
aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZpZXIud2luZG93SWRlbnRpZmllcik7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC04Niw3ICs4MSw3IEBAIHN0ZDo6b3B0aW9u
YWw8R2xvYmFsV2luZG93SWRlbnRpZmllcj4gR2xvYmFsV2luZG93SWRlbnRpZmllcjo6ZGVjb2Rl
KERlY29kZXImIGRlCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IEdsb2JhbFdpbmRvd0lkZW50
aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9i
YWxXaW5kb3dJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBr
ZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBXZWJDb3JlOjpHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiBhLCBjb25zdCBXZWJDb3JlOjpH
bG9iYWxXaW5kb3dJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCmluZGV4IDIwM2JmNmIwODJkZmZiNGNkODRmOWZj
ZmQ4YmYwY2IzM2FlMGY1MTAuLjhjODZhZDU3ZmNkMmY4YzI2ODBiODg4ZWE0YWUwMjhhN2YzMDZh
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJTdG9yYWdlQmxvY2tp
bmdQb2xpY3kuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzA3LDQgKzMwOCw5IEBAIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IGlubGluZSBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2lu
OjpkZWNvZGUoRGVjCiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQoreworICAgIGFkZCho
YXNoZXIsIG9yaWdpbi5wcm90b2NvbCgpLCBvcmlnaW4uaG9zdCgpLCBvcmlnaW4ucG9ydCgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW5IYXNoLmgKaW5kZXggOWZhODIxNjgzMTMyOWEzYTBmZDlhYmQyMTFiYWNkZjM4NDgwN2My
Zi4uYmJhODNlZmM1ZjdiMzNhOWI4ODg3OTM5YzY1YTBjZGJjODRkZjdiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM3LDEyICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7Ci0gICAgICAgICAgICBv
cmlnaW4tPnByb3RvY29sKCkuaW1wbCgpID8gb3JpZ2luLT5wcm90b2NvbCgpLmltcGwoKS0+aGFz
aCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+aG9zdCgpLmltcGwoKSA/IG9yaWdpbi0+aG9z
dCgpLmltcGwoKS0+aGFzaCgpIDogMCwKLSAgICAgICAgICAgIG9yaWdpbi0+cG9ydCgpLnZhbHVl
X29yKDApCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaCgqb3JpZ2luKTsKICAgICB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiYgb3JpZ2luKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oCmlu
ZGV4IDMwOWViMTQ4YmZlMzMzZDM0MTZjY2ZjMzE0ZWMxYzc4YmRiZjZlNzkuLjhkZjYwNWIyZDE2
MzhkNTI1ZDQzMmFjMjRiNGUyYjlhMTBhMDQwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaApAQCAt
NTgsNyArNTgsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVVVJRCYgb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KICAgICBQcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0lkZW50aWZpZXI7IH0KIAotICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdCB7IHJldHVybiBtX29iamVjdC5oYXNoKCk7IH0KICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzSWRlbnRpZmllci5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UHJvY2Vzc1F1YWxpZmllZCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVy
Lm1fb2JqZWN0ICYmIG1fcHJvY2Vzc0lkZW50aWZpZXIgPT0gb3RoZXIubV9wcm9jZXNzSWRlbnRp
ZmllcjsgfQpAQCAtNzQsNiArNzMsMTIgQEAgcHJpdmF0ZToKICAgICBQcm9jZXNzSWRlbnRpZmll
ciBtX3Byb2Nlc3NJZGVudGlmaWVyOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+JiB1dWlkKQoreworICAgIC8vIFNpbmNl
IFVVSURzIGFyZSB1bmlxdWUgb24gdGhlaXIgb3duLCBvcHRpbWl6ZSBieSBub3QgaGFzaGluZyB0
aGUgcHJvY2VzcyBpZGVudGlmaWVyLgorICAgIGFkZChoYXNoZXIsIHV1aWQub2JqZWN0KCkpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NRdWFs
aWZpZWQ8VVVJRD4+IFByb2Nlc3NRdWFsaWZpZWQ8VVVJRD46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIHN0ZDo6b3B0aW9uYWw8VVVJRD4gb2JqZWN0OwpAQCAtOTcsMTMgKzEwMiwz
IEBAIGlubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQ
cm9jZXNzUXVhbGlmaWVkPFVVSUQ+JiBwcm9jCiB1c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciA9IFByb2Nlc3NRdWFsaWZpZWQ8VVVJRD47CiAKIH0KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPD4KLWlubGluZSB1aW50MzJfdCBjb21wdXRlSGFzaChjb25zdCBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAg
ICByZXR1cm4gaWRlbnRpZmllci5vYmplY3QoKS5oYXNoKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0
Zm9ybURhdGFDb2NvYS5tbQppbmRleCBjYjJkMGJlODk3MDQ2YjdmZjlmMzI3NmM5NzY3OWFmYjRm
MDEyYWIzLi4wZDVhMGViYzdmZjM3NDU2OGFjNzEyMTI4YzlhMmFkMjZjMjJlNWE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJGb250
Q2FjaGVDb3JlVGV4dC5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxwYWwv
c3BpL2NmL0NvcmVUZXh0U1BJLmg+CisjaW1wb3J0IDx3dGYvSGFzaGVyLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC0zOCwxNiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVk
IEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogewotICAgIHVpbnRwdHJfdCBmbGFncyA9
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fd2lkdGhWYXJp
YW50KSA8PCA2Ci0gICAgICAgIHwgbV9pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSA8PCA1Ci0gICAg
ICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGV4dFJlbmRlcmluZ01vZGUpIDw8IDMKLSAg
ICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcmllbnRhdGlvbikgPDwgMgotICAgICAg
ICB8IG1fc3ludGhldGljQm9sZCA8PCAxCi0gICAgICAgIHwgbV9zeW50aGV0aWNPYmxpcXVlKTsK
LQotICAgIHVpbnRwdHJfdCBmb250SGFzaCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNo
KG1fZm9udC5nZXQoKSkpOwotICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9udEhhc2gs
IGZsYWdzIH07Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFz
aENvZGVzKT4oaGFzaENvZGVzKTsKKyAgICAvLyBGSVhNRTogSGFzaGluZyBhIENGSGFzaCBpcyB1
bmZvcnR1bmF0ZSBoZXJlLgorICAgIHJldHVybiBjb21wdXRlSGFzaChDRkhhc2gobV9mb250Lmdl
dCgpKSwgbV93aWR0aFZhcmlhbnQsIG1faXNIYXNoVGFibGVEZWxldGVkVmFsdWUsIG1fdGV4dFJl
bmRlcmluZ01vZGUsIG1fb3JpZW50YXRpb24sIG1fb3JpZW50YXRpb24sIG1fc3ludGhldGljQm9s
ZCwgbV9zeW50aGV0aWNPYmxpcXVlKTsKIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ0dXaW4uY3BwCmluZGV4IGE0MzIyYTRkZWZmMmFkODVhMzc2MGMwZmE3NzZkNDZk
MjA0N2NmYWYuLmRlOWY5Njk3NjQyZTQwMzk5MTk4NzQ5M2YxYmQ2OWIyMjc2NmQzMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4
dFNQSVdpbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hl
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMTMzLDExICsxMzQsMTEgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250
LCBDVEZvbnRSZWYgY3RGb250LCBDR0YKIAogdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFz
aCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhhc2hpbmcgaGFzaGVzIGhlcmUgaXMgdW5mb3J0
dW5hdGUuCiAgICAgdW5zaWduZWQgZm9udEhhc2ggPSBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6
IDA7CiAgICAgQ0ZIYXNoQ29kZSBjZ0ZvbnRIYXNoID0gc2FmZUNGSGFzaChtX2NnRm9udC5nZXQo
KSk7CiAgICAgQ0ZIYXNoQ29kZSBjdEZvbnRIYXNoID0gc2FmZUNGSGFzaChtX2N0Rm9udC5nZXQo
KSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFzaCwgY2dGb250SGFzaCwg
Y3RGb250SGFzaCwgbV91c2VHREkgfTsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworICAgIHJldHVybiBjb21wdXRlSGFz
aChmb250SGFzaCwgY2dGb250SGFzaCwgY3RGb250SGFzaCwgbV91c2VHREkpOwogfQogCiBib29s
IEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmgKaW5kZXgg
MmQzNzIzMDU0ZTZhY2I3ODNjZDZmNmY4Zjc4NGZjY2QzMTIzNzA0NC4uNTk3YWEwZWUxNTc2YzIx
ZTc1ZTI3ZDQxYWIxNjMyMzhiYjIwOGFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnRJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJ
bmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IFNWR0F0dHJpYnV0ZUhhc2hUcmFuc2xh
dG9yIHsKICAgICB7CiAgICAgICAgIGlmIChrZXkuaGFzUHJlZml4KCkpIHsKICAgICAgICAgICAg
IFF1YWxpZmllZE5hbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7IG51bGxBdG9tKCkuaW1wbCgp
LCBrZXkubG9jYWxOYW1lKCkuaW1wbCgpLCBrZXkubmFtZXNwYWNlVVJJKCkuaW1wbCgpIH07Ci0g
ICAgICAgICAgICByZXR1cm4gaGFzaENvbXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2goY29tcG9uZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIERlZmF1bHRIYXNoPFF1YWxpZmllZE5hbWU+OjpoYXNoKGtleSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXkuY3BwCmluZGV4IDk2Y2RiM2E4MjI4NjYxY2FlYWFlY2IzN2NlZjYw
MjJhNDBhMDUyMmQuLjEzNWQ5MTBmNGU4NjQyMjQ5NjUwNmQ3MDAzNjBmNjIxM2EyMDg3NTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5jcHAKQEAgLTQ2LDE1ICs0Niw2IEBAIFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZW1wdHlL
ZXkoKQogICAgIHJldHVybiB7IH07CiB9CiAKLXVuc2lnbmVkIFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXk6Omhhc2goKSBjb25zdAotewotICAgIHVuc2lnbmVkIGhhc2hlc1syXTsKLSAgICBo
YXNoZXNbMF0gPSBTZWN1cml0eU9yaWdpbkRhdGFIYXNoOjpoYXNoKG1fdG9wT3JpZ2luKTsKLSAg
ICBoYXNoZXNbMV0gPSBTdHJpbmdIYXNoOjpoYXNoKG1fc2NvcGUuc3RyaW5nKCkpOwotCi0gICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoZXMsIHNpemVvZihoYXNoZXMpKTsK
LX0KLQogYm9vbCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5OjpvcGVyYXRvcj09KGNvbnN0
IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIG90aGVyKSBjb25zdAogewogICAgIHJldHVy
biBtX3RvcE9yaWdpbiA9PSBvdGhlci5tX3RvcE9yaWdpbiAmJiBtX3Njb3BlID09IG90aGVyLm1f
c2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuaAppbmRleCBkMzJmNGQ5ZmE3YWJkOTkyMzM5
NjZkNTNjYTg2NzhmNmQwNzNhMmMwLi4yYzliYTYwNDgzNGMyYmRiOGVmOGJlYjU3ZDY3NDg3MGRh
MGJhMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5KFNlY3VyaXR5T3JpZ2luRGF0YSYmIHRv
cE9yaWdpbiwgVVJMJiYgc2NvcGUpOwogCiAgICAgc3RhdGljIFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25LZXkgZW1wdHlLZXkoKTsKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSYpIGNvbnN0
OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5
JiBrZXkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0ga2V5KTsgfQpAQCAtOTYsMTIgKzk2LDE3
IEBAIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4gU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbktleTo6ZGVjb2RlCiAgICAgcmV0dXJuIFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXkgeyBXVEZNb3ZlKCp0b3BPcmlnaW4pLCBXVEZNb3ZlKHNjb3BlKSB9OwogfQog
CitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkudG9wT3JpZ2luKCksIGtl
eS5zY29wZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RG
IHsKIAogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXlIYXNoIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBrZXkpIHsgcmV0
dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJD
b3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBhLCBjb25zdCBXZWJDb3JlOjpTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcAppbmRleCA2OTkwYWEwMGMxNjk2ODFmOTZiMzBlYmQ3MWM0ZjM5ZGEyMGNmNjM1
Li43MmZmY2Q2M2RlODk2MDEzMzI4YWMzODMxMDE1NmJkOWQ4OWIyMjk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGhlYWRlclNpemUgPSA4OwpAQCAtNzMs
MjIgKzc0LDIyIEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSW50ZWdlckFycmF5JiBh
LCBjb25zdCBJbnRlZ2VyQXJyYXkmIGIpCiAgICAgcmV0dXJuIGEubV9pbnRlZ2VycyA9PSBiLm1f
aW50ZWdlcnMgJiYgIGEubV9zaXplID09IGIubV9zaXplOwogfQogCitpbmxpbmUgdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpCit7CisgICAgYWRkKGhh
c2hlciwgU3BhbiB7IGFycmF5LmludGVnZXJzKCksIGFycmF5LnNpemUoKSB9KTsKK30KKwogc3Ry
dWN0IEludGVnZXJBcnJheUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEludGVnZXJBcnJheT4gewog
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShJbnRlZ2VyQXJyYXkmIHNsb3Qp
IHsgSGFzaFRyYWl0czxzaXplX3Q+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5tX3NpemUp
OyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgSW50ZWdlckFycmF5JiBz
bG90KSB7IHJldHVybiBIYXNoVHJhaXRzPHNpemVfdD46OmlzRGVsZXRlZFZhbHVlKHNsb3QubV9z
aXplKTsgfQogfTsKIAogc3RydWN0IEludGVnZXJBcnJheUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEludGVnZXJBcnJheSYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGFycmF5KTsg
fQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEludGVnZXJBcnJheSYsIGNvbnN0IEludGVn
ZXJBcnJheSYpOwogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKIH07CiAKLXVuc2lnbmVkIEludGVnZXJBcnJheUhhc2g6Omhhc2goY29u
c3QgSW50ZWdlckFycmF5JiBhcnJheSkKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNo
TWVtb3J5KGFycmF5LmludGVnZXJzKCksIGFycmF5LnNpemUoKSAqIHNpemVvZihpbnQpKTsKLX0K
LQogYm9vbCBJbnRlZ2VyQXJyYXlIYXNoOjplcXVhbChjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNv
bnN0IEludGVnZXJBcnJheSYgYikKIHsKICAgICBpZiAoYS5pc0RlbGV0ZWRWYWx1ZSgpIHx8IGIu
aXNEZWxldGVkVmFsdWUoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCAwMTllMWMzYzI5NmY2NzMxNWFiY2E0ZjhmN2M5NDg3MzU0NzE2NDE2Li43
M2NiZGJkMWMzYzIyODI1NDlkYWU3ZDI3YjVmOGJjMzkzNzg5NGRiIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjIt
MDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0
cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVh
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHA6CisKIDIwMjItMDItMjIgIFJ5YW4gSGFk
ZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjg5NTgw
KTogWyBpT1MgbWFjT1MgXSBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkuQ2FuUmVjZWl2ZVNo
YXJlZE1lbW9yeSBpcyBhIGNvbnN0YW50IHRpbWVvdXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwCmluZGV4IGEwOWY0MWEzODQ5MDhkOTNiOTdiNDRl
MmRjMjlhZjkwZDljN2ZiNDIuLjMxZDExMjRiNWYxYjU0NTNmNWM1NDY5ZmFkYzhmNDhhZjliM2Mw
YTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hl
ci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNw
cApAQCAtNDYyLDIwICs0NjIsNCBAQCBURVNUKFdURiwgU3RyaW5nSGFzaGVyX2NvbXB1dGVIYXNo
QW5kTWFza1RvcDhCaXRzKQogICAgIEFTU0VSVF9FUSh0ZXN0Qkhhc2g1ICYgMHhGRkZGRkYsIFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHModGVzdEJVQ2hhcnMsIDUpKTsK
IH0KIAotVEVTVChXVEYsIFN0cmluZ0hhc2hlcl9oYXNoTWVtb3J5KQotewotICAgIEFTU0VSVF9F
UShlbXB0eVN0cmluZ0hhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgwLCAwKSk7Ci0gICAg
QVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG51bGxV
Q2hhcnMsIDApKTsKLSAgICBBU1NFUlRfRVEoZW1wdHlTdHJpbmdIYXNoLCBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8MD4oMCkpOwotICAgIEFTU0VSVF9FUShlbXB0eVN0cmluZ0hhc2gsIFN0cmlu
Z0hhc2hlcjo6aGFzaE1lbW9yeTwwPihudWxsVUNoYXJzKSk7Ci0KLSAgICBBU1NFUlRfRVEoc2lu
Z2xlTnVsbENoYXJhY3Rlckhhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShudWxsVUNoYXJz
LCAyKSk7Ci0gICAgQVNTRVJUX0VRKHNpbmdsZU51bGxDaGFyYWN0ZXJIYXNoLCBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8Mj4obnVsbFVDaGFycykpOwotCi0gICAgQVNTRVJUX0VRKHRlc3RBSGFz
aDUsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSh0ZXN0QVVDaGFycywgMTApKTsKLSAgICBBU1NF
UlRfRVEodGVzdEFIYXNoNSwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PDEwPih0ZXN0QVVDaGFy
cykpOwotICAgIEFTU0VSVF9FUSh0ZXN0Qkhhc2g1LCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnko
dGVzdEJVQ2hhcnMsIDEwKSk7Ci0gICAgQVNTRVJUX0VRKHRlc3RCSGFzaDUsIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTwxMD4odGVzdEJVQ2hhcnMpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452929</attachid>
            <date>2022-02-22 19:26:10 -0800</date>
            <delta_ts>2022-02-22 22:13:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237049-20220222192609.patch</filename>
            <type>text/plain</type>
            <size>30778</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMzMmQwNmQyNjJhN2FiZGEzOGYyM2Fk
NDlhMDhjNmI3MzZlMTEyY2MuLjhjMTAyNzA2NTEyZTNiYWFkYWEzZDYxYjYzNWZmNzJkMjE2NGFm
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFu
ZCB1c2UgdGhlIG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZyBhbmQgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiB3dGYvU2NoZWR1bGVQYWlyLmg6
CisgICAgICAgIChXVEY6OlNjaGVkdWxlUGFpckhhc2g6Omhhc2gpOgorICAgICAgICAqIHd0Zi9V
VUlELmNwcDoKKyAgICAgICAgKFdURjo6VVVJRDo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1VVSUQuaDoKKyAgICAgICAgKFdURjo6VVVJRDo6aXNIYXNoVGFibGVEZWxldGVk
VmFsdWUgY29uc3QpOgorICAgICAgICAoV1RGOjphZGQpOgorICAgICAgICAoV1RGOjpVVUlESGFz
aDo6aGFzaCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChX
VEY6OlN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSk6IERlbGV0ZWQuCisKIDIwMjItMDItMjIgIEVs
bGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgbGVnYWN5
LWJ1aWxkLWNvcHktbmVzdGVkLWhlYWRlcnMucHkgd2l0aCBhbiB4Y29kZWJ1aWxkIGludm9jYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBjMDc0NTVjMjUzYjlmYzc2OTBjMmY1YTA0YWYwMDEzMGNjODM3ODNm
Li41MjYyMTA2YzM1ZDgwZTRkNjJkMmJmMGU5YmEyZWJmMmRiYmI4MTMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDggQEAKKzIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBEcm9wIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgpIGFuZCB1c2UgdGhl
IG1vZGVybiBIYXNoZXIgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyBh
bmQgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
UmVzb3VyY2VJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVzb3VyY2VJZGVudGlmaWVySGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXNvdXJjZUlkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGRvbS9BdHRyaWJ1dGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlSGFzaCk6IERlbGV0ZWQuCisgICAg
ICAgICogZG9tL1F1YWxpZmllZE5hbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVhbGlmaWVk
TmFtZTo6UXVhbGlmaWVkTmFtZUltcGw6OmNvbXB1dGVIYXNoIGNvbnN0KToKKyAgICAgICAgKiBk
b20vUXVhbGlmaWVkTmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdl
YkNvcmU6Omhhc2hDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vUXVhbGlmaWVk
TmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlFOYW1lQ29tcG9uZW50c1RyYW5zbGF0
b3I6Omhhc2gpOgorICAgICAgICAqIHBhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdURjo6R2xvYmFsV2luZG93SWRlbnRpZmll
ckhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsV2luZG93SWRlbnRpZmllcjo6
aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbkhhc2gu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luSGFzaDo6aGFzaCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzUXVhbGlmaWVkPFVVSUQ+
OjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y29tcHV0ZUhhc2gpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2ggY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
dHRyaWJ1dGVIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNl
L1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXVEY6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25LZXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFNoYXJlIG1vcmUgY29kZSBiZXR3ZWVuIGRpc3BhdGNoU2Vzc2lv
blN0b3JhZ2VFdmVudHMoKSBhbmQgZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDk1MjQ1YjZmZWIzM2QzNDEzZTk1MjViYjNiNmFmODIw
YzE1NDgyN2YuLmQ4YzNiYmU0Y2RjYmUwMjE5NDEzODIwZmQzNWZjMGQ4ZDYwYTQxZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMi0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9kZXJuIEhhc2hlciBpbnN0ZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnIGFuZCBEYXJpbiBBZGxlci4KKworICAgICAgICAqIEhp
c3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKGFkZCk6CisgICAgICAgIChJ
bnRlZ2VyQXJyYXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0xOCAgUm9iZXJ0IEplbm5lciAgPEpl
bm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxNDku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hlci5oCmluZGV4IDViM2UwNzk0MzgxNTY0M2M5Y2QxOGJhMWIzMjNhYTdhMmJmZTQ5ODYuLmNi
Y2YxZTlhOTQwZWZhNjAyZTBiZGNmZmE5MzFkZGIyNzIyYjJmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC0yMiw2
ICsyMiw3IEBACiAKICNpbmNsdWRlIDxvcHRpb25hbD4KICNpbmNsdWRlIDx2YXJpYW50PgorI2lu
Y2x1ZGUgPHd0Zi9JbnQxMjguaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTc1
LDYgKzc2LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlcj4gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVkSW50CiAgICAgYWRkKGhhc2hlciwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIgPj4gMzIpKTsKIH0KIAoraW5saW5lIHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBVSW50MTI4IHZhbHVlKQoreworICAgIGF1dG8gaGlnaCA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2YWx1ZSA+PiA2NCk7CisgICAgYXV0byBsb3cgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odmFsdWUpOworICAgIGFkZChoYXNoZXIsIGhpZ2gpOworICAgIGFkZChoYXNo
ZXIsIGxvdyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFNpZ25lZEFyaXRobWV0aWM+IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zaWduZWQ8U2lnbmVkQXJpdGhtZXRpYz46OnZhbHVlLCB2b2lk
PiBhZGQoSGFzaGVyJiBoYXNoZXIsIFNpZ25lZEFyaXRobWV0aWMgbnVtYmVyKQogewogICAgIC8v
IFdlIG92ZXJsb2FkZWQgZm9yIGRvdWJsZSBhbmQgZmxvYXQgYmVsb3csIGp1c3QgZGVhbCB3aXRo
IGludGVnZXJzIGhlcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TY2hlZHVsZVBhaXIu
aCBiL1NvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpci5oCmluZGV4IDQ0NzNjNWNjZjAwN2I3ZWY1
YzQ5MzlhYjRmODdkMTRiNjVlMDczYWIuLjFmYjA5NzdkNmEyNzc4NDg2Mjc1ZWQ5M2YyY2M4YTA0
ZjhmOTRhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1NjaGVkdWxlUGFpci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTcwLDExICs3
MSwxNiBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbV9tb2RlOwogfTsK
IAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBTY2hlZHVsZVBhaXImIHBh
aXIpCit7CisgICAgLy8gRklYTUU6IEhhc2hpbmcgYSBDRkhhc2ggaGVyZSBpcyB1bmZvcnR1bmF0
ZS4KKyAgICBhZGQoaGFzaGVyLCBwYWlyLnJ1bkxvb3AoKSwgcGFpci5tb2RlKCkgPyBDRkhhc2go
cGFpci5tb2RlKCkpIDogMCk7Cit9CisKIHN0cnVjdCBTY2hlZHVsZVBhaXJIYXNoIHsKICAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U2NoZWR1bGVQYWlyPiYgcGFpcikKICAg
ICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMl0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwYWlyLT5ydW5Mb29wKCkpLCBwYWlyLT5tb2RlKCkgPyBDRkhhc2gocGFpci0+
bW9kZSgpKSA6IDAgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxz
aXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNo
KCpwYWlyKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8U2No
ZWR1bGVQYWlyPiYgYSwgY29uc3QgUmVmUHRyPFNjaGVkdWxlUGFpcj4mIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9VVUlELmNwcAppbmRleCAyZGVkOTlkZDJiNjBlYjNmNTY2Yjc0NWI2MGNkZWZlOTI1NDdj
MDM1Li4wOWZlMjk3NTJkMzliNzRjMmY1MDA1YjFkNDkxZWEyYmVjZTA1YThiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9VVUlELmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VVUlELmNwcApA
QCAtNTcsMTEgKzU3LDYgQEAgVVVJRDo6VVVJRCgpCiAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0
PFVJbnQxMjg+KGhpZ2gpIDw8IDY0KSB8IGxvdzsKIH0KIAotdW5zaWduZWQgVVVJRDo6aGFzaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmbV9kYXRhKSwgMTYpOwotfQotCiBTdHJpbmcg
VVVJRDo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIGF1dG8gaGlnaCA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihtX2RhdGEgPj4gNjQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVVJRC5o
IGIvU291cmNlL1dURi93dGYvVVVJRC5oCmluZGV4IGZlMzNjMGY0YzJmM2EzMmIyNDc3ZWNjNWE3
YzQzOGQ0YWQ5YmY5NTEuLmRhZmQ2ZWFhZGEzMWM3NDFjMTk0NjZjMjBlM2IyYzYyNmNmNWEyOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VVSUQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9V
VUlELmgKQEAgLTgzLDE5ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA9PSBkZWxldGVkVmFs
dWU7IH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZGF0YTsgfQogCiBwcml2YXRlOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBVVUlEKCk7CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIFVV
SUQpOwogCiAgICAgVUludDEyOCBtX2RhdGE7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIFVVSUQgdXVpZCkKK3sKKyAgICBhZGQoaGFzaGVyLCB1dWlkLm1fZGF0YSk7Cit9
CisKIHN0cnVjdCBVVUlESGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVVVJ
RCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVVVJRCYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgVVVJRCYgYSwgY29uc3QgVVVJRCYgYikgeyByZXR1cm4gYSA9PSBi
OyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaGVy
LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2hlci5oCmluZGV4IGE1ZGQ4ZDhmYmI1
MThhMTk3MzFlNTA1NzgzNWYzZmUyZTk2ZGYzZWMuLjI5Yjk4N2M0Mzc3OWRjNDA2NmE1YjY1ZTlj
NGU1YTk1Nzc1NTBjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApAQCAtMjI1LDIz
ICsyMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4
Qml0czxULCBEZWZhdWx0Q29udmVydGVyPihjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzQ291bnQgLSAx
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBzaXplX3QgbGVuZ3RoSW5VQ2hh
ciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7
Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHN0YXRpY19jYXN0
PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIpOwotCi0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFyKTsgKytpKQotICAgICAgICAgICAg
aGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSlbbGVuZ3Ro
SW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7Ci0KLSAgICAgICAgcmV0dXJuIGhhc2hlci5o
YXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gc3RhdGljIHVuc2ln
bmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBo
YXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCiBwcml2YXRlOgogICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzKHVuc2lnbmVkIGhh
c2gpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oCmluZGV4IGJkMzk1NGEyODk3
M2NlYjhhNWJmNjQ4ZjRhYTUxMjNmMmVmYmVmNDUuLmI3NDNiZTE0YjA3MWJiMjdkODVkZGNjOWYz
YWU5MjYwYTcyYTIyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKQEAgLTI2LDcg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUHJvY2Vzc0lkZW50aWZpZXIuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDEyICs1NSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICFtX3Jlc291cmNlTnVtYmVyICYmICFtX2lkYkNvbm5lY3Rpb25JZGVudGlm
aWVyOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAg
dWludDY0X3QgaGFzaENvZGVzWzJdID0geyBtX2lkYkNvbm5lY3Rpb25JZGVudGlmaWVyLnRvVUlu
dDY0KCksIG1fcmVzb3VyY2VOdW1iZXIgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6
aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLSAgICB9Ci0KICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKICAgICB7CkBAIC04MywxNCArNzcs
MjAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVySGFzaFRyYWl0czsKKyAgICBmcmllbmQgdm9pZCBhZGQoSGFzaGVyJiwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIoSURC
Q29ubmVjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7CiAgICAg
SURCQ29ubmVjdGlvbklkZW50aWZpZXIgbV9pZGJDb25uZWN0aW9uSWRlbnRpZmllcjsKICAgICB1
aW50NjRfdCBtX3Jlc291cmNlTnVtYmVyIHsgMCB9OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCit7
CisgICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci5tX2lkYkNvbm5lY3Rpb25JZGVudGlmaWVyLCBp
ZGVudGlmaWVyLm1fcmVzb3VyY2VOdW1iZXIpOworfQorCiBzdHJ1Y3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYSkgeyByZXR1cm4gY29tcHV0ZUhhc2go
YSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IGEsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKaW5kZXggMGQ2MjVlOTRlYzQ3YmYyY2EwOGY1ZDlj
YjVjN2IwNDJmZDY0NTI1YS4uOWFjNGRiYjFiMjBhZjRiMDcyMDgwNjNiYzgyNzZmNWYyNTM0MzY5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJpYnV0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApAQCAtMjUsNiArMjUsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDYgKzc1LDExIEBAIHByaXZhdGU6CiAgICAg
QXRvbVN0cmluZyBtX3ZhbHVlOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVy
LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKK3sKKyAgICBhZGQoaGFzaGVyLCBhdHRyaWJ1
dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7Cit9CisKIGlubGluZSBib29sIEF0dHJpYnV0
ZTo6bmFtZU1hdGNoZXNGaWx0ZXIoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bVN0cmluZyYgZmlsdGVyUHJlZml4LCBjb25zdCBBdG9tU3RyaW5nJiBmaWx0ZXJMb2NhbE5hbWUs
IGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWVzcGFjZVVSSSkKIHsKICAgICBpZiAoZmlsdGVy
TG9jYWxOYW1lICE9IG5hbWUubG9jYWxOYW1lKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCmluZGV4IDhhYzQxYmExYzBjZWFmZWQ3Zjk0MTcz
YWI4ZjNkNWEwZmIxMDI1MDcuLjliZTA4ZmM1YjU0Y2FkMGFlODUyODNlNWRmZDU0YzY2OWNiMWQw
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wu
Y3BwCkBAIC0zMiwxMSArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB1
bnNpZ25lZCBhdHRyaWJ1dGVIYXNoKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVz
KQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoYXR0cmlidXRlcy5kYXRh
KCksIGF0dHJpYnV0ZXMuc2l6ZSgpICogc2l6ZW9mKEF0dHJpYnV0ZSkpOwotfQotCiBpbmxpbmUg
Ym9vbCBoYXNTYW1lQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRl
cywgU2hhcmVhYmxlRWxlbWVudERhdGEmIGVsZW1lbnREYXRhKQogewogICAgIGlmIChhdHRyaWJ1
dGVzLnNpemUoKSAhPSBlbGVtZW50RGF0YS5sZW5ndGgoKSkKQEAgLTQ4LDcgKzQzLDcgQEAgUmVm
PFNoYXJlYWJsZUVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNo
YXJlYWJsZUVsZW1lbnREYXRhV2kKIHsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZXMuaXNFbXB0eSgp
KTsKIAotICAgIGF1dG8mIGNhY2hlZERhdGEgPSBtX3NoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGUu
YWRkKGF0dHJpYnV0ZUhhc2goYXR0cmlidXRlcyksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
KyAgICBhdXRvJiBjYWNoZWREYXRhID0gbV9zaGFyZWFibGVFbGVtZW50RGF0YUNhY2hlLmFkZChj
b21wdXRlSGFzaChhdHRyaWJ1dGVzKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgcHJldmVudHMgc2hhcmluZyB3aGVuIHRoZXJlJ3MgYSBoYXNoIGNvbGxp
c2lvbi4KICAgICBpZiAoY2FjaGVkRGF0YSAmJiAhaGFzU2FtZUF0dHJpYnV0ZXMoYXR0cmlidXRl
cywgKmNhY2hlZERhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuY3BwCmluZGV4IDY2
MDA4Y2YzMjI3OTBmMTgwMDdhMmNmNzRmMjhiMjJhZGIyMDY0M2YuLjY2MGQ5ZmFlYzdhZGUwMDRj
NDVhYmM5NzcwMmM2MzJkOWNhNDY5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9R
dWFsaWZpZWROYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5j
cHAKQEAgLTY5LDcgKzY5LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgUXVhbGlmaWVkTmFtZTo6bG9j
YWxOYW1lVXBwZXIoKSBjb25zdAogdW5zaWduZWQgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFt
ZUltcGw6OmNvbXB1dGVIYXNoKCkgY29uc3QKIHsKICAgICBRdWFsaWZpZWROYW1lQ29tcG9uZW50
cyBjb21wb25lbnRzID0geyBtX3ByZWZpeC5pbXBsKCksIG1fbG9jYWxOYW1lLmltcGwoKSwgbV9u
YW1lc3BhY2UuaW1wbCgpIH07Ci0gICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMp
OworICAgIHJldHVybiBXVEY6OmNvbXB1dGVIYXNoKGNvbXBvbmVudHMpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1F1YWxpZmllZE5hbWUuaAppbmRleCAzY2Y5OGNkMjA3Yzk3NTQ3ZmEwN2FlYTZkZDQ2
MDQzZjkwMGVhMTExLi4zMzAyNjUzOGRiYmNmMzAzYmU1YjZkYTVjNjM0MzMzMzRkNTE5ZjNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKQEAgLTIxLDE3ICsyMSwyMyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFF1YWxpZmll
ZE5hbWVDb21wb25lbnRzIHsKLSAgICBTdHJpbmdJbXBsKiBtX3ByZWZpeDsKLSAgICBTdHJpbmdJ
bXBsKiBtX2xvY2FsTmFtZTsKLSAgICBTdHJpbmdJbXBsKiBtX25hbWVzcGFjZTsKKyAgICBBdG9t
U3RyaW5nSW1wbCogbV9wcmVmaXg7CisgICAgQXRvbVN0cmluZ0ltcGwqIG1fbG9jYWxOYW1lOwor
ICAgIEF0b21TdHJpbmdJbXBsKiBtX25hbWVzcGFjZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMp
Cit7CisgICAgYWRkKGhhc2hlciwgY29tcG9uZW50cy5tX3ByZWZpeCwgY29tcG9uZW50cy5tX2xv
Y2FsTmFtZSwgY29tcG9uZW50cy5tX25hbWVzcGFjZSk7Cit9CisKIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFF1YWxpZmllZE5hbWUpOwogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoUXVhbGlmaWVkTmFtZVF1YWxpZmllZE5hbWVJbXBsKTsKIApA
QCAtMTEwLDYgKzExNiwxNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxRdWFsaWZpZWROYW1lSW1w
bD4gbV9pbXBsOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBR
dWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCYgaW1wbCkKK3sKKyAgICBhZGQoaGFzaGVy
LCBpbXBsLm1fcHJlZml4LCBpbXBsLm1fbG9jYWxOYW1lLCBpbXBsLm1fbmFtZXNwYWNlKTsKK30K
KworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lKQoreworICAgIGFkZChoYXNoZXIsICpuYW1lLmltcGwoKSk7Cit9CisKIGV4dGVybiBMYXp5
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgUXVhbGlmaWVkTmFtZT4gYW55TmFtZTsKIGlubGluZSBjb25z
dCBRdWFsaWZpZWROYW1lJiBhbnlRTmFtZSgpIHsgcmV0dXJuIGFueU5hbWU7IH0KIApAQCAtMTIw
LDExICsxMzYsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21TdHJpbmcmIGEs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgIQogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9tU3RyaW5nJiBhKSB7IHJldHVy
biBhID09IHEubG9jYWxOYW1lKCk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUXVh
bGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbVN0cmluZyYgYSkgeyByZXR1cm4gYSAhPSBxLmxvY2Fs
TmFtZSgpOyB9CiAKLWlubGluZSB1bnNpZ25lZCBoYXNoQ29tcG9uZW50cyhjb25zdCBRdWFsaWZp
ZWROYW1lQ29tcG9uZW50cyYgYnVmKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnk8c2l6ZW9mKFF1YWxpZmllZE5hbWVDb21wb25lbnRzKT4oJmJ1Zik7Ci19Ci0KIHN0cnVj
dCBRdWFsaWZpZWROYW1lSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkgeyByZXR1cm4gaGFzaChuYW1lLmltcGwoKSk7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWVDYWNoZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZUNhY2hlLmNwcAppbmRleCBkNzRhYmE4MDM0ZTJjYzg1
NmU3YzEwZWE5YzgzYmE5MTlmZGNhZmIxLi43OTY1ZGY3NWUzOWIyZjQ1ZDgyYTllOTI3OTY0ZmU5
MGM1YjU5N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZUNh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZUNhY2hlLmNwcApA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgUU5hbWVDb21wb25l
bnRzVHJhbnNsYXRvciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUXVhbGlmaWVk
TmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gaGFzaENv
bXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChjb21wb25l
bnRzKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoUXVhbGlmaWVkTmFtZTo6UXVhbGlm
aWVkTmFtZUltcGwqIG5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBjKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2xvYmFsV2luZG93SWRlbnRpZmll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9HbG9iYWxXaW5kb3dJZGVudGlmaWVyLmgKaW5kZXgg
YzA0NjdkN2M3ZGMwOGE2YmI2YmJjOTBmYTk0Mjc0OThiYTZjYmM0Mi4uYjNkNDhmYWUxZGE3MGFj
MDcyN2IzODAwNDE4Y2QzN2Q1Zjg4NTRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9HbG9iYWxXaW5kb3dJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9HbG9i
YWxXaW5kb3dJZGVudGlmaWVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlByb2Nl
c3NJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzksOCArNDAsNiBAQCBzdHJ1Y3QgR2xvYmFsV2luZG93SWRlbnRp
ZmllciB7CiAgICAgUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgV2lu
ZG93SWRlbnRpZmllciB3aW5kb3dJZGVudGlmaWVyOwogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0OwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEdsb2JhbFdpbmRvd0lkZW50aWZpZXI+IGRlY29kZShEZWNvZGVyJik7CiB9OwpAQCAtNTAsMTMg
KzQ5LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHbG9iYWxXaW5kb3dJZGVudGlm
aWVyJiBhLCBjb25zdCBHbG9iYWxXaW5kb3dJZGVudGkKICAgICByZXR1cm4gYS5wcm9jZXNzSWRl
bnRpZmllciA9PSBiLnByb2Nlc3NJZGVudGlmaWVyICYmICBhLndpbmRvd0lkZW50aWZpZXIgPT0g
Yi53aW5kb3dJZGVudGlmaWVyOwogfQogCi1pbmxpbmUgdW5zaWduZWQgR2xvYmFsV2luZG93SWRl
bnRpZmllcjo6aGFzaCgpIGNvbnN0CitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IEdsb2JhbFdpbmRvd0lkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgdWludDY0X3Qg
aWRlbnRpZmllcnNbMl07Ci0gICAgaWRlbnRpZmllcnNbMF0gPSBwcm9jZXNzSWRlbnRpZmllci50
b1VJbnQ2NCgpOwotICAgIGlkZW50aWZpZXJzWzFdID0gd2luZG93SWRlbnRpZmllci50b1VJbnQ2
NCgpOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShpZGVudGlmaWVycywg
c2l6ZW9mKGlkZW50aWZpZXJzKSk7CisgICAgYWRkKGhhc2hlciwgaWRlbnRpZmllci5wcm9jZXNz
SWRlbnRpZmllciwgaWRlbnRpZmllci53aW5kb3dJZGVudGlmaWVyKTsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KQEAgLTg2LDcgKzgxLDcgQEAgc3RkOjpvcHRpb25hbDxHbG9iYWxXaW5k
b3dJZGVudGlmaWVyPiBHbG9iYWxXaW5kb3dJZGVudGlmaWVyOjpkZWNvZGUoRGVjb2RlciYgZGUK
IG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgR2xvYmFsV2luZG93SWRlbnRpZmllckhhc2ggewot
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6Okdsb2JhbFdpbmRvd0lkZW50
aWZpZXImIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFdlYkNvcmU6Okdsb2JhbFdpbmRvd0lkZW50aWZpZXImIGtleSkgeyByZXR1cm4g
Y29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6
Okdsb2JhbFdpbmRvd0lkZW50aWZpZXImIGEsIGNvbnN0IFdlYkNvcmU6Okdsb2JhbFdpbmRvd0lk
ZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5T3JpZ2luLmgKaW5kZXggMjAzYmY2YjA4MmRmZmI0Y2Q4NGY5ZmNmZDhiZjBjYjMzYWUw
ZjUxMC4uOGM4NmFkNTdmY2QyZjhjMjY4MGI4ODhlYTRhZTAyOGE3ZjMwNmE3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgog
I2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC0zMDcsNCArMzA4LDkgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
aW5saW5lIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmRlY29kZShEZWMK
ICAgICByZXR1cm4gb3JpZ2luOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCit7CisgICAgYWRkKGhhc2hlciwgb3JpZ2lu
LnByb3RvY29sKCksIG9yaWdpbi5ob3N0KCksIG9yaWdpbi5wb3J0KCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5
T3JpZ2luSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaApp
bmRleCA5ZmE4MjE2ODMxMzI5YTNhMGZkOWFiZDIxMWJhY2RmMzg0ODA3YzJmLi5iYmE4M2VmYzVm
N2IzM2E5Yjg4ODc5MzljNjVhMGNkYmM4NGRmN2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2Vj
dXJpdHlPcmlnaW5IYXNoLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzcsMTIgKzM4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFzaCB7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1szXSA9IHsKLSAgICAgICAgICAgIG9yaWdpbi0+cHJvdG9j
b2woKS5pbXBsKCkgPyBvcmlnaW4tPnByb3RvY29sKCkuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAg
ICAgICAgICAgb3JpZ2luLT5ob3N0KCkuaW1wbCgpID8gb3JpZ2luLT5ob3N0KCkuaW1wbCgpLT5o
YXNoKCkgOiAwLAotICAgICAgICAgICAgb3JpZ2luLT5wb3J0KCkudmFsdWVfb3IoMCkKLSAgICAg
ICAgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFz
aENvZGVzKT4oaGFzaENvZGVzKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKCpvcmlnaW4p
OwogICAgIH0KICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+JiBvcmlnaW4pCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgKaW5kZXggMzA5ZWIxNDhi
ZmUzMzNkMzQxNmNjZmMzMTRlYzFjNzhiZGJmNmU3OS4uOGRmNjA1YjJkMTYzOGQ1MjVkNDMyYWMy
NGI0ZTJiOWExMGEwNDA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oCkBAIC01OCw3ICs1OCw2IEBA
IHB1YmxpYzoKICAgICBjb25zdCBVVUlEJiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dDsgfQogICAgIFByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9jZXNzSWRlbnRpZmllcjsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0Lmhhc2goKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NJZGVudGlmaWVyLmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9jZXNzUXVhbGlm
aWVkJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QgJiYg
bV9wcm9jZXNzSWRlbnRpZmllciA9PSBvdGhlci5tX3Byb2Nlc3NJZGVudGlmaWVyOyB9CkBAIC03
NCw2ICs3MywxMiBAQCBwcml2YXRlOgogICAgIFByb2Nlc3NJZGVudGlmaWVyIG1fcHJvY2Vzc0lk
ZW50aWZpZXI7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFBy
b2Nlc3NRdWFsaWZpZWQ8VVVJRD4mIHV1aWQpCit7CisgICAgLy8gU2luY2UgVVVJRHMgYXJlIHVu
aXF1ZSBvbiB0aGVpciBvd24sIG9wdGltaXplIGJ5IG5vdCBoYXNoaW5nIHRoZSBwcm9jZXNzIGlk
ZW50aWZpZXIuCisgICAgYWRkKGhhc2hlciwgdXVpZC5vYmplY3QoKSk7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc1F1YWxpZmllZDxVVUlEPj4g
UHJvY2Vzc1F1YWxpZmllZDxVVUlEPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
c3RkOjpvcHRpb25hbDxVVUlEPiBvYmplY3Q7CkBAIC05NywxMyArMTAyLDMgQEAgaW5saW5lIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFByb2Nlc3NRdWFsaWZp
ZWQ8VVVJRD4mIHByb2MKIHVzaW5nIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyID0g
UHJvY2Vzc1F1YWxpZmllZDxVVUlEPjsKIAogfQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8PgotaW5saW5lIHVpbnQzMl90IGNvbXB1dGVIYXNoKGNvbnN0IFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBpZGVu
dGlmaWVyLm9iamVjdCgpLmhhc2goKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tCmluZGV4IGNiMmQwYmU4OTcwNDZiN2ZmOWYzMjc2Yzk3Njc5YWZiNGYwMTJhYjMuLjBkNWEw
ZWJjN2ZmMzc0NTY4YWM3MTIxMjhjOWEyYWQyNmMyMmU1YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkZvbnRDYWNoZUNvcmVUZXh0
LmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2YvQ29yZVRl
eHRTUEkuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTM4
LDE2ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdW5zaWduZWQgRm9udFBsYXRmb3Jt
RGF0YTo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8
dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKLSAg
ICAgICAgfCBtX2lzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIDw8IDUKLSAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV90ZXh0UmVuZGVyaW5nTW9kZSkgPDwgMwotICAgICAgICB8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX29yaWVudGF0aW9uKSA8PCAyCi0gICAgICAgIHwgbV9zeW50aGV0
aWNCb2xkIDw8IDEKLSAgICAgICAgfCBtX3N5bnRoZXRpY09ibGlxdWUpOwotCi0gICAgdWludHB0
cl90IGZvbnRIYXNoID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRkhhc2gobV9mb250LmdldCgp
KSk7Ci0gICAgdWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFzaCwgZmxhZ3MgfTsKLSAg
ICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNo
Q29kZXMpOworICAgIC8vIEZJWE1FOiBIYXNoaW5nIGEgQ0ZIYXNoIGlzIHVuZm9ydHVuYXRlIGhl
cmUuCisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKENGSGFzaChtX2ZvbnQuZ2V0KCkpLCBtX3dpZHRo
VmFyaWFudCwgbV9pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSwgbV90ZXh0UmVuZGVyaW5nTW9kZSwg
bV9vcmllbnRhdGlvbiwgbV9vcmllbnRhdGlvbiwgbV9zeW50aGV0aWNCb2xkLCBtX3N5bnRoZXRp
Y09ibGlxdWUpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dp
bi5jcHAKaW5kZXggYTQzMjJhNGRlZmYyYWQ4NWEzNzYwYzBmYTc3NmQ0NmQyMDQ3Y2ZhZi4uZGU5
Zjk2OTc2NDJlNDAzOTkxOTg3NDkzZjFiZDY5YjIyNzY2ZDMyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDR1dpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0xMzMsMTEgKzEzNCwxMSBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQsIENURm9udFJlZiBj
dEZvbnQsIENHRgogCiB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKIHsK
KyAgICAvLyBGSVhNRTogSGFzaGluZyBoYXNoZXMgaGVyZSBpcyB1bmZvcnR1bmF0ZS4KICAgICB1
bnNpZ25lZCBmb250SGFzaCA9IG1fZm9udCA/IG1fZm9udC0+aGFzaCgpIDogMDsKICAgICBDRkhh
c2hDb2RlIGNnRm9udEhhc2ggPSBzYWZlQ0ZIYXNoKG1fY2dGb250LmdldCgpKTsKICAgICBDRkhh
c2hDb2RlIGN0Rm9udEhhc2ggPSBzYWZlQ0ZIYXNoKG1fY3RGb250LmdldCgpKTsKLSAgICB1aW50
cHRyX3QgaGFzaENvZGVzW10gPSB7IGZvbnRIYXNoLCBjZ0ZvbnRIYXNoLCBjdEZvbnRIYXNoLCBt
X3VzZUdESSB9OwotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhh
c2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CisgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGZvbnRIYXNoLCBj
Z0ZvbnRIYXNoLCBjdEZvbnRIYXNoLCBtX3VzZUdESSk7CiB9CiAKIGJvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbmxpbmVzLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElubGluZXMuaAppbmRleCAyZDM3MjMwNTRlNmFj
Yjc4M2NkNmY2ZjhmNzg0ZmNjZDMxMjM3MDQ0Li41OTdhYTBlZTE1NzZjMjFlNzVlMjdkNDFhYjE2
MzIzOGJiMjA4YWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElu
bGluZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudElubGluZXMuaApAQCAt
NDcsNyArNDcsNyBAQCBzdHJ1Y3QgU1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3IgewogICAgIHsK
ICAgICAgICAgaWYgKGtleS5oYXNQcmVmaXgoKSkgewogICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZUNvbXBvbmVudHMgY29tcG9uZW50cyA9IHsgbnVsbEF0b20oKS5pbXBsKCksIGtleS5sb2NhbE5h
bWUoKS5pbXBsKCksIGtleS5uYW1lc3BhY2VVUkkoKS5pbXBsKCkgfTsKLSAgICAgICAgICAgIHJl
dHVybiBoYXNoQ29tcG9uZW50cyhjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaChjb21wb25lbnRzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gRGVmYXVsdEhh
c2g8UXVhbGlmaWVkTmFtZT46Omhhc2goa2V5KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleS5jcHAKaW5kZXggOTZjZGIzYTgyMjg2NjFjYWVhYWVjYjM3Y2VmNjAyMmE0MGEwNTIyZC4u
MTM1ZDkxMGY0ZTg2NDIyNDk2NTA2ZDcwMDM2MGY2MjEzYTIwODc1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uS2V5LmNwcApAQCAtNDYsMTUgKzQ2LDYgQEAgU2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5OjplbXB0eUtleSgpCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotdW5zaWduZWQgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaGFzaGVzWzJdOwotICAgIGhhc2hlc1swXSA9IFNl
Y3VyaXR5T3JpZ2luRGF0YUhhc2g6Omhhc2gobV90b3BPcmlnaW4pOwotICAgIGhhc2hlc1sxXSA9
IFN0cmluZ0hhc2g6Omhhc2gobV9zY29wZS5zdHJpbmcoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hlcywgc2l6ZW9mKGhhc2hlcykpOwotfQotCiBib29sIFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6Om9wZXJhdG9yPT0oY29uc3QgU2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbktleSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdG9wT3JpZ2lu
ID09IG90aGVyLm1fdG9wT3JpZ2luICYmIG1fc2NvcGUgPT0gb3RoZXIubV9zY29wZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbktleS5oCmluZGV4IGQzMmY0ZDlmYTdhYmQ5OTIzMzk2NmQ1M2NhODY3OGY2
ZDA3M2EyYzAuLjJjOWJhNjA0ODM0YzJiZGI4ZWY4YmViNTdkNjc0ODcwZGEwYmEzMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uS2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKIAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDcgKzM5LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkoU2VjdXJpdHlPcmlnaW5EYXRhJiYgdG9wT3JpZ2luLCBVUkwm
JiBzY29wZSk7CiAKICAgICBzdGF0aWMgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSBlbXB0
eUtleSgpOwotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5JikgY29uc3Q7CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIGtleSkgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBrZXkpOyB9CkBAIC05NiwxMiArOTYsMTcgQEAgc3RkOjpvcHRp
b25hbDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5PiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uS2V5OjpkZWNvZGUKICAgICByZXR1cm4gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSB7
IFdURk1vdmUoKnRvcE9yaWdpbiksIFdURk1vdmUoc2NvcGUpIH07CiB9CiAKK2lubGluZSB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSYg
a2V5KQoreworICAgIGFkZChoYXNoZXIsIGtleS50b3BPcmlnaW4oKSwga2V5LnNjb3BlKCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3Qg
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIGtleSkgeyBy
ZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNv
cmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhh
c2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkmIGEsIGNvbnN0IFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmlu
ZGV4IDY5OTBhYTAwYzE2OTY4MWY5NmIzMGViZDcxYzRmMzlkYTIwY2Y2MzUuLjcyZmZjZDYzZGU4
OTYwMTMzMjhhYzM4MzEwMTU2YmQ5ZDg5YjIyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0hpc3RvcnkvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAK
IHN0YXRpYyBjb25zdCBzaXplX3QgaGVhZGVyU2l6ZSA9IDg7CkBAIC03MywyMiArNzQsMjIgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVn
ZXJBcnJheSYgYikKICAgICByZXR1cm4gYS5tX2ludGVnZXJzID09IGIubV9pbnRlZ2VycyAmJiAg
YS5tX3NpemUgPT0gYi5tX3NpemU7CiB9CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgSW50ZWdlckFycmF5JiBhcnJheSkKK3sKKyAgICBhZGQoaGFzaGVyLCBTcGFuIHsg
YXJyYXkuaW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpIH0pOworfQorCiBzdHJ1Y3QgSW50ZWdlckFy
cmF5SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8SW50ZWdlckFycmF5PiB7CiAgICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEludGVnZXJBcnJheSYgc2xvdCkgeyBIYXNoVHJhaXRz
PHNpemVfdD46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90Lm1fc2l6ZSk7IH0KICAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBJbnRlZ2VyQXJyYXkmIHNsb3QpIHsgcmV0dXJu
IEhhc2hUcmFpdHM8c2l6ZV90Pjo6aXNEZWxldGVkVmFsdWUoc2xvdC5tX3NpemUpOyB9CiB9Owog
CiBzdHJ1Y3QgSW50ZWdlckFycmF5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgSW50ZWdlckFycmF5Jik7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSW50ZWdl
ckFycmF5JiBhcnJheSkgeyByZXR1cm4gY29tcHV0ZUhhc2goYXJyYXkpOyB9CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgSW50ZWdlckFycmF5JiwgY29uc3QgSW50ZWdlckFycmF5Jik7CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OwogfTsKIAotdW5zaWduZWQgSW50ZWdlckFycmF5SGFzaDo6aGFzaChjb25zdCBJbnRlZ2VyQXJy
YXkmIGFycmF5KQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoYXJyYXku
aW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpICogc2l6ZW9mKGludCkpOwotfQotCiBib29sIEludGVn
ZXJBcnJheUhhc2g6OmVxdWFsKGNvbnN0IEludGVnZXJBcnJheSYgYSwgY29uc3QgSW50ZWdlckFy
cmF5JiBiKQogewogICAgIGlmIChhLmlzRGVsZXRlZFZhbHVlKCkgfHwgYi5pc0RlbGV0ZWRWYWx1
ZSgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDAxOWUxYzNjMjk2ZjY3MzE1YWJjYTRmOGY3Yzk0ODczNTQ3MTY0MTYuLjczY2JkYmQxYzNjMjI4
MjU0OWRhZTdkMjdiNWY4YmMzOTM3ODk0ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMi0yMiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5KCkgYW5kIHVzZSB0aGUgbW9kZXJuIEhhc2hlciBpbnN0ZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nSGFzaGVyLmNwcDoKKwogMjAyMi0wMi0yMiAgUnlhbiBIYWRkYWQgIDxyeWFuaGFk
ZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyODk1ODApOiBbIGlPUyBtYWNP
UyBdIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5SZWNlaXZlU2hhcmVkTWVtb3J5IGlz
IGEgY29uc3RhbnQgdGltZW91dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3RyaW5nSGFzaGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0
cmluZ0hhc2hlci5jcHAKaW5kZXggYTA5ZjQxYTM4NDkwOGQ5M2I5N2I0NGUyZGMyOWFmOTBkOWM3
ZmI0Mi4uMzFkMTEyNGI1ZjFiNTQ1M2Y1YzU0NjlmYWRjOGY0OGFmOWIzYzBhNCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwCkBAIC00NjIsMjAg
KzQ2Miw0IEBAIFRFU1QoV1RGLCBTdHJpbmdIYXNoZXJfY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJp
dHMpCiAgICAgQVNTRVJUX0VRKHRlc3RCSGFzaDUgJiAweEZGRkZGRiwgU3RyaW5nSGFzaGVyOjpj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyh0ZXN0QlVDaGFycywgNSkpOwogfQogCi1URVNUKFdU
RiwgU3RyaW5nSGFzaGVyX2hhc2hNZW1vcnkpCi17Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5n
SGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KDAsIDApKTsKLSAgICBBU1NFUlRfRVEoZW1w
dHlTdHJpbmdIYXNoLCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobnVsbFVDaGFycywgMCkpOwot
ICAgIEFTU0VSVF9FUShlbXB0eVN0cmluZ0hhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTww
PigwKSk7Ci0gICAgQVNTRVJUX0VRKGVtcHR5U3RyaW5nSGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNo
TWVtb3J5PDA+KG51bGxVQ2hhcnMpKTsKLQotICAgIEFTU0VSVF9FUShzaW5nbGVOdWxsQ2hhcmFj
dGVySGFzaCwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG51bGxVQ2hhcnMsIDIpKTsKLSAgICBB
U1NFUlRfRVEoc2luZ2xlTnVsbENoYXJhY3Rlckhhc2gsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eTwyPihudWxsVUNoYXJzKSk7Ci0KLSAgICBBU1NFUlRfRVEodGVzdEFIYXNoNSwgU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5KHRlc3RBVUNoYXJzLCAxMCkpOwotICAgIEFTU0VSVF9FUSh0ZXN0QUhh
c2g1LCBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8MTA+KHRlc3RBVUNoYXJzKSk7Ci0gICAgQVNT
RVJUX0VRKHRlc3RCSGFzaDUsIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSh0ZXN0QlVDaGFycywg
MTApKTsKLSAgICBBU1NFUlRfRVEodGVzdEJIYXNoNSwgU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5
PDEwPih0ZXN0QlVDaGFycykpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>