<?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>202851</bug_id>
          
          <creation_ts>2019-10-11 09:54:37 -0700</creation_ts>
          <short_desc>[Clipboard API] Support writing multiple PasteboardCustomData with SharedBuffers to the pasteboard</short_desc>
          <delta_ts>2019-10-15 15:20:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>annulen</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>lingcherd_ho</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1579131</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-11 09:54:37 -0700</bug_when>
    <thetext>Work towards Async Clipboard API support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579159</commentid>
    <comment_count>1</comment_count>
      <attachid>380767</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-11 11:10:19 -0700</bug_when>
    <thetext>Created attachment 380767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579165</commentid>
    <comment_count>2</comment_count>
      <attachid>380770</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-11 11:18:48 -0700</bug_when>
    <thetext>Created attachment 380770
Try to fix GTK/WPE builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579290</commentid>
    <comment_count>3</comment_count>
      <attachid>380770</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-10-11 16:04:09 -0700</bug_when>
    <thetext>Comment on attachment 380770
Try to fix GTK/WPE builds

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

Some coding style comments. A lot are not about new things.

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:48
&gt; +PasteboardCustomData::PasteboardCustomData(const PasteboardCustomData&amp; data)

Can’t this be &quot;= default&quot;?

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:59
&gt; +    const static unsigned currentCustomDataSerializationVersion = 1;

Maybe constexpr instead?

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:71
&gt; +    const static unsigned maxSupportedDataSerializationVersionNumber = 1;

Ditto.

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:74
&gt; +    WTF::Persistence::Decoder decoder { reinterpret_cast&lt;const uint8_t*&gt;(buffer.data()), buffer.size() };

So annoying to have the reinterpret_cast here for an idiom that is not at all specific to pasteboards. Can we find somewhere to put an overload so this Decoder/SharedBuffer interaction can be done cleanly?

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:86
&gt; +    if (!decoder.decode(version) || version &gt; maxSupportedDataSerializationVersionNumber)
&gt; +        return { };
&gt; +
&gt; +    if (!decoder.decode(result.m_origin))
&gt; +        return { };
&gt; +
&gt; +    if (!decoder.decode(result.m_sameOriginCustomStringData))
&gt; +        return { };
&gt; +
&gt; +    if (!decoder.decode(result.m_orderedTypes))
&gt; +        return { };

This makes me think our decoder interface is not great. I would much prefer a decoder that would &quot;go numb&quot; once there was an error, and stop doing any work at all; subsequent calls to decode just wouldn’t do anything. Then at the end the caller would check for the error once. Anyway, not new here.

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:97
&gt; +static void updateTypes(Vector&lt;String&gt;&amp; types, String type, bool moveToEnd)
&gt; +{
&gt; +    if (moveToEnd)
&gt; +        types.removeFirst(type);
&gt; +    ASSERT(!types.contains(type));
&gt; +    types.append(type);
&gt; +}

The fact that we maintain a vector of types makes it seem wasteful that the we also have three maps. We are going to pay the O(n^2) cost if there are a ton of types so all the hashing in the maps is wasteful: we could instead keep all the data in this same vector. Or if we need the O(n log n) performance then this would need to be a ListHashSet (or whatever) instead of a Vector.

Inconvenient that the internal data structures are exposed in the getters of this class so we can&apos;t change this around without changing a lot of call sites.

&gt; Source/WebCore/platform/PasteboardCustomData.cpp:130
&gt; +    if (!m_platformBinaryData.remove(type) &amp;&amp; !m_platformStringData.remove(type) &amp;&amp; !m_sameOriginCustomStringData.remove(type))
&gt; +        return;

What guarantees this type will appear in at most one of these three maps?

It looks like the functions above can put the same type in both m_platformStringData and m_sameOriginCustomStringData, for example.

By the way, if these maps were truly mutually exclusive, then I’d suggest we consider a single map with a more complex value type instead. Although it might make the code more complex at various call sites.

&gt; Source/WebCore/platform/PasteboardCustomData.h:39
&gt; +    WEBCORE_EXPORT PasteboardCustomData(const String&amp;, Vector&lt;String&gt;&amp;&amp;, HashMap&lt;String, String&gt;&amp;&amp; platformStringData, HashMap&lt;String, String&gt;&amp;&amp; customData, HashMap&lt;String, RefPtr&lt;SharedBuffer&gt;&gt;&amp;&amp;);

Since we&apos;re using rvalue references for everything else, why not use it for the first argument too? Can save a tiny bit of reference count churn.

Also, I think the first argument needs a name. It’s not obvious that it’s an origin.

&gt; Source/WebCore/platform/PasteboardCustomData.h:40
&gt; +    WEBCORE_EXPORT PasteboardCustomData(const PasteboardCustomData&amp;);

Seems we should include both move and copy constructors rather than only copy, since it can result in more efficient code for some common idioms. That’s one thing we get &quot;for free&quot; if we don’t define either the move or copy constructor, but need to do extra work to preserve. I think the struct we had before supported move. If copy is all that’s needed at the moment, sometimes I will delete the move constructor rather than implementing it, promising myself &quot;I will implement it if anyone needs it&quot;. That makes me feel better that we won’t end up using copy-and-destroy when we could use a cheaper move.

&gt; Source/WebCore/platform/PasteboardCustomData.h:73
&gt; +    HashMap&lt;String, RefPtr&lt;SharedBuffer&gt;&gt; m_platformBinaryData;

Seems the value type here could be Ref&lt;&gt; instead of RefPtr&lt;&gt;.

&gt; Source/WebCore/platform/StaticPasteboard.cpp:88
&gt; +    return WTFMove(m_customData);

This doesn&apos;t guarantee the data is cleared. Might want to use std::exchange instead to guarantee it’s cleared afterward (see below about changing the return type).

&gt; Source/WebCore/platform/StaticPasteboard.h:42
&gt; -    PasteboardCustomData takeCustomData();
&gt; +    PasteboardCustomData&amp;&amp; takeCustomData();

Seems like the old signature is better for a function that definitively does a &quot;take&quot;. Returning an rvalue reference is OK if it’s a function where some callers want to call it but not actually take the data, perhaps read it but leave it in place, but if callers are always taking then I think it’s better to return the object, not an rvalue reference. Harder to misuse by accident.

&gt; Source/WebCore/platform/ios/AbstractPasteboard.h:52
&gt;  #if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000

Is this conditional still needed? Do we support those old versions of iOS?

Also, why isn’t this an &quot;SPI&quot; header?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:747
&gt; +    return [(id&lt;AbstractPasteboard&gt;)m_pasteboard.get() changeCount];

Seems peculiar that this typecast is both needed, but also guaranteed to be safe and doesn’t require a protocol conformance check.

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:870
&gt; +    auto stagedRegistrationInfoLists = WTFMove(_stagedRegistrationInfoLists);
&gt; +    return stagedRegistrationInfoLists.autorelease();

I don’t understand why the WTFMove and the local variable are needed. I would expect that this code would do the same thing:

    return _stagedRegistrationInfoLists.autorelease();

If RetainPtr::autorelease does not nil the pointer out (I think it does) then maybe it’s std::exchange we want, not WTFMove. One sign of that is that it would still be a one-liner:

    return std::exchange(_stagedRegistrationInfoLists, nil).autorelease();

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:484
&gt; +        auto platformStringIterator = data.platformStringData().find(type);
&gt; +        if (platformStringIterator != data.platformStringData().end()) {
&gt; +            [item setString:platformStringIterator-&gt;value forType:platformType];
&gt; +            continue;
&gt; +        }

This can be done simply with HashMap::get and it might be nicer:

    auto value = data.platformStringData().get(type);
    if (!value.isNull()) {
        [item setString:value forType:platformType];
        continue;
    }

The find/end/-&gt;value dance is needed for types where copying the value out of the map is expensive or there is no null value.

You’ll also notice that I favor shorter variable names; my philosophy is to include adjectives only if they are needed for disambiguation or clarity.

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:490
&gt; +        auto platformDataIterator = data.platformBinaryData().find(type);
&gt; +        if (platformDataIterator != data.platformBinaryData().end()) {
&gt; +            if (auto platformData = platformDataIterator-&gt;value-&gt;createNSData())
&gt; +                [item setData:platformData.get() forType:platformType];
&gt; +        }

Same thing is possible here:

    if (auto buffer = data.platformBinaryData().get(type)) {
        if (auto platformData = buffer-&gt;createNSData())
            [item setData: platformData.get() forType():platformType];
    }

I think the non-iterator code is easier to read.

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:501
&gt; +        if (auto item = createPasteboardItem(data))
&gt; +            [platformItems addObject:item.get()];

Is &quot;silently omit&quot; the right thing to do when createPasteboardItem returns nil? Not obvious to me what this case is.

&gt; Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1645
&gt; +    encoder &lt;&lt; static_cast&lt;uint64_t&gt;(data.platformBinaryData().size());

Why is this cast needed? Seems that we could just use the appropriate type in the decode function. I guess size_t? Annoying to have to use this idiom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579387</commentid>
    <comment_count>4</comment_count>
      <attachid>380770</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-11 22:10:59 -0700</bug_when>
    <thetext>Comment on attachment 380770
Try to fix GTK/WPE builds

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:48
&gt;&gt; +PasteboardCustomData::PasteboardCustomData(const PasteboardCustomData&amp; data)
&gt; 
&gt; Can’t this be &quot;= default&quot;?

Yes, it can! Changed to = default.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:59
&gt;&gt; +    const static unsigned currentCustomDataSerializationVersion = 1;
&gt; 
&gt; Maybe constexpr instead?

Yep, changed to use constexpr.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:71
&gt;&gt; +    const static unsigned maxSupportedDataSerializationVersionNumber = 1;
&gt; 
&gt; Ditto.

Changed to constexpr here too.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:74
&gt;&gt; +    WTF::Persistence::Decoder decoder { reinterpret_cast&lt;const uint8_t*&gt;(buffer.data()), buffer.size() };
&gt; 
&gt; So annoying to have the reinterpret_cast here for an idiom that is not at all specific to pasteboards. Can we find somewhere to put an overload so this Decoder/SharedBuffer interaction can be done cleanly?

Yeah, it is a bit unfortunate :/ I added a new helper to SharedBuffer to make this more palatable:

WTF::Persistence::Decoder SharedBuffer::decoder() const
{
    return { reinterpret_cast&lt;const uint8_t*&gt;(data()), size() };
}

…and used this helper in PasteboardCustomData.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:97
&gt;&gt; +}
&gt; 
&gt; The fact that we maintain a vector of types makes it seem wasteful that the we also have three maps. We are going to pay the O(n^2) cost if there are a ton of types so all the hashing in the maps is wasteful: we could instead keep all the data in this same vector. Or if we need the O(n log n) performance then this would need to be a ListHashSet (or whatever) instead of a Vector.
&gt; 
&gt; Inconvenient that the internal data structures are exposed in the getters of this class so we can&apos;t change this around without changing a lot of call sites.

Yeah, that makes sense. I’ll go with keeping all the data in one Vector, and introduce a new class (PasteboardCustomDataEntry) to represent each type and its platform and custom data.

I will also refactor PasteboardCustomData’s methods so that we don’t end up exposing the implementation details of PasteboardCustomData.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.cpp:130
&gt;&gt; +        return;
&gt; 
&gt; What guarantees this type will appear in at most one of these three maps?
&gt; 
&gt; It looks like the functions above can put the same type in both m_platformStringData and m_sameOriginCustomStringData, for example.
&gt; 
&gt; By the way, if these maps were truly mutually exclusive, then I’d suggest we consider a single map with a more complex value type instead. Although it might make the code more complex at various call sites.

Ah, so it was (and remains) valid for the same type to appear in both m_platformStringData and m_sameOriginCustomStringData. That is to say, a particular type may have a certain representation on the platform pasteboard that is different from its representation in custom data (which we expose to pages of the same origin). However, it doesn’t make sense for the same type to appear in both m_platformStringData and m_platformBinaryData. Essentially, a type may map to either a shared buffer (in m_platformBinaryData) or a string (in m_platformStringData) in the platform pasteboard, but not both.

Now that I reflect on this some more, a better way to express this would be to replace m_platformBinaryData with m_platformData, a Vector&lt;Variant&lt;RefPtr&lt;SharedBuffer&gt;, String&gt;&gt;.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.h:39
&gt;&gt; +    WEBCORE_EXPORT PasteboardCustomData(const String&amp;, Vector&lt;String&gt;&amp;&amp;, HashMap&lt;String, String&gt;&amp;&amp; platformStringData, HashMap&lt;String, String&gt;&amp;&amp; customData, HashMap&lt;String, RefPtr&lt;SharedBuffer&gt;&gt;&amp;&amp;);
&gt; 
&gt; Since we&apos;re using rvalue references for everything else, why not use it for the first argument too? Can save a tiny bit of reference count churn.
&gt; 
&gt; Also, I think the first argument needs a name. It’s not obvious that it’s an origin.

Sounds good. Made this String&amp;&amp; origin.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.h:40
&gt;&gt; +    WEBCORE_EXPORT PasteboardCustomData(const PasteboardCustomData&amp;);
&gt; 
&gt; Seems we should include both move and copy constructors rather than only copy, since it can result in more efficient code for some common idioms. That’s one thing we get &quot;for free&quot; if we don’t define either the move or copy constructor, but need to do extra work to preserve. I think the struct we had before supported move. If copy is all that’s needed at the moment, sometimes I will delete the move constructor rather than implementing it, promising myself &quot;I will implement it if anyone needs it&quot;. That makes me feel better that we won’t end up using copy-and-destroy when we could use a cheaper move.

Sounds good! Added a move constructor.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.h:73
&gt;&gt; +    HashMap&lt;String, RefPtr&lt;SharedBuffer&gt;&gt; m_platformBinaryData;
&gt; 
&gt; Seems the value type here could be Ref&lt;&gt; instead of RefPtr&lt;&gt;.

I’ll be replacing all of these members (except an origin) with just: `Vector&lt;PasteboardCustomDataEntry&gt; m_data;`.

And each PasteboardCustomDataEntry will have a type, customData string, and a platformData which may either be a Ref&lt;SharedBuffer&gt; or a String.

&gt;&gt; Source/WebCore/platform/StaticPasteboard.cpp:88
&gt;&gt; +    return WTFMove(m_customData);
&gt; 
&gt; This doesn&apos;t guarantee the data is cleared. Might want to use std::exchange instead to guarantee it’s cleared afterward (see below about changing the return type).

Good catch — changed to use std::exchange.

&gt;&gt; Source/WebCore/platform/StaticPasteboard.h:42
&gt;&gt; +    PasteboardCustomData&amp;&amp; takeCustomData();
&gt; 
&gt; Seems like the old signature is better for a function that definitively does a &quot;take&quot;. Returning an rvalue reference is OK if it’s a function where some callers want to call it but not actually take the data, perhaps read it but leave it in place, but if callers are always taking then I think it’s better to return the object, not an rvalue reference. Harder to misuse by accident.

Ok! I changed back to PasteboardCustomData.

&gt;&gt; Source/WebCore/platform/ios/AbstractPasteboard.h:52
&gt;&gt;  #if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000
&gt; 
&gt; Is this conditional still needed? Do we support those old versions of iOS?
&gt; 
&gt; Also, why isn’t this an &quot;SPI&quot; header?

Good point — all of these conditionals are no longer needed. I&apos;ve removed them.

This isn’t an *SPI.h header because it doesn’t declare any platform SPI, but rather, provides a common protocol (AbstractPasteboard) that both the platform UIPasteboard and the WebItemProviderPasteboard (a thin wrapper around a list of item providers) conforms to.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:747
&gt;&gt; +    return [(id&lt;AbstractPasteboard&gt;)m_pasteboard.get() changeCount];
&gt; 
&gt; Seems peculiar that this typecast is both needed, but also guaranteed to be safe and doesn’t require a protocol conformance check.

Oops, yeah, the explicit cast is not needed here. I’ve removed it.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:870
&gt;&gt; +    return stagedRegistrationInfoLists.autorelease();
&gt; 
&gt; I don’t understand why the WTFMove and the local variable are needed. I would expect that this code would do the same thing:
&gt; 
&gt;     return _stagedRegistrationInfoLists.autorelease();
&gt; 
&gt; If RetainPtr::autorelease does not nil the pointer out (I think it does) then maybe it’s std::exchange we want, not WTFMove. One sign of that is that it would still be a one-liner:
&gt; 
&gt;     return std::exchange(_stagedRegistrationInfoLists, nil).autorelease();

Good point — it seems that _stagedRegistrationInfoLists.autorelease(); achieves what I wanted here.

&gt;&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:484
&gt;&gt; +        }
&gt; 
&gt; This can be done simply with HashMap::get and it might be nicer:
&gt; 
&gt;     auto value = data.platformStringData().get(type);
&gt;     if (!value.isNull()) {
&gt;         [item setString:value forType:platformType];
&gt;         continue;
&gt;     }
&gt; 
&gt; The find/end/-&gt;value dance is needed for types where copying the value out of the map is expensive or there is no null value.
&gt; 
&gt; You’ll also notice that I favor shorter variable names; my philosophy is to include adjectives only if they are needed for disambiguation or clarity.

Sounds good! Changed to the above.

&gt;&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:490
&gt;&gt; +        }
&gt; 
&gt; Same thing is possible here:
&gt; 
&gt;     if (auto buffer = data.platformBinaryData().get(type)) {
&gt;         if (auto platformData = buffer-&gt;createNSData())
&gt;             [item setData: platformData.get() forType():platformType];
&gt;     }
&gt; 
&gt; I think the non-iterator code is easier to read.

Fixed!

&gt;&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:501
&gt;&gt; +            [platformItems addObject:item.get()];
&gt; 
&gt; Is &quot;silently omit&quot; the right thing to do when createPasteboardItem returns nil? Not obvious to me what this case is.

Oops, I realized there was no point to this nil check, since createPasteboardItem always returns a non-null NSItemProvider. I removed the if statement.

&gt;&gt; Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1645
&gt;&gt; +    encoder &lt;&lt; static_cast&lt;uint64_t&gt;(data.platformBinaryData().size());
&gt; 
&gt; Why is this cast needed? Seems that we could just use the appropriate type in the decode function. I guess size_t? Annoying to have to use this idiom.

I originally didn’t have this cast; however, when I tried to decode the `size_t` below, I observed a build error like:

OpenSource/Source/WebKit/Platform/IPC/Decoder.h:176:31: error: no matching member function for call to &apos;decode&apos;
        if (ArgumentCoder&lt;T&gt;::decode(*this, t)) {
OpenSource/Source/WebKit/Platform/IPC/Decoder.h:158:15: note: in instantiation of function template specialization &apos;IPC::Decoder::operator&gt;&gt;&lt;unsigned long, nullptr&gt;&apos; requested here
        *this &gt;&gt; optional;
OpenSource/Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1673:18: note: in instantiation of function template specialization &apos;IPC::Decoder::decode&lt;unsigned long, nullptr&gt;&apos; requested here
    if (!decoder.decode(binaryDataEntryCount))

Adding size_t encode/decode methods to WebKit::Encoder and WebKit::Decoder fixed this for me. I think this is okay because there’s no case anymore where we would need to run 32-bit WebKit2 clients against a 64-bit web process, so size_t shouldn’t differ between the processes. In any case, I will pursue this in a followup, since there are a number of other places in WebKit where we end up encoding and decoding `size_t`s as `uint64_t`s, and it would indeed be nice to address all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579508</commentid>
    <comment_count>5</comment_count>
      <attachid>380850</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-13 12:58:06 -0700</bug_when>
    <thetext>Created attachment 380850
Address review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579664</commentid>
    <comment_count>6</comment_count>
      <attachid>380850</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-10-14 09:57:41 -0700</bug_when>
    <thetext>Comment on attachment 380850
Address review feedback

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

&gt; Source/WebCore/platform/PasteboardCustomData.h:38
&gt; +struct PasteboardCustomDataEntry {

Might want this to be a nested class instead of a separate top level class.

&gt; Source/WebCore/platform/PasteboardCustomData.h:42
&gt; +    WEBCORE_EXPORT PasteboardCustomDataEntry&amp; operator=(const PasteboardCustomDataEntry&amp; otherData);

Same thing can apply for assignment operator as for copy constructor. Might want a move overload since that can be more efficient than copying, depending on how this is used.

&gt; Source/WebCore/platform/SharedBuffer.h:194
&gt; +    WTF::Persistence::Decoder decoder() const;

It’s great to have this function available. Not so good that SharedBuffer.h now includes PersistentCoders.h. Could we use a forward declaration instead of including PersistentCoders.h or have this be a free function somewhere instead of a member function?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:301
&gt; +        auto *itemDictionaries = [NSMutableArray arrayWithCapacity:itemLists.count];

For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:315
&gt; +    auto *itemProviders = [NSMutableArray arrayWithCapacity:itemLists.count];

For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:603
&gt; +    NSMutableArray *registrationLists = [NSMutableArray arrayWithCapacity:itemData.size()];

For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

&gt; Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1679
&gt; +        ASSERT_NOT_REACHED();

Seems strange to assert in this one place. Other decode failures are equally worth asserting. I would omit this. Or could use a single 3-state value rather than two booleans for hasString and hasBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579694</commentid>
    <comment_count>7</comment_count>
      <attachid>380850</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-14 10:45:51 -0700</bug_when>
    <thetext>Comment on attachment 380850
Address review feedback

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

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.h:38
&gt;&gt; +struct PasteboardCustomDataEntry {
&gt; 
&gt; Might want this to be a nested class instead of a separate top level class.

Sounds good — refactored this to PasteboardCustomData::Entry.

&gt;&gt; Source/WebCore/platform/PasteboardCustomData.h:42
&gt;&gt; +    WEBCORE_EXPORT PasteboardCustomDataEntry&amp; operator=(const PasteboardCustomDataEntry&amp; otherData);
&gt; 
&gt; Same thing can apply for assignment operator as for copy constructor. Might want a move overload since that can be more efficient than copying, depending on how this is used.

Added a move assignment operator.

&gt;&gt; Source/WebCore/platform/SharedBuffer.h:194
&gt;&gt; +    WTF::Persistence::Decoder decoder() const;
&gt; 
&gt; It’s great to have this function available. Not so good that SharedBuffer.h now includes PersistentCoders.h. Could we use a forward declaration instead of including PersistentCoders.h or have this be a free function somewhere instead of a member function?

Good catch! Replaced the #include above with a forward declaration for Decoder.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:301
&gt;&gt; +        auto *itemDictionaries = [NSMutableArray arrayWithCapacity:itemLists.count];
&gt; 
&gt; For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

Sounds good! Changed to use RetainPtr.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:315
&gt;&gt; +    auto *itemProviders = [NSMutableArray arrayWithCapacity:itemLists.count];
&gt; 
&gt; For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

Changed to use RetainPtr.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:603
&gt;&gt; +    NSMutableArray *registrationLists = [NSMutableArray arrayWithCapacity:itemData.size()];
&gt; 
&gt; For non-ARC code, I believe it’s more efficient to use alloc/init and RetainPtr than to use a method like this one that returns an auto-released object. Although this is slightly more elegant, and matches the idiom in some other existing code.

Changed to use RetainPtr.

&gt;&gt; Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1679
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Seems strange to assert in this one place. Other decode failures are equally worth asserting. I would omit this. Or could use a single 3-state value rather than two booleans for hasString and hasBuffer.

Okay! I’ve omitted this assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579696</commentid>
    <comment_count>8</comment_count>
      <attachid>380895</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-14 10:49:12 -0700</bug_when>
    <thetext>Created attachment 380895
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579835</commentid>
    <comment_count>9</comment_count>
      <attachid>380895</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-14 14:52:33 -0700</bug_when>
    <thetext>Comment on attachment 380895
For EWS

Clearing flags on attachment: 380895

Committed r251100: &lt;https://trac.webkit.org/changeset/251100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580315</commentid>
    <comment_count>10</comment_count>
    <who name="Ling Ho">lingcherd_ho</who>
    <bug_when>2019-10-15 15:20:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/56264579&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380767</attachid>
            <date>2019-10-11 11:10:19 -0700</date>
            <delta_ts>2019-10-11 11:18:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202851-20191011111018.patch</filename>
            <type>text/plain</type>
            <size>73281</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI3ZGI1YmUyMTRhNWE2
YmExMGE2YTZiYWYzZDE3NTVmOGY3MWM1Yi4uZmMxM2M5ZTIwYjc5ZGI4YmQzNTcxMTAyZGQ2Njk1
OWJjMTE5NjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxOS0xMC0xMSAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJk
IEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGgg
U2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgc29tZSBsb2dpYyBh
cm91bmQgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEsIGluIHByZXBhcmF0aW9uIGZvciBp
bXBsZW1lbnRpbmcgdGhlIGFzeW5jCisgICAgICAgIGNsaXBib2FyZCBBUEkuIFRoZXJlIGFyZSB0
d28gbWFpbiBnb2FscyBvZiB0aGlzIHJlZmFjdG9yaW5nOgorCisgICAgICAgIDEuIEVuYWJsZSB3
cml0aW5nIG11bHRpcGxlIGl0ZW1zIChlYWNoIGJhY2tlZCBieSBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSkgdG8gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQuCisgICAgICAgIDIuIEVuYWJsZSB3cml0aW5n
IHBsYXRmb3JtIGRhdGEgaW4gdGhlIGZvcm0gb2YgU2hhcmVkQnVmZmVycyB0byB0aGUgcGxhdGZv
cm0gcGFzdGVib2FyZC4KKworICAgICAgICBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlsczsgbm8g
dGVzdHMsIGFzIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQuCisKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICBNb3ZlIFBhc3RlYm9h
cmRDdXN0b21EYXRhIG91dCBvZiBQYXN0ZWJvYXJkLmggYW5kIGludG8gaXRzIG93biBmaWxlLgor
CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXI6OmNvbW1pdFRvUGFzdGVib2FyZCk6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5
cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJl
ZEJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcik6IERlbGV0ZWQuCisKKyAgICAgICAgTW92ZWQgdGhl
c2UgbWV0aG9kIGltcGxlbWVudGF0aW9ucyB0byBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisKKyAgICAgICAgUmVmYWN0b3IgUGFz
dGVib2FyZEN1c3RvbURhdGEgc28gdGhhdCBpdHMgbWVtYmVyIHZhcmlhYmxlcyBhcmUgbm93IHBy
aXZhdGUsIGFuZCBlbmNhcHN1bGF0ZWQgYmVoaW5kIGNvbnN0CisgICAgICAgIGdldHRlcnMuIEFk
ZGl0aW9uYWxseSwgbWFrZSBpdCBzbyB0aGF0IHRoZSBvbmx5IHdheSB0byBzZXQgZGF0YSBvbiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBpcyB0byB1c2UgdGhlCisgICAgICAgIHdyaXRlU3RyaW5nLCB3
cml0ZURhdGEsIGFuZCB3cml0ZVN0cmluZ0luQ3VzdG9tRGF0YSBtZXRob2RzLCB3aGljaCBlbnN1
cmUgdGhhdCB0aGUgUGFzdGVib2FyZEN1c3RvbURhdGEgaXMKKyAgICAgICAgYWx3YXlzIGluIGEg
Y29uc2lzdGVudCBzdGF0ZS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21E
YXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
UGFzdGVib2FyZEN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3Rv
bURhdGE6OmNyZWF0ZVNoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjp1
cGRhdGVUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3Jp
dGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVTdHJp
bmdJbkN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6
OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oOiBBZGRl
ZC4KKworICAgICAgICBBZGRpdGlvbmFsbHkgcmVuYW1lIHNldmVyYWwgbWVtYmVyIHZhcmlhYmxl
cyBpbiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YToKKyAgICAgICAgLSBgdHlwZXNgIGlzIG5vdyBgbV9v
cmRlcmVkVHlwZXNgLgorICAgICAgICAtIGBwbGF0Zm9ybURhdGFgIGlzIG5vdyBgbV9wbGF0Zm9y
bVN0cmluZ0RhdGFgLCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGBtX3BsYXRmb3JtQmluYXJ5RGF0
YWAuCisgICAgICAgIC0gYHNhbWVPcmlnaW5DdXN0b21EYXRhYCBpcyBub3cgYG1fc2FtZU9yaWdp
bkN1c3RvbVN0cmluZ0RhdGFgLCB0byBtYXRjaCB0aGUgc3VmZml4IG9mIGBtX3BsYXRmb3JtU3Ry
aW5nRGF0YWAuCisKKyAgICAgICAgVGhpcyBhbHNvIGFkZHMgYG1fcGxhdGZvcm1CaW5hcnlEYXRh
YCwgYSBtYXAgb2YgU3RyaW5nIHRvIFNoYXJlZEJ1ZmZlcnMgdG8gd3JpdGUgdG8gdGhlIHBsYXRm
b3JtIHBhc3RlYm9hcmQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRh
OjpvcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6
OnNldE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6b3Jk
ZXJlZFR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRh
OjpwbGF0Zm9ybVN0cmluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpwbGF0Zm9ybUJpbmFyeURhdGEgY29uc3Qp
OgorCisgICAgICAgIE1vdmVkIHRoZXNlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgZnJvbSBTdGF0
aWNQYXN0ZWJvYXJkIHRvIFBhc3RlYm9hcmRDdXN0b21EYXRhLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6aGFzQ3VzdG9tRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6aGFzUGxhdGZvcm1EYXRhIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TdGF0aWNQYXN0ZWJv
YXJkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6Omhhc0RhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNh
ZmVCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1
c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OndyaXRlU3RyaW5nSW5DdXN0b21EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OnRha2VDdXN0b21EYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OlN0YXRpY1Bhc3RlYm9hcmQpOiBEZWxldGVkLgorCisg
ICAgICAgIFJlZmFjdG9yIFN0YXRpY1Bhc3RlYm9hcmQgdG8gbm93IGNvbnRhaW4gYSBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTsgYWRkaXRpb25hbGx5LCBhZGp1c3Qgc2V2ZXJhbCBtZXRob2RzIGluCisg
ICAgICAgIFN0YXRpY1Bhc3RlYm9hcmQgdG8gc2ltcGx5IGNhbGwgaW50byBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSB0byB3cml0ZSwgcmVhZCwgb3IgY2xlYXIgZGF0YS4KKworICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlVHlwZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3Rl
Ym9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKToKKworICAgICAg
ICBNb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29h
VHlwZSBmcm9tIFBhc3RlYm9hcmRDb2NvYS5tbSB0bworICAgICAgICBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YUNvY29hLm1tLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2Fy
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpyZWdpc3Rlckl0ZW1zVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKworICAgICAgICBTdXBwb3J0IHdyaXRpbmcgbXVsdGlw
bGUgUGFzdGVib2FyZEN1c3RvbURhdGEgb2JqZWN0cyB0byB0aGUgcGxhdGZvcm0gcGFzdGVib2Fy
ZCBvbiBpT1MsIGJ5IGdlbmVyYXRpbmcKKyAgICAgICAgTlNJdGVtUHJvdmlkZXJzIGZvciBlYWNo
IG9uZS4gVGhpcyByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9h
cmRgIGhlbHBlciB0byBoYW5kbGUgbXVsdGlwbGUKKyAgICAgICAgcmVnaXN0cmF0aW9uIGxpc3Rz
LCByZW5hbWVzIGl0IHRvIGByZWdpc3Rlckl0ZW1zVG9QYXN0ZWJvYXJkYCAocGx1cmFsKSwgYW5k
IHRoZW4gcmVpbXBsZW1lbnRzCisgICAgICAgIGByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmRgIGlu
IHRlcm1zIG9mIGByZWdpc3Rlckl0ZW1zVG9QYXN0ZWJvYXJkYC4KKworICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25MaXN0
KToKKworICAgICAgICBBZGp1c3QgdGhlc2UgdG8gdXNlIGdldHRlcnMgb24gUGFzdGVib2FyZEN1
c3RvbURhdGEgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMgZGlyZWN0
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5t
bToKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBpbml0XSk6CisgICAgICAg
ICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0czpdKToK
KyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBjbGVhclJlZ2lzdHJhdGlvbkxp
c3RzXSk6CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgdGFrZVJlZ2lzdHJh
dGlvbkxpc3RzXSk6CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc3RhZ2VS
ZWdpc3RyYXRpb25MaXN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkIHRha2VSZWdpc3RyYXRpb25MaXN0XSk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVm
YWN0b3IgcmVnaXN0cmF0aW9uIGxpc3Qgc3RhZ2luZyBvbiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJv
YXJkIHRvIHN1cHBvcnQgbXVsdGlwbGUgcmVnaXN0cmF0aW9uIGxpc3RzLCBlYWNoCisgICAgICAg
IHJlcHJlc2VudGluZyBhIHNpbmdsZSBpdGVtIHByb3ZpZGVyLgorCisgICAgICAgICogcGxhdGZv
cm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRXcml0ZXIubW06CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVQYXN0ZWJvYXJkV3JpdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKworICAgICAgICBTdXBw
b3J0IHdyaXRpbmcgbXVsdGlwbGUgUGFzdGVib2FyZEN1c3RvbURhdGEgb2JqZWN0cyB0byB0aGUg
cGxhdGZvcm0gcGFzdGVib2FyZCBvbiBtYWNPUywgYnkgY3JlYXRpbmcgYW5kCisgICAgICAgIHNl
dHRpbmcgTlNQYXN0ZWJvYXJkSXRlbXMgZm9yIGVhY2ggY3VzdG9tIGRhdGEuIFRoaXMgbWVhbnMg
dGhhdCBpbnN0ZWFkIG9mIHVzaW5nIGxlZ2FjeSBtYWNPUyBwYXN0ZWJvYXJkIHR5cGVzLAorICAg
ICAgICB3ZSBuZWVkIHRvIHVzZSB0aGUgIm1vZGVybiIgTlNQYXN0ZWJvYXJkVHlwZXMgd2hlbiB3
cml0aW5nIGVhY2ggaXRlbS4gVGhpcyBpcyBiZWNhdXNlIE5TUGFzdGVib2FyZEl0ZW0gcXVpZXRs
eQorICAgICAgICBmYWlscyB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGRhdGEgZm9yIGEgbGVnYWN5
IHBhc3RlYm9hcmQgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUGFzdGVib2FyZEl0
ZW0pOgorCiAyMDE5LTEwLTEwICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0RnJhbWVSYXRlV2l0aFByZXNldCBz
aG91bGQgbm90IHVzZSBwcmVzZXQgYWZ0ZXIgbW92aW5nIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVlMWExMWI2
NzEwZDZlYTRhMzE4YWYyZDI3Yzk5OWY1N2M4MzUzOTguLjM0ODRlNDFhYmFjY2Y4ZjI0MDFlMWY4
ZTFiNWM5ZTdiNjcxZjVjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTktMTAtMTEg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NsaXBi
b2FyZCBBUEldIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB3
aXRoIFNoYXJlZEJ1ZmZlcnMgdG8gdGhlIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjg1MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6
CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UGFzdGVib2FyZEN1c3RvbURhdGE+OjplbmNv
ZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhPjo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisKKyAg
ICAgICAgRW5jb2RlIGFuZCBkZWNvZGUgbV9wbGF0Zm9ybUJpbmFyeURhdGEgd2hlbiBzZW5kaW5n
IFBhc3RlYm9hcmRDdXN0b21EYXRhIG92ZXIgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVxdWVz
dERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBjYW5QZXJmb3JtQWN0aW9uRm9yV2ViVmlldzp3aXRoU2Vu
ZGVyOl0pOgorICAgICAgICAoYWxsUGFzdGVib2FyZEl0ZW1PcmlnaW5zTWF0Y2hPcmlnaW4pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRIYW5kbGVBZGRpdGlvbmFsRHJhZ0l0ZW1zUmVx
dWVzdDpdKToKKworICAgICAgICBUd2VhayBzZXZlcmFsIG1ldGhvZHMgdG8gdXNlIHRoZSBuZXcg
Z2V0dGVycyBvbiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUg
bWVtYmVyIHZhcmlhYmxlcworICAgICAgICBkaXJlY3RseS4KKworICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0YXRlXSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3ByZXBhcmVUb0RyYWdQcm9taXNlZEF0dGFjaG1lbnQ6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVn
aXN0cmF0aW9uTGlzdHM6c3RhZ2VkRHJhZ1NvdXJjZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBkcmFnSW50ZXJhY3Rpb246aXRlbXNGb3JCZWdpbm5pbmdTZXNzaW9uOl0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IF9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9uV2l0
aFJlZ2lzdHJhdGlvbkxpc3Q6c3RhZ2VkRHJhZ1NvdXJjZTpdKTogRGVsZXRlZC4KKworICAgICAg
ICBBZGp1c3QgdGhlc2UgbWV0aG9kcyB0byBoYW5kbGUgbXVsdGlwbGUgc3RhZ2VkIGl0ZW0gcHJv
dmlkZXJzIChmb3Igbm93LCBpdCByZW1haW5zIHRoYXQgaU9TIGRyYWcgYW5kIGRyb3AKKyAgICAg
ICAgY29kZXBhdGhzIHdpbGwgc3RpbGwgb25seSB3cml0ZSBhIHNpbmdsZSBpdGVtIHRvIHRoZSBw
YXN0ZWJvYXJkKS4KKwogMjAxOS0xMC0xMCAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFNwZWN1bGF0aXZlTG9hZCBzaG91bGQgdXNlIENvbXBsZXRpb25IYW5kbGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNGJhNzFmYjgwMTc2OTE0OGU4NzM0YjlmYTA0
NDU0Y2Y2YjgxNzY0NS4uMWMwNDE2ODYzZmUzM2I1NDc3ODMxZGRjM2QxMzdiZTdmMmMxZTU5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE5LTEwLTEx
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDbGlw
Ym9hcmQgQVBJXSBTdXBwb3J0IHdyaXRpbmcgbXVsdGlwbGUgUGFzdGVib2FyZEN1c3RvbURhdGEg
d2l0aCBTaGFyZWRCdWZmZXJzIHRvIHRoZSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI4NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oOgorCiAyMDE5LTEwLTA5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtDbGlwYm9hcmQgQVBJXSBSZWZhY3RvciBQYXN0ZWJvYXJkIGl0ZW0g
cmVhZGluZyBmdW5jdGlvbnMgdG8gd29yayBvbiBib3RoIGlPUyBhbmQgbWFjT1MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggYWUyNTc2NTQzNTlhZmE5YmM0MzY0Y2RjYTc0YmYyMmEzMzAyZDNlYS4uNWY4MThh
NWZhOGM1ZjgyMTc5YTE4OTJlMDFkOWRhODNmZGFkY2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE3
MjQsNiArMTcyNCw3IEBAIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9N
YWluVGhyZWFkU2hhcmVkVGltZXIuY3BwCiBwbGF0Zm9ybS9Ob3RJbXBsZW1lbnRlZC5jcHAKIHBs
YXRmb3JtL1Bhc3RlYm9hcmQuY3BwCitwbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAK
IHBsYXRmb3JtL1Bhc3RlYm9hcmRXcml0ZXJEYXRhLmNwcAogcGxhdGZvcm0vUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmNwcAogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Uu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAwOTU3OTQzY2M0ZmViZTM5ZGQ3MGExMjhl
ZTZjNGY3MTgxYTYwMjFkLi45N2RiMTVlMzY2ZjJhOWEwNmQzOTY3Y2Q2YWNlMzRkZjk1OTdiNjg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTE5OCw2ICsxOTgsNyBAQCBwbGF0Zm9ybS9j
b2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2EubW0KIHBsYXRmb3JtL2NvY29hL05ldHdvcmtFeHRl
bnNpb25Db250ZW50RmlsdGVyLm1tCiBwbGF0Zm9ybS9jb2NvYS9QYXJlbnRhbENvbnRyb2xzQ29u
dGVudEZpbHRlci5tbQogcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCitwbGF0Zm9y
bS9jb2NvYS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9QbGF0
Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbQogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0KIHBsYXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
c0NvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNDk1NTQwNGM4ODlhZGNiNDg3OGE2OGRlNmFlZGZhYzk5ZDhjNmFlYy4u
MGQzYTBmYTdjYThjMmI1MzhlYmI4NDExYmUzOWE4OWJlYzAyODVlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDkwNSw2ICs0
OTA1LDcgQEAKIAkJRjRENDNENjYyMTg4MDM4QjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2ht
ZW50RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRENDNENjQyMTg4MDJFNjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0RTU3RURD
MjEzRjNGNUYwMDRFQTk4RSAvKiBGb250QXR0cmlidXRlQ2hhbmdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRFNTdFREEyMTNGM0Y1RjAwNEVBOThF
IC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRFNTdFRTEyMTNGNDM0QTAwNEVBOThFIC8qIFdlYkNvcmVO
U0ZvbnRNYW5hZ2VyRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNEU1N0VERjIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFn
ZXJFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlGNEZCMzRGQzIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2FyZEN1c3RvbURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RkIzNEZBMjM1
MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUwNjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmgg
Ki87IH07CiAJCUY1MTNBM0VBMTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVzc2FnZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUx
M0EzRTkxNUZGNDg0MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjU0NEY3ODkxNUNG
QjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTQ0Rjc4NzE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZv
cm1Mb2NhbGUuaCAqLzsgfTsKQEAgLTE1MjQwLDYgKzE1MjQxLDkgQEAKIAkJRjRFNTdFREEyMTNG
M0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRBdHRyaWJ1dGVDaGFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RTU3
RURGMjEzRjQzNEEwMDRFQTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNEU1N0VFMDIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1h
bmFnZXJFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlTlNGb250TWFuYWdl
ckV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRGQjM0RkEyMzUwQzg1
RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3Rl
Ym9hcmRDdXN0b21EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RkIzNEZC
MjM1MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY0RkIzNTAwMjM1MEM5NjIwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAwQUMyMjZG
IC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUw
NjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY1MTNBM0U5MTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVzc2FnZUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0aW9uTWVzc2Fn
ZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3MjgsNiArMjI3MzIs
NyBAQAogCQkJCUExODg5MEFEMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29u
dGVudEZpbHRlci5oICovLAogCQkJCUExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRh
bENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLywKIAkJCQk5QkVEMkNBRjFGN0NDMDYyMDA2NjYw
MTggLyogUGFzdGVib2FyZENvY29hLm1tICovLAorCQkJCUY0RkIzNTAwMjM1MEM5NjIwMEYwMDk0
QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tICovLAogCQkJCUY0NjI4QTlFMjM0RDNC
QkYwMEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLywKIAkJCQk1MkIwRDRC
RDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8sCiAJCQkJQ0RBMjlBMDgxQ0JE
OTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLApAQCAtMjU1OTQs
NiArMjU1OTksOCBAQAogCQkJCTQxODRGNTE1MUVBRjA1OTgwMEYxOEJGMCAvKiBPcmllbnRhdGlv
bk5vdGlmaWVyLmggKi8sCiAJCQkJMkVFMDJBMUUxRjczMjQyODAwMDZBRjcyIC8qIFBhc3RlYm9h
cmQuY3BwICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmgg
Ki8sCisJCQkJRjRGQjM0RkIyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRh
LmNwcCAqLywKKwkJCQlGNEZCMzRGQTIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2FyZEN1c3Rv
bURhdGEuaCAqLywKIAkJCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0
ZW1JbmZvLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRT
dHJhdGVneS5oICovLAogCQkJCTFBRjVFNEQyMUU1NjczNUEwMDRBMUYwMSAvKiBQYXN0ZWJvYXJk
V3JpdGVyRGF0YS5jcHAgKi8sCkBAIC0zMTE5MCw2ICszMTE5Nyw3IEBACiAJCQkJNTM2RDVBMjMx
OTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUY0RkIzNEZDMjM1MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ5Nzg2ODgxRkY0NUZBNTAwRTA2MEFCIC8q
IFBhc3RlYm9hcmRJdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkwNTcxNEU5QzI4
MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFG
NUU0RTMxRTU3NzlCMTAwNEExRjAxIC8qIFBhc3RlYm9hcmRXcml0ZXIuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAppbmRleCA1YzcxYjM2OGU2MDI4YjAxNzRm
M2E3ZmRmNDM4ODY0ZDg4OGY4OGRjLi5lNmJhODVkNDdiOTM2NjQ2YWNiYjk2YjA0M2IyNWI4ODVm
MzEyOTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApAQCAtNDI2LDE0ICs0MjYs
MTQgQEAgdm9pZCBEYXRhVHJhbnNmZXI6OmNvbW1pdFRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBu
YXRpdmVQYXN0ZWJvYXJkKQogICAgIEFTU0VSVChpczxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0
ZWJvYXJkKSAmJiAhaXM8U3RhdGljUGFzdGVib2FyZD4obmF0aXZlUGFzdGVib2FyZCkpOwogICAg
IFBhc3RlYm9hcmRDdXN0b21EYXRhIGN1c3RvbURhdGEgPSBkb3duY2FzdDxTdGF0aWNQYXN0ZWJv
YXJkPigqbV9wYXN0ZWJvYXJkKS50YWtlQ3VzdG9tRGF0YSgpOwogICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGN1c3RvbURhdGEub3JpZ2luID0gbV9vcmlnaW5JZGVudGlmaWVyOwor
ICAgICAgICBjdXN0b21EYXRhLnNldE9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOwogICAgICAg
ICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlQ3VzdG9tRGF0YShjdXN0b21EYXRhKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgZW50cnkgOiBjdXN0b21EYXRhLnBsYXRm
b3JtRGF0YSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5wbGF0Zm9ybVN0cmlu
Z0RhdGEoKSkKICAgICAgICAgbmF0aXZlUGFzdGVib2FyZC53cml0ZVN0cmluZyhlbnRyeS5rZXks
IGVudHJ5LnZhbHVlKTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5zYW1lT3Jp
Z2luQ3VzdG9tRGF0YSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5zYW1lT3Jp
Z2luQ3VzdG9tU3RyaW5nRGF0YSgpKQogICAgICAgICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlU3Ry
aW5nKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBmMjVmMjhjZjFjN2VhNzBiNDFjYWNmM2VlNTUx
Y2ExNjg5NGQ3ZTUzLi4zYWI5ZDU4MjAzNWUxMDA3ZmMyNTQ0NWYxMzJkYzkyZTVlZGRiMzQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2ht
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCksIG91dFR5cGVzLCBvdXRE
YXRhKTsKIAogICAgIG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FU
eXBlKCkpOwotICAgIG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1l
bnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwgeyB9LCB7IH0sIHsgfSB9LmNyZWF0
ZVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSB7IGRvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSwgeyB9LCB7
IH0sIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAogICAgIGlmIChhdXRvIGFyY2hpdmUg
PSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigpKSkgewogICAgICAg
ICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlv
bigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDhmOWJhYjg0
NTYxMGQwZjkxMDdkODIzMGRmMjNlZWYxZmIwMWMxNGMuLmU3MzRiMzhhZThkYjQ4MTlhMTVjMmVm
OTgyMTRmMmQ4ZWYzYmE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3Bw
CkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3
dGYvVVJMUGFyc2VyLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTUxLDQwICs0OSw2IEBAIGJvb2wgUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9E
T01XaGVuUGFzdGVib2FyZENvbnRhaW5zRmlsZXMoY29uc3QgU3RyaW5nJiB1cmxTCiAgICAgcmV0
dXJuIHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgdXJsLnByb3RvY29sSXNCbG9iKCkg
fHwgdXJsLnByb3RvY29sSXNEYXRhKCk7CiB9CiAKLVJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIoKSBjb25zdAotewotICAgIGNvbnN0IHN0
YXRpYyB1bnNpZ25lZCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uID0gMTsK
LQotICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKLSAgICBlbmNvZGVyIDw8
IGN1cnJlbnRDdXN0b21EYXRhU2VyaWFsaXphdGlvblZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBv
cmlnaW47Ci0gICAgZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tRGF0YTsKLSAgICBlbmNvZGVy
IDw8IG9yZGVyZWRUeXBlczsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwotfQotCi1QYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRC
dWZmZXImIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4U3VwcG9ydGVk
RGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVtYmVyID0gMTsKLQotICAgIFBhc3RlYm9hcmRDdXN0
b21EYXRhIHJlc3VsdDsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNp
emUoKSB9OwotICAgIHVuc2lnbmVkIHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
ZXJzaW9uKSB8fCB2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9u
TnVtYmVyKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQub3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnNhbWVPcmlnaW5DdXN0b21EYXRhKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9yZGVyZWRUeXBlcykpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgIVBMQVRGT1JNKENP
Q09BKQogCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyhjb25zdCBT
dHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggNjk4N2Vk
MjU2NTNmYjZjOWM2OGIzYTM3YWY3NzYwNGMwOGI2Njk1MC4uY2JmZmNhMjc1YjBiZDFhMzQxNzg1
NjVmYWNkMGQ5ZjZhNjVlNmFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIK
KyNpbmNsdWRlICJQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRJ
dGVtSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RI
YXNoU2V0Lmg+CkBAIC0xNjEsMjEgKzE2Miw2IEBAIHN0cnVjdCBQYXN0ZWJvYXJkRmlsZVJlYWRl
ciB7CiAgICAgdmlydHVhbCB2b2lkIHJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7CiB9OwogCi0vLyBG
SVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGVudHMgb2Ygc2FtZU9yaWdpbkN1
c3RvbURhdGEgYXJlIG5vdCBhY2Nlc3NpYmxlIGFjcm9zcyBkaWZmZXJlbnQgb3JpZ2lucy4KLXN0
cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7Ci0gICAgU3RyaW5nIG9yaWdpbjsKLSAgICBWZWN0
b3I8U3RyaW5nPiBvcmRlcmVkVHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGxh
dGZvcm1EYXRhOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21E
YXRhOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlU2hhcmVk
QnVmZmVyKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3RlYm9hcmRDdXN0
b21EYXRhIGZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJik7Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FU
eXBlKCk7Ci0jZW5kaWYKLX07Ci0KIGNsYXNzIFBhc3RlYm9hcmQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhc3RlYm9hcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMjY5NWVjNjNlNzU1M2RjZDIxN2JjZTgzYWM2NzFlOGUyM2NlN2Q2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBhc3RlYm9hcmRDdXN0b21EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3Rl
Ym9hcmRDdXN0b21EYXRhKCkgPSBkZWZhdWx0OworUGFzdGVib2FyZEN1c3RvbURhdGE6On5QYXN0
ZWJvYXJkQ3VzdG9tRGF0YSgpID0gZGVmYXVsdDsKKworUGFzdGVib2FyZEN1c3RvbURhdGE6OlBh
c3RlYm9hcmRDdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYm
IG9yZGVyZWRUeXBlcywgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBwbGF0Zm9ybVN0cmluZ0Rh
dGEsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgY3VzdG9tRGF0YSwgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYmIHBsYXRmb3JtQmluYXJ5RGF0YSkKKyAgICA6IG1fb3Jp
Z2luKG9yaWdpbikKKyAgICAsIG1fb3JkZXJlZFR5cGVzKFdURk1vdmUob3JkZXJlZFR5cGVzKSkK
KyAgICAsIG1fcGxhdGZvcm1TdHJpbmdEYXRhKFdURk1vdmUocGxhdGZvcm1TdHJpbmdEYXRhKSkK
KyAgICAsIG1fc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEoV1RGTW92ZShjdXN0b21EYXRhKSkK
KyAgICAsIG1fcGxhdGZvcm1CaW5hcnlEYXRhKFdURk1vdmUocGxhdGZvcm1CaW5hcnlEYXRhKSkK
K3sKK30KKworUGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0b21EYXRhKGNvbnN0
IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQorICAgIDogbV9vcmlnaW4oZGF0YS5vcmlnaW4o
KSkKKyAgICAsIG1fb3JkZXJlZFR5cGVzKGRhdGEub3JkZXJlZFR5cGVzKCkpCisgICAgLCBtX3Bs
YXRmb3JtU3RyaW5nRGF0YShkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpKQorICAgICwgbV9zYW1l
T3JpZ2luQ3VzdG9tU3RyaW5nRGF0YShkYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkp
CisgICAgLCBtX3BsYXRmb3JtQmluYXJ5RGF0YShkYXRhLnBsYXRmb3JtQmluYXJ5RGF0YSgpKQor
eworfQorCitSZWY8U2hhcmVkQnVmZmVyPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hh
cmVkQnVmZmVyKCkgY29uc3QKK3sKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY3VycmVudEN1
c3RvbURhdGFTZXJpYWxpemF0aW9uVmVyc2lvbiA9IDE7CisKKyAgICBXVEY6OlBlcnNpc3RlbmNl
OjpFbmNvZGVyIGVuY29kZXI7CisgICAgZW5jb2RlciA8PCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlh
bGl6YXRpb25WZXJzaW9uOworICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CisgICAgZW5jb2RlciA8
PCBtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhOworICAgIGVuY29kZXIgPDwgbV9vcmRlcmVk
VHlwZXM7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKK30KKworUGFzdGVib2FyZEN1c3RvbURhdGEgUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZm
ZXIpCit7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIG1heFN1cHBvcnRlZERhdGFTZXJpYWxp
emF0aW9uVmVyc2lvbk51bWJlciA9IDE7CisKKyAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1
bHQ7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkgfTsKKyAg
ICB1bnNpZ25lZCB2ZXJzaW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwg
dmVyc2lvbiA+IG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fb3Jp
Z2luKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm1fc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9vcmRlcmVkVHlwZXMpKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdXBk
YXRlVHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBTdHJpbmcgdHlwZSwgYm9vbCBtb3ZlVG9F
bmQpCit7CisgICAgaWYgKG1vdmVUb0VuZCkKKyAgICAgICAgdHlwZXMucmVtb3ZlRmlyc3QodHlw
ZSk7CisgICAgQVNTRVJUKCF0eXBlcy5jb250YWlucyh0eXBlKSk7CisgICAgdHlwZXMuYXBwZW5k
KHR5cGUpOworfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZyhjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbV9wbGF0Zm9ybUJp
bmFyeURhdGEucmVtb3ZlKHR5cGUpOworICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVzZW50ID0g
IW1fcGxhdGZvcm1TdHJpbmdEYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRyeSB8fCBoYXND
dXN0b21EYXRhKHR5cGUpOworICAgIHVwZGF0ZVR5cGVzKG1fb3JkZXJlZFR5cGVzLCB0eXBlLCB0
eXBlV2FzQWxyZWFkeVByZXNlbnQpOworfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3
cml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpCit7
CisgICAgbV9wbGF0Zm9ybVN0cmluZ0RhdGEucmVtb3ZlKHR5cGUpOworICAgIGJvb2wgdHlwZVdh
c0FscmVhZHlQcmVzZW50ID0gIW1fcGxhdGZvcm1CaW5hcnlEYXRhLnNldCh0eXBlLCBXVEZNb3Zl
KGRhdGEpKS5pc05ld0VudHJ5IHx8IGhhc0N1c3RvbURhdGEodHlwZSk7CisgICAgdXBkYXRlVHlw
ZXMobV9vcmRlcmVkVHlwZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7Cit9CisKK3Zv
aWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBib29sIHR5cGVXYXNBbHJl
YWR5UHJlc2VudCA9ICFtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhLnNldCh0eXBlLCB2YWx1
ZSkuaXNOZXdFbnRyeSB8fCBoYXNQbGF0Zm9ybURhdGEodHlwZSk7CisgICAgdXBkYXRlVHlwZXMo
bV9vcmRlcmVkVHlwZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7Cit9CisKK3ZvaWQg
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNsZWFyKCkKK3sKKyAgICBtX3BsYXRmb3JtQmluYXJ5RGF0
YS5jbGVhcigpOworICAgIG1fc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEuY2xlYXIoKTsKKyAg
ICBtX3BsYXRmb3JtU3RyaW5nRGF0YS5jbGVhcigpOworICAgIG1fb3JkZXJlZFR5cGVzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1CaW5hcnlEYXRhLnJlbW92ZSh0eXBlKSAmJiAh
bV9wbGF0Zm9ybVN0cmluZ0RhdGEucmVtb3ZlKHR5cGUpICYmICFtX3NhbWVPcmlnaW5DdXN0b21T
dHJpbmdEYXRhLnJlbW92ZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3JkZXJlZFR5
cGVzLnJlbW92ZUZpcnN0KHR5cGUpOworICAgIEFTU0VSVCghbV9vcmRlcmVkVHlwZXMuY29udGFp
bnModHlwZSkpOworfQorCitib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNDdXN0b21EYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYW1lT3JpZ2luQ3Vz
dG9tU3RyaW5nRGF0YS5jb250YWlucyh0eXBlKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6aGFzUGxhdGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybVN0cmluZ0RhdGEuY29udGFpbnModHlwZSkgfHwgbV9wbGF0Zm9ybUJp
bmFyeURhdGEuY29udGFpbnModHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYwOTE2NGM4NTdlMGM4MTcwOTNmNjUwODNlNWRhMGY3NDNhZmM5NWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8d3Rm
L0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsK
KworY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGEgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIFBhc3RlYm9hcmRDdXN0b21EYXRhKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2Fy
ZEN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mJiwgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mJiBwbGF0Zm9ybVN0cmluZ0RhdGEsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiYgY3VzdG9tRGF0YSwgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIH5QYXN0ZWJvYXJkQ3VzdG9tRGF0YSgp
OworCisgICAgY29uc3QgU3RyaW5nJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsg
fQorICAgIHZvaWQgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKSB7IG1fb3JpZ2luID0g
b3JpZ2luOyB9CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3JkZXJlZFR5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9vcmRlcmVkVHlwZXM7IH0KKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgcGxhdGZvcm1TdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVN0
cmluZ0RhdGE7IH0KKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgc2FtZU9yaWdp
bkN1c3RvbVN0cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NhbWVPcmlnaW5DdXN0b21TdHJp
bmdEYXRhOyB9CisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTaGFyZWRCdWZmZXI+
PiYgcGxhdGZvcm1CaW5hcnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUJpbmFyeURh
dGE7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSBmcm9tU2hhcmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOworCisgICAgdm9p
ZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwor
ICAgIHZvaWQgd3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiBkYXRhKTsKKyAgICB2b2lkIHdyaXRlU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9p
ZCBjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IGNoYXIqIGNvY29hVHlwZSgpOworI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgYm9vbCBoYXNDdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29u
c3Q7CisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsK
KworICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyZWRUeXBl
czsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3BsYXRmb3JtU3RyaW5nRGF0YTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U2hhcmVkQnVmZmVyPj4gbV9wbGF0Zm9ybUJpbmFy
eURhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCmluZGV4IDU3N2NhZjg5NWJlYjE5Nzk4OTkyNzAx
ZWQ1ZmY4YWM3MDUyMGYzMWIuLmVkODYwODVmZDc2Mjc4NTcwYWM2ZWNkYzIzNzQ1N2JjMDU0MzA0
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVn
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCkBA
IC0zMSwxMyArMzEsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Citj
bGFzcyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiBjbGFzcyBT
aGFyZWRCdWZmZXI7CiBzdHJ1Y3QgUGFzdGVib2FyZEltYWdlOwogc3RydWN0IFBhc3RlYm9hcmRJ
dGVtSW5mbzsKIHN0cnVjdCBQYXN0ZWJvYXJkVVJMOwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250
ZW50Owotc3RydWN0IFBhc3RlYm9hcmRDdXN0b21EYXRhOwogCiBjbGFzcyBQYXN0ZWJvYXJkU3Ry
YXRlZ3kgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3Rl
Ym9hcmQuaAppbmRleCBkZjAzOTNlMzVmY2E1YjdkYjAzNDYzMDM3NjBhZmVjNmFkYWE2YzMyLi42
ZTJmMDFlMWU0OWRhZGRiODZiZGVjNDQwNjY0ZDNmMGU0ZmIxNzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApAQCAtNDksNyArNDksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7Ci1zdHJ1Y3QgUGFzdGVib2FyZEN1c3RvbURhdGE7CitjbGFzcyBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVi
b2FyZEl0ZW1JbmZvOwogc3RydWN0IFBhc3RlYm9hcmRVUkw7CkBAIC05Niw3ICs5Niw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcmVhZFVSTChzaXplX3QgaW5kZXgsIFN0cmlu
ZyYgdGl0bGUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBjb3VudCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBudW1iZXJPZkZpbGVzKCkgY29uc3Q7Ci0KKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHdyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4m
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBsb25nIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21E
YXRhJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yRE9N
VG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvcmlnaW4pIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCmluZGV4IDE3MzEzZTQ2MDc4NWYz
MDM0ZDQxMGMzMTFhZjM5OGU2OGYwOWFlN2EuLjRhNWQ4M2QxNGI3ZDE5YWQ1OWM3NDI4NTZmZjA0
YjYyN2E4ZmJmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bh
c3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuY3BwCkBAIC0yNiw2NSArMjYsNjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTdGF0aWNQYXN0ZWJvYXJkLmgiCiAKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TdGF0aWNQYXN0ZWJvYXJkOjpTdGF0aWNQYXN0ZWJvYXJkKCkK
K1N0YXRpY1Bhc3RlYm9hcmQ6OlN0YXRpY1Bhc3RlYm9hcmQoKSA9IGRlZmF1bHQ7CitTdGF0aWNQ
YXN0ZWJvYXJkOjp+U3RhdGljUGFzdGVib2FyZCgpID0gZGVmYXVsdDsKKworYm9vbCBTdGF0aWNQ
YXN0ZWJvYXJkOjpoYXNEYXRhKCkKIHsKKyAgICByZXR1cm4gIW1fY3VzdG9tRGF0YS5wbGF0Zm9y
bVN0cmluZ0RhdGEoKS5pc0VtcHR5KCkgfHwgIW1fY3VzdG9tRGF0YS5zYW1lT3JpZ2luQ3VzdG9t
U3RyaW5nRGF0YSgpLmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRhLnBsYXRmb3JtQmluYXJ5RGF0
YSgpLmlzRW1wdHkoKTsKIH0KIAotYm9vbCBTdGF0aWNQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKK1Zl
Y3RvcjxTdHJpbmc+IFN0YXRpY1Bhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0
IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRGF0YS5pc0VtcHR5KCkgfHwgIW1f
Y3VzdG9tRGF0YS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5vcmRlcmVkVHlw
ZXMoKTsKK30KKworVmVjdG9yPFN0cmluZz4gU3RhdGljUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdh
Y3lVbnNhZmVCaW5kaW5ncygpCit7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5vcmRlcmVkVHlw
ZXMoKTsKIH0KIAogU3RyaW5nIFN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlKQogewotICAgIHJldHVybiBtX3BsYXRmb3JtRGF0YS5nZXQodHlwZSk7CisgICAg
cmV0dXJuIG1fY3VzdG9tRGF0YS5wbGF0Zm9ybVN0cmluZ0RhdGEoKS5nZXQodHlwZSk7CiB9CiAK
IFN0cmluZyBTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSkKIHsKLSAgICByZXR1cm4gbV9jdXN0b21EYXRhLmdldCh0eXBlKTsKKyAgICBy
ZXR1cm4gbV9jdXN0b21EYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkuZ2V0KHR5cGUp
OwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIFN0
cmluZyB0eXBlLCBib29sIG1vdmVUb0VuZCkKK3ZvaWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlm
IChtb3ZlVG9FbmQpCi0gICAgICAgIHR5cGVzLnJlbW92ZUZpcnN0KHR5cGUpOwotICAgIEFTU0VS
VCghdHlwZXMuY29udGFpbnModHlwZSkpOwotICAgIHR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICBt
X2N1c3RvbURhdGEud3JpdGVTdHJpbmcodHlwZSwgdmFsdWUpOwogfQogCi12b2lkIFN0YXRpY1Bh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBkYXRhKQogewotICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQ
cmVzZW50ID0gIW1fcGxhdGZvcm1EYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRyeSB8fCBt
X2N1c3RvbURhdGEuY29udGFpbnModHlwZSk7Ci0gICAgdXBkYXRlVHlwZXMobV90eXBlcywgdHlw
ZSwgdHlwZVdhc0FscmVhZHlQcmVzZW50KTsKKyAgICBtX2N1c3RvbURhdGEud3JpdGVEYXRhKHR5
cGUsIFdURk1vdmUoZGF0YSkpOwogfQogCiB2b2lkIFN0YXRpY1Bhc3RlYm9hcmQ6OndyaXRlU3Ry
aW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBib29sIHR5cGVXYXNBbHJlYWR5UHJlc2VudCA9ICFtX2N1c3RvbURhdGEuc2V0KHR5
cGUsIHZhbHVlKS5pc05ld0VudHJ5IHx8IG1fcGxhdGZvcm1EYXRhLmNvbnRhaW5zKHR5cGUpOwot
ICAgIHVwZGF0ZVR5cGVzKG1fdHlwZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7Cisg
ICAgbV9jdXN0b21EYXRhLndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKHR5cGUsIHZhbHVlKTsKIH0K
IAogdm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjpjbGVhcigpCiB7CiAgICAgbV9jdXN0b21EYXRhLmNs
ZWFyKCk7Ci0gICAgbV9wbGF0Zm9ybURhdGEuY2xlYXIoKTsKLSAgICBtX3R5cGVzLmNsZWFyKCk7
CiB9CiAKIHZvaWQgU3RhdGljUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQog
ewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEucmVtb3ZlKHR5cGUpICYmICFtX2N1c3RvbURhdGEu
cmVtb3ZlKHR5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV90eXBlcy5yZW1vdmVGaXJzdCh0
eXBlKTsKLSAgICBBU1NFUlQoIW1fdHlwZXMuY29udGFpbnModHlwZSkpOworICAgIG1fY3VzdG9t
RGF0YS5jbGVhcih0eXBlKTsKIH0KIAotUGFzdGVib2FyZEN1c3RvbURhdGEgU3RhdGljUGFzdGVi
b2FyZDo6dGFrZUN1c3RvbURhdGEoKQorUGFzdGVib2FyZEN1c3RvbURhdGEmJiBTdGF0aWNQYXN0
ZWJvYXJkOjp0YWtlQ3VzdG9tRGF0YSgpCiB7Ci0gICAgcmV0dXJuIHsgeyB9LCBXVEZNb3ZlKG1f
dHlwZXMpLCBXVEZNb3ZlKG1fcGxhdGZvcm1EYXRhKSwgV1RGTW92ZShtX2N1c3RvbURhdGEpIH07
CisgICAgcmV0dXJuIFdURk1vdmUobV9jdXN0b21EYXRhKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCmluZGV4IGVlZGQ3MDI5YjRmNDM5NDU3MTIy
NDY1ZmU0NmNhYjdmYjRjNmQ4MjcuLjJjZWUyYzYwY2NlNjI3NTQ2ZWFlNmJkZTYwYTdmN2EwNGU4
MzdiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKQEAg
LTMyLDIyICszMiwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNoYXJlZEJ1
ZmZlcjsKKwogY2xhc3MgU3RhdGljUGFzdGVib2FyZCBmaW5hbCA6IHB1YmxpYyBQYXN0ZWJvYXJk
IHsKIHB1YmxpYzoKICAgICBTdGF0aWNQYXN0ZWJvYXJkKCk7CisgICAgflN0YXRpY1Bhc3RlYm9h
cmQoKTsKIAotICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhIHRha2VDdXN0b21EYXRhKCk7CisgICAg
UGFzdGVib2FyZEN1c3RvbURhdGEmJiB0YWtlQ3VzdG9tRGF0YSgpOwogCiAgICAgYm9vbCBpc1N0
YXRpYygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgaGFzRGF0YSgp
IGZpbmFsOwotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0IFN0
cmluZyYpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
c0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQorICAg
IFZlY3RvcjxTdHJpbmc+IHR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYpIGZpbmFs
OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKSBmaW5h
bDsKICAgICBTdHJpbmcgcmVhZE9yaWdpbigpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogICAgIFN0
cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CiAgICAgU3RyaW5nIHJl
YWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKIAogICAgIHZv
aWQgd3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpIGZp
bmFsOworICAgIHZvaWQgd3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBkYXRhKTsKICAgICB2b2lkIHdyaXRlU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2b2lkIGNsZWFyKCkgZmluYWw7
CiAgICAgdm9pZCBjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwpAQCAtNzIsOSArNzYs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3R5
cGVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fcGxhdGZvcm1EYXRhOwotICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fY3VzdG9tRGF0YTsKKyAgICBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBtX2N1c3RvbURhdGE7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KaW5kZXggYzBmYmE0YmVmMDc1MTVkZTRhZDI1NGI0
MDM3MDdmMTFiNWNiMTY3NS4uOTY4ZTY0OWFjNTRjOWIzNTk5ZGY2NWMwOTgyZDRlZTU2Y2Q4Yzhk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2Nv
YS5tbQpAQCAtNTEsMTEgKzUxLDYgQEAgc3RhdGljIE5TQml0bWFwSW1hZ2VGaWxlVHlwZSBiaXRt
YXBQTkdGaWxlVHlwZSgpCiBQYXN0ZWJvYXJkV2ViQ29udGVudDo6UGFzdGVib2FyZFdlYkNvbnRl
bnQoKSA9IGRlZmF1bHQ7CiBQYXN0ZWJvYXJkV2ViQ29udGVudDo6flBhc3RlYm9hcmRXZWJDb250
ZW50KCkgPSBkZWZhdWx0OwogCi1jb25zdCBjaGFyKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29j
b2FUeXBlKCkKLXsKLSAgICByZXR1cm4gImNvbS5hcHBsZS5XZWJLaXQuY3VzdG9tLXBhc3RlYm9h
cmQtZGF0YSI7Ci19Ci0KIGVudW0gY2xhc3MgSW1hZ2VUeXBlIHsKICAgICBJbnZhbGlkID0gMCwK
ICAgICBUSUZGLApAQCAtMjYwLDEyICsyNTUsMTIgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmlu
Z0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmV0dXJuIHJlYWRDdXN0
b21EYXRhKCkuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOworICAgIHJldHVybiByZWFk
Q3VzdG9tRGF0YSgpLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkuZ2V0KHR5cGUpOwogfQog
CiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZE9yaWdpbigpCiB7Ci0gICAgcmV0dXJuIHJlYWRDdXN0
b21EYXRhKCkub3JpZ2luOworICAgIHJldHVybiByZWFkQ3VzdG9tRGF0YSgpLm9yaWdpbigpOwog
fQogCiBjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgUGFzdGVib2FyZDo6cmVhZEN1c3RvbURh
dGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2Fy
ZEN1c3RvbURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3Rl
Ym9hcmRDdXN0b21EYXRhQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYyMTI4NDRmMjEwNGE3NzdjZjY1
NTZkNzVhNmU1Y2FlYzk3M2RlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW0KQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGFzdGVib2FyZEN1
c3RvbURhdGEuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGNoYXIqIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKQoreworICAg
IHJldHVybiAiY29tLmFwcGxlLldlYktpdC5jdXN0b20tcGFzdGVib2FyZC1kYXRhIjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgKaW5kZXgg
ZWE1NjQ0Mjg1MTQ4MjFlZjZiOWRkYjQ0ZDM0ZmFhOTcwZmEwNzVkMy4uOTY4ZDE3YzRhYjU4OTM3
NjlmYzc2Yjc5OTZmNjdiMzkxMmIxMDI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9BYnN0cmFjdFBhc3RlYm9hcmQuaApAQCAtNTAsOCArNTAsOSBAQCBOU19BU1NVTUVf
Tk9OTlVMTF9CRUdJTgogCiBAb3B0aW9uYWwKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMTAwMDAKLS0gKHZvaWQpc3RhZ2VSZWdpc3RyYXRpb25MaXN0OihudWxsYWJs
ZSBXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKWluZm87Ci0tIChudWxsYWJs
ZSBXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKXRha2VSZWdpc3RyYXRpb25M
aXN0OworLSAodm9pZClzdGFnZVJlZ2lzdHJhdGlvbkxpc3RzOihOU0FycmF5PFdlYkl0ZW1Qcm92
aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopaW5mb0xpc3RzOworLSAodm9pZCljbGVhclJl
Z2lzdHJhdGlvbkxpc3RzOworLSAoTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25J
bmZvTGlzdCAqPiAqKXRha2VSZWdpc3RyYXRpb25MaXN0czsKICNlbmRpZgogLSAodm9pZClzZXRJ
dGVtczooTlNBcnJheTxOU0RpY3Rpb25hcnkgKj4gKilpdGVtczsKIEBwcm9wZXJ0eSAocmVhZG9u
bHksIG5vbmF0b21pYykgTlNJbnRlZ2VyIG51bWJlck9mRmlsZXM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCA5MTZk
YWViZDBhMjc4MGM5MzYzZDM1NTk4NWE5YjYxMmVmNDFkMTA3Li5jN2Y2ZjgwNTFmZDUxNzJiYzRj
ZjI3MzBjOTk2ZDY5MzYxMTdkM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTI5MiwyOSArMjkyLDQxIEBAIFN0
cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlw
ZUZvckRPTVRvUmVhZEFuZFdyaXRlCiAKIHN0YXRpYyBOU1N0cmluZyAqd2ViSU9TUGFzdGVQYm9h
cmRUeXBlID0gQCJpT1MgcmljaCBjb250ZW50IHBhc3RlIHBhc3RlYm9hcmQgdHlwZSI7CiAKLXN0
YXRpYyB2b2lkIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChXZWJJdGVtUHJvdmlkZXJSZWdpc3Ry
YXRpb25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciwgaWQgPEFic3RyYWN0UGFz
dGVib2FyZD4gcGFzdGVib2FyZCkKK3N0YXRpYyB2b2lkIHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9h
cmQoTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqaXRlbUxp
c3RzLCBpZCA8QWJzdHJhY3RQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkKQogewogI2lmIFBMQVRGT1JN
KE1BQ0NBVEFMWVNUKQogICAgIC8vIEluIG1hY0NhdGFseXN0LCAtW1VJUGFzdGVib2FyZCBzZXRJ
dGVtUHJvdmlkZXJzOl0gaXMgbm90IHlldCBzdXBwb3J0ZWQsIHNvIHdlIGZhbGwgYmFjayB0byBz
ZXR0aW5nIGFuIGl0ZW0gZGljdGlvbmFyeSB3aGVuCiAgICAgLy8gcG9wdWxhdGluZyB0aGUgcGFz
dGVib2FyZCB1cG9uIGNvcHkuCiAgICAgaWYgKFtwYXN0ZWJvYXJkIGlzS2luZE9mQ2xhc3M6UEFM
OjpnZXRVSVBhc3RlYm9hcmRDbGFzcygpXSkgewotICAgICAgICBhdXRvIGl0ZW1EaWN0aW9uYXJ5
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAg
W3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgZW51bWVyYXRlSXRlbXM6W2l0ZW1EaWN0aW9uYXJ5
XSAoaWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhcj4gaXRlbSwgTlNVSW50ZWdlcikgewotICAg
ICAgICAgICAgaWYgKFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodHlwZUlkZW50
aWZpZXJGb3JDbGllbnQpXSAmJiBbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRh
dGFGb3JDbGllbnQpXSkKLSAgICAgICAgICAgICAgICBbaXRlbURpY3Rpb25hcnkgc2V0T2JqZWN0
Oml0ZW0uZGF0YUZvckNsaWVudCBmb3JLZXk6aXRlbS50eXBlSWRlbnRpZmllckZvckNsaWVudF07
Ci0gICAgICAgIH1dOwotICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVtczpAWyBpdGVtRGljdGlv
bmFyeS5nZXQoKSBdXTsKKyAgICAgICAgYXV0byAqaXRlbURpY3Rpb25hcmllcyA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTppdGVtTGlzdHMuY291bnRdOworICAgICAgICBmb3Ig
KFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlvbnNUb1Jl
Z2lzdGVyIGluIGl0ZW1MaXN0cykgeworICAgICAgICAgICAgYXV0byBpdGVtRGljdGlvbmFyeSA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJl
cHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIubnVtYmVyT2ZJdGVtc10pOworICAgICAgICAgICAgW3Jl
cHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgZW51bWVyYXRlSXRlbXM6W2l0ZW1EaWN0aW9uYXJ5XSAo
aWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhcj4gaXRlbSwgTlNVSW50ZWdlcikgeworICAgICAg
ICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHR5cGVJZGVu
dGlmaWVyRm9yQ2xpZW50KV0gJiYgW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihk
YXRhRm9yQ2xpZW50KV0pCisgICAgICAgICAgICAgICAgICAgIFtpdGVtRGljdGlvbmFyeSBzZXRP
YmplY3Q6aXRlbS5kYXRhRm9yQ2xpZW50IGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVyRm9yQ2xp
ZW50XTsKKyAgICAgICAgICAgIH1dOworICAgICAgICAgICAgW2l0ZW1EaWN0aW9uYXJpZXMgYWRk
T2JqZWN0Oml0ZW1EaWN0aW9uYXJ5LmdldCgpXTsKKyAgICAgICAgfQorICAgICAgICBbcGFzdGVi
b2FyZCBzZXRJdGVtczppdGVtRGljdGlvbmFyaWVzXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBQTEFURk9STShNQUNDQVRBTFlTVCkKIAotICAgIGlmIChOU0l0ZW1Qcm92aWRl
ciAqaXRlbVByb3ZpZGVyID0gcmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5pdGVtUHJvdmlkZXIp
Ci0gICAgICAgIFtwYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyIF1d
OwotICAgIGVsc2UKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVyczpAWyBdXTsK
KyAgICBhdXRvICppdGVtUHJvdmlkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5Oml0ZW1MaXN0cy5jb3VudF07CisgICAgZm9yIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRp
b25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBpbiBpdGVtTGlzdHMpIHsKKyAg
ICAgICAgaWYgKGF1dG8gKml0ZW1Qcm92aWRlciA9IHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIu
aXRlbVByb3ZpZGVyKQorICAgICAgICAgICAgW2l0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0Oml0ZW1Q
cm92aWRlcl07CisgICAgfQorCisgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVyczppdGVt
UHJvdmlkZXJzXTsKIAotICAgIGlmIChbcGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHN0YWdlUmVnaXN0cmF0aW9uTGlzdDopXSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc3Rh
Z2VSZWdpc3RyYXRpb25MaXN0OnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXJdOworICAgIGlmIChb
cGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YWdlUmVnaXN0cmF0aW9u
TGlzdHM6KV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6aXRl
bUxpc3RzXTsKK30KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKFdlYkl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
LCBpZCA8QWJzdHJhY3RQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkKQoreworICAgIHJlZ2lzdGVySXRl
bXNUb1Bhc3RlYm9hcmQoQFsgcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBdLCBwYXN0ZWJvYXJk
KTsKIH0KIAogbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKQEAgLTM5Myw3ICs0MDUsNyBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUo
Y29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAgICAgIGFkZFJlcHJlc2Vu
dGF0aW9uc0ZvclBsYWluVGV4dChyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBjb250
ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCk7CiAKICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBjdXN0
b21EYXRhOwotICAgIGN1c3RvbURhdGEub3JpZ2luID0gY29udGVudC5jb250ZW50T3JpZ2luOwor
ICAgIGN1c3RvbURhdGEuc2V0T3JpZ2luKGNvbnRlbnQuY29udGVudE9yaWdpbik7CiAgICAgW3Jl
cHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpjdXN0b21EYXRhLmNyZWF0ZVNoYXJlZEJ1
ZmZlcigpLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JUeXBlOkAoUGFzdGVib2FyZEN1c3RvbURh
dGE6OmNvY29hVHlwZSgpKV07CiAKICAgICByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQocmVwcmVz
ZW50YXRpb25zVG9SZWdpc3Rlci5nZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKQEAgLTUxNiw4
ICs1MjgsOCBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZv
ckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgbwogCiAgICAgaWYgKE5TRGF0YSAqc2Vy
aWFsaXplZEN1c3RvbURhdGEgPSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQYXN0ZWJvYXJkVHlwZTpA
KFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSldKSB7CiAgICAgICAgIGF1dG8gZGF0
YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKHNlcmlhbGl6ZWRDdXN0b21EYXRhKS5nZXQoKSk7Ci0gICAgICAgIGlmIChkYXRhLm9y
aWdpbiA9PSBvcmlnaW4pIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3Jk
ZXJlZFR5cGVzKQorICAgICAgICBpZiAoZGF0YS5vcmlnaW4oKSA9PSBvcmlnaW4pIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKCkpCiAgICAgICAgICAg
ICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTU0OCwxMiArNTYwLDEyIEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVib2FyZDo6dHlw
ZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvCiAgICAgcmV0dXJuIGNv
cHlUb1ZlY3Rvcihkb21QYXN0ZWJvYXJkVHlwZXMpOwogfQogCi1sb25nIFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCitzdGF0aWMgUmV0
YWluUHRyPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0PiBjcmVhdGVJdGVtUHJv
dmlkZXJSZWdpc3RyYXRpb25MaXN0KGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQog
ewogICAgIGF1dG8gcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciA9IGFkb3B0TlMoW1tXZWJJdGVt
UHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCBhbGxvY10gaW5pdF0pOwogICAgIFtyZXByZXNl
bnRhdGlvbnNUb1JlZ2lzdGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOldlYlByZWZl
cnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKIAotICAgIGlmIChkYXRhLnNhbWVPcmlnaW5D
dXN0b21EYXRhLnNpemUoKSkgeworICAgIGlmIChkYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdE
YXRhKCkuc2l6ZSgpIHx8ICFkYXRhLm9yaWdpbigpLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAo
YXV0byBzZXJpYWxpemVkU2hhcmVkQnVmZmVyID0gZGF0YS5jcmVhdGVTaGFyZWRCdWZmZXIoKS0+
Y3JlYXRlTlNEYXRhKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHN0YXNoIHRoZSBsaXN0IG9mIHN1
cHBsaWVkIHBhc3RlYm9hcmQgdHlwZXMgaW4gdGVhbURhdGEgaGVyZSBmb3IgY29tcGF0aWJpbGl0
eSB3aXRoIGRyYWcgYW5kIGRyb3AuCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29udGVudHMg
b2YgaXRlbSBwcm92aWRlcnMgY2Fubm90IGJlIGxvYWRlZCBwcmlvciB0byBkcm9wLCBidXQgdGhl
IHBhc3RlYm9hcmQgdHlwZXMgYXJlCkBAIC01NjIsMTkgKzU3NCwxOSBAQCBsb25nIFBsYXRmb3Jt
UGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCiAgICAg
ICAgICAgICAvLyBhbGwgb2YgdGhlIGN1c3RvbSB0eXBlcy4gV2UgdXNlIHRoZSB0ZWFtRGF0YSBw
cm9wZXJ0eSwgYXZhaWxhYmxlIG9uIE5TSXRlbVByb3ZpZGVyIG9uIGlPUywgdG8gc3RvcmUKICAg
ICAgICAgICAgIC8vIHRoaXMgaW5mb3JtYXRpb24sIHNpbmNlIHRoZSBjb250ZW50cyBvZiB0ZWFt
RGF0YSBhcmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHByaW9yIHRvIHRoZSBkcm9wLgogICAgICAg
ICAgICAgTlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4gKnR5cGVzQXNOU0FycmF5ID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3Jk
ZXJlZFR5cGVzKQorICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlw
ZXMoKSkKICAgICAgICAgICAgICAgICBbdHlwZXNBc05TQXJyYXkgYWRkT2JqZWN0OnR5cGVdOwot
ICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0VGVhbURhdGE6c2VjdXJl
bHlBcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdChAeyBAKG9yaWdpbktleUZvclRlYW1EYXRhKSA6
IGRhdGEub3JpZ2luLCBAKGN1c3RvbVR5cGVzS2V5Rm9yVGVhbURhdGEpIDogdHlwZXNBc05TQXJy
YXkgfSldOworICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0VGVhbURh
dGE6c2VjdXJlbHlBcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdChAeyBAKG9yaWdpbktleUZvclRl
YW1EYXRhKSA6IGRhdGEub3JpZ2luKCksIEAoY3VzdG9tVHlwZXNLZXlGb3JUZWFtRGF0YSkgOiB0
eXBlc0FzTlNBcnJheSB9KV07CiAgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3Rl
ciBhZGREYXRhOnNlcmlhbGl6ZWRTaGFyZWRCdWZmZXIuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSldOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMpIHsKLSAgICAgICAgTlNTdHJpbmcgKnN0
cmluZ1ZhbHVlID0gZGF0YS5wbGF0Zm9ybURhdGEuZ2V0KHR5cGUpOworICAgIGZvciAoYXV0byYg
dHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKCkpIHsKKyAgICAgICAgTlNTdHJpbmcgKnN0cmluZ1Zh
bHVlID0gZGF0YS5wbGF0Zm9ybVN0cmluZ0RhdGEoKS5nZXQodHlwZSk7CiAgICAgICAgIGlmICgh
c3RyaW5nVmFsdWUubGVuZ3RoKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0
byBjb2NvYVR5cGUgPSBwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1Jl
YWRBbmRXcml0ZSh0eXBlKS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBhdXRvIGNvY29hVHlw
ZSA9IFBsYXRmb3JtUGFzdGVib2FyZDo6cGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVUeXBl
Rm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgaWYg
KFVUVHlwZUNvbmZvcm1zVG8oY29jb2FUeXBlLmdldCgpLCBrVVRUeXBlVVJMKSkKICAgICAgICAg
ICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZFJlcHJlc2VudGluZ09iamVjdDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpzdHJpbmdWYWx1ZV1dOwogICAgICAgICBlbHNlIGlmIChVVFR5cGVD
b25mb3Jtc1RvKGNvY29hVHlwZS5nZXQoKSwga1VUVHlwZVBsYWluVGV4dCkpCkBAIC01ODMsOCAr
NTk1LDE3IEBAIGxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YSYgZGF0YSkKICAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
IGFkZERhdGE6W3N0cmluZ1ZhbHVlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXSBmb3JUeXBlOihOU1N0cmluZyAqKWNvY29hVHlwZS5nZXQoKV07CiAgICAgfQogCi0gICAg
cmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCks
IG1fcGFzdGVib2FyZC5nZXQoKSk7Ci0gICAgcmV0dXJuIFsoaWQ8QWJzdHJhY3RQYXN0ZWJvYXJk
PiltX3Bhc3RlYm9hcmQuZ2V0KCkgY2hhbmdlQ291bnRdOworICAgIHJldHVybiByZXByZXNlbnRh
dGlvbnNUb1JlZ2lzdGVyOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29u
c3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEpCit7CisgICAgTlNNdXRh
YmxlQXJyYXkgKnJlZ2lzdHJhdGlvbkxpc3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5Oml0ZW1EYXRhLnNpemUoKV07CisgICAgZm9yIChhdXRvJiBkYXRhIDogaXRlbURhdGEp
IHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbUxpc3QgPSBjcmVhdGVJdGVtUHJvdmlkZXJSZWdpc3Ry
YXRpb25MaXN0KGRhdGEpKQorICAgICAgICAgICAgW3JlZ2lzdHJhdGlvbkxpc3RzIGFkZE9iamVj
dDppdGVtTGlzdC5nZXQoKV07CisgICAgfQorICAgIHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9hcmQo
cmVnaXN0cmF0aW9uTGlzdHMsIG1fcGFzdGVib2FyZC5nZXQoKSk7CiB9CiAKICNlbHNlCkBAIC02
MjAsOSArNjQxLDggQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1Nh
ZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiB7IH07CiB9
CiAKLWxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYpCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3Rl
Ym9hcmRDdXN0b21EYXRhPiYpCiB7Ci0gICAgcmV0dXJuIDA7CiB9CiAKICNlbmRpZgpAQCAtNzIx
LDYgKzc0MSwxMiBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6dXBkYXRlU3VwcG9ydGVkVHlw
ZUlkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0eQogICAgIFttX3Bhc3RlYm9hcmQg
dXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzOnR5cGVzQXJyYXldOwogfQogCitsb25nIFBs
YXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEp
Cit7CisgICAgd3JpdGUoVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiB7IGRhdGEgfSk7Cisg
ICAgcmV0dXJuIFsoaWQ8QWJzdHJhY3RQYXN0ZWJvYXJkPiltX3Bhc3RlYm9hcmQuZ2V0KCkgY2hh
bmdlQ291bnRdOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZC5tbQppbmRleCA0M2FmYmRkMGE1NDRlYzEyZDE0NDc2MTFhMWMxOGY4ZTRhNDNjZGVh
Li43OGEwZGQ3ZjQ1ZDVmYmQ4YmUzNjdmZTI0ZDkyZjkzZmJmMjA1YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2Fy
ZC5tbQpAQCAtNDYyLDcgKzQ2Miw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkIHsKICAgICAvLyBGSVhNRTogVGhlc2UgaXZhcnMgc2hvdWxkIGJlIHJlZmFjdG9y
ZWQgdG8gYmUgVmVjdG9yPFJldGFpblB0cjxUeXBlPj4gaW5zdGVhZCBvZiBnZW5lcmljIE5TQXJy
YXlzLgogICAgIFJldGFpblB0cjxOU0FycmF5PiBfaXRlbVByb3ZpZGVyczsKICAgICBSZXRhaW5Q
dHI8TlNBcnJheT4gX3N1cHBvcnRlZFR5cGVJZGVudGlmaWVyczsKLSAgICBSZXRhaW5QdHI8V2Vi
SXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q+IF9zdGFnZWRSZWdpc3RyYXRpb25JbmZv
TGlzdDsKKyAgICBSZXRhaW5QdHI8TlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25J
bmZvTGlzdCAqPj4gX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0czsKIAogICAgIFZlY3RvcjxS
ZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVyTG9hZFJlc3VsdD4+IF9sb2FkUmVzdWx0czsKIH0KQEAg
LTQ4NCw3ICs0ODQsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgICAgICBfY2hhbmdlQ291
bnQgPSAwOwogICAgICAgICBfcGVuZGluZ09wZXJhdGlvbkNvdW50ID0gMDsKICAgICAgICAgX3N1
cHBvcnRlZFR5cGVJZGVudGlmaWVycyA9IG5pbDsKLSAgICAgICAgX3N0YWdlZFJlZ2lzdHJhdGlv
bkluZm9MaXN0ID0gbmlsOworICAgICAgICBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3RzID0g
bmlsOwogICAgICAgICBfbG9hZFJlc3VsdHMgPSB7IH07CiAgICAgfQogICAgIHJldHVybiBzZWxm
OwpAQCAtODUzLDE2ICs4NTMsMjEgQEAgLSAodm9pZCllbnVtZXJhdGVJdGVtUHJvdmlkZXJzV2l0
aEJsb2NrOih2b2lkICheKShfX2tpbmRvZiBOU0l0ZW1Qcm92aWRlciAqaXRlbVAKICAgICBbX2l0
ZW1Qcm92aWRlcnMgZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6YmxvY2tdOwogfQogCi0tICh2
b2lkKXN0YWdlUmVnaXN0cmF0aW9uTGlzdDoobnVsbGFibGUgV2ViSXRlbVByb3ZpZGVyUmVnaXN0
cmF0aW9uSW5mb0xpc3QgKilpbmZvCistICh2b2lkKXN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6KE5T
QXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4gKilsaXN0cwogewot
ICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IGluZm8ubnVtYmVyT2ZJdGVtcyA/IGlu
Zm8gOiBuaWw7CisgICAgQVNTRVJUKGxpc3RzLmNvdW50KTsKKyAgICBfc3RhZ2VkUmVnaXN0cmF0
aW9uSW5mb0xpc3RzID0gbGlzdHM7CiB9CiAKLS0gKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlv
bkluZm9MaXN0ICopdGFrZVJlZ2lzdHJhdGlvbkxpc3QKKy0gKHZvaWQpY2xlYXJSZWdpc3RyYXRp
b25MaXN0cwogewotICAgIGF1dG8gc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QgPSBfc3RhZ2Vk
UmVnaXN0cmF0aW9uSW5mb0xpc3Q7Ci0gICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0g
bmlsOwotICAgIHJldHVybiBzdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdC5hdXRvcmVsZWFzZSgp
OworICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdHMgPSBuaWw7Cit9CisKKy0gKE5TQXJy
YXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4gKil0YWtlUmVnaXN0cmF0
aW9uTGlzdHMKK3sKKyAgICBhdXRvIHN0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IFdURk1v
dmUoX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyk7CisgICAgcmV0dXJuIHN0YWdlZFJlZ2lz
dHJhdGlvbkluZm9MaXN0cy5hdXRvcmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IDhlYjE1Y2Y4ODUyZDk4NTc0
NDdlMDU5YzM4YWNhZWJhMjM0MTVkMDQuLmMxZWNlZjE0Y2FjYzcxZTdjNjRmNjkwNDYxYzNiOTAx
NTE5Y2ZkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJv
YXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0
ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShj
b250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCwgbGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSwg
bV9wYXN0ZWJvYXJkTmFtZSk7CiAKICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBkYXRhOwotICAg
IGRhdGEub3JpZ2luID0gY29udGVudC5jb250ZW50T3JpZ2luOworICAgIGRhdGEuc2V0T3JpZ2lu
KGNvbnRlbnQuY29udGVudE9yaWdpbik7CiAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShkYXRhLmNy
ZWF0ZVNoYXJlZEJ1ZmZlcigpLnB0cigpLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBl
KCksIG1fcGFzdGVib2FyZE5hbWUpOwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGFzdGVib2FyZFdyaXRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QYXN0ZWJvYXJkV3JpdGVyLm1tCmluZGV4IDBmZTUwNWRlNTVjNjYxNjQ4ZjA1OWRhOWI3
ZmFlMmEwNzdmYzYyM2UuLmIxOWI1MmVjOTRmMDkzNGIzYjdhMTg0NDcyZWNiNjY2ZjMzZDNlMzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkV3JpdGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkV3JpdGVyLm1t
CkBAIC0xMTgsNyArMTE4LDcgQEAgUmV0YWluUHRyPGlkIDxOU1Bhc3RlYm9hcmRXcml0aW5nPj4g
Y3JlYXRlUGFzdGVib2FyZFdyaXRlcihjb25zdCBQYXN0ZWJvYXJkV3JpdGUKICAgICAgICAgICAg
IFtwYXN0ZWJvYXJkSXRlbSBzZXREYXRhOndlYkNvbnRlbnQtPmNsaWVudERhdGFbaV0tPmNyZWF0
ZU5TRGF0YSgpLmdldCgpIGZvclR5cGU6dG9VVElVbmxlc3NBbHJlYWR5VVRJKHdlYkNvbnRlbnQt
PmNsaWVudFR5cGVzW2ldKS5nZXQoKV07CiAKICAgICAgICAgUGFzdGVib2FyZEN1c3RvbURhdGEg
Y3VzdG9tRGF0YTsKLSAgICAgICAgY3VzdG9tRGF0YS5vcmlnaW4gPSB3ZWJDb250ZW50LT5jb250
ZW50T3JpZ2luOworICAgICAgICBjdXN0b21EYXRhLnNldE9yaWdpbih3ZWJDb250ZW50LT5jb250
ZW50T3JpZ2luKTsKICAgICAgICAgW3Bhc3RlYm9hcmRJdGVtIHNldERhdGE6Y3VzdG9tRGF0YS5j
cmVhdGVTaGFyZWRCdWZmZXIoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yVHlwZTp0b1VUSVVu
bGVzc0FscmVhZHlVVEkoU3RyaW5nKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSkp
LmdldCgpXTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IDE5NGFkZGJjZjllMTVjNGVkYjY2NTA0MTEy
MTMzYTEzMmRlZjQ5NjYuLmUzZDVkMTljOTU2Y2Y4MDRhZjkyYjU1M2JhYjZlZjgwNDcyZDUyYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9h
cmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbQpAQCAtMTk4LDggKzE5OCw4IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFz
dGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvCiAg
ICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBkb21QYXN0ZWJvYXJkVHlwZXM7CiAgICAgaWYgKE5TRGF0
YSAqc2VyaWFsaXplZEN1c3RvbURhdGEgPSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOkAoUGFz
dGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV0pIHsKICAgICAgICAgYXV0byBkYXRhID0g
UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVh
dGUoc2VyaWFsaXplZEN1c3RvbURhdGEpLmdldCgpKTsKLSAgICAgICAgaWYgKGRhdGEub3JpZ2lu
ID09IG9yaWdpbikgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVk
VHlwZXMpCisgICAgICAgIGlmIChkYXRhLm9yaWdpbigpID09IG9yaWdpbikgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMoKSkKICAgICAgICAgICAgICAg
ICBkb21QYXN0ZWJvYXJkVHlwZXMuYWRkKHR5cGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1
LDIxICsyMjUsMjEgQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1Nh
ZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIG8KIGxvbmcgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKIHsKICAgICBO
U011dGFibGVBcnJheSAqdHlwZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAo
YXV0byYgZW50cnkgOiBkYXRhLnBsYXRmb3JtRGF0YSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
ZGF0YS5wbGF0Zm9ybVN0cmluZ0RhdGEoKSkKICAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpwbGF0
Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShlbnRyeS5r
ZXkpXTsKLSAgICBpZiAoZGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5zaXplKCkpCisgICAgaWYg
KGRhdGEuc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEoKS5zaXplKCkpCiAgICAgICAgIFt0eXBl
cyBhZGRPYmplY3Q6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKIAogICAg
IFttX3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOm5pbF07CiAKLSAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogZGF0YS5wbGF0Zm9ybURhdGEpIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZGF0YS5wbGF0Zm9ybVN0cmluZ0RhdGEoKSkgewogICAgICAgICBhdXRvIHBsYXRmb3JtVHlw
ZSA9IHBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRl
KGVudHJ5LmtleSk7CiAgICAgICAgIEFTU0VSVCghcGxhdGZvcm1UeXBlLmlzRW1wdHkoKSk7CiAg
ICAgICAgIGlmICghcGxhdGZvcm1UeXBlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIFttX3Bhc3Rl
Ym9hcmQgc2V0U3RyaW5nOmVudHJ5LnZhbHVlIGZvclR5cGU6cGxhdGZvcm1UeXBlXTsKICAgICB9
CiAKLSAgICBpZiAoZGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5zaXplKCkpIHsKKyAgICBpZiAo
ZGF0YS5zYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpLnNpemUoKSkgewogICAgICAgICBpZiAo
YXV0byBzZXJpYWxpemVkQ3VzdG9tRGF0YSA9IGRhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNy
ZWF0ZU5TRGF0YSgpKQogICAgICAgICAgICAgW21fcGFzdGVib2FyZCBzZXREYXRhOnNlcmlhbGl6
ZWRDdXN0b21EYXRhLmdldCgpIGZvclR5cGU6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FU
eXBlKCkpXTsKICAgICB9CkBAIC00NjMsNiArNDYzLDQ3IEBAIGludCBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmNvdW50KCkgY29uc3QKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRl
bXNdLmNvdW50OwogfQogCitzdGF0aWMgUmV0YWluUHRyPE5TUGFzdGVib2FyZEl0ZW0+IGNyZWF0
ZVBhc3RlYm9hcmRJdGVtKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQoreworICAg
IGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU1Bhc3RlYm9hcmRJdGVtIGFsbG9jXSBpbml0XSk7CisK
KyAgICBpZiAoIWRhdGEuc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKGF1dG8gc2VyaWFsaXplZEN1c3RvbURhdGEgPSBkYXRhLmNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpLT5jcmVhdGVOU0RhdGEoKSkKKyAgICAgICAgICAgIFtpdGVtIHNldERhdGE6c2Vy
aWFsaXplZEN1c3RvbURhdGEuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpj
b2NvYVR5cGUoKSldOworICAgIH0KKworICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJl
ZFR5cGVzKCkpIHsKKyAgICAgICAgYXV0byBwbGF0Zm9ybVR5cGUgPSBtb2Rlcm5QYXN0ZWJvYXJk
VHlwZUZvcldlYlNhZmVNSU1FVHlwZSh0eXBlKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVR5cGUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIHBsYXRmb3JtU3RyaW5nSXRl
cmF0b3IgPSBkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpLmZpbmQodHlwZSk7CisgICAgICAgIGlm
IChwbGF0Zm9ybVN0cmluZ0l0ZXJhdG9yICE9IGRhdGEucGxhdGZvcm1TdHJpbmdEYXRhKCkuZW5k
KCkpIHsKKyAgICAgICAgICAgIFtpdGVtIHNldFN0cmluZzpwbGF0Zm9ybVN0cmluZ0l0ZXJhdG9y
LT52YWx1ZSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gcGxhdGZvcm1EYXRhSXRlcmF0b3IgPSBkYXRhLnBsYXRm
b3JtQmluYXJ5RGF0YSgpLmZpbmQodHlwZSk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGFJdGVy
YXRvciAhPSBkYXRhLnBsYXRmb3JtQmluYXJ5RGF0YSgpLmVuZCgpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBwbGF0Zm9ybURhdGEgPSBwbGF0Zm9ybURhdGFJdGVyYXRvci0+dmFsdWUtPmNyZWF0
ZU5TRGF0YSgpKQorICAgICAgICAgICAgICAgIFtpdGVtIHNldERhdGE6cGxhdGZvcm1EYXRhLmdl
dCgpIGZvclR5cGU6cGxhdGZvcm1UeXBlXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBpdGVtOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9y
PFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEpCit7CisgICAgYXV0byBwbGF0Zm9ybUl0
ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Oml0
ZW1EYXRhLnNpemUoKV0pOworICAgIGZvciAoYXV0byYgZGF0YSA6IGl0ZW1EYXRhKSB7CisgICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBjcmVhdGVQYXN0ZWJvYXJkSXRlbShkYXRhKSkKKyAgICAgICAg
ICAgIFtwbGF0Zm9ybUl0ZW1zIGFkZE9iamVjdDppdGVtLmdldCgpXTsKKyAgICB9CisgICAgW21f
cGFzdGVib2FyZCBjbGVhckNvbnRlbnRzXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0
czpwbGF0Zm9ybUl0ZW1zLmdldCgpXTsKK30KKwogUGFzdGVib2FyZEl0ZW1JbmZvIFBsYXRmb3Jt
UGFzdGVib2FyZDo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAg
ICAgTlNQYXN0ZWJvYXJkSXRlbSAqaXRlbSA9IGl0ZW1BdEluZGV4KGluZGV4KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDIyMmNkYWY5
MjBiMGQ1MGZjMzQ3ZDVhNTA2NmQ5YTBlZDViOGU0NDcuLjU0OWZiZTEzZmM3NjgxYWQ5OTY5OWU1
NGQ3NmY1NTk5YjdiMmJlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcApAQCAtMTYzOCwyNiArMTYzOCw1NiBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8RGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgV2ViQwogCiB2b2lkIEFyZ3VtZW50Q29kZXI8UGFzdGVib2FyZEN1c3RvbURhdGE+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCiB7
Ci0gICAgZW5jb2RlciA8PCBkYXRhLm9yaWdpbjsKLSAgICBlbmNvZGVyIDw8IGRhdGEub3JkZXJl
ZFR5cGVzOwotICAgIGVuY29kZXIgPDwgZGF0YS5wbGF0Zm9ybURhdGE7Ci0gICAgZW5jb2RlciA8
PCBkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhOworICAgIGVuY29kZXIgPDwgZGF0YS5vcmlnaW4o
KTsKKyAgICBlbmNvZGVyIDw8IGRhdGEub3JkZXJlZFR5cGVzKCk7CisgICAgZW5jb2RlciA8PCBk
YXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpOworICAgIGVuY29kZXIgPDwgZGF0YS5zYW1lT3JpZ2lu
Q3VzdG9tU3RyaW5nRGF0YSgpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGRhdGEucGxhdGZvcm1CaW5hcnlEYXRhKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZGF0YS5wbGF0Zm9ybUJpbmFyeURhdGEoKSkgeworICAgICAgICBlbmNvZGVyIDw8IGVudHJ5
LmtleTsKKyAgICAgICAgZW5jb2RlU2hhcmVkQnVmZmVyKGVuY29kZXIsIGVudHJ5LnZhbHVlLmdl
dCgpKTsKKyAgICB9CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0
YT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkK
IHsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEub3JpZ2luKSkKKyAgICBTdHJpbmcgb3Jp
Z2luOworICAgIFZlY3RvcjxTdHJpbmc+IG9yZGVyZWRUeXBlczsKKyAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBwbGF0Zm9ybVN0cmluZ0RhdGE7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGE7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxTaGFyZWRCdWZmZXI+PiBwbGF0Zm9ybUJpbmFyeURhdGE7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG9yaWdpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShkYXRhLm9yZGVyZWRUeXBlcykpCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShwbGF0Zm9ybVN0cmluZ0RhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEucGxhdGZvcm1EYXRhKSkKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhKSkK
KyAgICB1aW50NjRfdCBiaW5hcnlEYXRhRW50cnlDb3VudCA9IDA7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShiaW5hcnlEYXRhRW50cnlDb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIHBsYXRmb3JtQmluYXJ5RGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJpbmFyeURhdGFF
bnRyeUNvdW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJpbmFyeURhdGFFbnRyeUNv
dW50OyArK2kpIHsKKyAgICAgICAgU3RyaW5nIHR5cGU7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICAgICAgZGVjb2RlU2hhcmVkQnVmZmVyKGRlY29kZXIs
IGRhdGEpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgcGxhdGZvcm1CaW5hcnlEYXRhLnNldChXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGRh
dGEpKTsKKyAgICB9CisKKyAgICBkYXRhID0geyBvcmlnaW4sIFdURk1vdmUob3JkZXJlZFR5cGVz
KSwgV1RGTW92ZShwbGF0Zm9ybVN0cmluZ0RhdGEpLCBXVEZNb3ZlKHNhbWVPcmlnaW5DdXN0b21T
dHJpbmdEYXRhKSwgV1RGTW92ZShwbGF0Zm9ybUJpbmFyeURhdGEpIH07CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
aW5kZXggOWQ2Y2QzNDEyMmRjY2JmNjMwNjMwZWNjZGRhMTZmMDc4NTRjM2RlNC4uMDE1Zjg5NmYx
MmMyZTYyMzAxMjMwZTMzZGFiMDUwN2NiOGZmODQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTg5LDYgKzg5LDcgQEAgY2xhc3MgTGF5b3V0
U2l6ZTsKIGNsYXNzIExheW91dFBvaW50OwogY2xhc3MgTGluZWFyVGltaW5nRnVuY3Rpb247CiBj
bGFzcyBOb3RpZmljYXRpb247CitjbGFzcyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIGNsYXNzIFBh
dGg7CiBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBSZWdpb247CkBAIC0xMTcsNyArMTE4
LDYgQEAgc3RydWN0IExlbmd0aDsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOwogc3RydWN0IE1pbWVD
bGFzc0luZm87CiBzdHJ1Y3QgUGFzdGVib2FyZEltYWdlOwotc3RydWN0IFBhc3RlYm9hcmRDdXN0
b21EYXRhOwogc3RydWN0IFBhc3RlYm9hcmRVUkw7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKIHN0cnVj
dCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbQppbmRleCAxMjYyNzE3NTY2ODBmYzgzYjliZTUyMTg2NTJkMmZiNTVm
OWFmYmU3Li5jM2QxNDYwN2Y1MDI4NzEyNzA2YjA3NDM1Y2EyMjNkYzM3NTI0ZDc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtNDMxMiw3ICs0
MzEyLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBTdHJpbmcmIG8KIAogICAgIE5TRGF0YSAqZGF0YSA9IFtO
U1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6QChXZWJDb3JlOjpQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKICAgICBhdXRvIGJ1ZmZlciA9IFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOwotICAgIGlmIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihidWZmZXIuZ2V0KCkpLm9yaWdpbiA9PSBv
cmlnaW5JZGVudGlmaWVyKSB7CisgICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRh
Ojpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luKCkgPT0gb3JpZ2luSWRlbnRp
ZmllcikgewogICAgICAgICBjb21wbGV0aW9uKFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9u
c2U6OkdyYW50ZWRGb3JHZXN0dXJlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggYWRiYzIyNmFkYjhl
ZjUyZWEzNzE4ZWEwNjU2YTg5ZjUxMGI4YjkyMC4uYWQ0MDZmNDlkOWZiMWIzMGFlYzJiNjQzZDAw
NWVjOGMyYjQ1ZWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2Fy
ZFByb3h5LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q29sb3I7Ci1zdHJ1Y3QgUGFzdGVib2FyZEN1c3RvbURhdGE7CitjbGFzcyBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZEl0ZW1J
bmZvOwogc3RydWN0IFBhc3RlYm9hcmRVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNjkxZDAyNTM3MThj
MDJhMGRlMGE2YmU4ZTM0ZDIxMDM0ZTAwM2EyMy4uM2I2NjI1YTMzNDhhMzVkNjBjNjE4OTc3OGE5
MDBmNmFjNDZjYWVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjksNyArMjksNyBAQCBtZXNzYWdlcyAt
PiBXZWJQYXN0ZWJvYXJkUHJveHkgewogICAgIFVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVy
cyhWZWN0b3I8U3RyaW5nPiBpZGVudGlmaWVycywgU3RyaW5nIHBhc3RlYm9hcmROYW1lKQogI2Vu
ZGlmCiAKLSAgICBXcml0ZUN1c3RvbURhdGEoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0
b21EYXRhIGRhdGEsIFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNv
dW50KSBTeW5jaHJvbm91cworICAgIFdyaXRlQ3VzdG9tRGF0YShXZWJDb3JlOjpQYXN0ZWJvYXJk
Q3VzdG9tRGF0YSBkYXRhLCBTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+ICh1aW50NjRfdCBjaGFu
Z2VDb3VudCkgU3luY2hyb25vdXMKICAgICBUeXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShT
dHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBvcmlnaW4pIC0+IChWZWN0b3I8U3RyaW5nPiB0
eXBlcykgU3luY2hyb25vdXMKICAgICBBbGxQYXN0ZWJvYXJkSXRlbUluZm8oU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlBhc3RlYm9hcmRJdGVtSW5mbz4gYWxsSW5m
bykgU3luY2hyb25vdXMKICAgICBJbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KHVpbnQ2NF90IGlu
ZGV4LCBTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChzdHJ1Y3QgV2ViQ29yZTo6UGFzdGVib2Fy
ZEl0ZW1JbmZvIGluZm8pIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA1MmNkZmE1MjU3
OGQyZDM0ZjcyYzZjNjkyMDllMmY0NjIxOTlhODk5Li43YjkwZWNhOTc5OGVmNjliMjIwZmJhZWI5
YTg1ZThkMGQwMmMzNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMyMzMsNyArMzIzMyw3IEBAIC0g
KEJPT0wpY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6KFNFTClhY3Rpb24gd2l0aFNlbmRlcjoo
aWQpc2VuZGVyCiAgICAgICAgIE5TQXJyYXkgKmFsbEN1c3RvbVBhc3RlYm9hcmREYXRhID0gW3Bh
c3RlYm9hcmQgZGF0YUZvclBhc3RlYm9hcmRUeXBlOkAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3Rv
bURhdGE6OmNvY29hVHlwZSgpKSBpbkl0ZW1TZXQ6aW5kaWNlc107CiAgICAgICAgIGZvciAoTlNE
YXRhICpkYXRhIGluIGFsbEN1c3RvbVBhc3RlYm9hcmREYXRhKSB7CiAgICAgICAgICAgICBhdXRv
IGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOwotICAgICAgICAg
ICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1
ZmZlci5nZXQoKSkub3JpZ2luID09IGZvY3VzZWREb2N1bWVudE9yaWdpbikKKyAgICAgICAgICAg
IGlmIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihidWZm
ZXIuZ2V0KCkpLm9yaWdpbigpID09IGZvY3VzZWREb2N1bWVudE9yaWdpbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gWUVTOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTU3MzEs
NyArNTczMSw3IEBAIHN0YXRpYyBCT09MIGFsbFBhc3RlYm9hcmRJdGVtT3JpZ2luc01hdGNoT3Jp
Z2luKFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCwgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSk7Ci0gICAgICAgIGlmIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNo
YXJlZEJ1ZmZlcihidWZmZXIuZ2V0KCkpLm9yaWdpbiAhPSBvcmlnaW5JZGVudGlmaWVyKQorICAg
ICAgICBpZiAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIo
YnVmZmVyLmdldCgpKS5vcmlnaW4oKSAhPSBvcmlnaW5JZGVudGlmaWVyKQogICAgICAgICAgICAg
cmV0dXJuIE5POwogCiAgICAgICAgIGZvdW5kQXRMZWFzdE9uZU1hdGNoaW5nSWRlbnRpZmllciA9
IFlFUzsKQEAgLTY3MDYsMTUgKzY3MDYsMTUgQEAgLSAodm9pZClfZGlkSGFuZGxlQWRkaXRpb25h
bERyYWdJdGVtc1JlcXVlc3Q6KEJPT0wpYWRkZWQKICAgICBpZiAoIWNvbXBsZXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpy
ZWdpc3RyYXRpb25MaXN0ID0gW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3Rh
bmNlXSB0YWtlUmVnaXN0cmF0aW9uTGlzdF07Ci0gICAgaWYgKCFhZGRlZCB8fCAhcmVnaXN0cmF0
aW9uTGlzdCB8fCAhX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oYXNTdGFnZWREcmFnU291cmNl
KCkpIHsKKyAgICBhdXRvICpyZWdpc3RyYXRpb25MaXN0cyA9IFtbV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxpc3RzXTsKKyAgICBpZiAo
IWFkZGVkIHx8ICFbcmVnaXN0cmF0aW9uTGlzdHMgY291bnRdIHx8ICFfZHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLmhhc1N0YWdlZERyYWdTb3VyY2UoKSkgewogICAgICAgICBfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmNsZWFyU3RhZ2VkRHJhZ1NvdXJjZSgpOwogICAgICAgICBjb21wbGV0aW9u
KEBbIF0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBzdGFnZWREcmFnU291
cmNlID0gX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5zdGFnZWREcmFnU291cmNlKCk7Ci0gICAg
TlNBcnJheSAqZHJhZ0l0ZW1zVG9BZGQgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGlu
Z1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaXN0OnJlZ2lzdHJhdGlvbkxpc3Qgc3RhZ2VkRHJh
Z1NvdXJjZTpzdGFnZWREcmFnU291cmNlXTsKKyAgICBOU0FycmF5ICpkcmFnSXRlbXNUb0FkZCA9
IFtzZWxmIF9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlv
bkxpc3RzOnJlZ2lzdHJhdGlvbkxpc3RzIHN0YWdlZERyYWdTb3VyY2U6c3RhZ2VkRHJhZ1NvdXJj
ZV07CiAKICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbjogJXAgYWRk
aW5nICV0dSBpdGVtcyIsIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZHJhZ1Nlc3Npb24oKSwg
ZHJhZ0l0ZW1zVG9BZGQuY291bnQpOwogICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuY2xl
YXJTdGFnZWREcmFnU291cmNlKGRyYWdJdGVtc1RvQWRkLmNvdW50ID8gV2ViS2l0OjpEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGU6OkRpZEJlY29tZUFjdGl2ZTo6WWVzIDogV2ViS2l0OjpEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGU6OkRpZEJlY29tZUFjdGl2ZTo6Tm8pOwpAQCAtNjc5Myw3ICs2Nzkz
LDcgQEAgLSAodm9pZCljbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZQogICAgICAgICBbW1dl
Ykl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHNldEl0ZW1Qcm92aWRlcnM6
bmlsXTsKICAgICB9CiAKLSAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5z
dGFuY2VdIHN0YWdlUmVnaXN0cmF0aW9uTGlzdDpuaWxdOworICAgIFtbV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gY2xlYXJSZWdpc3RyYXRpb25MaXN0c107CiAgICAg
W3NlbGYgX3Jlc3RvcmVDYWxsb3V0QmFySWZOZWVkZWRdOwogCiAgICAgW3N0ZDo6ZXhjaGFuZ2Uo
X3Zpc2libGVDb250ZW50Vmlld1NuYXBzaG90LCBuaWwpIHJlbW92ZUZyb21TdXBlcnZpZXddOwpA
QCAtNjk2MCw3ICs2OTYwLDcgQEAgLSAodm9pZClfcHJlcGFyZVRvRHJhZ1Byb21pc2VkQXR0YWNo
bWVudDooY29uc3QgV2ViQ29yZTo6UHJvbWlzZWRBdHRhY2htZW50SW5mbyYKIAogICAgIFdlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbV2ViSXRlbVByb3ZpZGVyUGFzdGVi
b2FyZCBzaGFyZWRJbnN0YW5jZV07CiAgICAgcGFzdGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsg
W3JlZ2lzdHJhdGlvbkxpc3QgaXRlbVByb3ZpZGVyXSBdOwotICAgIFtwYXN0ZWJvYXJkIHN0YWdl
UmVnaXN0cmF0aW9uTGlzdDpyZWdpc3RyYXRpb25MaXN0LmdldCgpXTsKKyAgICBbcGFzdGVib2Fy
ZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3RzOkBbIHJlZ2lzdHJhdGlvbkxpc3QuZ2V0KCkgXV07CiB9
CiAKIC0gKFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKV9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JE
cm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24KQEAgLTY5OTksMjYgKzY5OTks
MzggQEAgLSAodm9pZClfcmVzdG9yZUNhbGxvdXRCYXJJZk5lZWRlZAogICAgIF9zaG91bGRSZXN0
b3JlQ2FsbG91dEJhckFmdGVyRHJvcCA9IE5POwogfQogCi0tIChOU0FycmF5PFVJRHJhZ0l0ZW0g
Kj4gKilfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25M
aXN0OihXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKXJlZ2lzdHJhdGlvbkxp
c3Qgc3RhZ2VkRHJhZ1NvdXJjZTooY29uc3QgV2ViS2l0OjpEcmFnU291cmNlU3RhdGUmKXN0YWdl
ZERyYWdTb3VyY2UKKy0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKV9pdGVtc0ZvckJlZ2lubmlu
Z09yQWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlvbkxpc3RzOihOU0FycmF5PFdlYkl0ZW1Q
cm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopcmVnaXN0cmF0aW9uTGlzdHMgc3RhZ2Vk
RHJhZ1NvdXJjZTooY29uc3QgV2ViS2l0OjpEcmFnU291cmNlU3RhdGUmKXN0YWdlZERyYWdTb3Vy
Y2UKIHsKLSAgICBOU0l0ZW1Qcm92aWRlciAqZGVmYXVsdEl0ZW1Qcm92aWRlciA9IHJlZ2lzdHJh
dGlvbkxpc3QuaXRlbVByb3ZpZGVyOwotICAgIGlmICghZGVmYXVsdEl0ZW1Qcm92aWRlcikKKyAg
ICBpZiAoIXJlZ2lzdHJhdGlvbkxpc3RzLmNvdW50KQogICAgICAgICByZXR1cm4gQFsgXTsKIAot
ICAgIE5TQXJyYXkgKmFkanVzdGVkSXRlbVByb3ZpZGVyczsKKyAgICBOU011dGFibGVBcnJheSAq
YWRqdXN0ZWRJdGVtUHJvdmlkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKICAgICBpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IHNlbGYud2ViVmlld1VJRGVsZWdhdGU7
CiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6YWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOnJl
cHJlc2VudGluZ09iamVjdHM6YWRkaXRpb25hbERhdGE6KV0pIHsKLSAgICAgICAgYXV0byByZXBy
ZXNlbnRpbmdPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIGF1dG8gYWRkaXRpb25hbERhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICBbcmVnaXN0cmF0aW9uTGlzdCBlbnVtZXJhdGVJ
dGVtczpbcmVwcmVzZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERhdGFdIChpZCA8V2ViSXRlbVBy
b3ZpZGVyUmVnaXN0cmFyPiBpdGVtLCBOU1VJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBpZiAoW2l0
ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihyZXByZXNlbnRpbmdPYmplY3RGb3JDbGll
bnQpXSkKLSAgICAgICAgICAgICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRl
bS5yZXByZXNlbnRpbmdPYmplY3RGb3JDbGllbnRdOwotICAgICAgICAgICAgaWYgKFtpdGVtIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodHlwZUlkZW50aWZpZXJGb3JDbGllbnQpXSAmJiBb
aXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRhdGFGb3JDbGllbnQpXSkKLSAgICAg
ICAgICAgICAgICBbYWRkaXRpb25hbERhdGEgc2V0T2JqZWN0Oml0ZW0uZGF0YUZvckNsaWVudCBm
b3JLZXk6aXRlbS50eXBlSWRlbnRpZmllckZvckNsaWVudF07Ci0gICAgICAgIH1dOwotICAgICAg
ICBhZGp1c3RlZEl0ZW1Qcm92aWRlcnMgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBh
ZGp1c3RlZERhdGFJbnRlcmFjdGlvbkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6ZGVmYXVs
dEl0ZW1Qcm92aWRlciByZXByZXNlbnRpbmdPYmplY3RzOnJlcHJlc2VudGluZ09iamVjdHMuZ2V0
KCkgYWRkaXRpb25hbERhdGE6YWRkaXRpb25hbERhdGEuZ2V0KCldOwotICAgIH0gZWxzZQotICAg
ICAgICBhZGp1c3RlZEl0ZW1Qcm92aWRlcnMgPSBAWyBkZWZhdWx0SXRlbVByb3ZpZGVyIF07Cisg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgYSBuZXcgVUkgZGVsZWdhdGUgaG9v
ayB0aGF0IGFjY2VwdHMgYSBsaXN0IG9mIGl0ZW0gcHJvdmlkZXJzLCBzbyB3ZSBkb24ndCBuZWVk
IHRvIGludm9rZSB0aGlzIGRlbGVnYXRlIG1ldGhvZCByZXBlYXRlZGx5IGZvciBtdWx0aXBsZSBp
dGVtcy4KKyAgICAgICAgZm9yIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAq
bGlzdCBpbiByZWdpc3RyYXRpb25MaXN0cykgeworICAgICAgICAgICAgTlNJdGVtUHJvdmlkZXIg
KmRlZmF1bHRJdGVtUHJvdmlkZXIgPSBsaXN0Lml0ZW1Qcm92aWRlcjsKKyAgICAgICAgICAgIGlm
ICghZGVmYXVsdEl0ZW1Qcm92aWRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgYXV0byByZXByZXNlbnRpbmdPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBhdXRvIGFkZGl0aW9uYWxEYXRhID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIFts
aXN0IGVudW1lcmF0ZUl0ZW1zOltyZXByZXNlbnRpbmdPYmplY3RzLCBhZGRpdGlvbmFsRGF0YV0g
KGlkIDxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXI+IGl0ZW0sIE5TVUludGVnZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihyZXByZXNl
bnRpbmdPYmplY3RGb3JDbGllbnQpXSkKKyAgICAgICAgICAgICAgICAgICAgW3JlcHJlc2VudGlu
Z09iamVjdHMgYWRkT2JqZWN0Oml0ZW0ucmVwcmVzZW50aW5nT2JqZWN0Rm9yQ2xpZW50XTsKKyAg
ICAgICAgICAgICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0eXBl
SWRlbnRpZmllckZvckNsaWVudCldICYmIFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoZGF0YUZvckNsaWVudCldKQorICAgICAgICAgICAgICAgICAgICBbYWRkaXRpb25hbERhdGEg
c2V0T2JqZWN0Oml0ZW0uZGF0YUZvckNsaWVudCBmb3JLZXk6aXRlbS50eXBlSWRlbnRpZmllckZv
ckNsaWVudF07CisgICAgICAgICAgICB9XTsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFkanVzdGVk
SXRlbXMgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBhZGp1c3RlZERhdGFJbnRlcmFj
dGlvbkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6ZGVmYXVsdEl0ZW1Qcm92aWRlciByZXBy
ZXNlbnRpbmdPYmplY3RzOnJlcHJlc2VudGluZ09iamVjdHMuZ2V0KCkgYWRkaXRpb25hbERhdGE6
YWRkaXRpb25hbERhdGEuZ2V0KCldOworICAgICAgICAgICAgaWYgKGFkanVzdGVkSXRlbXMuY291
bnQpCisgICAgICAgICAgICAgICAgW2FkanVzdGVkSXRlbVByb3ZpZGVycyBhZGRPYmplY3RzRnJv
bUFycmF5OmFkanVzdGVkSXRlbXNdOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Zm9yIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqbGlzdCBpbiByZWdpc3Ry
YXRpb25MaXN0cykgeworICAgICAgICAgICAgaWYgKGF1dG8gKmRlZmF1bHRJdGVtUHJvdmlkZXIg
PSBsaXN0Lml0ZW1Qcm92aWRlcikKKyAgICAgICAgICAgICAgICBbYWRqdXN0ZWRJdGVtUHJvdmlk
ZXJzIGFkZE9iamVjdDpkZWZhdWx0SXRlbVByb3ZpZGVyXTsKKyAgICAgICAgfQorICAgIH0KIAog
ICAgIE5TTXV0YWJsZUFycmF5ICpkcmFnSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6YWRqdXN0ZWRJdGVtUHJvdmlkZXJzLmNvdW50XTsKICAgICBmb3IgKE5TSXRlbVBy
b3ZpZGVyICppdGVtUHJvdmlkZXIgaW4gYWRqdXN0ZWRJdGVtUHJvdmlkZXJzKSB7CkBAIC03MjYx
LDggKzcyNzMsOCBAQCAtIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilkcmFnSW50ZXJhY3Rpb246
KFVJRHJhZ0ludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gaXRlbQogICAgIH0KIAogICAgIGF1dG8g
c3RhZ2VkRHJhZ1NvdXJjZSA9IF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuc3RhZ2VkRHJhZ1Nv
dXJjZSgpOwotICAgIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZWdpc3Ry
YXRpb25MaXN0ID0gW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSB0
YWtlUmVnaXN0cmF0aW9uTGlzdF07Ci0gICAgTlNBcnJheSAqZHJhZ0l0ZW1zID0gW3NlbGYgX2l0
ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGlzdDpyZWdp
c3RyYXRpb25MaXN0IHN0YWdlZERyYWdTb3VyY2U6c3RhZ2VkRHJhZ1NvdXJjZV07CisgICAgYXV0
byAqcmVnaXN0cmF0aW9uTGlzdHMgPSBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVk
SW5zdGFuY2VdIHRha2VSZWdpc3RyYXRpb25MaXN0c107CisgICAgTlNBcnJheSAqZHJhZ0l0ZW1z
ID0gW3NlbGYgX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0
aW9uTGlzdHM6cmVnaXN0cmF0aW9uTGlzdHMgc3RhZ2VkRHJhZ1NvdXJjZTpzdGFnZWREcmFnU291
cmNlXTsKICAgICBpZiAoIVtkcmFnSXRlbXMgY291bnRdKQogICAgICAgICBfcGFnZS0+ZHJhZ0Nh
bmNlbGxlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCmluZGV4IDlmMDAzOTkwMDU5
YWY0NDIwYzA1YmI3YTNjM2I5OTlmYjhjMDA2ZTQuLjNlODgwYWI1ZjY3ZjY1YTQ0ZDBhNGQ1NTU3
N2NjOGIzZGQ1NTdkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCkBAIC0yOSw5ICsy
OSw5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRlZ2llcy5oPgogCitjbGFzcyBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRl
bnQ7Ci1zdHJ1Y3QgUGFzdGVib2FyZEN1c3RvbURhdGE7CiAKIGNsYXNzIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2Vi
Q29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5IHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380770</attachid>
            <date>2019-10-11 11:18:48 -0700</date>
            <delta_ts>2019-10-11 16:04:09 -0700</delta_ts>
            <desc>Try to fix GTK/WPE builds</desc>
            <filename>bug-202851-20191011111847.patch</filename>
            <type>text/plain</type>
            <size>73868</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI3ZGI1YmUyMTRhNWE2
YmExMGE2YTZiYWYzZDE3NTVmOGY3MWM1Yi4uNjE5MTk4ZDkyNTVhMmU1NjIwZDRhMWE5ZjQzZTNh
NzhiMmIxYzU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAxOS0xMC0xMSAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJk
IEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGgg
U2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgc29tZSBsb2dpYyBh
cm91bmQgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEsIGluIHByZXBhcmF0aW9uIGZvciBp
bXBsZW1lbnRpbmcgdGhlIGFzeW5jCisgICAgICAgIGNsaXBib2FyZCBBUEkuIFRoZXJlIGFyZSB0
d28gbWFpbiBnb2FscyBvZiB0aGlzIHJlZmFjdG9yaW5nOgorCisgICAgICAgIDEuIEVuYWJsZSB3
cml0aW5nIG11bHRpcGxlIGl0ZW1zIChlYWNoIGJhY2tlZCBieSBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSkgdG8gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQuCisgICAgICAgIDIuIEVuYWJsZSB3cml0aW5n
IHBsYXRmb3JtIGRhdGEgaW4gdGhlIGZvcm0gb2YgU2hhcmVkQnVmZmVycyB0byB0aGUgcGxhdGZv
cm0gcGFzdGVib2FyZC4KKworICAgICAgICBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlsczsgbm8g
dGVzdHMsIGFzIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQuCisKKyAgICAgICAg
KiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCisgICAgICAgIE1vdmUgUGFzdGVib2FyZEN1c3RvbURhdGEgb3V0IG9mIFBhc3RlYm9hcmQu
aCBhbmQgaW50byBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6Y29tbWl0VG9QYXN0ZWJvYXJkKToK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudCk6CisgICAg
ICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKTogRGVs
ZXRlZC4KKworICAgICAgICBNb3ZlZCB0aGVzZSBtZXRob2QgaW1wbGVtZW50YXRpb25zIHRvIFBh
c3RlYm9hcmRDdXN0b21EYXRhLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQu
aDoKKworICAgICAgICBSZWZhY3RvciBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBzbyB0aGF0IGl0cyBt
ZW1iZXIgdmFyaWFibGVzIGFyZSBub3cgcHJpdmF0ZSwgYW5kIGVuY2Fwc3VsYXRlZCBiZWhpbmQg
Y29uc3QKKyAgICAgICAgZ2V0dGVycy4gQWRkaXRpb25hbGx5LCBtYWtlIGl0IHNvIHRoYXQgdGhl
IG9ubHkgd2F5IHRvIHNldCBkYXRhIG9uIFBhc3RlYm9hcmRDdXN0b21EYXRhIGlzIHRvIHVzZSB0
aGUKKyAgICAgICAgd3JpdGVTdHJpbmcsIHdyaXRlRGF0YSwgYW5kIHdyaXRlU3RyaW5nSW5DdXN0
b21EYXRhIG1ldGhvZHMsIHdoaWNoIGVuc3VyZSB0aGF0IHRoZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSBpcworICAgICAgICBhbHdheXMgaW4gYSBjb25zaXN0ZW50IHN0YXRlLgorCisgICAgICAgICog
cGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZ0luQ3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Bh
c3RlYm9hcmRDdXN0b21EYXRhLmg6IEFkZGVkLgorCisgICAgICAgIEFkZGl0aW9uYWxseSByZW5h
bWUgc2V2ZXJhbCBtZW1iZXIgdmFyaWFibGVzIGluIFBhc3RlYm9hcmRDdXN0b21EYXRhOgorICAg
ICAgICAtIGB0eXBlc2AgaXMgbm93IGBtX29yZGVyZWRUeXBlc2AuCisgICAgICAgIC0gYHBsYXRm
b3JtRGF0YWAgaXMgbm93IGBtX3BsYXRmb3JtU3RyaW5nRGF0YWAsIHRvIGRpc3Rpbmd1aXNoIGl0
IGZyb20gYG1fcGxhdGZvcm1CaW5hcnlEYXRhYC4KKyAgICAgICAgLSBgc2FtZU9yaWdpbkN1c3Rv
bURhdGFgIGlzIG5vdyBgbV9zYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YWAsIHRvIG1hdGNoIHRo
ZSBzdWZmaXggb2YgYG1fcGxhdGZvcm1TdHJpbmdEYXRhYC4KKworICAgICAgICBUaGlzIGFsc28g
YWRkcyBgbV9wbGF0Zm9ybUJpbmFyeURhdGFgLCBhIG1hcCBvZiBTdHJpbmcgdG8gU2hhcmVkQnVm
ZmVycyB0byB3cml0ZSB0byB0aGUgcGxhdGZvcm0gcGFzdGVib2FyZC4KKworICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6c2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpvcmRlcmVkVHlwZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OnBsYXRmb3JtU3RyaW5nRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6c2FtZU9yaWdpbkN1c3RvbVN0
cmluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6
OnBsYXRmb3JtQmluYXJ5RGF0YSBjb25zdCk6CisKKyAgICAgICAgTW92ZWQgdGhlc2UgbWV0aG9k
IGltcGxlbWVudGF0aW9ucyBmcm9tIFN0YXRpY1Bhc3RlYm9hcmQgdG8gUGFzdGVib2FyZEN1c3Rv
bURhdGEuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNDdXN0
b21EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpo
YXNQbGF0Zm9ybURhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJh
dGVneS5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljUGFzdGVib2FyZDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0
ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGlj
UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
dGF0aWNQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQ
YXN0ZWJvYXJkOjp3cml0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2Fy
ZDo6d3JpdGVTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFz
dGVib2FyZDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6dGFr
ZUN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6U3RhdGlj
UGFzdGVib2FyZCk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVmYWN0b3IgU3RhdGljUGFzdGVib2Fy
ZCB0byBub3cgY29udGFpbiBhIFBhc3RlYm9hcmRDdXN0b21EYXRhOyBhZGRpdGlvbmFsbHksIGFk
anVzdCBzZXZlcmFsIG1ldGhvZHMgaW4KKyAgICAgICAgU3RhdGljUGFzdGVib2FyZCB0byBzaW1w
bHkgY2FsbCBpbnRvIFBhc3RlYm9hcmRDdXN0b21EYXRhIHRvIHdyaXRlLCByZWFkLCBvciBjbGVh
ciBkYXRhLgorCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVUeXBlcyk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVh
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FU
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ3VzdG9t
RGF0YUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUpOgorCisgICAgICAgIE1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlIGZyb20gUGFzdGVib2FyZENvY29hLm1tIHRv
CisgICAgICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW0uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bs
YXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVySXRlbXNU
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUpOgorCisgICAg
ICAgIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBvYmplY3Rz
IHRvIHRoZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkIG9uIGlPUywgYnkgZ2VuZXJhdGluZworICAgICAg
ICBOU0l0ZW1Qcm92aWRlcnMgZm9yIGVhY2ggb25lLiBUaGlzIHJlZmFjdG9ycyB0aGUgZXhpc3Rp
bmcgYHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZGAgaGVscGVyIHRvIGhhbmRsZSBtdWx0aXBsZQor
ICAgICAgICByZWdpc3RyYXRpb24gbGlzdHMsIHJlbmFtZXMgaXQgdG8gYHJlZ2lzdGVySXRlbXNU
b1Bhc3RlYm9hcmRgIChwbHVyYWwpLCBhbmQgdGhlbiByZWltcGxlbWVudHMKKyAgICAgICAgYHJl
Z2lzdGVySXRlbVRvUGFzdGVib2FyZGAgaW4gdGVybXMgb2YgYHJlZ2lzdGVySXRlbXNUb1Bhc3Rl
Ym9hcmRgLgorCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2Fm
ZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QpOgorCisgICAgICAgIEFkanVzdCB0aGVzZSB0byB1
c2UgZ2V0dGVycyBvbiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0
aGUgbWVtYmVyIHZhcmlhYmxlcyBkaXJlY3RseS4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9X
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkIGluaXRdKToKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBz
dGFnZVJlZ2lzdHJhdGlvbkxpc3RzOl0pOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkIGNsZWFyUmVnaXN0cmF0aW9uTGlzdHNdKToKKyAgICAgICAgKC1bV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZCB0YWtlUmVnaXN0cmF0aW9uTGlzdHNdKToKKyAgICAgICAgKC1bV2ViSXRl
bVByb3ZpZGVyUGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgdGFrZVJlZ2lzdHJhdGlvbkxpc3Rd
KTogRGVsZXRlZC4KKworICAgICAgICBSZWZhY3RvciByZWdpc3RyYXRpb24gbGlzdCBzdGFnaW5n
IG9uIFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgdG8gc3VwcG9ydCBtdWx0aXBsZSByZWdpc3Ry
YXRpb24gbGlzdHMsIGVhY2gKKyAgICAgICAgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGl0ZW0gcHJv
dmlkZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZFdyaXRlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBhc3RlYm9hcmRX
cml0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRv
UmVhZEFuZFdyaXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2Fy
ZDo6d3JpdGUpOgorCisgICAgICAgIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YSBvYmplY3RzIHRvIHRoZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkIG9uIG1hY09TLCBi
eSBjcmVhdGluZyBhbmQKKyAgICAgICAgc2V0dGluZyBOU1Bhc3RlYm9hcmRJdGVtcyBmb3IgZWFj
aCBjdXN0b20gZGF0YS4gVGhpcyBtZWFucyB0aGF0IGluc3RlYWQgb2YgdXNpbmcgbGVnYWN5IG1h
Y09TIHBhc3RlYm9hcmQgdHlwZXMsCisgICAgICAgIHdlIG5lZWQgdG8gdXNlIHRoZSAibW9kZXJu
IiBOU1Bhc3RlYm9hcmRUeXBlcyB3aGVuIHdyaXRpbmcgZWFjaCBpdGVtLiBUaGlzIGlzIGJlY2F1
c2UgTlNQYXN0ZWJvYXJkSXRlbSBxdWlldGx5CisgICAgICAgIGZhaWxzIHdoZW4gYXR0ZW1wdGlu
ZyB0byBzZXQgZGF0YSBmb3IgYSBsZWdhY3kgcGFzdGVib2FyZCB0eXBlLgorCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVQYXN0ZWJvYXJkSXRlbSk6CisKIDIwMTktMTAtMTAgIHlvdWVubiBmYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
OjpzZXRGcmFtZVJhdGVXaXRoUHJlc2V0IHNob3VsZCBub3QgdXNlIHByZXNldCBhZnRlciBtb3Zp
bmcgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggNWUxYTExYjY3MTBkNmVhNGEzMThhZjJkMjdjOTk5ZjU3YzgzNTM5
OC4uMzQ4NGU0MWFiYWNjZjhmMjQwMWUxZjhlMWI1YzllN2I2NzFmNWM0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0MCBAQAorMjAxOS0xMC0xMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJkIEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRp
cGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGggU2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVi
b2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAy
ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Vl
IFdlYkNvcmUgQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8UGFzdGVib2FyZEN1c3RvbURhdGE+OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaDoKKworICAgICAgICBFbmNvZGUgYW5kIGRlY29kZSBtX3BsYXRm
b3JtQmluYXJ5RGF0YSB3aGVuIHNlbmRpbmcgUGFzdGVib2FyZEN1c3RvbURhdGEgb3ZlciBJUEMu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNhblBlcmZv
cm1BY3Rpb25Gb3JXZWJWaWV3OndpdGhTZW5kZXI6XSk6CisgICAgICAgIChhbGxQYXN0ZWJvYXJk
SXRlbU9yaWdpbnNNYXRjaE9yaWdpbik6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZEhh
bmRsZUFkZGl0aW9uYWxEcmFnSXRlbXNSZXF1ZXN0Ol0pOgorCisgICAgICAgIFR3ZWFrIHNldmVy
YWwgbWV0aG9kcyB0byB1c2UgdGhlIG5ldyBnZXR0ZXJzIG9uIFBhc3RlYm9hcmRDdXN0b21EYXRh
IGluc3RlYWQgb2YgYWNjZXNzaW5nIHRoZSBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgIGRpcmVj
dGx5LgorCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYW5VcERyYWdTb3VyY2VTZXNzaW9u
U3RhdGVdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlcGFyZVRvRHJhZ1Byb21pc2Vk
QXR0YWNobWVudDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfaXRlbXNGb3JCZWdpbm5p
bmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaXN0czpzdGFnZWREcmFnU291cmNl
Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlvbjppdGVtc0ZvckJl
Z2lubmluZ1Nlc3Npb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2l0ZW1zRm9yQmVn
aW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGlzdDpzdGFnZWREcmFnU291
cmNlOl0pOiBEZWxldGVkLgorCisgICAgICAgIEFkanVzdCB0aGVzZSBtZXRob2RzIHRvIGhhbmRs
ZSBtdWx0aXBsZSBzdGFnZWQgaXRlbSBwcm92aWRlcnMgKGZvciBub3csIGl0IHJlbWFpbnMgdGhh
dCBpT1MgZHJhZyBhbmQgZHJvcAorICAgICAgICBjb2RlcGF0aHMgd2lsbCBzdGlsbCBvbmx5IHdy
aXRlIGEgc2luZ2xlIGl0ZW0gdG8gdGhlIHBhc3RlYm9hcmQpLgorCiAyMDE5LTEwLTEwICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmVMb2FkIHNob3Vs
ZCB1c2UgQ29tcGxldGlvbkhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA0
YmE3MWZiODAxNzY5MTQ4ZTg3MzRiOWZhMDQ0NTRjZjZiODE3NjQ1Li4xYzA0MTY4NjNmZTMzYjU0
Nzc4MzFkZGMzZDEzN2JlN2YyYzFlNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMTAtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBh
cHBsZS5jb20+CisKKyAgICAgICAgW0NsaXBib2FyZCBBUEldIFN1cHBvcnQgd3JpdGluZyBtdWx0
aXBsZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB3aXRoIFNoYXJlZEJ1ZmZlcnMgdG8gdGhlIHBhc3Rl
Ym9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
Mjg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNl
ZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMTktMTAtMDkgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NsaXBib2FyZCBBUEld
IFJlZmFjdG9yIFBhc3RlYm9hcmQgaXRlbSByZWFkaW5nIGZ1bmN0aW9ucyB0byB3b3JrIG9uIGJv
dGggaU9TIGFuZCBtYWNPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDc4YTU2NmYzYWYxNGY2NmI1
MDJkNWI2MmZhZThiNmUzY2M2NTNlMC4uZjI4ZWJkZjg4ZTNkMGY0MDMzN2JmNTVkZWFmNmMxYWIx
ZDc3YTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC05MzAsNiArOTMwLDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL1BPREludGVydmFsVHJl
ZS5oCiAgICAgcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKICAgICBwbGF0Zm9ybS9QYXN0ZWJv
YXJkLmgKKyAgICBwbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCiAgICAgcGxhdGZvcm0v
UGFzdGVib2FyZEl0ZW1JbmZvLmgKICAgICBwbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAog
ICAgIHBsYXRmb3JtL1Bhc3RlYm9hcmRXcml0ZXJEYXRhLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYWUy
NTc2NTQzNTlhZmE5YmM0MzY0Y2RjYTc0YmYyMmEzMzAyZDNlYS4uNWY4MThhNWZhOGM1ZjgyMTc5
YTE4OTJlMDFkOWRhODNmZGFkY2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE3MjQsNiArMTcyNCw3
IEBAIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hh
cmVkVGltZXIuY3BwCiBwbGF0Zm9ybS9Ob3RJbXBsZW1lbnRlZC5jcHAKIHBsYXRmb3JtL1Bhc3Rl
Ym9hcmQuY3BwCitwbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKIHBsYXRmb3JtL1Bh
c3RlYm9hcmRXcml0ZXJEYXRhLmNwcAogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmNw
cAogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAppbmRleCAwOTU3OTQzY2M0ZmViZTM5ZGQ3MGExMjhlZTZjNGY3MTgxYTYw
MjFkLi45N2RiMTVlMzY2ZjJhOWEwNmQzOTY3Y2Q2YWNlMzRkZjk1OTdiNjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKQEAgLTE5OCw2ICsxOTgsNyBAQCBwbGF0Zm9ybS9jb2NvYS9NSU1FVHlw
ZVJlZ2lzdHJ5Q29jb2EubW0KIHBsYXRmb3JtL2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50
RmlsdGVyLm1tCiBwbGF0Zm9ybS9jb2NvYS9QYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5t
bQogcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCitwbGF0Zm9ybS9jb2NvYS9QYXN0
ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9QbGF0Zm9ybVBhc3RlYm9h
cmRDb2NvYS5tbQogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQubW0KIHBsYXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0NvY29hLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNDk1NTQwNGM4ODlhZGNiNDg3OGE2OGRlNmFlZGZhYzk5ZDhjNmFlYy4uMGQzYTBmYTdjYThj
MmI1MzhlYmI4NDExYmUzOWE4OWJlYzAyODVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDkwNSw2ICs0OTA1LDcgQEAKIAkJ
RjRENDNENjYyMTg4MDM4QjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENDNENjQyMTg4
MDJFNjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0RTU3RURDMjEzRjNGNUYwMDRF
QTk4RSAvKiBGb250QXR0cmlidXRlQ2hhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRFNTdFREEyMTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRy
aWJ1dGVDaGFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRjRFNTdFRTEyMTNGNDM0QTAwNEVBOThFIC8qIFdlYkNvcmVOU0ZvbnRNYW5hZ2Vy
RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEU1N0VERjIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNEZCMzRG
QzIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2FyZEN1c3RvbURhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RkIzNEZBMjM1MEM4NUQwMEYwMDk0
QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjUwNjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggKi87IH07CiAJCUY1
MTNBM0VBMTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUxM0EzRTkxNUZGNDg0
MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4
IC8qIFBsYXRmb3JtTG9jYWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTQ0Rjc4NzE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCAq
LzsgfTsKQEAgLTE1MjQwLDYgKzE1MjQxLDkgQEAKIAkJRjRFNTdFREEyMTNGM0Y1RjAwNEVBOThF
IC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RTU3RURGMjEzRjQzNEEw
MDRFQTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNEU1N0VFMDIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRGQjM0RkEyMzUwQzg1RDAwRjAwOTRBIC8q
IFBhc3RlYm9hcmRDdXN0b21EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRDdXN0b21E
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RkIzNEZCMjM1MEM4NUQwMEYw
MDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RkIz
NTAwMjM1MEM5NjIwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Db250
cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjYxNTdGNTJE
QzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvcm1Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1
MTNBM0U5MTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3MjgsNiArMjI3MzIsNyBAQAogCQkJCUEx
ODg5MEFEMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5o
ICovLAogCQkJCUExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29u
dGVudEZpbHRlci5tbSAqLywKIAkJCQk5QkVEMkNBRjFGN0NDMDYyMDA2NjYwMTggLyogUGFzdGVi
b2FyZENvY29hLm1tICovLAorCQkJCUY0RkIzNTAwMjM1MEM5NjIwMEYwMDk0QSAvKiBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YUNvY29hLm1tICovLAogCQkJCUY0NjI4QTlFMjM0RDNCQkYwMEJDODg0QyAv
KiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLywKIAkJCQk1MkIwRDRCRDFDNTdGRDFFMDA3
N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8sCiAJCQkJQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5oICovLApAQCAtMjU1OTQsNiArMjU1OTksOCBA
QAogCQkJCTQxODRGNTE1MUVBRjA1OTgwMEYxOEJGMCAvKiBPcmllbnRhdGlvbk5vdGlmaWVyLmgg
Ki8sCiAJCQkJMkVFMDJBMUUxRjczMjQyODAwMDZBRjcyIC8qIFBhc3RlYm9hcmQuY3BwICovLAog
CQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8sCisJCQkJRjRG
QjM0RkIyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmNwcCAqLywKKwkJ
CQlGNEZCMzRGQTIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2FyZEN1c3RvbURhdGEuaCAqLywK
IAkJCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi8s
CiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICov
LAogCQkJCTFBRjVFNEQyMUU1NjczNUEwMDRBMUYwMSAvKiBQYXN0ZWJvYXJkV3JpdGVyRGF0YS5j
cHAgKi8sCkBAIC0zMTE5MCw2ICszMTE5Nyw3IEBACiAJCQkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0
Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENBMTI1
MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUY0RkIzNEZDMjM1MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjQ5Nzg2ODgxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJ
dGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkwNTcxNEU5QzI4MDAwRThEMThCIC8q
IFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNUU0RTMxRTU3NzlC
MTAwNEExRjAxIC8qIFBhc3RlYm9hcmRXcml0ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YVRyYW5zZmVyLmNwcAppbmRleCA1YzcxYjM2OGU2MDI4YjAxNzRmM2E3ZmRmNDM4ODY0
ZDg4OGY4OGRjLi5lNmJhODVkNDdiOTM2NjQ2YWNiYjk2YjA0M2IyNWI4ODVmMzEyOTZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApAQCAtNDI2LDE0ICs0MjYsMTQgQEAgdm9pZCBE
YXRhVHJhbnNmZXI6OmNvbW1pdFRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBuYXRpdmVQYXN0ZWJv
YXJkKQogICAgIEFTU0VSVChpczxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0ZWJvYXJkKSAmJiAh
aXM8U3RhdGljUGFzdGVib2FyZD4obmF0aXZlUGFzdGVib2FyZCkpOwogICAgIFBhc3RlYm9hcmRD
dXN0b21EYXRhIGN1c3RvbURhdGEgPSBkb3duY2FzdDxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0
ZWJvYXJkKS50YWtlQ3VzdG9tRGF0YSgpOwogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGN1c3RvbURhdGEub3JpZ2luID0gbV9vcmlnaW5JZGVudGlmaWVyOworICAgICAgICBjdXN0
b21EYXRhLnNldE9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOwogICAgICAgICBuYXRpdmVQYXN0
ZWJvYXJkLndyaXRlQ3VzdG9tRGF0YShjdXN0b21EYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGZvciAoYXV0byYgZW50cnkgOiBjdXN0b21EYXRhLnBsYXRmb3JtRGF0YSkKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5wbGF0Zm9ybVN0cmluZ0RhdGEoKSkKICAg
ICAgICAgbmF0aXZlUGFzdGVib2FyZC53cml0ZVN0cmluZyhlbnRyeS5rZXksIGVudHJ5LnZhbHVl
KTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0
YSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3VzdG9tRGF0YS5zYW1lT3JpZ2luQ3VzdG9tU3Ry
aW5nRGF0YSgpKQogICAgICAgICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlU3RyaW5nKGVudHJ5Lmtl
eSwgZW50cnkudmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0
b3JDb2NvYS5tbQppbmRleCBmMjVmMjhjZjFjN2VhNzBiNDFjYWNmM2VlNTUxY2ExNjg5NGQ3ZTUz
Li4zYWI5ZDU4MjAzNWUxMDA3ZmMyNTQ0NWYxMzJkYzkyZTVlZGRiMzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTk0LDcgKzk0LDcgQEAgdm9p
ZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQm
IGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCksIG91dFR5cGVzLCBvdXREYXRhKTsKIAogICAg
IG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpOwotICAg
IG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRl
bnRpZmllckZvclBhc3RlYm9hcmQoKSwgeyB9LCB7IH0sIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZl
cigpKTsKKyAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50
Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSwgeyB9LCB7IH0sIHsgfSB9LmNy
ZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAogICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJB
cmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigpKSkgewogICAgICAgICBpZiAoYXV0byB3
ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDhmOWJhYjg0NTYxMGQwZjkxMDdk
ODIzMGRmMjNlZWYxZmIwMWMxNGMuLmU3MzRiMzhhZThkYjQ4MTlhMTVjMmVmOTgyMTRmMmQ4ZWYz
YmE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCkBAIC0zMCw4ICsz
MCw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvVVJMUGFyc2Vy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUx
LDQwICs0OSw2IEBAIGJvb2wgUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9ET01XaGVuUGFzdGVi
b2FyZENvbnRhaW5zRmlsZXMoY29uc3QgU3RyaW5nJiB1cmxTCiAgICAgcmV0dXJuIHVybC5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgdXJsLnByb3RvY29sSXNCbG9iKCkgfHwgdXJsLnByb3Rv
Y29sSXNEYXRhKCk7CiB9CiAKLVJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmRDdXN0b21EYXRh
OjpjcmVhdGVTaGFyZWRCdWZmZXIoKSBjb25zdAotewotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25l
ZCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uID0gMTsKLQotICAgIFdURjo6
UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKLSAgICBlbmNvZGVyIDw8IGN1cnJlbnRDdXN0
b21EYXRhU2VyaWFsaXphdGlvblZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBvcmlnaW47Ci0gICAg
ZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tRGF0YTsKLSAgICBlbmNvZGVyIDw8IG9yZGVyZWRU
eXBlczsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSwg
ZW5jb2Rlci5idWZmZXJTaXplKCkpOwotfQotCi1QYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKLXsKLSAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6
YXRpb25WZXJzaW9uTnVtYmVyID0gMTsKLQotICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhIHJlc3Vs
dDsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNpemUoKSB9OwotICAg
IHVuc2lnbmVkIHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2ZXJzaW9uKSB8fCB2
ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVtYmVyKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQub3JpZ2lu
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnNhbWVPcmlnaW5DdXN0b21EYXRhKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9yZGVyZWRUeXBlcykpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogCiBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggNjk4N2VkMjU2NTNmYjZjOWM2
OGIzYTM3YWY3NzYwNGMwOGI2Njk1MC4uY2JmZmNhMjc1YjBiZDFhMzQxNzg1NjVmYWNkMGQ5ZjZh
NjVlNmFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMjYsNiArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKKyNpbmNsdWRlICJQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRJdGVtSW5mby5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBA
IC0xNjEsMjEgKzE2Miw2IEBAIHN0cnVjdCBQYXN0ZWJvYXJkRmlsZVJlYWRlciB7CiAgICAgdmly
dHVhbCB2b2lkIHJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5n
JiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7CiB9OwogCi0vLyBGSVhNRTogV2UgbmVl
ZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGVudHMgb2Ygc2FtZU9yaWdpbkN1c3RvbURhdGEgYXJl
IG5vdCBhY2Nlc3NpYmxlIGFjcm9zcyBkaWZmZXJlbnQgb3JpZ2lucy4KLXN0cnVjdCBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSB7Ci0gICAgU3RyaW5nIG9yaWdpbjsKLSAgICBWZWN0b3I8U3RyaW5nPiBv
cmRlcmVkVHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGxhdGZvcm1EYXRhOwot
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21EYXRhOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlU2hhcmVkQnVmZmVyKCkgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3RlYm9hcmRDdXN0b21EYXRhIGZyb21T
aGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJik7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FUeXBlKCk7Ci0jZW5k
aWYKLX07Ci0KIGNsYXNzIFBhc3RlYm9hcmQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBh
c3RlYm9hcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MjY5NWVjNjNlNzU1M2RjZDIxN2JjZTgzYWM2NzFlOGUyM2NlN2Q2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwCkBAIC0w
LDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhc3RlYm9hcmRDdXN0b21EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0b21E
YXRhKCkgPSBkZWZhdWx0OworUGFzdGVib2FyZEN1c3RvbURhdGE6On5QYXN0ZWJvYXJkQ3VzdG9t
RGF0YSgpID0gZGVmYXVsdDsKKworUGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0
b21EYXRhKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYmIG9yZGVyZWRUeXBl
cywgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBwbGF0Zm9ybVN0cmluZ0RhdGEsIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiYgY3VzdG9tRGF0YSwgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+PiYmIHBsYXRmb3JtQmluYXJ5RGF0YSkKKyAgICA6IG1fb3JpZ2luKG9yaWdpbikK
KyAgICAsIG1fb3JkZXJlZFR5cGVzKFdURk1vdmUob3JkZXJlZFR5cGVzKSkKKyAgICAsIG1fcGxh
dGZvcm1TdHJpbmdEYXRhKFdURk1vdmUocGxhdGZvcm1TdHJpbmdEYXRhKSkKKyAgICAsIG1fc2Ft
ZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEoV1RGTW92ZShjdXN0b21EYXRhKSkKKyAgICAsIG1fcGxh
dGZvcm1CaW5hcnlEYXRhKFdURk1vdmUocGxhdGZvcm1CaW5hcnlEYXRhKSkKK3sKK30KKworUGFz
dGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRD
dXN0b21EYXRhJiBkYXRhKQorICAgIDogbV9vcmlnaW4oZGF0YS5vcmlnaW4oKSkKKyAgICAsIG1f
b3JkZXJlZFR5cGVzKGRhdGEub3JkZXJlZFR5cGVzKCkpCisgICAgLCBtX3BsYXRmb3JtU3RyaW5n
RGF0YShkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpKQorICAgICwgbV9zYW1lT3JpZ2luQ3VzdG9t
U3RyaW5nRGF0YShkYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkpCisgICAgLCBtX3Bs
YXRmb3JtQmluYXJ5RGF0YShkYXRhLnBsYXRmb3JtQmluYXJ5RGF0YSgpKQoreworfQorCitSZWY8
U2hhcmVkQnVmZmVyPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY3VycmVudEN1c3RvbURhdGFTZXJp
YWxpemF0aW9uVmVyc2lvbiA9IDE7CisKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVu
Y29kZXI7CisgICAgZW5jb2RlciA8PCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25WZXJz
aW9uOworICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CisgICAgZW5jb2RlciA8PCBtX3NhbWVPcmln
aW5DdXN0b21TdHJpbmdEYXRhOworICAgIGVuY29kZXIgPDwgbV9vcmRlcmVkVHlwZXM7CisgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVm
ZmVyU2l6ZSgpKTsKK30KKworUGFzdGVib2FyZEN1c3RvbURhdGEgUGFzdGVib2FyZEN1c3RvbURh
dGE6OmZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAg
Y29uc3Qgc3RhdGljIHVuc2lnbmVkIG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lv
bk51bWJlciA9IDE7CisKKyAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1bHQ7CisgICAgV1RG
OjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkgfTsKKyAgICB1bnNpZ25lZCB2
ZXJzaW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1h
eFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fb3JpZ2luKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fc2FtZU9y
aWdpbkN1c3RvbVN0cmluZ0RhdGEpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQubV9vcmRlcmVkVHlwZXMpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVHlwZXMoVmVj
dG9yPFN0cmluZz4mIHR5cGVzLCBTdHJpbmcgdHlwZSwgYm9vbCBtb3ZlVG9FbmQpCit7CisgICAg
aWYgKG1vdmVUb0VuZCkKKyAgICAgICAgdHlwZXMucmVtb3ZlRmlyc3QodHlwZSk7CisgICAgQVNT
RVJUKCF0eXBlcy5jb250YWlucyh0eXBlKSk7CisgICAgdHlwZXMuYXBwZW5kKHR5cGUpOworfQor
Cit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbV9wbGF0Zm9ybUJpbmFyeURhdGEucmVt
b3ZlKHR5cGUpOworICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVzZW50ID0gIW1fcGxhdGZvcm1T
dHJpbmdEYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRyeSB8fCBoYXNDdXN0b21EYXRhKHR5
cGUpOworICAgIHVwZGF0ZVR5cGVzKG1fb3JkZXJlZFR5cGVzLCB0eXBlLCB0eXBlV2FzQWxyZWFk
eVByZXNlbnQpOworfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZURhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpCit7CisgICAgbV9wbGF0
Zm9ybVN0cmluZ0RhdGEucmVtb3ZlKHR5cGUpOworICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVz
ZW50ID0gIW1fcGxhdGZvcm1CaW5hcnlEYXRhLnNldCh0eXBlLCBXVEZNb3ZlKGRhdGEpKS5pc05l
d0VudHJ5IHx8IGhhc0N1c3RvbURhdGEodHlwZSk7CisgICAgdXBkYXRlVHlwZXMobV9vcmRlcmVk
VHlwZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7Cit9CisKK3ZvaWQgUGFzdGVib2Fy
ZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBib29sIHR5cGVXYXNBbHJlYWR5UHJlc2VudCA9
ICFtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRy
eSB8fCBoYXNQbGF0Zm9ybURhdGEodHlwZSk7CisgICAgdXBkYXRlVHlwZXMobV9vcmRlcmVkVHlw
ZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEN1
c3RvbURhdGE6OmNsZWFyKCkKK3sKKyAgICBtX3BsYXRmb3JtQmluYXJ5RGF0YS5jbGVhcigpOwor
ICAgIG1fc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEuY2xlYXIoKTsKKyAgICBtX3BsYXRmb3Jt
U3RyaW5nRGF0YS5jbGVhcigpOworICAgIG1fb3JkZXJlZFR5cGVzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAg
ICBpZiAoIW1fcGxhdGZvcm1CaW5hcnlEYXRhLnJlbW92ZSh0eXBlKSAmJiAhbV9wbGF0Zm9ybVN0
cmluZ0RhdGEucmVtb3ZlKHR5cGUpICYmICFtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhLnJl
bW92ZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3JkZXJlZFR5cGVzLnJlbW92ZUZp
cnN0KHR5cGUpOworICAgIEFTU0VSVCghbV9vcmRlcmVkVHlwZXMuY29udGFpbnModHlwZSkpOwor
fQorCitib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNDdXN0b21EYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0
YS5jb250YWlucyh0eXBlKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6aGFzUGxh
dGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybVN0cmluZ0RhdGEuY29udGFpbnModHlwZSkgfHwgbV9wbGF0Zm9ybUJpbmFyeURhdGEuY29u
dGFpbnModHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyZDRiNGEx
OTkwZDE3YTUxN2NlZjdhZjg4MzVjZTJkYTU1MGUxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCkBAIC0wLDAgKzEsNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3Mg
UGFzdGVib2FyZEN1c3RvbURhdGEgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZEN1c3RvbURh
dGEoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mJiwgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mJiBwbGF0Zm9ybVN0cmluZ0RhdGEsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgY3VzdG9t
RGF0YSwgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIH5QYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpOworCisgICAg
Y29uc3QgU3RyaW5nJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHZv
aWQgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKSB7IG1fb3JpZ2luID0gb3JpZ2luOyB9
CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3JkZXJlZFR5cGVzKCkgY29uc3QgeyByZXR1
cm4gbV9vcmRlcmVkVHlwZXM7IH0KKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
cGxhdGZvcm1TdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVN0cmluZ0RhdGE7
IH0KKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgc2FtZU9yaWdpbkN1c3RvbVN0
cmluZ0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhOyB9
CisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGxhdGZv
cm1CaW5hcnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUJpbmFyeURhdGE7IH0KKwor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1ZmZlcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBm
cm9tU2hhcmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOworCisgICAgdm9pZCB3cml0ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQg
d3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBkYXRhKTsK
KyAgICB2b2lkIHdyaXRlU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBjbGVhcihj
b25zdCBTdHJpbmcmIHR5cGUpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGNvbnN0IGNoYXIqIGNvY29hVHlwZSgpOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgYm9vbCBoYXNDdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CisgICAg
Ym9vbCBoYXNQbGF0Zm9ybURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKKworICAgIFN0
cmluZyBtX29yaWdpbjsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyZWRUeXBlczsKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3BsYXRmb3JtU3RyaW5nRGF0YTsKKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX3NhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhOworICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8U2hhcmVkQnVmZmVyPj4gbV9wbGF0Zm9ybUJpbmFyeURhdGE7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmRTdHJhdGVneS5oCmluZGV4IDU3N2NhZjg5NWJlYjE5Nzk4OTkyNzAxZWQ1ZmY4YWM3
MDUyMGYzMWIuLmVkODYwODVmZDc2Mjc4NTcwYWM2ZWNkYzIzNzQ1N2JjMDU0MzA0NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCkBAIC0zMSwxMyAr
MzEsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CitjbGFzcyBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTsKIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiBjbGFzcyBTaGFyZWRCdWZm
ZXI7CiBzdHJ1Y3QgUGFzdGVib2FyZEltYWdlOwogc3RydWN0IFBhc3RlYm9hcmRJdGVtSW5mbzsK
IHN0cnVjdCBQYXN0ZWJvYXJkVVJMOwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250ZW50Owotc3Ry
dWN0IFBhc3RlYm9hcmRDdXN0b21EYXRhOwogCiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3kgewog
cHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0
ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApp
bmRleCBkZjAzOTNlMzVmY2E1YjdkYjAzNDYzMDM3NjBhZmVjNmFkYWE2YzMyLi43MGFiMTRlZDA1
ZGFiZWJjZDBkODM1NWJjN2ZjYzk2YjkwY2I4MTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApAQCAtNDcsOSArNDcsOSBAQCBzdHJ1Y3Qgd3BlX3Bh
c3RlYm9hcmQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOworY2xhc3MgUGFz
dGVib2FyZEN1c3RvbURhdGE7CiBjbGFzcyBTZWxlY3Rpb25EYXRhOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwotc3RydWN0IFBhc3RlYm9hcmRDdXN0b21EYXRhOwogc3RydWN0IFBhc3RlYm9hcmRJbWFn
ZTsKIHN0cnVjdCBQYXN0ZWJvYXJkSXRlbUluZm87CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKQEAg
LTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFVSTCByZWFkVVJMKHNp
emVfdCBpbmRleCwgU3RyaW5nJiB0aXRsZSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50
IGNvdW50KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IG51bWJlck9mRmlsZXMoKSBj
b25zdDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd3JpdGUoY29uc3QgVmVjdG9yPFBhc3Rl
Ym9hcmRDdXN0b21EYXRhPiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGxvbmcgd3JpdGUoY29uc3Qg
UGFzdGVib2FyZEN1c3RvbURhdGEmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5n
PiB0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIG9yaWdpbikgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKaW5k
ZXggMTczMTNlNDYwNzg1ZjMwMzRkNDEwYzMxMWFmMzk4ZTY4ZjA5YWU3YS4uNGE1ZDgzZDE0Yjdk
MTlhZDU5Yzc0Mjg1NmZmMDRiNjI3YThmYmYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3RhdGljUGFzdGVib2FyZC5jcHAKQEAgLTI2LDY1ICsyNiw2NiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bhc3RlYm9hcmQuaCIKIAorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0YXRpY1Bhc3RlYm9hcmQ6OlN0
YXRpY1Bhc3RlYm9hcmQoKQorU3RhdGljUGFzdGVib2FyZDo6U3RhdGljUGFzdGVib2FyZCgpID0g
ZGVmYXVsdDsKK1N0YXRpY1Bhc3RlYm9hcmQ6On5TdGF0aWNQYXN0ZWJvYXJkKCkgPSBkZWZhdWx0
OworCitib29sIFN0YXRpY1Bhc3RlYm9hcmQ6Omhhc0RhdGEoKQogeworICAgIHJldHVybiAhbV9j
dXN0b21EYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpLmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRh
LnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkuaXNFbXB0eSgpIHx8ICFtX2N1c3RvbURhdGEu
cGxhdGZvcm1CaW5hcnlEYXRhKCkuaXNFbXB0eSgpOwogfQogCi1ib29sIFN0YXRpY1Bhc3RlYm9h
cmQ6Omhhc0RhdGEoKQorVmVjdG9yPFN0cmluZz4gU3RhdGljUGFzdGVib2FyZDo6dHlwZXNTYWZl
Rm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EYXRh
LmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRhLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9jdXN0
b21EYXRhLm9yZGVyZWRUeXBlcygpOworfQorCitWZWN0b3I8U3RyaW5nPiBTdGF0aWNQYXN0ZWJv
YXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKK3sKKyAgICByZXR1cm4gbV9jdXN0
b21EYXRhLm9yZGVyZWRUeXBlcygpOwogfQogCiBTdHJpbmcgU3RhdGljUGFzdGVib2FyZDo6cmVh
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EYXRh
LmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9jdXN0b21EYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgp
LmdldCh0eXBlKTsKIH0KIAogU3RyaW5nIFN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1
c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiBtX2N1c3RvbURhdGEu
Z2V0KHR5cGUpOworICAgIHJldHVybiBtX2N1c3RvbURhdGEuc2FtZU9yaWdpbkN1c3RvbVN0cmlu
Z0RhdGEoKS5nZXQodHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVR5cGVzKFZlY3RvcjxT
dHJpbmc+JiB0eXBlcywgU3RyaW5nIHR5cGUsIGJvb2wgbW92ZVRvRW5kKQordm9pZCBTdGF0aWNQ
YXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKG1vdmVUb0VuZCkKLSAgICAgICAgdHlwZXMucmVtb3ZlRmlyc3Qo
dHlwZSk7Ci0gICAgQVNTRVJUKCF0eXBlcy5jb250YWlucyh0eXBlKSk7Ci0gICAgdHlwZXMuYXBw
ZW5kKHR5cGUpOworICAgIG1fY3VzdG9tRGF0YS53cml0ZVN0cmluZyh0eXBlLCB2YWx1ZSk7CiB9
CiAKLXZvaWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZURhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpCiB7Ci0gICAgYm9v
bCB0eXBlV2FzQWxyZWFkeVByZXNlbnQgPSAhbV9wbGF0Zm9ybURhdGEuc2V0KHR5cGUsIHZhbHVl
KS5pc05ld0VudHJ5IHx8IG1fY3VzdG9tRGF0YS5jb250YWlucyh0eXBlKTsKLSAgICB1cGRhdGVU
eXBlcyhtX3R5cGVzLCB0eXBlLCB0eXBlV2FzQWxyZWFkeVByZXNlbnQpOworICAgIG1fY3VzdG9t
RGF0YS53cml0ZURhdGEodHlwZSwgV1RGTW92ZShkYXRhKSk7CiB9CiAKIHZvaWQgU3RhdGljUGFz
dGVib2FyZDo6d3JpdGVTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVzZW50ID0gIW1f
Y3VzdG9tRGF0YS5zZXQodHlwZSwgdmFsdWUpLmlzTmV3RW50cnkgfHwgbV9wbGF0Zm9ybURhdGEu
Y29udGFpbnModHlwZSk7Ci0gICAgdXBkYXRlVHlwZXMobV90eXBlcywgdHlwZSwgdHlwZVdhc0Fs
cmVhZHlQcmVzZW50KTsKKyAgICBtX2N1c3RvbURhdGEud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEo
dHlwZSwgdmFsdWUpOwogfQogCiB2b2lkIFN0YXRpY1Bhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKICAg
ICBtX2N1c3RvbURhdGEuY2xlYXIoKTsKLSAgICBtX3BsYXRmb3JtRGF0YS5jbGVhcigpOwotICAg
IG1fdHlwZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjpjbGVhcihjb25z
dCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5yZW1vdmUodHlwZSkg
JiYgIW1fY3VzdG9tRGF0YS5yZW1vdmUodHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3R5
cGVzLnJlbW92ZUZpcnN0KHR5cGUpOwotICAgIEFTU0VSVCghbV90eXBlcy5jb250YWlucyh0eXBl
KSk7CisgICAgbV9jdXN0b21EYXRhLmNsZWFyKHR5cGUpOwogfQogCi1QYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBTdGF0aWNQYXN0ZWJvYXJkOjp0YWtlQ3VzdG9tRGF0YSgpCitQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYmIFN0YXRpY1Bhc3RlYm9hcmQ6OnRha2VDdXN0b21EYXRhKCkKIHsKLSAgICByZXR1cm4g
eyB7IH0sIFdURk1vdmUobV90eXBlcyksIFdURk1vdmUobV9wbGF0Zm9ybURhdGEpLCBXVEZNb3Zl
KG1fY3VzdG9tRGF0YSkgfTsKKyAgICByZXR1cm4gV1RGTW92ZShtX2N1c3RvbURhdGEpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKaW5kZXggZWVk
ZDcwMjliNGY0Mzk0NTcxMjI0NjVmZTQ2Y2FiN2ZiNGM2ZDgyNy4uMmNlZTJjNjBjY2U2Mjc1NDZl
YWU2YmRlNjBhN2Y3YTA0ZTgzN2IwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3RhdGljUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRp
Y1Bhc3RlYm9hcmQuaApAQCAtMzIsMjIgKzMyLDI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgU2hhcmVkQnVmZmVyOworCiBjbGFzcyBTdGF0aWNQYXN0ZWJvYXJkIGZpbmFsIDog
cHVibGljIFBhc3RlYm9hcmQgewogcHVibGljOgogICAgIFN0YXRpY1Bhc3RlYm9hcmQoKTsKKyAg
ICB+U3RhdGljUGFzdGVib2FyZCgpOwogCi0gICAgUGFzdGVib2FyZEN1c3RvbURhdGEgdGFrZUN1
c3RvbURhdGEoKTsKKyAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYmIHRha2VDdXN0b21EYXRhKCk7
CiAKICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgYm9vbCBoYXNEYXRhKCkgZmluYWw7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9y
QmluZGluZ3MoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQotICAgIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKSBmaW5hbCB7IHJldHVy
biBtX3R5cGVzOyB9CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoY29u
c3QgU3RyaW5nJikgZmluYWw7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNh
ZmVCaW5kaW5ncygpIGZpbmFsOwogICAgIFN0cmluZyByZWFkT3JpZ2luKCkgZmluYWwgeyByZXR1
cm4geyB9OyB9CiAgICAgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5h
bDsKICAgICBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
IGZpbmFsOwogCiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCB3cml0ZURhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpOwogICAgIHZvaWQgd3JpdGVTdHJpbmdJbkN1
c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIHZv
aWQgY2xlYXIoKSBmaW5hbDsKICAgICB2b2lkIGNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSkgZmlu
YWw7CkBAIC03Miw5ICs3Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFZl
Y3RvcjxTdHJpbmc+IG1fdHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9wbGF0
Zm9ybURhdGE7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jdXN0b21EYXRhOworICAg
IFBhc3RlYm9hcmRDdXN0b21EYXRhIG1fY3VzdG9tRGF0YTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQppbmRleCBjMGZiYTRi
ZWYwNzUxNWRlNGFkMjU0YjQwMzcwN2YxMWI1Y2IxNjc1Li45NjhlNjQ5YWM1NGM5YjM1OTlkZjY1
YzA5ODJkNGVlNTZjZDhjOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGFzdGVib2FyZENvY29hLm1tCkBAIC01MSwxMSArNTEsNiBAQCBzdGF0aWMgTlNCaXRtYXBJ
bWFnZUZpbGVUeXBlIGJpdG1hcFBOR0ZpbGVUeXBlKCkKIFBhc3RlYm9hcmRXZWJDb250ZW50OjpQ
YXN0ZWJvYXJkV2ViQ29udGVudCgpID0gZGVmYXVsdDsKIFBhc3RlYm9hcmRXZWJDb250ZW50Ojp+
UGFzdGVib2FyZFdlYkNvbnRlbnQoKSA9IGRlZmF1bHQ7CiAKLWNvbnN0IGNoYXIqIFBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKQotewotICAgIHJldHVybiAiY29tLmFwcGxlLldlYktp
dC5jdXN0b20tcGFzdGVib2FyZC1kYXRhIjsKLX0KLQogZW51bSBjbGFzcyBJbWFnZVR5cGUgewog
ICAgIEludmFsaWQgPSAwLAogICAgIFRJRkYsCkBAIC0yNjAsMTIgKzI1NSwxMiBAQCBTdHJpbmcg
UGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAKIFN0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAg
ICByZXR1cm4gcmVhZEN1c3RvbURhdGEoKS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7
CisgICAgcmV0dXJuIHJlYWRDdXN0b21EYXRhKCkuc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEo
KS5nZXQodHlwZSk7CiB9CiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkT3JpZ2luKCkKIHsKLSAg
ICByZXR1cm4gcmVhZEN1c3RvbURhdGEoKS5vcmlnaW47CisgICAgcmV0dXJuIHJlYWRDdXN0b21E
YXRhKCkub3JpZ2luKCk7CiB9CiAKIGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBQYXN0ZWJv
YXJkOjpyZWFkQ3VzdG9tRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjIx
Mjg0NGYyMTA0YTc3N2NmNjU1NmQ3NWE2ZTVjYWVjOTczZGU4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5t
bQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogUGFzdGVib2FyZEN1c3RvbURhdGE6OmNv
Y29hVHlwZSgpCit7CisgICAgcmV0dXJuICJjb20uYXBwbGUuV2ViS2l0LmN1c3RvbS1wYXN0ZWJv
YXJkLWRhdGEiOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0
cmFjdFBhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0cmFjdFBh
c3RlYm9hcmQuaAppbmRleCBlYTU2NDQyODUxNDgyMWVmNmI5ZGRiNDRkMzRmYWE5NzBmYTA3NWQz
Li45NjhkMTdjNGFiNTg5Mzc2OWZjNzZiNzk5NmY2N2IzOTEyYjEwMjUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oCkBAIC01MCw4ICs1
MCw5IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBvcHRpb25hbAogI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAotLSAodm9pZClzdGFnZVJlZ2lzdHJh
dGlvbkxpc3Q6KG51bGxhYmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICop
aW5mbzsKLS0gKG51bGxhYmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICop
dGFrZVJlZ2lzdHJhdGlvbkxpc3Q7CistICh2b2lkKXN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6KE5T
QXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4gKilpbmZvTGlzdHM7
CistICh2b2lkKWNsZWFyUmVnaXN0cmF0aW9uTGlzdHM7CistIChOU0FycmF5PFdlYkl0ZW1Qcm92
aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopdGFrZVJlZ2lzdHJhdGlvbkxpc3RzOwogI2Vu
ZGlmCiAtICh2b2lkKXNldEl0ZW1zOihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqKWl0ZW1zOwog
QHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBOU0ludGVnZXIgbnVtYmVyT2ZGaWxlczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tCmluZGV4IDkxNmRhZWJkMGEyNzgwYzkzNjNkMzU1OTg1YTliNjEyZWY0MWQxMDcuLmM3
ZjZmODA1MWZkNTE3MmJjNGNmMjczMGM5OTZkNjkzNjExN2QzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtMjky
LDI5ICsyOTIsNDEgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6cGxhdGZvcm1QYXN0ZWJv
YXJkVHlwZUZvclNhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUKIAogc3RhdGljIE5TU3RyaW5n
ICp3ZWJJT1NQYXN0ZVBib2FyZFR5cGUgPSBAImlPUyByaWNoIGNvbnRlbnQgcGFzdGUgcGFzdGVi
b2FyZCB0eXBlIjsKIAotc3RhdGljIHZvaWQgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKFdlYkl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
LCBpZCA8QWJzdHJhY3RQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkKQorc3RhdGljIHZvaWQgcmVnaXN0
ZXJJdGVtc1RvUGFzdGVib2FyZChOU0FycmF5PFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbklu
Zm9MaXN0ICo+ICppdGVtTGlzdHMsIGlkIDxBYnN0cmFjdFBhc3RlYm9hcmQ+IHBhc3RlYm9hcmQp
CiB7CiAjaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgLy8gSW4gbWFjQ2F0YWx5c3QsIC1b
VUlQYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6XSBpcyBub3QgeWV0IHN1cHBvcnRlZCwgc28g
d2UgZmFsbCBiYWNrIHRvIHNldHRpbmcgYW4gaXRlbSBkaWN0aW9uYXJ5IHdoZW4KICAgICAvLyBw
b3B1bGF0aW5nIHRoZSBwYXN0ZWJvYXJkIHVwb24gY29weS4KICAgICBpZiAoW3Bhc3RlYm9hcmQg
aXNLaW5kT2ZDbGFzczpQQUw6OmdldFVJUGFzdGVib2FyZENsYXNzKCldKSB7Ci0gICAgICAgIGF1
dG8gaXRlbURpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF0pOwotICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBlbnVtZXJhdGVJdGVt
czpbaXRlbURpY3Rpb25hcnldIChpZCA8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmFyPiBpdGVtLCBO
U1VJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih0eXBlSWRlbnRpZmllckZvckNsaWVudCldICYmIFtpdGVtIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZGF0YUZvckNsaWVudCldKQotICAgICAgICAgICAgICAgIFtpdGVtRGlj
dGlvbmFyeSBzZXRPYmplY3Q6aXRlbS5kYXRhRm9yQ2xpZW50IGZvcktleTppdGVtLnR5cGVJZGVu
dGlmaWVyRm9yQ2xpZW50XTsKLSAgICAgICAgfV07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIHNldEl0
ZW1zOkBbIGl0ZW1EaWN0aW9uYXJ5LmdldCgpIF1dOworICAgICAgICBhdXRvICppdGVtRGljdGlv
bmFyaWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Oml0ZW1MaXN0cy5jb3Vu
dF07CisgICAgICAgIGZvciAoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKnJl
cHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgaW4gaXRlbUxpc3RzKSB7CisgICAgICAgICAgICBhdXRv
IGl0ZW1EaWN0aW9uYXJ5ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6cmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5udW1iZXJPZkl0ZW1zXSk7
CisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBlbnVtZXJhdGVJdGVtczpb
aXRlbURpY3Rpb25hcnldIChpZCA8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmFyPiBpdGVtLCBOU1VJ
bnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IodHlwZUlkZW50aWZpZXJGb3JDbGllbnQpXSAmJiBbaXRlbSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGRhdGFGb3JDbGllbnQpXSkKKyAgICAgICAgICAgICAgICAgICAgW2l0
ZW1EaWN0aW9uYXJ5IHNldE9iamVjdDppdGVtLmRhdGFGb3JDbGllbnQgZm9yS2V5Oml0ZW0udHlw
ZUlkZW50aWZpZXJGb3JDbGllbnRdOworICAgICAgICAgICAgfV07CisgICAgICAgICAgICBbaXRl
bURpY3Rpb25hcmllcyBhZGRPYmplY3Q6aXRlbURpY3Rpb25hcnkuZ2V0KCldOworICAgICAgICB9
CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldEl0ZW1zOml0ZW1EaWN0aW9uYXJpZXNdOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogCi0gICAg
aWYgKE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSByZXByZXNlbnRhdGlvbnNUb1JlZ2lz
dGVyLml0ZW1Qcm92aWRlcikKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVyczpA
WyBpdGVtUHJvdmlkZXIgXV07Ci0gICAgZWxzZQotICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVt
UHJvdmlkZXJzOkBbIF1dOworICAgIGF1dG8gKml0ZW1Qcm92aWRlcnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbUxpc3RzLmNvdW50XTsKKyAgICBmb3IgKFdlYkl0ZW1Q
cm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGlu
IGl0ZW1MaXN0cykgeworICAgICAgICBpZiAoYXV0byAqaXRlbVByb3ZpZGVyID0gcmVwcmVzZW50
YXRpb25zVG9SZWdpc3Rlci5pdGVtUHJvdmlkZXIpCisgICAgICAgICAgICBbaXRlbVByb3ZpZGVy
cyBhZGRPYmplY3Q6aXRlbVByb3ZpZGVyXTsKKyAgICB9CisKKyAgICBbcGFzdGVib2FyZCBzZXRJ
dGVtUHJvdmlkZXJzOml0ZW1Qcm92aWRlcnNdOwogCi0gICAgaWYgKFtwYXN0ZWJvYXJkIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3RhZ2VSZWdpc3RyYXRpb25MaXN0OildKQotICAgICAg
ICBbcGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6cmVwcmVzZW50YXRpb25zVG9SZWdp
c3Rlcl07CisgICAgaWYgKFtwYXN0ZWJvYXJkIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
c3RhZ2VSZWdpc3RyYXRpb25MaXN0czopXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc3RhZ2VSZWdp
c3RyYXRpb25MaXN0czppdGVtTGlzdHNdOworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlckl0ZW1U
b1Bhc3RlYm9hcmQoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKnJlcHJlc2Vu
dGF0aW9uc1RvUmVnaXN0ZXIsIGlkIDxBYnN0cmFjdFBhc3RlYm9hcmQ+IHBhc3RlYm9hcmQpCit7
CisgICAgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZChAWyByZXByZXNlbnRhdGlvbnNUb1JlZ2lz
dGVyIF0sIHBhc3RlYm9hcmQpOwogfQogCiBsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0Q29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMzkzLDcgKzQwNSw3IEBAIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAg
ICAgICAgYWRkUmVwcmVzZW50YXRpb25zRm9yUGxhaW5UZXh0KHJlcHJlc2VudGF0aW9uc1RvUmVn
aXN0ZXIuZ2V0KCksIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0KTsKIAogICAgIFBhc3RlYm9h
cmRDdXN0b21EYXRhIGN1c3RvbURhdGE7Ci0gICAgY3VzdG9tRGF0YS5vcmlnaW4gPSBjb250ZW50
LmNvbnRlbnRPcmlnaW47CisgICAgY3VzdG9tRGF0YS5zZXRPcmlnaW4oY29udGVudC5jb250ZW50
T3JpZ2luKTsKICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRhOmN1c3RvbURh
dGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvclR5cGU6QChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKIAogICAgIHJlZ2lzdGVySXRlbVRv
UGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9hcmQu
Z2V0KCkpOwpAQCAtNTE2LDggKzUyOCw4IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVi
b2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvCiAKICAg
ICBpZiAoTlNEYXRhICpzZXJpYWxpemVkQ3VzdG9tRGF0YSA9IFttX3Bhc3RlYm9hcmQgZGF0YUZv
clBhc3RlYm9hcmRUeXBlOkAoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV0pIHsK
ICAgICAgICAgYXV0byBkYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZm
ZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2VyaWFsaXplZEN1c3RvbURhdGEpLmdldCgpKTsKLSAg
ICAgICAgaWYgKGRhdGEub3JpZ2luID09IG9yaWdpbikgewotICAgICAgICAgICAgZm9yIChhdXRv
JiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMpCisgICAgICAgIGlmIChkYXRhLm9yaWdpbigpID09
IG9yaWdpbikgeworICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlw
ZXMoKSkKICAgICAgICAgICAgICAgICBkb21QYXN0ZWJvYXJkVHlwZXMuYWRkKHR5cGUpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTQ4LDEyICs1NjAsMTIgQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZv
cm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcm
IG8KICAgICByZXR1cm4gY29weVRvVmVjdG9yKGRvbVBhc3RlYm9hcmRUeXBlcyk7CiB9CiAKLWxv
bmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYg
ZGF0YSkKK3N0YXRpYyBSZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xp
c3Q+IGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoY29uc3QgUGFzdGVib2FyZEN1
c3RvbURhdGEmIGRhdGEpCiB7CiAgICAgYXV0byByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyID0g
YWRvcHROUyhbW1dlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0IGFsbG9jXSBpbml0
XSk7CiAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0
aW9uU3R5bGU6V2ViUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOwogCi0gICAgaWYg
KGRhdGEuc2FtZU9yaWdpbkN1c3RvbURhdGEuc2l6ZSgpKSB7CisgICAgaWYgKGRhdGEuc2FtZU9y
aWdpbkN1c3RvbVN0cmluZ0RhdGEoKS5zaXplKCkgfHwgIWRhdGEub3JpZ2luKCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGlmIChhdXRvIHNlcmlhbGl6ZWRTaGFyZWRCdWZmZXIgPSBkYXRhLmNyZWF0
ZVNoYXJlZEJ1ZmZlcigpLT5jcmVhdGVOU0RhdGEoKSkgewogICAgICAgICAgICAgLy8gV2Ugc3Rh
c2ggdGhlIGxpc3Qgb2Ygc3VwcGxpZWQgcGFzdGVib2FyZCB0eXBlcyBpbiB0ZWFtRGF0YSBoZXJl
IGZvciBjb21wYXRpYmlsaXR5IHdpdGggZHJhZyBhbmQgZHJvcC4KICAgICAgICAgICAgIC8vIFNp
bmNlIHRoZSBjb250ZW50cyBvZiBpdGVtIHByb3ZpZGVycyBjYW5ub3QgYmUgbG9hZGVkIHByaW9y
IHRvIGRyb3AsIGJ1dCB0aGUgcGFzdGVib2FyZCB0eXBlcyBhcmUKQEAgLTU2MiwxOSArNTc0LDE5
IEBAIGxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYgZGF0YSkKICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUgY3VzdG9tIHR5cGVzLiBXZSB1
c2UgdGhlIHRlYW1EYXRhIHByb3BlcnR5LCBhdmFpbGFibGUgb24gTlNJdGVtUHJvdmlkZXIgb24g
aU9TLCB0byBzdG9yZQogICAgICAgICAgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiwgc2luY2UgdGhl
IGNvbnRlbnRzIG9mIHRlYW1EYXRhIGFyZSBpbW1lZGlhdGVseSBhdmFpbGFibGUgcHJpb3IgdG8g
dGhlIGRyb3AuCiAgICAgICAgICAgICBOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiAqdHlwZXNB
c05TQXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgZm9yIChhdXRv
JiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMpCisgICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUg
OiBkYXRhLm9yZGVyZWRUeXBlcygpKQogICAgICAgICAgICAgICAgIFt0eXBlc0FzTlNBcnJheSBh
ZGRPYmplY3Q6dHlwZV07Ci0gICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBz
ZXRUZWFtRGF0YTpzZWN1cmVseUFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0KEB7IEAob3JpZ2lu
S2V5Rm9yVGVhbURhdGEpIDogZGF0YS5vcmlnaW4sIEAoY3VzdG9tVHlwZXNLZXlGb3JUZWFtRGF0
YSkgOiB0eXBlc0FzTlNBcnJheSB9KV07CisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9S
ZWdpc3RlciBzZXRUZWFtRGF0YTpzZWN1cmVseUFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0KEB7
IEAob3JpZ2luS2V5Rm9yVGVhbURhdGEpIDogZGF0YS5vcmlnaW4oKSwgQChjdXN0b21UeXBlc0tl
eUZvclRlYW1EYXRhKSA6IHR5cGVzQXNOU0FycmF5IH0pXTsKICAgICAgICAgICAgIFtyZXByZXNl
bnRhdGlvbnNUb1JlZ2lzdGVyIGFkZERhdGE6c2VyaWFsaXplZFNoYXJlZEJ1ZmZlci5nZXQoKSBm
b3JUeXBlOkAoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV07CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRUeXBlcykgewotICAg
ICAgICBOU1N0cmluZyAqc3RyaW5nVmFsdWUgPSBkYXRhLnBsYXRmb3JtRGF0YS5nZXQodHlwZSk7
CisgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMoKSkgeworICAgICAgICBO
U1N0cmluZyAqc3RyaW5nVmFsdWUgPSBkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpLmdldCh0eXBl
KTsKICAgICAgICAgaWYgKCFzdHJpbmdWYWx1ZS5sZW5ndGgpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBhdXRvIGNvY29hVHlwZSA9IHBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JT
YWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAg
ICAgIGF1dG8gY29jb2FUeXBlID0gUGxhdGZvcm1QYXN0ZWJvYXJkOjpwbGF0Zm9ybVBhc3RlYm9h
cmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKS5jcmVhdGVDRlN0cmlu
ZygpOwogICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjb2NvYVR5cGUuZ2V0KCksIGtVVFR5
cGVVUkwpKQogICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkUmVwcmVz
ZW50aW5nT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOnN0cmluZ1ZhbHVlXV07CiAgICAgICAg
IGVsc2UgaWYgKFVUVHlwZUNvbmZvcm1zVG8oY29jb2FUeXBlLmdldCgpLCBrVVRUeXBlUGxhaW5U
ZXh0KSkKQEAgLTU4Myw4ICs1OTUsMTcgQEAgbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRl
KGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQogICAgICAgICAgICAgW3JlcHJlc2Vu
dGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpbc3RyaW5nVmFsdWUgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddIGZvclR5cGU6KE5TU3RyaW5nICopY29jb2FUeXBlLmdldCgp
XTsKICAgICB9CiAKLSAgICByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25z
VG9SZWdpc3Rlci5nZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKLSAgICByZXR1cm4gWyhpZDxB
YnN0cmFjdFBhc3RlYm9hcmQ+KW1fcGFzdGVib2FyZC5nZXQoKSBjaGFuZ2VDb3VudF07CisgICAg
cmV0dXJuIHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXI7Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0
YSkKK3sKKyAgICBOU011dGFibGVBcnJheSAqcmVnaXN0cmF0aW9uTGlzdHMgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbURhdGEuc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8m
IGRhdGEgOiBpdGVtRGF0YSkgeworICAgICAgICBpZiAoYXV0byBpdGVtTGlzdCA9IGNyZWF0ZUl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSkpCisgICAgICAgICAgICBbcmVnaXN0cmF0
aW9uTGlzdHMgYWRkT2JqZWN0Oml0ZW1MaXN0LmdldCgpXTsKKyAgICB9CisgICAgcmVnaXN0ZXJJ
dGVtc1RvUGFzdGVib2FyZChyZWdpc3RyYXRpb25MaXN0cywgbV9wYXN0ZWJvYXJkLmdldCgpKTsK
IH0KIAogI2Vsc2UKQEAgLTYyMCw5ICs2NDEsOCBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYpCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhc3RlYm9hcmRDdXN0b21EYXRhJikKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShj
b25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JikKIHsKLSAgICByZXR1cm4gMDsKIH0K
IAogI2VuZGlmCkBAIC03MjEsNiArNzQxLDEyIEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp1
cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5CiAg
ICAgW21fcGFzdGVib2FyZCB1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnM6dHlwZXNBcnJh
eV07CiB9CiAKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICB3cml0ZShWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURh
dGE+IHsgZGF0YSB9KTsKKyAgICByZXR1cm4gWyhpZDxBYnN0cmFjdFBhc3RlYm9hcmQ+KW1fcGFz
dGVib2FyZC5nZXQoKSBjaGFuZ2VDb3VudF07Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JN
KElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tCmluZGV4IDQzYWZiZGQwYTU0NGVjMTJkMTQ0NzYx
MWExYzE4ZjhlNGE0M2NkZWEuLjc4YTBkZDdmNDVkNWZiZDhiZTM2N2ZlMjRkOTJmOTNmYmYyMDVh
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlk
ZXJQYXN0ZWJvYXJkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkLm1tCkBAIC00NjIsNyArNDYyLDcgQEAgQGltcGxlbWVudGF0aW9u
IFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgewogICAgIC8vIEZJWE1FOiBUaGVzZSBpdmFycyBz
aG91bGQgYmUgcmVmYWN0b3JlZCB0byBiZSBWZWN0b3I8UmV0YWluUHRyPFR5cGU+PiBpbnN0ZWFk
IG9mIGdlbmVyaWMgTlNBcnJheXMuCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9pdGVtUHJvdmlk
ZXJzOwogICAgIFJldGFpblB0cjxOU0FycmF5PiBfc3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzOwot
ICAgIFJldGFpblB0cjxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdD4gX3N0YWdl
ZFJlZ2lzdHJhdGlvbkluZm9MaXN0OworICAgIFJldGFpblB0cjxOU0FycmF5PFdlYkl0ZW1Qcm92
aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+PiBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3Rz
OwogCiAgICAgVmVjdG9yPFJldGFpblB0cjxXZWJJdGVtUHJvdmlkZXJMb2FkUmVzdWx0Pj4gX2xv
YWRSZXN1bHRzOwogfQpAQCAtNDg0LDcgKzQ4NCw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAg
ICAgICAgIF9jaGFuZ2VDb3VudCA9IDA7CiAgICAgICAgIF9wZW5kaW5nT3BlcmF0aW9uQ291bnQg
PSAwOwogICAgICAgICBfc3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzID0gbmlsOwotICAgICAgICBf
c3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QgPSBuaWw7CisgICAgICAgIF9zdGFnZWRSZWdpc3Ry
YXRpb25JbmZvTGlzdHMgPSBuaWw7CiAgICAgICAgIF9sb2FkUmVzdWx0cyA9IHsgfTsKICAgICB9
CiAgICAgcmV0dXJuIHNlbGY7CkBAIC04NTMsMTYgKzg1MywyMSBAQCAtICh2b2lkKWVudW1lcmF0
ZUl0ZW1Qcm92aWRlcnNXaXRoQmxvY2s6KHZvaWQgKF4pKF9fa2luZG9mIE5TSXRlbVByb3ZpZGVy
ICppdGVtUAogICAgIFtfaXRlbVByb3ZpZGVycyBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpi
bG9ja107CiB9CiAKLS0gKHZvaWQpc3RhZ2VSZWdpc3RyYXRpb25MaXN0OihudWxsYWJsZSBXZWJJ
dGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKWluZm8KKy0gKHZvaWQpc3RhZ2VSZWdp
c3RyYXRpb25MaXN0czooTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlz
dCAqPiAqKWxpc3RzCiB7Ci0gICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0gaW5mby5u
dW1iZXJPZkl0ZW1zID8gaW5mbyA6IG5pbDsKKyAgICBBU1NFUlQobGlzdHMuY291bnQpOworICAg
IF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdHMgPSBsaXN0czsKIH0KIAotLSAoV2ViSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKil0YWtlUmVnaXN0cmF0aW9uTGlzdAorLSAodm9p
ZCljbGVhclJlZ2lzdHJhdGlvbkxpc3RzCiB7Ci0gICAgYXV0byBzdGFnZWRSZWdpc3RyYXRpb25J
bmZvTGlzdCA9IF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdDsKLSAgICBfc3RhZ2VkUmVnaXN0
cmF0aW9uSW5mb0xpc3QgPSBuaWw7Ci0gICAgcmV0dXJuIHN0YWdlZFJlZ2lzdHJhdGlvbkluZm9M
aXN0LmF1dG9yZWxlYXNlKCk7CisgICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IG5p
bDsKK30KKworLSAoTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAq
PiAqKXRha2VSZWdpc3RyYXRpb25MaXN0cworeworICAgIGF1dG8gc3RhZ2VkUmVnaXN0cmF0aW9u
SW5mb0xpc3RzID0gV1RGTW92ZShfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3RzKTsKKyAgICBy
ZXR1cm4gc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3RzLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXgg
OGViMTVjZjg4NTJkOTg1NzQ0N2UwNTljMzhhY2FlYmEyMzQxNWQwNC4uYzFlY2VmMTRjYWNjNzFl
N2M2NGY2OTA0NjFjM2I5MDE1MTljZmQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogICAgICAgICBtX2No
YW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5z
ZXRTdHJpbmdGb3JUeXBlKGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0LCBsZWdhY3lTdHJpbmdQ
YXN0ZWJvYXJkVHlwZSgpLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAogICAgIFBhc3RlYm9hcmRDdXN0
b21EYXRhIGRhdGE7Ci0gICAgZGF0YS5vcmlnaW4gPSBjb250ZW50LmNvbnRlbnRPcmlnaW47Cisg
ICAgZGF0YS5zZXRPcmlnaW4oY29udGVudC5jb250ZW50T3JpZ2luKTsKICAgICBtX2NoYW5nZUNv
dW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZm
ZXJGb3JUeXBlKGRhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCkucHRyKCksIFBhc3RlYm9hcmRDdXN0
b21EYXRhOjpjb2NvYVR5cGUoKSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkV3JpdGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRXcml0ZXIubW0KaW5kZXggMGZlNTA1ZGU1
NWM2NjE2NDhmMDU5ZGE5YjdmYWUyYTA3N2ZjNjIzZS4uYjE5YjUyZWM5NGYwOTM0YjNiN2ExODQ0
NzJlY2I2NjZmMzNkM2UzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRXcml0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRXcml0ZXIubW0KQEAgLTExOCw3ICsxMTgsNyBAQCBSZXRhaW5QdHI8aWQgPE5TUGFz
dGVib2FyZFdyaXRpbmc+PiBjcmVhdGVQYXN0ZWJvYXJkV3JpdGVyKGNvbnN0IFBhc3RlYm9hcmRX
cml0ZQogICAgICAgICAgICAgW3Bhc3RlYm9hcmRJdGVtIHNldERhdGE6d2ViQ29udGVudC0+Y2xp
ZW50RGF0YVtpXS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yVHlwZTp0b1VUSVVubGVzc0FscmVh
ZHlVVEkod2ViQ29udGVudC0+Y2xpZW50VHlwZXNbaV0pLmdldCgpXTsKIAogICAgICAgICBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSBjdXN0b21EYXRhOwotICAgICAgICBjdXN0b21EYXRhLm9yaWdpbiA9
IHdlYkNvbnRlbnQtPmNvbnRlbnRPcmlnaW47CisgICAgICAgIGN1c3RvbURhdGEuc2V0T3JpZ2lu
KHdlYkNvbnRlbnQtPmNvbnRlbnRPcmlnaW4pOwogICAgICAgICBbcGFzdGVib2FyZEl0ZW0gc2V0
RGF0YTpjdXN0b21EYXRhLmNyZWF0ZVNoYXJlZEJ1ZmZlcigpLT5jcmVhdGVOU0RhdGEoKS5nZXQo
KSBmb3JUeXBlOnRvVVRJVW5sZXNzQWxyZWFkeVVUSShTdHJpbmcoUGFzdGVib2FyZEN1c3RvbURh
dGE6OmNvY29hVHlwZSgpKSkuZ2V0KCldOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggMTk0YWRkYmNm
OWUxNWM0ZWRiNjY1MDQxMTIxMzNhMTMyZGVmNDk2Ni4uZTNkNWQxOWM5NTZjZjgwNGFmOTJiNTUz
YmFiNmVmODA0NzJkNTJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCkBAIC0xOTgsOCArMTk4LDggQEAgVmVjdG9yPFN0
cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShj
b25zdCBTdHJpbmcmIG8KICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGRvbVBhc3RlYm9hcmRUeXBl
czsKICAgICBpZiAoTlNEYXRhICpzZXJpYWxpemVkQ3VzdG9tRGF0YSA9IFttX3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXSkgewogICAg
ICAgICBhdXRvIGRhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihT
aGFyZWRCdWZmZXI6OmNyZWF0ZShzZXJpYWxpemVkQ3VzdG9tRGF0YSkuZ2V0KCkpOwotICAgICAg
ICBpZiAoZGF0YS5vcmlnaW4gPT0gb3JpZ2luKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHR5
cGUgOiBkYXRhLm9yZGVyZWRUeXBlcykKKyAgICAgICAgaWYgKGRhdGEub3JpZ2luKCkgPT0gb3Jp
Z2luKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRUeXBlcygp
KQogICAgICAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjUsMjEgKzIyNSwyMSBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgbwog
bG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRh
JiBkYXRhKQogewogICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtOU011dGFibGVBcnJheSBh
cnJheV07Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGRhdGEucGxhdGZvcm1EYXRhKQorICAgIGZv
ciAoYXV0byYgZW50cnkgOiBkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpKQogICAgICAgICBbdHlw
ZXMgYWRkT2JqZWN0OnBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKGVudHJ5LmtleSldOwotICAgIGlmIChkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRh
LnNpemUoKSkKKyAgICBpZiAoZGF0YS5zYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YSgpLnNpemUo
KSkKICAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2Nv
YVR5cGUoKSldOwogCiAgICAgW21fcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6
bmlsXTsKIAotICAgIGZvciAoYXV0byYgZW50cnkgOiBkYXRhLnBsYXRmb3JtRGF0YSkgeworICAg
IGZvciAoYXV0byYgZW50cnkgOiBkYXRhLnBsYXRmb3JtU3RyaW5nRGF0YSgpKSB7CiAgICAgICAg
IGF1dG8gcGxhdGZvcm1UeXBlID0gcGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVUeXBlRm9y
RE9NVG9SZWFkQW5kV3JpdGUoZW50cnkua2V5KTsKICAgICAgICAgQVNTRVJUKCFwbGF0Zm9ybVR5
cGUuaXNFbXB0eSgpKTsKICAgICAgICAgaWYgKCFwbGF0Zm9ybVR5cGUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgW21fcGFzdGVib2FyZCBzZXRTdHJpbmc6ZW50cnkudmFsdWUgZm9yVHlwZTpwbGF0
Zm9ybVR5cGVdOwogICAgIH0KIAotICAgIGlmIChkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhLnNp
emUoKSkgeworICAgIGlmIChkYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkuc2l6ZSgp
KSB7CiAgICAgICAgIGlmIChhdXRvIHNlcmlhbGl6ZWRDdXN0b21EYXRhID0gZGF0YS5jcmVhdGVT
aGFyZWRCdWZmZXIoKS0+Y3JlYXRlTlNEYXRhKCkpCiAgICAgICAgICAgICBbbV9wYXN0ZWJvYXJk
IHNldERhdGE6c2VyaWFsaXplZEN1c3RvbURhdGEuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRD
dXN0b21EYXRhOjpjb2NvYVR5cGUoKSldOwogICAgIH0KQEAgLTQ2Myw2ICs0NjMsNDcgQEAgaW50
IFBsYXRmb3JtUGFzdGVib2FyZDo6Y291bnQoKSBjb25zdAogICAgIHJldHVybiBbbV9wYXN0ZWJv
YXJkIHBhc3RlYm9hcmRJdGVtc10uY291bnQ7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8TlNQYXN0
ZWJvYXJkSXRlbT4gY3JlYXRlUGFzdGVib2FyZEl0ZW0oY29uc3QgUGFzdGVib2FyZEN1c3RvbURh
dGEmIGRhdGEpCit7CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TUGFzdGVib2FyZEl0ZW0g
YWxsb2NdIGluaXRdKTsKKworICAgIGlmICghZGF0YS5zYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0
YSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYXV0byBzZXJpYWxpemVkQ3VzdG9tRGF0YSA9
IGRhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNyZWF0ZU5TRGF0YSgpKQorICAgICAgICAgICAg
W2l0ZW0gc2V0RGF0YTpzZXJpYWxpemVkQ3VzdG9tRGF0YS5nZXQoKSBmb3JUeXBlOkAoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV07CisgICAgfQorCisgICAgZm9yIChhdXRvJiB0
eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMoKSkgeworICAgICAgICBhdXRvIHBsYXRmb3JtVHlwZSA9
IG1vZGVyblBhc3RlYm9hcmRUeXBlRm9yV2ViU2FmZU1JTUVUeXBlKHR5cGUpOworICAgICAgICBp
ZiAoIXBsYXRmb3JtVHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8g
cGxhdGZvcm1TdHJpbmdJdGVyYXRvciA9IGRhdGEucGxhdGZvcm1TdHJpbmdEYXRhKCkuZmluZCh0
eXBlKTsKKyAgICAgICAgaWYgKHBsYXRmb3JtU3RyaW5nSXRlcmF0b3IgIT0gZGF0YS5wbGF0Zm9y
bVN0cmluZ0RhdGEoKS5lbmQoKSkgeworICAgICAgICAgICAgW2l0ZW0gc2V0U3RyaW5nOnBsYXRm
b3JtU3RyaW5nSXRlcmF0b3ItPnZhbHVlIGZvclR5cGU6cGxhdGZvcm1UeXBlXTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBwbGF0Zm9ybURhdGFJdGVy
YXRvciA9IGRhdGEucGxhdGZvcm1CaW5hcnlEYXRhKCkuZmluZCh0eXBlKTsKKyAgICAgICAgaWYg
KHBsYXRmb3JtRGF0YUl0ZXJhdG9yICE9IGRhdGEucGxhdGZvcm1CaW5hcnlEYXRhKCkuZW5kKCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIHBsYXRmb3JtRGF0YSA9IHBsYXRmb3JtRGF0YUl0ZXJh
dG9yLT52YWx1ZS0+Y3JlYXRlTlNEYXRhKCkpCisgICAgICAgICAgICAgICAgW2l0ZW0gc2V0RGF0
YTpwbGF0Zm9ybURhdGEuZ2V0KCkgZm9yVHlwZTpwbGF0Zm9ybVR5cGVdOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3
cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0YSkKK3sKKyAg
ICBhdXRvIHBsYXRmb3JtSXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6aXRlbURhdGEuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBkYXRhIDog
aXRlbURhdGEpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IGNyZWF0ZVBhc3RlYm9hcmRJdGVt
KGRhdGEpKQorICAgICAgICAgICAgW3BsYXRmb3JtSXRlbXMgYWRkT2JqZWN0Oml0ZW0uZ2V0KCld
OworICAgIH0KKyAgICBbbV9wYXN0ZWJvYXJkIGNsZWFyQ29udGVudHNdOworICAgIFttX3Bhc3Rl
Ym9hcmQgd3JpdGVPYmplY3RzOnBsYXRmb3JtSXRlbXMuZ2V0KCldOworfQorCiBQYXN0ZWJvYXJk
SXRlbUluZm8gUGxhdGZvcm1QYXN0ZWJvYXJkOjppbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKICAgICBOU1Bhc3RlYm9hcmRJdGVtICppdGVtID0gaXRlbUF0SW5kZXgo
aW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKaW5kZXggMjIyY2RhZjkyMGIwZDUwZmMzNDdkNWE1MDY2ZDlhMGVkNWI4ZTQ0Ny4uNTQ5ZmJl
MTNmYzc2ODFhZDk5Njk5ZTU0ZDc2ZjU1OTliN2IyYmViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xNjM4LDI2ICsxNjM4LDU2IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxEYXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbj46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDCiAKIHZvaWQgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJk
Q3VzdG9tRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSYgZGF0YSkKIHsKLSAgICBlbmNvZGVyIDw8IGRhdGEub3JpZ2luOwotICAgIGVuY29k
ZXIgPDwgZGF0YS5vcmRlcmVkVHlwZXM7Ci0gICAgZW5jb2RlciA8PCBkYXRhLnBsYXRmb3JtRGF0
YTsKLSAgICBlbmNvZGVyIDw8IGRhdGEuc2FtZU9yaWdpbkN1c3RvbURhdGE7CisgICAgZW5jb2Rl
ciA8PCBkYXRhLm9yaWdpbigpOworICAgIGVuY29kZXIgPDwgZGF0YS5vcmRlcmVkVHlwZXMoKTsK
KyAgICBlbmNvZGVyIDw8IGRhdGEucGxhdGZvcm1TdHJpbmdEYXRhKCk7CisgICAgZW5jb2RlciA8
PCBkYXRhLnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCk7CisgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZGF0YS5wbGF0Zm9ybUJpbmFyeURhdGEoKS5zaXplKCkpOworICAg
IGZvciAoYXV0byYgZW50cnkgOiBkYXRhLnBsYXRmb3JtQmluYXJ5RGF0YSgpKSB7CisgICAgICAg
IGVuY29kZXIgPDwgZW50cnkua2V5OworICAgICAgICBlbmNvZGVTaGFyZWRCdWZmZXIoZW5jb2Rl
ciwgZW50cnkudmFsdWUuZ2V0KCkpOworICAgIH0KIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFBh
c3RlYm9hcmRDdXN0b21EYXRhPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFBhc3RlYm9hcmRD
dXN0b21EYXRhJiBkYXRhKQogewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5vcmlnaW4p
KQorICAgIFN0cmluZyBvcmlnaW47CisgICAgVmVjdG9yPFN0cmluZz4gb3JkZXJlZFR5cGVzOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBsYXRmb3JtU3RyaW5nRGF0YTsKKyAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0YTsKKyAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4+IHBsYXRmb3JtQmluYXJ5RGF0YTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShvcmRlcmVkVHlwZXMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEub3JkZXJlZFR5cGVzKSkKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHBsYXRmb3JtU3RyaW5nRGF0YSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5wbGF0Zm9ybURhdGEpKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEuc2FtZU9y
aWdpbkN1c3RvbURhdGEpKQorICAgIHVpbnQ2NF90IGJpbmFyeURhdGFFbnRyeUNvdW50ID0gMDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJpbmFyeURhdGFFbnRyeUNvdW50KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgcGxhdGZvcm1CaW5hcnlEYXRhLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYmluYXJ5RGF0YUVudHJ5Q291bnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmluYXJ5RGF0YUVudHJ5Q291bnQ7ICsraSkgeworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOworICAgICAgICBkZWNvZGVTaGFy
ZWRCdWZmZXIoZGVjb2RlciwgZGF0YSk7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBwbGF0Zm9ybUJpbmFyeURhdGEuc2V0KFdURk1vdmUo
dHlwZSksIFdURk1vdmUoZGF0YSkpOworICAgIH0KKworICAgIGRhdGEgPSB7IG9yaWdpbiwgV1RG
TW92ZShvcmRlcmVkVHlwZXMpLCBXVEZNb3ZlKHBsYXRmb3JtU3RyaW5nRGF0YSksIFdURk1vdmUo
c2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEpLCBXVEZNb3ZlKHBsYXRmb3JtQmluYXJ5RGF0YSkg
fTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAppbmRleCA5ZDZjZDM0MTIyZGNjYmY2MzA2MzBlY2NkZGExNmYwNzg1
NGMzZGU0Li4wMTVmODk2ZjEyYzJlNjIzMDEyMzBlMzNkYWIwNTA3Y2I4ZmY4NDRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtODksNiArODks
NyBAQCBjbGFzcyBMYXlvdXRTaXplOwogY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFzcyBMaW5lYXJU
aW1pbmdGdW5jdGlvbjsKIGNsYXNzIE5vdGlmaWNhdGlvbjsKK2NsYXNzIFBhc3RlYm9hcmRDdXN0
b21EYXRhOwogY2xhc3MgUGF0aDsKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFJlZ2lv
bjsKQEAgLTExNyw3ICsxMTgsNiBAQCBzdHJ1Y3QgTGVuZ3RoOwogc3RydWN0IEdyYW1tYXJEZXRh
aWw7CiBzdHJ1Y3QgTWltZUNsYXNzSW5mbzsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7Ci1zdHJ1
Y3QgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKIHN0cnVjdCBQ
bHVnaW5JbmZvOwogc3RydWN0IFByb21pc2VkQXR0YWNobWVudEluZm87CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDEyNjI3MTc1NjY4MGZjODNi
OWJlNTIxODY1MmQyZmI1NWY5YWZiZTcuLmMzZDE0NjA3ZjUwMjg3MTI3MDZiMDc0MzVjYTIyM2Rj
Mzc1MjRkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCkBAIC00MzEyLDcgKzQzMTIsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXF1ZXN0RE9NUGFz
dGVBY2Nlc3MoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN0cmluZyYgbwogCiAgICAg
TlNEYXRhICpkYXRhID0gW05TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZCBkYXRhRm9yVHlw
ZTpAKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSldOwogICAgIGF1
dG8gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSk7Ci0gICAgaWYg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5n
ZXQoKSkub3JpZ2luID09IG9yaWdpbklkZW50aWZpZXIpIHsKKyAgICBpZiAoV2ViQ29yZTo6UGFz
dGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoYnVmZmVyLmdldCgpKS5vcmlnaW4o
KSA9PSBvcmlnaW5JZGVudGlmaWVyKSB7CiAgICAgICAgIGNvbXBsZXRpb24oV2ViQ29yZTo6RE9N
UGFzdGVBY2Nlc3NSZXNwb25zZTo6R3JhbnRlZEZvckdlc3R1cmUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2Fy
ZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaApp
bmRleCBhZGJjMjI2YWRiOGVmNTJlYTM3MThlYTA2NTZhODlmNTEwYjhiOTIwLi5hZDQwNmY0OWQ5
ZmIxYjMwYWVjMmI2NDNkMDA1ZWM4YzJiNDVlYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKK2Ns
YXNzIFBhc3RlYm9hcmRDdXN0b21EYXRhOwogc3RydWN0IFBhc3RlYm9hcmRJbWFnZTsKIHN0cnVj
dCBQYXN0ZWJvYXJkSXRlbUluZm87CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpp
bmRleCA2OTFkMDI1MzcxOGMwMmEwZGUwYTZiZThlMzRkMjEwMzRlMDAzYTIzLi4zYjY2MjVhMzM0
OGEzNWQ2MGM2MTg5Nzc4YTkwMGY2YWM0NmNhZWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yOSw3ICsy
OSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhc3RlYm9hcmRQcm94eSB7CiAgICAgVXBkYXRlU3VwcG9y
dGVkVHlwZUlkZW50aWZpZXJzKFZlY3RvcjxTdHJpbmc+IGlkZW50aWZpZXJzLCBTdHJpbmcgcGFz
dGVib2FyZE5hbWUpCiAjZW5kaWYKIAotICAgIFdyaXRlQ3VzdG9tRGF0YShzdHJ1Y3QgV2ViQ29y
ZTo6UGFzdGVib2FyZEN1c3RvbURhdGEgZGF0YSwgU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAo
dWludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNocm9ub3VzCisgICAgV3JpdGVDdXN0b21EYXRhKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhIGRhdGEsIFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkg
LT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KSBTeW5jaHJvbm91cwogICAgIFR5cGVzU2FmZUZvckRP
TVRvUmVhZEFuZFdyaXRlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIG9yaWdpbikgLT4g
KFZlY3RvcjxTdHJpbmc+IHR5cGVzKSBTeW5jaHJvbm91cwogICAgIEFsbFBhc3RlYm9hcmRJdGVt
SW5mbyhTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UGFzdGVib2Fy
ZEl0ZW1JbmZvPiBhbGxJbmZvKSBTeW5jaHJvbm91cwogICAgIEluZm9ybWF0aW9uRm9ySXRlbUF0
SW5kZXgodWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKHN0cnVjdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkSXRlbUluZm8gaW5mbykgU3luY2hyb25vdXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CmluZGV4IDUyY2RmYTUyNTc4ZDJkMzRmNzJjNmM2OTIwOWUyZjQ2MjE5OWE4OTkuLjdiOTBlY2E5
Nzk4ZWY2OWIyMjBmYmFlYjlhODVlOGQwZDAyYzM2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMzIz
Myw3ICszMjMzLDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uRm9yV2ViVmlldzooU0VMKWFj
dGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKICAgICAgICAgTlNBcnJheSAqYWxsQ3VzdG9tUGFz
dGVib2FyZERhdGEgPSBbcGFzdGVib2FyZCBkYXRhRm9yUGFzdGVib2FyZFR5cGU6QChXZWJDb3Jl
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpIGluSXRlbVNldDppbmRpY2VzXTsK
ICAgICAgICAgZm9yIChOU0RhdGEgKmRhdGEgaW4gYWxsQ3VzdG9tUGFzdGVib2FyZERhdGEpIHsK
ICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSk7Ci0gICAgICAgICAgICBpZiAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZy
b21TaGFyZWRCdWZmZXIoYnVmZmVyLmdldCgpKS5vcmlnaW4gPT0gZm9jdXNlZERvY3VtZW50T3Jp
Z2luKQorICAgICAgICAgICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9t
U2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luKCkgPT0gZm9jdXNlZERvY3VtZW50T3Jp
Z2luKQogICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIE5POwpAQCAtNTczMSw3ICs1NzMxLDcgQEAgc3RhdGljIEJPT0wgYWxsUGFzdGVib2FyZEl0
ZW1PcmlnaW5zTWF0Y2hPcmlnaW4oVUlQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBjb25zdAogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYXV0byBidWZmZXIgPSBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShkYXRhKTsKLSAgICAgICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRD
dXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luICE9IG9yaWdp
bklkZW50aWZpZXIpCisgICAgICAgIGlmIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
ZnJvbVNoYXJlZEJ1ZmZlcihidWZmZXIuZ2V0KCkpLm9yaWdpbigpICE9IG9yaWdpbklkZW50aWZp
ZXIpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKICAgICAgICAgZm91bmRBdExlYXN0T25lTWF0
Y2hpbmdJZGVudGlmaWVyID0gWUVTOwpAQCAtNjcwNiwxNSArNjcwNiwxNSBAQCAtICh2b2lkKV9k
aWRIYW5kbGVBZGRpdGlvbmFsRHJhZ0l0ZW1zUmVxdWVzdDooQk9PTClhZGRlZAogICAgIGlmICgh
Y29tcGxldGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViSXRlbVByb3ZpZGVyUmVnaXN0
cmF0aW9uSW5mb0xpc3QgKnJlZ2lzdHJhdGlvbkxpc3QgPSBbW1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQgc2hhcmVkSW5zdGFuY2VdIHRha2VSZWdpc3RyYXRpb25MaXN0XTsKLSAgICBpZiAoIWFk
ZGVkIHx8ICFyZWdpc3RyYXRpb25MaXN0IHx8ICFfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmhh
c1N0YWdlZERyYWdTb3VyY2UoKSkgeworICAgIGF1dG8gKnJlZ2lzdHJhdGlvbkxpc3RzID0gW1tX
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSB0YWtlUmVnaXN0cmF0aW9u
TGlzdHNdOworICAgIGlmICghYWRkZWQgfHwgIVtyZWdpc3RyYXRpb25MaXN0cyBjb3VudF0gfHwg
IV9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaGFzU3RhZ2VkRHJhZ1NvdXJjZSgpKSB7CiAgICAg
ICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuY2xlYXJTdGFnZWREcmFnU291cmNlKCk7CiAg
ICAgICAgIGNvbXBsZXRpb24oQFsgXSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBh
dXRvIHN0YWdlZERyYWdTb3VyY2UgPSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnN0YWdlZERy
YWdTb3VyY2UoKTsKLSAgICBOU0FycmF5ICpkcmFnSXRlbXNUb0FkZCA9IFtzZWxmIF9pdGVtc0Zv
ckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlvbkxpc3Q6cmVnaXN0cmF0
aW9uTGlzdCBzdGFnZWREcmFnU291cmNlOnN0YWdlZERyYWdTb3VyY2VdOworICAgIE5TQXJyYXkg
KmRyYWdJdGVtc1RvQWRkID0gW3NlbGYgX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Np
b25XaXRoUmVnaXN0cmF0aW9uTGlzdHM6cmVnaXN0cmF0aW9uTGlzdHMgc3RhZ2VkRHJhZ1NvdXJj
ZTpzdGFnZWREcmFnU291cmNlXTsKIAogICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJh
ZyBzZXNzaW9uOiAlcCBhZGRpbmcgJXR1IGl0ZW1zIiwgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5kcmFnU2Vzc2lvbigpLCBkcmFnSXRlbXNUb0FkZC5jb3VudCk7CiAgICAgX2RyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS5jbGVhclN0YWdlZERyYWdTb3VyY2UoZHJhZ0l0ZW1zVG9BZGQuY291bnQg
PyBXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVjb21lQWN0aXZlOjpZZXMg
OiBXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVjb21lQWN0aXZlOjpObyk7
CkBAIC02NzkzLDcgKzY3OTMsNyBAQCAtICh2b2lkKWNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0
YXRlCiAgICAgICAgIFtbV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0g
c2V0SXRlbVByb3ZpZGVyczpuaWxdOwogICAgIH0KIAotICAgIFtbV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gc3RhZ2VSZWdpc3RyYXRpb25MaXN0Om5pbF07CisgICAg
W1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSBjbGVhclJlZ2lzdHJh
dGlvbkxpc3RzXTsKICAgICBbc2VsZiBfcmVzdG9yZUNhbGxvdXRCYXJJZk5lZWRlZF07CiAKICAg
ICBbc3RkOjpleGNoYW5nZShfdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3QsIG5pbCkgcmVtb3Zl
RnJvbVN1cGVydmlld107CkBAIC02OTYwLDcgKzY5NjAsNyBAQCAtICh2b2lkKV9wcmVwYXJlVG9E
cmFnUHJvbWlzZWRBdHRhY2htZW50Oihjb25zdCBXZWJDb3JlOjpQcm9taXNlZEF0dGFjaG1lbnRJ
bmZvJgogCiAgICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtXZWJJ
dGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXTsKICAgICBwYXN0ZWJvYXJkLml0
ZW1Qcm92aWRlcnMgPSBAWyBbcmVnaXN0cmF0aW9uTGlzdCBpdGVtUHJvdmlkZXJdIF07Ci0gICAg
W3Bhc3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0OnJlZ2lzdHJhdGlvbkxpc3QuZ2V0KCld
OworICAgIFtwYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6QFsgcmVnaXN0cmF0aW9u
TGlzdC5nZXQoKSBdXTsKIH0KIAogLSAoV0tEcmFnRGVzdGluYXRpb25BY3Rpb24pX2RyYWdEZXN0
aW5hdGlvbkFjdGlvbkZvckRyb3BTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbgpA
QCAtNjk5OSwyNiArNjk5OSwzOCBAQCAtICh2b2lkKV9yZXN0b3JlQ2FsbG91dEJhcklmTmVlZGVk
CiAgICAgX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wID0gTk87CiB9CiAKLS0gKE5T
QXJyYXk8VUlEcmFnSXRlbSAqPiAqKV9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9u
V2l0aFJlZ2lzdHJhdGlvbkxpc3Q6KFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0
ICopcmVnaXN0cmF0aW9uTGlzdCBzdGFnZWREcmFnU291cmNlOihjb25zdCBXZWJLaXQ6OkRyYWdT
b3VyY2VTdGF0ZSYpc3RhZ2VkRHJhZ1NvdXJjZQorLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICop
X2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGlzdHM6
KE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4gKilyZWdpc3Ry
YXRpb25MaXN0cyBzdGFnZWREcmFnU291cmNlOihjb25zdCBXZWJLaXQ6OkRyYWdTb3VyY2VTdGF0
ZSYpc3RhZ2VkRHJhZ1NvdXJjZQogewotICAgIE5TSXRlbVByb3ZpZGVyICpkZWZhdWx0SXRlbVBy
b3ZpZGVyID0gcmVnaXN0cmF0aW9uTGlzdC5pdGVtUHJvdmlkZXI7Ci0gICAgaWYgKCFkZWZhdWx0
SXRlbVByb3ZpZGVyKQorICAgIGlmICghcmVnaXN0cmF0aW9uTGlzdHMuY291bnQpCiAgICAgICAg
IHJldHVybiBAWyBdOwogCi0gICAgTlNBcnJheSAqYWRqdXN0ZWRJdGVtUHJvdmlkZXJzOworICAg
IE5TTXV0YWJsZUFycmF5ICphZGp1c3RlZEl0ZW1Qcm92aWRlcnMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXldOwogICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gc2VsZi53
ZWJWaWV3VUlEZWxlZ2F0ZTsKICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzphZGp1c3RlZERhdGFJbnRlcmFjdGlvbkl0ZW1Qcm92aWRlcnNG
b3JJdGVtUHJvdmlkZXI6cmVwcmVzZW50aW5nT2JqZWN0czphZGRpdGlvbmFsRGF0YTopXSkgewot
ICAgICAgICBhdXRvIHJlcHJlc2VudGluZ09iamVjdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgYXV0byBhZGRpdGlvbmFsRGF0YSA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtyZWdpc3RyYXRp
b25MaXN0IGVudW1lcmF0ZUl0ZW1zOltyZXByZXNlbnRpbmdPYmplY3RzLCBhZGRpdGlvbmFsRGF0
YV0gKGlkIDxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXI+IGl0ZW0sIE5TVUludGVnZXIpIHsKLSAg
ICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHJlcHJlc2Vu
dGluZ09iamVjdEZvckNsaWVudCldKQotICAgICAgICAgICAgICAgIFtyZXByZXNlbnRpbmdPYmpl
Y3RzIGFkZE9iamVjdDppdGVtLnJlcHJlc2VudGluZ09iamVjdEZvckNsaWVudF07Ci0gICAgICAg
ICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0eXBlSWRlbnRpZmll
ckZvckNsaWVudCldICYmIFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZGF0YUZv
ckNsaWVudCldKQotICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsRGF0YSBzZXRPYmplY3Q6aXRl
bS5kYXRhRm9yQ2xpZW50IGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVyRm9yQ2xpZW50XTsKLSAg
ICAgICAgfV07Ci0gICAgICAgIGFkanVzdGVkSXRlbVByb3ZpZGVycyA9IFt1aURlbGVnYXRlIF93
ZWJWaWV3Ol93ZWJWaWV3IGFkanVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0
ZW1Qcm92aWRlcjpkZWZhdWx0SXRlbVByb3ZpZGVyIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVz
ZW50aW5nT2JqZWN0cy5nZXQoKSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV07
Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkanVzdGVkSXRlbVByb3ZpZGVycyA9IEBbIGRlZmF1bHRJ
dGVtUHJvdmlkZXIgXTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBhIG5l
dyBVSSBkZWxlZ2F0ZSBob29rIHRoYXQgYWNjZXB0cyBhIGxpc3Qgb2YgaXRlbSBwcm92aWRlcnMs
IHNvIHdlIGRvbid0IG5lZWQgdG8gaW52b2tlIHRoaXMgZGVsZWdhdGUgbWV0aG9kIHJlcGVhdGVk
bHkgZm9yIG11bHRpcGxlIGl0ZW1zLgorICAgICAgICBmb3IgKFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0ICpsaXN0IGluIHJlZ2lzdHJhdGlvbkxpc3RzKSB7CisgICAgICAgICAg
ICBOU0l0ZW1Qcm92aWRlciAqZGVmYXVsdEl0ZW1Qcm92aWRlciA9IGxpc3QuaXRlbVByb3ZpZGVy
OworICAgICAgICAgICAgaWYgKCFkZWZhdWx0SXRlbVByb3ZpZGVyKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIHJlcHJlc2VudGluZ09iamVjdHMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIGF1dG8gYWRk
aXRpb25hbERhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0p
OworICAgICAgICAgICAgW2xpc3QgZW51bWVyYXRlSXRlbXM6W3JlcHJlc2VudGluZ09iamVjdHMs
IGFkZGl0aW9uYWxEYXRhXSAoaWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhcj4gaXRlbSwgTlNV
SW50ZWdlcikgeworICAgICAgICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHJlcHJlc2VudGluZ09iamVjdEZvckNsaWVudCldKQorICAgICAgICAgICAgICAg
ICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRlbS5yZXByZXNlbnRpbmdPYmpl
Y3RGb3JDbGllbnRdOworICAgICAgICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHR5cGVJZGVudGlmaWVyRm9yQ2xpZW50KV0gJiYgW2l0ZW0gcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihkYXRhRm9yQ2xpZW50KV0pCisgICAgICAgICAgICAgICAgICAg
IFthZGRpdGlvbmFsRGF0YSBzZXRPYmplY3Q6aXRlbS5kYXRhRm9yQ2xpZW50IGZvcktleTppdGVt
LnR5cGVJZGVudGlmaWVyRm9yQ2xpZW50XTsKKyAgICAgICAgICAgIH1dOworICAgICAgICAgICAg
TlNBcnJheSAqYWRqdXN0ZWRJdGVtcyA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGFk
anVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpkZWZhdWx0
SXRlbVByb3ZpZGVyIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50aW5nT2JqZWN0cy5nZXQo
KSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV07CisgICAgICAgICAgICBpZiAo
YWRqdXN0ZWRJdGVtcy5jb3VudCkKKyAgICAgICAgICAgICAgICBbYWRqdXN0ZWRJdGVtUHJvdmlk
ZXJzIGFkZE9iamVjdHNGcm9tQXJyYXk6YWRqdXN0ZWRJdGVtc107CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0
ICpsaXN0IGluIHJlZ2lzdHJhdGlvbkxpc3RzKSB7CisgICAgICAgICAgICBpZiAoYXV0byAqZGVm
YXVsdEl0ZW1Qcm92aWRlciA9IGxpc3QuaXRlbVByb3ZpZGVyKQorICAgICAgICAgICAgICAgIFth
ZGp1c3RlZEl0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0OmRlZmF1bHRJdGVtUHJvdmlkZXJdOworICAg
ICAgICB9CisgICAgfQogCiAgICAgTlNNdXRhYmxlQXJyYXkgKmRyYWdJdGVtcyA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTphZGp1c3RlZEl0ZW1Qcm92aWRlcnMuY291bnRdOwog
ICAgIGZvciAoTlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciBpbiBhZGp1c3RlZEl0ZW1Qcm92
aWRlcnMpIHsKQEAgLTcyNjEsOCArNzI3Myw4IEBAIC0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAq
KWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBpdGVtCiAg
ICAgfQogCiAgICAgYXV0byBzdGFnZWREcmFnU291cmNlID0gX2RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5zdGFnZWREcmFnU291cmNlKCk7Ci0gICAgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9u
SW5mb0xpc3QgKnJlZ2lzdHJhdGlvbkxpc3QgPSBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQg
c2hhcmVkSW5zdGFuY2VdIHRha2VSZWdpc3RyYXRpb25MaXN0XTsKLSAgICBOU0FycmF5ICpkcmFn
SXRlbXMgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdp
c3RyYXRpb25MaXN0OnJlZ2lzdHJhdGlvbkxpc3Qgc3RhZ2VkRHJhZ1NvdXJjZTpzdGFnZWREcmFn
U291cmNlXTsKKyAgICBhdXRvICpyZWdpc3RyYXRpb25MaXN0cyA9IFtbV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxpc3RzXTsKKyAgICBO
U0FycmF5ICpkcmFnSXRlbXMgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vz
c2lvbldpdGhSZWdpc3RyYXRpb25MaXN0czpyZWdpc3RyYXRpb25MaXN0cyBzdGFnZWREcmFnU291
cmNlOnN0YWdlZERyYWdTb3VyY2VdOwogICAgIGlmICghW2RyYWdJdGVtcyBjb3VudF0pCiAgICAg
ICAgIF9wYWdlLT5kcmFnQ2FuY2VsbGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgK
aW5kZXggOWYwMDM5OTAwNTlhZjQ0MjBjMDViYjdhM2MzYjk5OWZiOGMwMDZlNC4uM2U4ODBhYjVm
NjdmNjVhNDRkMGE0ZDU1NTc3Y2M4YjNkZDU1N2QwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLmgKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRTdHJh
dGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+CiAKK2NsYXNz
IFBhc3RlYm9hcmRDdXN0b21EYXRhOwogc3RydWN0IFBhc3RlYm9hcmRJbWFnZTsKIHN0cnVjdCBQ
YXN0ZWJvYXJkV2ViQ29udGVudDsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIAogY2xh
c3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRl
Z2llcywgcHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kgewogcHVibGljOgo=
</data>
<flag name="review"
          id="396530"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380850</attachid>
            <date>2019-10-13 12:58:06 -0700</date>
            <delta_ts>2019-10-14 09:57:41 -0700</delta_ts>
            <desc>Address review feedback</desc>
            <filename>bug-202851-20191013125805.patch</filename>
            <type>text/plain</type>
            <size>81806</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI3ZGI1YmUyMTRhNWE2
YmExMGE2YTZiYWYzZDE3NTVmOGY3MWM1Yi4uZDE1ODk0NDk1YjJkYmNhMzdlNTFhZTg4NThmNGYx
YTIxZjliNjBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxOS0xMC0xMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJk
IEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGgg
U2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgc29tZSBsb2dpYyBhcm91
bmQgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEsIGluIHByZXBhcmF0aW9uIGZvciBpbXBs
ZW1lbnRpbmcgdGhlIGFzeW5jCisgICAgICAgIGNsaXBib2FyZCBBUEkuIFRoZXJlIGFyZSB0d28g
bWFpbiBnb2FscyBvZiB0aGlzIHJlZmFjdG9yaW5nOgorCisgICAgICAgIDEuIEVuYWJsZSB3cml0
aW5nIG11bHRpcGxlIGl0ZW1zIChlYWNoIGJhY2tlZCBieSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSkg
dG8gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQuCisgICAgICAgIDIuIEVuYWJsZSB3cml0aW5nIHBs
YXRmb3JtIGRhdGEgaW4gdGhlIGZvcm0gb2YgU2hhcmVkQnVmZmVycyB0byB0aGUgcGxhdGZvcm0g
cGFzdGVib2FyZC4KKworICAgICAgICBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlsczsgbm8gdGVz
dHMsIGFzIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQuCisKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisgICAgICAgIE1vdmUgUGFzdGVib2FyZEN1c3RvbURhdGEgb3V0IG9mIFBhc3RlYm9hcmQuaCBh
bmQgaW50byBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6Y29tbWl0VG9QYXN0ZWJvYXJkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKTogRGVsZXRl
ZC4KKworICAgICAgICBNb3ZlZCB0aGVzZSBtZXRob2QgaW1wbGVtZW50YXRpb25zIHRvIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoK
KworICAgICAgICBSZWZhY3RvciBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBzbyB0aGF0IGl0cyBtZW1i
ZXIgdmFyaWFibGVzIGFyZSBub3cgcHJpdmF0ZSwgYW5kIGVuY2Fwc3VsYXRlZCBiZWhpbmQgbWV0
aG9kcworICAgICAgICBBZGRpdGlvbmFsbHksIG1ha2UgaXQgc28gdGhhdCB0aGUgb25seSB3YXkg
dG8gc2V0IGRhdGEgb24gUGFzdGVib2FyZEN1c3RvbURhdGEgaXMgdG8gdXNlIHRoZSB3cml0ZVN0
cmluZywKKyAgICAgICAgd3JpdGVEYXRhLCBhbmQgd3JpdGVTdHJpbmdJbkN1c3RvbURhdGEgbWV0
aG9kcywgd2hpY2ggZW5zdXJlIHRoYXQgdGhlIFBhc3RlYm9hcmRDdXN0b21EYXRhIGlzIGFsd2F5
cyBpbiBhCisgICAgICAgIGNvbnNpc3RlbnQgc3RhdGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Q
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRDdXN0b21EYXRhRW50cnk6Om9wZXJhdG9yPSk6CisKKyAgICAgICAgUmVmYWN0b3IgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFBhc3RlYm9hcmRDdXN0b21EYXRhLCBzbyB0aGF0IGl0IGNvbnRhaW5z
IGEgbGlzdCBvZiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBlbnRyaWVzCisgICAgICAgIGluc3RlYWQg
b2YgaW5kaXZpZHVhbCBWZWN0b3JzIGFuZCBIYXNoTWFwcy4KKworICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0b21EYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nSW5DdXN0b21E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjphZGRPck1vdmVF
bnRyeVRvRW5kKToKKworICAgICAgICBNb3ZlIGxvZ2ljIGZyb20gU3RhdGljUGFzdGVib2FyZCBp
bnRvIFBhc3RlYm9hcmRDdXN0b21EYXRhLCBhbmQgcmVmYWN0b3IgdGhlc2UgbWV0aG9kcyB0byBo
YW5kbGUKKyAgICAgICAgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk+LgorCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6b3JkZXJlZFR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNTYW1lT3JpZ2luQ3VzdG9tRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6c2FtZU9yaWdpbkN1
c3RvbVN0cmluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3Rv
bURhdGE6OnJlYWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1
c3RvbURhdGE6OnJlYWRTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZvckVhY2hUeXBlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoUGxhdGZvcm1TdHJpbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZvckVhY2hDdXN0
b21TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6
OmZvckVhY2hQbGF0Zm9ybVN0cmluZ09yQnVmZmVyIGNvbnN0KToKKworICAgICAgICBNb3ZlZCB0
aGVzZSBtZXRob2QgaW1wbGVtZW50YXRpb25zIGZyb20gU3RhdGljUGFzdGVib2FyZCB0byBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSwgYW5kIGFsc28gaW50cm9kdWNlZCBzb21lIG5ldworICAgICAgICBt
ZXRob2RzIHRvIGhlbHAgaXRlcmF0ZSB0aHJvdWdoIHR5cGVzIGFuZCBkYXRhLgorCisgICAgICAg
ICogcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpzZXRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZEN1c3RvbURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Bh
c3RlYm9hcmRTdHJhdGVneS5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmRlY29kZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6aGFzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6CisgICAgICAg
IChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3RhdGljUGFzdGVib2FyZDo6dGFrZUN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljUGFzdGVib2FyZDo6U3RhdGljUGFzdGVib2FyZCk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVm
YWN0b3IgU3RhdGljUGFzdGVib2FyZCB0byBub3cgY29udGFpbiBhIFBhc3RlYm9hcmRDdXN0b21E
YXRhOyBhZGRpdGlvbmFsbHksIGFkanVzdCBzZXZlcmFsIG1ldGhvZHMgaW4KKyAgICAgICAgU3Rh
dGljUGFzdGVib2FyZCB0byBzaW1wbHkgY2FsbCBpbnRvIFBhc3RlYm9hcmRDdXN0b21EYXRhIHRv
IHdyaXRlLCByZWFkLCBvciBjbGVhciBkYXRhLgorCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVU
eXBlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cmVhZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUpOgorCisgICAgICAgIE1vdmVkIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlIGZyb20g
UGFzdGVib2FyZENvY29hLm1tIHRvCisgICAgICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2Eu
bW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmg6CisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y2hhbmdlQ291bnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6cmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZSk6CisKKyAgICAgICAgU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhIG9iamVjdHMgdG8gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQgb24gaU9T
LCBieSBnZW5lcmF0aW5nCisgICAgICAgIE5TSXRlbVByb3ZpZGVycyBmb3IgZWFjaCBvbmUuIFRo
aXMgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkYCBoZWxw
ZXIgdG8gaGFuZGxlIG11bHRpcGxlCisgICAgICAgIHJlZ2lzdHJhdGlvbiBsaXN0cywgcmVuYW1l
cyBpdCB0byBgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZGAgKHBsdXJhbCksIGFuZCB0aGVuIHJl
aW1wbGVtZW50cworICAgICAgICBgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkYCBpbiB0ZXJtcyBv
ZiBgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZGAuCisKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uTGlzdCk6CisKKyAg
ICAgICAgQWRqdXN0IHRoZXNlIHRvIHVzZSBnZXR0ZXJzIG9uIFBhc3RlYm9hcmRDdXN0b21EYXRh
IGluc3RlYWQgb2YgYWNjZXNzaW5nIHRoZSBtZW1iZXIgdmFyaWFibGVzIGRpcmVjdGx5LgorCisg
ICAgICAgICogcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW06CisgICAg
ICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgaW5pdF0pOgorICAgICAgICAoLVtXZWJJ
dGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6XSk6CisgICAgICAg
ICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgY2xlYXJSZWdpc3RyYXRpb25MaXN0c10pOgor
ICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHRha2VSZWdpc3RyYXRpb25MaXN0
c10pOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0
aW9uTGlzdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2Fy
ZCB0YWtlUmVnaXN0cmF0aW9uTGlzdF0pOiBEZWxldGVkLgorCisgICAgICAgIFJlZmFjdG9yIHJl
Z2lzdHJhdGlvbiBsaXN0IHN0YWdpbmcgb24gV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB0byBz
dXBwb3J0IG11bHRpcGxlIHJlZ2lzdHJhdGlvbiBsaXN0cywgZWFjaAorICAgICAgICByZXByZXNl
bnRpbmcgYSBzaW5nbGUgaXRlbSBwcm92aWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9Q
YXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkV3JpdGVyLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUGFzdGVib2FyZFdyaXRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVi
b2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZSk6CisKKyAgICAgICAgU3VwcG9ydCB3cml0
aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIG9iamVjdHMgdG8gdGhlIHBsYXRmb3Jt
IHBhc3RlYm9hcmQgb24gbWFjT1MsIGJ5IGNyZWF0aW5nIGFuZAorICAgICAgICBzZXR0aW5nIE5T
UGFzdGVib2FyZEl0ZW1zIGZvciBlYWNoIGN1c3RvbSBkYXRhLiBUaGlzIG1lYW5zIHRoYXQgaW5z
dGVhZCBvZiB1c2luZyBsZWdhY3kgbWFjT1MgcGFzdGVib2FyZCB0eXBlcywKKyAgICAgICAgd2Ug
bmVlZCB0byB1c2UgdGhlICJtb2Rlcm4iIE5TUGFzdGVib2FyZFR5cGVzIHdoZW4gd3JpdGluZyBl
YWNoIGl0ZW0uIFRoaXMgaXMgYmVjYXVzZSBOU1Bhc3RlYm9hcmRJdGVtIHF1aWV0bHkKKyAgICAg
ICAgZmFpbHMgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCBkYXRhIGZvciBhIGxlZ2FjeSBwYXN0ZWJv
YXJkIHR5cGUuCisKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBhc3RlYm9hcmRJdGVtKToKKwog
MjAxOS0xMC0xMCAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnNldEZyYW1lUmF0ZVdpdGhQcmVzZXQgc2hvdWxkIG5v
dCB1c2UgcHJlc2V0IGFmdGVyIG1vdmluZyBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1ZTFhMTFiNjcxMGQ2ZWE0
YTMxOGFmMmQyN2M5OTlmNTdjODM1Mzk4Li5hZmQ4N2VmZGZlZTg3ZTIzOGRjZGYwYzIxZjY5YzUw
ZTAxYjFiMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTEwLTEyICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDbGlwYm9hcmQgQVBJ
XSBTdXBwb3J0IHdyaXRpbmcgbXVsdGlwbGUgUGFzdGVib2FyZEN1c3RvbURhdGEgd2l0aCBTaGFy
ZWRCdWZmZXJzIHRvIHRoZSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBTZWUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk+OjplbmNvZGUpOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk+Ojpk
ZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRh
Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9t
RGF0YT46OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
OgorCisgICAgICAgIEVuY29kZSBhbmQgZGVjb2RlIG1fcGxhdGZvcm1CaW5hcnlEYXRhIHdoZW4g
c2VuZGluZyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBvdmVyIElQQy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9h
cmRQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6
d2l0aFNlbmRlcjpdKToKKyAgICAgICAgKGFsbFBhc3RlYm9hcmRJdGVtT3JpZ2luc01hdGNoT3Jp
Z2luKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkSGFuZGxlQWRkaXRpb25hbERyYWdJ
dGVtc1JlcXVlc3Q6XSk6CisKKyAgICAgICAgVHdlYWsgc2V2ZXJhbCBtZXRob2RzIHRvIHVzZSB0
aGUgbmV3IGdldHRlcnMgb24gUGFzdGVib2FyZEN1c3RvbURhdGEgaW5zdGVhZCBvZiBhY2Nlc3Np
bmcgdGhlIG1lbWJlciB2YXJpYWJsZXMKKyAgICAgICAgZGlyZWN0bHkuCisKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBjbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZV0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF9wcmVwYXJlVG9EcmFnUHJvbWlzZWRBdHRhY2htZW50Ol0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9u
V2l0aFJlZ2lzdHJhdGlvbkxpc3RzOnN0YWdlZERyYWdTb3VyY2U6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZHJhZ0ludGVyYWN0aW9uOml0ZW1zRm9yQmVnaW5uaW5nU2Vzc2lvbjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vz
c2lvbldpdGhSZWdpc3RyYXRpb25MaXN0OnN0YWdlZERyYWdTb3VyY2U6XSk6IERlbGV0ZWQuCisK
KyAgICAgICAgQWRqdXN0IHRoZXNlIG1ldGhvZHMgdG8gaGFuZGxlIG11bHRpcGxlIHN0YWdlZCBp
dGVtIHByb3ZpZGVycyAoZm9yIG5vdywgaXQgcmVtYWlucyB0aGF0IGlPUyBkcmFnIGFuZCBkcm9w
CisgICAgICAgIGNvZGVwYXRocyB3aWxsIHN0aWxsIG9ubHkgd3JpdGUgYSBzaW5nbGUgaXRlbSB0
byB0aGUgcGFzdGVib2FyZCkuCisKIDIwMTktMTAtMTAgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlh
LmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2ZUxvYWQgc2hvdWxkIHVzZSBDb21wbGV0aW9uSGFu
ZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDRiYTcxZmI4MDE3NjkxNDhlODcz
NGI5ZmEwNDQ1NGNmNmI4MTc2NDUuLjA3YTI1NjIzNTRjZTg5NWRhOWViYWRiNmM1MjgxZDM4YTdh
OWFhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
OS0xMC0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ2xpcGJvYXJkIEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0
b21EYXRhIHdpdGggU2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgU2VlIFdlYkNvcmUgQ2hhbmdlTG9nIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaDoKKwogMjAxOS0xMC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ2xpcGJvYXJkIEFQSV0gUmVmYWN0b3IgUGFzdGVib2FyZCBp
dGVtIHJlYWRpbmcgZnVuY3Rpb25zIHRvIHdvcmsgb24gYm90aCBpT1MgYW5kIG1hY09TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQppbmRleCAwNzhhNTY2ZjNhZjE0ZjY2YjUwMmQ1YjYyZmFlOGI2ZTNjYzY1M2Uw
Li5mMjhlYmRmODhlM2QwZjQwMzM3YmY1NWRlYWY2YzFhYjFkNzdhNTA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKQEAgLTkzMCw2ICs5MzAsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgKICAgICBwbGF0Zm9ybS9QT0RS
ZWRCbGFja1RyZWUuaAogICAgIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaAorICAgIHBsYXRmb3JtL1Bh
c3RlYm9hcmRDdXN0b21EYXRhLmgKICAgICBwbGF0Zm9ybS9QYXN0ZWJvYXJkSXRlbUluZm8uaAog
ICAgIHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCiAgICAgcGxhdGZvcm0vUGFzdGVib2Fy
ZFdyaXRlckRhdGEuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBhZTI1NzY1NDM1OWFmYTliYzQzNjRjZGNh
NzRiZjIyYTMzMDJkM2VhLi41ZjgxOGE1ZmE4YzVmODIxNzlhMTg5MmUwMWQ5ZGE4M2ZkYWRjY2E0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTcyNCw2ICsxNzI0LDcgQEAgcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5jcHAKIHBsYXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5jcHAKIHBsYXRmb3Jt
L05vdEltcGxlbWVudGVkLmNwcAogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKK3BsYXRmb3JtL1Bh
c3RlYm9hcmRDdXN0b21EYXRhLmNwcAogcGxhdGZvcm0vUGFzdGVib2FyZFdyaXRlckRhdGEuY3Bw
CiBwbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuY3BwCiBwbGF0Zm9ybS9QbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA5
NTc5NDNjYzRmZWJlMzlkZDcwYTEyOGVlNmM0ZjcxODFhNjAyMWQuLjk3ZGIxNWUzNjZmMmE5YTA2
ZDM5NjdjZDZhY2UzNGRmOTU5N2I2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMTk4
LDYgKzE5OCw3IEBAIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQogcGxh
dGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0KIHBsYXRmb3JtL2Nv
Y29hL1BhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tCiBwbGF0Zm9ybS9jb2NvYS9QYXN0
ZWJvYXJkQ29jb2EubW0KK3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2Eu
bW0KIHBsYXRmb3JtL2NvY29hL1BsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tCiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQogcGxhdGZvcm0vY29jb2Ev
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0OTU1NDA0Yzg4OWFkY2I0ODc4
YTY4ZGU2YWVkZmFjOTlkOGM2YWVjLi4wZDNhMGZhN2NhOGMyYjUzOGViYjg0MTFiZTM5YTg5YmVj
MDI4NWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC00OTA1LDYgKzQ5MDUsNyBAQAogCQlGNEQ0M0Q2NjIxODgwMzhCMDBFQ0VD
QUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0M0Q2NDIxODgwMkU2MDBFQ0VDQUMgLyogU2VyaWFs
aXplZEF0dGFjaG1lbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRjRFNTdFREMyMTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEU1N0VEQTIxM0YzRjVGMDA0RUE5OEUgLyogRm9udEF0dHJpYnV0ZUNoYW5nZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEU1N0VFMTIxM0Y0
MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RTU3RURGMjEzRjQzNEEwMDRFQTk4
RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUY0RkIzNEZDMjM1MEM4NUQwMEYwMDk0QSAvKiBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjRGQjM0RkEyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21E
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RjUwNjY0RjgxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTA2NjRGNjE1N0Y1MkRDMDBBQzIy
NkYgLyogRm9ybUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJRjUxM0EzRUExNUZGNDg0MTAwMTUyNkRC
IC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTEzQTNFOTE1RkY0ODQxMDAxNTI2REIgLyogVmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1NDRGNzg3MTVD
RkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oICovOyB9OwpAQCAtMTUyNDAsNiArMTUy
NDEsOSBAQAogCQlGNEU1N0VEQTIxM0YzRjVGMDA0RUE5OEUgLyogRm9udEF0dHJpYnV0ZUNoYW5n
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEF0dHJpYnV0ZUNoYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjRFNTdFREYyMTNGNDM0QTAwNEVBOThFIC8qIFdlYkNvcmVOU0Zv
bnRNYW5hZ2VyRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVOU0ZvbnRNYW5hZ2VyRXh0
cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RTU3RUUwMjEzRjQzNEEwMDRF
QTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkNvcmVOU0ZvbnRNYW5hZ2VyRXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNEZCMzRGQTIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2FyZEN1c3RvbURhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEN1c3RvbURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjRGQjM0RkIyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0
b21EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRGQjM1MDAyMzUwQzk2MjAwRjAwOTRBIC8q
IFBhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNTA2NjRGNjE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRy
b2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybUNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUxM0EzRTkxNUZGNDg0MTAwMTUyNkRC
IC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMjcyOCw2ICsyMjczMiw3IEBACiAJCQkJQTE4ODkwQUQxQUExM0YyNTAwMjZDMzAx
IC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLmggKi8sCiAJCQkJQTE4ODkwQUMxQUEx
M0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tICovLAogCQkJ
CTlCRUQyQ0FGMUY3Q0MwNjIwMDY2NjAxOCAvKiBQYXN0ZWJvYXJkQ29jb2EubW0gKi8sCisJCQkJ
RjRGQjM1MDAyMzUwQzk2MjAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW0g
Ki8sCiAJCQkJRjQ2MjhBOUUyMzREM0JCRjAwQkM4ODRDIC8qIFBsYXRmb3JtUGFzdGVib2FyZENv
Y29hLm1tICovLAogCQkJCTUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcu
aCAqLywKIAkJCQlDREEyOUEwODFDQkQ5OUY0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlLmggKi8sCkBAIC0yNTU5NCw2ICsyNTU5OSw4IEBACiAJCQkJNDE4NEY1MTUxRUFGMDU5
ODAwRjE4QkYwIC8qIE9yaWVudGF0aW9uTm90aWZpZXIuaCAqLywKIAkJCQkyRUUwMkExRTFGNzMy
NDI4MDAwNkFGNzIgLyogUGFzdGVib2FyZC5jcHAgKi8sCiAJCQkJNEIyNzA4QzUwQUYxOUVFNDAw
NjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLywKKwkJCQlGNEZCMzRGQjIzNTBDODVEMDBGMDA5NEEg
LyogUGFzdGVib2FyZEN1c3RvbURhdGEuY3BwICovLAorCQkJCUY0RkIzNEZBMjM1MEM4NUQwMEYw
MDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oICovLAogCQkJCUY0OTc4Njg3MUZGNDVGQTUw
MEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLywKIAkJCQlDNUY3NjVCNDE0RTFENDE0
MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi8sCiAJCQkJMUFGNUU0RDIxRTU2NzM1
QTAwNEExRjAxIC8qIFBhc3RlYm9hcmRXcml0ZXJEYXRhLmNwcCAqLywKQEAgLTMxMTkwLDYgKzMx
MTk3LDcgQEAKIAkJCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VGMjY5IC8qIFBhc3N3
b3JkSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEy
N0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRGQjM0RkMyMzUwQzg1RDAw
RjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDk3
ODY4ODFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNTk4OTA1NzE0RTlDMjgwMDBFOEQxOEIgLyogUGFzdGVib2FyZFN0cmF0ZWd5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUY1RTRFMzFFNTc3OUIxMDA0QTFGMDEgLyogUGFzdGVib2Fy
ZFdyaXRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RGF0YVRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCmlu
ZGV4IDVjNzFiMzY4ZTYwMjhiMDE3NGYzYTdmZGY0Mzg4NjRkODg4Zjg4ZGMuLjBkNDdiNzM5MTkz
NTVlMmM3MTAwZThjZTE5NjBhNDNkNDhmOGE2ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EYXRhVHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNm
ZXIuY3BwCkBAIC00MjYsMTUgKzQyNiwxOCBAQCB2b2lkIERhdGFUcmFuc2Zlcjo6Y29tbWl0VG9Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIG5hdGl2ZVBhc3RlYm9hcmQpCiAgICAgQVNTRVJUKGlzPFN0
YXRpY1Bhc3RlYm9hcmQ+KCptX3Bhc3RlYm9hcmQpICYmICFpczxTdGF0aWNQYXN0ZWJvYXJkPihu
YXRpdmVQYXN0ZWJvYXJkKSk7CiAgICAgUGFzdGVib2FyZEN1c3RvbURhdGEgY3VzdG9tRGF0YSA9
IGRvd25jYXN0PFN0YXRpY1Bhc3RlYm9hcmQ+KCptX3Bhc3RlYm9hcmQpLnRha2VDdXN0b21EYXRh
KCk7CiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuY3Vz
dG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpIHsKLSAgICAgICAgY3VzdG9tRGF0YS5vcmlnaW4g
PSBtX29yaWdpbklkZW50aWZpZXI7CisgICAgICAgIGN1c3RvbURhdGEuc2V0T3JpZ2luKG1fb3Jp
Z2luSWRlbnRpZmllcik7CiAgICAgICAgIG5hdGl2ZVBhc3RlYm9hcmQud3JpdGVDdXN0b21EYXRh
KGN1c3RvbURhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IGN1c3RvbURhdGEucGxhdGZvcm1EYXRhKQotICAgICAgICBuYXRpdmVQYXN0ZWJvYXJk
LndyaXRlU3RyaW5nKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwotICAgIGZvciAoYXV0byYgZW50
cnkgOiBjdXN0b21EYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhKQotICAgICAgICBuYXRpdmVQYXN0
ZWJvYXJkLndyaXRlU3RyaW5nKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworICAgIGN1c3RvbURh
dGEuZm9yRWFjaFBsYXRmb3JtU3RyaW5nKFsmXSAoYXV0byYgdHlwZSwgYXV0byYgc3RyaW5nKSB7
CisgICAgICAgIG5hdGl2ZVBhc3RlYm9hcmQud3JpdGVTdHJpbmcodHlwZSwgc3RyaW5nKTsKKyAg
ICB9KTsKKworICAgIGN1c3RvbURhdGEuZm9yRWFjaEN1c3RvbVN0cmluZyhbJl0gKGF1dG8mIHR5
cGUsIGF1dG8mIHN0cmluZykgeworICAgICAgICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlU3RyaW5n
KHR5cGUsIHN0cmluZyk7CisgICAgfSk7CiB9CiAKICNpZiAhRU5BQkxFKERSQUdfU1VQUE9SVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGYyNWYy
OGNmMWM3ZWE3MGI0MWNhY2YzZWU1NTFjYTE2ODk0ZDdlNTMuLmVhMWJlNTRkMmQ2ZTE4OTZkZmZk
NzI5ODEwY2NlMDU0Y2IyMGFiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2Fy
ZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgog
ICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGVsZW1lbnRSYW5n
ZS5wdHIoKSwgb3V0VHlwZXMsIG91dERhdGEpOwogCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3Rl
Ym9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSk7Ci0gICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVi
b2FyZEN1c3RvbURhdGEgeyBkb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
LCB7IH0sIHsgfSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOworICAgIG91dERhdGEuYXBw
ZW5kKFBhc3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBh
c3RlYm9hcmQoKSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCiAgICAgaWYgKGF1dG8g
YXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShlbGVtZW50UmFuZ2UucHRyKCkpKSB7
CiAgICAgICAgIGlmIChhdXRvIHdlYkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJl
c2VudGF0aW9uKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKaW5kZXgg
OGY5YmFiODQ1NjEwZDBmOTEwN2Q4MjMwZGYyM2VlZjFmYjAxYzE0Yy4uZTczNGIzOGFlOGRiNDgx
OWExNWMyZWY5ODIxNGYyZDhlZjNiYTkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5jcHAKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTEsNDAgKzQ5LDYgQEAgYm9vbCBQYXN0ZWJvYXJkOjpjYW5FeHBv
c2VVUkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyhjb25zdCBTdHJpbmcmIHVybFMK
ICAgICByZXR1cm4gdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCB1cmwucHJvdG9jb2xJ
c0Jsb2IoKSB8fCB1cmwucHJvdG9jb2xJc0RhdGEoKTsKIH0KIAotUmVmPFNoYXJlZEJ1ZmZlcj4g
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAg
Y29uc3Qgc3RhdGljIHVuc2lnbmVkIGN1cnJlbnRDdXN0b21EYXRhU2VyaWFsaXphdGlvblZlcnNp
b24gPSAxOwotCi0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwotICAgIGVu
Y29kZXIgPDwgY3VycmVudEN1c3RvbURhdGFTZXJpYWxpemF0aW9uVmVyc2lvbjsKLSAgICBlbmNv
ZGVyIDw8IG9yaWdpbjsKLSAgICBlbmNvZGVyIDw8IHNhbWVPcmlnaW5DdXN0b21EYXRhOwotICAg
IGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Ci19Ci0KLVBhc3RlYm9h
cmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGNvbnN0
IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBtYXhT
dXBwb3J0ZWREYXRhU2VyaWFsaXphdGlvblZlcnNpb25OdW1iZXIgPSAxOwotCi0gICAgUGFzdGVi
b2FyZEN1c3RvbURhdGEgcmVzdWx0OwotICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlciB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBi
dWZmZXIuc2l6ZSgpIH07Ci0gICAgdW5zaWduZWQgdmVyc2lvbjsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHZlcnNpb24pIHx8IHZlcnNpb24gPiBtYXhTdXBwb3J0ZWREYXRhU2VyaWFsaXphdGlv
blZlcnNpb25OdW1iZXIpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5vcmlnaW4pKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuc2FtZU9yaWdpbkN1c3RvbURhdGEpKQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQub3JkZXJlZFR5cGVzKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KICNpZiAhUExB
VEZPUk0oQ09DT0EpCiAKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRBbGxTdHJpbmdz
KGNvbnN0IFN0cmluZyYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRl
eCA2OTg3ZWQyNTY1M2ZiNmM5YzY4YjNhMzdhZjc3NjA0YzA4YjY2OTUwLi5jYmZmY2EyNzViMGJk
MWEzNDE3ODU2NWZhY2QwZDlmNmE2NWU2YWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkRyYWdJ
bWFnZS5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRDdXN0b21EYXRhLmgiCiAjaW5jbHVkZSAiUGFz
dGVib2FyZEl0ZW1JbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvTGlzdEhhc2hTZXQuaD4KQEAgLTE2MSwyMSArMTYyLDYgQEAgc3RydWN0IFBhc3RlYm9hcmRG
aWxlUmVhZGVyIHsKICAgICB2aXJ0dWFsIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKIH07
CiAKLS8vIEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250ZW50cyBvZiBzYW1l
T3JpZ2luQ3VzdG9tRGF0YSBhcmUgbm90IGFjY2Vzc2libGUgYWNyb3NzIGRpZmZlcmVudCBvcmln
aW5zLgotc3RydWN0IFBhc3RlYm9hcmRDdXN0b21EYXRhIHsKLSAgICBTdHJpbmcgb3JpZ2luOwot
ICAgIFZlY3RvcjxTdHJpbmc+IG9yZGVyZWRUeXBlczsKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBwbGF0Zm9ybURhdGE7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gc2FtZU9yaWdp
bkN1c3RvbURhdGE7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2hhcmVkQnVmZmVyPiBjcmVh
dGVTaGFyZWRCdWZmZXIoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzdGVi
b2FyZEN1c3RvbURhdGEgZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImKTsKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBjaGFy
KiBjb2NvYVR5cGUoKTsKLSNlbmRpZgotfTsKLQogY2xhc3MgUGFzdGVib2FyZCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGFzdGVib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1
c3RvbURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkwYTQ5MDcwNTVhZTc4ZTkyZGI0ZWQ2NGJkZjcxMjZkZTNkNTI1
YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
Q3VzdG9tRGF0YS5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEN1c3RvbURhdGEuaCIKKworI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFZh
cmlhbnQ8U3RyaW5nLCBSZWY8U2hhcmVkQnVmZmVyPj4gY29weVBsYXRmb3JtRGF0YShjb25zdCBW
YXJpYW50PFN0cmluZywgUmVmPFNoYXJlZEJ1ZmZlcj4+JiBvdGhlcikKK3sKKyAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG90aGVyKSkKKyAgICAgICAgcmV0dXJuIHsgV1RG
OjpnZXQ8U3RyaW5nPihvdGhlcikgfTsKKworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZjxTaGFyZWRCdWZmZXI+PihvdGhlcikpCisgICAgICAgIHJldHVybiB7IFdURjo6Z2V0PFJl
ZjxTaGFyZWRCdWZmZXI+PihvdGhlcikuY29weVJlZigpIH07CisKKyAgICByZXR1cm4geyB9Owor
fQorCitQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5
KGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnkmIGVudHJ5KQorICAgIDogdHlwZShlbnRy
eS50eXBlKQorICAgICwgY3VzdG9tRGF0YShlbnRyeS5jdXN0b21EYXRhKQorICAgICwgcGxhdGZv
cm1EYXRhKGNvcHlQbGF0Zm9ybURhdGEoZW50cnkucGxhdGZvcm1EYXRhKSkKK3sKK30KKworUGFz
dGVib2FyZEN1c3RvbURhdGFFbnRyeTo6UGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeShjb25zdCBT
dHJpbmcmIGRhdGFUeXBlKQorICAgIDogdHlwZShkYXRhVHlwZSkKK3sKK30KKworUGFzdGVib2Fy
ZEN1c3RvbURhdGFFbnRyeTo6UGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeSgpID0gZGVmYXVsdDsK
K1Bhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk6OlBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnkoUGFz
dGVib2FyZEN1c3RvbURhdGFFbnRyeSYmKSA9IGRlZmF1bHQ7CisKK1Bhc3RlYm9hcmRDdXN0b21E
YXRhRW50cnkmIFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk6Om9wZXJhdG9yPShjb25zdCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5JiBlbnRyeSkKK3sKKyAgICB0eXBlID0gZW50cnkudHlwZTsK
KyAgICBjdXN0b21EYXRhID0gZW50cnkuY3VzdG9tRGF0YTsKKyAgICBwbGF0Zm9ybURhdGEgPSBj
b3B5UGxhdGZvcm1EYXRhKGVudHJ5LnBsYXRmb3JtRGF0YSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6UGFzdGVib2FyZEN1c3RvbURhdGEoKSA9IGRlZmF1
bHQ7CitQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6UGFzdGVib2FyZEN1c3RvbURhdGEoY29uc3QgUGFz
dGVib2FyZEN1c3RvbURhdGEmKSA9IGRlZmF1bHQ7CitQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6UGFz
dGVib2FyZEN1c3RvbURhdGEoUGFzdGVib2FyZEN1c3RvbURhdGEmJikgPSBkZWZhdWx0OworUGFz
dGVib2FyZEN1c3RvbURhdGE6On5QYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpID0gZGVmYXVsdDsKKwor
UGFzdGVib2FyZEN1c3RvbURhdGE6OlBhc3RlYm9hcmRDdXN0b21EYXRhKFN0cmluZyYmIG9yaWdp
biwgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk+JiYgZGF0YSkKKyAgICA6IG1fb3Jp
Z2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQoreworfQor
CitSZWY8U2hhcmVkQnVmZmVyPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVm
ZmVyKCkgY29uc3QKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgY3VycmVudEN1c3RvbURhdGFT
ZXJpYWxpemF0aW9uVmVyc2lvbiA9IDE7CisKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IGVuY29kZXI7CisgICAgZW5jb2RlciA8PCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25W
ZXJzaW9uOworICAgIGVuY29kZXIgPDwgbV9vcmlnaW47CisgICAgZW5jb2RlciA8PCBzYW1lT3Jp
Z2luQ3VzdG9tU3RyaW5nRGF0YSgpOworICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7Cisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKK30KKworUGFzdGVib2FyZEN1c3RvbURhdGEgUGFzdGVib2FyZEN1c3Rv
bURhdGE6OmZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7Cisg
ICAgY29uc3RleHByIHVuc2lnbmVkIG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lv
bk51bWJlciA9IDE7CisKKyAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1bHQ7CisgICAgYXV0
byBkZWNvZGVyID0gYnVmZmVyLmRlY29kZXIoKTsKKyAgICB1bnNpZ25lZCB2ZXJzaW9uOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1heFN1cHBvcnRlZERh
dGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fb3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21TdHJpbmdE
YXRhOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFN0cmluZz4gb3JkZXJlZFR5cGVz
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGZvciAoYXV0byYgdHlwZSA6IG9yZGVyZWRUeXBlcykKKyAgICAgICAgcmVz
dWx0LndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKHR5cGUsIHNhbWVPcmlnaW5DdXN0b21TdHJpbmdE
YXRhLmdldCh0eXBlKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBhc3RlYm9h
cmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgYWRkT3JNb3ZlRW50cnlUb0VuZCh0eXBlKS5wbGF0Zm9ybURhdGEg
PSB7IHZhbHVlIH07Cit9CisKK3ZvaWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3sKKyAgICBhZGRP
ck1vdmVFbnRyeVRvRW5kKHR5cGUpLnBsYXRmb3JtRGF0YSA9IHsgV1RGTW92ZShkYXRhKSB9Owor
fQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZ0luQ3VzdG9tRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgYWRkT3JNb3Zl
RW50cnlUb0VuZCh0eXBlKS5jdXN0b21EYXRhID0gdmFsdWU7Cit9CisKK1Bhc3RlYm9hcmRDdXN0
b21EYXRhRW50cnkmIFBhc3RlYm9hcmRDdXN0b21EYXRhOjphZGRPck1vdmVFbnRyeVRvRW5kKGNv
bnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGluZGV4ID0gbV9kYXRhLmZpbmRNYXRjaGlu
ZyhbJl0gKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS50eXBlID09IHR5cGU7
CisgICAgfSk7CisgICAgYXV0byBlbnRyeSA9IGluZGV4ID09IG5vdEZvdW5kID8gUGFzdGVib2Fy
ZEN1c3RvbURhdGFFbnRyeSh0eXBlKSA6IG1fZGF0YVtpbmRleF07CisgICAgaWYgKGluZGV4ICE9
IG5vdEZvdW5kKQorICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4KTsKKyAgICBtX2RhdGEuYXBw
ZW5kKFdURk1vdmUoZW50cnkpKTsKKyAgICByZXR1cm4gbV9kYXRhLmxhc3QoKTsKK30KKwordm9p
ZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y2xlYXIoKQoreworICAgIG1fZGF0YS5jbGVhcigpOwor
fQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUp
Cit7CisgICAgbV9kYXRhLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZdIChhdXRvJiBlbnRyeSkgewor
ICAgICAgICByZXR1cm4gZW50cnkudHlwZSA9PSB0eXBlOworICAgIH0pOworfQorCitQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSYgUGFzdGVib2FyZEN1c3RvbURhdGE6Om9wZXJhdG9yPShjb25zdCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSYgb3RoZXIpCit7CisgICAgbV9vcmlnaW4gPSBvdGhlci5vcmlnaW4o
KTsKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCitW
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6b3JkZXJlZFR5cGVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRhLm1hcChbJl0gKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJl
dHVybiBlbnRyeS50eXBlOworICAgIH0pOworfQorCitib29sIFBhc3RlYm9hcmRDdXN0b21EYXRh
OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fZGF0YS5pc0VtcHR5KCk7Cit9CisK
K2Jvb2wgUGFzdGVib2FyZEN1c3RvbURhdGE6Omhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbm90Rm91bmQgIT0gbV9kYXRhLmZpbmRNYXRjaGluZyhbJl0gKGF1
dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiAhZW50cnkuY3VzdG9tRGF0YS5pc051bGwoKTsK
KyAgICB9KTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFzdGVib2FyZEN1c3RvbURh
dGE6OnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBjdXN0b21EYXRhOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2RhdGEp
CisgICAgICAgIGN1c3RvbURhdGEuc2V0KGVudHJ5LnR5cGUsIGVudHJ5LmN1c3RvbURhdGEpOwor
ICAgIHJldHVybiBjdXN0b21EYXRhOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6cmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZGF0YSkgeworICAgICAgICBpZiAoZW50cnkudHlwZSAh
PSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KGVudHJ5LnBsYXRmb3JtRGF0YSkpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihXVEY6OmdldDxSZWY8U2hhcmVkQnVmZmVyPj4oZW50
cnkucGxhdGZvcm1EYXRhKS5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIHJldHVybiBudWxscHRyOworfQorCitTdHJpbmcgUGFzdGVib2FyZEN1c3RvbURhdGE6
OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX2RhdGEpIHsKKyAgICAgICAgaWYgKGVudHJ5LnR5cGUgIT0gdHlwZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0
cmluZz4oZW50cnkucGxhdGZvcm1EYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6OmdldDxT
dHJpbmc+KGVudHJ5LnBsYXRmb3JtRGF0YSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKK3sKKyAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9kYXRhKSB7CisgICAgICAgIGlmIChlbnRyeS50eXBlID09IHR5cGUp
CisgICAgICAgICAgICByZXR1cm4gZW50cnkuY3VzdG9tRGF0YTsKKyAgICB9CisgICAgcmV0dXJu
IHsgfTsKK30KKwordm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Zm9yRWFjaFR5cGUoRnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9kYXRhKQorICAgICAgICBmdW5jdGlvbihlbnRyeS50eXBlKTsKK30KKwor
dm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Zm9yRWFjaFBsYXRmb3JtU3RyaW5nKEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpPiYmIGZ1bmN0aW9u
KSBjb25zdAoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2RhdGEpIHsKKyAgICAgICAgaWYg
KCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oZW50cnkucGxhdGZvcm1EYXRhKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gc3RyaW5nID0gV1RGOjpnZXQ8U3Ry
aW5nPihlbnRyeS5wbGF0Zm9ybURhdGEpOworICAgICAgICBpZiAoIXN0cmluZy5pc051bGwoKSkK
KyAgICAgICAgICAgIGZ1bmN0aW9uKGVudHJ5LnR5cGUsIHN0cmluZyk7CisgICAgfQorfQorCit2
b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoQ3VzdG9tU3RyaW5nKEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpPiYmIGZ1bmN0aW9uKSBj
b25zdAoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2RhdGEpIHsKKyAgICAgICAgaWYgKCFl
bnRyeS5jdXN0b21EYXRhLmlzTnVsbCgpKQorICAgICAgICAgICAgZnVuY3Rpb24oZW50cnkudHlw
ZSwgZW50cnkuY3VzdG9tRGF0YSk7CisgICAgfQorfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmb3JFYWNoUGxhdGZvcm1TdHJpbmdPckJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgVmFyaWFudDxTdHJpbmcsIFJlZjxTaGFyZWRCdWZmZXI+PiYgZGF0
YSk+JiYgZnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZGF0YSkg
eworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnkucGxhdGZvcm1EYXRhOworICAgICAgICBpZiAo
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihkYXRhKSAmJiAhV1RGOjpnZXQ8U3RyaW5n
PihkYXRhKS5pc051bGwoKSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVm
ZmVyPj4oZGF0YSkpCisgICAgICAgICAgICBmdW5jdGlvbihlbnRyeS50eXBlLCBkYXRhKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiYWZjNjg1YjI3YWExZmEy
YmU2YTMxMGM0NDg3OWQwYWNhYzk0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IFBhc3RlYm9hcmRD
dXN0b21EYXRhRW50cnkgeworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRDdXN0b21EYXRh
RW50cnkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5KGNv
bnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnkmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5KFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnkmJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeSYgb3BlcmF0b3I9KGNvbnN0
IFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnkmIG90aGVyRGF0YSk7CisgICAgUGFzdGVib2FyZEN1
c3RvbURhdGFFbnRyeShjb25zdCBTdHJpbmcmIHR5cGUpOworCisgICAgU3RyaW5nIHR5cGU7Cisg
ICAgU3RyaW5nIGN1c3RvbURhdGE7CisgICAgVmFyaWFudDxTdHJpbmcsIFJlZjxTaGFyZWRCdWZm
ZXI+PiBwbGF0Zm9ybURhdGE7Cit9OworCitjbGFzcyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZEN1c3RvbURhdGEoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YShTdHJpbmcmJiBvcmlnaW4sIFZlY3Rv
cjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YShQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIH5QYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpOworCisgICAgY29uc3Qg
U3RyaW5nJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHZvaWQgc2V0
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKSB7IG1fb3JpZ2luID0gb3JpZ2luOyB9CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGVTaGFyZWRCdWZmZXIoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzdGVib2FyZEN1c3RvbURhdGEgZnJv
bVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImKTsKKworICAgIFN0cmluZyByZWFkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
cmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0OworICAgIFN0cmluZyByZWFkU3Ry
aW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CisKKyAgICB2b2lkIHdy
aXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
dm9pZCB3cml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRh
dGEpOworICAgIHZvaWQgd3JpdGVTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGNs
ZWFyKGNvbnN0IFN0cmluZyYgdHlwZSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FUeXBlKCk7CisjZW5kaWYKKworICAg
IHZvaWQgZm9yRWFjaFR5cGUoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgY29uc3Q7
CisgICAgdm9pZCBmb3JFYWNoUGxhdGZvcm1TdHJpbmcoRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk+JiYpIGNvbnN0OworICAgIHZvaWQgZm9yRWFj
aFBsYXRmb3JtU3RyaW5nT3JCdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFZhcmlhbnQ8U3RyaW5nLCBSZWY8U2hhcmVkQnVmZmVyPj4mIGRhdGEpPiYmKSBjb25z
dDsKKyAgICB2b2lkIGZvckVhY2hDdXN0b21TdHJpbmcoRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk+JiYpIGNvbnN0OworCisgICAgYm9vbCBoYXNE
YXRhKCkgY29uc3Q7CisgICAgYm9vbCBoYXNTYW1lT3JpZ2luQ3VzdG9tRGF0YSgpIGNvbnN0Owor
CisgICAgVmVjdG9yPFN0cmluZz4gb3JkZXJlZFR5cGVzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgUGFzdGVib2FyZEN1c3RvbURhdGEmIG9wZXJhdG9yPShjb25zdCBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSYgb3RoZXJEYXRhKTsKKworICAgIGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9t
RGF0YUVudHJ5PiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCitwcml2YXRlOgor
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkg
Y29uc3Q7CisgICAgUGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeSYgYWRkT3JNb3ZlRW50cnlUb0Vu
ZChjb25zdCBTdHJpbmcmKTsKKworICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBWZWN0b3I8UGFz
dGVib2FyZEN1c3RvbURhdGFFbnRyeT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0
ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAppbmRl
eCA1NzdjYWY4OTViZWIxOTc5ODk5MjcwMWVkNWZmOGFjNzA1MjBmMzFiLi5lZDg2MDg1ZmQ3NjI3
ODU3MGFjNmVjZGMyMzc0NTdiYzA1NDMwNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaApAQCAtMzEsMTMgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENvbG9yOworY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBjbGFz
cyBTZWxlY3Rpb25EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogc3RydWN0IFBhc3RlYm9hcmRJ
bWFnZTsKIHN0cnVjdCBQYXN0ZWJvYXJkSXRlbUluZm87CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsK
IHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YTsKIAogY2xhc3MgUGFzdGVib2FyZFN0cmF0ZWd5IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKaW5kZXggZGYwMzkzZTM1ZmNhNWI3ZGIw
MzQ2MzAzNzYwYWZlYzZhZGFhNmMzMi4uNzBhYjE0ZWQwNWRhYmViY2QwZDgzNTViYzdmY2M5NmI5
MGNiODE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0
ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJk
LmgKQEAgLTQ3LDkgKzQ3LDkgQEAgc3RydWN0IHdwZV9wYXN0ZWJvYXJkOwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIFBhc3RlYm9hcmRDdXN0b21EYXRhOwogY2xh
c3MgU2VsZWN0aW9uRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLXN0cnVjdCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZEl0
ZW1JbmZvOwogc3RydWN0IFBhc3RlYm9hcmRVUkw7CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcmVhZFVSTChzaXplX3QgaW5kZXgsIFN0cmluZyYgdGl0
bGUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBjb3VudCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGludCBudW1iZXJPZkZpbGVzKCkgY29uc3Q7Ci0KKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBsb25nIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yRE9NVG9SZWFk
QW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvcmlnaW4pIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA2MWZkN2M0ODc3YTJiYWE1NmNiMjJkNDA0ODY1
OTUzZTAzNTk0MDgwLi5iNTk5MmU2NGRmNjAzNDI1Y2Q0MDkwODEwZTE4YzdiYWFmMmIzZWRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIzOSw2ICsyMzks
MTEgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKCkgY29uc3QK
IH0KICNlbmRpZgogCitXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVj
b2RlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YSgpKSwgc2l6ZSgpIH07Cit9CisKIGJvb2wgU2hhcmVkQnVmZmVyOjpvcGVyYXRv
cj09KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBlYzM3MTM0
MWFiOTQ5NWI3ZDM1NzYxMzUxYjJiMDliMTM1YTNlZjNiLi43YmE5YzI2OGQ0OGZhNjkxNjcyYWEx
NWUzZWM5ZGZjOTNhNDYzNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBVU0UoQ0YpCkBAIC0xOTAsNiArMTkxLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBoaW50TWVtb3J5Tm90TmVlZGVkU29vbigpIGNvbnN0OwogCisgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKCkgY29uc3Q7CisKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU2hhcmVkQnVmZmVyJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90
aGVyKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0
ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3Bw
CmluZGV4IDE3MzEzZTQ2MDc4NWYzMDM0ZDQxMGMzMTFhZjM5OGU2OGYwOWFlN2EuLmU0ODA2NjYy
NGY0ZGM4OWE1MTM5NWIzMGUwNTcwZTUxZjI2ZjNhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCkBAIC0yNiw2NSArMjYsNjYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdGF0aWNQYXN0ZWJvYXJkLmgiCiAKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdGF0aWNQYXN0ZWJvYXJk
OjpTdGF0aWNQYXN0ZWJvYXJkKCkKK1N0YXRpY1Bhc3RlYm9hcmQ6OlN0YXRpY1Bhc3RlYm9hcmQo
KSA9IGRlZmF1bHQ7CitTdGF0aWNQYXN0ZWJvYXJkOjp+U3RhdGljUGFzdGVib2FyZCgpID0gZGVm
YXVsdDsKKworYm9vbCBTdGF0aWNQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKIHsKKyAgICByZXR1cm4g
bV9jdXN0b21EYXRhLmhhc0RhdGEoKTsKIH0KIAotYm9vbCBTdGF0aWNQYXN0ZWJvYXJkOjpoYXNE
YXRhKCkKK1ZlY3RvcjxTdHJpbmc+IFN0YXRpY1Bhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRp
bmdzKGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRGF0YS5pc0VtcHR5
KCkgfHwgIW1fY3VzdG9tRGF0YS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5v
cmRlcmVkVHlwZXMoKTsKK30KKworVmVjdG9yPFN0cmluZz4gU3RhdGljUGFzdGVib2FyZDo6dHlw
ZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCit7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5v
cmRlcmVkVHlwZXMoKTsKIH0KIAogU3RyaW5nIFN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmco
Y29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiBtX3BsYXRmb3JtRGF0YS5nZXQodHlw
ZSk7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5yZWFkU3RyaW5nKHR5cGUpOwogfQogCiBTdHJp
bmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5nZXQodHlwZSk7CisgICAgcmV0dXJu
IG1fY3VzdG9tRGF0YS5yZWFkU3RyaW5nSW5DdXN0b21EYXRhKHR5cGUpOwogfQogCi1zdGF0aWMg
dm9pZCB1cGRhdGVUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIFN0cmluZyB0eXBlLCBib29s
IG1vdmVUb0VuZCkKK3ZvaWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChtb3ZlVG9FbmQpCi0g
ICAgICAgIHR5cGVzLnJlbW92ZUZpcnN0KHR5cGUpOwotICAgIEFTU0VSVCghdHlwZXMuY29udGFp
bnModHlwZSkpOwotICAgIHR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICBtX2N1c3RvbURhdGEud3Jp
dGVTdHJpbmcodHlwZSwgdmFsdWUpOwogfQogCi12b2lkIFN0YXRpY1Bhc3RlYm9hcmQ6OndyaXRl
U3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgU3Rh
dGljUGFzdGVib2FyZDo6d3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBkYXRhKQogewotICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVzZW50ID0gIW1fcGxh
dGZvcm1EYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRyeSB8fCBtX2N1c3RvbURhdGEuY29u
dGFpbnModHlwZSk7Ci0gICAgdXBkYXRlVHlwZXMobV90eXBlcywgdHlwZSwgdHlwZVdhc0FscmVh
ZHlQcmVzZW50KTsKKyAgICBtX2N1c3RvbURhdGEud3JpdGVEYXRhKHR5cGUsIFdURk1vdmUoZGF0
YSkpOwogfQogCiB2b2lkIFN0YXRpY1Bhc3RlYm9hcmQ6OndyaXRlU3RyaW5nSW5DdXN0b21EYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBib29sIHR5
cGVXYXNBbHJlYWR5UHJlc2VudCA9ICFtX2N1c3RvbURhdGEuc2V0KHR5cGUsIHZhbHVlKS5pc05l
d0VudHJ5IHx8IG1fcGxhdGZvcm1EYXRhLmNvbnRhaW5zKHR5cGUpOwotICAgIHVwZGF0ZVR5cGVz
KG1fdHlwZXMsIHR5cGUsIHR5cGVXYXNBbHJlYWR5UHJlc2VudCk7CisgICAgbV9jdXN0b21EYXRh
LndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKHR5cGUsIHZhbHVlKTsKIH0KIAogdm9pZCBTdGF0aWNQ
YXN0ZWJvYXJkOjpjbGVhcigpCiB7CiAgICAgbV9jdXN0b21EYXRhLmNsZWFyKCk7Ci0gICAgbV9w
bGF0Zm9ybURhdGEuY2xlYXIoKTsKLSAgICBtX3R5cGVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3Rh
dGljUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlmICghbV9w
bGF0Zm9ybURhdGEucmVtb3ZlKHR5cGUpICYmICFtX2N1c3RvbURhdGEucmVtb3ZlKHR5cGUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV90eXBlcy5yZW1vdmVGaXJzdCh0eXBlKTsKLSAgICBBU1NF
UlQoIW1fdHlwZXMuY29udGFpbnModHlwZSkpOworICAgIG1fY3VzdG9tRGF0YS5jbGVhcih0eXBl
KTsKIH0KIAogUGFzdGVib2FyZEN1c3RvbURhdGEgU3RhdGljUGFzdGVib2FyZDo6dGFrZUN1c3Rv
bURhdGEoKQogewotICAgIHJldHVybiB7IHsgfSwgV1RGTW92ZShtX3R5cGVzKSwgV1RGTW92ZSht
X3BsYXRmb3JtRGF0YSksIFdURk1vdmUobV9jdXN0b21EYXRhKSB9OworICAgIHJldHVybiBzdGQ6
OmV4Y2hhbmdlKG1fY3VzdG9tRGF0YSwgeyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCmluZGV4IGVlZGQ3MDI5YjRmNDM5NDU3MTIyNDY1ZmU0
NmNhYjdmYjRjNmQ4MjcuLmE1NmE0NzI2YzU5M2NmNWJhOGE0Y2U1MzMxYmVkODIyYTE5YWI0MmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKQEAgLTMyLDIy
ICszMiwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsK
KwogY2xhc3MgU3RhdGljUGFzdGVib2FyZCBmaW5hbCA6IHB1YmxpYyBQYXN0ZWJvYXJkIHsKIHB1
YmxpYzoKICAgICBTdGF0aWNQYXN0ZWJvYXJkKCk7CisgICAgflN0YXRpY1Bhc3RlYm9hcmQoKTsK
IAogICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhIHRha2VDdXN0b21EYXRhKCk7CiAKICAgICBib29s
IGlzU3RhdGljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBoYXNE
YXRhKCkgZmluYWw7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoY29u
c3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQotICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKSBmaW5hbCB7IHJldHVybiBtX3R5cGVzOyB9
CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJikg
ZmluYWw7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygp
IGZpbmFsOwogICAgIFN0cmluZyByZWFkT3JpZ2luKCkgZmluYWwgeyByZXR1cm4geyB9OyB9CiAg
ICAgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKICAgICBTdHJp
bmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogCiAg
ICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSkgZmluYWw7CisgICAgdm9pZCB3cml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hh
cmVkQnVmZmVyPiYmIGRhdGEpOwogICAgIHZvaWQgd3JpdGVTdHJpbmdJbkN1c3RvbURhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIHZvaWQgY2xlYXIoKSBm
aW5hbDsKICAgICB2b2lkIGNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CkBAIC03Miw5
ICs3Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFZlY3RvcjxTdHJpbmc+
IG1fdHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9wbGF0Zm9ybURhdGE7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jdXN0b21EYXRhOworICAgIFBhc3RlYm9hcmRD
dXN0b21EYXRhIG1fY3VzdG9tRGF0YTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQppbmRleCBjMGZiYTRiZWYwNzUxNWRlNGFk
MjU0YjQwMzcwN2YxMWI1Y2IxNjc1Li5kMDM0MWJlNGYxOTJmZWU3OWI2YzYzMWY2NWRmNjI3Mzc3
YTc1MDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJv
YXJkQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2Fy
ZENvY29hLm1tCkBAIC01MSwxMSArNTEsNiBAQCBzdGF0aWMgTlNCaXRtYXBJbWFnZUZpbGVUeXBl
IGJpdG1hcFBOR0ZpbGVUeXBlKCkKIFBhc3RlYm9hcmRXZWJDb250ZW50OjpQYXN0ZWJvYXJkV2Vi
Q29udGVudCgpID0gZGVmYXVsdDsKIFBhc3RlYm9hcmRXZWJDb250ZW50Ojp+UGFzdGVib2FyZFdl
YkNvbnRlbnQoKSA9IGRlZmF1bHQ7CiAKLWNvbnN0IGNoYXIqIFBhc3RlYm9hcmRDdXN0b21EYXRh
Ojpjb2NvYVR5cGUoKQotewotICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5jdXN0b20tcGFz
dGVib2FyZC1kYXRhIjsKLX0KLQogZW51bSBjbGFzcyBJbWFnZVR5cGUgewogICAgIEludmFsaWQg
PSAwLAogICAgIFRJRkYsCkBAIC0yNjAsMTIgKzI1NSwxMiBAQCBTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZXR1cm4gcmVh
ZEN1c3RvbURhdGEoKS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7CisgICAgcmV0dXJu
IHJlYWRDdXN0b21EYXRhKCkucmVhZFN0cmluZ0luQ3VzdG9tRGF0YSh0eXBlKTsKIH0KIAogU3Ry
aW5nIFBhc3RlYm9hcmQ6OnJlYWRPcmlnaW4oKQogewotICAgIHJldHVybiByZWFkQ3VzdG9tRGF0
YSgpLm9yaWdpbjsKKyAgICByZXR1cm4gcmVhZEN1c3RvbURhdGEoKS5vcmlnaW4oKTsKIH0KIAog
Y29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIFBhc3RlYm9hcmQ6OnJlYWRDdXN0b21EYXRhKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0
b21EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJk
Q3VzdG9tRGF0YUNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MjEyODQ0ZjIxMDRhNzc3Y2Y2NTU2ZDc1
YTZlNWNhZWM5NzNkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmRDdXN0b21E
YXRhLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBjaGFyKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkKK3sKKyAgICByZXR1
cm4gImNvbS5hcHBsZS5XZWJLaXQuY3VzdG9tLXBhc3RlYm9hcmQtZGF0YSI7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oCmluZGV4IGVhNTY0
NDI4NTE0ODIxZWY2YjlkZGI0NGQzNGZhYTk3MGZhMDc1ZDMuLjYwNzE0ZWMxNmUzMzc4MmI4MWJl
MjFmZjZlYjRhN2MxNmUzY2M0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9BYnN0cmFjdFBhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgKQEAgLTI5LDE4ICsyOSwxMyBAQAogCiBOU19BU1NVTUVf
Tk9OTlVMTF9CRUdJTgogCi0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTEwMDAwCiBAY2xhc3MgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q7Ci0jZW5k
aWYKIAogQHByb3RvY29sIEFic3RyYWN0UGFzdGVib2FyZCA8TlNPYmplY3Q+CiBAcmVxdWlyZWQK
IAogQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBOU0ludGVnZXIgbnVtYmVyT2ZJdGVt
czsKLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAogQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHksIG51bGxhYmxlKSBOU0FycmF5PF9fa2luZG9mIE5TSXRl
bVByb3ZpZGVyICo+ICppdGVtUHJvdmlkZXJzOwotI2VuZGlmCiAKIC0gKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKilwYXN0ZWJvYXJkVHlwZXM7CiAtIChOU0RhdGEgKilkYXRhRm9yUGFzdGVib2FyZFR5
cGU6KE5TU3RyaW5nICopcGFzdGVib2FyZFR5cGU7CkBAIC00OSwxMCArNDQsOSBAQCBOU19BU1NV
TUVfTk9OTlVMTF9CRUdJTgogLSAoTlNJbnRlZ2VyKWNoYW5nZUNvdW50OwogCiBAb3B0aW9uYWwK
LSNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKLS0gKHZvaWQp
c3RhZ2VSZWdpc3RyYXRpb25MaXN0OihudWxsYWJsZSBXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRp
b25JbmZvTGlzdCAqKWluZm87Ci0tIChudWxsYWJsZSBXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRp
b25JbmZvTGlzdCAqKXRha2VSZWdpc3RyYXRpb25MaXN0OwotI2VuZGlmCistICh2b2lkKXN0YWdl
UmVnaXN0cmF0aW9uTGlzdHM6KE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5m
b0xpc3QgKj4gKilpbmZvTGlzdHM7CistICh2b2lkKWNsZWFyUmVnaXN0cmF0aW9uTGlzdHM7Cist
IChOU0FycmF5PFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopdGFrZVJl
Z2lzdHJhdGlvbkxpc3RzOwogLSAodm9pZClzZXRJdGVtczooTlNBcnJheTxOU0RpY3Rpb25hcnkg
Kj4gKilpdGVtczsKIEBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgTlNJbnRlZ2VyIG51
bWJlck9mRmlsZXM7CiBAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIE5TQXJyYXk8TlNV
UkwgKj4gKmFsbERyb3BwZWRGaWxlVVJMczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDkxNmRhZWJkMGEyNzgwYzkz
NjNkMzU1OTg1YTliNjEyZWY0MWQxMDcuLjBmZDRlMGVmY2Q1MDE2OTY5Y2FmMDEyMjQwMzBiY2Qz
YTk4MDA5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9y
bVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRm
b3JtUGFzdGVib2FyZElPUy5tbQpAQCAtMjY2LDcgKzI2Niw3IEBAIGxvbmcgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAK
IGxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFsoaWQ8QWJzdHJhY3RQYXN0ZWJvYXJkPiltX3Bhc3RlYm9hcmQuZ2V0KCkgY2hhbmdlQ291
bnRdOworICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIGNoYW5nZUNvdW50XTsKIH0KIAogU3RyaW5n
IFBsYXRmb3JtUGFzdGVib2FyZDo6dW5pcXVlTmFtZSgpCkBAIC0yOTIsMjkgKzI5Miw0MSBAQCBT
dHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5
cGVGb3JET01Ub1JlYWRBbmRXcml0ZQogCiBzdGF0aWMgTlNTdHJpbmcgKndlYklPU1Bhc3RlUGJv
YXJkVHlwZSA9IEAiaU9TIHJpY2ggY29udGVudCBwYXN0ZSBwYXN0ZWJvYXJkIHR5cGUiOwogCi1z
dGF0aWMgdm9pZCByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQoV2ViSXRlbVByb3ZpZGVyUmVnaXN0
cmF0aW9uSW5mb0xpc3QgKnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIsIGlkIDxBYnN0cmFjdFBh
c3RlYm9hcmQ+IHBhc3RlYm9hcmQpCitzdGF0aWMgdm9pZCByZWdpc3Rlckl0ZW1zVG9QYXN0ZWJv
YXJkKE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4gKml0ZW1M
aXN0cywgaWQgPEFic3RyYWN0UGFzdGVib2FyZD4gcGFzdGVib2FyZCkKIHsKICNpZiBQTEFURk9S
TShNQUNDQVRBTFlTVCkKICAgICAvLyBJbiBtYWNDYXRhbHlzdCwgLVtVSVBhc3RlYm9hcmQgc2V0
SXRlbVByb3ZpZGVyczpdIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBzbyB3ZSBmYWxsIGJhY2sgdG8g
c2V0dGluZyBhbiBpdGVtIGRpY3Rpb25hcnkgd2hlbgogICAgIC8vIHBvcHVsYXRpbmcgdGhlIHBh
c3RlYm9hcmQgdXBvbiBjb3B5LgogICAgIGlmIChbcGFzdGVib2FyZCBpc0tpbmRPZkNsYXNzOlBB
TDo6Z2V0VUlQYXN0ZWJvYXJkQ2xhc3MoKV0pIHsKLSAgICAgICAgYXV0byBpdGVtRGljdGlvbmFy
eSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAg
IFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGVudW1lcmF0ZUl0ZW1zOltpdGVtRGljdGlvbmFy
eV0gKGlkIDxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXI+IGl0ZW0sIE5TVUludGVnZXIpIHsKLSAg
ICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHR5cGVJZGVu
dGlmaWVyRm9yQ2xpZW50KV0gJiYgW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihk
YXRhRm9yQ2xpZW50KV0pCi0gICAgICAgICAgICAgICAgW2l0ZW1EaWN0aW9uYXJ5IHNldE9iamVj
dDppdGVtLmRhdGFGb3JDbGllbnQgZm9yS2V5Oml0ZW0udHlwZUlkZW50aWZpZXJGb3JDbGllbnRd
OwotICAgICAgICB9XTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbXM6QFsgaXRlbURpY3Rp
b25hcnkuZ2V0KCkgXV07CisgICAgICAgIGF1dG8gKml0ZW1EaWN0aW9uYXJpZXMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbUxpc3RzLmNvdW50XTsKKyAgICAgICAgZm9y
IChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25zVG9S
ZWdpc3RlciBpbiBpdGVtTGlzdHMpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlbURpY3Rpb25hcnkg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpy
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLm51bWJlck9mSXRlbXNdKTsKKyAgICAgICAgICAgIFty
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGVudW1lcmF0ZUl0ZW1zOltpdGVtRGljdGlvbmFyeV0g
KGlkIDxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXI+IGl0ZW0sIE5TVUludGVnZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih0eXBlSWRl
bnRpZmllckZvckNsaWVudCldICYmIFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
ZGF0YUZvckNsaWVudCldKQorICAgICAgICAgICAgICAgICAgICBbaXRlbURpY3Rpb25hcnkgc2V0
T2JqZWN0Oml0ZW0uZGF0YUZvckNsaWVudCBmb3JLZXk6aXRlbS50eXBlSWRlbnRpZmllckZvckNs
aWVudF07CisgICAgICAgICAgICB9XTsKKyAgICAgICAgICAgIFtpdGVtRGljdGlvbmFyaWVzIGFk
ZE9iamVjdDppdGVtRGljdGlvbmFyeS5nZXQoKV07CisgICAgICAgIH0KKyAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0SXRlbXM6aXRlbURpY3Rpb25hcmllc107CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAKLSAgICBpZiAoTlNJdGVtUHJvdmlk
ZXIgKml0ZW1Qcm92aWRlciA9IHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuaXRlbVByb3ZpZGVy
KQotICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlciBd
XTsKLSAgICBlbHNlCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6QFsgXV07
CisgICAgYXV0byAqaXRlbVByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTppdGVtTGlzdHMuY291bnRdOworICAgIGZvciAoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0
aW9uSW5mb0xpc3QgKnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgaW4gaXRlbUxpc3RzKSB7Cisg
ICAgICAgIGlmIChhdXRvICppdGVtUHJvdmlkZXIgPSByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
Lml0ZW1Qcm92aWRlcikKKyAgICAgICAgICAgIFtpdGVtUHJvdmlkZXJzIGFkZE9iamVjdDppdGVt
UHJvdmlkZXJdOworICAgIH0KKworICAgIFtwYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6aXRl
bVByb3ZpZGVyc107CiAKLSAgICBpZiAoW3Bhc3RlYm9hcmQgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6KV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHN0
YWdlUmVnaXN0cmF0aW9uTGlzdDpyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyXTsKKyAgICBpZiAo
W3Bhc3RlYm9hcmQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdGFnZVJlZ2lzdHJhdGlv
bkxpc3RzOildKQorICAgICAgICBbcGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3RzOml0
ZW1MaXN0c107Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChXZWJJ
dGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25zVG9SZWdpc3Rl
ciwgaWQgPEFic3RyYWN0UGFzdGVib2FyZD4gcGFzdGVib2FyZCkKK3sKKyAgICByZWdpc3Rlckl0
ZW1zVG9QYXN0ZWJvYXJkKEBbIHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgXSwgcGFzdGVib2Fy
ZCk7CiB9CiAKIGxvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC0zOTMsNyArNDA1LDcgQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRl
KGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogICAgICAgICBhZGRSZXByZXNl
bnRhdGlvbnNGb3JQbGFpblRleHQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5nZXQoKSwgY29u
dGVudC5kYXRhSW5TdHJpbmdGb3JtYXQpOwogCiAgICAgUGFzdGVib2FyZEN1c3RvbURhdGEgY3Vz
dG9tRGF0YTsKLSAgICBjdXN0b21EYXRhLm9yaWdpbiA9IGNvbnRlbnQuY29udGVudE9yaWdpbjsK
KyAgICBjdXN0b21EYXRhLnNldE9yaWdpbihjb250ZW50LmNvbnRlbnRPcmlnaW4pOwogICAgIFty
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZERhdGE6Y3VzdG9tRGF0YS5jcmVhdGVTaGFyZWRC
dWZmZXIoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUoKSldOwogCiAgICAgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKHJlcHJl
c2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCksIG1fcGFzdGVib2FyZC5nZXQoKSk7CkBAIC01MTYs
OCArNTI4LDggQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVG
b3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIG8KIAogICAgIGlmIChOU0RhdGEgKnNl
cmlhbGl6ZWRDdXN0b21EYXRhID0gW21fcGFzdGVib2FyZCBkYXRhRm9yUGFzdGVib2FyZFR5cGU6
QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXSkgewogICAgICAgICBhdXRvIGRh
dGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzZXJpYWxpemVkQ3VzdG9tRGF0YSkuZ2V0KCkpOwotICAgICAgICBpZiAoZGF0YS5v
cmlnaW4gPT0gb3JpZ2luKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9y
ZGVyZWRUeXBlcykKKyAgICAgICAgaWYgKGRhdGEub3JpZ2luKCkgPT0gb3JpZ2luKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRUeXBlcygpKQogICAgICAgICAg
ICAgICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC01NDgsMTIgKzU2MCwxMiBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5
cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgbwogICAgIHJldHVybiBj
b3B5VG9WZWN0b3IoZG9tUGFzdGVib2FyZFR5cGVzKTsKIH0KIAotbG9uZyBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQorc3RhdGljIFJl
dGFpblB0cjxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdD4gY3JlYXRlSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uTGlzdChjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkK
IHsKICAgICBhdXRvIHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgPSBhZG9wdE5TKFtbV2ViSXRl
bVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgYWxsb2NdIGluaXRdKTsKICAgICBbcmVwcmVz
ZW50YXRpb25zVG9SZWdpc3RlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpXZWJQcmVm
ZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07CiAKLSAgICBpZiAoZGF0YS5zYW1lT3JpZ2lu
Q3VzdG9tRGF0YS5zaXplKCkpIHsKKyAgICBpZiAoZGF0YS5oYXNTYW1lT3JpZ2luQ3VzdG9tRGF0
YSgpIHx8ICFkYXRhLm9yaWdpbigpLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBzZXJp
YWxpemVkU2hhcmVkQnVmZmVyID0gZGF0YS5jcmVhdGVTaGFyZWRCdWZmZXIoKS0+Y3JlYXRlTlNE
YXRhKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHN0YXNoIHRoZSBsaXN0IG9mIHN1cHBsaWVkIHBh
c3RlYm9hcmQgdHlwZXMgaW4gdGVhbURhdGEgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGRy
YWcgYW5kIGRyb3AuCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29udGVudHMgb2YgaXRlbSBw
cm92aWRlcnMgY2Fubm90IGJlIGxvYWRlZCBwcmlvciB0byBkcm9wLCBidXQgdGhlIHBhc3RlYm9h
cmQgdHlwZXMgYXJlCkBAIC01NjIsMjkgKzU3NCwzOCBAQCBsb25nIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCiAgICAgICAgICAgICAv
LyBhbGwgb2YgdGhlIGN1c3RvbSB0eXBlcy4gV2UgdXNlIHRoZSB0ZWFtRGF0YSBwcm9wZXJ0eSwg
YXZhaWxhYmxlIG9uIE5TSXRlbVByb3ZpZGVyIG9uIGlPUywgdG8gc3RvcmUKICAgICAgICAgICAg
IC8vIHRoaXMgaW5mb3JtYXRpb24sIHNpbmNlIHRoZSBjb250ZW50cyBvZiB0ZWFtRGF0YSBhcmUg
aW1tZWRpYXRlbHkgYXZhaWxhYmxlIHByaW9yIHRvIHRoZSBkcm9wLgogICAgICAgICAgICAgTlNN
dXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4gKnR5cGVzQXNOU0FycmF5ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVz
KQorICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMoKSkKICAg
ICAgICAgICAgICAgICBbdHlwZXNBc05TQXJyYXkgYWRkT2JqZWN0OnR5cGVdOwotICAgICAgICAg
ICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0VGVhbURhdGE6c2VjdXJlbHlBcmNoaXZl
ZERhdGFXaXRoUm9vdE9iamVjdChAeyBAKG9yaWdpbktleUZvclRlYW1EYXRhKSA6IGRhdGEub3Jp
Z2luLCBAKGN1c3RvbVR5cGVzS2V5Rm9yVGVhbURhdGEpIDogdHlwZXNBc05TQXJyYXkgfSldOwor
ICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0VGVhbURhdGE6c2VjdXJl
bHlBcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdChAeyBAKG9yaWdpbktleUZvclRlYW1EYXRhKSA6
IGRhdGEub3JpZ2luKCksIEAoY3VzdG9tVHlwZXNLZXlGb3JUZWFtRGF0YSkgOiB0eXBlc0FzTlNB
cnJheSB9KV07CiAgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRh
OnNlcmlhbGl6ZWRTaGFyZWRCdWZmZXIuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUoKSldOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiB0
eXBlIDogZGF0YS5vcmRlcmVkVHlwZXMpIHsKLSAgICAgICAgTlNTdHJpbmcgKnN0cmluZ1ZhbHVl
ID0gZGF0YS5wbGF0Zm9ybURhdGEuZ2V0KHR5cGUpOworICAgIGRhdGEuZm9yRWFjaFBsYXRmb3Jt
U3RyaW5nKFsmXSAoYXV0byYgdHlwZSwgYXV0byYgdmFsdWUpIHsKKyAgICAgICAgTlNTdHJpbmcg
KnN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgICAgIGlmICghc3RyaW5nVmFsdWUubGVuZ3RoKQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0
byBjb2NvYVR5cGUgPSBwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1Jl
YWRBbmRXcml0ZSh0eXBlKS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBhdXRvIGNvY29hVHlw
ZSA9IFBsYXRmb3JtUGFzdGVib2FyZDo6cGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVUeXBl
Rm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgaWYg
KFVUVHlwZUNvbmZvcm1zVG8oY29jb2FUeXBlLmdldCgpLCBrVVRUeXBlVVJMKSkKICAgICAgICAg
ICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZFJlcHJlc2VudGluZ09iamVjdDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpzdHJpbmdWYWx1ZV1dOwogICAgICAgICBlbHNlIGlmIChVVFR5cGVD
b25mb3Jtc1RvKGNvY29hVHlwZS5nZXQoKSwga1VUVHlwZVBsYWluVGV4dCkpCiAgICAgICAgICAg
ICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGRSZXByZXNlbnRpbmdPYmplY3Q6c3RyaW5n
VmFsdWVdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdp
c3RlciBhZGREYXRhOltzdHJpbmdWYWx1ZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ10gZm9yVHlwZTooTlNTdHJpbmcgKiljb2NvYVR5cGUuZ2V0KCldOwotICAgIH0KKyAg
ICB9KTsKIAotICAgIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnNUb1Jl
Z2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOwotICAgIHJldHVybiBbKGlkPEFic3Ry
YWN0UGFzdGVib2FyZD4pbV9wYXN0ZWJvYXJkLmdldCgpIGNoYW5nZUNvdW50XTsKKyAgICByZXR1
cm4gcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlcjsKK30KKwordm9pZCBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OndyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mIGl0ZW1EYXRhKQor
eworICAgIE5TTXV0YWJsZUFycmF5ICpyZWdpc3RyYXRpb25MaXN0cyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTppdGVtRGF0YS5zaXplKCldOworICAgIGZvciAoYXV0byYgZGF0
YSA6IGl0ZW1EYXRhKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZW1MaXN0ID0gY3JlYXRlSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uTGlzdChkYXRhKSkKKyAgICAgICAgICAgIFtyZWdpc3RyYXRpb25M
aXN0cyBhZGRPYmplY3Q6aXRlbUxpc3QuZ2V0KCldOworICAgIH0KKyAgICByZWdpc3Rlckl0ZW1z
VG9QYXN0ZWJvYXJkKHJlZ2lzdHJhdGlvbkxpc3RzLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOwogfQog
CiAjZWxzZQpAQCAtNjIwLDkgKzY0MSw4IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVi
b2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJikKICAgICBy
ZXR1cm4geyB9OwogfQogCi1sb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFz
dGVib2FyZEN1c3RvbURhdGEmKQordm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mKQogewotICAgIHJldHVybiAwOwogfQogCiAj
ZW5kaWYKQEAgLTcyMSw2ICs3NDEsMTIgQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVwZGF0
ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdHkKICAgICBb
bV9wYXN0ZWJvYXJkIHVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVyczp0eXBlc0FycmF5XTsK
IH0KIAorbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0
b21EYXRhJiBkYXRhKQoreworICAgIHdyaXRlKFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4g
eyBkYXRhIH0pOworICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIGNoYW5nZUNvdW50XTsKK30KKwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KaW5kZXgg
NDNhZmJkZDBhNTQ0ZWMxMmQxNDQ3NjExYTFjMThmOGU0YTQzY2RlYS4uNzE5M2I2NWJlYmU0OWE1
MDQwZGQ4ZDgxMThlYmEwZmVmNWIyYTg2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KQEAgLTQ2Miw3ICs0
NjIsNyBAQCBAaW1wbGVtZW50YXRpb24gV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB7CiAgICAg
Ly8gRklYTUU6IFRoZXNlIGl2YXJzIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGJlIFZlY3RvcjxS
ZXRhaW5QdHI8VHlwZT4+IGluc3RlYWQgb2YgZ2VuZXJpYyBOU0FycmF5cy4KICAgICBSZXRhaW5Q
dHI8TlNBcnJheT4gX2l0ZW1Qcm92aWRlcnM7CiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9zdXBw
b3J0ZWRUeXBlSWRlbnRpZmllcnM7Ci0gICAgUmV0YWluUHRyPFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0PiBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3Q7CisgICAgUmV0YWlu
UHRyPE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKj4+IF9zdGFn
ZWRSZWdpc3RyYXRpb25JbmZvTGlzdHM7CiAKICAgICBWZWN0b3I8UmV0YWluUHRyPFdlYkl0ZW1Q
cm92aWRlckxvYWRSZXN1bHQ+PiBfbG9hZFJlc3VsdHM7CiB9CkBAIC00ODQsNyArNDg0LDcgQEAg
LSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICAgICAgX2NoYW5nZUNvdW50ID0gMDsKICAgICAgICAg
X3BlbmRpbmdPcGVyYXRpb25Db3VudCA9IDA7CiAgICAgICAgIF9zdXBwb3J0ZWRUeXBlSWRlbnRp
ZmllcnMgPSBuaWw7Ci0gICAgICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IG5pbDsK
KyAgICAgICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IG5pbDsKICAgICAgICAgX2xv
YWRSZXN1bHRzID0geyB9OwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKQEAgLTg1MywxNiArODUz
LDIwIEBAIC0gKHZvaWQpZW51bWVyYXRlSXRlbVByb3ZpZGVyc1dpdGhCbG9jazoodm9pZCAoXiko
X19raW5kb2YgTlNJdGVtUHJvdmlkZXIgKml0ZW1QCiAgICAgW19pdGVtUHJvdmlkZXJzIGVudW1l
cmF0ZU9iamVjdHNVc2luZ0Jsb2NrOmJsb2NrXTsKIH0KIAotLSAodm9pZClzdGFnZVJlZ2lzdHJh
dGlvbkxpc3Q6KG51bGxhYmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICop
aW5mbworLSAodm9pZClzdGFnZVJlZ2lzdHJhdGlvbkxpc3RzOihOU0FycmF5PFdlYkl0ZW1Qcm92
aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopbGlzdHMKIHsKLSAgICBfc3RhZ2VkUmVnaXN0
cmF0aW9uSW5mb0xpc3QgPSBpbmZvLm51bWJlck9mSXRlbXMgPyBpbmZvIDogbmlsOworICAgIEFT
U0VSVChsaXN0cy5jb3VudCk7CisgICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IGxp
c3RzOwogfQogCi0tIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKXRha2VS
ZWdpc3RyYXRpb25MaXN0CistICh2b2lkKWNsZWFyUmVnaXN0cmF0aW9uTGlzdHMKIHsKLSAgICBh
dXRvIHN0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0gX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9M
aXN0OwotICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IG5pbDsKLSAgICByZXR1cm4g
c3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QuYXV0b3JlbGVhc2UoKTsKKyAgICBfc3RhZ2VkUmVn
aXN0cmF0aW9uSW5mb0xpc3RzID0gbmlsOworfQorCistIChOU0FycmF5PFdlYkl0ZW1Qcm92aWRl
clJlZ2lzdHJhdGlvbkluZm9MaXN0ICo+ICopdGFrZVJlZ2lzdHJhdGlvbkxpc3RzCit7CisgICAg
cmV0dXJuIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdHMuYXV0b3JlbGVhc2UoKTsKIH0KIAog
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRl
eCA4ZWIxNWNmODg1MmQ5ODU3NDQ3ZTA1OWMzOGFjYWViYTIzNDE1ZDA0Li5jMWVjZWYxNGNhY2M3
MWU3YzY0ZjY5MDQ2MWMzYjkwMTUxOWNmZDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAgICAgIG1f
Y2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnNldFN0cmluZ0ZvclR5cGUoY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQsIGxlZ2FjeVN0cmlu
Z1Bhc3RlYm9hcmRUeXBlKCksIG1fcGFzdGVib2FyZE5hbWUpOwogCiAgICAgUGFzdGVib2FyZEN1
c3RvbURhdGEgZGF0YTsKLSAgICBkYXRhLm9yaWdpbiA9IGNvbnRlbnQuY29udGVudE9yaWdpbjsK
KyAgICBkYXRhLnNldE9yaWdpbihjb250ZW50LmNvbnRlbnRPcmlnaW4pOwogICAgIG1fY2hhbmdl
Q291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1
ZmZlckZvclR5cGUoZGF0YS5jcmVhdGVTaGFyZWRCdWZmZXIoKS5wdHIoKSwgUGFzdGVib2FyZEN1
c3RvbURhdGE6OmNvY29hVHlwZSgpLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRXcml0ZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZFdyaXRlci5tbQppbmRleCAwZmU1MDVk
ZTU1YzY2MTY0OGYwNTlkYTliN2ZhZTJhMDc3ZmM2MjNlLi5iMTliNTJlYzk0ZjA5MzRiM2I3YTE4
NDQ3MmVjYjY2NmYzM2QzZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGFzdGVib2FyZFdyaXRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZFdyaXRlci5tbQpAQCAtMTE4LDcgKzExOCw3IEBAIFJldGFpblB0cjxpZCA8TlNQ
YXN0ZWJvYXJkV3JpdGluZz4+IGNyZWF0ZVBhc3RlYm9hcmRXcml0ZXIoY29uc3QgUGFzdGVib2Fy
ZFdyaXRlCiAgICAgICAgICAgICBbcGFzdGVib2FyZEl0ZW0gc2V0RGF0YTp3ZWJDb250ZW50LT5j
bGllbnREYXRhW2ldLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JUeXBlOnRvVVRJVW5sZXNzQWxy
ZWFkeVVUSSh3ZWJDb250ZW50LT5jbGllbnRUeXBlc1tpXSkuZ2V0KCldOwogCiAgICAgICAgIFBh
c3RlYm9hcmRDdXN0b21EYXRhIGN1c3RvbURhdGE7Ci0gICAgICAgIGN1c3RvbURhdGEub3JpZ2lu
ID0gd2ViQ29udGVudC0+Y29udGVudE9yaWdpbjsKKyAgICAgICAgY3VzdG9tRGF0YS5zZXRPcmln
aW4od2ViQ29udGVudC0+Y29udGVudE9yaWdpbik7CiAgICAgICAgIFtwYXN0ZWJvYXJkSXRlbSBz
ZXREYXRhOmN1c3RvbURhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNyZWF0ZU5TRGF0YSgpLmdl
dCgpIGZvclR5cGU6dG9VVElVbmxlc3NBbHJlYWR5VVRJKFN0cmluZyhQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6Y29jb2FUeXBlKCkpKS5nZXQoKV07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQppbmRleCAxOTRhZGRi
Y2Y5ZTE1YzRlZGI2NjUwNDExMjEzM2ExMzJkZWY0OTY2Li4zZTlmNDY2MmZjZDg0YjRkZThlNTg0
NGJiZDZhODE3ZjQ2MmY4Zjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KQEAgLTE5OCw4ICsxOTgsOCBAQCBWZWN0b3I8
U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRl
KGNvbnN0IFN0cmluZyYgbwogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gZG9tUGFzdGVib2FyZFR5
cGVzOwogICAgIGlmIChOU0RhdGEgKnNlcmlhbGl6ZWRDdXN0b21EYXRhID0gW21fcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSldKSB7CiAg
ICAgICAgIGF1dG8gZGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVy
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNlcmlhbGl6ZWRDdXN0b21EYXRhKS5nZXQoKSk7Ci0gICAg
ICAgIGlmIChkYXRhLm9yaWdpbiA9PSBvcmlnaW4pIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
dHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKQorICAgICAgICBpZiAoZGF0YS5vcmlnaW4oKSA9PSBv
cmlnaW4pIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVz
KCkpCiAgICAgICAgICAgICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTIyNSwyMSArMjI1LDI0IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3Jt
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBv
CiBsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURh
dGEmIGRhdGEpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZGF0YS5wbGF0Zm9ybURhdGEpCi0gICAg
ICAgIFt0eXBlcyBhZGRPYmplY3Q6cGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVUeXBlRm9y
RE9NVG9SZWFkQW5kV3JpdGUoZW50cnkua2V5KV07Ci0gICAgaWYgKGRhdGEuc2FtZU9yaWdpbkN1
c3RvbURhdGEuc2l6ZSgpKQorICAgIGRhdGEuZm9yRWFjaFR5cGUoWyZdIChhdXRvJiB0eXBlKSB7
CisgICAgICAgIFt0eXBlcyBhZGRPYmplY3Q6cGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVU
eXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSldOworICAgIH0pOworCisgICAgYm9vbCBoYXNT
YW1lT3JpZ2luQ3VzdG9tRGF0YSA9IGRhdGEuaGFzU2FtZU9yaWdpbkN1c3RvbURhdGEoKTsKKyAg
ICBpZiAoaGFzU2FtZU9yaWdpbkN1c3RvbURhdGEpCiAgICAgICAgIFt0eXBlcyBhZGRPYmplY3Q6
QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKIAogICAgIFttX3Bhc3RlYm9h
cmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOm5pbF07CiAKLSAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZGF0YS5wbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgYXV0byBwbGF0Zm9ybVR5cGUgPSBwbGF0
Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShlbnRyeS5r
ZXkpOworICAgIGRhdGEuZm9yRWFjaFBsYXRmb3JtU3RyaW5nKFsmXSAoYXV0byYgdHlwZSwgYXV0
byYgZGF0YSkgeworICAgICAgICBhdXRvIHBsYXRmb3JtVHlwZSA9IHBsYXRmb3JtUGFzdGVib2Fy
ZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpOwogICAgICAgICBBU1NF
UlQoIXBsYXRmb3JtVHlwZS5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoIXBsYXRmb3JtVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBbbV9wYXN0ZWJvYXJkIHNldFN0cmluZzplbnRyeS52YWx1
ZSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07Ci0gICAgfQorICAgICAgICAgICAgW21fcGFzdGVib2Fy
ZCBzZXRTdHJpbmc6ZGF0YSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07CisgICAgfSk7CiAKLSAgICBp
ZiAoZGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5zaXplKCkpIHsKKyAgICBpZiAoaGFzU2FtZU9y
aWdpbkN1c3RvbURhdGEpIHsKICAgICAgICAgaWYgKGF1dG8gc2VyaWFsaXplZEN1c3RvbURhdGEg
PSBkYXRhLmNyZWF0ZVNoYXJlZEJ1ZmZlcigpLT5jcmVhdGVOU0RhdGEoKSkKICAgICAgICAgICAg
IFttX3Bhc3RlYm9hcmQgc2V0RGF0YTpzZXJpYWxpemVkQ3VzdG9tRGF0YS5nZXQoKSBmb3JUeXBl
OkAoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV07CiAgICAgfQpAQCAtNDYzLDYg
KzQ2Niw0MyBAQCBpbnQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3VudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFttX3Bhc3RlYm9hcmQgcGFzdGVib2FyZEl0ZW1zXS5jb3VudDsKIH0KIAorc3RhdGljIFJl
dGFpblB0cjxOU1Bhc3RlYm9hcmRJdGVtPiBjcmVhdGVQYXN0ZWJvYXJkSXRlbShjb25zdCBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNQ
YXN0ZWJvYXJkSXRlbSBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKGRhdGEuaGFzU2FtZU9yaWdp
bkN1c3RvbURhdGEoKSB8fCAhZGF0YS5vcmlnaW4oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gc2VyaWFsaXplZEN1c3RvbURhdGEgPSBkYXRhLmNyZWF0ZVNoYXJlZEJ1ZmZlcigpLT5j
cmVhdGVOU0RhdGEoKSkKKyAgICAgICAgICAgIFtpdGVtIHNldERhdGE6c2VyaWFsaXplZEN1c3Rv
bURhdGEuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSld
OworICAgIH0KKworICAgIGRhdGEuZm9yRWFjaFBsYXRmb3JtU3RyaW5nT3JCdWZmZXIoWyZdIChh
dXRvJiB0eXBlLCBhdXRvJiBzdHJpbmdPckJ1ZmZlcikgeworICAgICAgICBhdXRvIHBsYXRmb3Jt
VHlwZSA9IG1vZGVyblBhc3RlYm9hcmRUeXBlRm9yV2ViU2FmZU1JTUVUeXBlKHR5cGUpOworICAg
ICAgICBpZiAoIXBsYXRmb3JtVHlwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKSkgeworICAg
ICAgICAgICAgW2l0ZW0gc2V0U3RyaW5nOldURjo6Z2V0PFN0cmluZz4oc3RyaW5nT3JCdWZmZXIp
IGZvclR5cGU6cGxhdGZvcm1UeXBlXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+Pihz
dHJpbmdPckJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHBsYXRmb3JtRGF0YSA9IFdU
Rjo6Z2V0PFJlZjxTaGFyZWRCdWZmZXI+PihzdHJpbmdPckJ1ZmZlciktPmNyZWF0ZU5TRGF0YSgp
KQorICAgICAgICAgICAgICAgIFtpdGVtIHNldERhdGE6cGxhdGZvcm1EYXRhLmdldCgpIGZvclR5
cGU6cGxhdGZvcm1UeXBlXTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIGl0ZW07
Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBWZWN0b3I8UGFzdGVi
b2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0YSkKK3sKKyAgICBhdXRvIHBsYXRmb3JtSXRlbXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6aXRlbURhdGEu
c2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBkYXRhIDogaXRlbURhdGEpCisgICAgICAgIFtwbGF0
Zm9ybUl0ZW1zIGFkZE9iamVjdDpjcmVhdGVQYXN0ZWJvYXJkSXRlbShkYXRhKS5nZXQoKV07Cisg
ICAgW21fcGFzdGVib2FyZCBjbGVhckNvbnRlbnRzXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHdyaXRl
T2JqZWN0czpwbGF0Zm9ybUl0ZW1zLmdldCgpXTsKK30KKwogUGFzdGVib2FyZEl0ZW1JbmZvIFBs
YXRmb3JtUGFzdGVib2FyZDo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7CiAgICAgTlNQYXN0ZWJvYXJkSXRlbSAqaXRlbSA9IGl0ZW1BdEluZGV4KGluZGV4KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDIy
MmNkYWY5MjBiMGQ1MGZjMzQ3ZDVhNTA2NmQ5YTBlZDViOGU0NDcuLjk1MjdkZTI1OTVlMjg0MTlm
YWNlYjJmMzIxNTMyYjg5MzJlNTdmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMTYzNiwyOCArMTYzNiw3NyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8RGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgV2ViQwogfQogI2VuZGlmCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJk
Q3VzdG9tRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSYgZGF0YSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVu
dHJ5Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRh
RW50cnkmIGRhdGEpCiB7Ci0gICAgZW5jb2RlciA8PCBkYXRhLm9yaWdpbjsKLSAgICBlbmNvZGVy
IDw8IGRhdGEub3JkZXJlZFR5cGVzOwotICAgIGVuY29kZXIgPDwgZGF0YS5wbGF0Zm9ybURhdGE7
Ci0gICAgZW5jb2RlciA8PCBkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhOworICAgIGVuY29kZXIg
PDwgZGF0YS50eXBlIDw8IGRhdGEuY3VzdG9tRGF0YTsKKworICAgIGF1dG8mIHBsYXRmb3JtRGF0
YSA9IGRhdGEucGxhdGZvcm1EYXRhOworICAgIGJvb2wgaGFzU3RyaW5nID0gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KHBsYXRmb3JtRGF0YSk7CisgICAgZW5jb2RlciA8PCBoYXNTdHJp
bmc7CisgICAgaWYgKGhhc1N0cmluZykKKyAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxTdHJp
bmc+KHBsYXRmb3JtRGF0YSk7CisKKyAgICBib29sIGhhc0J1ZmZlciA9IFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KHBsYXRmb3JtRGF0YSk7CisgICAgZW5jb2RlciA8
PCBoYXNCdWZmZXI7CisgICAgaWYgKGhhc0J1ZmZlcikKKyAgICAgICAgZW5jb2RlU2hhcmVkQnVm
ZmVyKGVuY29kZXIsIFdURjo6Z2V0PFJlZjxTaGFyZWRCdWZmZXI+PihwbGF0Zm9ybURhdGEpLnB0
cigpKTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQorYm9vbCBB
cmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhRW50cnk+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeSYgZGF0YSkKIHsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGEub3JpZ2luKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEu
dHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
ZGF0YS5jdXN0b21EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNT
dHJpbmc7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNTdHJpbmcpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEub3JkZXJlZFR5cGVzKSkK
KyAgICBpZiAoaGFzU3RyaW5nKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRhdGEucGxhdGZvcm1EYXRhID0geyBXVEZNb3ZlKHZhbHVlKSB9OworICAgIH0KKworICAg
IGJvb2wgaGFzQnVmZmVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzQnVmZmVyKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnBsYXRm
b3JtRGF0YSkpCisgICAgaWYgKGhhc1N0cmluZyAmJiBoYXNCdWZmZXIpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoaGFzQnVmZmVyKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlOworICAg
ICAgICBpZiAoIWRlY29kZVNoYXJlZEJ1ZmZlcihkZWNvZGVyLCB2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRhdGEucGxhdGZvcm1EYXRhID0geyB2YWx1ZS5yZWxl
YXNlTm9uTnVsbCgpIH07CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICBlbmNvZGVyIDw8IGRh
dGEub3JpZ2luKCk7CisgICAgZW5jb2RlciA8PCBkYXRhLmRhdGEoKTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQoreworICAgIFN0cmluZyBvcmlnaW47CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShvcmlnaW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEuc2FtZU9yaWdpbkN1c3RvbURhdGEpKQorICAgIFZl
Y3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YUVudHJ5PiBpdGVtczsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGl0ZW1zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZGF0YSA9IFBhc3Rl
Ym9hcmRDdXN0b21EYXRhKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShpdGVtcykpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCmluZGV4IDlkNmNkMzQxMjJkY2NiZjYzMDYzMGVjY2RkYTE2ZjA3ODU0YzNkZTQuLjgz
ZTlkNmQ1MjQwZGZkNmIwODMxYWI2ZDA2OGI2NTM0ZDU2OTBjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC04OSw2ICs4OSw3IEBAIGNsYXNz
IExheW91dFNpemU7CiBjbGFzcyBMYXlvdXRQb2ludDsKIGNsYXNzIExpbmVhclRpbWluZ0Z1bmN0
aW9uOwogY2xhc3MgTm90aWZpY2F0aW9uOworY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBj
bGFzcyBQYXRoOwogY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogY2xhc3MgUmVnaW9uOwpAQCAtMTE2
LDggKzExNyw4IEBAIHN0cnVjdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMOwogc3RydWN0IExlbmd0
aDsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOwogc3RydWN0IE1pbWVDbGFzc0luZm87CitzdHJ1Y3Qg
UGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7Ci1zdHJ1
Y3QgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKIHN0cnVjdCBQ
bHVnaW5JbmZvOwogc3RydWN0IFByb21pc2VkQXR0YWNobWVudEluZm87CkBAIC00NDUsNiArNDQ2
LDExIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGFzdGVib2Fy
ZEltYWdlPiB7CiB9OwogI2VuZGlmCiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeT4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGFFbnRyeSYp
OworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UGFzdGVib2FyZEN1
c3RvbURhdGFFbnRyeSYpOworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDEy
NjI3MTc1NjY4MGZjODNiOWJlNTIxODY1MmQyZmI1NWY5YWZiZTcuLmMzZDE0NjA3ZjUwMjg3MTI3
MDZiMDc0MzVjYTIyM2RjMzc1MjRkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tCkBAIC00MzEyLDcgKzQzMTIsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN0
cmluZyYgbwogCiAgICAgTlNEYXRhICpkYXRhID0gW05TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVi
b2FyZCBkYXRhRm9yVHlwZTpAKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5
cGUoKSldOwogICAgIGF1dG8gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSk7Ci0gICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVk
QnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luID09IG9yaWdpbklkZW50aWZpZXIpIHsKKyAgICBp
ZiAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoYnVmZmVy
LmdldCgpKS5vcmlnaW4oKSA9PSBvcmlnaW5JZGVudGlmaWVyKSB7CiAgICAgICAgIGNvbXBsZXRp
b24oV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6R3JhbnRlZEZvckdlc3R1cmUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0
ZWJvYXJkUHJveHkuaAppbmRleCBhZGJjMjI2YWRiOGVmNTJlYTM3MThlYTA2NTZhODlmNTEwYjhi
OTIwLi5hZDQwNmY0OWQ5ZmIxYjMwYWVjMmI2NDNkMDA1ZWM4YzJiNDVlYTIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaApAQCAtMzMsNyArMzMsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKLXN0cnVjdCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTsKK2NsYXNzIFBhc3RlYm9hcmRDdXN0b21EYXRhOwogc3RydWN0IFBhc3RlYm9h
cmRJbWFnZTsKIHN0cnVjdCBQYXN0ZWJvYXJkSXRlbUluZm87CiBzdHJ1Y3QgUGFzdGVib2FyZFVS
TDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5tZXNzYWdlcy5pbgppbmRleCA2OTFkMDI1MzcxOGMwMmEwZGUwYTZiZThlMzRkMjEwMzRlMDAz
YTIzLi4zYjY2MjVhMzM0OGEzNWQ2MGM2MTg5Nzc4YTkwMGY2YWM0NmNhZWU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0yOSw3ICsyOSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhc3RlYm9hcmRQcm94eSB7CiAg
ICAgVXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzKFZlY3RvcjxTdHJpbmc+IGlkZW50aWZp
ZXJzLCBTdHJpbmcgcGFzdGVib2FyZE5hbWUpCiAjZW5kaWYKIAotICAgIFdyaXRlQ3VzdG9tRGF0
YShzdHJ1Y3QgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEgZGF0YSwgU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNocm9ub3VzCisgICAgV3Jp
dGVDdXN0b21EYXRhKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhIGRhdGEsIFN0cmluZyBw
YXN0ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KSBTeW5jaHJvbm91cwogICAg
IFR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3Ry
aW5nIG9yaWdpbikgLT4gKFZlY3RvcjxTdHJpbmc+IHR5cGVzKSBTeW5jaHJvbm91cwogICAgIEFs
bFBhc3RlYm9hcmRJdGVtSW5mbyhTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChWZWN0b3I8V2Vi
Q29yZTo6UGFzdGVib2FyZEl0ZW1JbmZvPiBhbGxJbmZvKSBTeW5jaHJvbm91cwogICAgIEluZm9y
bWF0aW9uRm9ySXRlbUF0SW5kZXgodWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSkgLT4gKHN0cnVjdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSXRlbUluZm8gaW5mbykgU3luY2hyb25v
dXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCmluZGV4IDUyY2RmYTUyNTc4ZDJkMzRmNzJjNmM2OTIwOWUyZjQ2MjE5
OWE4OTkuLjdiOTBlY2E5Nzk4ZWY2OWIyMjBmYmFlYjlhODVlOGQwZDAyYzM2NDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQpAQCAtMzIzMyw3ICszMjMzLDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uRm9y
V2ViVmlldzooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKICAgICAgICAgTlNBcnJh
eSAqYWxsQ3VzdG9tUGFzdGVib2FyZERhdGEgPSBbcGFzdGVib2FyZCBkYXRhRm9yUGFzdGVib2Fy
ZFR5cGU6QChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpIGluSXRl
bVNldDppbmRpY2VzXTsKICAgICAgICAgZm9yIChOU0RhdGEgKmRhdGEgaW4gYWxsQ3VzdG9tUGFz
dGVib2FyZERhdGEpIHsKICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YSk7Ci0gICAgICAgICAgICBpZiAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoYnVmZmVyLmdldCgpKS5vcmlnaW4gPT0gZm9j
dXNlZERvY3VtZW50T3JpZ2luKQorICAgICAgICAgICAgaWYgKFdlYkNvcmU6OlBhc3RlYm9hcmRD
dXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luKCkgPT0gZm9j
dXNlZERvY3VtZW50T3JpZ2luKQogICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTczMSw3ICs1NzMxLDcgQEAgc3RhdGljIEJPT0wg
YWxsUGFzdGVib2FyZEl0ZW1PcmlnaW5zTWF0Y2hPcmlnaW4oVUlQYXN0ZWJvYXJkICpwYXN0ZWJv
YXJkLCBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYXV0byBidWZmZXIg
PSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhKTsKLSAgICAgICAgaWYgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSku
b3JpZ2luICE9IG9yaWdpbklkZW50aWZpZXIpCisgICAgICAgIGlmIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihidWZmZXIuZ2V0KCkpLm9yaWdpbigpICE9
IG9yaWdpbklkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKICAgICAgICAgZm91
bmRBdExlYXN0T25lTWF0Y2hpbmdJZGVudGlmaWVyID0gWUVTOwpAQCAtNjcwNiwxNSArNjcwNiwx
NSBAQCAtICh2b2lkKV9kaWRIYW5kbGVBZGRpdGlvbmFsRHJhZ0l0ZW1zUmVxdWVzdDooQk9PTClh
ZGRlZAogICAgIGlmICghY29tcGxldGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViSXRl
bVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKnJlZ2lzdHJhdGlvbkxpc3QgPSBbW1dlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHRha2VSZWdpc3RyYXRpb25MaXN0
XTsKLSAgICBpZiAoIWFkZGVkIHx8ICFyZWdpc3RyYXRpb25MaXN0IHx8ICFfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmhhc1N0YWdlZERyYWdTb3VyY2UoKSkgeworICAgIGF1dG8gKnJlZ2lzdHJh
dGlvbkxpc3RzID0gW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSB0
YWtlUmVnaXN0cmF0aW9uTGlzdHNdOworICAgIGlmICghYWRkZWQgfHwgIVtyZWdpc3RyYXRpb25M
aXN0cyBjb3VudF0gfHwgIV9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaGFzU3RhZ2VkRHJhZ1Nv
dXJjZSgpKSB7CiAgICAgICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuY2xlYXJTdGFnZWRE
cmFnU291cmNlKCk7CiAgICAgICAgIGNvbXBsZXRpb24oQFsgXSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBhdXRvIHN0YWdlZERyYWdTb3VyY2UgPSBfZHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLnN0YWdlZERyYWdTb3VyY2UoKTsKLSAgICBOU0FycmF5ICpkcmFnSXRlbXNUb0FkZCA9
IFtzZWxmIF9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlv
bkxpc3Q6cmVnaXN0cmF0aW9uTGlzdCBzdGFnZWREcmFnU291cmNlOnN0YWdlZERyYWdTb3VyY2Vd
OworICAgIE5TQXJyYXkgKmRyYWdJdGVtc1RvQWRkID0gW3NlbGYgX2l0ZW1zRm9yQmVnaW5uaW5n
T3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGlzdHM6cmVnaXN0cmF0aW9uTGlzdHMg
c3RhZ2VkRHJhZ1NvdXJjZTpzdGFnZWREcmFnU291cmNlXTsKIAogICAgIFJFTEVBU0VfTE9HKERy
YWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uOiAlcCBhZGRpbmcgJXR1IGl0ZW1zIiwgX2RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbigpLCBkcmFnSXRlbXNUb0FkZC5jb3VudCk7CiAg
ICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5jbGVhclN0YWdlZERyYWdTb3VyY2UoZHJhZ0l0
ZW1zVG9BZGQuY291bnQgPyBXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVj
b21lQWN0aXZlOjpZZXMgOiBXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVj
b21lQWN0aXZlOjpObyk7CkBAIC02NzkzLDcgKzY3OTMsNyBAQCAtICh2b2lkKWNsZWFuVXBEcmFn
U291cmNlU2Vzc2lvblN0YXRlCiAgICAgICAgIFtbV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBz
aGFyZWRJbnN0YW5jZV0gc2V0SXRlbVByb3ZpZGVyczpuaWxdOwogICAgIH0KIAotICAgIFtbV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gc3RhZ2VSZWdpc3RyYXRpb25M
aXN0Om5pbF07CisgICAgW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNl
XSBjbGVhclJlZ2lzdHJhdGlvbkxpc3RzXTsKICAgICBbc2VsZiBfcmVzdG9yZUNhbGxvdXRCYXJJ
Zk5lZWRlZF07CiAKICAgICBbc3RkOjpleGNoYW5nZShfdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNo
b3QsIG5pbCkgcmVtb3ZlRnJvbVN1cGVydmlld107CkBAIC02OTYwLDcgKzY5NjAsNyBAQCAtICh2
b2lkKV9wcmVwYXJlVG9EcmFnUHJvbWlzZWRBdHRhY2htZW50Oihjb25zdCBXZWJDb3JlOjpQcm9t
aXNlZEF0dGFjaG1lbnRJbmZvJgogCiAgICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqcGFz
dGVib2FyZCA9IFtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXTsKICAg
ICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBbcmVnaXN0cmF0aW9uTGlzdCBpdGVtUHJv
dmlkZXJdIF07Ci0gICAgW3Bhc3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0OnJlZ2lzdHJh
dGlvbkxpc3QuZ2V0KCldOworICAgIFtwYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0aW9uTGlzdHM6
QFsgcmVnaXN0cmF0aW9uTGlzdC5nZXQoKSBdXTsKIH0KIAogLSAoV0tEcmFnRGVzdGluYXRpb25B
Y3Rpb24pX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyb3BTZXNzaW9uOihpZCA8VUlEcm9wU2Vz
c2lvbj4pc2Vzc2lvbgpAQCAtNjk5OSwyNiArNjk5OSwzOCBAQCAtICh2b2lkKV9yZXN0b3JlQ2Fs
bG91dEJhcklmTmVlZGVkCiAgICAgX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wID0g
Tk87CiB9CiAKLS0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKV9pdGVtc0ZvckJlZ2lubmluZ09y
QWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlvbkxpc3Q6KFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0ICopcmVnaXN0cmF0aW9uTGlzdCBzdGFnZWREcmFnU291cmNlOihjb25z
dCBXZWJLaXQ6OkRyYWdTb3VyY2VTdGF0ZSYpc3RhZ2VkRHJhZ1NvdXJjZQorLSAoTlNBcnJheTxV
SURyYWdJdGVtICo+ICopX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVn
aXN0cmF0aW9uTGlzdHM6KE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xp
c3QgKj4gKilyZWdpc3RyYXRpb25MaXN0cyBzdGFnZWREcmFnU291cmNlOihjb25zdCBXZWJLaXQ6
OkRyYWdTb3VyY2VTdGF0ZSYpc3RhZ2VkRHJhZ1NvdXJjZQogewotICAgIE5TSXRlbVByb3ZpZGVy
ICpkZWZhdWx0SXRlbVByb3ZpZGVyID0gcmVnaXN0cmF0aW9uTGlzdC5pdGVtUHJvdmlkZXI7Ci0g
ICAgaWYgKCFkZWZhdWx0SXRlbVByb3ZpZGVyKQorICAgIGlmICghcmVnaXN0cmF0aW9uTGlzdHMu
Y291bnQpCiAgICAgICAgIHJldHVybiBAWyBdOwogCi0gICAgTlNBcnJheSAqYWRqdXN0ZWRJdGVt
UHJvdmlkZXJzOworICAgIE5TTXV0YWJsZUFycmF5ICphZGp1c3RlZEl0ZW1Qcm92aWRlcnMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURl
bGVnYXRlID0gc2VsZi53ZWJWaWV3VUlEZWxlZ2F0ZTsKICAgICBpZiAoW3VpRGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzphZGp1c3RlZERhdGFJbnRlcmFjdGlv
bkl0ZW1Qcm92aWRlcnNGb3JJdGVtUHJvdmlkZXI6cmVwcmVzZW50aW5nT2JqZWN0czphZGRpdGlv
bmFsRGF0YTopXSkgewotICAgICAgICBhdXRvIHJlcHJlc2VudGluZ09iamVjdHMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgYXV0byBhZGRpdGlvbmFs
RGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAg
ICAgIFtyZWdpc3RyYXRpb25MaXN0IGVudW1lcmF0ZUl0ZW1zOltyZXByZXNlbnRpbmdPYmplY3Rz
LCBhZGRpdGlvbmFsRGF0YV0gKGlkIDxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXI+IGl0ZW0sIE5T
VUludGVnZXIpIHsKLSAgICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHJlcHJlc2VudGluZ09iamVjdEZvckNsaWVudCldKQotICAgICAgICAgICAgICAgIFty
ZXByZXNlbnRpbmdPYmplY3RzIGFkZE9iamVjdDppdGVtLnJlcHJlc2VudGluZ09iamVjdEZvckNs
aWVudF07Ci0gICAgICAgICAgICBpZiAoW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih0eXBlSWRlbnRpZmllckZvckNsaWVudCldICYmIFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoZGF0YUZvckNsaWVudCldKQotICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsRGF0
YSBzZXRPYmplY3Q6aXRlbS5kYXRhRm9yQ2xpZW50IGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVy
Rm9yQ2xpZW50XTsKLSAgICAgICAgfV07Ci0gICAgICAgIGFkanVzdGVkSXRlbVByb3ZpZGVycyA9
IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGFkanVzdGVkRGF0YUludGVyYWN0aW9uSXRl
bVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpkZWZhdWx0SXRlbVByb3ZpZGVyIHJlcHJlc2VudGlu
Z09iamVjdHM6cmVwcmVzZW50aW5nT2JqZWN0cy5nZXQoKSBhZGRpdGlvbmFsRGF0YTphZGRpdGlv
bmFsRGF0YS5nZXQoKV07Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkanVzdGVkSXRlbVByb3ZpZGVy
cyA9IEBbIGRlZmF1bHRJdGVtUHJvdmlkZXIgXTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjb25zaWRlciBhIG5ldyBVSSBkZWxlZ2F0ZSBob29rIHRoYXQgYWNjZXB0cyBhIGxpc3Qgb2Yg
aXRlbSBwcm92aWRlcnMsIHNvIHdlIGRvbid0IG5lZWQgdG8gaW52b2tlIHRoaXMgZGVsZWdhdGUg
bWV0aG9kIHJlcGVhdGVkbHkgZm9yIG11bHRpcGxlIGl0ZW1zLgorICAgICAgICBmb3IgKFdlYkl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpsaXN0IGluIHJlZ2lzdHJhdGlvbkxpc3Rz
KSB7CisgICAgICAgICAgICBOU0l0ZW1Qcm92aWRlciAqZGVmYXVsdEl0ZW1Qcm92aWRlciA9IGxp
c3QuaXRlbVByb3ZpZGVyOworICAgICAgICAgICAgaWYgKCFkZWZhdWx0SXRlbVByb3ZpZGVyKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIHJlcHJlc2VudGlu
Z09iamVjdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgICAgIGF1dG8gYWRkaXRpb25hbERhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdF0pOworICAgICAgICAgICAgW2xpc3QgZW51bWVyYXRlSXRlbXM6W3JlcHJl
c2VudGluZ09iamVjdHMsIGFkZGl0aW9uYWxEYXRhXSAoaWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhcj4gaXRlbSwgTlNVSW50ZWdlcikgeworICAgICAgICAgICAgICAgIGlmIChbaXRlbSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHJlcHJlc2VudGluZ09iamVjdEZvckNsaWVudCldKQor
ICAgICAgICAgICAgICAgICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRlbS5y
ZXByZXNlbnRpbmdPYmplY3RGb3JDbGllbnRdOworICAgICAgICAgICAgICAgIGlmIChbaXRlbSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHR5cGVJZGVudGlmaWVyRm9yQ2xpZW50KV0gJiYg
W2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihkYXRhRm9yQ2xpZW50KV0pCisgICAg
ICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsRGF0YSBzZXRPYmplY3Q6aXRlbS5kYXRhRm9yQ2xp
ZW50IGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVyRm9yQ2xpZW50XTsKKyAgICAgICAgICAgIH1d
OworICAgICAgICAgICAgTlNBcnJheSAqYWRqdXN0ZWRJdGVtcyA9IFt1aURlbGVnYXRlIF93ZWJW
aWV3Ol93ZWJWaWV3IGFkanVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Q
cm92aWRlcjpkZWZhdWx0SXRlbVByb3ZpZGVyIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50
aW5nT2JqZWN0cy5nZXQoKSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV07Cisg
ICAgICAgICAgICBpZiAoYWRqdXN0ZWRJdGVtcy5jb3VudCkKKyAgICAgICAgICAgICAgICBbYWRq
dXN0ZWRJdGVtUHJvdmlkZXJzIGFkZE9iamVjdHNGcm9tQXJyYXk6YWRqdXN0ZWRJdGVtc107Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0ICpsaXN0IGluIHJlZ2lzdHJhdGlvbkxpc3RzKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byAqZGVmYXVsdEl0ZW1Qcm92aWRlciA9IGxpc3QuaXRlbVByb3ZpZGVyKQorICAg
ICAgICAgICAgICAgIFthZGp1c3RlZEl0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0OmRlZmF1bHRJdGVt
UHJvdmlkZXJdOworICAgICAgICB9CisgICAgfQogCiAgICAgTlNNdXRhYmxlQXJyYXkgKmRyYWdJ
dGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTphZGp1c3RlZEl0ZW1Qcm92
aWRlcnMuY291bnRdOwogICAgIGZvciAoTlNJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciBpbiBh
ZGp1c3RlZEl0ZW1Qcm92aWRlcnMpIHsKQEAgLTcyNjEsOCArNzI3Myw4IEBAIC0gKE5TQXJyYXk8
VUlEcmFnSXRlbSAqPiAqKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRl
cmFjdGlvbiBpdGVtCiAgICAgfQogCiAgICAgYXV0byBzdGFnZWREcmFnU291cmNlID0gX2RyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5zdGFnZWREcmFnU291cmNlKCk7Ci0gICAgV2ViSXRlbVByb3Zp
ZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKnJlZ2lzdHJhdGlvbkxpc3QgPSBbW1dlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHRha2VSZWdpc3RyYXRpb25MaXN0XTsKLSAg
ICBOU0FycmF5ICpkcmFnSXRlbXMgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1Rv
U2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaXN0OnJlZ2lzdHJhdGlvbkxpc3Qgc3RhZ2VkRHJhZ1Nv
dXJjZTpzdGFnZWREcmFnU291cmNlXTsKKyAgICBhdXRvICpyZWdpc3RyYXRpb25MaXN0cyA9IFtb
V2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlv
bkxpc3RzXTsKKyAgICBOU0FycmF5ICpkcmFnSXRlbXMgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5p
bmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaXN0czpyZWdpc3RyYXRpb25MaXN0
cyBzdGFnZWREcmFnU291cmNlOnN0YWdlZERyYWdTb3VyY2VdOwogICAgIGlmICghW2RyYWdJdGVt
cyBjb3VudF0pCiAgICAgICAgIF9wYWdlLT5kcmFnQ2FuY2VsbGVkKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmgKaW5kZXggOWYwMDM5OTAwNTlhZjQ0MjBjMDViYjdhM2MzYjk5OWZiOGMw
MDZlNC4uM2U4ODBhYjVmNjdmNjVhNDRkMGE0ZDU1NTc3Y2M4YjNkZDU1N2QwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmgKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1Bhc3RlYm9hcmRTdHJhdGVneS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVn
aWVzLmg+CiAKK2NsYXNzIFBhc3RlYm9hcmRDdXN0b21EYXRhOwogc3RydWN0IFBhc3RlYm9hcmRJ
bWFnZTsKIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTsKIAogY2xhc3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6
OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kg
ewogcHVibGljOgo=
</data>
<flag name="review"
          id="396607"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380895</attachid>
            <date>2019-10-14 10:49:12 -0700</date>
            <delta_ts>2019-10-14 14:52:33 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-202851-20191014104911.patch</filename>
            <type>text/plain</type>
            <size>81523</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI3ZGI1YmUyMTRhNWE2
YmExMGE2YTZiYWYzZDE3NTVmOGY3MWM1Yi4uNGNkYTQ4NTI4ODE5MDQ2YTkzZTA3MzgxZDEzZjE3
Mjk1NDBiMGM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxOS0xMC0xNCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJk
IEFQSV0gU3VwcG9ydCB3cml0aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGgg
U2hhcmVkQnVmZmVycyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgc29tZSBsb2dpYyBhcm91
bmQgV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEsIGluIHByZXBhcmF0aW9uIGZvciBpbXBs
ZW1lbnRpbmcgdGhlIGFzeW5jCisgICAgICAgIGNsaXBib2FyZCBBUEkuIFRoZXJlIGFyZSB0d28g
bWFpbiBnb2FscyBvZiB0aGlzIHJlZmFjdG9yaW5nOgorCisgICAgICAgIDEuIEVuYWJsZSB3cml0
aW5nIG11bHRpcGxlIGl0ZW1zIChlYWNoIGJhY2tlZCBieSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSkg
dG8gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQuCisgICAgICAgIDIuIEVuYWJsZSB3cml0aW5nIHBs
YXRmb3JtIGRhdGEgaW4gdGhlIGZvcm0gb2YgU2hhcmVkQnVmZmVycyB0byB0aGUgcGxhdGZvcm0g
cGFzdGVib2FyZC4KKworICAgICAgICBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlsczsgbm8gdGVz
dHMsIGFzIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQuCisKKyAgICAgICAgKiBI
ZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisgICAgICAgIE1vdmUgUGFzdGVib2FyZEN1c3RvbURhdGEgb3V0IG9mIFBhc3RlYm9hcmQuaCBh
bmQgaW50byBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6Y29tbWl0VG9QYXN0ZWJvYXJkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKTogRGVsZXRl
ZC4KKworICAgICAgICBNb3ZlZCB0aGVzZSBtZXRob2QgaW1wbGVtZW50YXRpb25zIHRvIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoK
KworICAgICAgICBSZWZhY3RvciBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBzbyB0aGF0IGl0cyBtZW1i
ZXIgdmFyaWFibGVzIGFyZSBub3cgcHJpdmF0ZSwgYW5kIGVuY2Fwc3VsYXRlZCBiZWhpbmQgbWV0
aG9kcworICAgICAgICBBZGRpdGlvbmFsbHksIG1ha2UgaXQgc28gdGhhdCB0aGUgb25seSB3YXkg
dG8gc2V0IGRhdGEgb24gUGFzdGVib2FyZEN1c3RvbURhdGEgaXMgdG8gdXNlIHRoZSB3cml0ZVN0
cmluZywKKyAgICAgICAgd3JpdGVEYXRhLCBhbmQgd3JpdGVTdHJpbmdJbkN1c3RvbURhdGEgbWV0
aG9kcywgd2hpY2ggZW5zdXJlIHRoYXQgdGhlIFBhc3RlYm9hcmRDdXN0b21EYXRhIGlzIGFsd2F5
cyBpbiBhCisgICAgICAgIGNvbnNpc3RlbnQgc3RhdGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Q
YXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50
cnk6OkVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpFbnRy
eTo6b3BlcmF0b3I9KToKKworICAgICAgICBSZWZhY3RvciB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
UGFzdGVib2FyZEN1c3RvbURhdGEsIHNvIHRoYXQgaXQgY29udGFpbnMgYSBsaXN0IG9mIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhIGVudHJpZXMKKyAgICAgICAgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIFZl
Y3RvcnMgYW5kIEhhc2hNYXBzLgorCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6UGFzdGVib2FyZEN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OmNyZWF0ZVNoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmFkZE9yTW92ZUVudHJ5VG9FbmQpOgorCisg
ICAgICAgIE1vdmUgbG9naWMgZnJvbSBTdGF0aWNQYXN0ZWJvYXJkIGludG8gUGFzdGVib2FyZEN1
c3RvbURhdGEsIGFuZCByZWZhY3RvciB0aGVzZSBtZXRob2RzIHRvIGhhbmRsZQorICAgICAgICBW
ZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5Pi4KKworICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRDdXN0b21EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1
c3RvbURhdGE6Om9yZGVyZWRUeXBlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6aGFzRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6aGFzU2FtZU9yaWdpbkN1c3RvbURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpyZWFkQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpyZWFk
U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpy
ZWFkU3RyaW5nSW5DdXN0b21EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRDdXN0b21EYXRhOjpmb3JFYWNoVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6Zm9yRWFjaFBsYXRmb3JtU3RyaW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoQ3VzdG9tU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoUGxhdGZv
cm1TdHJpbmdPckJ1ZmZlciBjb25zdCk6CisKKyAgICAgICAgTW92ZWQgdGhlc2UgbWV0aG9kIGlt
cGxlbWVudGF0aW9ucyBmcm9tIFN0YXRpY1Bhc3RlYm9hcmQgdG8gUGFzdGVib2FyZEN1c3RvbURh
dGEsIGFuZCBhbHNvIGludHJvZHVjZWQgc29tZSBuZXcKKyAgICAgICAgbWV0aG9kcyB0byBoZWxw
IGl0ZXJhdGUgdGhyb3VnaCB0eXBlcyBhbmQgZGF0YS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bh
c3RlYm9hcmRDdXN0b21EYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTo6c2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0
b21EYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRl
Z3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpkZWNvZGVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0YXRpY1Bhc3RlYm9hcmQ6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGlj
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U3RhdGljUGFzdGVib2FyZDo6d3JpdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nSW5DdXN0b21EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
YXRpY1Bhc3RlYm9hcmQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9h
cmQ6OnRha2VDdXN0b21EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9hcmQ6
OlN0YXRpY1Bhc3RlYm9hcmQpOiBEZWxldGVkLgorCisgICAgICAgIFJlZmFjdG9yIFN0YXRpY1Bh
c3RlYm9hcmQgdG8gbm93IGNvbnRhaW4gYSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsgYWRkaXRpb25h
bGx5LCBhZGp1c3Qgc2V2ZXJhbCBtZXRob2RzIGluCisgICAgICAgIFN0YXRpY1Bhc3RlYm9hcmQg
dG8gc2ltcGx5IGNhbGwgaW50byBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB0byB3cml0ZSwgcmVhZCwg
b3IgY2xlYXIgZGF0YS4KKworICAgICAgICAoV2ViQ29yZTo6dXBkYXRlVHlwZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnJlYWRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6
OmNvY29hVHlwZSk6IERlbGV0ZWQuCisKKyAgICAgICAgTW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUgZnJvbSBQYXN0ZWJvYXJkQ29jb2Eu
bW0gdG8KKyAgICAgICAgUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5tbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW06IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lz
dGVySXRlbXNUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJJdGVtVG9Q
YXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUp
OgorCisgICAgICAgIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSBvYmplY3RzIHRvIHRoZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkIG9uIGlPUywgYnkgZ2VuZXJhdGlu
ZworICAgICAgICBOU0l0ZW1Qcm92aWRlcnMgZm9yIGVhY2ggb25lLiBUaGlzIHJlZmFjdG9ycyB0
aGUgZXhpc3RpbmcgYHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZGAgaGVscGVyIHRvIGhhbmRsZSBt
dWx0aXBsZQorICAgICAgICByZWdpc3RyYXRpb24gbGlzdHMsIHJlbmFtZXMgaXQgdG8gYHJlZ2lz
dGVySXRlbXNUb1Bhc3RlYm9hcmRgIChwbHVyYWwpLCBhbmQgdGhlbiByZWltcGxlbWVudHMKKyAg
ICAgICAgYHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZGAgaW4gdGVybXMgb2YgYHJlZ2lzdGVySXRl
bXNUb1Bhc3RlYm9hcmRgLgorCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6
OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QpOgorCisgICAgICAgIEFkanVzdCB0
aGVzZSB0byB1c2UgZ2V0dGVycyBvbiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBpbnN0ZWFkIG9mIGFj
Y2Vzc2luZyB0aGUgbWVtYmVyIHZhcmlhYmxlcyBkaXJlY3RseS4KKworICAgICAgICAqIHBsYXRm
b3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tOgorICAgICAgICAoLVtXZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkIGluaXRdKToKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3RzOl0pOgorICAgICAgICAoLVtXZWJJdGVtUHJv
dmlkZXJQYXN0ZWJvYXJkIGNsZWFyUmVnaXN0cmF0aW9uTGlzdHNdKToKKyAgICAgICAgKC1bV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZCB0YWtlUmVnaXN0cmF0aW9uTGlzdHNdKToKKworICAgICAg
ICBSZWZhY3RvciByZWdpc3RyYXRpb24gbGlzdCBzdGFnaW5nIG9uIFdlYkl0ZW1Qcm92aWRlclBh
c3RlYm9hcmQgdG8gc3VwcG9ydCBtdWx0aXBsZSByZWdpc3RyYXRpb24gbGlzdHMsIGVhY2gKKyAg
ICAgICAgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGl0ZW0gcHJvdmlkZXIuCisKKyAgICAgICAgKC1b
V2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgdGFrZVJlZ2lzdHJhdGlv
bkxpc3RdKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZFdyaXRlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBh
c3RlYm9hcmRXcml0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9h
cmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2Fm
ZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
UGFzdGVib2FyZDo6d3JpdGUpOgorCisgICAgICAgIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSBvYmplY3RzIHRvIHRoZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkIG9u
IG1hY09TLCBieSBjcmVhdGluZyBhbmQKKyAgICAgICAgc2V0dGluZyBOU1Bhc3RlYm9hcmRJdGVt
cyBmb3IgZWFjaCBjdXN0b20gZGF0YS4gVGhpcyBtZWFucyB0aGF0IGluc3RlYWQgb2YgdXNpbmcg
bGVnYWN5IG1hY09TIHBhc3RlYm9hcmQgdHlwZXMsCisgICAgICAgIHdlIG5lZWQgdG8gdXNlIHRo
ZSAibW9kZXJuIiBOU1Bhc3RlYm9hcmRUeXBlcyB3aGVuIHdyaXRpbmcgZWFjaCBpdGVtLiBUaGlz
IGlzIGJlY2F1c2UgTlNQYXN0ZWJvYXJkSXRlbSBxdWlldGx5CisgICAgICAgIGZhaWxzIHdoZW4g
YXR0ZW1wdGluZyB0byBzZXQgZGF0YSBmb3IgYSBsZWdhY3kgcGFzdGVib2FyZCB0eXBlLgorCisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVQYXN0ZWJvYXJkSXRlbSk6CisKIDIwMTktMTAtMTAgIHlv
dWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vY2tSZWFsdGltZVZp
ZGVvU291cmNlOjpzZXRGcmFtZVJhdGVXaXRoUHJlc2V0IHNob3VsZCBub3QgdXNlIHByZXNldCBh
ZnRlciBtb3ZpbmcgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNWUxYTExYjY3MTBkNmVhNGEzMThhZjJkMjdjOTk5
ZjU3YzgzNTM5OC4uMGI3ZTJmNDEwMTFkY2ViNjcwOGZkNTJhNWYwNDM3ZWEzYjE1Y2RlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxOS0xMC0xNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ2xpcGJvYXJkIEFQSV0gU3VwcG9ydCB3cml0
aW5nIG11bHRpcGxlIFBhc3RlYm9hcmRDdXN0b21EYXRhIHdpdGggU2hhcmVkQnVmZmVycyB0byB0
aGUgcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAyODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgU2VlIFdlYkNvcmUgQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBT
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnk+OjplbmNvZGUpOgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhOjpFbnRyeT46OmRlY29kZSk6CisK
KyAgICAgICAgQWRkIGhlbHBlcnMgdG8gZW5jb2RlIGFuZCBkZWNvZGUgUGFzdGVib2FyZEN1c3Rv
bURhdGE6OkVudHJ5LgorCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UGFzdGVib2FyZEN1
c3RvbURhdGE+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9h
cmRDdXN0b21EYXRhPjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmg6CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGlu
ZyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBieSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZWFjaCBvZiBp
dHMgaXRlbXMgKHNlZQorICAgICAgICBhYm92ZSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXF1ZXN0
RE9NUGFzdGVBY2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IGNhblBlcmZvcm1BY3Rpb25Gb3JXZWJWaWV3OndpdGhTZW5k
ZXI6XSk6CisgICAgICAgIChhbGxQYXN0ZWJvYXJkSXRlbU9yaWdpbnNNYXRjaE9yaWdpbik6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZEhhbmRsZUFkZGl0aW9uYWxEcmFnSXRlbXNSZXF1
ZXN0Ol0pOgorCisgICAgICAgIFR3ZWFrIHNldmVyYWwgbWV0aG9kcyB0byB1c2UgdGhlIG5ldyBt
ZXRob2RzIG9uIFBhc3RlYm9hcmRDdXN0b21EYXRhIGluc3RlYWQgb2YgYWNjZXNzaW5nIHRoZSBt
ZW1iZXIgdmFyaWFibGVzCisgICAgICAgIGRpcmVjdGx5LgorCisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgY2xlYW5VcERyYWdTb3VyY2VTZXNzaW9uU3RhdGVdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBfcHJlcGFyZVRvRHJhZ1Byb21pc2VkQXR0YWNobWVudDpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdp
c3RyYXRpb25MaXN0czpzdGFnZWREcmFnU291cmNlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGRyYWdJbnRlcmFjdGlvbjppdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRo
UmVnaXN0cmF0aW9uTGlzdDpzdGFnZWREcmFnU291cmNlOl0pOiBEZWxldGVkLgorCisgICAgICAg
IEFkanVzdCB0aGVzZSBtZXRob2RzIHRvIGhhbmRsZSBtdWx0aXBsZSBzdGFnZWQgaXRlbSBwcm92
aWRlcnMgKGZvciBub3csIGl0IHJlbWFpbnMgdGhhdCBpT1MgZHJhZyBhbmQgZHJvcAorICAgICAg
ICBjb2RlcGF0aHMgd2lsbCBzdGlsbCBvbmx5IHdyaXRlIGEgc2luZ2xlIGl0ZW0gdG8gdGhlIHBh
c3RlYm9hcmQpLgorCiAyMDE5LTEwLTEwICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgU3BlY3VsYXRpdmVMb2FkIHNob3VsZCB1c2UgQ29tcGxldGlvbkhhbmRsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA0YmE3MWZiODAxNzY5MTQ4ZTg3MzRiOWZhMDQ0
NTRjZjZiODE3NjQ1Li5jYTBmNmUyZDEyYWE1NmZmYmI2MmIwZmJkOWNmM2QzZmJmZjcwNTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTAtMTQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NsaXBi
b2FyZCBBUEldIFN1cHBvcnQgd3JpdGluZyBtdWx0aXBsZSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB3
aXRoIFNoYXJlZEJ1ZmZlcnMgdG8gdGhlIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjg1MQorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgIFNlZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
Lmg6CisKIDIwMTktMTAtMDkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+
CiAKICAgICAgICAgW0NsaXBib2FyZCBBUEldIFJlZmFjdG9yIFBhc3RlYm9hcmQgaXRlbSByZWFk
aW5nIGZ1bmN0aW9ucyB0byB3b3JrIG9uIGJvdGggaU9TIGFuZCBtYWNPUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggMDc4YTU2NmYzYWYxNGY2NmI1MDJkNWI2MmZhZThiNmUzY2M2NTNlMC4uZjI4ZWJk
Zjg4ZTNkMGY0MDMzN2JmNTVkZWFmNmMxYWIxZDc3YTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC05MzAsNiArOTMwLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIHBsYXRmb3JtL1BPREludGVydmFsVHJlZS5oCiAgICAgcGxhdGZvcm0vUE9EUmVkQmxhY2tU
cmVlLmgKICAgICBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKyAgICBwbGF0Zm9ybS9QYXN0ZWJvYXJk
Q3VzdG9tRGF0YS5oCiAgICAgcGxhdGZvcm0vUGFzdGVib2FyZEl0ZW1JbmZvLmgKICAgICBwbGF0
Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAogICAgIHBsYXRmb3JtL1Bhc3RlYm9hcmRXcml0ZXJE
YXRhLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggYWUyNTc2NTQzNTlhZmE5YmM0MzY0Y2RjYTc0YmYyMmEz
MzAyZDNlYS4uNWY4MThhNWZhOGM1ZjgyMTc5YTE4OTJlMDFkOWRhODNmZGFkY2NhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTE3MjQsNiArMTcyNCw3IEBAIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwCiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuY3BwCiBwbGF0Zm9ybS9Ob3RJbXBs
ZW1lbnRlZC5jcHAKIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCitwbGF0Zm9ybS9QYXN0ZWJvYXJk
Q3VzdG9tRGF0YS5jcHAKIHBsYXRmb3JtL1Bhc3RlYm9hcmRXcml0ZXJEYXRhLmNwcAogcGxhdGZv
cm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmNwcAogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAwOTU3OTQzY2M0
ZmViZTM5ZGQ3MGExMjhlZTZjNGY3MTgxYTYwMjFkLi45N2RiMTVlMzY2ZjJhOWEwNmQzOTY3Y2Q2
YWNlMzRkZjk1OTdiNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTE5OCw2ICsxOTgs
NyBAQCBwbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2EubW0KIHBsYXRmb3JtL2Nv
Y29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLm1tCiBwbGF0Zm9ybS9jb2NvYS9QYXJl
bnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbQogcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENv
Y29hLm1tCitwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tCiBwbGF0
Zm9ybS9jb2NvYS9QbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbQogcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KIHBsYXRmb3JtL2NvY29hL1J1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrc0NvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDk1NTQwNGM4ODlhZGNiNDg3OGE2OGRlNmFl
ZGZhYzk5ZDhjNmFlYy4uMGQzYTBmYTdjYThjMmI1MzhlYmI4NDExYmUzOWE4OWJlYzAyODVlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDkwNSw2ICs0OTA1LDcgQEAKIAkJRjRENDNENjYyMTg4MDM4QjAwRUNFQ0FDIC8qIFNl
cmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjRENDNENjQyMTg4MDJFNjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRh
Y2htZW50RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUY0RTU3RURDMjEzRjNGNUYwMDRFQTk4RSAvKiBGb250QXR0cmlidXRlQ2hhbmdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRFNTdFREEy
MTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRFNTdFRTEyMTNGNDM0QTAwNEVB
OThFIC8qIFdlYkNvcmVOU0ZvbnRNYW5hZ2VyRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEU1N0VERjIxM0Y0MzRBMDA0RUE5OEUgLyogV2Vi
Q29yZU5TRm9udE1hbmFnZXJFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlGNEZCMzRGQzIzNTBDODVEMDBGMDA5NEEgLyogUGFzdGVib2Fy
ZEN1c3RvbURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0RkIzNEZBMjM1MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY1MDY2NEY4
MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUwNjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZv
cm1Db250cm9sbGVyLmggKi87IH07CiAJCUY1MTNBM0VBMTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxp
ZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUxM0EzRTkxNUZGNDg0MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25NZXNzYWdl
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTQ0Rjc4NzE1Q0ZCMkE4MDBB
RjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCAqLzsgfTsKQEAgLTE1MjQwLDYgKzE1MjQxLDkgQEAK
IAkJRjRFNTdFREEyMTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0RTU3RURGMjEzRjQzNEEwMDRFQTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdl
ckV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEU1N0VFMDIxM0Y0MzRBMDA0RUE5OEUgLyog
V2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJD
b3JlTlNGb250TWFuYWdlckV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjRGQjM0RkEyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhc3RlYm9hcmRDdXN0b21EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY0RkIzNEZCMjM1MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0RkIzNTAwMjM1MEM5NjIwMEYwMDk0QSAvKiBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZEN1
c3RvbURhdGFDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUx
NTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjUwNjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MTNBM0U5MTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxp
ZGF0aW9uTWVzc2FnZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjI3MjgsNiArMjI3MzIsNyBAQAogCQkJCUExODg5MEFEMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJl
bnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5oICovLAogCQkJCUExODg5MEFDMUFBMTNGMjUwMDI2
QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLywKIAkJCQk5QkVEMkNB
RjFGN0NDMDYyMDA2NjYwMTggLyogUGFzdGVib2FyZENvY29hLm1tICovLAorCQkJCUY0RkIzNTAw
MjM1MEM5NjIwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YUNvY29hLm1tICovLAogCQkJ
CUY0NjI4QTlFMjM0RDNCQkYwMEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAq
LywKIAkJCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8sCiAJ
CQkJQ0RBMjlBMDgxQ0JEOTlGNDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5o
ICovLApAQCAtMjU1OTQsNiArMjU1OTksOCBAQAogCQkJCTQxODRGNTE1MUVBRjA1OTgwMEYxOEJG
MCAvKiBPcmllbnRhdGlvbk5vdGlmaWVyLmggKi8sCiAJCQkJMkVFMDJBMUUxRjczMjQyODAwMDZB
RjcyIC8qIFBhc3RlYm9hcmQuY3BwICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAv
KiBQYXN0ZWJvYXJkLmggKi8sCisJCQkJRjRGQjM0RkIyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhLmNwcCAqLywKKwkJCQlGNEZCMzRGQTIzNTBDODVEMDBGMDA5NEEgLyog
UGFzdGVib2FyZEN1c3RvbURhdGEuaCAqLywKIAkJCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIg
LyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi8sCiAJCQkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlC
IC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICovLAogCQkJCTFBRjVFNEQyMUU1NjczNUEwMDRBMUYw
MSAvKiBQYXN0ZWJvYXJkV3JpdGVyRGF0YS5jcHAgKi8sCkBAIC0zMTE5MCw2ICszMTE5Nyw3IEBA
CiAJCQkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBh
c3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0RkIzNEZDMjM1MEM4NUQwMEYwMDk0QSAv
KiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ5Nzg2ODgxRkY0
NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzU5ODkwNTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFGNUU0RTMxRTU3NzlCMTAwNEExRjAxIC8qIFBhc3RlYm9hcmRXcml0ZXIu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFu
c2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAppbmRleCA1Yzcx
YjM2OGU2MDI4YjAxNzRmM2E3ZmRmNDM4ODY0ZDg4OGY4OGRjLi4wZDQ3YjczOTE5MzU1ZTJjNzEw
MGU4Y2UxOTYwYTQzZDQ4ZjhhNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0
YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApA
QCAtNDI2LDE1ICs0MjYsMTggQEAgdm9pZCBEYXRhVHJhbnNmZXI6OmNvbW1pdFRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiBuYXRpdmVQYXN0ZWJvYXJkKQogICAgIEFTU0VSVChpczxTdGF0aWNQYXN0
ZWJvYXJkPigqbV9wYXN0ZWJvYXJkKSAmJiAhaXM8U3RhdGljUGFzdGVib2FyZD4obmF0aXZlUGFz
dGVib2FyZCkpOwogICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhIGN1c3RvbURhdGEgPSBkb3duY2Fz
dDxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0ZWJvYXJkKS50YWtlQ3VzdG9tRGF0YSgpOwogICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmN1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZCgpKSB7Ci0gICAgICAgIGN1c3RvbURhdGEub3JpZ2luID0gbV9vcmln
aW5JZGVudGlmaWVyOworICAgICAgICBjdXN0b21EYXRhLnNldE9yaWdpbihtX29yaWdpbklkZW50
aWZpZXIpOwogICAgICAgICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlQ3VzdG9tRGF0YShjdXN0b21E
YXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgZW50cnkgOiBj
dXN0b21EYXRhLnBsYXRmb3JtRGF0YSkKLSAgICAgICAgbmF0aXZlUGFzdGVib2FyZC53cml0ZVN0
cmluZyhlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogY3Vz
dG9tRGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0YSkKLSAgICAgICAgbmF0aXZlUGFzdGVib2FyZC53
cml0ZVN0cmluZyhlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKKyAgICBjdXN0b21EYXRhLmZvckVh
Y2hQbGF0Zm9ybVN0cmluZyhbJl0gKGF1dG8mIHR5cGUsIGF1dG8mIHN0cmluZykgeworICAgICAg
ICBuYXRpdmVQYXN0ZWJvYXJkLndyaXRlU3RyaW5nKHR5cGUsIHN0cmluZyk7CisgICAgfSk7CisK
KyAgICBjdXN0b21EYXRhLmZvckVhY2hDdXN0b21TdHJpbmcoWyZdIChhdXRvJiB0eXBlLCBhdXRv
JiBzdHJpbmcpIHsKKyAgICAgICAgbmF0aXZlUGFzdGVib2FyZC53cml0ZVN0cmluZyh0eXBlLCBz
dHJpbmcpOworICAgIH0pOwogfQogCiAjaWYgIUVOQUJMRShEUkFHX1NVUFBPUlQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBmMjVmMjhjZjFjN2Vh
NzBiNDFjYWNmM2VlNTUxY2ExNjg5NGQ3ZTUzLi5lYTFiZTU0ZDJkNmUxODk2ZGZmZDcyOTgxMGNj
ZTA1NGNiMjBhYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0Fu
ZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKICAgICBjbGll
bnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCks
IG91dFR5cGVzLCBvdXREYXRhKTsKIAogICAgIG91dFR5cGVzLmFwcGVuZChQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6Y29jb2FUeXBlKCkpOwotICAgIG91dERhdGEuYXBwZW5kKFBhc3RlYm9hcmRDdXN0
b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwgeyB9LCB7
IH0sIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBvdXREYXRhLmFwcGVuZChQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJk
KCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAogICAgIGlmIChhdXRvIGFyY2hpdmUg
PSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigpKSkgewogICAgICAg
ICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlv
bigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDhmOWJhYjg0
NTYxMGQwZjkxMDdkODIzMGRmMjNlZWYxZmIwMWMxNGMuLmU3MzRiMzhhZThkYjQ4MTlhMTVjMmVm
OTgyMTRmMmQ4ZWYzYmE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3Bw
CkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3
dGYvVVJMUGFyc2VyLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTUxLDQwICs0OSw2IEBAIGJvb2wgUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9E
T01XaGVuUGFzdGVib2FyZENvbnRhaW5zRmlsZXMoY29uc3QgU3RyaW5nJiB1cmxTCiAgICAgcmV0
dXJuIHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgdXJsLnByb3RvY29sSXNCbG9iKCkg
fHwgdXJsLnByb3RvY29sSXNEYXRhKCk7CiB9CiAKLVJlZjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9h
cmRDdXN0b21EYXRhOjpjcmVhdGVTaGFyZWRCdWZmZXIoKSBjb25zdAotewotICAgIGNvbnN0IHN0
YXRpYyB1bnNpZ25lZCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uID0gMTsK
LQotICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKLSAgICBlbmNvZGVyIDw8
IGN1cnJlbnRDdXN0b21EYXRhU2VyaWFsaXphdGlvblZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBv
cmlnaW47Ci0gICAgZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tRGF0YTsKLSAgICBlbmNvZGVy
IDw8IG9yZGVyZWRUeXBlczsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwotfQotCi1QYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRC
dWZmZXImIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4U3VwcG9ydGVk
RGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uTnVtYmVyID0gMTsKLQotICAgIFBhc3RlYm9hcmRDdXN0
b21EYXRhIHJlc3VsdDsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIgeyBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNp
emUoKSB9OwotICAgIHVuc2lnbmVkIHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
ZXJzaW9uKSB8fCB2ZXJzaW9uID4gbWF4U3VwcG9ydGVkRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9u
TnVtYmVyKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQub3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnNhbWVPcmlnaW5DdXN0b21EYXRhKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9yZGVyZWRUeXBlcykpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgIVBMQVRGT1JNKENP
Q09BKQogCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyhjb25zdCBT
dHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggNjk4N2Vk
MjU2NTNmYjZjOWM2OGIzYTM3YWY3NzYwNGMwOGI2Njk1MC4uY2JmZmNhMjc1YjBiZDFhMzQxNzg1
NjVmYWNkMGQ5ZjZhNjVlNmFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIK
KyNpbmNsdWRlICJQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRJ
dGVtSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RI
YXNoU2V0Lmg+CkBAIC0xNjEsMjEgKzE2Miw2IEBAIHN0cnVjdCBQYXN0ZWJvYXJkRmlsZVJlYWRl
ciB7CiAgICAgdmlydHVhbCB2b2lkIHJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7CiB9OwogCi0vLyBG
SVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGVudHMgb2Ygc2FtZU9yaWdpbkN1
c3RvbURhdGEgYXJlIG5vdCBhY2Nlc3NpYmxlIGFjcm9zcyBkaWZmZXJlbnQgb3JpZ2lucy4KLXN0
cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7Ci0gICAgU3RyaW5nIG9yaWdpbjsKLSAgICBWZWN0
b3I8U3RyaW5nPiBvcmRlcmVkVHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGxh
dGZvcm1EYXRhOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21E
YXRhOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlU2hhcmVk
QnVmZmVyKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3RlYm9hcmRDdXN0
b21EYXRhIGZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJik7Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FU
eXBlKCk7Ci0jZW5kaWYKLX07Ci0KIGNsYXNzIFBhc3RlYm9hcmQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhc3RlYm9hcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kMjU0NjY1Nzk2NGE3MTExY2IxZjQ3NmVhMzUzZmZjNDdlOTg5N2Q2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBhc3RlYm9hcmRDdXN0b21EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFZhcmlhbnQ8U3RyaW5nLCBSZWY8
U2hhcmVkQnVmZmVyPj4gY29weVBsYXRmb3JtRGF0YShjb25zdCBWYXJpYW50PFN0cmluZywgUmVm
PFNoYXJlZEJ1ZmZlcj4+JiBvdGhlcikKK3sKKyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxTdHJpbmc+KG90aGVyKSkKKyAgICAgICAgcmV0dXJuIHsgV1RGOjpnZXQ8U3RyaW5nPihvdGhl
cikgfTsKKworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+
PihvdGhlcikpCisgICAgICAgIHJldHVybiB7IFdURjo6Z2V0PFJlZjxTaGFyZWRCdWZmZXI+Pihv
dGhlcikuY29weVJlZigpIH07CisKKyAgICByZXR1cm4geyB9OworfQorCitQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6RW50cnk6OkVudHJ5KGNvbnN0IEVudHJ5JiBlbnRyeSkKKyAgICA6IHR5cGUoZW50
cnkudHlwZSkKKyAgICAsIGN1c3RvbURhdGEoZW50cnkuY3VzdG9tRGF0YSkKKyAgICAsIHBsYXRm
b3JtRGF0YShjb3B5UGxhdGZvcm1EYXRhKGVudHJ5LnBsYXRmb3JtRGF0YSkpCit7Cit9CisKK1Bh
c3RlYm9hcmRDdXN0b21EYXRhOjpFbnRyeTo6RW50cnkoY29uc3QgU3RyaW5nJiBkYXRhVHlwZSkK
KyAgICA6IHR5cGUoZGF0YVR5cGUpCit7Cit9CisKK1Bhc3RlYm9hcmRDdXN0b21EYXRhOjpFbnRy
eTo6RW50cnkoKSA9IGRlZmF1bHQ7CitQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnk6OkVudHJ5
KEVudHJ5JiYpID0gZGVmYXVsdDsKKworUGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5JiBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnk6Om9wZXJhdG9yPShjb25zdCBFbnRyeSYgZW50cnkpCit7
CisgICAgdHlwZSA9IGVudHJ5LnR5cGU7CisgICAgY3VzdG9tRGF0YSA9IGVudHJ5LmN1c3RvbURh
dGE7CisgICAgcGxhdGZvcm1EYXRhID0gY29weVBsYXRmb3JtRGF0YShlbnRyeS5wbGF0Zm9ybURh
dGEpOworICAgIHJldHVybiAqdGhpczsKK30KKworUGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5
JiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnk6Om9wZXJhdG9yPShFbnRyeSYmKSA9IGRlZmF1
bHQ7CisKK1Bhc3RlYm9hcmRDdXN0b21EYXRhOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpID0gZGVm
YXVsdDsKK1Bhc3RlYm9hcmRDdXN0b21EYXRhOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YShjb25zdCBQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YSYpID0gZGVmYXVsdDsKK1Bhc3RlYm9hcmRDdXN0b21EYXRhOjpQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YShQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYmKSA9IGRlZmF1bHQ7CitQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6flBhc3RlYm9hcmRDdXN0b21EYXRhKCkgPSBkZWZhdWx0Owor
CitQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6UGFzdGVib2FyZEN1c3RvbURhdGEoU3RyaW5nJiYgb3Jp
Z2luLCBWZWN0b3I8RW50cnk+JiYgZGF0YSkKKyAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQoreworfQorCitSZWY8U2hhcmVkQnVmZmVy
PiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y3JlYXRlU2hhcmVkQnVmZmVyKCkgY29uc3QKK3sKKyAg
ICBjb25zdGV4cHIgdW5zaWduZWQgY3VycmVudEN1c3RvbURhdGFTZXJpYWxpemF0aW9uVmVyc2lv
biA9IDE7CisKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CisgICAgZW5j
b2RlciA8PCBjdXJyZW50Q3VzdG9tRGF0YVNlcmlhbGl6YXRpb25WZXJzaW9uOworICAgIGVuY29k
ZXIgPDwgbV9vcmlnaW47CisgICAgZW5jb2RlciA8PCBzYW1lT3JpZ2luQ3VzdG9tU3RyaW5nRGF0
YSgpOworICAgIGVuY29kZXIgPDwgb3JkZXJlZFR5cGVzKCk7CisgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKK30K
KworUGFzdGVib2FyZEN1c3RvbURhdGEgUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRC
dWZmZXIoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgY29uc3RleHByIHVuc2ln
bmVkIG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVyc2lvbk51bWJlciA9IDE7CisKKyAg
ICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSByZXN1bHQ7CisgICAgYXV0byBkZWNvZGVyID0gYnVmZmVy
LmRlY29kZXIoKTsKKyAgICB1bnNpZ25lZCB2ZXJzaW9uOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodmVyc2lvbikgfHwgdmVyc2lvbiA+IG1heFN1cHBvcnRlZERhdGFTZXJpYWxpemF0aW9uVmVy
c2lvbk51bWJlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1fb3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc2FtZU9yaWdpbkN1c3RvbVN0cmluZ0RhdGEpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgVmVjdG9yPFN0cmluZz4gb3JkZXJlZFR5cGVzOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUob3JkZXJlZFR5cGVzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGZvciAo
YXV0byYgdHlwZSA6IG9yZGVyZWRUeXBlcykKKyAgICAgICAgcmVzdWx0LndyaXRlU3RyaW5nSW5D
dXN0b21EYXRhKHR5cGUsIHNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhLmdldCh0eXBlKSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjp3cml0
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
YWRkT3JNb3ZlRW50cnlUb0VuZCh0eXBlKS5wbGF0Zm9ybURhdGEgPSB7IHZhbHVlIH07Cit9CisK
K3ZvaWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OndyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IFJlZjxTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3sKKyAgICBhZGRPck1vdmVFbnRyeVRvRW5kKHR5
cGUpLnBsYXRmb3JtRGF0YSA9IHsgV1RGTW92ZShkYXRhKSB9OworfQorCit2b2lkIFBhc3RlYm9h
cmRDdXN0b21EYXRhOjp3cml0ZVN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgYWRkT3JNb3ZlRW50cnlUb0VuZCh0eXBlKS5j
dXN0b21EYXRhID0gdmFsdWU7Cit9CisKK1Bhc3RlYm9hcmRDdXN0b21EYXRhOjpFbnRyeSYgUGFz
dGVib2FyZEN1c3RvbURhdGE6OmFkZE9yTW92ZUVudHJ5VG9FbmQoY29uc3QgU3RyaW5nJiB0eXBl
KQoreworICAgIGF1dG8gaW5kZXggPSBtX2RhdGEuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50
cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGUgPT0gdHlwZTsKKyAgICB9KTsKKyAgICBh
dXRvIGVudHJ5ID0gaW5kZXggPT0gbm90Rm91bmQgPyBFbnRyeSh0eXBlKSA6IG1fZGF0YVtpbmRl
eF07CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBtX2RhdGEucmVtb3ZlKGlu
ZGV4KTsKKyAgICBtX2RhdGEuYXBwZW5kKFdURk1vdmUoZW50cnkpKTsKKyAgICByZXR1cm4gbV9k
YXRhLmxhc3QoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y2xlYXIoKQorewor
ICAgIG1fZGF0YS5jbGVhcigpOworfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjbGVh
cihjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgbV9kYXRhLnJlbW92ZUZpcnN0TWF0Y2hpbmco
WyZdIChhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudHlwZSA9PSB0eXBlOwor
ICAgIH0pOworfQorCitQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgUGFzdGVib2FyZEN1c3RvbURhdGE6
Om9wZXJhdG9yPShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgb3RoZXIpCit7CisgICAgbV9v
cmlnaW4gPSBvdGhlci5vcmlnaW4oKTsKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
b3JkZXJlZFR5cGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLm1hcChbJl0gKGF1dG8m
IGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS50eXBlOworICAgIH0pOworfQorCitib29s
IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
ZGF0YS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZEN1c3RvbURhdGE6Omhhc1NhbWVP
cmlnaW5DdXN0b21EYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbm90Rm91bmQgIT0gbV9kYXRh
LmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiAhZW50cnku
Y3VzdG9tRGF0YS5pc051bGwoKTsKKyAgICB9KTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gUGFzdGVib2FyZEN1c3RvbURhdGE6OnNhbWVPcmlnaW5DdXN0b21TdHJpbmdEYXRhKCkgY29u
c3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjdXN0b21EYXRhOworICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX2RhdGEpCisgICAgICAgIGN1c3RvbURhdGEuc2V0KGVudHJ5LnR5cGUs
IGVudHJ5LmN1c3RvbURhdGEpOworICAgIHJldHVybiBjdXN0b21EYXRhOworfQorCitSZWZQdHI8
U2hhcmVkQnVmZmVyPiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6cmVhZEJ1ZmZlcihjb25zdCBTdHJp
bmcmIHR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZGF0YSkgeworICAg
ICAgICBpZiAoZW50cnkudHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KGVudHJ5
LnBsYXRmb3JtRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihXVEY6OmdldDxS
ZWY8U2hhcmVkQnVmZmVyPj4oZW50cnkucGxhdGZvcm1EYXRhKS5nZXQoKSk7CisKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitTdHJpbmcg
UGFzdGVib2FyZEN1c3RvbURhdGE6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25z
dAoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2RhdGEpIHsKKyAgICAgICAgaWYgKGVudHJ5
LnR5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oZW50cnkucGxhdGZvcm1EYXRhKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KGVudHJ5LnBsYXRmb3JtRGF0YSk7CisKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9kYXRhKSB7CisgICAgICAgIGlm
IChlbnRyeS50eXBlID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gZW50cnkuY3VzdG9tRGF0
YTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YTo6Zm9yRWFjaFR5cGUoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBmdW5jdGlvbikg
Y29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9kYXRhKQorICAgICAgICBmdW5jdGlv
bihlbnRyeS50eXBlKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Zm9yRWFjaFBs
YXRmb3JtU3RyaW5nKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpPiYmIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBt
X2RhdGEpIHsKKyAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oZW50
cnkucGxhdGZvcm1EYXRhKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8g
c3RyaW5nID0gV1RGOjpnZXQ8U3RyaW5nPihlbnRyeS5wbGF0Zm9ybURhdGEpOworICAgICAgICBp
ZiAoIXN0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKGVudHJ5LnR5cGUsIHN0
cmluZyk7CisgICAgfQorfQorCit2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoQ3Vz
dG9tU3RyaW5nKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpPiYmIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Rh
dGEpIHsKKyAgICAgICAgaWYgKCFlbnRyeS5jdXN0b21EYXRhLmlzTnVsbCgpKQorICAgICAgICAg
ICAgZnVuY3Rpb24oZW50cnkudHlwZSwgZW50cnkuY3VzdG9tRGF0YSk7CisgICAgfQorfQorCit2
b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoUGxhdGZvcm1TdHJpbmdPckJ1ZmZlcihG
dW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmFyaWFudDxTdHJpbmcsIFJl
ZjxTaGFyZWRCdWZmZXI+PiYgZGF0YSk+JiYgZnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fZGF0YSkgeworICAgICAgICBhdXRvJiBkYXRhID0gZW50cnkucGxhdGZv
cm1EYXRhOworICAgICAgICBpZiAoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihkYXRh
KSAmJiAhV1RGOjpnZXQ8U3RyaW5nPihkYXRhKS5pc051bGwoKSkgfHwgV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8U2hhcmVkQnVmZmVyPj4oZGF0YSkpCisgICAgICAgICAgICBmdW5jdGlvbihl
bnRyeS50eXBlLCBkYXRhKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY5YzBlOWFhNzIxNGZkYzZlOThkMjY2Zjk0MDY3MGU5YWVhMWZiYjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oCkBA
IC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsK
KworY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGEgeworcHVibGljOgorICAgIHN0cnVjdCBFbnRy
eSB7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIEVudHJ5KCk7CisgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIEVudHJ5KGNvbnN0IEVudHJ5Jik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIEVudHJ5KEVu
dHJ5JiYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBFbnRyeSYgb3BlcmF0b3I9KGNvbnN0IEVu
dHJ5JiBvdGhlckRhdGEpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBFbnRyeSYgb3BlcmF0b3I9
KEVudHJ5JiYgb3RoZXJEYXRhKTsKKyAgICAgICAgRW50cnkoY29uc3QgU3RyaW5nJiB0eXBlKTsK
KworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIGN1c3RvbURhdGE7CisgICAg
ICAgIFZhcmlhbnQ8U3RyaW5nLCBSZWY8U2hhcmVkQnVmZmVyPj4gcGxhdGZvcm1EYXRhOworICAg
IH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpOworICAgIFdF
QkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRDdXN0b21EYXRhKFN0cmluZyYmIG9yaWdpbiwgVmVjdG9y
PEVudHJ5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YShQYXN0
ZWJvYXJkQ3VzdG9tRGF0YSYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Q
YXN0ZWJvYXJkQ3VzdG9tRGF0YSgpOworCisgICAgY29uc3QgU3RyaW5nJiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHZvaWQgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luKSB7IG1fb3JpZ2luID0gb3JpZ2luOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
U2hhcmVkQnVmZmVyPiBjcmVhdGVTaGFyZWRCdWZmZXIoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUGFzdGVib2FyZEN1c3RvbURhdGEgZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBT
aGFyZWRCdWZmZXImKTsKKworICAgIFN0cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlw
ZSkgY29uc3Q7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlcihjb25zdCBTdHJp
bmcmIHR5cGUpIGNvbnN0OworICAgIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSkgY29uc3Q7CisKKyAgICB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCB3cml0ZURhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpOworICAgIHZvaWQgd3JpdGVT
dHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGNsZWFyKGNvbnN0IFN0cmluZyYgdHlw
ZSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29u
c3QgY2hhciogY29jb2FUeXBlKCk7CisjZW5kaWYKKworICAgIHZvaWQgZm9yRWFjaFR5cGUoRnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgY29uc3Q7CisgICAgdm9pZCBmb3JFYWNoUGxh
dGZvcm1TdHJpbmcoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk+JiYpIGNvbnN0OworICAgIHZvaWQgZm9yRWFjaFBsYXRmb3JtU3RyaW5nT3JCdWZm
ZXIoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZhcmlhbnQ8U3RyaW5n
LCBSZWY8U2hhcmVkQnVmZmVyPj4mIGRhdGEpPiYmKSBjb25zdDsKKyAgICB2b2lkIGZvckVhY2hD
dXN0b21TdHJpbmcoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk+JiYpIGNvbnN0OworCisgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNTYW1lT3JpZ2luQ3VzdG9tRGF0YSgpIGNvbnN0OworCisgICAgVmVjdG9yPFN0cmluZz4g
b3JkZXJlZFR5cGVzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZEN1c3Rv
bURhdGEmIG9wZXJhdG9yPShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgb3RoZXJEYXRhKTsK
KworICAgIGNvbnN0IFZlY3RvcjxFbnRyeT4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzYW1lT3JpZ2luQ3Vz
dG9tU3RyaW5nRGF0YSgpIGNvbnN0OworICAgIEVudHJ5JiBhZGRPck1vdmVFbnRyeVRvRW5kKGNv
bnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIG1fb3JpZ2luOworICAgIFZlY3RvcjxFbnRyeT4g
bV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAppbmRleCA1NzdjYWY4OTViZWIxOTc5ODk5Mjcw
MWVkNWZmOGFjNzA1MjBmMzFiLi5lZDg2MDg1ZmQ3NjI3ODU3MGFjNmVjZGMyMzc0NTdiYzA1NDMw
NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRl
Z3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaApA
QCAtMzEsMTMgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwor
Y2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBjbGFzcyBTZWxlY3Rpb25EYXRhOwogY2xhc3Mg
U2hhcmVkQnVmZmVyOwogc3RydWN0IFBhc3RlYm9hcmRJbWFnZTsKIHN0cnVjdCBQYXN0ZWJvYXJk
SXRlbUluZm87CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29u
dGVudDsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIAogY2xhc3MgUGFzdGVib2FyZFN0
cmF0ZWd5IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0
ZWJvYXJkLmgKaW5kZXggZGYwMzkzZTM1ZmNhNWI3ZGIwMzQ2MzAzNzYwYWZlYzZhZGFhNmMzMi4u
NzBhYjE0ZWQwNWRhYmViY2QwZDgzNTViYzdmY2M5NmI5MGNiODE0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKQEAgLTQ3LDkgKzQ3LDkgQEAgc3Ry
dWN0IHdwZV9wYXN0ZWJvYXJkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsK
K2NsYXNzIFBhc3RlYm9hcmRDdXN0b21EYXRhOwogY2xhc3MgU2VsZWN0aW9uRGF0YTsKIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIHN0cnVjdCBQYXN0
ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZEl0ZW1JbmZvOwogc3RydWN0IFBhc3RlYm9h
cmRVUkw7CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwg
cmVhZFVSTChzaXplX3QgaW5kZXgsIFN0cmluZyYgdGl0bGUpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBjb3VudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBudW1iZXJP
ZkZpbGVzKCkgY29uc3Q7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlKGNvbnN0IFZl
Y3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBsb25nIHdy
aXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBv
cmlnaW4pIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApp
bmRleCA2MWZkN2M0ODc3YTJiYWE1NmNiMjJkNDA0ODY1OTUzZTAzNTk0MDgwLi5iNTZiNzE4NjYz
ODM3NDM1YTU1MzExZDE5NTY3NzI1YzRmZmY5ZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9u
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIzOSw2ICsyNDAsMTEgQEAgdm9pZCBTaGFy
ZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKCkgY29uc3QKIH0KICNlbmRpZgogCitX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIFNoYXJlZEJ1ZmZlcjo6ZGVjb2RlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwg
c2l6ZSgpIH07Cit9CisKIGJvb2wgU2hhcmVkQnVmZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBlYzM3MTM0MWFiOTQ5NWI3ZDM1NzYx
MzUxYjJiMDliMTM1YTNlZjNiLi5hZWIxOTExMmM3OTQzNWEzMDczNjljMmRiMDIzODRkNmY1OTdi
NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNTcsNiArNTcs
MTIgQEAgT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7CiAjZW5kaWYKIAor
bmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgeworY2xhc3MgRGVjb2RlcjsK
K30KK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTaGFyZWRCdWZmZXJEYXRhVmll
dzsKQEAgLTE5MCw2ICsxOTYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhpbnRNZW1vcnlOb3RO
ZWVkZWRTb29uKCkgY29uc3Q7CiAKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoKSBjb25zdDsKKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFyZWRCdWZmZXImKSBj
b25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmVkQnVmZmVyJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKaW5kZXggMTczMTNlNDYwNzg1ZjMwMzRkNDEwYzMx
MWFmMzk4ZTY4ZjA5YWU3YS4uZTQ4MDY2NjI0ZjRkYzg5YTUxMzk1YjMwZTA1NzBlNTFmMjZmM2Ey
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKQEAg
LTI2LDY1ICsyNiw2NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bh
c3RlYm9hcmQuaCIKIAorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVN0YXRpY1Bhc3RlYm9hcmQ6OlN0YXRpY1Bhc3RlYm9hcmQoKQorU3RhdGljUGFz
dGVib2FyZDo6U3RhdGljUGFzdGVib2FyZCgpID0gZGVmYXVsdDsKK1N0YXRpY1Bhc3RlYm9hcmQ6
On5TdGF0aWNQYXN0ZWJvYXJkKCkgPSBkZWZhdWx0OworCitib29sIFN0YXRpY1Bhc3RlYm9hcmQ6
Omhhc0RhdGEoKQogeworICAgIHJldHVybiBtX2N1c3RvbURhdGEuaGFzRGF0YSgpOwogfQogCi1i
b29sIFN0YXRpY1Bhc3RlYm9hcmQ6Omhhc0RhdGEoKQorVmVjdG9yPFN0cmluZz4gU3RhdGljUGFz
dGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1
cm4gIW1fcGxhdGZvcm1EYXRhLmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRhLmlzRW1wdHkoKTsK
KyAgICByZXR1cm4gbV9jdXN0b21EYXRhLm9yZGVyZWRUeXBlcygpOworfQorCitWZWN0b3I8U3Ry
aW5nPiBTdGF0aWNQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKK3sK
KyAgICByZXR1cm4gbV9jdXN0b21EYXRhLm9yZGVyZWRUeXBlcygpOwogfQogCiBTdHJpbmcgU3Rh
dGljUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9jdXN0b21EYXRhLnJl
YWRTdHJpbmcodHlwZSk7CiB9CiAKIFN0cmluZyBTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZXR1cm4gbV9jdXN0b21E
YXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9jdXN0b21EYXRhLnJlYWRTdHJpbmdJbkN1c3Rv
bURhdGEodHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVR5cGVzKFZlY3RvcjxTdHJpbmc+
JiB0eXBlcywgU3RyaW5nIHR5cGUsIGJvb2wgbW92ZVRvRW5kKQordm9pZCBTdGF0aWNQYXN0ZWJv
YXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgaWYgKG1vdmVUb0VuZCkKLSAgICAgICAgdHlwZXMucmVtb3ZlRmlyc3QodHlwZSk7
Ci0gICAgQVNTRVJUKCF0eXBlcy5jb250YWlucyh0eXBlKSk7Ci0gICAgdHlwZXMuYXBwZW5kKHR5
cGUpOworICAgIG1fY3VzdG9tRGF0YS53cml0ZVN0cmluZyh0eXBlLCB2YWx1ZSk7CiB9CiAKLXZv
aWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQordm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZURhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGRhdGEpCiB7Ci0gICAgYm9vbCB0eXBl
V2FzQWxyZWFkeVByZXNlbnQgPSAhbV9wbGF0Zm9ybURhdGEuc2V0KHR5cGUsIHZhbHVlKS5pc05l
d0VudHJ5IHx8IG1fY3VzdG9tRGF0YS5jb250YWlucyh0eXBlKTsKLSAgICB1cGRhdGVUeXBlcyht
X3R5cGVzLCB0eXBlLCB0eXBlV2FzQWxyZWFkeVByZXNlbnQpOworICAgIG1fY3VzdG9tRGF0YS53
cml0ZURhdGEodHlwZSwgV1RGTW92ZShkYXRhKSk7CiB9CiAKIHZvaWQgU3RhdGljUGFzdGVib2Fy
ZDo6d3JpdGVTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIGJvb2wgdHlwZVdhc0FscmVhZHlQcmVzZW50ID0gIW1fY3VzdG9t
RGF0YS5zZXQodHlwZSwgdmFsdWUpLmlzTmV3RW50cnkgfHwgbV9wbGF0Zm9ybURhdGEuY29udGFp
bnModHlwZSk7Ci0gICAgdXBkYXRlVHlwZXMobV90eXBlcywgdHlwZSwgdHlwZVdhc0FscmVhZHlQ
cmVzZW50KTsKKyAgICBtX2N1c3RvbURhdGEud3JpdGVTdHJpbmdJbkN1c3RvbURhdGEodHlwZSwg
dmFsdWUpOwogfQogCiB2b2lkIFN0YXRpY1Bhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKICAgICBtX2N1
c3RvbURhdGEuY2xlYXIoKTsKLSAgICBtX3BsYXRmb3JtRGF0YS5jbGVhcigpOwotICAgIG1fdHlw
ZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJp
bmcmIHR5cGUpCiB7Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5yZW1vdmUodHlwZSkgJiYgIW1f
Y3VzdG9tRGF0YS5yZW1vdmUodHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3R5cGVzLnJl
bW92ZUZpcnN0KHR5cGUpOwotICAgIEFTU0VSVCghbV90eXBlcy5jb250YWlucyh0eXBlKSk7Cisg
ICAgbV9jdXN0b21EYXRhLmNsZWFyKHR5cGUpOwogfQogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBT
dGF0aWNQYXN0ZWJvYXJkOjp0YWtlQ3VzdG9tRGF0YSgpCiB7Ci0gICAgcmV0dXJuIHsgeyB9LCBX
VEZNb3ZlKG1fdHlwZXMpLCBXVEZNb3ZlKG1fcGxhdGZvcm1EYXRhKSwgV1RGTW92ZShtX2N1c3Rv
bURhdGEpIH07CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jdXN0b21EYXRhLCB7IH0pOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKaW5kZXgg
ZWVkZDcwMjliNGY0Mzk0NTcxMjI0NjVmZTQ2Y2FiN2ZiNGM2ZDgyNy4uYTU2YTQ3MjZjNTkzY2Y1
YmE4YTRjZTUzMzFiZWQ4MjJhMTlhYjQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0
YXRpY1Bhc3RlYm9hcmQuaApAQCAtMzIsMjIgKzMyLDI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgU2hhcmVkQnVmZmVyOworCiBjbGFzcyBTdGF0aWNQYXN0ZWJvYXJkIGZpbmFs
IDogcHVibGljIFBhc3RlYm9hcmQgewogcHVibGljOgogICAgIFN0YXRpY1Bhc3RlYm9hcmQoKTsK
KyAgICB+U3RhdGljUGFzdGVib2FyZCgpOwogCiAgICAgUGFzdGVib2FyZEN1c3RvbURhdGEgdGFr
ZUN1c3RvbURhdGEoKTsKIAogICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBib29sIGhhc0RhdGEoKSBmaW5hbDsKLSAgICBWZWN0b3I8U3RyaW5n
PiB0eXBlc1NhZmVGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiBtX3R5
cGVzOyB9Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygp
IGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVG
b3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
c0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWw7CiAgICAgU3RyaW5nIHJlYWRPcmlnaW4o
KSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAgICBTdHJpbmcgcmVhZFN0cmluZyhjb25zdCBTdHJp
bmcmIHR5cGUpIGZpbmFsOwogICAgIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSkgZmluYWw7CiAKICAgICB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIHdyaXRlRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgZGF0YSk7CiAgICAgdm9pZCB3
cml0ZVN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
ZGF0YSk7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFsOwogICAgIHZvaWQgY2xlYXIoY29uc3QgU3Ry
aW5nJiB0eXBlKSBmaW5hbDsKQEAgLTcyLDkgKzc2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgVmVjdG9yPFN0cmluZz4gbV90eXBlczsKLSAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBtX3BsYXRmb3JtRGF0YTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2N1
c3RvbURhdGE7CisgICAgUGFzdGVib2FyZEN1c3RvbURhdGEgbV9jdXN0b21EYXRhOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1t
CmluZGV4IGMwZmJhNGJlZjA3NTE1ZGU0YWQyNTRiNDAzNzA3ZjExYjVjYjE2NzUuLmQwMzQxYmU0
ZjE5MmZlZTc5YjZjNjMxZjY1ZGY2MjczNzdhNzUwOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KQEAgLTUxLDExICs1MSw2IEBAIHN0
YXRpYyBOU0JpdG1hcEltYWdlRmlsZVR5cGUgYml0bWFwUE5HRmlsZVR5cGUoKQogUGFzdGVib2Fy
ZFdlYkNvbnRlbnQ6OlBhc3RlYm9hcmRXZWJDb250ZW50KCkgPSBkZWZhdWx0OwogUGFzdGVib2Fy
ZFdlYkNvbnRlbnQ6On5QYXN0ZWJvYXJkV2ViQ29udGVudCgpID0gZGVmYXVsdDsKIAotY29uc3Qg
Y2hhciogUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpCi17Ci0gICAgcmV0dXJuICJj
b20uYXBwbGUuV2ViS2l0LmN1c3RvbS1wYXN0ZWJvYXJkLWRhdGEiOwotfQotCiBlbnVtIGNsYXNz
IEltYWdlVHlwZSB7CiAgICAgSW52YWxpZCA9IDAsCiAgICAgVElGRiwKQEAgLTI2MCwxMiArMjU1
LDEyIEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkK
IAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKQogewotICAgIHJldHVybiByZWFkQ3VzdG9tRGF0YSgpLnNhbWVPcmlnaW5DdXN0b21E
YXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gcmVhZEN1c3RvbURhdGEoKS5yZWFkU3RyaW5nSW5D
dXN0b21EYXRhKHR5cGUpOwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZE9yaWdpbigpCiB7
Ci0gICAgcmV0dXJuIHJlYWRDdXN0b21EYXRhKCkub3JpZ2luOworICAgIHJldHVybiByZWFkQ3Vz
dG9tRGF0YSgpLm9yaWdpbigpOwogfQogCiBjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgUGFz
dGVib2FyZDo6cmVhZEN1c3RvbURhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvUGFzdGVib2FyZEN1c3RvbURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0b21EYXRhQ29jb2EubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjYyMTI4NDRmMjEwNGE3NzdjZjY1NTZkNzVhNmU1Y2FlYzk3M2RlOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDdXN0b21EYXRhQ29j
b2EubW0KQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUGFzdGVib2FyZEN1c3RvbURhdGEuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIFBhc3RlYm9hcmRDdXN0b21EYXRh
Ojpjb2NvYVR5cGUoKQoreworICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5jdXN0b20tcGFz
dGVib2FyZC1kYXRhIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
QWJzdHJhY3RQYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJh
Y3RQYXN0ZWJvYXJkLmgKaW5kZXggZWE1NjQ0Mjg1MTQ4MjFlZjZiOWRkYjQ0ZDM0ZmFhOTcwZmEw
NzVkMy4uNjA3MTRlYzE2ZTMzNzgyYjgxYmUyMWZmNmViNGE3YzE2ZTNjYzQ2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0cmFjdFBhc3RlYm9hcmQuaApAQCAtMjks
MTggKzI5LDEzIEBACiAKIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKLSNpZiBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKIEBjbGFzcyBXZWJJdGVtUHJvdmlkZXJS
ZWdpc3RyYXRpb25JbmZvTGlzdDsKLSNlbmRpZgogCiBAcHJvdG9jb2wgQWJzdHJhY3RQYXN0ZWJv
YXJkIDxOU09iamVjdD4KIEByZXF1aXJlZAogCiBAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9t
aWMpIE5TSW50ZWdlciBudW1iZXJPZkl0ZW1zOwotCi0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTEwMDAwCiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgbnVsbGFi
bGUpIE5TQXJyYXk8X19raW5kb2YgTlNJdGVtUHJvdmlkZXIgKj4gKml0ZW1Qcm92aWRlcnM7Ci0j
ZW5kaWYKIAogLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXBhc3RlYm9hcmRUeXBlczsKIC0gKE5T
RGF0YSAqKWRhdGFGb3JQYXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcgKilwYXN0ZWJvYXJkVHlwZTsK
QEAgLTQ5LDEwICs0NCw5IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAtIChOU0ludGVnZXIp
Y2hhbmdlQ291bnQ7CiAKIEBvcHRpb25hbAotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDExMDAwMAotLSAodm9pZClzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6KG51bGxhYmxl
IFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICopaW5mbzsKLS0gKG51bGxhYmxl
IFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICopdGFrZVJlZ2lzdHJhdGlvbkxp
c3Q7Ci0jZW5kaWYKKy0gKHZvaWQpc3RhZ2VSZWdpc3RyYXRpb25MaXN0czooTlNBcnJheTxXZWJJ
dGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqKWluZm9MaXN0czsKKy0gKHZvaWQp
Y2xlYXJSZWdpc3RyYXRpb25MaXN0czsKKy0gKE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0
cmF0aW9uSW5mb0xpc3QgKj4gKil0YWtlUmVnaXN0cmF0aW9uTGlzdHM7CiAtICh2b2lkKXNldEl0
ZW1zOihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqKWl0ZW1zOwogQHByb3BlcnR5IChyZWFkb25s
eSwgbm9uYXRvbWljKSBOU0ludGVnZXIgbnVtYmVyT2ZGaWxlczsKIEBwcm9wZXJ0eSAocmVhZG9u
bHksIG5vbmF0b21pYykgTlNBcnJheTxOU1VSTCAqPiAqYWxsRHJvcHBlZEZpbGVVUkxzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW0KaW5kZXggOTE2ZGFlYmQwYTI3ODBjOTM2M2QzNTU5ODVhOWI2MTJlZjQxZDEwNy4uZDE2M2Fk
NjZiN2IzMzliMTZkMWViNTRlYmRiMTk5MDcxOGUyZTA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0yNjYsNyAr
MjY2LDcgQEAgbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFN0cmluZ0ZvclR5cGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJikKIAogbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNoYW5n
ZUNvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gWyhpZDxBYnN0cmFjdFBhc3RlYm9hcmQ+KW1f
cGFzdGVib2FyZC5nZXQoKSBjaGFuZ2VDb3VudF07CisgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQg
Y2hhbmdlQ291bnRdOwogfQogCiBTdHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1l
KCkKQEAgLTI5MiwyOSArMjkyLDQxIEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBsYXRm
b3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlCiAKIHN0YXRp
YyBOU1N0cmluZyAqd2ViSU9TUGFzdGVQYm9hcmRUeXBlID0gQCJpT1MgcmljaCBjb250ZW50IHBh
c3RlIHBhc3RlYm9hcmQgdHlwZSI7CiAKLXN0YXRpYyB2b2lkIHJlZ2lzdGVySXRlbVRvUGFzdGVi
b2FyZChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25z
VG9SZWdpc3RlciwgaWQgPEFic3RyYWN0UGFzdGVib2FyZD4gcGFzdGVib2FyZCkKK3N0YXRpYyB2
b2lkIHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9hcmQoTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdp
c3RyYXRpb25JbmZvTGlzdCAqPiAqaXRlbUxpc3RzLCBpZCA8QWJzdHJhY3RQYXN0ZWJvYXJkPiBw
YXN0ZWJvYXJkKQogewogI2lmIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIC8vIEluIG1hY0Nh
dGFseXN0LCAtW1VJUGFzdGVib2FyZCBzZXRJdGVtUHJvdmlkZXJzOl0gaXMgbm90IHlldCBzdXBw
b3J0ZWQsIHNvIHdlIGZhbGwgYmFjayB0byBzZXR0aW5nIGFuIGl0ZW0gZGljdGlvbmFyeSB3aGVu
CiAgICAgLy8gcG9wdWxhdGluZyB0aGUgcGFzdGVib2FyZCB1cG9uIGNvcHkuCiAgICAgaWYgKFtw
YXN0ZWJvYXJkIGlzS2luZE9mQ2xhc3M6UEFMOjpnZXRVSVBhc3RlYm9hcmRDbGFzcygpXSkgewot
ICAgICAgICBhdXRvIGl0ZW1EaWN0aW9uYXJ5ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgZW51
bWVyYXRlSXRlbXM6W2l0ZW1EaWN0aW9uYXJ5XSAoaWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJh
cj4gaXRlbSwgTlNVSW50ZWdlcikgewotICAgICAgICAgICAgaWYgKFtpdGVtIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IodHlwZUlkZW50aWZpZXJGb3JDbGllbnQpXSAmJiBbaXRlbSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRhdGFGb3JDbGllbnQpXSkKLSAgICAgICAgICAgICAg
ICBbaXRlbURpY3Rpb25hcnkgc2V0T2JqZWN0Oml0ZW0uZGF0YUZvckNsaWVudCBmb3JLZXk6aXRl
bS50eXBlSWRlbnRpZmllckZvckNsaWVudF07Ci0gICAgICAgIH1dOwotICAgICAgICBbcGFzdGVi
b2FyZCBzZXRJdGVtczpAWyBpdGVtRGljdGlvbmFyeS5nZXQoKSBdXTsKKyAgICAgICAgYXV0byBp
dGVtRGljdGlvbmFyaWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5Oml0ZW1MaXN0cy5jb3VudF0pOworICAgICAgICBmb3IgKFdlYkl0ZW1Qcm92aWRl
clJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGluIGl0ZW1M
aXN0cykgeworICAgICAgICAgICAgYXV0byBpdGVtRGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlcHJlc2VudGF0aW9uc1Rv
UmVnaXN0ZXIubnVtYmVyT2ZJdGVtc10pOworICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1Rv
UmVnaXN0ZXIgZW51bWVyYXRlSXRlbXM6W2l0ZW1EaWN0aW9uYXJ5XSAoaWQgPFdlYkl0ZW1Qcm92
aWRlclJlZ2lzdHJhcj4gaXRlbSwgTlNVSW50ZWdlcikgeworICAgICAgICAgICAgICAgIGlmIChb
aXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHR5cGVJZGVudGlmaWVyRm9yQ2xpZW50
KV0gJiYgW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihkYXRhRm9yQ2xpZW50KV0p
CisgICAgICAgICAgICAgICAgICAgIFtpdGVtRGljdGlvbmFyeSBzZXRPYmplY3Q6aXRlbS5kYXRh
Rm9yQ2xpZW50IGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVyRm9yQ2xpZW50XTsKKyAgICAgICAg
ICAgIH1dOworICAgICAgICAgICAgW2l0ZW1EaWN0aW9uYXJpZXMgYWRkT2JqZWN0Oml0ZW1EaWN0
aW9uYXJ5LmdldCgpXTsKKyAgICAgICAgfQorICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVtczpp
dGVtRGljdGlvbmFyaWVzLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBQTEFURk9STShNQUNDQVRBTFlTVCkKIAotICAgIGlmIChOU0l0ZW1Qcm92aWRlciAqaXRlbVBy
b3ZpZGVyID0gcmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5pdGVtUHJvdmlkZXIpCi0gICAgICAg
IFtwYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyIF1dOwotICAgIGVs
c2UKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVyczpAWyBdXTsKKyAgICBhdXRv
IGl0ZW1Qcm92aWRlcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6aXRlbUxpc3RzLmNvdW50XSk7CisgICAgZm9yIChXZWJJdGVtUHJvdmlkZXJSZWdp
c3RyYXRpb25JbmZvTGlzdCAqcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBpbiBpdGVtTGlzdHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gKml0ZW1Qcm92aWRlciA9IHJlcHJlc2VudGF0aW9uc1RvUmVn
aXN0ZXIuaXRlbVByb3ZpZGVyKQorICAgICAgICAgICAgW2l0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0
Oml0ZW1Qcm92aWRlcl07CisgICAgfQorCisgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVy
czppdGVtUHJvdmlkZXJzLmdldCgpXTsKIAotICAgIGlmIChbcGFzdGVib2FyZCByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHN0YWdlUmVnaXN0cmF0aW9uTGlzdDopXSkKLSAgICAgICAgW3Bh
c3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0OnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXJd
OworICAgIGlmIChbcGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YWdl
UmVnaXN0cmF0aW9uTGlzdHM6KV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0
aW9uTGlzdHM6aXRlbUxpc3RzXTsKK30KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJJdGVtVG9QYXN0
ZWJvYXJkKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICpyZXByZXNlbnRhdGlv
bnNUb1JlZ2lzdGVyLCBpZCA8QWJzdHJhY3RQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkKQoreworICAg
IHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9hcmQoQFsgcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBd
LCBwYXN0ZWJvYXJkKTsKIH0KIAogbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKQEAgLTM5Myw3ICs0MDUsNyBAQCB2b2lkIFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAgICAg
IGFkZFJlcHJlc2VudGF0aW9uc0ZvclBsYWluVGV4dChyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
LmdldCgpLCBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCk7CiAKICAgICBQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YSBjdXN0b21EYXRhOwotICAgIGN1c3RvbURhdGEub3JpZ2luID0gY29udGVudC5jb250
ZW50T3JpZ2luOworICAgIGN1c3RvbURhdGEuc2V0T3JpZ2luKGNvbnRlbnQuY29udGVudE9yaWdp
bik7CiAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpjdXN0b21EYXRhLmNy
ZWF0ZVNoYXJlZEJ1ZmZlcigpLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JUeXBlOkAoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV07CiAKICAgICByZWdpc3Rlckl0ZW1Ub1Bhc3Rl
Ym9hcmQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5nZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgp
KTsKQEAgLTUxNiw4ICs1MjgsOCBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6
OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgbwogCiAgICAgaWYg
KE5TRGF0YSAqc2VyaWFsaXplZEN1c3RvbURhdGEgPSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQYXN0
ZWJvYXJkVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSldKSB7CiAgICAg
ICAgIGF1dG8gZGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKHNlcmlhbGl6ZWRDdXN0b21EYXRhKS5nZXQoKSk7Ci0gICAgICAg
IGlmIChkYXRhLm9yaWdpbiA9PSBvcmlnaW4pIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdHlw
ZSA6IGRhdGEub3JkZXJlZFR5cGVzKQorICAgICAgICBpZiAoZGF0YS5vcmlnaW4oKSA9PSBvcmln
aW4pIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKCkp
CiAgICAgICAgICAgICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTU0OCwxMiArNTYwLDEyIEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFz
dGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvCiAg
ICAgcmV0dXJuIGNvcHlUb1ZlY3Rvcihkb21QYXN0ZWJvYXJkVHlwZXMpOwogfQogCi1sb25nIFBs
YXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEp
CitzdGF0aWMgUmV0YWluUHRyPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0PiBj
cmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25MaXN0KGNvbnN0IFBhc3RlYm9hcmRDdXN0b21E
YXRhJiBkYXRhKQogewogICAgIGF1dG8gcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciA9IGFkb3B0
TlMoW1tXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCBhbGxvY10gaW5pdF0pOwog
ICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0
eWxlOldlYlByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKIAotICAgIGlmIChkYXRh
LnNhbWVPcmlnaW5DdXN0b21EYXRhLnNpemUoKSkgeworICAgIGlmIChkYXRhLmhhc1NhbWVPcmln
aW5DdXN0b21EYXRhKCkgfHwgIWRhdGEub3JpZ2luKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
IChhdXRvIHNlcmlhbGl6ZWRTaGFyZWRCdWZmZXIgPSBkYXRhLmNyZWF0ZVNoYXJlZEJ1ZmZlcigp
LT5jcmVhdGVOU0RhdGEoKSkgewogICAgICAgICAgICAgLy8gV2Ugc3Rhc2ggdGhlIGxpc3Qgb2Yg
c3VwcGxpZWQgcGFzdGVib2FyZCB0eXBlcyBpbiB0ZWFtRGF0YSBoZXJlIGZvciBjb21wYXRpYmls
aXR5IHdpdGggZHJhZyBhbmQgZHJvcC4KICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBjb250ZW50
cyBvZiBpdGVtIHByb3ZpZGVycyBjYW5ub3QgYmUgbG9hZGVkIHByaW9yIHRvIGRyb3AsIGJ1dCB0
aGUgcGFzdGVib2FyZCB0eXBlcyBhcmUKQEAgLTU2MiwyOSArNTc0LDM4IEBAIGxvbmcgUGxhdGZv
cm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKICAg
ICAgICAgICAgIC8vIGFsbCBvZiB0aGUgY3VzdG9tIHR5cGVzLiBXZSB1c2UgdGhlIHRlYW1EYXRh
IHByb3BlcnR5LCBhdmFpbGFibGUgb24gTlNJdGVtUHJvdmlkZXIgb24gaU9TLCB0byBzdG9yZQog
ICAgICAgICAgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiwgc2luY2UgdGhlIGNvbnRlbnRzIG9mIHRl
YW1EYXRhIGFyZSBpbW1lZGlhdGVseSBhdmFpbGFibGUgcHJpb3IgdG8gdGhlIGRyb3AuCiAgICAg
ICAgICAgICBOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiAqdHlwZXNBc05TQXJyYXkgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZGF0YS5v
cmRlcmVkVHlwZXMpCisgICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRU
eXBlcygpKQogICAgICAgICAgICAgICAgIFt0eXBlc0FzTlNBcnJheSBhZGRPYmplY3Q6dHlwZV07
Ci0gICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBzZXRUZWFtRGF0YTpzZWN1
cmVseUFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0KEB7IEAob3JpZ2luS2V5Rm9yVGVhbURhdGEp
IDogZGF0YS5vcmlnaW4sIEAoY3VzdG9tVHlwZXNLZXlGb3JUZWFtRGF0YSkgOiB0eXBlc0FzTlNB
cnJheSB9KV07CisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBzZXRUZWFt
RGF0YTpzZWN1cmVseUFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0KEB7IEAob3JpZ2luS2V5Rm9y
VGVhbURhdGEpIDogZGF0YS5vcmlnaW4oKSwgQChjdXN0b21UeXBlc0tleUZvclRlYW1EYXRhKSA6
IHR5cGVzQXNOU0FycmF5IH0pXTsKICAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lz
dGVyIGFkZERhdGE6c2VyaWFsaXplZFNoYXJlZEJ1ZmZlci5nZXQoKSBmb3JUeXBlOkAoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKV07CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRUeXBlcykgewotICAgICAgICBOU1N0cmluZyAq
c3RyaW5nVmFsdWUgPSBkYXRhLnBsYXRmb3JtRGF0YS5nZXQodHlwZSk7CisgICAgZGF0YS5mb3JF
YWNoUGxhdGZvcm1TdHJpbmcoWyZdIChhdXRvJiB0eXBlLCBhdXRvJiB2YWx1ZSkgeworICAgICAg
ICBOU1N0cmluZyAqc3RyaW5nVmFsdWUgPSB2YWx1ZTsKICAgICAgICAgaWYgKCFzdHJpbmdWYWx1
ZS5sZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBhdXRvIGNvY29hVHlwZSA9IHBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlw
ZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIGF1
dG8gY29jb2FUeXBlID0gUGxhdGZvcm1QYXN0ZWJvYXJkOjpwbGF0Zm9ybVBhc3RlYm9hcmRUeXBl
Rm9yU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKS5jcmVhdGVDRlN0cmluZygpOwog
ICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjb2NvYVR5cGUuZ2V0KCksIGtVVFR5cGVVUkwp
KQogICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkUmVwcmVzZW50aW5n
T2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOnN0cmluZ1ZhbHVlXV07CiAgICAgICAgIGVsc2Ug
aWYgKFVUVHlwZUNvbmZvcm1zVG8oY29jb2FUeXBlLmdldCgpLCBrVVRUeXBlUGxhaW5UZXh0KSkK
ICAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZFJlcHJlc2VudGluZ09i
amVjdDpzdHJpbmdWYWx1ZV07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFtyZXByZXNlbnRh
dGlvbnNUb1JlZ2lzdGVyIGFkZERhdGE6W3N0cmluZ1ZhbHVlIGRhdGFVc2luZ0VuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBmb3JUeXBlOihOU1N0cmluZyAqKWNvY29hVHlwZS5nZXQoKV07
Ci0gICAgfQorICAgIH0pOwogCi0gICAgcmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKHJlcHJlc2Vu
dGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCksIG1fcGFzdGVib2FyZC5nZXQoKSk7Ci0gICAgcmV0dXJu
IFsoaWQ8QWJzdHJhY3RQYXN0ZWJvYXJkPiltX3Bhc3RlYm9hcmQuZ2V0KCkgY2hhbmdlQ291bnRd
OworICAgIHJldHVybiByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyOworfQorCit2b2lkIFBsYXRm
b3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYg
aXRlbURhdGEpCit7CisgICAgYXV0byByZWdpc3RyYXRpb25MaXN0cyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTppdGVtRGF0YS5zaXplKCldKTsKKyAg
ICBmb3IgKGF1dG8mIGRhdGEgOiBpdGVtRGF0YSkgeworICAgICAgICBpZiAoYXV0byBpdGVtTGlz
dCA9IGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSkpCisgICAgICAgICAg
ICBbcmVnaXN0cmF0aW9uTGlzdHMgYWRkT2JqZWN0Oml0ZW1MaXN0LmdldCgpXTsKKyAgICB9Cisg
ICAgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZChyZWdpc3RyYXRpb25MaXN0cy5nZXQoKSwgbV9w
YXN0ZWJvYXJkLmdldCgpKTsKIH0KIAogI2Vsc2UKQEAgLTYyMCw5ICs2NDEsOCBAQCBWZWN0b3I8
U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRl
KGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotbG9uZyBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJikKK3ZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JikKIHsK
LSAgICByZXR1cm4gMDsKIH0KIAogI2VuZGlmCkBAIC03MjEsNiArNzQxLDEyIEBAIHZvaWQgUGxh
dGZvcm1QYXN0ZWJvYXJkOjp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHR5CiAgICAgW21fcGFzdGVib2FyZCB1cGRhdGVTdXBwb3J0ZWRUeXBlSWRl
bnRpZmllcnM6dHlwZXNBcnJheV07CiB9CiAKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0
ZShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICB3cml0ZShWZWN0b3I8
UGFzdGVib2FyZEN1c3RvbURhdGE+IHsgZGF0YSB9KTsKKyAgICByZXR1cm4gW21fcGFzdGVib2Fy
ZCBjaGFuZ2VDb3VudF07Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlk
ZXJQYXN0ZWJvYXJkLm1tCmluZGV4IDQzYWZiZGQwYTU0NGVjMTJkMTQ0NzYxMWExYzE4ZjhlNGE0
M2NkZWEuLjcxOTNiNjViZWJlNDlhNTA0MGRkOGQ4MTE4ZWJhMGZlZjViMmE4NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJk
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkLm1tCkBAIC00NjIsNyArNDYyLDcgQEAgQGltcGxlbWVudGF0aW9uIFdlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQgewogICAgIC8vIEZJWE1FOiBUaGVzZSBpdmFycyBzaG91bGQgYmUgcmVm
YWN0b3JlZCB0byBiZSBWZWN0b3I8UmV0YWluUHRyPFR5cGU+PiBpbnN0ZWFkIG9mIGdlbmVyaWMg
TlNBcnJheXMuCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9pdGVtUHJvdmlkZXJzOwogICAgIFJl
dGFpblB0cjxOU0FycmF5PiBfc3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzOwotICAgIFJldGFpblB0
cjxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdD4gX3N0YWdlZFJlZ2lzdHJhdGlv
bkluZm9MaXN0OworICAgIFJldGFpblB0cjxOU0FycmF5PFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJh
dGlvbkluZm9MaXN0ICo+PiBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3RzOwogCiAgICAgVmVj
dG9yPFJldGFpblB0cjxXZWJJdGVtUHJvdmlkZXJMb2FkUmVzdWx0Pj4gX2xvYWRSZXN1bHRzOwog
fQpAQCAtNDg0LDcgKzQ4NCw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgICAgIF9jaGFu
Z2VDb3VudCA9IDA7CiAgICAgICAgIF9wZW5kaW5nT3BlcmF0aW9uQ291bnQgPSAwOwogICAgICAg
ICBfc3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzID0gbmlsOwotICAgICAgICBfc3RhZ2VkUmVnaXN0
cmF0aW9uSW5mb0xpc3QgPSBuaWw7CisgICAgICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlz
dHMgPSBuaWw7CiAgICAgICAgIF9sb2FkUmVzdWx0cyA9IHsgfTsKICAgICB9CiAgICAgcmV0dXJu
IHNlbGY7CkBAIC04NTMsMTYgKzg1MywyMCBAQCAtICh2b2lkKWVudW1lcmF0ZUl0ZW1Qcm92aWRl
cnNXaXRoQmxvY2s6KHZvaWQgKF4pKF9fa2luZG9mIE5TSXRlbVByb3ZpZGVyICppdGVtUAogICAg
IFtfaXRlbVByb3ZpZGVycyBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpibG9ja107CiB9CiAK
LS0gKHZvaWQpc3RhZ2VSZWdpc3RyYXRpb25MaXN0OihudWxsYWJsZSBXZWJJdGVtUHJvdmlkZXJS
ZWdpc3RyYXRpb25JbmZvTGlzdCAqKWluZm8KKy0gKHZvaWQpc3RhZ2VSZWdpc3RyYXRpb25MaXN0
czooTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqKWxpc3Rz
CiB7Ci0gICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0gaW5mby5udW1iZXJPZkl0ZW1z
ID8gaW5mbyA6IG5pbDsKKyAgICBBU1NFUlQobGlzdHMuY291bnQpOworICAgIF9zdGFnZWRSZWdp
c3RyYXRpb25JbmZvTGlzdHMgPSBsaXN0czsKIH0KIAotLSAoV2ViSXRlbVByb3ZpZGVyUmVnaXN0
cmF0aW9uSW5mb0xpc3QgKil0YWtlUmVnaXN0cmF0aW9uTGlzdAorLSAodm9pZCljbGVhclJlZ2lz
dHJhdGlvbkxpc3RzCiB7Ci0gICAgYXV0byBzdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IF9z
dGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdDsKLSAgICBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xp
c3QgPSBuaWw7Ci0gICAgcmV0dXJuIHN0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0LmF1dG9yZWxl
YXNlKCk7CisgICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IG5pbDsKK30KKworLSAo
TlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqKXRha2VSZWdp
c3RyYXRpb25MaXN0cworeworICAgIHJldHVybiBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3Rz
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggOGViMTVjZjg4NTJkOTg1NzQ0N2UwNTljMzhhY2FlYmEy
MzQxNWQwNC4uYzFlY2VmMTRjYWNjNzFlN2M2NGY2OTA0NjFjM2I5MDE1MTljZmQ4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50
JiBjb250ZW50KQogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvbnRlbnQuZGF0YUluU3Ry
aW5nRm9ybWF0LCBsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpLCBtX3Bhc3RlYm9hcmROYW1l
KTsKIAogICAgIFBhc3RlYm9hcmRDdXN0b21EYXRhIGRhdGE7Ci0gICAgZGF0YS5vcmlnaW4gPSBj
b250ZW50LmNvbnRlbnRPcmlnaW47CisgICAgZGF0YS5zZXRPcmlnaW4oY29udGVudC5jb250ZW50
T3JpZ2luKTsKICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKGRhdGEuY3JlYXRlU2hhcmVkQnVmZmVy
KCkucHRyKCksIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkV3JpdGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRX
cml0ZXIubW0KaW5kZXggMGZlNTA1ZGU1NWM2NjE2NDhmMDU5ZGE5YjdmYWUyYTA3N2ZjNjIzZS4u
YjE5YjUyZWM5NGYwOTM0YjNiN2ExODQ0NzJlY2I2NjZmMzNkM2UzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRXcml0ZXIubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRXcml0ZXIubW0KQEAgLTExOCw3ICsxMTgs
NyBAQCBSZXRhaW5QdHI8aWQgPE5TUGFzdGVib2FyZFdyaXRpbmc+PiBjcmVhdGVQYXN0ZWJvYXJk
V3JpdGVyKGNvbnN0IFBhc3RlYm9hcmRXcml0ZQogICAgICAgICAgICAgW3Bhc3RlYm9hcmRJdGVt
IHNldERhdGE6d2ViQ29udGVudC0+Y2xpZW50RGF0YVtpXS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkg
Zm9yVHlwZTp0b1VUSVVubGVzc0FscmVhZHlVVEkod2ViQ29udGVudC0+Y2xpZW50VHlwZXNbaV0p
LmdldCgpXTsKIAogICAgICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBjdXN0b21EYXRhOwotICAg
ICAgICBjdXN0b21EYXRhLm9yaWdpbiA9IHdlYkNvbnRlbnQtPmNvbnRlbnRPcmlnaW47CisgICAg
ICAgIGN1c3RvbURhdGEuc2V0T3JpZ2luKHdlYkNvbnRlbnQtPmNvbnRlbnRPcmlnaW4pOwogICAg
ICAgICBbcGFzdGVib2FyZEl0ZW0gc2V0RGF0YTpjdXN0b21EYXRhLmNyZWF0ZVNoYXJlZEJ1ZmZl
cigpLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JUeXBlOnRvVVRJVW5sZXNzQWxyZWFkeVVUSShT
dHJpbmcoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKSkuZ2V0KCldOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9h
cmRNYWMubW0KaW5kZXggMTk0YWRkYmNmOWUxNWM0ZWRiNjY1MDQxMTIxMzNhMTMyZGVmNDk2Ni4u
M2U5ZjQ2NjJmY2Q4NGI0ZGU4ZTU4NDRiYmQ2YTgxN2Y0NjJmOGY5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCkBAIC0x
OTgsOCArMTk4LDggQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1Nh
ZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIG8KICAgICBMaXN0SGFzaFNldDxT
dHJpbmc+IGRvbVBhc3RlYm9hcmRUeXBlczsKICAgICBpZiAoTlNEYXRhICpzZXJpYWxpemVkQ3Vz
dG9tRGF0YSA9IFttX3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0
YTo6Y29jb2FUeXBlKCkpXSkgewogICAgICAgICBhdXRvIGRhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihTaGFyZWRCdWZmZXI6OmNyZWF0ZShzZXJpYWxpemVkQ3Vz
dG9tRGF0YSkuZ2V0KCkpOwotICAgICAgICBpZiAoZGF0YS5vcmlnaW4gPT0gb3JpZ2luKSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkYXRhLm9yZGVyZWRUeXBlcykKKyAgICAgICAg
aWYgKGRhdGEub3JpZ2luKCkgPT0gb3JpZ2luKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHR5
cGUgOiBkYXRhLm9yZGVyZWRUeXBlcygpKQogICAgICAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRU
eXBlcy5hZGQodHlwZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjUsMjEgKzIyNSwyNCBAQCBW
ZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFu
ZFdyaXRlKGNvbnN0IFN0cmluZyYgbwogbG9uZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNv
bnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQogewogICAgIE5TTXV0YWJsZUFycmF5ICp0
eXBlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGRh
dGEucGxhdGZvcm1EYXRhKQotICAgICAgICBbdHlwZXMgYWRkT2JqZWN0OnBsYXRmb3JtUGFzdGVi
b2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGVudHJ5LmtleSldOwotICAg
IGlmIChkYXRhLnNhbWVPcmlnaW5DdXN0b21EYXRhLnNpemUoKSkKKyAgICBkYXRhLmZvckVhY2hU
eXBlKFsmXSAoYXV0byYgdHlwZSkgeworICAgICAgICBbdHlwZXMgYWRkT2JqZWN0OnBsYXRmb3Jt
UGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpXTsKKyAg
ICB9KTsKKworICAgIGJvb2wgaGFzU2FtZU9yaWdpbkN1c3RvbURhdGEgPSBkYXRhLmhhc1NhbWVP
cmlnaW5DdXN0b21EYXRhKCk7CisgICAgaWYgKGhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKQogICAg
ICAgICBbdHlwZXMgYWRkT2JqZWN0OkAoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgp
KV07CiAKICAgICBbbV9wYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpuaWxdOwog
Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGRhdGEucGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIGF1
dG8gcGxhdGZvcm1UeXBlID0gcGxhdGZvcm1QYXN0ZWJvYXJkVHlwZUZvclNhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUoZW50cnkua2V5KTsKKyAgICBkYXRhLmZvckVhY2hQbGF0Zm9ybVN0cmlu
ZyhbJl0gKGF1dG8mIHR5cGUsIGF1dG8mIGRhdGEpIHsKKyAgICAgICAgYXV0byBwbGF0Zm9ybVR5
cGUgPSBwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0
ZSh0eXBlKTsKICAgICAgICAgQVNTRVJUKCFwbGF0Zm9ybVR5cGUuaXNFbXB0eSgpKTsKICAgICAg
ICAgaWYgKCFwbGF0Zm9ybVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgW21fcGFzdGVib2Fy
ZCBzZXRTdHJpbmc6ZW50cnkudmFsdWUgZm9yVHlwZTpwbGF0Zm9ybVR5cGVdOwotICAgIH0KKyAg
ICAgICAgICAgIFttX3Bhc3RlYm9hcmQgc2V0U3RyaW5nOmRhdGEgZm9yVHlwZTpwbGF0Zm9ybVR5
cGVdOworICAgIH0pOwogCi0gICAgaWYgKGRhdGEuc2FtZU9yaWdpbkN1c3RvbURhdGEuc2l6ZSgp
KSB7CisgICAgaWYgKGhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKSB7CiAgICAgICAgIGlmIChhdXRv
IHNlcmlhbGl6ZWRDdXN0b21EYXRhID0gZGF0YS5jcmVhdGVTaGFyZWRCdWZmZXIoKS0+Y3JlYXRl
TlNEYXRhKCkpCiAgICAgICAgICAgICBbbV9wYXN0ZWJvYXJkIHNldERhdGE6c2VyaWFsaXplZEN1
c3RvbURhdGEuZ2V0KCkgZm9yVHlwZTpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUo
KSldOwogICAgIH0KQEAgLTQ2Myw2ICs0NjYsNDMgQEAgaW50IFBsYXRmb3JtUGFzdGVib2FyZDo6
Y291bnQoKSBjb25zdAogICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIHBhc3RlYm9hcmRJdGVtc10u
Y291bnQ7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8TlNQYXN0ZWJvYXJkSXRlbT4gY3JlYXRlUGFz
dGVib2FyZEl0ZW0oY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCit7CisgICAgYXV0
byBpdGVtID0gYWRvcHROUyhbW05TUGFzdGVib2FyZEl0ZW0gYWxsb2NdIGluaXRdKTsKKworICAg
IGlmIChkYXRhLmhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKCkgfHwgIWRhdGEub3JpZ2luKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChhdXRvIHNlcmlhbGl6ZWRDdXN0b21EYXRhID0gZGF0YS5j
cmVhdGVTaGFyZWRCdWZmZXIoKS0+Y3JlYXRlTlNEYXRhKCkpCisgICAgICAgICAgICBbaXRlbSBz
ZXREYXRhOnNlcmlhbGl6ZWRDdXN0b21EYXRhLmdldCgpIGZvclR5cGU6QChQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKKyAgICB9CisKKyAgICBkYXRhLmZvckVhY2hQbGF0Zm9y
bVN0cmluZ09yQnVmZmVyKFsmXSAoYXV0byYgdHlwZSwgYXV0byYgc3RyaW5nT3JCdWZmZXIpIHsK
KyAgICAgICAgYXV0byBwbGF0Zm9ybVR5cGUgPSBtb2Rlcm5QYXN0ZWJvYXJkVHlwZUZvcldlYlNh
ZmVNSU1FVHlwZSh0eXBlKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVR5cGUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihz
dHJpbmdPckJ1ZmZlcikpIHsKKyAgICAgICAgICAgIFtpdGVtIHNldFN0cmluZzpXVEY6OmdldDxT
dHJpbmc+KHN0cmluZ09yQnVmZmVyKSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWY8U2hhcmVkQnVmZmVyPj4oc3RyaW5nT3JCdWZmZXIpKSB7CisgICAgICAgICAgICBpZiAo
YXV0byBwbGF0Zm9ybURhdGEgPSBXVEY6OmdldDxSZWY8U2hhcmVkQnVmZmVyPj4oc3RyaW5nT3JC
dWZmZXIpLT5jcmVhdGVOU0RhdGEoKSkKKyAgICAgICAgICAgICAgICBbaXRlbSBzZXREYXRhOnBs
YXRmb3JtRGF0YS5nZXQoKSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07CisgICAgICAgIH0KKyAgICB9
KTsKKworICAgIHJldHVybiBpdGVtOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3Jp
dGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEpCit7CisgICAg
YXV0byBwbGF0Zm9ybUl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Oml0ZW1EYXRhLnNpemUoKV0pOworICAgIGZvciAoYXV0byYgZGF0YSA6IGl0
ZW1EYXRhKQorICAgICAgICBbcGxhdGZvcm1JdGVtcyBhZGRPYmplY3Q6Y3JlYXRlUGFzdGVib2Fy
ZEl0ZW0oZGF0YSkuZ2V0KCldOworICAgIFttX3Bhc3RlYm9hcmQgY2xlYXJDb250ZW50c107Cisg
ICAgW21fcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6cGxhdGZvcm1JdGVtcy5nZXQoKV07Cit9CisK
IFBhc3RlYm9hcmRJdGVtSW5mbyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmluZm9ybWF0aW9uRm9ySXRl
bUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIE5TUGFzdGVib2FyZEl0ZW0gKml0ZW0gPSBp
dGVtQXRJbmRleChpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAppbmRleCAyMjJjZGFmOTIwYjBkNTBmYzM0N2Q1YTUwNjZkOWEwZWQ1Yjhl
NDQ3Li4xN2RiODI1MTBhYTIwMDVhZDgwYTIwNmFjNTI2NjE2M2QzNDRlZWI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTE2MzYsMjgg
KzE2MzYsODAgQEAgYm9vbCBBcmd1bWVudENvZGVyPERhdGFMaXN0U3VnZ2VzdGlvbkluZm9ybWF0
aW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkMKIH0KICNlbmRpZgogCi12b2lkIEFy
Z3VtZW50Q29kZXI8UGFzdGVib2FyZEN1c3RvbURhdGE+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCit0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRhOjpFbnRyeT4geworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5Jik7
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
RW50cnkmKTsKK307CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
RW50cnk+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGFzdGVib2FyZEN1c3RvbURh
dGE6OkVudHJ5JiBkYXRhKQogewotICAgIGVuY29kZXIgPDwgZGF0YS5vcmlnaW47Ci0gICAgZW5j
b2RlciA8PCBkYXRhLm9yZGVyZWRUeXBlczsKLSAgICBlbmNvZGVyIDw8IGRhdGEucGxhdGZvcm1E
YXRhOwotICAgIGVuY29kZXIgPDwgZGF0YS5zYW1lT3JpZ2luQ3VzdG9tRGF0YTsKKyAgICBlbmNv
ZGVyIDw8IGRhdGEudHlwZSA8PCBkYXRhLmN1c3RvbURhdGE7CisKKyAgICBhdXRvJiBwbGF0Zm9y
bURhdGEgPSBkYXRhLnBsYXRmb3JtRGF0YTsKKyAgICBib29sIGhhc1N0cmluZyA9IFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihwbGF0Zm9ybURhdGEpOworICAgIGVuY29kZXIgPDwgaGFz
U3RyaW5nOworICAgIGlmIChoYXNTdHJpbmcpCisgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8
U3RyaW5nPihwbGF0Zm9ybURhdGEpOworCisgICAgYm9vbCBoYXNCdWZmZXIgPSBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+PihwbGF0Zm9ybURhdGEpOworICAgIGVuY29k
ZXIgPDwgaGFzQnVmZmVyOworICAgIGlmIChoYXNCdWZmZXIpCisgICAgICAgIGVuY29kZVNoYXJl
ZEJ1ZmZlcihlbmNvZGVyLCBXVEY6OmdldDxSZWY8U2hhcmVkQnVmZmVyPj4ocGxhdGZvcm1EYXRh
KS5wdHIoKSk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK2Jv
b2wgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnk+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgUGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5JiBkYXRhKQogewotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5vcmlnaW4pKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZGF0YS50eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShkYXRhLmN1c3RvbURhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
b29sIGhhc1N0cmluZzsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1N0cmluZykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChoYXNTdHJpbmcpIHsKKyAgICAgICAgU3RyaW5n
IHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZGF0YS5wbGF0Zm9ybURhdGEgPSB7IFdURk1vdmUodmFs
dWUpIH07CisgICAgfQorCisgICAgYm9vbCBoYXNCdWZmZXI7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShoYXNCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGRhdGEub3JkZXJlZFR5cGVzKSkKKyAgICBpZiAoaGFzU3RyaW5nICYmIGhhc0J1
ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShk
YXRhLnBsYXRmb3JtRGF0YSkpCisgICAgaWYgKGhhc0J1ZmZlcikgeworICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVTaGFyZWRCdWZmZXIoZGVj
b2RlciwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLnBs
YXRmb3JtRGF0YSA9IHsgdmFsdWUucmVsZWFzZU5vbk51bGwoKSB9OworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8UGFzdGVib2FyZEN1c3RvbURhdGE+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRh
dGEpCit7CisgICAgZW5jb2RlciA8PCBkYXRhLm9yaWdpbigpOworICAgIGVuY29kZXIgPDwgZGF0
YS5kYXRhKCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sK
KyAgICBTdHJpbmcgb3JpZ2luOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3JpZ2luKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLnNhbWVP
cmlnaW5DdXN0b21EYXRhKSkKKyAgICBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5
PiBpdGVtczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGl0ZW1zKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgZGF0YSA9IFBhc3RlYm9hcmRDdXN0b21EYXRhKFdURk1vdmUob3JpZ2lu
KSwgV1RGTW92ZShpdGVtcykpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDlkNmNkMzQxMjJkY2NiZjYz
MDYzMGVjY2RkYTE2ZjA3ODU0YzNkZTQuLjAxNWY4OTZmMTJjMmU2MjMwMTIzMGUzM2RhYjA1MDdj
YjhmZjg0NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCkBAIC04OSw2ICs4OSw3IEBAIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBMYXlvdXRQb2lu
dDsKIGNsYXNzIExpbmVhclRpbWluZ0Z1bmN0aW9uOwogY2xhc3MgTm90aWZpY2F0aW9uOworY2xh
c3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBjbGFzcyBQYXRoOwogY2xhc3MgUHJvdGVjdGlvblNw
YWNlOwogY2xhc3MgUmVnaW9uOwpAQCAtMTE3LDcgKzExOCw2IEBAIHN0cnVjdCBMZW5ndGg7CiBz
dHJ1Y3QgR3JhbW1hckRldGFpbDsKIHN0cnVjdCBNaW1lQ2xhc3NJbmZvOwogc3RydWN0IFBhc3Rl
Ym9hcmRJbWFnZTsKLXN0cnVjdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsKIHN0cnVjdCBQYXN0ZWJv
YXJkVVJMOwogc3RydWN0IFBsdWdpbkluZm87CiBzdHJ1Y3QgUHJvbWlzZWRBdHRhY2htZW50SW5m
bzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXgg
MTI2MjcxNzU2NjgwZmM4M2I5YmU1MjE4NjUyZDJmYjU1ZjlhZmJlNy4uYzNkMTQ2MDdmNTAyODcx
MjcwNmIwNzQzNWNhMjIzZGMzNzUyNGQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTQzMTIsNyArNDMxMiw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
U3RyaW5nJiBvCiAKICAgICBOU0RhdGEgKmRhdGEgPSBbTlNQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOkAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29h
VHlwZSgpKV07CiAgICAgYXV0byBidWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0
ZShkYXRhKTsKLSAgICBpZiAoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFy
ZWRCdWZmZXIoYnVmZmVyLmdldCgpKS5vcmlnaW4gPT0gb3JpZ2luSWRlbnRpZmllcikgeworICAg
IGlmIChXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihidWZm
ZXIuZ2V0KCkpLm9yaWdpbigpID09IG9yaWdpbklkZW50aWZpZXIpIHsKICAgICAgICAgY29tcGxl
dGlvbihXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpHcmFudGVkRm9yR2VzdHVyZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
c3RlYm9hcmRQcm94eS5oCmluZGV4IGFkYmMyMjZhZGI4ZWY1MmVhMzcxOGVhMDY1NmE4OWY1MTBi
OGI5MjAuLmFkNDA2ZjQ5ZDlmYjFiMzBhZWMyYjY0M2QwMDVlYzhjMmI0NWVhMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCkBAIC0zMyw3ICszMyw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbG9yOwotc3RydWN0IFBhc3RlYm9h
cmRDdXN0b21EYXRhOworY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBzdHJ1Y3QgUGFzdGVi
b2FyZEltYWdlOwogc3RydWN0IFBhc3RlYm9hcmRJdGVtSW5mbzsKIHN0cnVjdCBQYXN0ZWJvYXJk
VVJMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluCmluZGV4IDY5MWQwMjUzNzE4YzAyYTBkZTBhNmJlOGUzNGQyMTAzNGUw
MDNhMjMuLjNiNjYyNWEzMzQ4YTM1ZDYwYzYxODk3NzhhOTAwZjZhYzQ2Y2FlZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2Fn
ZXMuaW4KQEAgLTI5LDcgKzI5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFzdGVib2FyZFByb3h5IHsK
ICAgICBVcGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRlbnRp
ZmllcnMsIFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKICNlbmRpZgogCi0gICAgV3JpdGVDdXN0b21E
YXRhKHN0cnVjdCBXZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBkYXRhLCBTdHJpbmcgcGFz
dGVib2FyZE5hbWUpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMKKyAgICBX
cml0ZUN1c3RvbURhdGEoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGEgZGF0YSwgU3RyaW5n
IHBhc3RlYm9hcmROYW1lKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNocm9ub3VzCiAg
ICAgVHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBT
dHJpbmcgb3JpZ2luKSAtPiAoVmVjdG9yPFN0cmluZz4gdHlwZXMpIFN5bmNocm9ub3VzCiAgICAg
QWxsUGFzdGVib2FyZEl0ZW1JbmZvKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZlY3RvcjxX
ZWJDb3JlOjpQYXN0ZWJvYXJkSXRlbUluZm8+IGFsbEluZm8pIFN5bmNocm9ub3VzCiAgICAgSW5m
b3JtYXRpb25Gb3JJdGVtQXRJbmRleCh1aW50NjRfdCBpbmRleCwgU3RyaW5nIHBhc3RlYm9hcmRO
YW1lKSAtPiAoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJdGVtSW5mbyBpbmZvKSBTeW5jaHJv
bm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNTJjZGZhNTI1NzhkMmQzNGY3MmM2YzY5MjA5ZTJmNDYy
MTk5YTg5OS4uN2I5MGVjYTk3OThlZjY5YjIyMGZiYWViOWE4NWU4ZDBkMDJjMzY0NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC0zMjMzLDcgKzMyMzMsNyBAQCAtIChCT09MKWNhblBlcmZvcm1BY3Rpb25G
b3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogICAgICAgICBOU0Fy
cmF5ICphbGxDdXN0b21QYXN0ZWJvYXJkRGF0YSA9IFtwYXN0ZWJvYXJkIGRhdGFGb3JQYXN0ZWJv
YXJkVHlwZTpAKFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2NvYVR5cGUoKSkgaW5J
dGVtU2V0OmluZGljZXNdOwogICAgICAgICBmb3IgKE5TRGF0YSAqZGF0YSBpbiBhbGxDdXN0b21Q
YXN0ZWJvYXJkRGF0YSkgewogICAgICAgICAgICAgYXV0byBidWZmZXIgPSBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShkYXRhKTsKLSAgICAgICAgICAgIGlmIChXZWJDb3JlOjpQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihidWZmZXIuZ2V0KCkpLm9yaWdpbiA9PSBm
b2N1c2VkRG9jdW1lbnRPcmlnaW4pCisgICAgICAgICAgICBpZiAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoYnVmZmVyLmdldCgpKS5vcmlnaW4oKSA9PSBm
b2N1c2VkRG9jdW1lbnRPcmlnaW4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gTk87CkBAIC01NzMxLDcgKzU3MzEsNyBAQCBzdGF0aWMgQk9P
TCBhbGxQYXN0ZWJvYXJkSXRlbU9yaWdpbnNNYXRjaE9yaWdpbihVSVBhc3RlYm9hcmQgKnBhc3Rl
Ym9hcmQsIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvIGJ1ZmZl
ciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOwotICAgICAgICBpZiAoV2Vi
Q29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZmZXIoYnVmZmVyLmdldCgp
KS5vcmlnaW4gIT0gb3JpZ2luSWRlbnRpZmllcikKKyAgICAgICAgaWYgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQoKSkub3JpZ2luKCkg
IT0gb3JpZ2luSWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBOTzsKIAogICAgICAgICBm
b3VuZEF0TGVhc3RPbmVNYXRjaGluZ0lkZW50aWZpZXIgPSBZRVM7CkBAIC02NzA2LDE1ICs2NzA2
LDE1IEBAIC0gKHZvaWQpX2RpZEhhbmRsZUFkZGl0aW9uYWxEcmFnSXRlbXNSZXF1ZXN0OihCT09M
KWFkZGVkCiAgICAgaWYgKCFjb21wbGV0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJJ
dGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVnaXN0cmF0aW9uTGlzdCA9IFtbV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxp
c3RdOwotICAgIGlmICghYWRkZWQgfHwgIXJlZ2lzdHJhdGlvbkxpc3QgfHwgIV9kcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUuaGFzU3RhZ2VkRHJhZ1NvdXJjZSgpKSB7CisgICAgYXV0byAqcmVnaXN0
cmF0aW9uTGlzdHMgPSBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2Vd
IHRha2VSZWdpc3RyYXRpb25MaXN0c107CisgICAgaWYgKCFhZGRlZCB8fCAhW3JlZ2lzdHJhdGlv
bkxpc3RzIGNvdW50XSB8fCAhX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oYXNTdGFnZWREcmFn
U291cmNlKCkpIHsKICAgICAgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5jbGVhclN0YWdl
ZERyYWdTb3VyY2UoKTsKICAgICAgICAgY29tcGxldGlvbihAWyBdKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGF1dG8gc3RhZ2VkRHJhZ1NvdXJjZSA9IF9kcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuc3RhZ2VkRHJhZ1NvdXJjZSgpOwotICAgIE5TQXJyYXkgKmRyYWdJdGVtc1RvQWRk
ID0gW3NlbGYgX2l0ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0
aW9uTGlzdDpyZWdpc3RyYXRpb25MaXN0IHN0YWdlZERyYWdTb3VyY2U6c3RhZ2VkRHJhZ1NvdXJj
ZV07CisgICAgTlNBcnJheSAqZHJhZ0l0ZW1zVG9BZGQgPSBbc2VsZiBfaXRlbXNGb3JCZWdpbm5p
bmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaXN0czpyZWdpc3RyYXRpb25MaXN0
cyBzdGFnZWREcmFnU291cmNlOnN0YWdlZERyYWdTb3VyY2VdOwogCiAgICAgUkVMRUFTRV9MT0co
RHJhZ0FuZERyb3AsICJEcmFnIHNlc3Npb246ICVwIGFkZGluZyAldHUgaXRlbXMiLCBfZHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uKCksIGRyYWdJdGVtc1RvQWRkLmNvdW50KTsK
ICAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmNsZWFyU3RhZ2VkRHJhZ1NvdXJjZShkcmFn
SXRlbXNUb0FkZC5jb3VudCA/IFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpEaWRC
ZWNvbWVBY3RpdmU6OlllcyA6IFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpEaWRC
ZWNvbWVBY3RpdmU6Ok5vKTsKQEAgLTY3OTMsNyArNjc5Myw3IEBAIC0gKHZvaWQpY2xlYW5VcERy
YWdTb3VyY2VTZXNzaW9uU3RhdGUKICAgICAgICAgW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJk
IHNoYXJlZEluc3RhbmNlXSBzZXRJdGVtUHJvdmlkZXJzOm5pbF07CiAgICAgfQogCi0gICAgW1tX
ZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSBzdGFnZVJlZ2lzdHJhdGlv
bkxpc3Q6bmlsXTsKKyAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFu
Y2VdIGNsZWFyUmVnaXN0cmF0aW9uTGlzdHNdOwogICAgIFtzZWxmIF9yZXN0b3JlQ2FsbG91dEJh
cklmTmVlZGVkXTsKIAogICAgIFtzdGQ6OmV4Y2hhbmdlKF92aXNpYmxlQ29udGVudFZpZXdTbmFw
c2hvdCwgbmlsKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKQEAgLTY5NjAsNyArNjk2MCw3IEBAIC0g
KHZvaWQpX3ByZXBhcmVUb0RyYWdQcm9taXNlZEF0dGFjaG1lbnQ6KGNvbnN0IFdlYkNvcmU6OlBy
b21pc2VkQXR0YWNobWVudEluZm8mCiAKICAgICBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdOwog
ICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9IEBbIFtyZWdpc3RyYXRpb25MaXN0IGl0ZW1Q
cm92aWRlcl0gXTsKLSAgICBbcGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6cmVnaXN0
cmF0aW9uTGlzdC5nZXQoKV07CisgICAgW3Bhc3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0
czpAWyByZWdpc3RyYXRpb25MaXN0LmdldCgpIF1dOwogfQogCiAtIChXS0RyYWdEZXN0aW5hdGlv
bkFjdGlvbilfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BT
ZXNzaW9uPilzZXNzaW9uCkBAIC02OTk5LDI2ICs2OTk5LDM4IEBAIC0gKHZvaWQpX3Jlc3RvcmVD
YWxsb3V0QmFySWZOZWVkZWQKICAgICBfc2hvdWxkUmVzdG9yZUNhbGxvdXRCYXJBZnRlckRyb3Ag
PSBOTzsKIH0KIAotLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopX2l0ZW1zRm9yQmVnaW5uaW5n
T3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGlzdDooV2ViSXRlbVByb3ZpZGVyUmVn
aXN0cmF0aW9uSW5mb0xpc3QgKilyZWdpc3RyYXRpb25MaXN0IHN0YWdlZERyYWdTb3VyY2U6KGNv
bnN0IFdlYktpdDo6RHJhZ1NvdXJjZVN0YXRlJilzdGFnZWREcmFnU291cmNlCistIChOU0FycmF5
PFVJRHJhZ0l0ZW0gKj4gKilfaXRlbXNGb3JCZWdpbm5pbmdPckFkZGluZ1RvU2Vzc2lvbldpdGhS
ZWdpc3RyYXRpb25MaXN0czooTlNBcnJheTxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZv
TGlzdCAqPiAqKXJlZ2lzdHJhdGlvbkxpc3RzIHN0YWdlZERyYWdTb3VyY2U6KGNvbnN0IFdlYktp
dDo6RHJhZ1NvdXJjZVN0YXRlJilzdGFnZWREcmFnU291cmNlCiB7Ci0gICAgTlNJdGVtUHJvdmlk
ZXIgKmRlZmF1bHRJdGVtUHJvdmlkZXIgPSByZWdpc3RyYXRpb25MaXN0Lml0ZW1Qcm92aWRlcjsK
LSAgICBpZiAoIWRlZmF1bHRJdGVtUHJvdmlkZXIpCisgICAgaWYgKCFyZWdpc3RyYXRpb25MaXN0
cy5jb3VudCkKICAgICAgICAgcmV0dXJuIEBbIF07CiAKLSAgICBOU0FycmF5ICphZGp1c3RlZEl0
ZW1Qcm92aWRlcnM7CisgICAgTlNNdXRhYmxlQXJyYXkgKmFkanVzdGVkSXRlbVByb3ZpZGVycyA9
IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVp
RGVsZWdhdGUgPSBzZWxmLndlYlZpZXdVSURlbGVnYXRlOwogICAgIGlmIChbdWlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmFkanVzdGVkRGF0YUludGVyYWN0
aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpyZXByZXNlbnRpbmdPYmplY3RzOmFkZGl0
aW9uYWxEYXRhOildKSB7Ci0gICAgICAgIGF1dG8gcmVwcmVzZW50aW5nT2JqZWN0cyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICBhdXRvIGFkZGl0aW9u
YWxEYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgW3JlZ2lzdHJhdGlvbkxpc3QgZW51bWVyYXRlSXRlbXM6W3JlcHJlc2VudGluZ09iamVj
dHMsIGFkZGl0aW9uYWxEYXRhXSAoaWQgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhcj4gaXRlbSwg
TlNVSW50ZWdlcikgewotICAgICAgICAgICAgaWYgKFtpdGVtIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocmVwcmVzZW50aW5nT2JqZWN0Rm9yQ2xpZW50KV0pCi0gICAgICAgICAgICAgICAg
W3JlcHJlc2VudGluZ09iamVjdHMgYWRkT2JqZWN0Oml0ZW0ucmVwcmVzZW50aW5nT2JqZWN0Rm9y
Q2xpZW50XTsKLSAgICAgICAgICAgIGlmIChbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHR5cGVJZGVudGlmaWVyRm9yQ2xpZW50KV0gJiYgW2l0ZW0gcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihkYXRhRm9yQ2xpZW50KV0pCi0gICAgICAgICAgICAgICAgW2FkZGl0aW9uYWxE
YXRhIHNldE9iamVjdDppdGVtLmRhdGFGb3JDbGllbnQgZm9yS2V5Oml0ZW0udHlwZUlkZW50aWZp
ZXJGb3JDbGllbnRdOwotICAgICAgICB9XTsKLSAgICAgICAgYWRqdXN0ZWRJdGVtUHJvdmlkZXJz
ID0gW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25J
dGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOmRlZmF1bHRJdGVtUHJvdmlkZXIgcmVwcmVzZW50
aW5nT2JqZWN0czpyZXByZXNlbnRpbmdPYmplY3RzLmdldCgpIGFkZGl0aW9uYWxEYXRhOmFkZGl0
aW9uYWxEYXRhLmdldCgpXTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRqdXN0ZWRJdGVtUHJvdmlk
ZXJzID0gQFsgZGVmYXVsdEl0ZW1Qcm92aWRlciBdOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGNvbnNpZGVyIGEgbmV3IFVJIGRlbGVnYXRlIGhvb2sgdGhhdCBhY2NlcHRzIGEgbGlzdCBv
ZiBpdGVtIHByb3ZpZGVycywgc28gd2UgZG9uJ3QgbmVlZCB0byBpbnZva2UgdGhpcyBkZWxlZ2F0
ZSBtZXRob2QgcmVwZWF0ZWRseSBmb3IgbXVsdGlwbGUgaXRlbXMuCisgICAgICAgIGZvciAoV2Vi
SXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKmxpc3QgaW4gcmVnaXN0cmF0aW9uTGlz
dHMpIHsKKyAgICAgICAgICAgIE5TSXRlbVByb3ZpZGVyICpkZWZhdWx0SXRlbVByb3ZpZGVyID0g
bGlzdC5pdGVtUHJvdmlkZXI7CisgICAgICAgICAgICBpZiAoIWRlZmF1bHRJdGVtUHJvdmlkZXIp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gcmVwcmVzZW50
aW5nT2JqZWN0cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAg
ICAgICAgICAgYXV0byBhZGRpdGlvbmFsRGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBbbGlzdCBlbnVtZXJhdGVJdGVtczpbcmVw
cmVzZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERhdGFdIChpZCA8V2ViSXRlbVByb3ZpZGVyUmVn
aXN0cmFyPiBpdGVtLCBOU1VJbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKFtpdGVtIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVwcmVzZW50aW5nT2JqZWN0Rm9yQ2xpZW50KV0p
CisgICAgICAgICAgICAgICAgICAgIFtyZXByZXNlbnRpbmdPYmplY3RzIGFkZE9iamVjdDppdGVt
LnJlcHJlc2VudGluZ09iamVjdEZvckNsaWVudF07CisgICAgICAgICAgICAgICAgaWYgKFtpdGVt
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodHlwZUlkZW50aWZpZXJGb3JDbGllbnQpXSAm
JiBbaXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRhdGFGb3JDbGllbnQpXSkKKyAg
ICAgICAgICAgICAgICAgICAgW2FkZGl0aW9uYWxEYXRhIHNldE9iamVjdDppdGVtLmRhdGFGb3JD
bGllbnQgZm9yS2V5Oml0ZW0udHlwZUlkZW50aWZpZXJGb3JDbGllbnRdOworICAgICAgICAgICAg
fV07CisgICAgICAgICAgICBOU0FycmF5ICphZGp1c3RlZEl0ZW1zID0gW3VpRGVsZWdhdGUgX3dl
YlZpZXc6X3dlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRl
bVByb3ZpZGVyOmRlZmF1bHRJdGVtUHJvdmlkZXIgcmVwcmVzZW50aW5nT2JqZWN0czpyZXByZXNl
bnRpbmdPYmplY3RzLmdldCgpIGFkZGl0aW9uYWxEYXRhOmFkZGl0aW9uYWxEYXRhLmdldCgpXTsK
KyAgICAgICAgICAgIGlmIChhZGp1c3RlZEl0ZW1zLmNvdW50KQorICAgICAgICAgICAgICAgIFth
ZGp1c3RlZEl0ZW1Qcm92aWRlcnMgYWRkT2JqZWN0c0Zyb21BcnJheTphZGp1c3RlZEl0ZW1zXTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoV2ViSXRlbVByb3ZpZGVyUmVn
aXN0cmF0aW9uSW5mb0xpc3QgKmxpc3QgaW4gcmVnaXN0cmF0aW9uTGlzdHMpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvICpkZWZhdWx0SXRlbVByb3ZpZGVyID0gbGlzdC5pdGVtUHJvdmlkZXIpCisg
ICAgICAgICAgICAgICAgW2FkanVzdGVkSXRlbVByb3ZpZGVycyBhZGRPYmplY3Q6ZGVmYXVsdEl0
ZW1Qcm92aWRlcl07CisgICAgICAgIH0KKyAgICB9CiAKICAgICBOU011dGFibGVBcnJheSAqZHJh
Z0l0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmFkanVzdGVkSXRlbVBy
b3ZpZGVycy5jb3VudF07CiAgICAgZm9yIChOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyIGlu
IGFkanVzdGVkSXRlbVByb3ZpZGVycykgewpAQCAtNzI2MSw4ICs3MjczLDggQEAgLSAoTlNBcnJh
eTxVSURyYWdJdGVtICo+ICopZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWlu
dGVyYWN0aW9uIGl0ZW0KICAgICB9CiAKICAgICBhdXRvIHN0YWdlZERyYWdTb3VyY2UgPSBfZHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLnN0YWdlZERyYWdTb3VyY2UoKTsKLSAgICBXZWJJdGVtUHJv
dmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVnaXN0cmF0aW9uTGlzdCA9IFtbV2ViSXRlbVBy
b3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxpc3RdOwot
ICAgIE5TQXJyYXkgKmRyYWdJdGVtcyA9IFtzZWxmIF9pdGVtc0ZvckJlZ2lubmluZ09yQWRkaW5n
VG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlvbkxpc3Q6cmVnaXN0cmF0aW9uTGlzdCBzdGFnZWREcmFn
U291cmNlOnN0YWdlZERyYWdTb3VyY2VdOworICAgIGF1dG8gKnJlZ2lzdHJhdGlvbkxpc3RzID0g
W1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXSB0YWtlUmVnaXN0cmF0
aW9uTGlzdHNdOworICAgIE5TQXJyYXkgKmRyYWdJdGVtcyA9IFtzZWxmIF9pdGVtc0ZvckJlZ2lu
bmluZ09yQWRkaW5nVG9TZXNzaW9uV2l0aFJlZ2lzdHJhdGlvbkxpc3RzOnJlZ2lzdHJhdGlvbkxp
c3RzIHN0YWdlZERyYWdTb3VyY2U6c3RhZ2VkRHJhZ1NvdXJjZV07CiAgICAgaWYgKCFbZHJhZ0l0
ZW1zIGNvdW50XSkKICAgICAgICAgX3BhZ2UtPmRyYWdDYW5jZWxsZWQoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaAppbmRleCA5ZjAwMzk5MDA1OWFmNDQyMGMwNWJiN2EzYzNiOTk5ZmI4
YzAwNmU0Li4zZTg4MGFiNWY2N2Y2NWE0NGQwYTRkNTU1NzdjYzhiM2RkNTU3ZDAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaApAQCAtMjksOSArMjksOSBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvUGFzdGVib2FyZFN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0
ZWdpZXMuaD4KIAorY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBzdHJ1Y3QgUGFzdGVib2Fy
ZEltYWdlOwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250ZW50Owotc3RydWN0IFBhc3RlYm9hcmRD
dXN0b21EYXRhOwogCiBjbGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29y
ZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVn
eSB7CiBwdWJsaWM6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>