<?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>239042</bug_id>
          
          <creation_ts>2022-04-09 22:09:55 -0700</creation_ts>
          <short_desc>Handle public token updates in webpushd</short_desc>
          <delta_ts>2022-04-19 22:13:11 -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>New Bugs</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="Ben Nham">nham</reporter>
          <assigned_to name="Ben Nham">nham</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>nham</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1860080</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-09 22:09:55 -0700</bug_when>
    <thetext>Handle public token updates in webpushd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860081</commentid>
    <comment_count>1</comment_count>
      <attachid>457189</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-09 22:21:51 -0700</bug_when>
    <thetext>Created attachment 457189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860082</commentid>
    <comment_count>2</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-09 22:22:55 -0700</bug_when>
    <thetext>&lt;rdar://90455314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860083</commentid>
    <comment_count>3</comment_count>
      <attachid>457190</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-09 22:28:36 -0700</bug_when>
    <thetext>Created attachment 457190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860089</commentid>
    <comment_count>4</comment_count>
      <attachid>457190</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-10 00:12:57 -0700</bug_when>
    <thetext>Comment on attachment 457190
Patch

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

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:44
&gt; +#define PUSHDB_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

I think the modern way to do this is std::size().

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:52
&gt; +static constexpr ASCIILiteral publicTokenKey = &quot;publicToken&quot;_s;

Is this intentionally outside the namespace?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:95
&gt; +    PUSHDB_ARRAY_SIZE(pushDatabaseSchemaV1Statements),

Why do we need an array for the counts? Why can&apos;t we just use std::size() in our code whenever we need the array size?
std::size() is constexpr.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:100
&gt; +static constexpr int currentPushDatabaseVersion = PUSHDB_ARRAY_SIZE(pushDatabaseSchemaStatements);

Why is this signed?
Seems it should be a size_t or similar.

Same for your loop indexes below.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:320
&gt; +    dispatchOnWorkQueue([this, newPublicToken = Vector { publicToken.data(), publicToken.size() }, completionHandler = WTFMove(completionHandler)]() mutable {

You can construct a Vector from a Span directly: Vector { publicToken }

Also, what guarantees that |this| is still alive when the lambda runs on the work queue?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:385
&gt; +        completeOnMainQueue(WTFMove(completionHandler), result);

WTFMove(result)

BTW, the `WTFMove(result)` inside completeOnMainQueue() should probably be a std::forward(result), not a move.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:391
&gt; +    dispatchOnWorkQueue([this, completionHandler = WTFMove(completionHandler)]() mutable {

Same comment as above about the lifetime of |this|.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:408
&gt; +        completeOnMainQueue(WTFMove(completionHandler), result);

WTFMove(result)

&gt; Source/WebKit/webpushd/ApplePushServiceConnection.mm:54
&gt; +        _connection-&gt;didReceivePublicToken(Vector&lt;uint8_t&gt; { reinterpret_cast&lt;const uint8_t*&gt;(publicToken.bytes), publicToken.length });

static_cast&lt;&gt; would be a lot nicer than a reinterpret_cast&lt;&gt; and should work given that the input is a const void*.

&gt; Source/WebKit/webpushd/PushService.mm:119
&gt; +    m_connection-&gt;startListeningForPublicToken([this](auto&amp;&amp; token) {

What guarantees that |this| is still alive when the lambda runs?

&gt; Source/WebKit/webpushd/PushService.mm:635
&gt; +    m_database-&gt;updatePublicToken(token, [this](auto result) mutable {

Same comment as above about lifetime.

&gt; Source/WebKit/webpushd/PushServiceConnection.mm:48
&gt; +    m_pendingPublicToken.swap(token);

We don&apos;t use swap() much in new code. Should probably be:
m_publicTokenHandler(WTFMove(m_pendingPublicToken));
or
m_publicTokenHandler(std::exchange(m_pendingPublicToken, { }));

&gt; Source/WebKit/webpushd/WebPushDaemon.mm:740
&gt; +    runAfterStartingPushService([this, publicToken, replySender = WTFMove(replySender)]() mutable {

I am guessing the |this| here is OK because Daemon is a singleton, right?

&gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:46
&gt; +static std::unique_ptr&lt;PushDatabase&gt; createDatabaseSync(String path)

const String&amp;

&gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:562
&gt; +static bool createDatabaseFromStatements(String path, ASCIILiteral* statements, size_t count)

const String&amp;

&gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:596
&gt; +    auto count = sizeof(pushDatabaseV2Statements) / sizeof(pushDatabaseV2Statements[0]);

std::size()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860138</commentid>
    <comment_count>5</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-10 12:40:53 -0700</bug_when>
    <thetext>In terms of lifetime concerns, the classes in the WebPushDaemon namespace (WebPushDaemon, PushService, and PushServiceConnection) are only meant to be used by webpushd, and all are ultimately owned either directly or indirectly by WebPushDaemon, which is a NeverDestroyed singleton. So in the previous patches I left out the weak/protectThis logic when using lambdas as it would never be used, and makes the code simpler to read.

The same is true for PushDatabase, although since it&apos;s in WebCore and I suppose it&apos;s possible that someone could try to use it outside of webpushd, there is some logic in that class&apos;s destructor which prevents the instance from being destroyed while any existing work is outstanding on the work queue.

std::size sounds like what I should be using instead of a macro, but I don&apos;t think it will work for finding the size of an array in the array-of-arrays (e.g. for pushDatabaseSchemaStatements)? That is why that array of counts exists.

(In reply to Chris Dumez from comment #4)
&gt; Comment on attachment 457190 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457190&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:44
&gt; &gt; +#define PUSHDB_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
&gt; 
&gt; I think the modern way to do this is std::size().
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:52
&gt; &gt; +static constexpr ASCIILiteral publicTokenKey = &quot;publicToken&quot;_s;
&gt; 
&gt; Is this intentionally outside the namespace?
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:95
&gt; &gt; +    PUSHDB_ARRAY_SIZE(pushDatabaseSchemaV1Statements),
&gt; 
&gt; Why do we need an array for the counts? Why can&apos;t we just use std::size() in
&gt; our code whenever we need the array size?
&gt; std::size() is constexpr.
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:100
&gt; &gt; +static constexpr int currentPushDatabaseVersion = PUSHDB_ARRAY_SIZE(pushDatabaseSchemaStatements);
&gt; 
&gt; Why is this signed?
&gt; Seems it should be a size_t or similar.
&gt; 
&gt; Same for your loop indexes below.
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:320
&gt; &gt; +    dispatchOnWorkQueue([this, newPublicToken = Vector { publicToken.data(), publicToken.size() }, completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; You can construct a Vector from a Span directly: Vector { publicToken }
&gt; 
&gt; Also, what guarantees that |this| is still alive when the lambda runs on the
&gt; work queue?
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:385
&gt; &gt; +        completeOnMainQueue(WTFMove(completionHandler), result);
&gt; 
&gt; WTFMove(result)
&gt; 
&gt; BTW, the `WTFMove(result)` inside completeOnMainQueue() should probably be a
&gt; std::forward(result), not a move.
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:391
&gt; &gt; +    dispatchOnWorkQueue([this, completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; Same comment as above about the lifetime of |this|.
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:408
&gt; &gt; +        completeOnMainQueue(WTFMove(completionHandler), result);
&gt; 
&gt; WTFMove(result)
&gt; 
&gt; &gt; Source/WebKit/webpushd/ApplePushServiceConnection.mm:54
&gt; &gt; +        _connection-&gt;didReceivePublicToken(Vector&lt;uint8_t&gt; { reinterpret_cast&lt;const uint8_t*&gt;(publicToken.bytes), publicToken.length });
&gt; 
&gt; static_cast&lt;&gt; would be a lot nicer than a reinterpret_cast&lt;&gt; and should work
&gt; given that the input is a const void*.
&gt; 
&gt; &gt; Source/WebKit/webpushd/PushService.mm:119
&gt; &gt; +    m_connection-&gt;startListeningForPublicToken([this](auto&amp;&amp; token) {
&gt; 
&gt; What guarantees that |this| is still alive when the lambda runs?
&gt; 
&gt; &gt; Source/WebKit/webpushd/PushService.mm:635
&gt; &gt; +    m_database-&gt;updatePublicToken(token, [this](auto result) mutable {
&gt; 
&gt; Same comment as above about lifetime.
&gt; 
&gt; &gt; Source/WebKit/webpushd/PushServiceConnection.mm:48
&gt; &gt; +    m_pendingPublicToken.swap(token);
&gt; 
&gt; We don&apos;t use swap() much in new code. Should probably be:
&gt; m_publicTokenHandler(WTFMove(m_pendingPublicToken));
&gt; or
&gt; m_publicTokenHandler(std::exchange(m_pendingPublicToken, { }));
&gt; 
&gt; &gt; Source/WebKit/webpushd/WebPushDaemon.mm:740
&gt; &gt; +    runAfterStartingPushService([this, publicToken, replySender = WTFMove(replySender)]() mutable {
&gt; 
&gt; I am guessing the |this| here is OK because Daemon is a singleton, right?
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:46
&gt; &gt; +static std::unique_ptr&lt;PushDatabase&gt; createDatabaseSync(String path)
&gt; 
&gt; const String&amp;
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:562
&gt; &gt; +static bool createDatabaseFromStatements(String path, ASCIILiteral* statements, size_t count)
&gt; 
&gt; const String&amp;
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:596
&gt; &gt; +    auto count = sizeof(pushDatabaseV2Statements) / sizeof(pushDatabaseV2Statements[0]);
&gt; 
&gt; std::size()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860140</commentid>
    <comment_count>6</comment_count>
      <attachid>457210</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-10 13:09:48 -0700</bug_when>
    <thetext>Created attachment 457210
Patch feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860993</commentid>
    <comment_count>7</comment_count>
      <attachid>457210</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-12 18:30:40 -0700</bug_when>
    <thetext>Comment on attachment 457210
Patch feedback

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

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:56
&gt;  static const ASCIILiteral pushDatabaseSchemaV1Statements[] = {

Should use constexpr.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:60
&gt; +static const ASCIILiteral pushDatabaseSchemaV2Statements[] = {

Ditto.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:84
&gt; +static const ASCIILiteral pushDatabaseSchemaV3Statements[] = {

Ditto.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:88
&gt; +static const ASCIILiteral* pushDatabaseSchemaStatements[] = {

Should use constexpr in addition or add a const after the &quot;*&quot;. As written, this array is not a constant.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:94
&gt; +static const size_t pushDatabaseSchemaStatementCounts[] = {

Should be constexpr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861150</commentid>
    <comment_count>8</comment_count>
      <attachid>457540</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-13 10:04:17 -0700</bug_when>
    <thetext>Created attachment 457540
Use span to get rid of count array</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861161</commentid>
    <comment_count>9</comment_count>
      <attachid>457544</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-13 10:39:47 -0700</bug_when>
    <thetext>Created attachment 457544
Patch feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861174</commentid>
    <comment_count>10</comment_count>
      <attachid>457544</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-13 11:05:14 -0700</bug_when>
    <thetext>Comment on attachment 457544
Patch feedback

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

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:159
&gt; +    size_t version = 0;

The type &quot;size_t&quot; seems strange for a version number. Normally we’d use that for things that depend on the memory model, not a plain old number. For a version number we’d want to use a type like uint32_t or uint64_t.

Are we switching because this needs to be 64-bit on 64-bit systems? Or because it needs to be unsigned? Or maybe that you want this to be &gt;32-bit on 64-bit systems? Or maybe it’s just handy to have a type that is 64-bit, yet we can log with %z and not need fancy macros? Sorry to be so critical on such a small point, but this does not seem quite right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861176</commentid>
    <comment_count>11</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-13 11:08:06 -0700</bug_when>
    <thetext>In the first patch, it was an int, because that&apos;s what made sense to me; that&apos;s the type that `PRAGMA user_version` will provide us from the database. But I changed it to a size_t due to Chris&apos;s comments.

I&apos;ll probably switch this back to being an int because that seems more correct. We&apos;re persisting an int, so that should be the type that we compare it to as well.

(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 457544 [details]
&gt; Patch feedback
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457544&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:159
&gt; &gt; +    size_t version = 0;
&gt; 
&gt; The type &quot;size_t&quot; seems strange for a version number. Normally we’d use that
&gt; for things that depend on the memory model, not a plain old number. For a
&gt; version number we’d want to use a type like uint32_t or uint64_t.
&gt; 
&gt; Are we switching because this needs to be 64-bit on 64-bit systems? Or
&gt; because it needs to be unsigned? Or maybe that you want this to be &gt;32-bit
&gt; on 64-bit systems? Or maybe it’s just handy to have a type that is 64-bit,
&gt; yet we can log with %z and not need fancy macros? Sorry to be so critical on
&gt; such a small point, but this does not seem quite right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861181</commentid>
    <comment_count>12</comment_count>
      <attachid>457548</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-13 11:14:26 -0700</bug_when>
    <thetext>Created attachment 457548
Patch feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862675</commentid>
    <comment_count>13</comment_count>
      <attachid>457548</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2022-04-19 12:22:53 -0700</bug_when>
    <thetext>Comment on attachment 457548
Patch feedback

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

&gt; Source/WebKit/webpushd/PushServiceConnection.h:46
&gt; +    using PublicTokenHandler = Function&lt;void(Vector&lt;uint8_t&gt;&amp;&amp;)&gt;;

I generally really dislike these types of &quot;using&quot;s and typedefs. I think they often make it harder to reason about code in other places.

This is a good example of that - this is masking over a very straightforward &quot;function that takes a uint8_t vector&quot; with an unrelated name of &quot;PublicTokenHandler&quot;

I don&apos;t think this &quot;using&quot; makes the code better. I think it makes the code less readable.  More on this below:

&gt; Source/WebKit/webpushd/PushServiceConnection.h:87
&gt; +    PublicTokenHandler m_publicTokenHandler;
&gt; +    Vector&lt;uint8_t&gt; m_pendingPublicToken;

These two members are obviously related to each other. There&apos;s obviously a symmetry to them.
I think it would be more readable here (and in other places) if it simply read:

Function&lt;void(Vector&lt;uint8_t&gt;&amp;&amp;)&gt;  m_publicTokenChangeHandler;
Vector&lt;uint8_t&gt; m_pendingPublicToken;

(Notice I also renamed the function&apos;s variable name to make it even more clear what it&apos;s for)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862816</commentid>
    <comment_count>14</comment_count>
      <attachid>457956</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-04-19 20:58:15 -0700</bug_when>
    <thetext>Created attachment 457956
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862823</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-19 22:13:08 -0700</bug_when>
    <thetext>Committed r293060 (249791@main): &lt;https://commits.webkit.org/249791@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457956.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457189</attachid>
            <date>2022-04-09 22:21:51 -0700</date>
            <delta_ts>2022-04-09 22:28:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239042-20220409222150.patch</filename>
            <type>text/plain</type>
            <size>42349</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjZhZDk0NzY1ZTRlMDhhZTY0ZTNkZTRiZjY0
MzY0NDQ2Zjc4NGZkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2RlZmlu
ZSBQVVNIREJfQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pKQog
CiAjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coUHVzaCwg
IiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUg
UFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpAQCAtNDYs
MTMgKzQ5LDE1IEBACiAKICNkZWZpbmUga1B1c2hSZWNvcmRDb2x1bW5zICIgc3ViLnJvd0lELCBz
cy5idW5kbGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBvaW50LCBz
dWIudG9waWMsIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwg
c3ViLmNsaWVudFByaXZhdGVLZXksIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlv
blRpbWUgIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0
ZXJhbCBwdWJsaWNUb2tlbktleSA9ICJwdWJsaWNUb2tlbiJfczsKIAotc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24gPSAyOwotI2RlZmluZSBrQ3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb25TdHJpbmcgIjIiCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7
CiAgICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywKK307CisKK3N0YXRpYyBj
b25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjJTdGF0ZW1lbnRzW10gPSB7CiAg
ICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25TZXRzKCIKICAgICAiICByb3dJRCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIgogICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9U
IE5VTEwsIgpAQCAtNzQsOSArNzksMjYgQEAgc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNo
RGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKICAgICAiICBleHBpcmF0aW9uVGltZSBJ
TlQsIgogICAgICIgIFVOSVFVRShzY29wZSwgc3Vic2NyaXB0aW9uU2V0SUQpKSJfcywKICAgICAi
Q1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURfSW5kZXggT04gU3Vi
c2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3MsCi0gICAgIlBSQUdNQSB1c2VyX3ZlcnNp
b24gPSAiIGtDdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvblN0cmluZyAiIl9zCiB9OwogCitzdGF0
aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYzU3RhdGVtZW50c1tdID0g
eworICAgICJDUkVBVEUgVEFCTEUgTWV0YWRhdGEoa2V5IFRFWFQsIHZhbHVlLCBVTklRVUUoa2V5
KSkiX3MsCit9OworCitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsKiBwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzW10gPSB7CisgICAgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzLAor
ICAgIHB1c2hEYXRhYmFzZVNjaGVtYVYyU3RhdGVtZW50cywKKyAgICBwdXNoRGF0YWJhc2VTY2hl
bWFWM1N0YXRlbWVudHMsCit9OworCitzdGF0aWMgY29uc3QgaW50IHB1c2hEYXRhYmFzZVNjaGVt
YVN0YXRlbWVudENvdW50c1tdID0geworICAgIFBVU0hEQl9BUlJBWV9TSVpFKHB1c2hEYXRhYmFz
ZVNjaGVtYVYxU3RhdGVtZW50cyksCisgICAgUFVTSERCX0FSUkFZX1NJWkUocHVzaERhdGFiYXNl
U2NoZW1hVjJTdGF0ZW1lbnRzKSwKKyAgICBQVVNIREJfQVJSQVlfU0laRShwdXNoRGF0YWJhc2VT
Y2hlbWFWM1N0YXRlbWVudHMpLAorfTsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQgY3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb24gPSBQVVNIREJfQVJSQVlfU0laRShwdXNoRGF0YWJhc2VTY2hlbWFT
dGF0ZW1lbnRzKTsKKwogUHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25z
dCAmCiB7CiAgICAgcmV0dXJuIHsKQEAgLTE1MCwyMyArMTcyLDMxIEBAIHN0YXRpYyBFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlRGF0YWJhc2U+LCBTaG91bGREZWxldGVBbmRSZXRyeT4gb3BlbkFu
ZE1pZ3JhdGVECiAgICAgICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKICAgICB9CiAK
LSAgICBpZiAodmVyc2lvbiAmJiB2ZXJzaW9uICE9IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9u
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgbWlncmF0aW9uIHdoZW4gd2UgbmVlZCBpdC4KKyAg
ICBpZiAodmVyc2lvbiA8IDAgfHwgdmVyc2lvbiA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9u
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGb3VuZCB1bmV4cGVjdGVkIFB1
c2hEYXRhYmFzZSB2ZXJzaW9uOiAlZCAoZXhwZWN0ZWQ6ICVkKSBhdCBwYXRoOiAlcyIsIHZlcnNp
b24sIGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAg
ICAgfQogCi0gICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVz
aERhdGFiYXNlVmVyc2lvbikgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihkYik7CiAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICAgICAgZm9yIChhdXRv
JiBzdGF0ZW1lbnQgOiBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKLSAgICAgICAg
ICAgIGlmICghZGItPmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRXJyb3IgZXhlY3V0aW5nIFB1c2hEYXRhYmFzZSBE
REwgc3RhdGVtZW50ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRo
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
aG91bGREZWxldGVBbmRSZXRyeTo6WWVzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHZlcnNpb247
IGkgPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbjsgaSsrKSB7CisgICAgICAgICAgICBhdXRv
IHN0YXRlbWVudHMgPSBwdXNoRGF0YWJhc2VTY2hlbWFTdGF0ZW1lbnRzW2ldOworICAgICAgICAg
ICAgYXV0byBjb3VudCA9IHB1c2hEYXRhYmFzZVNjaGVtYVN0YXRlbWVudENvdW50c1tpXTsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFkYi0+ZXhlY3V0ZUNvbW1hbmQoc3RhdGVtZW50c1tqXSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkVycm9yIGV4ZWN1dGluZyBQdXNo
RGF0YWJhc2UgRERMIHN0YXRlbWVudCAlcyBhdCBwYXRoICVzOiAlZCIsIHN0YXRlbWVudHNbal0u
Y2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRiLT5sYXN0RXJyb3IoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRy
eTo6WWVzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoIWRiLT5leGVjdXRlQ29tbWFuZFNsb3cobWFrZVN0cmluZygiUFJBR01BIHVz
ZXJfdmVyc2lvbiA9ICIsIGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSkpCisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRXJyb3Igc2V0dGluZyB1c2VyIHZlcnNpb24gZm9y
IFB1c2hEYXRhYmFzZSBhdCBwYXRoICVzOiAlZCIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGItPmxh
c3RFcnJvcigpKTsKKworCiAgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIH0KIApA
QCAtMjg1LDYgKzMxNSwxMDAgQEAgc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLAogICAgIH0pOwogfQog
Cit2b2lkIFB1c2hEYXRhYmFzZTo6dXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90
PiBwdWJsaWNUb2tlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMs
IG5ld1B1YmxpY1Rva2VuID0gVmVjdG9yIHsgcHVibGljVG9rZW4uZGF0YSgpLCBwdWJsaWNUb2tl
bi5zaXplKCkgfSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
Yik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYXV0byByZXN1bHQg
PSBQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vOworICAgICAgICBWZWN0b3I8dWludDhfdD4gY3VycmVu
dFB1YmxpY1Rva2VuOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVk
U3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZhbHVlIEZST00gTWV0YWRhdGEgV0hFUkUga2V5ID0g
PyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0KDEsIHB1YmxpY1Rv
a2VuS2V5KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9M
T0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgICAgICAgICBjdXJyZW50UHVibGljVG9rZW4gPSBzcWwtPmNvbHVtbkJs
b2IoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudFB1YmxpY1Rva2VuID09IG5l
d1B1YmxpY1Rva2VuKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKCJSRVBMQUNFIElOVE8gTWV0YWRhdGEoa2V5LCB2YWx1ZSkgVkFMVUVTKD8sID8pIl9z
KTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4
dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kQmxvYigyLCBuZXdQdWJsaWNUb2tlbikgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoUHVzaCwgIkZhaWxlZCB0byBzYXZlIG5ldyBwdWJsaWMgdG9rZW46ICVkIiwgbV9k
Yi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVwZGF0
aW5nIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSBjdXJyZW50UHVibGljVG9r
ZW4gZG9lc24ndCBleGlzdCwganVzdAorICAgICAgICAvLyBzYXZlIHRoZSBpbml0aWFsIHB1Ymxp
Y1Rva2VuIHdpdGhvdXQgZGVsZXRpbmcgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIG5vdGlmeWluZyB0
aGUgY2FsbGVyIHRoYXQKKyAgICAgICAgLy8gdGhlIHRva2VuIGNoYW5nZWQuCisgICAgICAgIGlm
ICghY3VycmVudFB1YmxpY1Rva2VuLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBkZWxl
dGVTdWJzY3JpcHRpb25TZXRzID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00g
U3Vic2NyaXB0aW9uU2V0cyJfcyk7CisgICAgICAgICAgICBhdXRvIGRlbGV0ZVN1YnNjcmlwdGlv
bnMgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIl9z
KTsKKworICAgICAgICAgICAgaWYgKCFkZWxldGVTdWJzY3JpcHRpb25TZXRzIHx8ICFkZWxldGVT
dWJzY3JpcHRpb25zKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRf
RVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRlbGV0ZVN1YnNjcmlwdGlvblNldHMtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSB8fCBkZWxldGVTdWJzY3JpcHRpb25zLT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRmFpbGVk
IHRvIGRlbGV0ZSBzdWJzY3JpcHRpb25zOiAlZCIsIG1fZGItPmxhc3RFcnJvcigpKTsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpZZXM7CisgICAgICAgIH0KKwor
ICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgIH0pOworfQorCit2
b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UHVibGljVG9rZW4oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGlzcGF0Y2hP
bldvcmtRdWV1ZShbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYXV0byBz
cWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhZGF0YSBX
SEVSRSBrZXkgPSA/Il9zKTsKKyAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kVGV4dCgxLCBw
dWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgVmVjdG9yPHVpbnQ4X3Q+IHsgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0Owor
ICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNxbC0+Y29sdW1uQmxvYigwKTsKKworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
KworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQpOworICAgIH0pOworfQorCiB2b2lkIFB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3Jk
KGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9w
dGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGRpc3Bh
dGNoT25Xb3JrUXVldWUoW3RoaXMsIHJlY29yZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmgKaW5k
ZXggMzNlNDNiZThhZWYwZWZkZWEyYzg3N2IwYTU4NzA2NDc3YjkyYjc4ZC4uODM3Mzg5M2UwMTZk
Y2UwNDNhMjkxMjQ4NTA3YWQ3NmJjZDUxNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KQEAgLTc2LDYgKzc3LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBDcmVhdGlvbkhhbmRsZXImJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgflB1c2hEYXRhYmFzZSgpOwogCisgICAgZW51bSBjbGFzcyBQdWJsaWNU
b2tlbkNoYW5nZWQgOiBib29sIHsgTm8sIFllcyB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90PiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFB1YmxpY1Rva2VuKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
KTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNv
cmQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+
JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKFB1
c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJlY29yZEJ5VG9waWMoY29uc3QgU3RyaW5n
JiB0b3BpYywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
JiYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25D
b25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMu
aAppbmRleCBlOTBlZWVkMDE0MDc4NjU3YTExOGVhNmEzZjRjMjkwMjdmNmQ0YmRlLi5hODViNjlk
Mjk4NmE5Mzg5MmFkNGMwN2U0NTIzMDYyMmU0NTBhZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gY2xh
c3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAgICBJbmNyZW1lbnRTaWxlbnRQdXNoQ291bnQs
CiAgICAgUmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMsCiAgICAgUmVtb3ZlUHVzaFN1YnNjcmlw
dGlvbnNGb3JPcmlnaW4sCisgICAgU2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nLAogfTsKIAogaW5s
aW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQpA
QCAtNzQsNiArNzUsNyBAQCBpbmxpbmUgYm9vbCBtZXNzYWdlVHlwZVNlbmRzUmVwbHkoTWVzc2Fn
ZVR5cGUgbWVzc2FnZVR5cGUpCiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5jcmVtZW50U2lsZW50
UHVzaENvdW50OgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlbW92ZUFsbFB1c2hTdWJzY3JpcHRp
b25zOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3Jp
Z2luOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6U2V0RGVidWdNb2RlSXNF
bmFibGVkOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVwZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0
aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNl
Q29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0KaW5kZXggZWZmN2VhZTVjZmZhODc3NzhiNjY2MmFiNmIxNTRlMGQ0YTRmMDdk
OC4uNDA3NzJiYmRkMDRiYTJhMmM3ZTBiNTY4MmE4NWYyODEwMDIzMTI4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBA
IC00OCwxMyArNDgsMTUgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29ubmVjdGlvbjooV2Vi
UHVzaEQ6OkFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uICopY29ubmUKIC0gKHZvaWQpY29ubmVj
dGlvbjooQVBTQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVB1YmxpY1Rva2VuOihO
U0RhdGEgKilwdWJsaWNUb2tlbgogewogICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAg
ICBVTlVTRURfUEFSQU0ocHVibGljVG9rZW4pOworICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkp
OworCisgICAgaWYgKF9jb25uZWN0aW9uICYmIHB1YmxpY1Rva2VuLmxlbmd0aCkKKyAgICAgICAg
X2Nvbm5lY3Rpb24tPmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdWJsaWNUb2tlbi5ieXRlcyksIHB1YmxpY1Rv
a2VuLmxlbmd0aCB9KTsKIH0KIAogLSAodm9pZCljb25uZWN0aW9uOihBUFNDb25uZWN0aW9uICop
Y29ubmVjdGlvbiBkaWRSZWNlaXZlSW5jb21pbmdNZXNzYWdlOihBUFNJbmNvbWluZ01lc3NhZ2Ug
KiltZXNzYWdlCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCiAgICAgQVNTRVJU
KGlzTWFpblJ1bkxvb3AoKSk7CiAKICAgICBpZiAoX2Nvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IGI5NTNi
YjljMTJkZDdlMjJiZDY5MTMwNTQ0ODc5YzdkZjQ2ZDk0YTIuLjFmOGU2ZWY5ZTJlM2QwODQ4NGMx
MTAxZmI1ODI2MjAxY2JmZmNjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldE5vbldha2luZ1RvcGljcyhWZWN0b3I8U3RyaW5nPiYmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgc2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpIG92ZXJyaWRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCBjNGNmMmU2NzliOTJiZjky
MzU2MWMxNThjMjNkMzY4MDFkODc4MzY0Li43OTZkNWNkMTE2N2JmMWUwNjRkYmUxZDY3YjRiY2E3
NWRiNjBkM2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJQdXNoRCB7
CiAKIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24o
KQogeworICAgIGRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4geyAnYScsICdi
JywgJ2MnIH0pOwogfQogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp+TW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKQEAgLTEwNCw0ICsxMDUsOSBAQCB2b2lkIE1vY2tQ
dXNoU2VydmljZUNvbm5lY3Rpb246OnNldFRvcGljTGlzdHMoVG9waWNMaXN0cyYmIHRvcGljTGlz
dHMpCiB7CiB9CiAKK3ZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0UHVibGljVG9r
ZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAgIGRpZFJlY2VpdmVQ
dWJsaWNUb2tlbihXVEZNb3ZlKHRva2VuKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYlB1c2hE
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKaW5kZXggZTQ0NTAxOWVjOWUyYzdjYjFk
ZWY2MmQ0MWMwYTFiMTE5N2JhNTQ5Yi4uNTE4MjBmMjExZTk2Y2YyNDA3NzEyZjgyYjI4OWQyOWM3
ODY1OGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApAQCAtNzAsNiArNzAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vic2Ny
aWJlUmVxdWVzdCYpOwogICAgIHZvaWQgZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5z
dWJzY3JpYmVSZXF1ZXN0Jik7CiAKKyAgICB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhW
ZWN0b3I8dWludDhfdD4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9y
PHVpbnQ4X3Q+JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0
b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
ID0gW10geyB9KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
CmluZGV4IGUyNjg0NGQzYjY4Njg5OWZlNzMxN2Q5ZGE1YTQ3ZTczNzgyZjAzM2YuLmRiMWE4M2Q0
ZWQ2MmE4NWJjOGY3MDdhYTQzZWQ3ZWU0NzNjNjcyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZS5tbQpAQCAtMTE2LDYgKzExNiwxMCBAQCBQdXNoU2VydmljZTo6UHVzaFNlcnZp
Y2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiBwdXNoU2VydmljZUNvbm5lY3Rp
bwogewogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpOwog
CisgICAgbV9jb25uZWN0aW9uLT5zdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFt0aGlzXShh
dXRvJiYgdG9rZW4pIHsKKyAgICAgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFdURk1vdmUodG9r
ZW4pKTsKKyAgICB9KTsKKwogICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNo
TWVzc2FnZXMoW3RoaXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykg
ewogICAgICAgICBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKICAgICB9
KTsKQEAgLTYyMSw2ICs2MjUsMjQgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmF3UHVzaE1lc3Nh
Z2U+IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGkKICAgICByZXR1
cm4gbWVzc2FnZTsKIH0KIAordm9pZCBQdXNoU2VydmljZTo6c2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAgIG1fY29ubmVjdGlvbi0+c2V0UHVi
bGljVG9rZW5Gb3JUZXN0aW5nKFdURk1vdmUodG9rZW4pKTsKK30KKwordm9pZCBQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAg
IG1fZGF0YWJhc2UtPnVwZGF0ZVB1YmxpY1Rva2VuKHRva2VuLCBbdGhpc10oYXV0byByZXN1bHQp
IG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0ID09IFB1c2hEYXRhYmFzZTo6UHVibGljVG9r
ZW5DaGFuZ2VkOjpObykgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlJlY2VpdmVk
IGV4cGVjdGVkIHB1YmxpYyB0b2tlbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIlB1YmxpYyB0b2tlbiBjaGFuZ2Vk
OyBpbnZhbGlkYXRlZCBhbGwgZXhpc3RpbmcgcHVzaCBzdWJzY3JpcHRpb25zIik7CisgICAgICAg
IHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbXSgpIHsgfSk7Cisg
ICAgfSk7Cit9CisKIHZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0
cmluZyogdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBt
YWtlUmF3UHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDE5ODE0M2Y1Njk3Y2QyOGM2OTI4
ZDQ1NjhjMjFjMzI1NDkyMGQyMGYuLjU0M2JlMDYwNTM5OWMwOTJhNTQ4ZmJmYWE0NWFhYjdhZWJl
OTgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rp
b24uaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViUHVzaEQgewogY2xhc3MgUHVzaFNl
cnZpY2VDb25uZWN0aW9uIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFB1c2hTZXJ2aWNlQ29ubmVj
dGlvbj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5n
IFB1YmxpY1Rva2VuSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPjsK
ICAgICB1c2luZyBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoTlNT
dHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICopPjsKIAogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigp
ID0gZGVmYXVsdDsKQEAgLTc0LDEwICs3NSwxNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYpID0gMDsKIAorICAgIHZvaWQgc3Rh
cnRMaXN0ZW5pbmdGb3JQdWJsaWNUb2tlbihQdWJsaWNUb2tlbkhhbmRsZXImJik7CisgICAgdm9p
ZCBkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCiAgICAg
dm9pZCBzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlciYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMs
IE5TRGljdGlvbmFyeSAqdXNlckluZm8pOwogCiBwcml2YXRlOgorICAgIFB1YmxpY1Rva2VuSGFu
ZGxlciBtX3B1YmxpY1Rva2VuSGFuZGxlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9wZW5kaW5n
UHVibGljVG9rZW47CiAgICAgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgbV9pbmNvbWluZ1B1
c2hNZXNzYWdlSGFuZGxlcjsKICAgICBEZXF1ZTxzdGQ6OnBhaXI8UmV0YWluUHRyPE5TU3RyaW5n
PiwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4+PiBtX3BlbmRpbmdQdXNoZXM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCA5MmY4
MTQyNzdhODM4MTUzMTY4OGIwZTQ4NTE4MmQ0M2Q4NWNjODY4Li5lM2I0ZjgxMGU1NGQ0NGIwMjI0
MTYwYjFlZDA3NWFkMDIxMGE0N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMzcsNiArMzcsMzIgQEAgUHVzaENyeXB0bzo6Q2xp
ZW50S2V5cyBQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCiAgICAg
cmV0dXJuIFB1c2hDcnlwdG86OkNsaWVudEtleXM6OmdlbmVyYXRlKCk7CiB9CiAKK3ZvaWQgUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFB1YmxpY1Rv
a2VuSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgbV9wdWJsaWNUb2tlbkhhbmRsZXIgPSBXVEZN
b3ZlKGhhbmRsZXIpOworCisgICAgaWYgKG1fcGVuZGluZ1B1YmxpY1Rva2VuLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRva2VuOworICAgIG1fcGVu
ZGluZ1B1YmxpY1Rva2VuLnN3YXAodG9rZW4pOworICAgIG1fcHVibGljVG9rZW5IYW5kbGVyKFdU
Rk1vdmUodG9rZW4pKTsKK30KKwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OmRpZFJlY2Vp
dmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBpZiAoIW1fcHVi
bGljVG9rZW5IYW5kbGVyKSB7CisgICAgICAgIG1fcGVuZGluZ1B1YmxpY1Rva2VuID0gV1RGTW92
ZSh0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3B1YmxpY1Rva2VuSGFu
ZGxlcihXVEZNb3ZlKHRva2VuKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpz
ZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpCit7Cit9CisKIHZvaWQg
UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5oCmluZGV4IDA2NjJmMTNlOTgzOTQ5MDBjNTQxZmFiZGU5NTZlODVjOTY2MmRi
MzMuLmY0OWRlMmU3ZDFmMDQzNGJhNWNiYzg2NzJhM2I3NzIzNGI5ZmFlOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluY3JlbWVudFNpbGVudFB1c2hDb3VudChDbGllbnRDb25uZWN0aW9uKiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNp
Z25lZCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMoQ2xpZW50Q29u
bmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKICAgICB2b2lk
IHJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVu
c2lnbmVkKT4mJik7CisgICAgdm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29u
bmVjdGlvbiosIGNvbnN0IFN0cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKICAgICB2b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShTdHJpbmdWaWV3KTsK
ICAgICB2b2lkIGJyb2FkY2FzdEFsbENvbm5lY3Rpb25JZGVudGl0aWVzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggNzg1MzJkMDRhZjYxNzBjMTg4ZjhjOTEz
NjlhODIxMDc5MmQwYmJhMC4uNGNlYzY0MTE1ZGZjNWM5NWVlOGJlNTJkNGJlZWQyYTFjZTk5NWM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTM0LDExICsx
MzQsMjEgQEAgQVJHVU1FTlRTKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSkKIFJFUExZKHVu
c2lnbmVkKQogRU5ECiAKK0ZVTkNUSU9OKHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZykKK0FSR1VN
RU5UUyhTdHJpbmcpCitSRVBMWSgpCitFTkQKKworCiAjdW5kZWYgRlVOQ1RJT04KICN1bmRlZiBB
UkdVTUVOVFMKICN1bmRlZiBSRVBMWQogI3VuZGVmIEVORAogCisjZGVmaW5lIEVNUFRZX1JFUExZ
KG1mKSBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgbWY6OmVuY29kZVJlcGx5KCkgeyByZXR1cm4g
eyB9OyB9CitFTVBUWV9SRVBMWShzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOworI3VuZGVmIEVN
UFRZX1JFUExZCisKIFdlYlB1c2hEOjpFbmNvZGVkTWVzc2FnZSBlY2hvVHdpY2U6OmVuY29kZVJl
cGx5KFN0cmluZyByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVy
OwpAQCAtNDQ1LDYgKzQ1NSw5IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdl
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBN
ZXNzYWdlVHlwZTo6UmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW46CiAgICAgICAgIGhh
bmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6cmVtb3ZlUHVzaFN1YnNj
cmlwdGlvbnNGb3JPcmlnaW4+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZN
b3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdl
V2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjpzZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc+KGNsaWVudENv
bm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtNzIyLDYgKzczNSwxOSBAQCB2b2lkIERhZW1vbjo6cmVt
b3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgY29ucwogICAgIH0pOwogfQogCit2b2lkIERhZW1vbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgcmVwbHlTZW5kZXIpCit7CisgICAgcnVuQWZ0ZXJTdGFydGlu
Z1B1c2hTZXJ2aWNlKFt0aGlzLCBwdWJsaWNUb2tlbiwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJl
cGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7Cisg
ICAgICAgICAgICByZXBseVNlbmRlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rv
cjx1aW50OF90PiB7IHB1YmxpY1Rva2VuLnV0ZjgoKS5ieXRlcygpIH0pOworICAgICAgICByZXBs
eVNlbmRlcigpOworICAgIH0pOworfQorCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRvQ2xp
ZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiB7CiAgICAgYXV0byBj
bGllbnRDb25uZWN0aW9uID0gbV9jb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiOTFmZTRjYWMz
YWE5MjVlNjc0YTQ1NTkyYjQ4N2E3MjkyZDhmZjUyLi4yZWY1MDliYjFjMmY5NjczZjE0ZWQ4Yjll
MDE5MTQ4Mzk3YjkwYTU5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjItMDQtMDkgIEJlbiBOaGFtICA8bmhhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1
c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkw
NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBU
ZXN0IHRoYXQgcHVibGljIHRva2VuIHVwZGF0ZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkgYXQgdGhl
IFB1c2hEYXRhYmFzZSBhbmQgV2ViUHVzaERhZW1vbiBsZXZlbHMKKyAgICAgICAgIC0gVGVzdCBz
Y2hlbWEgbWlncmF0aW9uIGluIFB1c2hEYXRhYmFzZQorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpjcmVhdGVEYXRhYmFzZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVibGlj
VG9rZW5TeW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnVwZGF0ZVB1YmxpY1Rva2VuU3lu
Yyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0Um93SWRlbnRpZmllcnNT
eW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFB1Ymxp
Y1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnVwZGF0
ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6
OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToK
KwogMjAyMi0wNC0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01lcmdlLVF1ZXVlXSBVcGRhdGUgaGVhZCBhbmQgYmFzZSByZWZlcmVuY2VzIGluIFBS
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFi
YXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2Uu
Y3BwCmluZGV4IDcxZWZlYWNjZmI4N2NkZmE5YTM2OGY4YjgzODczYjRlNWEzYWJmZDMuLjVmZDFj
NDE1OTg1MzZhM2FjMjU5YmEwNDA4YzJlNzQ1YTc3YTkxMzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC00Myw2ICs0Myw3
NyBAQCBzdGF0aWMgU3RyaW5nIG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgoKQogICAgIHJldHVy
biBwYXRoOwogfQogCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRl
RGF0YWJhc2VTeW5jKFN0cmluZyBwYXRoKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0
YWJhc2U+IHJlc3VsdDsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAgIFB1c2hEYXRhYmFz
ZTo6Y3JlYXRlKHBhdGgsIFsmZG9uZSwgJnJlc3VsdF0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRh
YmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGlj
VG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgYm9vbCBkb25lID0gZmFs
c2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldFJlc3VsdDsKKworICAgIGRhdGFiYXNlLmdldFB1
YmxpY1Rva2VuKFsmZG9uZSwgJmdldFJlc3VsdF0oYXV0byYmIHJlc3VsdCkgeworICAgICAgICBn
ZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0p
OworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVzdWx0OworfQorCitz
dGF0aWMgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQgdXBkYXRlUHVibGljVG9rZW5T
eW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIFNwYW48Y29uc3QgdWludDhfdD4gdG9rZW4pCit7
CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgYXV0byB1cGRhdGVSZXN1bHQgPSBQdXNoRGF0
YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm87CisKKyAgICBkYXRhYmFzZS51cGRhdGVQdWJs
aWNUb2tlbih0b2tlbiwgWyZkb25lLCAmdXBkYXRlUmVzdWx0XShhdXRvJiYgcmVzdWx0KSB7Cisg
ICAgICAgIHVwZGF0ZVJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJldHVybiB1cGRhdGVS
ZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5
QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25z
dCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIGJvb2wgZG9u
ZSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OworCisg
ICAgZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUoYnVuZGxlSUQs
IHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRdKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJiBy
ZXN1bHQpIHsKKyAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJu
IGdldFJlc3VsdDsKK30KKworc3RhdGljIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZp
ZXJzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIGJvb2wgZG9uZSA9IGZhbHNl
OworICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOworCisgICAgZGF0YWJhc2Uu
Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNj
cmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsKKyAgICAgICAgZm9yIChhdXRvIGlk
ZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAgICAgICAgICAgIHJvd0lkZW50aWZpZXJzLmFkZChp
ZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAg
ICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworfQorCiBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0VG9waWNzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNl
KQogewogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtNjYsNyArMTM3LDcgQEAgcHVibGljOgog
ICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxl
LmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAg
ICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRw
b2ludDEiX3MsCiAgICAgICAgICJ0b3BpYzEiX3MsCiAgICAgICAgIHsgNSwgNiB9LAogICAgICAg
ICB7IDYsIDcgfSwKQEAgLTc4LDggKzE0OSw4IEBAIHB1YmxpYzoKICAgICAgICAgImNvbS5hcHBs
ZS5TYWZhcmkiX3MsCiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3JnIl9zLAogICAgICAg
ICAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zLAotICAgICAgICAiaHR0cHM6Ly9wdXNo
RW5kcG9pbnQ0Il9zLAotICAgICAgICAidG9waWM0Il9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNo
RW5kcG9pbnQyIl9zLAorICAgICAgICAidG9waWMyIl9zLAogICAgICAgICB7IDE0LCAxNSB9LAog
ICAgICAgICB7IDE2LCAxNyB9LAogICAgICAgICB7IDE4LCAxOSB9LApAQCAtOTAsOCArMTYxLDgg
QEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMi
X3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCi0gICAgICAgICJ0b3BpYzIi
X3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAgICAgICJ0b3BpYzMi
X3MsCiAgICAgICAgIHsgMCwgMSB9LAogICAgICAgICB7IDEsIDIgfSwKICAgICAgICAgeyAyLCAz
IH0sCkBAIC0xMDMsOCArMTc0LDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFy
aSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2lu
dDMiX3MsCi0gICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2lu
dDQiX3MsCisgICAgICAgICJ0b3BpYzQiX3MsCiAgICAgICAgIHsgOSwgMTAgfSwKICAgICAgICAg
eyAxMCwgMTEgfSwKICAgICAgICAgeyAxMSwgMTIgfSwKQEAgLTExNiw2ICsxODcsMTYgQEAgcHVi
bGljOgogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKICAgICBz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDQ7CiAKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZ2V0UHVibGljVG9rZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldFB1YmxpY1Rv
a2VuU3luYygqZGIpOworICAgIH0KKworICAgIFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFu
Z2VkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gdG9rZW4pCisgICAgewor
ICAgICAgICByZXR1cm4gdXBkYXRlUHVibGljVG9rZW5TeW5jKCpkYiwgdG9rZW4pOworICAgIH0K
KwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hS
ZWNvcmQmIHJlY29yZCkKICAgICB7CiAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtMTYw
LDMxICsyNDEsMTIgQEAgcHVibGljOgogCiAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBn
ZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlE
LCBjb25zdCBTdHJpbmcmIHNjb3BlKQogICAgIHsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OwotCi0gICAgICAg
IGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5kbGVJRCwgc2NvcGUs
IFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkg
ewotICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICAgICAg
ZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4oJmRvbmUpOwotCi0g
ICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgICAgIHJldHVybiBnZXRSZWNvcmRCeUJ1bmRs
ZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoKmRiLCBidW5kbGVJRCwgc2NvcGUpOwogICAgIH0KIAog
ICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzKCkKICAgICB7Ci0gICAgICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBIYXNoU2V0PHVpbnQ2NF90PiByb3dJZGVudGlm
aWVyczsKLQotICAgICAgICBkYi0+Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmll
cnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmllcnMpCi0gICAgICAg
ICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9VSW50NjQoKSk7Ci0gICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9u
ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworICAgICAgICByZXR1cm4gZ2V0
Um93SWRlbnRpZmllcnNTeW5jKCpkYik7CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0
VG9waWNzKCkKQEAgLTIzNiwxMyArMjk4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBTZXRVcCgp
IGZpbmFsCiAgICAgewotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERh
dGFiYXNlOjpjcmVhdGUobWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpLCBbdGhpcywgJmRvbmVd
KHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAg
IGRiID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KKyAgICAgICAgZGIgPSBjcmVhdGVE
YXRhYmFzZVN5bmMoU1FMaXRlRGF0YWJhc2U6OmluTWVtb3J5UGF0aCgpKTsKICAgICAgICAgQVNT
RVJUX1RSVUUoZGIpOwogICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQxID0gaW5zZXJ0
UmVjb3JkKHJlY29yZDEpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MiA9IGlu
c2VydFJlY29yZChyZWNvcmQyKSk7CkBAIC0yNjYsNiArMzIyLDM2IEBAIHN0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwgY29uc3QgUHVzaFJlY29yZCYgYikKICAgICAg
ICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lOwogfQogCitURVNUX0Yo
UHVzaERhdGFiYXNlVGVzdCwgVXBkYXRlUHVibGljVG9rZW4pCit7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGluaXRpYWxUb2tlbiA9IHsgJ2EnLCAnYicsICdjJyB9OworICAgIFZlY3Rvcjx1aW50OF90
PiBtb2RpZmllZFRva2VuID0geyAnZCcsICdlJywgJ2YnIH07CisKKyAgICAvLyBTZXR0aW5nIHRo
ZSBpbml0aWFsIHB1YmxpYyB0b2tlbiBzaG91bGRuJ3QgZGVsZXRlIGFueXRoaW5nLgorICAgIGF1
dG8gdXBkYXRlUmVzdWx0MSA9IHVwZGF0ZVB1YmxpY1Rva2VuKGluaXRpYWxUb2tlbik7CisgICAg
RVhQRUNUX0VRKHVwZGF0ZVJlc3VsdDEsIFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2Vk
OjpObyk7CisgICAgRVhQRUNUX0VRKGdldFJvd0lkZW50aWZpZXJzKCksIChIYXNoU2V0PHVpbnQ2
NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAgYXV0byBnZXRSZXN1bHQxID0gZ2V0UHVibGlj
VG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MSwgaW5pdGlhbFRva2VuKTsKKworICAg
IC8vIFNldHRpbmcgdGhlIHNhbWUgdG9rZW4gYWdhaW4gc2hvdWxkIGRvIG5vdGhpbmcuCisgICAg
YXV0byB1cGRhdGVSZXN1bHQyID0gdXBkYXRlUHVibGljVG9rZW4oaW5pdGlhbFRva2VuKTsKKyAg
ICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MiwgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5n
ZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8dWlu
dDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisKKyAgICBhdXRvIGdldFJlc3VsdDIgPSBnZXRQdWJs
aWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQyLCBpbml0aWFsVG9rZW4pOworCisg
ICAgLy8gQ2hhbmdpbmcgdGhlIHB1YmxpYyB0b2tlbiBhZnRlcndhcmRzIHNob3VsZCBkZWxldGUg
ZXZlcnl0aGluZy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDMgPSB1cGRhdGVQdWJsaWNUb2tlbiht
b2RpZmllZFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MywgUHVzaERhdGFiYXNl
OjpQdWJsaWNUb2tlbkNoYW5nZWQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUoZ2V0Um93SWRlbnRp
ZmllcnMoKS5pc0VtcHR5KCkpOworCisgICAgYXV0byBnZXRSZXN1bHQzID0gZ2V0UHVibGljVG9r
ZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MywgbW9kaWZpZWRUb2tlbik7Cit9CisKIFRF
U1RfRihQdXNoRGF0YWJhc2VUZXN0LCBJbnNlcnRSZWNvcmQpCiB7CiAgICAgYXV0byBleHBlY3Rl
ZFJlY29yZDEgPSByZWNvcmQxOwpAQCAtNDAzLDEzICs0ODksNyBAQCBURVNUKFB1c2hEYXRhYmFz
ZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCByZWNvcmRDb3VudCA9
IDI1NjsKIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3Jl
YXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFi
YXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8
UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBX
VEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsK
LSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBj
cmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3Vs
dCk7CiAKICAgICAgICAgYXV0byYgZGF0YWJhc2UgPSAqY3JlYXRlUmVzdWx0OwpAQCAtNDQyLDEz
ICs1MjIsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0
OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVh
dGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFi
YXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRh
dGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAg
VXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRh
YmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CiAKICAg
ICAgICAgYXV0byB0b3BpY3MgPSBnZXRUb3BpY3NTeW5jKCpjcmVhdGVSZXN1bHQpOwpAQCAtNDY3
LDEzICs1NDEsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25n
cmFkZSkKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJh
c2U+IGNyZWF0ZVJlc3VsdDsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgICAgIFB1
c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRlUmVzdWx0LCAmZG9uZV0oc3RkOjp1bmlx
dWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewotICAgICAgICAgICAgY3JlYXRlUmVz
dWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisgICAgICAgIGF1dG8gY3JlYXRlUmVz
dWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOwogICAgICAgICBBU1NFUlRfVFJVRShjcmVh
dGVSZXN1bHQpOwogICAgIH0KIApAQCAtNDkxLDYgKzU1OSw3NSBAQCBURVNUKFB1c2hEYXRhYmFz
ZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiB9CiAKK3N0YXRpYyBib29s
IGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMoU3RyaW5nIHBhdGgsIEFTQ0lJTGl0ZXJhbCog
c3RhdGVtZW50cywgc2l6ZV90IGNvdW50KQoreworICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAg
IGRiLm9wZW4ocGF0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZChzdGF0ZW1lbnRzW2ldKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
QWNxdWlyZWQgYnkgcnVubmluZyAuZHVtcCBmcm9tIHRoZSBzcWxpdGUzIHNoZWxsIG9uIGEgVjIg
ZGF0YWJhc2UuCitzdGF0aWMgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50c1td
ID0geworICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cyggIHJvd0lEIElOVEVHRVIg
UFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBi
dW5kbGVJRCBURVhUIE5PVCBOVUxMLCAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwgIHNp
bGVudFB1c2hDb3VudCBJTlQgTk9UIE5VTEwsICBVTklRVUUoYnVuZGxlSUQsIHNlY3VyaXR5T3Jp
Z2luKSkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDEsMTY0
OTU0MTAwMSwnY29tLmFwcGxlLndlYmFwcCcsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbScsMCkiX3Ms
CisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDIsMTY0OTU0MTAwMSwn
Y29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LndlYmtpdC5vcmcnLDApIl9zLAorICAgICJJ
TlNFUlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUygzLDE2NDk1NDEwMDEsJ2NvbS5hcHBs
ZS5TYWZhcmknLCdodHRwczovL3d3dy5hcHBsZS5jb20nLDApIl9zLAorICAgICJDUkVBVEUgVEFC
TEUgU3Vic2NyaXB0aW9ucyggIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVO
VCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBzdWJzY3JpcHRpb25TZXRJRCBJTlQgTk9U
IE5VTEwsICBzY29wZSBURVhUIE5PVCBOVUxMLCAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwgIHRv
cGljIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCAgc2VydmVyVkFQSURQdWJsaWNLZXkgQkxPQiBOT1Qg
TlVMTCwgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCAgY2xpZW50UHJpdmF0ZUtleSBC
TE9CIE5PVCBOVUxMLCAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxMLCAgZXhwaXJhdGlv
blRpbWUgSU5ULCAgVU5JUVVFKHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJJ
TlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygxLDE2NDk1NDEwMDEsMSwnaHR0cHM6Ly93
d3cuYXBwbGUuY29tL2lwaG9uZScsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MScsJ3RvcGljMScsWCcw
NTA2JyxYJzA2MDcnLFgnMDcwOCcsWCcwODA5JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8g
U3Vic2NyaXB0aW9ucyBWQUxVRVMoMiwxNjQ5NTQxMDAxLDIsJ2h0dHBzOi8vd3d3LndlYmtpdC5v
cmcvYmxvZycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MicsJ3RvcGljMicsWCcwZTBmJyxYJzEwMTEn
LFgnMTIxMycsWCcxNDE1JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9u
cyBWQUxVRVMoMywxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMnLCdodHRw
czovL3B1c2hFbmRwb2ludDMnLCd0b3BpYzMnLFgnMDAwMScsWCcwMTAyJyxYJzAyMDMnLFgnMDQw
NScsMTY0MzM1MDAwMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVT
KDQsMTY0OTU0MTAwMSwzLCdodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lJywnaHR0cHM6Ly9w
dXNoRW5kcG9pbnQ0JywndG9waWM0JyxYJzA5MGEnLFgnMGEwYicsWCcwYjBjJyxYJzBjMGQnLE5V
TEwpIl9zLAorICAgICJERUxFVEUgRlJPTSBzcWxpdGVfc2VxdWVuY2UiX3MsCisgICAgIklOU0VS
VCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlwdGlvblNldHMnLDMpIl9zLAor
ICAgICJJTlNFUlQgSU5UTyBzcWxpdGVfc2VxdWVuY2UgVkFMVUVTKCdTdWJzY3JpcHRpb25zJyw0
KSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURf
SW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3MsCisgICAgIlBSQUdN
QSB1c2VyX3ZlcnNpb24gPSAyIl9zLAorfTsKKworVEVTVChQdXNoRGF0YWJhc2UsIENhbk1pZ3Jh
dGVWMkRhdGFiYXNlVG9DdXJyZW50U2NoZW1hKQoreworICAgIGF1dG8gcGF0aCA9IG1ha2VUZW1w
b3JhcnlEYXRhYmFzZVBhdGgoKTsKKyAgICBhdXRvIGNvdW50ID0gc2l6ZW9mKHB1c2hEYXRhYmFz
ZVYyU3RhdGVtZW50cykgLyBzaXplb2YocHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzWzBdKTsKKyAg
ICBBU1NFUlRfVFJVRShjcmVhdGVEYXRhYmFzZUZyb21TdGF0ZW1lbnRzKHBhdGgsIHB1c2hEYXRh
YmFzZVYyU3RhdGVtZW50cywgY291bnQpKTsKKworICAgIC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFy
ZSB0aGVyZSBhZnRlciBtaWdyYXRpbmcuCisgICAgeworICAgICAgICBhdXRvIGRhdGFiYXNlUmVz
dWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRfVFJVRShkYXRh
YmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNlUmVzdWx0Owor
CisgICAgICAgIGF1dG8gcmVjb3JkUmVzdWx0ID0gZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVy
QW5kU2NvcGVTeW5jKGRhdGFiYXNlLCAiY29tLmFwcGxlLlNhZmFyaSJfcywgImh0dHBzOi8vd3d3
LndlYmtpdC5vcmcvYmxvZyJfcyk7CisgICAgICAgIEFTU0VSVF9UUlVFKHJlY29yZFJlc3VsdCk7
CisgICAgICAgIEFTU0VSVF9FUShyZWNvcmRSZXN1bHQtPnRvcGljLCAidG9waWMyIl9zKTsKKwor
ICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRpZmllcnNTeW5jKGRhdGFi
YXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAoSGFzaFNldDx1aW50NjRf
dD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRoZSBpbml0aWFsIHRv
a2VuIHNob3VsZCByZXR1cm4gUHVibGljVG9rZW5DaGFuZ2VkOjpOby4KKyAgICAgICAgYXV0byB1
cGRhdGVSZXN1bHQgPSB1cGRhdGVQdWJsaWNUb2tlblN5bmMoZGF0YWJhc2UsIFZlY3Rvcjx1aW50
OF90PiB7ICdhJywgJ2InIH0pOworICAgICAgICBBU1NFUlRfRVEodXBkYXRlUmVzdWx0LCBQdXNo
RGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pOworICAgIH0KKworICAgIC8vIE1ha2Ug
c3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciByZS1vcGVuaW5nIHdpdGhvdXQgbWlncmF0aW9u
LgorICAgIHsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IGNyZWF0ZURhdGFiYXNlU3lu
YyhwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGF0YWJhc2VSZXN1bHQpOworICAgICAgICBh
dXRvJiBkYXRhYmFzZSA9ICpkYXRhYmFzZVJlc3VsdDsKKworICAgICAgICBhdXRvIGdldFJlc3Vs
dCA9IGdldFB1YmxpY1Rva2VuU3luYyhkYXRhYmFzZSk7CisgICAgICAgIEFTU0VSVF9FUShnZXRS
ZXN1bHQsIChWZWN0b3I8dWludDhfdD4geyAnYScsICdiJyB9KSk7CisKKyAgICAgICAgYXV0byBy
b3dJZGVudGlmaWVycyA9IGdldFJvd0lkZW50aWZpZXJzU3luYyhkYXRhYmFzZSk7CisgICAgICAg
IEFTU0VSVF9FUShyb3dJZGVudGlmaWVycywgKEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywg
NCB9KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRp
ZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggZWQ4MzI4MGYxMmUz
ZDA5M2I2ODBmZGFiNGVhNjFlODYwNzNiMGExMS4uYWU1YjE3OTk2M2VhNmY2MmI5ZWJhMjg0NWEz
YThjYTlkMjEyZGU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTA5MCw2ICsxMDkwLDc2IEBAIFRFU1Rf
RihXZWJQdXNoRFRlc3QsIFRvb01hbnlTaWxlbnRQdXNoZXNDYXVzZXNVbnN1YnNjcmliZSkKICAg
ICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJVbnN1YnNjcmliZWQiXSk7
CiB9CiAKK1RFU1RfRihXZWJQdXNoRFRlc3QsIEdldFB1c2hTdWJzY3JpcHRpb25XaXRoTWlzbWF0
Y2hlZFB1YmxpY1Rva2VuKQoreworICAgIC8vIEZJWE1FOiBzaGFyZSB0aGlzIHNvdXJjZSBjb2Rl
IHdpdGggb3RoZXIgdGVzdHMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGh0bWxTb3VyY2Ug
PSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQ+CisgICAgbGV0IHBvc3ROb3RlTWVzc2FnZSA9IHdpbmRvdy53ZWJraXQubWVzc2Fn
ZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UuYmluZCh3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy5ub3RlKTsKKyAgICBsZXQgZ2V0UHVzaE1hbmFnZXIgPQorICAgICAgICBuYXZpZ2F0b3Iu
c2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykKKyAgICAgICAgICAgIC50aGVuKCgpID0+
IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5KQorICAgICAgICAgICAgLnRoZW4ocmVnaXN0
cmF0aW9uID0+IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlcik7CisKKyAgICBmdW5jdGlvbiBzdWJz
Y3JpYmUoKQorICAgIHsKKyAgICAgICAgZ2V0UHVzaE1hbmFnZXIKKyAgICAgICAgICAgIC50aGVu
KHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7IHVzZXJWaXNpYmxlT25seTog
dHJ1ZSwgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkgfSkpCisgICAgICAg
ICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnRvSlNPTigpKQorICAgICAg
ICAgICAgLnRoZW4ocG9zdE5vdGVNZXNzYWdlKQorICAgICAgICAgICAgLmNhdGNoKGUgPT4gcG9z
dE5vdGVNZXNzYWdlKGUudG9TdHJpbmcoKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldFN1
YnNjcmlwdGlvbigpCisgICAgeworICAgICAgICBnZXRQdXNoTWFuYWdlcgorICAgICAgICAgICAg
LnRoZW4ocHVzaE1hbmFnZXIgPT4gcHVzaE1hbmFnZXIuZ2V0U3Vic2NyaXB0aW9uKCkpCisgICAg
ICAgICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uID8gc3Vic2NyaXB0aW9u
LnRvSlNPTigpIDogbnVsbCkKKyAgICAgICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkKKyAg
ICAgICAgICAgIC5jYXRjaChlID0+IHBvc3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsKKyAg
ICB9CisKKyAgICBwb3N0Tm90ZU1lc3NhZ2UoJ1JlYWR5Jyk7CisgICAgPC9zY3JpcHQ+CisgICAg
KUhUTUwiX3M7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gbWVzc2FnZSA9IG5pbDsKKyAg
ICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1l
c3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgcmVjZWl2ZWRNZXNzYWdlKSB7Cisg
ICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2U7CisgICAgICAgIGdvdE1lc3NhZ2UgPSB0
cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3QoaHRtbFNvdXJjZSwgIiJfcyk7CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RNZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShb
bWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJSZWFkeSJdKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7
CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OkAic3Vic2NyaWJlKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7IH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgUmV0YWlu
UHRyPGlkPiBzdWJzY3JpcHRpb24gPSBtZXNzYWdlOworICAgIEFTU0VSVF9GQUxTRShbc3Vic2Ny
aXB0aW9uIGlzRXF1YWw6W05TTnVsbCBudWxsXV0pOworICAgIEFTU0VSVF9UUlVFKFtzdWJzY3Jp
cHRpb24gaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0gJiYgW3N1YnNjcmlwdGlv
biBvYmplY3RGb3JLZXk6QCJlbmRwb2ludCJdKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7CisgICAg
Z290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
Z2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7IH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNTRVJU
X1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpzdWJzY3JpcHRpb24uZ2V0KCldKTsKKworICAgIC8vIElm
IHRoZSBwdWJsaWMgdG9rZW4gY2hhbmdlcywgYWxsIHN1YnNjcmlwdGlvbnMgc2hvdWxkIGJlIGlu
dmFsaWRhdGVkLgorICAgIGF1dG8gdXRpbGl0eUNvbm5lY3Rpb24gPSBjcmVhdGVBbmRDb25maWd1
cmVDb25uZWN0aW9uVG9TZXJ2aWNlKCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZp
Y2UiKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25u
ZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6U2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nLCBlbmNv
ZGVTdHJpbmcoImZvb2JhciJfcykpOworCisgICAgbWVzc2FnZSA9IG5pbDsKKyAgICBnb3RNZXNz
YWdlID0gZmFsc2U7CisgICAgW21fd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJnZXRTdWJz
Y3JpcHRpb24oKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciopIHsgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RNZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShb
bWVzc2FnZSBpc0VxdWFsOltOU051bGwgbnVsbF1dKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457190</attachid>
            <date>2022-04-09 22:28:36 -0700</date>
            <delta_ts>2022-04-10 13:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239042-20220409222836.patch</filename>
            <type>text/plain</type>
            <size>42293</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjZhZDk0NzY1ZTRlMDhhZTY0ZTNkZTRiZjY0
MzY0NDQ2Zjc4NGZkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2RlZmlu
ZSBQVVNIREJfQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pKQog
CiAjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coUHVzaCwg
IiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUg
UFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQpAQCAtNDYs
MTMgKzQ5LDE1IEBACiAKICNkZWZpbmUga1B1c2hSZWNvcmRDb2x1bW5zICIgc3ViLnJvd0lELCBz
cy5idW5kbGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBvaW50LCBz
dWIudG9waWMsIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwg
c3ViLmNsaWVudFByaXZhdGVLZXksIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlv
blRpbWUgIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0
ZXJhbCBwdWJsaWNUb2tlbktleSA9ICJwdWJsaWNUb2tlbiJfczsKIAotc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24gPSAyOwotI2RlZmluZSBrQ3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb25TdHJpbmcgIjIiCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7
CiAgICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywKK307CisKK3N0YXRpYyBj
b25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjJTdGF0ZW1lbnRzW10gPSB7CiAg
ICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25TZXRzKCIKICAgICAiICByb3dJRCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIgogICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9U
IE5VTEwsIgpAQCAtNzQsOSArNzksMjYgQEAgc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNo
RGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKICAgICAiICBleHBpcmF0aW9uVGltZSBJ
TlQsIgogICAgICIgIFVOSVFVRShzY29wZSwgc3Vic2NyaXB0aW9uU2V0SUQpKSJfcywKICAgICAi
Q1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURfSW5kZXggT04gU3Vi
c2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3MsCi0gICAgIlBSQUdNQSB1c2VyX3ZlcnNp
b24gPSAiIGtDdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvblN0cmluZyAiIl9zCiB9OwogCitzdGF0
aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYzU3RhdGVtZW50c1tdID0g
eworICAgICJDUkVBVEUgVEFCTEUgTWV0YWRhdGEoa2V5IFRFWFQsIHZhbHVlLCBVTklRVUUoa2V5
KSkiX3MsCit9OworCitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsKiBwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzW10gPSB7CisgICAgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzLAor
ICAgIHB1c2hEYXRhYmFzZVNjaGVtYVYyU3RhdGVtZW50cywKKyAgICBwdXNoRGF0YWJhc2VTY2hl
bWFWM1N0YXRlbWVudHMsCit9OworCitzdGF0aWMgY29uc3QgaW50IHB1c2hEYXRhYmFzZVNjaGVt
YVN0YXRlbWVudENvdW50c1tdID0geworICAgIFBVU0hEQl9BUlJBWV9TSVpFKHB1c2hEYXRhYmFz
ZVNjaGVtYVYxU3RhdGVtZW50cyksCisgICAgUFVTSERCX0FSUkFZX1NJWkUocHVzaERhdGFiYXNl
U2NoZW1hVjJTdGF0ZW1lbnRzKSwKKyAgICBQVVNIREJfQVJSQVlfU0laRShwdXNoRGF0YWJhc2VT
Y2hlbWFWM1N0YXRlbWVudHMpLAorfTsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQgY3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb24gPSBQVVNIREJfQVJSQVlfU0laRShwdXNoRGF0YWJhc2VTY2hlbWFT
dGF0ZW1lbnRzKTsKKwogUHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25z
dCAmCiB7CiAgICAgcmV0dXJuIHsKQEAgLTE1MCwyMyArMTcyLDMxIEBAIHN0YXRpYyBFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlRGF0YWJhc2U+LCBTaG91bGREZWxldGVBbmRSZXRyeT4gb3BlbkFu
ZE1pZ3JhdGVECiAgICAgICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKICAgICB9CiAK
LSAgICBpZiAodmVyc2lvbiAmJiB2ZXJzaW9uICE9IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9u
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgbWlncmF0aW9uIHdoZW4gd2UgbmVlZCBpdC4KKyAg
ICBpZiAodmVyc2lvbiA8IDAgfHwgdmVyc2lvbiA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9u
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGb3VuZCB1bmV4cGVjdGVkIFB1
c2hEYXRhYmFzZSB2ZXJzaW9uOiAlZCAoZXhwZWN0ZWQ6ICVkKSBhdCBwYXRoOiAlcyIsIHZlcnNp
b24sIGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAg
ICAgfQogCi0gICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVz
aERhdGFiYXNlVmVyc2lvbikgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihkYik7CiAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICAgICAgZm9yIChhdXRv
JiBzdGF0ZW1lbnQgOiBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKLSAgICAgICAg
ICAgIGlmICghZGItPmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRXJyb3IgZXhlY3V0aW5nIFB1c2hEYXRhYmFzZSBE
REwgc3RhdGVtZW50ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRo
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
aG91bGREZWxldGVBbmRSZXRyeTo6WWVzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHZlcnNpb247
IGkgPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbjsgaSsrKSB7CisgICAgICAgICAgICBhdXRv
IHN0YXRlbWVudHMgPSBwdXNoRGF0YWJhc2VTY2hlbWFTdGF0ZW1lbnRzW2ldOworICAgICAgICAg
ICAgYXV0byBjb3VudCA9IHB1c2hEYXRhYmFzZVNjaGVtYVN0YXRlbWVudENvdW50c1tpXTsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFkYi0+ZXhlY3V0ZUNvbW1hbmQoc3RhdGVtZW50c1tqXSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkVycm9yIGV4ZWN1dGluZyBQdXNo
RGF0YWJhc2UgRERMIHN0YXRlbWVudCAlcyBhdCBwYXRoICVzOiAlZCIsIHN0YXRlbWVudHNbal0u
Y2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRiLT5sYXN0RXJyb3IoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRy
eTo6WWVzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoIWRiLT5leGVjdXRlQ29tbWFuZFNsb3cobWFrZVN0cmluZygiUFJBR01BIHVz
ZXJfdmVyc2lvbiA9ICIsIGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSkpCisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRXJyb3Igc2V0dGluZyB1c2VyIHZlcnNpb24gZm9y
IFB1c2hEYXRhYmFzZSBhdCBwYXRoICVzOiAlZCIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGItPmxh
c3RFcnJvcigpKTsKKworCiAgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIH0KIApA
QCAtMjg1LDYgKzMxNSwxMDAgQEAgc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1ZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLAogICAgIH0pOwogfQog
Cit2b2lkIFB1c2hEYXRhYmFzZTo6dXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90
PiBwdWJsaWNUb2tlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMs
IG5ld1B1YmxpY1Rva2VuID0gVmVjdG9yIHsgcHVibGljVG9rZW4uZGF0YSgpLCBwdWJsaWNUb2tl
bi5zaXplKCkgfSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
Yik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYXV0byByZXN1bHQg
PSBQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vOworICAgICAgICBWZWN0b3I8dWludDhfdD4gY3VycmVu
dFB1YmxpY1Rva2VuOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVk
U3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZhbHVlIEZST00gTWV0YWRhdGEgV0hFUkUga2V5ID0g
PyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0KDEsIHB1YmxpY1Rv
a2VuS2V5KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9M
T0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgICAgICAgICBjdXJyZW50UHVibGljVG9rZW4gPSBzcWwtPmNvbHVtbkJs
b2IoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudFB1YmxpY1Rva2VuID09IG5l
d1B1YmxpY1Rva2VuKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKCJSRVBMQUNFIElOVE8gTWV0YWRhdGEoa2V5LCB2YWx1ZSkgVkFMVUVTKD8sID8pIl9z
KTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4
dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kQmxvYigyLCBuZXdQdWJsaWNUb2tlbikgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoUHVzaCwgIkZhaWxlZCB0byBzYXZlIG5ldyBwdWJsaWMgdG9rZW46ICVkIiwgbV9k
Yi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVwZGF0
aW5nIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSBjdXJyZW50UHVibGljVG9r
ZW4gZG9lc24ndCBleGlzdCwganVzdAorICAgICAgICAvLyBzYXZlIHRoZSBpbml0aWFsIHB1Ymxp
Y1Rva2VuIHdpdGhvdXQgZGVsZXRpbmcgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIG5vdGlmeWluZyB0
aGUgY2FsbGVyIHRoYXQKKyAgICAgICAgLy8gdGhlIHRva2VuIGNoYW5nZWQuCisgICAgICAgIGlm
ICghY3VycmVudFB1YmxpY1Rva2VuLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBkZWxl
dGVTdWJzY3JpcHRpb25TZXRzID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00g
U3Vic2NyaXB0aW9uU2V0cyJfcyk7CisgICAgICAgICAgICBhdXRvIGRlbGV0ZVN1YnNjcmlwdGlv
bnMgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIl9z
KTsKKworICAgICAgICAgICAgaWYgKCFkZWxldGVTdWJzY3JpcHRpb25TZXRzIHx8ICFkZWxldGVT
dWJzY3JpcHRpb25zKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRf
RVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRlbGV0ZVN1YnNjcmlwdGlvblNldHMtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSB8fCBkZWxldGVTdWJzY3JpcHRpb25zLT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRmFpbGVk
IHRvIGRlbGV0ZSBzdWJzY3JpcHRpb25zOiAlZCIsIG1fZGItPmxhc3RFcnJvcigpKTsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpZZXM7CisgICAgICAgIH0KKwor
ICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgIH0pOworfQorCit2
b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UHVibGljVG9rZW4oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGlzcGF0Y2hP
bldvcmtRdWV1ZShbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYXV0byBz
cWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhZGF0YSBX
SEVSRSBrZXkgPSA/Il9zKTsKKyAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kVGV4dCgxLCBw
dWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgVmVjdG9yPHVpbnQ4X3Q+IHsgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0Owor
ICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNxbC0+Y29sdW1uQmxvYigwKTsKKworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
KworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCByZXN1bHQpOworICAgIH0pOworfQorCiB2b2lkIFB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3Jk
KGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9w
dGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGRpc3Bh
dGNoT25Xb3JrUXVldWUoW3RoaXMsIHJlY29yZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmgKaW5k
ZXggMzNlNDNiZThhZWYwZWZkZWEyYzg3N2IwYTU4NzA2NDc3YjkyYjc4ZC4uODM3Mzg5M2UwMTZk
Y2UwNDNhMjkxMjQ4NTA3YWQ3NmJjZDUxNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KQEAgLTc2LDYgKzc3LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBDcmVhdGlvbkhhbmRsZXImJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgflB1c2hEYXRhYmFzZSgpOwogCisgICAgZW51bSBjbGFzcyBQdWJsaWNU
b2tlbkNoYW5nZWQgOiBib29sIHsgTm8sIFllcyB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90PiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFB1YmxpY1Rva2VuKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
KTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNv
cmQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+
JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKFB1
c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJlY29yZEJ5VG9waWMoY29uc3QgU3RyaW5n
JiB0b3BpYywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
JiYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25D
b25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMu
aAppbmRleCBlOTBlZWVkMDE0MDc4NjU3YTExOGVhNmEzZjRjMjkwMjdmNmQ0YmRlLi5hODViNjlk
Mjk4NmE5Mzg5MmFkNGMwN2U0NTIzMDYyMmU0NTBhZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gY2xh
c3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAgICBJbmNyZW1lbnRTaWxlbnRQdXNoQ291bnQs
CiAgICAgUmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMsCiAgICAgUmVtb3ZlUHVzaFN1YnNjcmlw
dGlvbnNGb3JPcmlnaW4sCisgICAgU2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nLAogfTsKIAogaW5s
aW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQpA
QCAtNzQsNiArNzUsNyBAQCBpbmxpbmUgYm9vbCBtZXNzYWdlVHlwZVNlbmRzUmVwbHkoTWVzc2Fn
ZVR5cGUgbWVzc2FnZVR5cGUpCiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5jcmVtZW50U2lsZW50
UHVzaENvdW50OgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlbW92ZUFsbFB1c2hTdWJzY3JpcHRp
b25zOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3Jp
Z2luOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6U2V0RGVidWdNb2RlSXNF
bmFibGVkOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVwZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0
aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNl
Q29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0KaW5kZXggZWZmN2VhZTVjZmZhODc3NzhiNjY2MmFiNmIxNTRlMGQ0YTRmMDdk
OC4uNDA3NzJiYmRkMDRiYTJhMmM3ZTBiNTY4MmE4NWYyODEwMDIzMTI4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBA
IC00OCwxMyArNDgsMTUgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29ubmVjdGlvbjooV2Vi
UHVzaEQ6OkFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uICopY29ubmUKIC0gKHZvaWQpY29ubmVj
dGlvbjooQVBTQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVB1YmxpY1Rva2VuOihO
U0RhdGEgKilwdWJsaWNUb2tlbgogewogICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAg
ICBVTlVTRURfUEFSQU0ocHVibGljVG9rZW4pOworICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkp
OworCisgICAgaWYgKF9jb25uZWN0aW9uICYmIHB1YmxpY1Rva2VuLmxlbmd0aCkKKyAgICAgICAg
X2Nvbm5lY3Rpb24tPmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdWJsaWNUb2tlbi5ieXRlcyksIHB1YmxpY1Rv
a2VuLmxlbmd0aCB9KTsKIH0KIAogLSAodm9pZCljb25uZWN0aW9uOihBUFNDb25uZWN0aW9uICop
Y29ubmVjdGlvbiBkaWRSZWNlaXZlSW5jb21pbmdNZXNzYWdlOihBUFNJbmNvbWluZ01lc3NhZ2Ug
KiltZXNzYWdlCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCiAgICAgQVNTRVJU
KGlzTWFpblJ1bkxvb3AoKSk7CiAKICAgICBpZiAoX2Nvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IGI5NTNi
YjljMTJkZDdlMjJiZDY5MTMwNTQ0ODc5YzdkZjQ2ZDk0YTIuLjFmOGU2ZWY5ZTJlM2QwODQ4NGMx
MTAxZmI1ODI2MjAxY2JmZmNjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldE5vbldha2luZ1RvcGljcyhWZWN0b3I8U3RyaW5nPiYmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgc2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpIG92ZXJyaWRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCBjNGNmMmU2NzliOTJiZjky
MzU2MWMxNThjMjNkMzY4MDFkODc4MzY0Li43OTZkNWNkMTE2N2JmMWUwNjRkYmUxZDY3YjRiY2E3
NWRiNjBkM2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJQdXNoRCB7
CiAKIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24o
KQogeworICAgIGRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4geyAnYScsICdi
JywgJ2MnIH0pOwogfQogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp+TW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKQEAgLTEwNCw0ICsxMDUsOSBAQCB2b2lkIE1vY2tQ
dXNoU2VydmljZUNvbm5lY3Rpb246OnNldFRvcGljTGlzdHMoVG9waWNMaXN0cyYmIHRvcGljTGlz
dHMpCiB7CiB9CiAKK3ZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0UHVibGljVG9r
ZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAgIGRpZFJlY2VpdmVQ
dWJsaWNUb2tlbihXVEZNb3ZlKHRva2VuKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYlB1c2hE
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKaW5kZXggZTQ0NTAxOWVjOWUyYzdjYjFk
ZWY2MmQ0MWMwYTFiMTE5N2JhNTQ5Yi4uNTE4MjBmMjExZTk2Y2YyNDA3NzEyZjgyYjI4OWQyOWM3
ODY1OGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApAQCAtNzAsNiArNzAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vic2Ny
aWJlUmVxdWVzdCYpOwogICAgIHZvaWQgZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5z
dWJzY3JpYmVSZXF1ZXN0Jik7CiAKKyAgICB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhW
ZWN0b3I8dWludDhfdD4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9y
PHVpbnQ4X3Q+JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0
b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
ID0gW10geyB9KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
CmluZGV4IGUyNjg0NGQzYjY4Njg5OWZlNzMxN2Q5ZGE1YTQ3ZTczNzgyZjAzM2YuLmRiMWE4M2Q0
ZWQ2MmE4NWJjOGY3MDdhYTQzZWQ3ZWU0NzNjNjcyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZS5tbQpAQCAtMTE2LDYgKzExNiwxMCBAQCBQdXNoU2VydmljZTo6UHVzaFNlcnZp
Y2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiBwdXNoU2VydmljZUNvbm5lY3Rp
bwogewogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpOwog
CisgICAgbV9jb25uZWN0aW9uLT5zdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFt0aGlzXShh
dXRvJiYgdG9rZW4pIHsKKyAgICAgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFdURk1vdmUodG9r
ZW4pKTsKKyAgICB9KTsKKwogICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNo
TWVzc2FnZXMoW3RoaXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykg
ewogICAgICAgICBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKICAgICB9
KTsKQEAgLTYyMSw2ICs2MjUsMjQgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmF3UHVzaE1lc3Nh
Z2U+IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGkKICAgICByZXR1
cm4gbWVzc2FnZTsKIH0KIAordm9pZCBQdXNoU2VydmljZTo6c2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAgIG1fY29ubmVjdGlvbi0+c2V0UHVi
bGljVG9rZW5Gb3JUZXN0aW5nKFdURk1vdmUodG9rZW4pKTsKK30KKwordm9pZCBQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90PiYmIHRva2VuKQoreworICAg
IG1fZGF0YWJhc2UtPnVwZGF0ZVB1YmxpY1Rva2VuKHRva2VuLCBbdGhpc10oYXV0byByZXN1bHQp
IG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0ID09IFB1c2hEYXRhYmFzZTo6UHVibGljVG9r
ZW5DaGFuZ2VkOjpObykgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlJlY2VpdmVk
IGV4cGVjdGVkIHB1YmxpYyB0b2tlbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIlB1YmxpYyB0b2tlbiBjaGFuZ2Vk
OyBpbnZhbGlkYXRlZCBhbGwgZXhpc3RpbmcgcHVzaCBzdWJzY3JpcHRpb25zIik7CisgICAgICAg
IHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbXSgpIHsgfSk7Cisg
ICAgfSk7Cit9CisKIHZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0
cmluZyogdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBt
YWtlUmF3UHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDE5ODE0M2Y1Njk3Y2QyOGM2OTI4
ZDQ1NjhjMjFjMzI1NDkyMGQyMGYuLjU0M2JlMDYwNTM5OWMwOTJhNTQ4ZmJmYWE0NWFhYjdhZWJl
OTgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rp
b24uaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViUHVzaEQgewogY2xhc3MgUHVzaFNl
cnZpY2VDb25uZWN0aW9uIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFB1c2hTZXJ2aWNlQ29ubmVj
dGlvbj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5n
IFB1YmxpY1Rva2VuSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPjsK
ICAgICB1c2luZyBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoTlNT
dHJpbmcgKiwgTlNEaWN0aW9uYXJ5ICopPjsKIAogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigp
ID0gZGVmYXVsdDsKQEAgLTc0LDEwICs3NSwxNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYpID0gMDsKIAorICAgIHZvaWQgc3Rh
cnRMaXN0ZW5pbmdGb3JQdWJsaWNUb2tlbihQdWJsaWNUb2tlbkhhbmRsZXImJik7CisgICAgdm9p
ZCBkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCiAgICAg
dm9pZCBzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlciYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMs
IE5TRGljdGlvbmFyeSAqdXNlckluZm8pOwogCiBwcml2YXRlOgorICAgIFB1YmxpY1Rva2VuSGFu
ZGxlciBtX3B1YmxpY1Rva2VuSGFuZGxlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9wZW5kaW5n
UHVibGljVG9rZW47CiAgICAgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgbV9pbmNvbWluZ1B1
c2hNZXNzYWdlSGFuZGxlcjsKICAgICBEZXF1ZTxzdGQ6OnBhaXI8UmV0YWluUHRyPE5TU3RyaW5n
PiwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4+PiBtX3BlbmRpbmdQdXNoZXM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCA5MmY4
MTQyNzdhODM4MTUzMTY4OGIwZTQ4NTE4MmQ0M2Q4NWNjODY4Li5lM2I0ZjgxMGU1NGQ0NGIwMjI0
MTYwYjFlZDA3NWFkMDIxMGE0N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMzcsNiArMzcsMzIgQEAgUHVzaENyeXB0bzo6Q2xp
ZW50S2V5cyBQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCiAgICAg
cmV0dXJuIFB1c2hDcnlwdG86OkNsaWVudEtleXM6OmdlbmVyYXRlKCk7CiB9CiAKK3ZvaWQgUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFB1YmxpY1Rv
a2VuSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgbV9wdWJsaWNUb2tlbkhhbmRsZXIgPSBXVEZN
b3ZlKGhhbmRsZXIpOworCisgICAgaWYgKG1fcGVuZGluZ1B1YmxpY1Rva2VuLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRva2VuOworICAgIG1fcGVu
ZGluZ1B1YmxpY1Rva2VuLnN3YXAodG9rZW4pOworICAgIG1fcHVibGljVG9rZW5IYW5kbGVyKFdU
Rk1vdmUodG9rZW4pKTsKK30KKwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OmRpZFJlY2Vp
dmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBpZiAoIW1fcHVi
bGljVG9rZW5IYW5kbGVyKSB7CisgICAgICAgIG1fcGVuZGluZ1B1YmxpY1Rva2VuID0gV1RGTW92
ZSh0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3B1YmxpY1Rva2VuSGFu
ZGxlcihXVEZNb3ZlKHRva2VuKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpz
ZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpCit7Cit9CisKIHZvaWQg
UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5oCmluZGV4IDA2NjJmMTNlOTgzOTQ5MDBjNTQxZmFiZGU5NTZlODVjOTY2MmRi
MzMuLmY0OWRlMmU3ZDFmMDQzNGJhNWNiYzg2NzJhM2I3NzIzNGI5ZmFlOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluY3JlbWVudFNpbGVudFB1c2hDb3VudChDbGllbnRDb25uZWN0aW9uKiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNp
Z25lZCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMoQ2xpZW50Q29u
bmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKICAgICB2b2lk
IHJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVu
c2lnbmVkKT4mJik7CisgICAgdm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29u
bmVjdGlvbiosIGNvbnN0IFN0cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKICAgICB2b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShTdHJpbmdWaWV3KTsK
ICAgICB2b2lkIGJyb2FkY2FzdEFsbENvbm5lY3Rpb25JZGVudGl0aWVzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggNzg1MzJkMDRhZjYxNzBjMTg4ZjhjOTEz
NjlhODIxMDc5MmQwYmJhMC4uNGNlYzY0MTE1ZGZjNWM5NWVlOGJlNTJkNGJlZWQyYTFjZTk5NWM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTM0LDExICsx
MzQsMjEgQEAgQVJHVU1FTlRTKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSkKIFJFUExZKHVu
c2lnbmVkKQogRU5ECiAKK0ZVTkNUSU9OKHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZykKK0FSR1VN
RU5UUyhTdHJpbmcpCitSRVBMWSgpCitFTkQKKworCiAjdW5kZWYgRlVOQ1RJT04KICN1bmRlZiBB
UkdVTUVOVFMKICN1bmRlZiBSRVBMWQogI3VuZGVmIEVORAogCisjZGVmaW5lIEVNUFRZX1JFUExZ
KG1mKSBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgbWY6OmVuY29kZVJlcGx5KCkgeyByZXR1cm4g
eyB9OyB9CitFTVBUWV9SRVBMWShzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOworI3VuZGVmIEVN
UFRZX1JFUExZCisKIFdlYlB1c2hEOjpFbmNvZGVkTWVzc2FnZSBlY2hvVHdpY2U6OmVuY29kZVJl
cGx5KFN0cmluZyByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVy
OwpAQCAtNDQ1LDYgKzQ1NSw5IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdl
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBN
ZXNzYWdlVHlwZTo6UmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW46CiAgICAgICAgIGhh
bmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6cmVtb3ZlUHVzaFN1YnNj
cmlwdGlvbnNGb3JPcmlnaW4+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZN
b3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdl
V2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjpzZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc+KGNsaWVudENv
bm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtNzIyLDYgKzczNSwxOSBAQCB2b2lkIERhZW1vbjo6cmVt
b3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgY29ucwogICAgIH0pOwogfQogCit2b2lkIERhZW1vbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgcmVwbHlTZW5kZXIpCit7CisgICAgcnVuQWZ0ZXJTdGFydGlu
Z1B1c2hTZXJ2aWNlKFt0aGlzLCBwdWJsaWNUb2tlbiwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJl
cGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7Cisg
ICAgICAgICAgICByZXBseVNlbmRlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rv
cjx1aW50OF90PiB7IHB1YmxpY1Rva2VuLnV0ZjgoKS5ieXRlcygpIH0pOworICAgICAgICByZXBs
eVNlbmRlcigpOworICAgIH0pOworfQorCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRvQ2xp
ZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiB7CiAgICAgYXV0byBj
bGllbnRDb25uZWN0aW9uID0gbV9jb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiOTFmZTRjYWMz
YWE5MjVlNjc0YTQ1NTkyYjQ4N2E3MjkyZDhmZjUyLi4yZWY1MDliYjFjMmY5NjczZjE0ZWQ4Yjll
MDE5MTQ4Mzk3YjkwYTU5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjItMDQtMDkgIEJlbiBOaGFtICA8bmhhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1
c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkw
NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBU
ZXN0IHRoYXQgcHVibGljIHRva2VuIHVwZGF0ZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkgYXQgdGhl
IFB1c2hEYXRhYmFzZSBhbmQgV2ViUHVzaERhZW1vbiBsZXZlbHMKKyAgICAgICAgIC0gVGVzdCBz
Y2hlbWEgbWlncmF0aW9uIGluIFB1c2hEYXRhYmFzZQorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpjcmVhdGVEYXRhYmFzZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVibGlj
VG9rZW5TeW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnVwZGF0ZVB1YmxpY1Rva2VuU3lu
Yyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0Um93SWRlbnRpZmllcnNT
eW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFB1Ymxp
Y1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnVwZGF0
ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6
OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToK
KwogMjAyMi0wNC0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01lcmdlLVF1ZXVlXSBVcGRhdGUgaGVhZCBhbmQgYmFzZSByZWZlcmVuY2VzIGluIFBS
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFi
YXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2Uu
Y3BwCmluZGV4IDcxZWZlYWNjZmI4N2NkZmE5YTM2OGY4YjgzODczYjRlNWEzYWJmZDMuLjVmZDFj
NDE1OTg1MzZhM2FjMjU5YmEwNDA4YzJlNzQ1YTc3YTkxMzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC00Myw2ICs0Myw3
NyBAQCBzdGF0aWMgU3RyaW5nIG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgoKQogICAgIHJldHVy
biBwYXRoOwogfQogCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRl
RGF0YWJhc2VTeW5jKFN0cmluZyBwYXRoKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0
YWJhc2U+IHJlc3VsdDsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAgIFB1c2hEYXRhYmFz
ZTo6Y3JlYXRlKHBhdGgsIFsmZG9uZSwgJnJlc3VsdF0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRh
YmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGlj
VG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgYm9vbCBkb25lID0gZmFs
c2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldFJlc3VsdDsKKworICAgIGRhdGFiYXNlLmdldFB1
YmxpY1Rva2VuKFsmZG9uZSwgJmdldFJlc3VsdF0oYXV0byYmIHJlc3VsdCkgeworICAgICAgICBn
ZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0p
OworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVzdWx0OworfQorCitz
dGF0aWMgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQgdXBkYXRlUHVibGljVG9rZW5T
eW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIFNwYW48Y29uc3QgdWludDhfdD4gdG9rZW4pCit7
CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgYXV0byB1cGRhdGVSZXN1bHQgPSBQdXNoRGF0
YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm87CisKKyAgICBkYXRhYmFzZS51cGRhdGVQdWJs
aWNUb2tlbih0b2tlbiwgWyZkb25lLCAmdXBkYXRlUmVzdWx0XShhdXRvJiYgcmVzdWx0KSB7Cisg
ICAgICAgIHVwZGF0ZVJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJldHVybiB1cGRhdGVS
ZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5
QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25z
dCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIGJvb2wgZG9u
ZSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OworCisg
ICAgZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUoYnVuZGxlSUQs
IHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRdKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJiBy
ZXN1bHQpIHsKKyAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJu
IGdldFJlc3VsdDsKK30KKworc3RhdGljIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZp
ZXJzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIGJvb2wgZG9uZSA9IGZhbHNl
OworICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOworCisgICAgZGF0YWJhc2Uu
Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNj
cmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsKKyAgICAgICAgZm9yIChhdXRvIGlk
ZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAgICAgICAgICAgIHJvd0lkZW50aWZpZXJzLmFkZChp
ZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAg
ICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworfQorCiBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0VG9waWNzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNl
KQogewogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtNjYsNyArMTM3LDcgQEAgcHVibGljOgog
ICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxl
LmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAg
ICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRw
b2ludDEiX3MsCiAgICAgICAgICJ0b3BpYzEiX3MsCiAgICAgICAgIHsgNSwgNiB9LAogICAgICAg
ICB7IDYsIDcgfSwKQEAgLTc4LDggKzE0OSw4IEBAIHB1YmxpYzoKICAgICAgICAgImNvbS5hcHBs
ZS5TYWZhcmkiX3MsCiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3JnIl9zLAogICAgICAg
ICAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zLAotICAgICAgICAiaHR0cHM6Ly9wdXNo
RW5kcG9pbnQ0Il9zLAotICAgICAgICAidG9waWM0Il9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNo
RW5kcG9pbnQyIl9zLAorICAgICAgICAidG9waWMyIl9zLAogICAgICAgICB7IDE0LCAxNSB9LAog
ICAgICAgICB7IDE2LCAxNyB9LAogICAgICAgICB7IDE4LCAxOSB9LApAQCAtOTAsOCArMTYxLDgg
QEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMi
X3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCi0gICAgICAgICJ0b3BpYzIi
X3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAgICAgICJ0b3BpYzMi
X3MsCiAgICAgICAgIHsgMCwgMSB9LAogICAgICAgICB7IDEsIDIgfSwKICAgICAgICAgeyAyLCAz
IH0sCkBAIC0xMDMsOCArMTc0LDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFy
aSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2lu
dDMiX3MsCi0gICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2lu
dDQiX3MsCisgICAgICAgICJ0b3BpYzQiX3MsCiAgICAgICAgIHsgOSwgMTAgfSwKICAgICAgICAg
eyAxMCwgMTEgfSwKICAgICAgICAgeyAxMSwgMTIgfSwKQEAgLTExNiw2ICsxODcsMTYgQEAgcHVi
bGljOgogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKICAgICBz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDQ7CiAKKyAgICBWZWN0b3I8dWlu
dDhfdD4gZ2V0UHVibGljVG9rZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldFB1YmxpY1Rv
a2VuU3luYygqZGIpOworICAgIH0KKworICAgIFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFu
Z2VkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gdG9rZW4pCisgICAgewor
ICAgICAgICByZXR1cm4gdXBkYXRlUHVibGljVG9rZW5TeW5jKCpkYiwgdG9rZW4pOworICAgIH0K
KwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hS
ZWNvcmQmIHJlY29yZCkKICAgICB7CiAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtMTYw
LDMxICsyNDEsMTIgQEAgcHVibGljOgogCiAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBn
ZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlE
LCBjb25zdCBTdHJpbmcmIHNjb3BlKQogICAgIHsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OwotCi0gICAgICAg
IGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5kbGVJRCwgc2NvcGUs
IFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkg
ewotICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICAgICAg
ZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4oJmRvbmUpOwotCi0g
ICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgICAgIHJldHVybiBnZXRSZWNvcmRCeUJ1bmRs
ZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoKmRiLCBidW5kbGVJRCwgc2NvcGUpOwogICAgIH0KIAog
ICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzKCkKICAgICB7Ci0gICAgICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBIYXNoU2V0PHVpbnQ2NF90PiByb3dJZGVudGlm
aWVyczsKLQotICAgICAgICBkYi0+Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmll
cnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmllcnMpCi0gICAgICAg
ICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9VSW50NjQoKSk7Ci0gICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9u
ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworICAgICAgICByZXR1cm4gZ2V0
Um93SWRlbnRpZmllcnNTeW5jKCpkYik7CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0
VG9waWNzKCkKQEAgLTIzNiwxMyArMjk4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBTZXRVcCgp
IGZpbmFsCiAgICAgewotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERh
dGFiYXNlOjpjcmVhdGUobWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpLCBbdGhpcywgJmRvbmVd
KHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAg
IGRiID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KKyAgICAgICAgZGIgPSBjcmVhdGVE
YXRhYmFzZVN5bmMoU1FMaXRlRGF0YWJhc2U6OmluTWVtb3J5UGF0aCgpKTsKICAgICAgICAgQVNT
RVJUX1RSVUUoZGIpOwogICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQxID0gaW5zZXJ0
UmVjb3JkKHJlY29yZDEpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MiA9IGlu
c2VydFJlY29yZChyZWNvcmQyKSk7CkBAIC0yNjYsNiArMzIyLDM2IEBAIHN0YXRpYyBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwgY29uc3QgUHVzaFJlY29yZCYgYikKICAgICAg
ICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lOwogfQogCitURVNUX0Yo
UHVzaERhdGFiYXNlVGVzdCwgVXBkYXRlUHVibGljVG9rZW4pCit7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGluaXRpYWxUb2tlbiA9IHsgJ2EnLCAnYicsICdjJyB9OworICAgIFZlY3Rvcjx1aW50OF90
PiBtb2RpZmllZFRva2VuID0geyAnZCcsICdlJywgJ2YnIH07CisKKyAgICAvLyBTZXR0aW5nIHRo
ZSBpbml0aWFsIHB1YmxpYyB0b2tlbiBzaG91bGRuJ3QgZGVsZXRlIGFueXRoaW5nLgorICAgIGF1
dG8gdXBkYXRlUmVzdWx0MSA9IHVwZGF0ZVB1YmxpY1Rva2VuKGluaXRpYWxUb2tlbik7CisgICAg
RVhQRUNUX0VRKHVwZGF0ZVJlc3VsdDEsIFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2Vk
OjpObyk7CisgICAgRVhQRUNUX0VRKGdldFJvd0lkZW50aWZpZXJzKCksIChIYXNoU2V0PHVpbnQ2
NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAgYXV0byBnZXRSZXN1bHQxID0gZ2V0UHVibGlj
VG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MSwgaW5pdGlhbFRva2VuKTsKKworICAg
IC8vIFNldHRpbmcgdGhlIHNhbWUgdG9rZW4gYWdhaW4gc2hvdWxkIGRvIG5vdGhpbmcuCisgICAg
YXV0byB1cGRhdGVSZXN1bHQyID0gdXBkYXRlUHVibGljVG9rZW4oaW5pdGlhbFRva2VuKTsKKyAg
ICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MiwgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5n
ZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8dWlu
dDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisKKyAgICBhdXRvIGdldFJlc3VsdDIgPSBnZXRQdWJs
aWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQyLCBpbml0aWFsVG9rZW4pOworCisg
ICAgLy8gQ2hhbmdpbmcgdGhlIHB1YmxpYyB0b2tlbiBhZnRlcndhcmRzIHNob3VsZCBkZWxldGUg
ZXZlcnl0aGluZy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDMgPSB1cGRhdGVQdWJsaWNUb2tlbiht
b2RpZmllZFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MywgUHVzaERhdGFiYXNl
OjpQdWJsaWNUb2tlbkNoYW5nZWQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUoZ2V0Um93SWRlbnRp
ZmllcnMoKS5pc0VtcHR5KCkpOworCisgICAgYXV0byBnZXRSZXN1bHQzID0gZ2V0UHVibGljVG9r
ZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MywgbW9kaWZpZWRUb2tlbik7Cit9CisKIFRF
U1RfRihQdXNoRGF0YWJhc2VUZXN0LCBJbnNlcnRSZWNvcmQpCiB7CiAgICAgYXV0byBleHBlY3Rl
ZFJlY29yZDEgPSByZWNvcmQxOwpAQCAtNDAzLDEzICs0ODksNyBAQCBURVNUKFB1c2hEYXRhYmFz
ZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCByZWNvcmRDb3VudCA9
IDI1NjsKIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3Jl
YXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFi
YXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8
UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBX
VEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsK
LSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBj
cmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3Vs
dCk7CiAKICAgICAgICAgYXV0byYgZGF0YWJhc2UgPSAqY3JlYXRlUmVzdWx0OwpAQCAtNDQyLDEz
ICs1MjIsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0
OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVh
dGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFi
YXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRh
dGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAg
VXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRh
YmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CiAKICAg
ICAgICAgYXV0byB0b3BpY3MgPSBnZXRUb3BpY3NTeW5jKCpjcmVhdGVSZXN1bHQpOwpAQCAtNDY3
LDEzICs1NDEsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25n
cmFkZSkKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJh
c2U+IGNyZWF0ZVJlc3VsdDsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgICAgIFB1
c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRlUmVzdWx0LCAmZG9uZV0oc3RkOjp1bmlx
dWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewotICAgICAgICAgICAgY3JlYXRlUmVz
dWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisgICAgICAgIGF1dG8gY3JlYXRlUmVz
dWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOwogICAgICAgICBBU1NFUlRfVFJVRShjcmVh
dGVSZXN1bHQpOwogICAgIH0KIApAQCAtNDkxLDYgKzU1OSw3NSBAQCBURVNUKFB1c2hEYXRhYmFz
ZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiB9CiAKK3N0YXRpYyBib29s
IGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMoU3RyaW5nIHBhdGgsIEFTQ0lJTGl0ZXJhbCog
c3RhdGVtZW50cywgc2l6ZV90IGNvdW50KQoreworICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAg
IGRiLm9wZW4ocGF0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZChzdGF0ZW1lbnRzW2ldKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
QWNxdWlyZWQgYnkgcnVubmluZyAuZHVtcCBmcm9tIHRoZSBzcWxpdGUzIHNoZWxsIG9uIGEgVjIg
ZGF0YWJhc2UuCitzdGF0aWMgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50c1td
ID0geworICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cyggIHJvd0lEIElOVEVHRVIg
UFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBi
dW5kbGVJRCBURVhUIE5PVCBOVUxMLCAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwgIHNp
bGVudFB1c2hDb3VudCBJTlQgTk9UIE5VTEwsICBVTklRVUUoYnVuZGxlSUQsIHNlY3VyaXR5T3Jp
Z2luKSkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDEsMTY0
OTU0MTAwMSwnY29tLmFwcGxlLndlYmFwcCcsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbScsMCkiX3Ms
CisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDIsMTY0OTU0MTAwMSwn
Y29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LndlYmtpdC5vcmcnLDApIl9zLAorICAgICJJ
TlNFUlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUygzLDE2NDk1NDEwMDEsJ2NvbS5hcHBs
ZS5TYWZhcmknLCdodHRwczovL3d3dy5hcHBsZS5jb20nLDApIl9zLAorICAgICJDUkVBVEUgVEFC
TEUgU3Vic2NyaXB0aW9ucyggIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVO
VCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBzdWJzY3JpcHRpb25TZXRJRCBJTlQgTk9U
IE5VTEwsICBzY29wZSBURVhUIE5PVCBOVUxMLCAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwgIHRv
cGljIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCAgc2VydmVyVkFQSURQdWJsaWNLZXkgQkxPQiBOT1Qg
TlVMTCwgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCAgY2xpZW50UHJpdmF0ZUtleSBC
TE9CIE5PVCBOVUxMLCAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxMLCAgZXhwaXJhdGlv
blRpbWUgSU5ULCAgVU5JUVVFKHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJJ
TlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygxLDE2NDk1NDEwMDEsMSwnaHR0cHM6Ly93
d3cuYXBwbGUuY29tL2lwaG9uZScsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MScsJ3RvcGljMScsWCcw
NTA2JyxYJzA2MDcnLFgnMDcwOCcsWCcwODA5JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8g
U3Vic2NyaXB0aW9ucyBWQUxVRVMoMiwxNjQ5NTQxMDAxLDIsJ2h0dHBzOi8vd3d3LndlYmtpdC5v
cmcvYmxvZycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MicsJ3RvcGljMicsWCcwZTBmJyxYJzEwMTEn
LFgnMTIxMycsWCcxNDE1JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9u
cyBWQUxVRVMoMywxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMnLCdodHRw
czovL3B1c2hFbmRwb2ludDMnLCd0b3BpYzMnLFgnMDAwMScsWCcwMTAyJyxYJzAyMDMnLFgnMDQw
NScsMTY0MzM1MDAwMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVT
KDQsMTY0OTU0MTAwMSwzLCdodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lJywnaHR0cHM6Ly9w
dXNoRW5kcG9pbnQ0JywndG9waWM0JyxYJzA5MGEnLFgnMGEwYicsWCcwYjBjJyxYJzBjMGQnLE5V
TEwpIl9zLAorICAgICJERUxFVEUgRlJPTSBzcWxpdGVfc2VxdWVuY2UiX3MsCisgICAgIklOU0VS
VCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlwdGlvblNldHMnLDMpIl9zLAor
ICAgICJJTlNFUlQgSU5UTyBzcWxpdGVfc2VxdWVuY2UgVkFMVUVTKCdTdWJzY3JpcHRpb25zJyw0
KSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURf
SW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3MsCisgICAgIlBSQUdN
QSB1c2VyX3ZlcnNpb24gPSAyIl9zLAorfTsKKworVEVTVChQdXNoRGF0YWJhc2UsIENhbk1pZ3Jh
dGVWMkRhdGFiYXNlVG9DdXJyZW50U2NoZW1hKQoreworICAgIGF1dG8gcGF0aCA9IG1ha2VUZW1w
b3JhcnlEYXRhYmFzZVBhdGgoKTsKKyAgICBhdXRvIGNvdW50ID0gc2l6ZW9mKHB1c2hEYXRhYmFz
ZVYyU3RhdGVtZW50cykgLyBzaXplb2YocHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzWzBdKTsKKyAg
ICBBU1NFUlRfVFJVRShjcmVhdGVEYXRhYmFzZUZyb21TdGF0ZW1lbnRzKHBhdGgsIHB1c2hEYXRh
YmFzZVYyU3RhdGVtZW50cywgY291bnQpKTsKKworICAgIC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFy
ZSB0aGVyZSBhZnRlciBtaWdyYXRpbmcuCisgICAgeworICAgICAgICBhdXRvIGRhdGFiYXNlUmVz
dWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRfVFJVRShkYXRh
YmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNlUmVzdWx0Owor
CisgICAgICAgIGF1dG8gcmVjb3JkUmVzdWx0ID0gZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVy
QW5kU2NvcGVTeW5jKGRhdGFiYXNlLCAiY29tLmFwcGxlLlNhZmFyaSJfcywgImh0dHBzOi8vd3d3
LndlYmtpdC5vcmcvYmxvZyJfcyk7CisgICAgICAgIEFTU0VSVF9UUlVFKHJlY29yZFJlc3VsdCk7
CisgICAgICAgIEFTU0VSVF9FUShyZWNvcmRSZXN1bHQtPnRvcGljLCAidG9waWMyIl9zKTsKKwor
ICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRpZmllcnNTeW5jKGRhdGFi
YXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAoSGFzaFNldDx1aW50NjRf
dD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRoZSBpbml0aWFsIHRv
a2VuIHNob3VsZCByZXR1cm4gUHVibGljVG9rZW5DaGFuZ2VkOjpOby4KKyAgICAgICAgYXV0byB1
cGRhdGVSZXN1bHQgPSB1cGRhdGVQdWJsaWNUb2tlblN5bmMoZGF0YWJhc2UsIFZlY3Rvcjx1aW50
OF90PiB7ICdhJywgJ2InIH0pOworICAgICAgICBBU1NFUlRfRVEodXBkYXRlUmVzdWx0LCBQdXNo
RGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pOworICAgIH0KKworICAgIC8vIE1ha2Ug
c3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciByZS1vcGVuaW5nIHdpdGhvdXQgbWlncmF0aW9u
LgorICAgIHsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IGNyZWF0ZURhdGFiYXNlU3lu
YyhwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGF0YWJhc2VSZXN1bHQpOworICAgICAgICBh
dXRvJiBkYXRhYmFzZSA9ICpkYXRhYmFzZVJlc3VsdDsKKworICAgICAgICBhdXRvIGdldFJlc3Vs
dCA9IGdldFB1YmxpY1Rva2VuU3luYyhkYXRhYmFzZSk7CisgICAgICAgIEFTU0VSVF9FUShnZXRS
ZXN1bHQsIChWZWN0b3I8dWludDhfdD4geyAnYScsICdiJyB9KSk7CisKKyAgICAgICAgYXV0byBy
b3dJZGVudGlmaWVycyA9IGdldFJvd0lkZW50aWZpZXJzU3luYyhkYXRhYmFzZSk7CisgICAgICAg
IEFTU0VSVF9FUShyb3dJZGVudGlmaWVycywgKEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywg
NCB9KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRp
ZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggZWQ4MzI4MGYxMmUz
ZDA5M2I2ODBmZGFiNGVhNjFlODYwNzNiMGExMS4uMjQ5N2E0ODhhOGRkODIwYzIzYjJhZDg1MTEy
NDJjMmYxODJjMjhhNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTA5MCw2ICsxMDkwLDc1IEBAIFRFU1Rf
RihXZWJQdXNoRFRlc3QsIFRvb01hbnlTaWxlbnRQdXNoZXNDYXVzZXNVbnN1YnNjcmliZSkKICAg
ICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJVbnN1YnNjcmliZWQiXSk7
CiB9CiAKK1RFU1RfRihXZWJQdXNoRFRlc3QsIEdldFB1c2hTdWJzY3JpcHRpb25XaXRoTWlzbWF0
Y2hlZFB1YmxpY1Rva2VuKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBodG1sU291cmNl
ID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0PgorICAgIGxldCBwb3N0Tm90ZU1lc3NhZ2UgPSB3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlLmJpbmQod2luZG93LndlYmtpdC5tZXNzYWdlSGFu
ZGxlcnMubm90ZSk7CisgICAgbGV0IGdldFB1c2hNYW5hZ2VyID0KKyAgICAgICAgbmF2aWdhdG9y
LnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpCisgICAgICAgICAgICAudGhlbigoKSA9
PiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSkKKyAgICAgICAgICAgIC50aGVuKHJlZ2lz
dHJhdGlvbiA9PiByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIpOworCisgICAgZnVuY3Rpb24gc3Vi
c2NyaWJlKCkKKyAgICB7CisgICAgICAgIGdldFB1c2hNYW5hZ2VyCisgICAgICAgICAgICAudGhl
bihwdXNoTWFuYWdlciA9PiBwdXNoTWFuYWdlci5zdWJzY3JpYmUoeyB1c2VyVmlzaWJsZU9ubHk6
IHRydWUsIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZIH0pKQorICAgICAg
ICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi50b0pTT04oKSkKKyAgICAg
ICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkKKyAgICAgICAgICAgIC5jYXRjaChlID0+IHBv
c3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRT
dWJzY3JpcHRpb24oKQorICAgIHsKKyAgICAgICAgZ2V0UHVzaE1hbmFnZXIKKyAgICAgICAgICAg
IC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbigpKQorICAg
ICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlv
bi50b0pTT04oKSA6IG51bGwpCisgICAgICAgICAgICAudGhlbihwb3N0Tm90ZU1lc3NhZ2UpCisg
ICAgICAgICAgICAuY2F0Y2goZSA9PiBwb3N0Tm90ZU1lc3NhZ2UoZS50b1N0cmluZygpKSk7Cisg
ICAgfQorCisgICAgcG9zdE5vdGVNZXNzYWdlKCdSZWFkeScpOworICAgIDwvc2NyaXB0PgorICAg
IClIVE1MIl9zOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG1lc3NhZ2UgPSBuaWw7Cisg
ICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25N
ZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIHJlY2VpdmVkTWVzc2FnZSkgewor
ICAgICAgICBtZXNzYWdlID0gcmVjZWl2ZWRNZXNzYWdlOworICAgICAgICBnb3RNZXNzYWdlID0g
dHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KGh0bWxTb3VyY2UsICIiX3MpOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUo
W21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUmVhZHkiXSk7CisKKyAgICBtZXNzYWdlID0gbmls
OworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAInN1YnNjcmliZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yKikgeyB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOworICAgIFJldGFp
blB0cjxpZD4gc3Vic2NyaXB0aW9uID0gbWVzc2FnZTsKKyAgICBBU1NFUlRfRkFMU0UoW3N1YnNj
cmlwdGlvbiBpc0VxdWFsOltOU051bGwgbnVsbF1dKTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2Ny
aXB0aW9uIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dICYmIFtzdWJzY3JpcHRp
b24gb2JqZWN0Rm9yS2V5OkAiZW5kcG9pbnQiXSk7CisKKyAgICBtZXNzYWdlID0gbmlsOworICAg
IGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
ImdldFN1YnNjcmlwdGlvbigpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yKikgeyB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOworICAgIEFTU0VS
VF9UUlVFKFttZXNzYWdlIGlzRXF1YWw6c3Vic2NyaXB0aW9uLmdldCgpXSk7CisKKyAgICAvLyBJ
ZiB0aGUgcHVibGljIHRva2VuIGNoYW5nZXMsIGFsbCBzdWJzY3JpcHRpb25zIHNob3VsZCBiZSBp
bnZhbGlkYXRlZC4KKyAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRlQW5kQ29uZmln
dXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2
aWNlIik7CisgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1dGlsaXR5Q29u
bmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZywgZW5j
b2RlU3RyaW5nKCJmb29iYXIiX3MpKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7CisgICAgZ290TWVz
c2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U3Vi
c2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7IH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUo
W21lc3NhZ2UgaXNFcXVhbDpbTlNOdWxsIG51bGxdXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457210</attachid>
            <date>2022-04-10 13:09:48 -0700</date>
            <delta_ts>2022-04-13 10:04:15 -0700</delta_ts>
            <desc>Patch feedback</desc>
            <filename>bug-239042-20220410130947.patch</filename>
            <type>text/plain</type>
            <size>43381</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjg3N2M1NWVhYmY0MTQ0NGRjZDk0ZTcyY2U0
YTIyZGI4Y2E1MDEyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTMzLDEyICszMywxNSBAQAogI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKICNkZWZpbmUg
UFVTSERCX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhQdXNoLCAiJXAgLSBQdXNo
RGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBQVVNIREJfUkVM
RUFTRV9MT0dfRVJST1IoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICIlcCAtIFB1
c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCkBAIC00OCwxMSArNTEsMTMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3RleHByIGludCBjdXJyZW50
UHVzaERhdGFiYXNlVmVyc2lvbiA9IDI7Ci0jZGVmaW5lIGtDdXJyZW50UHVzaERhdGFiYXNlVmVy
c2lvblN0cmluZyAiMiIKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHB1YmxpY1Rva2Vu
S2V5ID0gInB1YmxpY1Rva2VuIl9zOwogCiBzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hE
YXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50c1tdID0gewogICAgICJQUkFHTUEgYXV0b192YWN1dW09
SU5DUkVNRU5UQUwiX3MsCit9OworCitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRh
YmFzZVNjaGVtYVYyU3RhdGVtZW50c1tdID0gewogICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0
aW9uU2V0cygiCiAgICAgIiAgcm93SUQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5U
LCIKICAgICAiICBjcmVhdGlvblRpbWUgSU5UIE5PVCBOVUxMLCIKQEAgLTc0LDkgKzc5LDI2IEBA
IHN0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRz
W10gPSB7CiAgICAgIiAgZXhwaXJhdGlvblRpbWUgSU5ULCIKICAgICAiICBVTklRVUUoc2NvcGUs
IHN1YnNjcmlwdGlvblNldElEKSkiX3MsCiAgICAgIkNSRUFURSBJTkRFWCBTdWJzY3JpcHRpb25z
X1N1YnNjcmlwdGlvblNldElEX0luZGV4IE9OIFN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9uU2V0
SUQpIl9zLAotICAgICJQUkFHTUEgdXNlcl92ZXJzaW9uID0gIiBrQ3VycmVudFB1c2hEYXRhYmFz
ZVZlcnNpb25TdHJpbmcgIiJfcwogfTsKIAorc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNo
RGF0YWJhc2VTY2hlbWFWM1N0YXRlbWVudHNbXSA9IHsKKyAgICAiQ1JFQVRFIFRBQkxFIE1ldGFk
YXRhKGtleSBURVhULCB2YWx1ZSwgVU5JUVVFKGtleSkpIl9zLAorfTsKKworc3RhdGljIGNvbnN0
IEFTQ0lJTGl0ZXJhbCogcHVzaERhdGFiYXNlU2NoZW1hU3RhdGVtZW50c1tdID0geworICAgIHB1
c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50cywKKyAgICBwdXNoRGF0YWJhc2VTY2hlbWFWMlN0
YXRlbWVudHMsCisgICAgcHVzaERhdGFiYXNlU2NoZW1hVjNTdGF0ZW1lbnRzLAorfTsKKworc3Rh
dGljIGNvbnN0IHNpemVfdCBwdXNoRGF0YWJhc2VTY2hlbWFTdGF0ZW1lbnRDb3VudHNbXSA9IHsK
KyAgICBzdGQ6OnNpemUocHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSwKKyAgICBzdGQ6
OnNpemUocHVzaERhdGFiYXNlU2NoZW1hVjJTdGF0ZW1lbnRzKSwKKyAgICBzdGQ6OnNpemUocHVz
aERhdGFiYXNlU2NoZW1hVjNTdGF0ZW1lbnRzKSwKK307CisKK3N0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uID0gc3RkOjpzaXplKHB1c2hEYXRhYmFzZVNj
aGVtYVN0YXRlbWVudHMpOworCiBQdXNoUmVjb3JkIFB1c2hSZWNvcmQ6Omlzb2xhdGVkQ29weSgp
IGNvbnN0ICYKIHsKICAgICByZXR1cm4gewpAQCAtMTQwLDMzICsxNjIsNDEgQEAgc3RhdGljIEV4
cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVEYXRhYmFzZT4sIFNob3VsZERlbGV0ZUFuZFJldHJ5PiBv
cGVuQW5kTWlncmF0ZUQKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNob3VsZERlbGV0
ZUFuZFJldHJ5OjpZZXMpOwogICAgIH0KIAotICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICBzaXpl
X3QgdmVyc2lvbiA9IDA7CiAgICAgewogICAgICAgICBhdXRvIHNxbCA9IGRiLT5wcmVwYXJlU3Rh
dGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKICAgICAgICAgaWYgKCFzcWwgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
UHVzaCwgIkNvdWxkbid0IGdldCBQdXNoRGF0YWJhc2UgdmVyc2lvbiBhdCBwYXRoICVzIiwgcGF0
aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91
bGREZWxldGVBbmRSZXRyeTo6WWVzKTsKICAgICAgICAgfQotICAgICAgICB2ZXJzaW9uID0gc3Fs
LT5jb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gdXNlclZlcnNpb24gPSBzcWwtPmNvbHVtbklu
dCgwKTsKKyAgICAgICAgdmVyc2lvbiA9IHVzZXJWZXJzaW9uID49IDAgPyB1c2VyVmVyc2lvbiA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAgICAgfQogCi0gICAgaWYgKHZl
cnNpb24gJiYgdmVyc2lvbiAhPSBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgewotICAgICAg
ICAvLyBGSVhNRTogYWRkIG1pZ3JhdGlvbiB3aGVuIHdlIG5lZWQgaXQuCi0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFB1c2gsICJGb3VuZCB1bmV4cGVjdGVkIFB1c2hEYXRhYmFzZSB2ZXJzaW9u
OiAlZCAoZXhwZWN0ZWQ6ICVkKSBhdCBwYXRoOiAlcyIsIHZlcnNpb24sIGN1cnJlbnRQdXNoRGF0
YWJhc2VWZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICh2ZXJzaW9uID4gY3Vy
cmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVz
aCwgIkZvdW5kIHVuZXhwZWN0ZWQgUHVzaERhdGFiYXNlIHZlcnNpb246ICV6dSAoZXhwZWN0ZWQ6
ICV6dSkgYXQgcGF0aDogJXMiLCB2ZXJzaW9uLCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiwg
cGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNob3Vs
ZERlbGV0ZUFuZFJldHJ5OjpZZXMpOwogICAgIH0KIAotICAgIGlmICghdmVyc2lvbikgeworICAg
IGlmICh2ZXJzaW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKICAgICAgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGIpOwogICAgICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOwogCi0gICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogcHVzaERhdGFiYXNlU2NoZW1h
VjFTdGF0ZW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWRiLT5leGVjdXRlQ29tbWFuZChzdGF0
ZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkVycm9y
IGV4ZWN1dGluZyBQdXNoRGF0YWJhc2UgRERMIHN0YXRlbWVudCAlcyBhdCBwYXRoICVzIiwgc3Rh
dGVtZW50LmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSB2ZXJzaW9uOyBpIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNp
b247IGkrKykgeworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnRzID0gcHVzaERhdGFiYXNlU2No
ZW1hU3RhdGVtZW50c1tpXTsKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBwdXNoRGF0YWJhc2VT
Y2hlbWFTdGF0ZW1lbnRDb3VudHNbaV07CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAgIGlmICghZGItPmV4ZWN1dGVDb21t
YW5kKHN0YXRlbWVudHNbal0pKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJFcnJvciBleGVjdXRpbmcgUHVzaERhdGFiYXNlIERETCBzdGF0ZW1lbnQgJXMg
YXQgcGF0aCAlczogJWQiLCBzdGF0ZW1lbnRzW2pdLmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCku
ZGF0YSgpLCBkYi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCFkYi0+ZXhlY3V0ZUNv
bW1hbmRTbG93KG1ha2VTdHJpbmcoIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAiLCBjdXJyZW50UHVz
aERhdGFiYXNlVmVyc2lvbikpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwg
IkVycm9yIHNldHRpbmcgdXNlciB2ZXJzaW9uIGZvciBQdXNoRGF0YWJhc2UgYXQgcGF0aCAlczog
JWQiLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRiLT5sYXN0RXJyb3IoKSk7CisKICAgICAgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CiAgICAgfQogCkBAIC0yODAsMTEgKzMxMCwxMDUgQEAgdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFU+CiBzdGF0aWMgdm9pZCBjb21wbGV0ZU9uTWFpblF1ZXVlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIFUmJiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgV29ya1F1ZXVlOjptYWlu
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdCA9IGNyb3NzVGhyZWFkQ29weShXVEZNb3ZlKHJlc3VsdCkpXSgpIG11dGFibGUg
eworICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQgPSBjcm9zc1RocmVhZENvcHkoc3RkOjpm
b3J3YXJkPFU+KHJlc3VsdCkpXSgpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0pOwogfQogCit2b2lkIFB1c2hEYXRhYmFzZTo6dXBk
YXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90PiBwdWJsaWNUb2tlbiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIG5ld1B1YmxpY1Rva2VuID0gVmVjdG9y
PHVpbnQ4X3Q+IHsgcHVibGljVG9rZW4gfSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vOworICAgICAgICBWZWN0b3I8
dWludDhfdD4gY3VycmVudFB1YmxpY1Rva2VuOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZhbHVlIEZST00gTWV0YWRh
dGEgV0hFUkUga2V5ID0gPyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRU
ZXh0KDEsIHB1YmxpY1Rva2VuS2V5KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQ
VVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRl
T25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3FsLT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICBjdXJyZW50UHVibGljVG9rZW4g
PSBzcWwtPmNvbHVtbkJsb2IoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudFB1
YmxpY1Rva2VuID09IG5ld1B1YmxpY1Rva2VuKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFp
blF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJSRVBMQUNFIElOVE8gTWV0YWRhdGEoa2V5LCB2YWx1ZSkg
VkFMVUVTKD8sID8pIl9zKTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICAgICAg
fHwgc3FsLT5iaW5kVGV4dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigyLCBuZXdQdWJsaWNUb2tlbikgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkZhaWxlZCB0byBzYXZlIG5ldyBwdWJsaWMg
dG9rZW46ICVkIiwgbV9kYi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIGNvbXBsZXRl
T25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
SWYgd2UgYXJlIHVwZGF0aW5nIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3aGVyZSBj
dXJyZW50UHVibGljVG9rZW4gZG9lc24ndCBleGlzdCwganVzdAorICAgICAgICAvLyBzYXZlIHRo
ZSBpbml0aWFsIHB1YmxpY1Rva2VuIHdpdGhvdXQgZGVsZXRpbmcgYWxsIHN1YnNjcmlwdGlvbnMg
YW5kIG5vdGlmeWluZyB0aGUgY2FsbGVyIHRoYXQKKyAgICAgICAgLy8gdGhlIHRva2VuIGNoYW5n
ZWQuCisgICAgICAgIGlmICghY3VycmVudFB1YmxpY1Rva2VuLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgYXV0byBkZWxldGVTdWJzY3JpcHRpb25TZXRzID0gY2FjaGVkU3RhdGVtZW50T25RdWV1
ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyJfcyk7CisgICAgICAgICAgICBhdXRvIGRl
bGV0ZVN1YnNjcmlwdGlvbnMgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBT
dWJzY3JpcHRpb25zIl9zKTsKKworICAgICAgICAgICAgaWYgKCFkZWxldGVTdWJzY3JpcHRpb25T
ZXRzIHx8ICFkZWxldGVTdWJzY3JpcHRpb25zKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JF
TEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRlbGV0ZVN1YnNjcmlw
dGlvblNldHMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSB8fCBkZWxldGVTdWJzY3JpcHRpb25zLT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihQdXNoLCAiRmFpbGVkIHRvIGRlbGV0ZSBzdWJzY3JpcHRpb25zOiAlZCIsIG1fZGItPmxhc3RF
cnJvcigpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpZZXM7
CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOwor
ICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UHVibGljVG9rZW4oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgZGlzcGF0Y2hPbldvcmtRdWV1ZShbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
KyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1QgdmFsdWUg
RlJPTSBNZXRhZGF0YSBXSEVSRSBrZXkgPSA/Il9zKTsKKyAgICAgICAgaWYgKCFzcWwgfHwgc3Fs
LT5iaW5kVGV4dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAg
ICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgVmVjdG9yPHVpbnQ4X3Q+IHsg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0OworICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHNxbC0+Y29sdW1uQmxvYigwKTsKKworICAgICAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCiB2b2lkIFB1
c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIHJlY29yZCA9IGNy
b3NzVGhyZWFkQ29weShyZWNvcmQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmgKaW5kZXggMzNlNDNiZThhZWYwZWZkZWEyYzg3N2IwYTU4NzA2
NDc3YjkyYjc4ZC4uODM3Mzg5M2UwMTZkY2UwNDNhMjkxMjQ4NTA3YWQ3NmJjZDUxNTE3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NwYW4u
aD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTc2LDYgKzc3LDEwIEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBD
cmVhdGlvbkhhbmRsZXImJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflB1c2hEYXRhYmFzZSgpOwog
CisgICAgZW51bSBjbGFzcyBQdWJsaWNUb2tlbkNoYW5nZWQgOiBib29sIHsgTm8sIFllcyB9Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50
OF90PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQpPiYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFB1YmxpY1Rva2VuKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5z
ZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlUmVjb3JkQnlJZGVudGlmaWVyKFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJl
Y29yZEJ5VG9waWMoY29uc3QgU3RyaW5nJiB0b3BpYywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRleCBlOTBlZWVkMDE0MDc4NjU3YTExOGVhNmEz
ZjRjMjkwMjdmNmQ0YmRlLi5hODViNjlkMjk4NmE5Mzg5MmFkNGMwN2U0NTIzMDYyMmU0NTBhZmQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCkBA
IC01NSw2ICs1NSw3IEBAIGVudW0gY2xhc3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAgICBJ
bmNyZW1lbnRTaWxlbnRQdXNoQ291bnQsCiAgICAgUmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMs
CiAgICAgUmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4sCisgICAgU2V0UHVibGljVG9r
ZW5Gb3JUZXN0aW5nLAogfTsKIAogaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1l
c3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQpAQCAtNzQsNiArNzUsNyBAQCBpbmxpbmUgYm9vbCBtZXNz
YWdlVHlwZVNlbmRzUmVwbHkoTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUpCiAgICAgY2FzZSBNZXNz
YWdlVHlwZTo6SW5jcmVtZW50U2lsZW50UHVzaENvdW50OgogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlJlbW92ZUFsbFB1c2hTdWJzY3JpcHRpb25zOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlbW92
ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldFB1
YmxpY1Rva2VuRm9yVGVzdGluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBNZXNz
YWdlVHlwZTo6U2V0RGVidWdNb2RlSXNFbmFibGVkOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVw
ZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KaW5kZXggZWZmN2VhZTVjZmZhODc3
NzhiNjY2MmFiNmIxNTRlMGQ0YTRmMDdkOC4uNDY2NGY1MDg0ZjBhYzFmZjZhNzIyZjlkMDYxNGRj
NTdmMzdjYzJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBsZVB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC00OCwxMyArNDgsMTUgQEAgLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29ubmVjdGlvbjooV2ViUHVzaEQ6OkFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9u
ICopY29ubmUKIC0gKHZvaWQpY29ubmVjdGlvbjooQVBTQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuOihOU0RhdGEgKilwdWJsaWNUb2tlbgogewogICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0ocHVibGljVG9rZW4pOworICAg
IEFTU0VSVChpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKF9jb25uZWN0aW9uICYmIHB1Ymxp
Y1Rva2VuLmxlbmd0aCkKKyAgICAgICAgX2Nvbm5lY3Rpb24tPmRpZFJlY2VpdmVQdWJsaWNUb2tl
bihWZWN0b3I8dWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocHVibGljVG9r
ZW4uYnl0ZXMpLCBwdWJsaWNUb2tlbi5sZW5ndGggfSk7CiB9CiAKIC0gKHZvaWQpY29ubmVjdGlv
bjooQVBTQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZUluY29taW5nTWVzc2FnZToo
QVBTSW5jb21pbmdNZXNzYWdlICopbWVzc2FnZQogewogICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKLQogICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkpOwogCiAgICAgaWYgKF9jb25uZWN0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5l
Y3Rpb24uaAppbmRleCBiOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyLi4x
ZjhlNmVmOWUyZTNkMDg0ODRjMTEwMWZiNTgyNjIwMWNiZmZjYzNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtNTAsNiAr
NTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb25XYWtpbmdUb3BpY3MoVmVjdG9yPFN0cmlu
Zz4mJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFRvcGljTGlzdHMoVG9waWNMaXN0cyYmKSBv
dmVycmlkZTsKKworICAgIHZvaWQgc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50
OF90PiYmKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYlB1c2hECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KaW5k
ZXggYzRjZjJlNjc5YjkyYmY5MjM1NjFjMTU4YzIzZDM2ODAxZDg3ODM2NC4uNzk2ZDVjZDExNjdi
ZjFlMDY0ZGJlMWQ2N2I0YmNhNzVkYjYwZDNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMzQsNiArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uKCkKIHsKKyAgICBkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9y
PHVpbnQ4X3Q+IHsgJ2EnLCAnYicsICdjJyB9KTsKIH0KIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CkBAIC0xMDQsNCAr
MTA1LDkgQEAgdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzZXRUb3BpY0xpc3RzKFRv
cGljTGlzdHMmJiB0b3BpY0xpc3RzKQogewogfQogCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5l
Y3Rpb246OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJiB0b2tlbikK
K3sKKyAgICBkaWRSZWNlaXZlUHVibGljVG9rZW4oV1RGTW92ZSh0b2tlbikpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJQdXNoRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCmluZGV4
IGU0NDUwMTllYzllMmM3Y2IxZGVmNjJkNDFjMGExYjExOTdiYTU0OWIuLjUxODIwZjIxMWU5NmNm
MjQwNzcxMmY4MmIyODlkMjljNzg2NThiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2
aWNlLmgKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29tcGxldGVTdWJz
Y3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmKTsKICAgICB2b2lkIGRpZENvbXBsZXRlVW5z
dWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYpOwogCisgICAgdm9pZCBzZXRQdWJs
aWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHZvaWQgZGlkUmVjZWl2
ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90PiYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVQdXNo
TWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9QdXNoU2VydmljZS5tbQppbmRleCBlMjY4NDRkM2I2ODY4OTlmZTczMTdkOWRhNWE0N2U3
Mzc4MmYwMzNmLi5kYjFhODNkNGVkNjJhODViYzhmNzA3YWE0M2VkN2VlNDczYzY3MjRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0KQEAgLTExNiw2ICsxMTYsMTAgQEAgUHVz
aFNlcnZpY2U6OlB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rpb24+JiYg
cHVzaFNlcnZpY2VDb25uZWN0aW8KIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyKTsKIAorICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQ
dWJsaWNUb2tlbihbdGhpc10oYXV0byYmIHRva2VuKSB7CisgICAgICAgIGRpZFJlY2VpdmVQdWJs
aWNUb2tlbihXVEZNb3ZlKHRva2VuKSk7CisgICAgfSk7CisKICAgICBtX2Nvbm5lY3Rpb24tPnN0
YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKFt0aGlzXShOU1N0cmluZyAqdG9waWMsIE5TRGlj
dGlvbmFyeSAqdXNlckluZm8pIHsKICAgICAgICAgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKHRvcGlj
LCB1c2VySW5mbyk7CiAgICAgfSk7CkBAIC02MjEsNiArNjI1LDI0IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJhd1B1c2hNZXNzYWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGlj
LCBOU0RpY3RpCiAgICAgcmV0dXJuIG1lc3NhZ2U7CiB9CiAKK3ZvaWQgUHVzaFNlcnZpY2U6OnNl
dFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBt
X2Nvbm5lY3Rpb24tPnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhXVEZNb3ZlKHRva2VuKSk7Cit9
CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhf
dD4mJiB0b2tlbikKK3sKKyAgICBtX2RhdGFiYXNlLT51cGRhdGVQdWJsaWNUb2tlbih0b2tlbiwg
W3RoaXNdKGF1dG8gcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBQdXNo
RGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HKFB1c2gsICJSZWNlaXZlZCBleHBlY3RlZCBwdWJsaWMgdG9rZW4iKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJQ
dWJsaWMgdG9rZW4gY2hhbmdlZDsgaW52YWxpZGF0ZWQgYWxsIGV4aXN0aW5nIHB1c2ggc3Vic2Ny
aXB0aW9ucyIpOworICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRh
YmFzZSwgW10oKSB7IH0pOworICAgIH0pOworfQorCiB2b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNl
aXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcqIHRvcGljLCBOU0RpY3Rpb25hcnkqIHVzZXJJbmZvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBtZXNzYWdlUmVzdWx0ID0gbWFrZVJhd1B1c2hNZXNzYWdlKHRvcGljLCB1c2VySW5mbyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5o
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAppbmRleCAx
OTgxNDNmNTY5N2NkMjhjNjkyOGQ0NTY4YzIxYzMyNTQ5MjBkMjBmLi41NDNiZTA2MDUzOTljMDky
YTU0OGZiZmFhNDVhYWI3YWViZTk4MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
UHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYlB1
c2hEIHsKIGNsYXNzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxQdXNoU2VydmljZUNvbm5lY3Rpb24+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKKyAgICB1c2luZyBQdWJsaWNUb2tlbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKFZl
Y3Rvcjx1aW50OF90PiYmKT47CiAgICAgdXNpbmcgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIg
PSBGdW5jdGlvbjx2b2lkKE5TU3RyaW5nICosIE5TRGljdGlvbmFyeSAqKT47CiAKICAgICBQdXNo
U2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CkBAIC03NCwxMCArNzUsMTYgQEAgcHVibGlj
OgogICAgIH07CiAgICAgdmlydHVhbCB2b2lkIHNldFRvcGljTGlzdHMoVG9waWNMaXN0cyYmKSA9
IDA7CiAKKyAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nRm9yUHVibGljVG9rZW4oUHVibGljVG9rZW5I
YW5kbGVyJiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90
PiYmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1
aW50OF90PiYmKTsKKwogICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoSW5j
b21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUHVzaE1lc3Nh
Z2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKTsKIAogcHJpdmF0ZToK
KyAgICBQdWJsaWNUb2tlbkhhbmRsZXIgbV9wdWJsaWNUb2tlbkhhbmRsZXI7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fcGVuZGluZ1B1YmxpY1Rva2VuOwogICAgIEluY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXI7CiAgICAgRGVxdWU8c3RkOjpwYWly
PFJldGFpblB0cjxOU1N0cmluZz4sIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+Pj4gbV9wZW5kaW5n
UHVzaGVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5l
Y3Rpb24ubW0KaW5kZXggOTJmODE0Mjc3YTgzODE1MzE2ODhiMGU0ODUxODJkNDNkODVjYzg2OC4u
ODhmMjdlZWMzZjhkN2M1YjBjNDE4ODYwOTg2MDYxMDlkOTY0NjczYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTM3LDYgKzM3LDMw
IEBAIFB1c2hDcnlwdG86OkNsaWVudEtleXMgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0
ZUNsaWVudEtleXMoKQogICAgIHJldHVybiBQdXNoQ3J5cHRvOjpDbGllbnRLZXlzOjpnZW5lcmF0
ZSgpOwogfQogCit2b2lkIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQ
dWJsaWNUb2tlbihQdWJsaWNUb2tlbkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIG1fcHVibGlj
VG9rZW5IYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKKworICAgIGlmIChtX3BlbmRpbmdQdWJs
aWNUb2tlbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHVibGljVG9rZW5I
YW5kbGVyKHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nUHVibGljVG9rZW4sIHsgfSkpOworfQorCit2
b2lkIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1
aW50OF90PiYmIHRva2VuKQoreworICAgIGlmICghbV9wdWJsaWNUb2tlbkhhbmRsZXIpIHsKKyAg
ICAgICAgbV9wZW5kaW5nUHVibGljVG9rZW4gPSBXVEZNb3ZlKHRva2VuKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fcHVibGljVG9rZW5IYW5kbGVyKFdURk1vdmUodG9rZW4pKTsK
K30KKwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
ZyhWZWN0b3I8dWludDhfdD4mJikKK3sKK30KKwogdm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246
OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYgaGFuZGxlcikKIHsKICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92
ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5kZXggMDY2
MmYxM2U5ODM5NDkwMGM1NDFmYWJkZTk1NmU4NWM5NjYyZGIzMy4uZjQ5ZGUyZTdkMWYwNDM0YmE1
Y2JjODY3MmEzYjc3MjM0YjlmYWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLmgKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50U2lsZW50
UHVzaENvdW50KENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJik7CiAgICAgdm9pZCBy
ZW1vdmVBbGxQdXNoU3Vic2NyaXB0aW9ucyhDbGllbnRDb25uZWN0aW9uKiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlUHVzaFN1YnNjcmlwdGlv
bnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKKyAgICB2b2lk
IHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5n
JiBwdWJsaWNUb2tlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQg
YnJvYWRjYXN0RGVidWdNZXNzYWdlKFN0cmluZ1ZpZXcpOwogICAgIHZvaWQgYnJvYWRjYXN0QWxs
Q29ubmVjdGlvbklkZW50aXRpZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvV2ViUHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1v
bi5tbQppbmRleCA3ODUzMmQwNGFmNjE3MGMxODhmOGM5MTM2OWE4MjEwNzkyZDBiYmEwLi40Y2Vj
NjQxMTVkZmM1Yzk1ZWU4YmU1MmQ0YmVlZDJhMWNlOTk1YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uLm1tCkBAIC0xMzQsMTEgKzEzNCwyMSBAQCBBUkdVTUVOVFMoV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhKQogUkVQTFkodW5zaWduZWQpCiBFTkQKIAorRlVOQ1RJ
T04oc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKQorQVJHVU1FTlRTKFN0cmluZykKK1JFUExZKCkK
K0VORAorCisKICN1bmRlZiBGVU5DVElPTgogI3VuZGVmIEFSR1VNRU5UUwogI3VuZGVmIFJFUExZ
CiAjdW5kZWYgRU5ECiAKKyNkZWZpbmUgRU1QVFlfUkVQTFkobWYpIFdlYlB1c2hEOjpFbmNvZGVk
TWVzc2FnZSBtZjo6ZW5jb2RlUmVwbHkoKSB7IHJldHVybiB7IH07IH0KK0VNUFRZX1JFUExZKHNl
dFB1YmxpY1Rva2VuRm9yVGVzdGluZyk7CisjdW5kZWYgRU1QVFlfUkVQTFkKKwogV2ViUHVzaEQ6
OkVuY29kZWRNZXNzYWdlIGVjaG9Ud2ljZTo6ZW5jb2RlUmVwbHkoU3RyaW5nIHJlcGx5KQogewog
ICAgIFdlYktpdDo6RGFlbW9uOjpFbmNvZGVyIGVuY29kZXI7CkBAIC00NDUsNiArNDU1LDkgQEAg
dm9pZCBEYWVtb246OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UoeHBjX2Nvbm5lY3Rpb25fdCBjb25u
ZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXMKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpSZW1vdmVQdXNo
U3Vic2NyaXB0aW9uc0Zvck9yaWdpbjoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0
aFJlcGx5PE1lc3NhZ2VJbmZvOjpyZW1vdmVQdXNoU3Vic2NyaXB0aW9uc0Zvck9yaWdpbj4oY2xp
ZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNZXNzYWdlVHlwZTo6U2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nOgorICAgICAgICBoYW5kbGVXZWJQdXNoRE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86
OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3Nh
Z2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBA
IC03MjIsNiArNzM1LDE5IEBAIHZvaWQgRGFlbW9uOjpyZW1vdmVQdXNoU3Vic2NyaXB0aW9uc0Zv
ck9yaWdpbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zCiAgICAgfSk7CiB9CiAK
K3ZvaWQgRGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbios
IGNvbnN0IFN0cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBy
ZXBseVNlbmRlcikKK3sKKyAgICBydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIHB1
YmxpY1Rva2VuLCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVy
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2
aWNlLT5zZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+IHsgcHVibGljVG9r
ZW4udXRmOCgpLmJ5dGVzKCkgfSk7CisgICAgICAgIHJlcGx5U2VuZGVyKCk7CisgICAgfSk7Cit9
CisKIENsaWVudENvbm5lY3Rpb24qIERhZW1vbjo6dG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25u
ZWN0aW9uX3QgY29ubmVjdGlvbikKIHsKICAgICBhdXRvIGNsaWVudENvbm5lY3Rpb24gPSBtX2Nv
bm5lY3Rpb25NYXAuZ2V0KGNvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI5MWZlNGNhYzNhYTkyNWU2NzRhNDU1OTJiNDg3YTcy
OTJkOGZmNTIuLjJlZjUwOWJiMWMyZjk2NzNmMTRlZDhiOWUwMTkxNDgzOTdiOTBhNTkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OCBAQAorMjAyMi0wNC0wOSAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBI
YW5kbGUgcHVibGljIHRva2VuIHVwZGF0ZXMgaW4gd2VicHVzaGQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTA0MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICAtIFRlc3QgdGhhdCBwdWJsaWMgdG9rZW4g
dXBkYXRlcyBhcmUgaGFuZGxlZCBwcm9wZXJseSBhdCB0aGUgUHVzaERhdGFiYXNlIGFuZCBXZWJQ
dXNoRGFlbW9uIGxldmVscworICAgICAgICAgLSBUZXN0IHNjaGVtYSBtaWdyYXRpb24gaW4gUHVz
aERhdGFiYXNlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZURhdGFiYXNlU3luYyk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRQdWJsaWNUb2tlblN5bmMpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6dXBkYXRlUHVibGljVG9rZW5TeW5jKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpnZXRSb3dJZGVudGlmaWVyc1N5bmMpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UHVibGljVG9rZW4pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6dXBkYXRlUHVibGljVG9rZW4pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVjb3JkQnlCdW5kbGVJZGVu
dGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVz
dDo6Z2V0Um93SWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Y3JlYXRlRGF0YWJhc2VGcm9tU3RhdGVtZW50cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tOgorCiAyMDIyLTA0LTA3ICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWVyZ2UtUXVldWVdIFVw
ZGF0ZSBoZWFkIGFuZCBiYXNlIHJlZmVyZW5jZXMgaW4gUFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAKaW5kZXggNzFlZmVhY2NmYjg3
Y2RmYTlhMzY4ZjhiODM4NzNiNGU1YTNhYmZkMy4uOTExMGNkMGUzOGYzMjk2MDUzNmUxZmMxYzEx
MTBjOTI3MTAxY2IyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1B1c2hEYXRhYmFzZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1B1c2hEYXRhYmFzZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDx3dGYv
RmlsZVN5c3RlbS5oPgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDMsNiArNDQs
NzcgQEAgc3RhdGljIFN0cmluZyBtYWtlVGVtcG9yYXJ5RGF0YWJhc2VQYXRoKCkKICAgICByZXR1
cm4gcGF0aDsKIH0KIAorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0
ZURhdGFiYXNlU3luYyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFB1c2hEYXRhYmFzZT4gcmVzdWx0OworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworCisgICAgUHVz
aERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZkb25lLCAmcmVzdWx0XShzdGQ6OnVuaXF1ZV9wdHI8
UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZGF0
YWJhc2UpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRv
bmUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZlY3Rvcjx1aW50OF90PiBn
ZXRQdWJsaWNUb2tlblN5bmMoUHVzaERhdGFiYXNlJiBkYXRhYmFzZSkKK3sKKyAgICBib29sIGRv
bmUgPSBmYWxzZTsKKyAgICBWZWN0b3I8dWludDhfdD4gZ2V0UmVzdWx0OworCisgICAgZGF0YWJh
c2UuZ2V0UHVibGljVG9rZW4oWyZkb25lLCAmZ2V0UmVzdWx0XShhdXRvJiYgcmVzdWx0KSB7Cisg
ICAgICAgIGdldFJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJldHVybiBnZXRSZXN1bHQ7
Cit9CisKK3N0YXRpYyBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZCB1cGRhdGVQdWJs
aWNUb2tlblN5bmMoUHVzaERhdGFiYXNlJiBkYXRhYmFzZSwgU3Bhbjxjb25zdCB1aW50OF90PiB0
b2tlbikKK3sKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBhdXRvIHVwZGF0ZVJlc3VsdCA9
IFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2VkOjpObzsKKworICAgIGRhdGFiYXNlLnVw
ZGF0ZVB1YmxpY1Rva2VuKHRva2VuLCBbJmRvbmUsICZ1cGRhdGVSZXN1bHRdKGF1dG8mJiByZXN1
bHQpIHsKKyAgICAgICAgdXBkYXRlUmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJu
IHVwZGF0ZVJlc3VsdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0
UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGVTeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUpCit7CisgICAg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZXN1
bHQ7CisKKyAgICBkYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShi
dW5kbGVJRCwgc2NvcGUsIFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVj
b3JkPiYmIHJlc3VsdCkgeworICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7Cisg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICByZXR1cm4gZ2V0UmVzdWx0OworfQorCitzdGF0aWMgSGFzaFNldDx1aW50NjRfdD4gZ2V0Um93
SWRlbnRpZmllcnNTeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgYm9vbCBkb25l
ID0gZmFsc2U7CisgICAgSGFzaFNldDx1aW50NjRfdD4gcm93SWRlbnRpZmllcnM7CisKKyAgICBk
YXRhYmFzZS5nZXRJZGVudGlmaWVycyhbJmRvbmUsICZyb3dJZGVudGlmaWVyc10oSGFzaFNldDxQ
dXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJiBpZGVudGlmaWVycykgeworICAgICAgICBmb3Ig
KGF1dG8gaWRlbnRpZmllciA6IGlkZW50aWZpZXJzKQorICAgICAgICAgICAgcm93SWRlbnRpZmll
cnMuYWRkKGlkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAg
IH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gcm93SWRlbnRpZmllcnM7
Cit9CisKIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBnZXRUb3BpY3NTeW5jKFB1c2hEYXRhYmFzZSYg
ZGF0YWJhc2UpCiB7CiAgICAgYm9vbCBkb25lID0gZmFsc2U7CkBAIC02Niw3ICsxMzgsNyBAQCBw
dWJsaWM6CiAgICAgICAgICJjb20uYXBwbGUud2ViYXBwIl9zLAogICAgICAgICAiaHR0cHM6Ly93
d3cuYXBwbGUuY29tIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJf
cywKLSAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MiJfcywKKyAgICAgICAgImh0dHBzOi8v
cHVzaEVuZHBvaW50MSJfcywKICAgICAgICAgInRvcGljMSJfcywKICAgICAgICAgeyA1LCA2IH0s
CiAgICAgICAgIHsgNiwgNyB9LApAQCAtNzgsOCArMTUwLDggQEAgcHVibGljOgogICAgICAgICAi
Y29tLmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LndlYmtpdC5vcmciX3Ms
CiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3JnL2Jsb2ciX3MsCi0gICAgICAgICJodHRw
czovL3B1c2hFbmRwb2ludDQiX3MsCi0gICAgICAgICJ0b3BpYzQiX3MsCisgICAgICAgICJodHRw
czovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJ0b3BpYzIiX3MsCiAgICAgICAgIHsgMTQs
IDE1IH0sCiAgICAgICAgIHsgMTYsIDE3IH0sCiAgICAgICAgIHsgMTgsIDE5IH0sCkBAIC05MCw4
ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICJjb20uYXBwbGUuU2FmYXJpIl9zLAogICAgICAg
ICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUu
Y29tL21hYyJfcywKLSAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MSJfcywKLSAgICAgICAg
InRvcGljMiJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MyJfcywKKyAgICAgICAg
InRvcGljMyJfcywKICAgICAgICAgeyAwLCAxIH0sCiAgICAgICAgIHsgMSwgMiB9LAogICAgICAg
ICB7IDIsIDMgfSwKQEAgLTEwMyw4ICsxNzUsOCBAQCBwdWJsaWM6CiAgICAgICAgICJjb20uYXBw
bGUuU2FmYXJpIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAogICAgICAg
ICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJfcywKLSAgICAgICAgImh0dHBzOi8vcHVz
aEVuZHBvaW50MyJfcywKLSAgICAgICAgInRvcGljMyJfcywKKyAgICAgICAgImh0dHBzOi8vcHVz
aEVuZHBvaW50NCJfcywKKyAgICAgICAgInRvcGljNCJfcywKICAgICAgICAgeyA5LCAxMCB9LAog
ICAgICAgICB7IDEwLCAxMSB9LAogICAgICAgICB7IDExLCAxMiB9LApAQCAtMTE2LDYgKzE4OCwx
NiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQz
OwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0NDsKIAorICAgIFZl
Y3Rvcjx1aW50OF90PiBnZXRQdWJsaWNUb2tlbigpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0
UHVibGljVG9rZW5TeW5jKCpkYik7CisgICAgfQorCisgICAgUHVzaERhdGFiYXNlOjpQdWJsaWNU
b2tlbkNoYW5nZWQgdXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25zdCB1aW50OF90PiB0b2tlbikK
KyAgICB7CisgICAgICAgIHJldHVybiB1cGRhdGVQdWJsaWNUb2tlblN5bmMoKmRiLCB0b2tlbik7
CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZWNvcmQoY29u
c3QgUHVzaFJlY29yZCYgcmVjb3JkKQogICAgIHsKICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
CkBAIC0xNjAsMzEgKzI0MiwxMiBAQCBwdWJsaWM6CiAKICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hS
ZWNvcmQ+IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGNvbnN0IFN0cmluZyYg
YnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUpCiAgICAgewotICAgICAgICBib29sIGRvbmUg
PSBmYWxzZTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZXN1bHQ7Ci0K
LSAgICAgICAgZGItPmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGJ1bmRsZUlE
LCBzY29wZSwgWyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYg
cmVzdWx0KSB7Ci0gICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9u
ZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGdldFJlY29y
ZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYygqZGIsIGJ1bmRsZUlELCBzY29wZSk7CiAg
ICAgfQogCiAgICAgSGFzaFNldDx1aW50NjRfdD4gZ2V0Um93SWRlbnRpZmllcnMoKQogICAgIHsK
LSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJv
d0lkZW50aWZpZXJzOwotCi0gICAgICAgIGRiLT5nZXRJZGVudGlmaWVycyhbJmRvbmUsICZyb3dJ
ZGVudGlmaWVyc10oSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJiBpZGVudGlm
aWVycykgewotICAgICAgICAgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykK
LSAgICAgICAgICAgICAgICByb3dJZGVudGlmaWVycy5hZGQoaWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6
cnVuKCZkb25lKTsKLQotICAgICAgICByZXR1cm4gcm93SWRlbnRpZmllcnM7CisgICAgICAgIHJl
dHVybiBnZXRSb3dJZGVudGlmaWVyc1N5bmMoKmRiKTsKICAgICB9CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiBnZXRUb3BpY3MoKQpAQCAtMjM2LDEzICsyOTksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IFNldFVwKCkgZmluYWwKICAgICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAg
ICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShtYWtlVGVtcG9yYXJ5RGF0YWJhc2VQYXRoKCksIFt0aGlz
LCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewotICAg
ICAgICAgICAgZGIgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVl
OwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKLQorICAgICAgICBkYiA9
IGNyZWF0ZURhdGFiYXNlU3luYyhTUUxpdGVEYXRhYmFzZTo6aW5NZW1vcnlQYXRoKCkpOwogICAg
ICAgICBBU1NFUlRfVFJVRShkYik7CiAgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDEg
PSBpbnNlcnRSZWNvcmQocmVjb3JkMSkpOwogICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1
bHQyID0gaW5zZXJ0UmVjb3JkKHJlY29yZDIpKTsKQEAgLTI2Niw2ICszMjMsMzYgQEAgc3RhdGlj
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXNoUmVjb3JkJiBhLCBjb25zdCBQdXNoUmVjb3JkJiBi
KQogICAgICAgICAmJiBhLmV4cGlyYXRpb25UaW1lID09IGIuZXhwaXJhdGlvblRpbWU7CiB9CiAK
K1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBVcGRhdGVQdWJsaWNUb2tlbikKK3sKKyAgICBWZWN0
b3I8dWludDhfdD4gaW5pdGlhbFRva2VuID0geyAnYScsICdiJywgJ2MnIH07CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1vZGlmaWVkVG9rZW4gPSB7ICdkJywgJ2UnLCAnZicgfTsKKworICAgIC8vIFNl
dHRpbmcgdGhlIGluaXRpYWwgcHVibGljIHRva2VuIHNob3VsZG4ndCBkZWxldGUgYW55dGhpbmcu
CisgICAgYXV0byB1cGRhdGVSZXN1bHQxID0gdXBkYXRlUHVibGljVG9rZW4oaW5pdGlhbFRva2Vu
KTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MSwgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tl
bkNoYW5nZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwgKEhhc2hT
ZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisKKyAgICBhdXRvIGdldFJlc3VsdDEgPSBn
ZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQxLCBpbml0aWFsVG9rZW4p
OworCisgICAgLy8gU2V0dGluZyB0aGUgc2FtZSB0b2tlbiBhZ2FpbiBzaG91bGQgZG8gbm90aGlu
Zy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDIgPSB1cGRhdGVQdWJsaWNUb2tlbihpbml0aWFsVG9r
ZW4pOworICAgIEVYUEVDVF9FUSh1cGRhdGVSZXN1bHQyLCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rv
a2VuQ2hhbmdlZDo6Tm8pOworICAgIEVYUEVDVF9FUShnZXRSb3dJZGVudGlmaWVycygpLCAoSGFz
aFNldDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgIGF1dG8gZ2V0UmVzdWx0MiA9
IGdldFB1YmxpY1Rva2VuKCk7CisgICAgRVhQRUNUX0VRKGdldFJlc3VsdDIsIGluaXRpYWxUb2tl
bik7CisKKyAgICAvLyBDaGFuZ2luZyB0aGUgcHVibGljIHRva2VuIGFmdGVyd2FyZHMgc2hvdWxk
IGRlbGV0ZSBldmVyeXRoaW5nLgorICAgIGF1dG8gdXBkYXRlUmVzdWx0MyA9IHVwZGF0ZVB1Ymxp
Y1Rva2VuKG1vZGlmaWVkVG9rZW4pOworICAgIEVYUEVDVF9FUSh1cGRhdGVSZXN1bHQzLCBQdXNo
RGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6WWVzKTsKKyAgICBFWFBFQ1RfVFJVRShnZXRS
b3dJZGVudGlmaWVycygpLmlzRW1wdHkoKSk7CisKKyAgICBhdXRvIGdldFJlc3VsdDMgPSBnZXRQ
dWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQzLCBtb2RpZmllZFRva2VuKTsK
K30KKwogVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEluc2VydFJlY29yZCkKIHsKICAgICBhdXRv
IGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CkBAIC00MDMsMTMgKzQ5MCw3IEBAIFRFU1QoUHVz
aERhdGFiYXNlLCBNYW55SW5GbGlnaHRPcHMpCiAgICAgY29uc3RleHByIHVuc2lnbmVkIHJlY29y
ZENvdW50ID0gMjU2OwogCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFi
YXNlPiBjcmVhdGVSZXN1bHQ7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBQ
dXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoLCBbJmNyZWF0ZVJlc3VsdCwgJmRvbmVdKHN0ZDo6dW5p
cXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAgIGNyZWF0ZVJl
c3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOwotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAg
ICAgIH0pOwotICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworICAgICAgICBhdXRvIGNyZWF0ZVJl
c3VsdCA9IGNyZWF0ZURhdGFiYXNlU3luYyhwYXRoKTsKICAgICAgICAgQVNTRVJUX1RSVUUoY3Jl
YXRlUmVzdWx0KTsKIAogICAgICAgICBhdXRvJiBkYXRhYmFzZSA9ICpjcmVhdGVSZXN1bHQ7CkBA
IC00NDIsMTMgKzUyMyw3IEBAIFRFU1QoUHVzaERhdGFiYXNlLCBNYW55SW5GbGlnaHRPcHMpCiAg
ICAgfQogCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVh
dGVSZXN1bHQ7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBQdXNoRGF0YWJh
c2U6OmNyZWF0ZShwYXRoLCBbJmNyZWF0ZVJlc3VsdCwgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAgIGNyZWF0ZVJlc3VsdCA9IFdU
Rk1vdmUoZGF0YWJhc2UpOwotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwot
ICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworICAgICAgICBhdXRvIGNyZWF0ZVJlc3VsdCA9IGNy
ZWF0ZURhdGFiYXNlU3luYyhwYXRoKTsKICAgICAgICAgQVNTRVJUX1RSVUUoY3JlYXRlUmVzdWx0
KTsKIAogICAgICAgICBhdXRvIHRvcGljcyA9IGdldFRvcGljc1N5bmMoKmNyZWF0ZVJlc3VsdCk7
CkBAIC00NjcsMTMgKzU0Miw3IEBAIFRFU1QoUHVzaERhdGFiYXNlLCBTdGFydHNGcm9tU2NyYXRj
aE9uRG93bmdyYWRlKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1
c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAg
ICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShz
dGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBj
cmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVl
OwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBj
cmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9U
UlVFKGNyZWF0ZVJlc3VsdCk7CiAgICAgfQogCkBAIC00OTEsNiArNTYwLDc0IEBAIFRFU1QoUHVz
aERhdGFiYXNlLCBTdGFydHNGcm9tU2NyYXRjaE9uRG93bmdyYWRlKQogICAgIH0KIH0KIAorc3Rh
dGljIGJvb2wgY3JlYXRlRGF0YWJhc2VGcm9tU3RhdGVtZW50cyhTdHJpbmcgcGF0aCwgQVNDSUlM
aXRlcmFsKiBzdGF0ZW1lbnRzLCBzaXplX3QgY291bnQpCit7CisgICAgU1FMaXRlRGF0YWJhc2Ug
ZGI7CisgICAgZGIub3BlbihwYXRoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgeworICAgICAgICBpZiAoIWRiLmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudHNbaV0p
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBBY3F1aXJlZCBieSBydW5uaW5nIC5kdW1wIGZyb20gdGhlIHNxbGl0ZTMgc2hlbGwg
b24gYSBWMiBkYXRhYmFzZS4KK3N0YXRpYyBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlVjJTdGF0
ZW1lbnRzW10gPSB7CisgICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25TZXRzKCAgcm93SUQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCAgY3JlYXRpb25UaW1lIElOVCBOT1Qg
TlVMTCwgIGJ1bmRsZUlEIFRFWFQgTk9UIE5VTEwsICBzZWN1cml0eU9yaWdpbiBURVhUIE5PVCBO
VUxMLCAgc2lsZW50UHVzaENvdW50IElOVCBOT1QgTlVMTCwgIFVOSVFVRShidW5kbGVJRCwgc2Vj
dXJpdHlPcmlnaW4pKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9uU2V0cyBWQUxV
RVMoMSwxNjQ5NTQxMDAxLCdjb20uYXBwbGUud2ViYXBwJywnaHR0cHM6Ly93d3cuYXBwbGUuY29t
JywwKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9uU2V0cyBWQUxVRVMoMiwxNjQ5
NTQxMDAxLCdjb20uYXBwbGUuU2FmYXJpJywnaHR0cHM6Ly93d3cud2Via2l0Lm9yZycsMCkiX3Ms
CisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDMsMTY0OTU0MTAwMSwn
Y29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbScsMCkiX3MsCisgICAgIkNS
RUFURSBUQUJMRSBTdWJzY3JpcHRpb25zKCAgcm93SUQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRP
SU5DUkVNRU5ULCAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwgIHN1YnNjcmlwdGlvblNldElE
IElOVCBOT1QgTlVMTCwgIHNjb3BlIFRFWFQgTk9UIE5VTEwsICBlbmRwb2ludCBURVhUIE5PVCBO
VUxMLCAgdG9waWMgVEVYVCBOT1QgTlVMTCBVTklRVUUsICBzZXJ2ZXJWQVBJRFB1YmxpY0tleSBC
TE9CIE5PVCBOVUxMLCAgY2xpZW50UHVibGljS2V5IEJMT0IgTk9UIE5VTEwsICBjbGllbnRQcml2
YXRlS2V5IEJMT0IgTk9UIE5VTEwsICBzaGFyZWRBdXRoU2VjcmV0IEJMT0IgTk9UIE5VTEwsICBl
eHBpcmF0aW9uVGltZSBJTlQsICBVTklRVUUoc2NvcGUsIHN1YnNjcmlwdGlvblNldElEKSkiX3Ms
CisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKDEsMTY0OTU0MTAwMSwxLCdo
dHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lJywnaHR0cHM6Ly9wdXNoRW5kcG9pbnQxJywndG9w
aWMxJyxYJzA1MDYnLFgnMDYwNycsWCcwNzA4JyxYJzA4MDknLE5VTEwpIl9zLAorICAgICJJTlNF
UlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygyLDE2NDk1NDEwMDEsMiwnaHR0cHM6Ly93d3cu
d2Via2l0Lm9yZy9ibG9nJywnaHR0cHM6Ly9wdXNoRW5kcG9pbnQyJywndG9waWMyJyxYJzBlMGYn
LFgnMTAxMScsWCcxMjEzJyxYJzE0MTUnLE5VTEwpIl9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJz
Y3JpcHRpb25zIFZBTFVFUygzLDE2NDk1NDEwMDEsMywnaHR0cHM6Ly93d3cuYXBwbGUuY29tL21h
YycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MycsJ3RvcGljMycsWCcwMDAxJyxYJzAxMDInLFgnMDIw
MycsWCcwNDA1JywxNjQzMzUwMDAwKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9u
cyBWQUxVRVMoNCwxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUnLCdo
dHRwczovL3B1c2hFbmRwb2ludDQnLCd0b3BpYzQnLFgnMDkwYScsWCcwYTBiJyxYJzBiMGMnLFgn
MGMwZCcsTlVMTCkiX3MsCisgICAgIkRFTEVURSBGUk9NIHNxbGl0ZV9zZXF1ZW5jZSJfcywKKyAg
ICAiSU5TRVJUIElOVE8gc3FsaXRlX3NlcXVlbmNlIFZBTFVFUygnU3Vic2NyaXB0aW9uU2V0cycs
MykiX3MsCisgICAgIklOU0VSVCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlw
dGlvbnMnLDQpIl9zLAorICAgICJDUkVBVEUgSU5ERVggU3Vic2NyaXB0aW9uc19TdWJzY3JpcHRp
b25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlvblNldElEKSJfcywKKyAg
ICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9IDIiX3MsCit9OworCitURVNUKFB1c2hEYXRhYmFzZSwg
Q2FuTWlncmF0ZVYyRGF0YWJhc2VUb0N1cnJlbnRTY2hlbWEpCit7CisgICAgYXV0byBwYXRoID0g
bWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpOworICAgIEFTU0VSVF9UUlVFKGNyZWF0ZURhdGFi
YXNlRnJvbVN0YXRlbWVudHMocGF0aCwgcHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzLCBzdGQ6OnNp
emUocHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzKSkpOworCisgICAgLy8gTWFrZSBzdXJlIHJlY29y
ZHMgYXJlIHRoZXJlIGFmdGVyIG1pZ3JhdGluZy4KKyAgICB7CisgICAgICAgIGF1dG8gZGF0YWJh
c2VSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CisgICAgICAgIEFTU0VSVF9UUlVF
KGRhdGFiYXNlUmVzdWx0KTsKKyAgICAgICAgYXV0byYgZGF0YWJhc2UgPSAqZGF0YWJhc2VSZXN1
bHQ7CisKKyAgICAgICAgYXV0byByZWNvcmRSZXN1bHQgPSBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50
aWZpZXJBbmRTY29wZVN5bmMoZGF0YWJhc2UsICJjb20uYXBwbGUuU2FmYXJpIl9zLCAiaHR0cHM6
Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zKTsKKyAgICAgICAgQVNTRVJUX1RSVUUocmVjb3JkUmVz
dWx0KTsKKyAgICAgICAgQVNTRVJUX0VRKHJlY29yZFJlc3VsdC0+dG9waWMsICJ0b3BpYzIiX3Mp
OworCisgICAgICAgIGF1dG8gcm93SWRlbnRpZmllcnMgPSBnZXRSb3dJZGVudGlmaWVyc1N5bmMo
ZGF0YWJhc2UpOworICAgICAgICBBU1NFUlRfRVEocm93SWRlbnRpZmllcnMsIChIYXNoU2V0PHVp
bnQ2NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAgICAgIC8vIFNldHRpbmcgdGhlIGluaXRp
YWwgdG9rZW4gc2hvdWxkIHJldHVybiBQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vLgorICAgICAgICBh
dXRvIHVwZGF0ZVJlc3VsdCA9IHVwZGF0ZVB1YmxpY1Rva2VuU3luYyhkYXRhYmFzZSwgVmVjdG9y
PHVpbnQ4X3Q+IHsgJ2EnLCAnYicgfSk7CisgICAgICAgIEFTU0VSVF9FUSh1cGRhdGVSZXN1bHQs
IFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2VkOjpObyk7CisgICAgfQorCisgICAgLy8g
TWFrZSBzdXJlIHJlY29yZHMgYXJlIHRoZXJlIGFmdGVyIHJlLW9wZW5pbmcgd2l0aG91dCBtaWdy
YXRpb24uCisgICAgeworICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gY3JlYXRlRGF0YWJh
c2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRfVFJVRShkYXRhYmFzZVJlc3VsdCk7CisgICAg
ICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNlUmVzdWx0OworCisgICAgICAgIGF1dG8gZ2V0
UmVzdWx0ID0gZ2V0UHVibGljVG9rZW5TeW5jKGRhdGFiYXNlKTsKKyAgICAgICAgQVNTRVJUX0VR
KGdldFJlc3VsdCwgKFZlY3Rvcjx1aW50OF90PiB7ICdhJywgJ2InIH0pKTsKKworICAgICAgICBh
dXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRpZmllcnNTeW5jKGRhdGFiYXNlKTsKKyAg
ICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAoSGFzaFNldDx1aW50NjRfdD4geyAxLCAy
LCAzLCA0IH0pKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAog
I2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCBlZDgzMjgw
ZjEyZTNkMDkzYjY4MGZkYWI0ZWE2MWU4NjA3M2IwYTExLi4yNDk3YTQ4OGE4ZGQ4MjBjMjNiMmFk
ODUxMTI0MmMyZjE4MmMyOGE2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0xMDkwLDYgKzEwOTAsNzUgQEAg
VEVTVF9GKFdlYlB1c2hEVGVzdCwgVG9vTWFueVNpbGVudFB1c2hlc0NhdXNlc1Vuc3Vic2NyaWJl
KQogICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlVuc3Vic2NyaWJl
ZCJdKTsKIH0KIAorVEVTVF9GKFdlYlB1c2hEVGVzdCwgR2V0UHVzaFN1YnNjcmlwdGlvbldpdGhN
aXNtYXRjaGVkUHVibGljVG9rZW4pCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGh0bWxT
b3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQ+CisgICAgbGV0IHBvc3ROb3RlTWVzc2FnZSA9IHdpbmRvdy53ZWJraXQu
bWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UuYmluZCh3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy5ub3RlKTsKKyAgICBsZXQgZ2V0UHVzaE1hbmFnZXIgPQorICAgICAgICBuYXZp
Z2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykKKyAgICAgICAgICAgIC50aGVu
KCgpID0+IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5KQorICAgICAgICAgICAgLnRoZW4o
cmVnaXN0cmF0aW9uID0+IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlcik7CisKKyAgICBmdW5jdGlv
biBzdWJzY3JpYmUoKQorICAgIHsKKyAgICAgICAgZ2V0UHVzaE1hbmFnZXIKKyAgICAgICAgICAg
IC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7IHVzZXJWaXNpYmxl
T25seTogdHJ1ZSwgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkgfSkpCisg
ICAgICAgICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnRvSlNPTigpKQor
ICAgICAgICAgICAgLnRoZW4ocG9zdE5vdGVNZXNzYWdlKQorICAgICAgICAgICAgLmNhdGNoKGUg
PT4gcG9zdE5vdGVNZXNzYWdlKGUudG9TdHJpbmcoKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGdldFN1YnNjcmlwdGlvbigpCisgICAgeworICAgICAgICBnZXRQdXNoTWFuYWdlcgorICAgICAg
ICAgICAgLnRoZW4ocHVzaE1hbmFnZXIgPT4gcHVzaE1hbmFnZXIuZ2V0U3Vic2NyaXB0aW9uKCkp
CisgICAgICAgICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uID8gc3Vic2Ny
aXB0aW9uLnRvSlNPTigpIDogbnVsbCkKKyAgICAgICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2Fn
ZSkKKyAgICAgICAgICAgIC5jYXRjaChlID0+IHBvc3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkp
KTsKKyAgICB9CisKKyAgICBwb3N0Tm90ZU1lc3NhZ2UoJ1JlYWR5Jyk7CisgICAgPC9zY3JpcHQ+
CisgICAgKUhUTUwiX3M7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gbWVzc2FnZSA9IG5p
bDsKKyAgICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNh
dGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgcmVjZWl2ZWRNZXNzYWdl
KSB7CisgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2U7CisgICAgICAgIGdvdE1lc3Nh
Z2UgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3QoaHRtbFNvdXJjZSwgIiJfcyk7
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RNZXNzYWdlKTsKKyAgICBBU1NFUlRf
VFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJSZWFkeSJdKTsKKworICAgIG1lc3NhZ2Ug
PSBuaWw7CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAic3Vic2NyaWJlKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3Iq
KSB7IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAg
UmV0YWluUHRyPGlkPiBzdWJzY3JpcHRpb24gPSBtZXNzYWdlOworICAgIEFTU0VSVF9GQUxTRShb
c3Vic2NyaXB0aW9uIGlzRXF1YWw6W05TTnVsbCBudWxsXV0pOworICAgIEFTU0VSVF9UUlVFKFtz
dWJzY3JpcHRpb24gaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0gJiYgW3N1YnNj
cmlwdGlvbiBvYmplY3RGb3JLZXk6QCJlbmRwb2ludCJdKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7
CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OkAiZ2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3Iq
KSB7IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAg
QVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpzdWJzY3JpcHRpb24uZ2V0KCldKTsKKworICAg
IC8vIElmIHRoZSBwdWJsaWMgdG9rZW4gY2hhbmdlcywgYWxsIHN1YnNjcmlwdGlvbnMgc2hvdWxk
IGJlIGludmFsaWRhdGVkLgorICAgIGF1dG8gdXRpbGl0eUNvbm5lY3Rpb24gPSBjcmVhdGVBbmRD
b25maWd1cmVDb25uZWN0aW9uVG9TZXJ2aWNlKCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9u
LnNlcnZpY2UiKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHV0aWxp
dHlDb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6U2V0UHVibGljVG9rZW5Gb3JUZXN0aW5n
LCBlbmNvZGVTdHJpbmcoImZvb2JhciJfcykpOworCisgICAgbWVzc2FnZSA9IG5pbDsKKyAgICBn
b3RNZXNzYWdlID0gZmFsc2U7CisgICAgW21fd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJn
ZXRTdWJzY3JpcHRpb24oKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCwgTlNFcnJvciopIHsgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RNZXNzYWdlKTsKKyAgICBBU1NFUlRf
VFJVRShbbWVzc2FnZSBpc0VxdWFsOltOU051bGwgbnVsbF1dKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJ
T1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457540</attachid>
            <date>2022-04-13 10:04:17 -0700</date>
            <delta_ts>2022-04-13 10:39:44 -0700</delta_ts>
            <desc>Use span to get rid of count array</desc>
            <filename>bug-239042-20220413100416.patch</filename>
            <type>text/plain</type>
            <size>43157</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjI0Njc1ZGZhZjAxNjI3NjA1NWEwNTA1MWRi
MmIxZTg3ZDA5MWFiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTMzLDEyICszMywxNSBAQAogI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKICNkZWZpbmUg
UFVTSERCX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhQdXNoLCAiJXAgLSBQdXNo
RGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBQVVNIREJfUkVM
RUFTRV9MT0dfRVJST1IoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICIlcCAtIFB1
c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCkBAIC00OCwxMSArNTEsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3RleHByIGludCBjdXJyZW50
UHVzaERhdGFiYXNlVmVyc2lvbiA9IDI7Ci0jZGVmaW5lIGtDdXJyZW50UHVzaERhdGFiYXNlVmVy
c2lvblN0cmluZyAiMiIKLQotc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNoRGF0YWJhc2VT
Y2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHB1
c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50c1tdID0gewogICAgICJQUkFHTUEgYXV0b192YWN1
dW09SU5DUkVNRU5UQUwiX3MsCit9OworCitzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBw
dXNoRGF0YWJhc2VTY2hlbWFWMlN0YXRlbWVudHNbXSA9IHsKICAgICAiQ1JFQVRFIFRBQkxFIFN1
YnNjcmlwdGlvblNldHMoIgogICAgICIgIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lO
Q1JFTUVOVCwiCiAgICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCkBAIC03NCw5ICs3
NywyMiBAQCBzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYxU3Rh
dGVtZW50c1tdID0gewogICAgICIgIGV4cGlyYXRpb25UaW1lIElOVCwiCiAgICAgIiAgVU5JUVVF
KHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAogICAgICJDUkVBVEUgSU5ERVggU3Vic2Ny
aXB0aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlw
dGlvblNldElEKSJfcywKLSAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9ICIga0N1cnJlbnRQdXNo
RGF0YWJhc2VWZXJzaW9uU3RyaW5nICIiX3MKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlM
aXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYzU3RhdGVtZW50c1tdID0geworICAgICJDUkVBVEUg
VEFCTEUgTWV0YWRhdGEoa2V5IFRFWFQsIHZhbHVlLCBVTklRVUUoa2V5KSkiX3MsCit9OworCitz
dGF0aWMgY29uc3RleHByIFNwYW48Y29uc3QgQVNDSUlMaXRlcmFsPiBwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzW10gPSB7CisgICAgeyBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMg
fSwKKyAgICB7IHB1c2hEYXRhYmFzZVNjaGVtYVYyU3RhdGVtZW50cyB9LAorICAgIHsgcHVzaERh
dGFiYXNlU2NoZW1hVjNTdGF0ZW1lbnRzIH0sCit9OworCitzdGF0aWMgY29uc3RleHByIHNpemVf
dCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiA9IHN0ZDo6c2l6ZShwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzKTsKKworc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgcHVibGljVG9r
ZW5LZXkgPSAicHVibGljVG9rZW4iX3M7CisKIFB1c2hSZWNvcmQgUHVzaFJlY29yZDo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QgJgogewogICAgIHJldHVybiB7CkBAIC0xNDAsMzMgKzE1NiwzOCBAQCBz
dGF0aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPFNRTGl0ZURhdGFiYXNlPiwgU2hvdWxkRGVsZXRlQW5k
UmV0cnk+IG9wZW5BbmRNaWdyYXRlRAogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU2hv
dWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAgICAgfQogCi0gICAgaW50IHZlcnNpb24gPSAwOwor
ICAgIHNpemVfdCB2ZXJzaW9uID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gc3FsID0gZGItPnBy
ZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOwogICAgICAgICBpZiAoIXNx
bCB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihQdXNoLCAiQ291bGRuJ3QgZ2V0IFB1c2hEYXRhYmFzZSB2ZXJzaW9uIGF0IHBhdGgg
JXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMpOwogICAgICAgICB9Ci0gICAgICAgIHZlcnNp
b24gPSBzcWwtPmNvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byB1c2VyVmVyc2lvbiA9IHNxbC0+
Y29sdW1uSW50KDApOworICAgICAgICB2ZXJzaW9uID0gdXNlclZlcnNpb24gPj0gMCA/IHVzZXJW
ZXJzaW9uIDogc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKICAgICB9CiAKLSAg
ICBpZiAodmVyc2lvbiAmJiB2ZXJzaW9uICE9IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgbWlncmF0aW9uIHdoZW4gd2UgbmVlZCBpdC4KLSAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkZvdW5kIHVuZXhwZWN0ZWQgUHVzaERhdGFiYXNl
IHZlcnNpb246ICVkIChleHBlY3RlZDogJWQpIGF0IHBhdGg6ICVzIiwgdmVyc2lvbiwgY3VycmVu
dFB1c2hEYXRhYmFzZVZlcnNpb24sIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKHZlcnNp
b24gPiBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihQdXNoLCAiRm91bmQgdW5leHBlY3RlZCBQdXNoRGF0YWJhc2UgdmVyc2lvbjogJXp1IChl
eHBlY3RlZDogJXp1KSBhdCBwYXRoOiAlcyIsIHZlcnNpb24sIGN1cnJlbnRQdXNoRGF0YWJhc2VW
ZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAgICAgfQogCi0gICAgaWYgKCF2ZXJzaW9u
KSB7CisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgewogICAg
ICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYik7CiAgICAgICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBwdXNoRGF0YWJh
c2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKLSAgICAgICAgICAgIGlmICghZGItPmV4ZWN1dGVDb21t
YW5kKHN0YXRlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiRXJyb3IgZXhlY3V0aW5nIFB1c2hEYXRhYmFzZSBEREwgc3RhdGVtZW50ICVzIGF0IHBhdGgg
JXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRyeTo6WWVz
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHZlcnNpb247IGkgPCBjdXJyZW50UHVzaERhdGFi
YXNlVmVyc2lvbjsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3RhdGVtZW50IDogcHVz
aERhdGFiYXNlU2NoZW1hU3RhdGVtZW50c1tpXSkgeworICAgICAgICAgICAgICAgIGlmICghZGIt
PmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoUHVzaCwgIkVycm9yIGV4ZWN1dGluZyBQdXNoRGF0YWJhc2UgRERMIHN0YXRl
bWVudCAlcyBhdCBwYXRoICVzOiAlZCIsIHN0YXRlbWVudC5jaGFyYWN0ZXJzKCksIHBhdGgudXRm
OCgpLmRhdGEoKSwgZGItPmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmICghZGItPmV4ZWN1
dGVDb21tYW5kU2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdXNlcl92ZXJzaW9uID0gIiwgY3VycmVu
dFB1c2hEYXRhYmFzZVZlcnNpb24pKSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJFcnJvciBzZXR0aW5nIHVzZXIgdmVyc2lvbiBmb3IgUHVzaERhdGFiYXNlIGF0IHBhdGgg
JXM6ICVkIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkYi0+bGFzdEVycm9yKCkpOworCiAgICAgICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIH0KIApAQCAtMjgwLDExICszMDEsMTA1IEBAIHRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgogc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBVJiYgcmVz
dWx0KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFdvcmtRdWV1ZTo6
bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCByZXN1bHQgPSBjcm9zc1RocmVhZENvcHkoV1RGTW92ZShyZXN1bHQpKV0oKSBtdXRh
YmxlIHsKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KHN0
ZDo6Zm9yd2FyZDxVPihyZXN1bHQpKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKIH0KIAordm9pZCBQdXNoRGF0YWJhc2U6
OnVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gcHVibGljVG9rZW4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoUHVibGljVG9rZW5DaGFuZ2VkKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCBuZXdQdWJsaWNUb2tlbiA9IFZl
Y3Rvcjx1aW50OF90PiB7IHB1YmxpY1Rva2VuIH0sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpObzsKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGN1cnJlbnRQdWJsaWNUb2tlbjsKKworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlNFTEVDVCB2YWx1ZSBGUk9NIE1l
dGFkYXRhIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5i
aW5kVGV4dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAg
ICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNx
bC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgY3VycmVudFB1YmxpY1Rv
a2VuID0gc3FsLT5jb2x1bW5CbG9iKDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJl
bnRQdWJsaWNUb2tlbiA9PSBuZXdQdWJsaWNUb2tlbikgeworICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3Fs
ID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiUkVQTEFDRSBJTlRPIE1ldGFkYXRhKGtleSwgdmFs
dWUpIFZBTFVFUyg/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5LZXkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMiwgbmV3UHVibGljVG9rZW4pICE9IFNRTElU
RV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7
CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGYWlsZWQgdG8gc2F2ZSBuZXcgcHVi
bGljIHRva2VuOiAlZCIsIG1fZGItPmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIElmIHdlIGFyZSB1cGRhdGluZyBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2hl
cmUgY3VycmVudFB1YmxpY1Rva2VuIGRvZXNuJ3QgZXhpc3QsIGp1c3QKKyAgICAgICAgLy8gc2F2
ZSB0aGUgaW5pdGlhbCBwdWJsaWNUb2tlbiB3aXRob3V0IGRlbGV0aW5nIGFsbCBzdWJzY3JpcHRp
b25zIGFuZCBub3RpZnlpbmcgdGhlIGNhbGxlciB0aGF0CisgICAgICAgIC8vIHRoZSB0b2tlbiBj
aGFuZ2VkLgorICAgICAgICBpZiAoIWN1cnJlbnRQdWJsaWNUb2tlbi5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gZGVsZXRlU3Vic2NyaXB0aW9uU2V0cyA9IGNhY2hlZFN0YXRlbWVudE9u
UXVldWUoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlvblNldHMiX3MpOworICAgICAgICAgICAgYXV0
byBkZWxldGVTdWJzY3JpcHRpb25zID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZS
T00gU3Vic2NyaXB0aW9ucyJfcyk7CisKKyAgICAgICAgICAgIGlmICghZGVsZXRlU3Vic2NyaXB0
aW9uU2V0cyB8fCAhZGVsZXRlU3Vic2NyaXB0aW9ucykgeworICAgICAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZWxldGVTdWJz
Y3JpcHRpb25TZXRzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUgfHwgZGVsZXRlU3Vic2NyaXB0aW9u
cy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoUHVzaCwgIkZhaWxlZCB0byBkZWxldGUgc3Vic2NyaXB0aW9uczogJWQiLCBtX2RiLT5s
YXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdCA9IFB1YmxpY1Rva2VuQ2hhbmdlZDo6
WWVzOworICAgICAgICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAg
ICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0
KTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldFB1YmxpY1Rva2VuKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZh
bHVlIEZST00gTWV0YWRhdGEgV0hFUkUga2V5ID0gPyJfcyk7CisgICAgICAgIGlmICghc3FsIHx8
IHNxbC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5LZXkpICE9IFNRTElURV9PSykgeworICAgICAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgIGNvbXBs
ZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFZlY3Rvcjx1aW50OF90
PiB7IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPmNvbHVtbkJsb2IoMCk7CisKKyAgICAgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9KTsKK30KKwogdm9p
ZCBQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiByZWNvcmQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCByZWNvcmQg
PSBjcm9zc1RocmVhZENvcHkocmVjb3JkKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCmluZGV4IDMzZTQzYmU4YWVmMGVmZGVhMmM4NzdiMGE1
ODcwNjQ3N2I5MmI3OGQuLjgzNzM4OTNlMDE2ZGNlMDQzYTI5MTI0ODUwN2FkNzZiY2Q1MTUxNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9T
cGFuLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CkBAIC03Niw2ICs3NywxMCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0
aCwgQ3JlYXRpb25IYW5kbGVyJiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5QdXNoRGF0YWJhc2Uo
KTsKIAorICAgIGVudW0gY2xhc3MgUHVibGljVG9rZW5DaGFuZ2VkIDogYm9vbCB7IE5vLCBZZXMg
fTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3Qg
dWludDhfdD4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVibGljVG9rZW5DaGFuZ2VkKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQdWJsaWNUb2tlbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBn
ZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKaW5kZXggZTkwZWVlZDAxNDA3ODY1N2ExMThl
YTZhM2Y0YzI5MDI3ZjZkNGJkZS4uYTg1YjY5ZDI5ODZhOTM4OTJhZDRjMDdlNDUyMzA2MjJlNDUw
YWZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0
YW50cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMu
aApAQCAtNTUsNiArNTUsNyBAQCBlbnVtIGNsYXNzIE1lc3NhZ2VUeXBlIDogdWludDhfdCB7CiAg
ICAgSW5jcmVtZW50U2lsZW50UHVzaENvdW50LAogICAgIFJlbW92ZUFsbFB1c2hTdWJzY3JpcHRp
b25zLAogICAgIFJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luLAorICAgIFNldFB1Ymxp
Y1Rva2VuRm9yVGVzdGluZywKIH07CiAKIGlubGluZSBib29sIG1lc3NhZ2VUeXBlU2VuZHNSZXBs
eShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSkKQEAgLTc0LDYgKzc1LDcgQEAgaW5saW5lIGJvb2wg
bWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OkluY3JlbWVudFNpbGVudFB1c2hDb3VudDoKICAgICBjYXNlIE1lc3NhZ2VU
eXBlOjpSZW1vdmVBbGxQdXNoU3Vic2NyaXB0aW9uczoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpS
ZW1vdmVQdXNoU3Vic2NyaXB0aW9uc0Zvck9yaWdpbjoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpT
ZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5hYmxlZDoKICAgICBjYXNlIE1lc3NhZ2VUeXBl
OjpVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL0FwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGVmZjdlYWU1Y2Zm
YTg3Nzc4YjY2NjJhYjZiMTU0ZTBkNGE0ZjA3ZDguLjQ2NjRmNTA4NGYwYWMxZmY2YTcyMmY5ZDA2
MTRkYzU3ZjM3Y2MyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwbGVQ
dXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBs
ZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtNDgsMTMgKzQ4LDE1IEBAIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbm5lY3Rpb246KFdlYlB1c2hEOjpBcHBsZVB1c2hTZXJ2aWNlQ29ubmVj
dGlvbiAqKWNvbm5lCiAtICh2b2lkKWNvbm5lY3Rpb246KEFQU0Nvbm5lY3Rpb24gKiljb25uZWN0
aW9uIGRpZFJlY2VpdmVQdWJsaWNUb2tlbjooTlNEYXRhICopcHVibGljVG9rZW4KIHsKICAgICBV
TlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHB1YmxpY1Rva2VuKTsK
KyAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmIChfY29ubmVjdGlvbiAmJiBw
dWJsaWNUb2tlbi5sZW5ndGgpCisgICAgICAgIF9jb25uZWN0aW9uLT5kaWRSZWNlaXZlUHVibGlj
VG9rZW4oVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHB1Ymxp
Y1Rva2VuLmJ5dGVzKSwgcHVibGljVG9rZW4ubGVuZ3RoIH0pOwogfQogCiAtICh2b2lkKWNvbm5l
Y3Rpb246KEFQU0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVJbmNvbWluZ01lc3Nh
Z2U6KEFQU0luY29taW5nTWVzc2FnZSAqKW1lc3NhZ2UKIHsKICAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7Ci0KICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKIAogICAgIGlmIChfY29u
bmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKaW5kZXggYjk1M2JiOWMxMmRkN2UyMmJkNjkxMzA1NDQ4NzljN2RmNDZkOTRh
Mi4uMWY4ZTZlZjllMmUzZDA4NDg0YzExMDFmYjU4MjYyMDFjYmZmY2MzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9uV2FraW5nVG9waWNzKFZlY3RvcjxT
dHJpbmc+JiYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRUb3BpY0xpc3RzKFRvcGljTGlzdHMm
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8
dWludDhfdD4mJikgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1t
CmluZGV4IGM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQuLjc5NmQ1Y2Qx
MTY3YmYxZTA2NGRiZTFkNjdiNGJjYTc1ZGI2MGQzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTM0LDYgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6TW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCiB7CisgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZl
Y3Rvcjx1aW50OF90PiB7ICdhJywgJ2InLCAnYycgfSk7CiB9CiAKIE1vY2tQdXNoU2VydmljZUNv
bm5lY3Rpb246On5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwpAQCAtMTA0
LDQgKzEwNSw5IEBAIHZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0VG9waWNMaXN0
cyhUb3BpY0xpc3RzJiYgdG9waWNMaXN0cykKIHsKIH0KIAordm9pZCBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYgdG9r
ZW4pCit7CisgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFdURk1vdmUodG9rZW4pKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2UuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApp
bmRleCBlNDQ1MDE5ZWM5ZTJjN2NiMWRlZjYyZDQxYzBhMWIxMTk3YmE1NDliLi41MTgyMGYyMTFl
OTZjZjI0MDc3MTJmODJiMjg5ZDI5Yzc4NjU4YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
U2VydmljZS5oCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbXBsZXRl
U3Vic2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CiAgICAgdm9pZCBkaWRDb21wbGV0
ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsKIAorICAgIHZvaWQgc2V0
UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgdm9pZCBkaWRSZWNlaXZl
UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0pOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2UubW0KaW5kZXggZTI2ODQ0ZDNiNjg2ODk5ZmU3MzE3ZDlkYTVh
NDdlNzM3ODJmMDMzZi4uZGIxYTgzZDRlZDYyYTg1YmM4ZjcwN2FhNDNlZDdlZTQ3M2M2NzI0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCkBAIC0xMTYsNiArMTE2LDEwIEBA
IFB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9u
PiYmIHB1c2hTZXJ2aWNlQ29ubmVjdGlvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9pbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlcik7CiAKKyAgICBtX2Nvbm5lY3Rpb24tPnN0YXJ0TGlzdGVuaW5n
Rm9yUHVibGljVG9rZW4oW3RoaXNdKGF1dG8mJiB0b2tlbikgeworICAgICAgICBkaWRSZWNlaXZl
UHVibGljVG9rZW4oV1RGTW92ZSh0b2tlbikpOworICAgIH0pOworCiAgICAgbV9jb25uZWN0aW9u
LT5zdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhbdGhpc10oTlNTdHJpbmcgKnRvcGljLCBO
U0RpY3Rpb25hcnkgKnVzZXJJbmZvKSB7CiAgICAgICAgIGRpZFJlY2VpdmVQdXNoTWVzc2FnZSh0
b3BpYywgdXNlckluZm8pOwogICAgIH0pOwpAQCAtNjIxLDYgKzYyNSwyNCBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSYXdQdXNoTWVzc2FnZT4gbWFrZVJhd1B1c2hNZXNzYWdlKE5TU3RyaW5nICp0
b3BpYywgTlNEaWN0aQogICAgIHJldHVybiBtZXNzYWdlOwogfQogCit2b2lkIFB1c2hTZXJ2aWNl
OjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYgdG9rZW4pCit7Cisg
ICAgbV9jb25uZWN0aW9uLT5zZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoV1RGTW92ZSh0b2tlbikp
OworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9yPHVp
bnQ4X3Q+JiYgdG9rZW4pCit7CisgICAgbV9kYXRhYmFzZS0+dXBkYXRlUHVibGljVG9rZW4odG9r
ZW4sIFt0aGlzXShhdXRvIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0g
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhQdXNoLCAiUmVjZWl2ZWQgZXhwZWN0ZWQgcHVibGljIHRva2VuIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiUHVibGljIHRva2VuIGNoYW5nZWQ7IGludmFsaWRhdGVkIGFsbCBleGlzdGluZyBwdXNoIHN1
YnNjcmlwdGlvbnMiKTsKKyAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1f
ZGF0YWJhc2UsIFtdKCkgeyB9KTsKKyAgICB9KTsKK30KKwogdm9pZCBQdXNoU2VydmljZTo6ZGlk
UmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5m
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gbWVzc2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5k
ZXggMTk4MTQzZjU2OTdjZDI4YzY5MjhkNDU2OGMyMWMzMjU0OTIwZDIwZi4uNTQzYmUwNjA1Mzk5
YzA5MmE1NDhmYmZhYTQ1YWFiN2FlYmU5ODA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBX
ZWJQdXNoRCB7CiBjbGFzcyBQdXNoU2VydmljZUNvbm5lY3Rpb24gOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CisgICAgdXNpbmcgUHVibGljVG9rZW5IYW5kbGVyID0gRnVuY3Rpb248dm9p
ZChWZWN0b3I8dWludDhfdD4mJik+OwogICAgIHVzaW5nIEluY29taW5nUHVzaE1lc3NhZ2VIYW5k
bGVyID0gRnVuY3Rpb248dm9pZChOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkgKik+OwogCiAgICAg
UHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwpAQCAtNzQsMTAgKzc1LDE2IEBAIHB1
YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BpY0xpc3RzKFRvcGljTGlzdHMm
JikgPSAwOwogCisgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFB1YmxpY1Rv
a2VuSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWlu
dDhfdD4mJik7CisgICAgdmlydHVhbCB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0
b3I8dWludDhfdD4mJik7CisKICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2Vz
KEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hN
ZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyk7CiAKIHByaXZh
dGU6CisgICAgUHVibGljVG9rZW5IYW5kbGVyIG1fcHVibGljVG9rZW5IYW5kbGVyOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX3BlbmRpbmdQdWJsaWNUb2tlbjsKICAgICBJbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyOwogICAgIERlcXVlPHN0ZDo6
cGFpcjxSZXRhaW5QdHI8TlNTdHJpbmc+LCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5Pj4+IG1fcGVu
ZGluZ1B1c2hlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tCmluZGV4IDkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4
NjguLjg4ZjI3ZWVjM2Y4ZDdjNWIwYzQxODg2MDk4NjA2MTA5ZDk2NDY3M2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0zNyw2ICsz
NywzMCBAQCBQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2Vu
ZXJhdGVDbGllbnRLZXlzKCkKICAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2Vu
ZXJhdGUoKTsKIH0KIAordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5n
Rm9yUHVibGljVG9rZW4oUHVibGljVG9rZW5IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBtX3B1
YmxpY1Rva2VuSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CisKKyAgICBpZiAobV9wZW5kaW5n
UHVibGljVG9rZW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3B1YmxpY1Rv
a2VuSGFuZGxlcihzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1B1YmxpY1Rva2VuLCB7IH0pKTsKK30K
Kwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0
b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBpZiAoIW1fcHVibGljVG9rZW5IYW5kbGVyKSB7
CisgICAgICAgIG1fcGVuZGluZ1B1YmxpY1Rva2VuID0gV1RGTW92ZSh0b2tlbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3B1YmxpY1Rva2VuSGFuZGxlcihXVEZNb3ZlKHRva2Vu
KSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpCit7Cit9CisKIHZvaWQgUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciA9IFdU
Rk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1
c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCmluZGV4
IDA2NjJmMTNlOTgzOTQ5MDBjNTQxZmFiZGU5NTZlODVjOTY2MmRiMzMuLmY0OWRlMmU3ZDFmMDQz
NGJhNWNiYzg2NzJhM2I3NzIzNGI5ZmFlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluY3JlbWVudFNp
bGVudFB1c2hDb3VudChDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYpOwogICAgIHZv
aWQgcmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKICAgICB2b2lkIHJlbW92ZVB1c2hTdWJzY3Jp
cHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJik7CisgICAg
dm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0
cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2
b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShTdHJpbmdWaWV3KTsKICAgICB2b2lkIGJyb2FkY2Fz
dEFsbENvbm5lY3Rpb25JZGVudGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb24ubW0KaW5kZXggNzg1MzJkMDRhZjYxNzBjMTg4ZjhjOTEzNjlhODIxMDc5MmQwYmJhMC4u
NGNlYzY0MTE1ZGZjNWM5NWVlOGJlNTJkNGJlZWQyYTFjZTk5NWM0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTM0LDExICsxMzQsMjEgQEAgQVJHVU1FTlRT
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSkKIFJFUExZKHVuc2lnbmVkKQogRU5ECiAKK0ZV
TkNUSU9OKHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBM
WSgpCitFTkQKKworCiAjdW5kZWYgRlVOQ1RJT04KICN1bmRlZiBBUkdVTUVOVFMKICN1bmRlZiBS
RVBMWQogI3VuZGVmIEVORAogCisjZGVmaW5lIEVNUFRZX1JFUExZKG1mKSBXZWJQdXNoRDo6RW5j
b2RlZE1lc3NhZ2UgbWY6OmVuY29kZVJlcGx5KCkgeyByZXR1cm4geyB9OyB9CitFTVBUWV9SRVBM
WShzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOworI3VuZGVmIEVNUFRZX1JFUExZCisKIFdlYlB1
c2hEOjpFbmNvZGVkTWVzc2FnZSBlY2hvVHdpY2U6OmVuY29kZVJlcGx5KFN0cmluZyByZXBseSkK
IHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtNDQ1LDYgKzQ1NSw5
IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKHhwY19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6UmVtb3Zl
UHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW46CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2Fn
ZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6cmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4+
KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9y
VGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJ
bmZvOjpzZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRN
ZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtNzIyLDYgKzczNSwxOSBAQCB2b2lkIERhZW1vbjo6cmVtb3ZlUHVzaFN1YnNjcmlwdGlv
bnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29ucwogICAgIH0pOwog
fQogCit2b2lkIERhZW1vbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKENsaWVudENvbm5lY3Rp
b24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgcmVwbHlTZW5kZXIpCit7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlz
LCBwdWJsaWNUb2tlbiwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNl
bmRlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNo
U2VydmljZS0+c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiB7IHB1Ymxp
Y1Rva2VuLnV0ZjgoKS5ieXRlcygpIH0pOworICAgICAgICByZXBseVNlbmRlcigpOworICAgIH0p
OworfQorCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRvQ2xpZW50Q29ubmVjdGlvbih4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiB7CiAgICAgYXV0byBjbGllbnRDb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiOTFmZTRjYWMzYWE5MjVlNjc0YTQ1NTkyYjQ4
N2E3MjkyZDhmZjUyLi4yZWY1MDliYjFjMmY5NjczZjE0ZWQ4YjllMDE5MTQ4Mzk3YjkwYTU5IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjggQEAKKzIwMjItMDQtMDkgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBUZXN0IHRoYXQgcHVibGljIHRv
a2VuIHVwZGF0ZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkgYXQgdGhlIFB1c2hEYXRhYmFzZSBhbmQg
V2ViUHVzaERhZW1vbiBsZXZlbHMKKyAgICAgICAgIC0gVGVzdCBzY2hlbWEgbWlncmF0aW9uIGlu
IFB1c2hEYXRhYmFzZQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1
c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjcmVhdGVEYXRhYmFzZVN5
bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVibGljVG9rZW5TeW5jKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OnVwZGF0ZVB1YmxpY1Rva2VuU3luYyk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0Um93SWRlbnRpZmllcnNTeW5jKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFB1YmxpY1Rva2VuKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJlY29yZEJ5QnVuZGxl
SWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFz
ZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Rf
Rik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKwogMjAyMi0wNC0wNyAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW01lcmdlLVF1ZXVl
XSBVcGRhdGUgaGVhZCBhbmQgYmFzZSByZWZlcmVuY2VzIGluIFBSCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcxZWZlYWNj
ZmI4N2NkZmE5YTM2OGY4YjgzODczYjRlNWEzYWJmZDMuLjkxMTBjZDBlMzhmMzI5NjA1MzZlMWZj
MWMxMTEwYzkyNzEwMWNiMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTQzLDYg
KzQ0LDc3IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpCiAgICAg
cmV0dXJuIHBhdGg7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBj
cmVhdGVEYXRhYmFzZVN5bmMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoRGF0YWJhc2U+IHJlc3VsdDsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAg
IFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmZG9uZSwgJnJlc3VsdF0oc3RkOjp1bmlxdWVf
cHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAgICByZXN1bHQgPSBXVEZNb3Zl
KGRhdGFiYXNlKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVu
KCZkb25lKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhf
dD4gZ2V0UHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgYm9v
bCBkb25lID0gZmFsc2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldFJlc3VsdDsKKworICAgIGRh
dGFiYXNlLmdldFB1YmxpY1Rva2VuKFsmZG9uZSwgJmdldFJlc3VsdF0oYXV0byYmIHJlc3VsdCkg
eworICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVz
dWx0OworfQorCitzdGF0aWMgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQgdXBkYXRl
UHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIFNwYW48Y29uc3QgdWludDhf
dD4gdG9rZW4pCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgYXV0byB1cGRhdGVSZXN1
bHQgPSBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm87CisKKyAgICBkYXRhYmFz
ZS51cGRhdGVQdWJsaWNUb2tlbih0b2tlbiwgWyZkb25lLCAmdXBkYXRlUmVzdWx0XShhdXRvJiYg
cmVzdWx0KSB7CisgICAgICAgIHVwZGF0ZVJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJl
dHVybiB1cGRhdGVSZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYyhQdXNoRGF0YWJhc2UmIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQorewor
ICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0
UmVzdWx0OworCisgICAgZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2Nv
cGUoYnVuZGxlSUQsIHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRdKHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4mJiByZXN1bHQpIHsKKyAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQp
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgcmV0dXJuIGdldFJlc3VsdDsKK30KKworc3RhdGljIEhhc2hTZXQ8dWludDY0X3Q+IGdl
dFJvd0lkZW50aWZpZXJzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOworICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOworCisg
ICAgZGF0YWJhc2UuZ2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmllcnNdKEhhc2hT
ZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsKKyAgICAgICAg
Zm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAgICAgICAgICAgIHJvd0lkZW50
aWZpZXJzLmFkZChpZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIHJvd0lkZW50aWZp
ZXJzOworfQorCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0VG9waWNzU3luYyhQdXNoRGF0YWJh
c2UmIGRhdGFiYXNlKQogewogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtNjYsNyArMTM4LDcg
QEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhv
bmUiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJodHRw
czovL3B1c2hFbmRwb2ludDEiX3MsCiAgICAgICAgICJ0b3BpYzEiX3MsCiAgICAgICAgIHsgNSwg
NiB9LAogICAgICAgICB7IDYsIDcgfSwKQEAgLTc4LDggKzE1MCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3Jn
Il9zLAogICAgICAgICAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zLAotICAgICAgICAi
aHR0cHM6Ly9wdXNoRW5kcG9pbnQ0Il9zLAotICAgICAgICAidG9waWM0Il9zLAorICAgICAgICAi
aHR0cHM6Ly9wdXNoRW5kcG9pbnQyIl9zLAorICAgICAgICAidG9waWMyIl9zLAogICAgICAgICB7
IDE0LCAxNSB9LAogICAgICAgICB7IDE2LCAxNyB9LAogICAgICAgICB7IDE4LCAxOSB9LApAQCAt
OTAsOCArMTYyLDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAg
ICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFw
cGxlLmNvbS9tYWMiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCi0gICAg
ICAgICJ0b3BpYzIiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAg
ICAgICJ0b3BpYzMiX3MsCiAgICAgICAgIHsgMCwgMSB9LAogICAgICAgICB7IDEsIDIgfSwKICAg
ICAgICAgeyAyLCAzIH0sCkBAIC0xMDMsOCArMTc1LDggQEAgcHVibGljOgogICAgICAgICAiY29t
LmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAg
ICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAgICAgICJodHRwczov
L3B1c2hFbmRwb2ludDMiX3MsCi0gICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgICJodHRwczov
L3B1c2hFbmRwb2ludDQiX3MsCisgICAgICAgICJ0b3BpYzQiX3MsCiAgICAgICAgIHsgOSwgMTAg
fSwKICAgICAgICAgeyAxMCwgMTEgfSwKICAgICAgICAgeyAxMSwgMTIgfSwKQEAgLTExNiw2ICsx
ODgsMTYgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVz
dWx0MzsKICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDQ7CiAKKyAg
ICBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGljVG9rZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdldFB1YmxpY1Rva2VuU3luYygqZGIpOworICAgIH0KKworICAgIFB1c2hEYXRhYmFzZTo6UHVi
bGljVG9rZW5DaGFuZ2VkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gdG9r
ZW4pCisgICAgeworICAgICAgICByZXR1cm4gdXBkYXRlUHVibGljVG9rZW5TeW5jKCpkYiwgdG9r
ZW4pOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVjb3Jk
KGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCkKICAgICB7CiAgICAgICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwpAQCAtMTYwLDMxICsyNDIsMTIgQEAgcHVibGljOgogCiAgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25zdCBTdHJp
bmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQogICAgIHsKLSAgICAgICAgYm9vbCBk
b25lID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0
OwotCi0gICAgICAgIGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5k
bGVJRCwgc2NvcGUsIFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3Jk
PiYmIHJlc3VsdCkgewotICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOwot
ICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4o
JmRvbmUpOwotCi0gICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgICAgIHJldHVybiBnZXRS
ZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoKmRiLCBidW5kbGVJRCwgc2NvcGUp
OwogICAgIH0KIAogICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzKCkKICAg
ICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBIYXNoU2V0PHVpbnQ2NF90
PiByb3dJZGVudGlmaWVyczsKLQotICAgICAgICBkYi0+Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAm
cm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRl
bnRpZmllcnMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmll
cnMpCi0gICAgICAgICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9VSW50
NjQoKSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0
aWw6OnJ1bigmZG9uZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworICAgICAg
ICByZXR1cm4gZ2V0Um93SWRlbnRpZmllcnNTeW5jKCpkYik7CiAgICAgfQogCiAgICAgVmVjdG9y
PFN0cmluZz4gZ2V0VG9waWNzKCkKQEAgLTIzNiwxMyArMjk5LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBTZXRVcCgpIGZpbmFsCiAgICAgewotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAg
ICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUobWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpLCBb
dGhpcywgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsK
LSAgICAgICAgICAgIGRiID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KKyAgICAgICAg
ZGIgPSBjcmVhdGVEYXRhYmFzZVN5bmMoU1FMaXRlRGF0YWJhc2U6OmluTWVtb3J5UGF0aCgpKTsK
ICAgICAgICAgQVNTRVJUX1RSVUUoZGIpOwogICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1
bHQxID0gaW5zZXJ0UmVjb3JkKHJlY29yZDEpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0
UmVzdWx0MiA9IGluc2VydFJlY29yZChyZWNvcmQyKSk7CkBAIC0yNjYsNiArMzIzLDM2IEBAIHN0
YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwgY29uc3QgUHVzaFJlY29y
ZCYgYikKICAgICAgICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lOwog
fQogCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgVXBkYXRlUHVibGljVG9rZW4pCit7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGluaXRpYWxUb2tlbiA9IHsgJ2EnLCAnYicsICdjJyB9OworICAgIFZl
Y3Rvcjx1aW50OF90PiBtb2RpZmllZFRva2VuID0geyAnZCcsICdlJywgJ2YnIH07CisKKyAgICAv
LyBTZXR0aW5nIHRoZSBpbml0aWFsIHB1YmxpYyB0b2tlbiBzaG91bGRuJ3QgZGVsZXRlIGFueXRo
aW5nLgorICAgIGF1dG8gdXBkYXRlUmVzdWx0MSA9IHVwZGF0ZVB1YmxpY1Rva2VuKGluaXRpYWxU
b2tlbik7CisgICAgRVhQRUNUX0VRKHVwZGF0ZVJlc3VsdDEsIFB1c2hEYXRhYmFzZTo6UHVibGlj
VG9rZW5DaGFuZ2VkOjpObyk7CisgICAgRVhQRUNUX0VRKGdldFJvd0lkZW50aWZpZXJzKCksIChI
YXNoU2V0PHVpbnQ2NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAgYXV0byBnZXRSZXN1bHQx
ID0gZ2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MSwgaW5pdGlhbFRv
a2VuKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHNhbWUgdG9rZW4gYWdhaW4gc2hvdWxkIGRvIG5v
dGhpbmcuCisgICAgYXV0byB1cGRhdGVSZXN1bHQyID0gdXBkYXRlUHVibGljVG9rZW4oaW5pdGlh
bFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MiwgUHVzaERhdGFiYXNlOjpQdWJs
aWNUb2tlbkNoYW5nZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwg
KEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisKKyAgICBhdXRvIGdldFJlc3Vs
dDIgPSBnZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQyLCBpbml0aWFs
VG9rZW4pOworCisgICAgLy8gQ2hhbmdpbmcgdGhlIHB1YmxpYyB0b2tlbiBhZnRlcndhcmRzIHNo
b3VsZCBkZWxldGUgZXZlcnl0aGluZy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDMgPSB1cGRhdGVQ
dWJsaWNUb2tlbihtb2RpZmllZFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0Mywg
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUo
Z2V0Um93SWRlbnRpZmllcnMoKS5pc0VtcHR5KCkpOworCisgICAgYXV0byBnZXRSZXN1bHQzID0g
Z2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MywgbW9kaWZpZWRUb2tl
bik7Cit9CisKIFRFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBJbnNlcnRSZWNvcmQpCiB7CiAgICAg
YXV0byBleHBlY3RlZFJlY29yZDEgPSByZWNvcmQxOwpAQCAtNDAzLDEzICs0OTAsNyBAQCBURVNU
KFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBy
ZWNvcmRDb3VudCA9IDI1NjsKIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hE
YXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAg
ICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6
OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVh
dGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwot
ICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVh
dGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVF
KGNyZWF0ZVJlc3VsdCk7CiAKICAgICAgICAgYXV0byYgZGF0YWJhc2UgPSAqY3JlYXRlUmVzdWx0
OwpAQCAtNDQyLDEzICs1MjMsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3Bz
KQogICAgIH0KIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4g
Y3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERh
dGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9w
dHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQg
PSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9
KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQg
PSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJl
c3VsdCk7CiAKICAgICAgICAgYXV0byB0b3BpY3MgPSBnZXRUb3BpY3NTeW5jKCpjcmVhdGVSZXN1
bHQpOwpAQCAtNDY3LDEzICs1NDIsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNj
cmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
Ci0gICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRlUmVzdWx0LCAmZG9u
ZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewotICAgICAgICAg
ICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisgICAgICAgIGF1
dG8gY3JlYXRlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOwogICAgICAgICBBU1NF
UlRfVFJVRShjcmVhdGVSZXN1bHQpOwogICAgIH0KIApAQCAtNDkxLDYgKzU2MCw3NCBAQCBURVNU
KFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiB9CiAK
K3N0YXRpYyBib29sIGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMoU3RyaW5nIHBhdGgsIEFT
Q0lJTGl0ZXJhbCogc3RhdGVtZW50cywgc2l6ZV90IGNvdW50KQoreworICAgIFNRTGl0ZURhdGFi
YXNlIGRiOworICAgIGRiLm9wZW4ocGF0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZChzdGF0ZW1lbnRz
W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gQWNxdWlyZWQgYnkgcnVubmluZyAuZHVtcCBmcm9tIHRoZSBzcWxpdGUzIHNo
ZWxsIG9uIGEgVjIgZGF0YWJhc2UuCitzdGF0aWMgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVYy
U3RhdGVtZW50c1tdID0geworICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cyggIHJv
d0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQg
Tk9UIE5VTEwsICBidW5kbGVJRCBURVhUIE5PVCBOVUxMLCAgc2VjdXJpdHlPcmlnaW4gVEVYVCBO
T1QgTlVMTCwgIHNpbGVudFB1c2hDb3VudCBJTlQgTk9UIE5VTEwsICBVTklRVUUoYnVuZGxlSUQs
IHNlY3VyaXR5T3JpZ2luKSkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMg
VkFMVUVTKDEsMTY0OTU0MTAwMSwnY29tLmFwcGxlLndlYmFwcCcsJ2h0dHBzOi8vd3d3LmFwcGxl
LmNvbScsMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDIs
MTY0OTU0MTAwMSwnY29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LndlYmtpdC5vcmcnLDAp
Il9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUygzLDE2NDk1NDEw
MDEsJ2NvbS5hcHBsZS5TYWZhcmknLCdodHRwczovL3d3dy5hcHBsZS5jb20nLDApIl9zLAorICAg
ICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucyggIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkg
QVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBzdWJzY3JpcHRpb25T
ZXRJRCBJTlQgTk9UIE5VTEwsICBzY29wZSBURVhUIE5PVCBOVUxMLCAgZW5kcG9pbnQgVEVYVCBO
T1QgTlVMTCwgIHRvcGljIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCAgc2VydmVyVkFQSURQdWJsaWNL
ZXkgQkxPQiBOT1QgTlVMTCwgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCAgY2xpZW50
UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxM
LCAgZXhwaXJhdGlvblRpbWUgSU5ULCAgVU5JUVVFKHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkp
Il9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygxLDE2NDk1NDEwMDEs
MSwnaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZScsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MScs
J3RvcGljMScsWCcwNTA2JyxYJzA2MDcnLFgnMDcwOCcsWCcwODA5JyxOVUxMKSJfcywKKyAgICAi
SU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoMiwxNjQ5NTQxMDAxLDIsJ2h0dHBzOi8v
d3d3LndlYmtpdC5vcmcvYmxvZycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MicsJ3RvcGljMicsWCcw
ZTBmJyxYJzEwMTEnLFgnMTIxMycsWCcxNDE1JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8g
U3Vic2NyaXB0aW9ucyBWQUxVRVMoMywxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8vd3d3LmFwcGxlLmNv
bS9tYWMnLCdodHRwczovL3B1c2hFbmRwb2ludDMnLCd0b3BpYzMnLFgnMDAwMScsWCcwMTAyJyxY
JzAyMDMnLFgnMDQwNScsMTY0MzM1MDAwMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlw
dGlvbnMgVkFMVUVTKDQsMTY0OTU0MTAwMSwzLCdodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25l
JywnaHR0cHM6Ly9wdXNoRW5kcG9pbnQ0JywndG9waWM0JyxYJzA5MGEnLFgnMGEwYicsWCcwYjBj
JyxYJzBjMGQnLE5VTEwpIl9zLAorICAgICJERUxFVEUgRlJPTSBzcWxpdGVfc2VxdWVuY2UiX3Ms
CisgICAgIklOU0VSVCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlwdGlvblNl
dHMnLDMpIl9zLAorICAgICJJTlNFUlQgSU5UTyBzcWxpdGVfc2VxdWVuY2UgVkFMVUVTKCdTdWJz
Y3JpcHRpb25zJyw0KSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2Ny
aXB0aW9uU2V0SURfSW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3Ms
CisgICAgIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAyIl9zLAorfTsKKworVEVTVChQdXNoRGF0YWJh
c2UsIENhbk1pZ3JhdGVWMkRhdGFiYXNlVG9DdXJyZW50U2NoZW1hKQoreworICAgIGF1dG8gcGF0
aCA9IG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgoKTsKKyAgICBBU1NFUlRfVFJVRShjcmVhdGVE
YXRhYmFzZUZyb21TdGF0ZW1lbnRzKHBhdGgsIHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50cywgc3Rk
OjpzaXplKHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50cykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBy
ZWNvcmRzIGFyZSB0aGVyZSBhZnRlciBtaWdyYXRpbmcuCisgICAgeworICAgICAgICBhdXRvIGRh
dGFiYXNlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRf
VFJVRShkYXRhYmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNl
UmVzdWx0OworCisgICAgICAgIGF1dG8gcmVjb3JkUmVzdWx0ID0gZ2V0UmVjb3JkQnlCdW5kbGVJ
ZGVudGlmaWVyQW5kU2NvcGVTeW5jKGRhdGFiYXNlLCAiY29tLmFwcGxlLlNhZmFyaSJfcywgImh0
dHBzOi8vd3d3LndlYmtpdC5vcmcvYmxvZyJfcyk7CisgICAgICAgIEFTU0VSVF9UUlVFKHJlY29y
ZFJlc3VsdCk7CisgICAgICAgIEFTU0VSVF9FUShyZWNvcmRSZXN1bHQtPnRvcGljLCAidG9waWMy
Il9zKTsKKworICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRpZmllcnNT
eW5jKGRhdGFiYXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAoSGFzaFNl
dDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRoZSBp
bml0aWFsIHRva2VuIHNob3VsZCByZXR1cm4gUHVibGljVG9rZW5DaGFuZ2VkOjpOby4KKyAgICAg
ICAgYXV0byB1cGRhdGVSZXN1bHQgPSB1cGRhdGVQdWJsaWNUb2tlblN5bmMoZGF0YWJhc2UsIFZl
Y3Rvcjx1aW50OF90PiB7ICdhJywgJ2InIH0pOworICAgICAgICBBU1NFUlRfRVEodXBkYXRlUmVz
dWx0LCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pOworICAgIH0KKworICAg
IC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciByZS1vcGVuaW5nIHdpdGhvdXQg
bWlncmF0aW9uLgorICAgIHsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IGNyZWF0ZURh
dGFiYXNlU3luYyhwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGF0YWJhc2VSZXN1bHQpOwor
ICAgICAgICBhdXRvJiBkYXRhYmFzZSA9ICpkYXRhYmFzZVJlc3VsdDsKKworICAgICAgICBhdXRv
IGdldFJlc3VsdCA9IGdldFB1YmxpY1Rva2VuU3luYyhkYXRhYmFzZSk7CisgICAgICAgIEFTU0VS
VF9FUShnZXRSZXN1bHQsIChWZWN0b3I8dWludDhfdD4geyAnYScsICdiJyB9KSk7CisKKyAgICAg
ICAgYXV0byByb3dJZGVudGlmaWVycyA9IGdldFJvd0lkZW50aWZpZXJzU3luYyhkYXRhYmFzZSk7
CisgICAgICAgIEFTU0VSVF9FUShyb3dJZGVudGlmaWVycywgKEhhc2hTZXQ8dWludDY0X3Q+IHsg
MSwgMiwgMywgNCB9KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CiAKICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggZWQ4
MzI4MGYxMmUzZDA5M2I2ODBmZGFiNGVhNjFlODYwNzNiMGExMS4uMjQ5N2E0ODhhOGRkODIwYzIz
YjJhZDg1MTEyNDJjMmYxODJjMjhhNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTA5MCw2ICsxMDkwLDc1
IEBAIFRFU1RfRihXZWJQdXNoRFRlc3QsIFRvb01hbnlTaWxlbnRQdXNoZXNDYXVzZXNVbnN1YnNj
cmliZSkKICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJVbnN1YnNj
cmliZWQiXSk7CiB9CiAKK1RFU1RfRihXZWJQdXNoRFRlc3QsIEdldFB1c2hTdWJzY3JpcHRpb25X
aXRoTWlzbWF0Y2hlZFB1YmxpY1Rva2VuKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBo
dG1sU291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGxldCBwb3N0Tm90ZU1lc3NhZ2UgPSB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlLmJpbmQod2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMubm90ZSk7CisgICAgbGV0IGdldFB1c2hNYW5hZ2VyID0KKyAgICAgICAg
bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpCisgICAgICAgICAgICAu
dGhlbigoKSA9PiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSkKKyAgICAgICAgICAgIC50
aGVuKHJlZ2lzdHJhdGlvbiA9PiByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIpOworCisgICAgZnVu
Y3Rpb24gc3Vic2NyaWJlKCkKKyAgICB7CisgICAgICAgIGdldFB1c2hNYW5hZ2VyCisgICAgICAg
ICAgICAudGhlbihwdXNoTWFuYWdlciA9PiBwdXNoTWFuYWdlci5zdWJzY3JpYmUoeyB1c2VyVmlz
aWJsZU9ubHk6IHRydWUsIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZIH0p
KQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi50b0pTT04o
KSkKKyAgICAgICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkKKyAgICAgICAgICAgIC5jYXRj
aChlID0+IHBvc3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBnZXRTdWJzY3JpcHRpb24oKQorICAgIHsKKyAgICAgICAgZ2V0UHVzaE1hbmFnZXIKKyAg
ICAgICAgICAgIC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlv
bigpKQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbiA/IHN1
YnNjcmlwdGlvbi50b0pTT04oKSA6IG51bGwpCisgICAgICAgICAgICAudGhlbihwb3N0Tm90ZU1l
c3NhZ2UpCisgICAgICAgICAgICAuY2F0Y2goZSA9PiBwb3N0Tm90ZU1lc3NhZ2UoZS50b1N0cmlu
ZygpKSk7CisgICAgfQorCisgICAgcG9zdE5vdGVNZXNzYWdlKCdSZWFkeScpOworICAgIDwvc2Ny
aXB0PgorICAgIClIVE1MIl9zOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG1lc3NhZ2Ug
PSBuaWw7CisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV9ub3Rp
ZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIHJlY2VpdmVkTWVz
c2FnZSkgeworICAgICAgICBtZXNzYWdlID0gcmVjZWl2ZWRNZXNzYWdlOworICAgICAgICBnb3RN
ZXNzYWdlID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KGh0bWxTb3VyY2UsICIi
X3MpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNT
RVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUmVhZHkiXSk7CisKKyAgICBtZXNz
YWdlID0gbmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAInN1YnNjcmliZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOwor
ICAgIFJldGFpblB0cjxpZD4gc3Vic2NyaXB0aW9uID0gbWVzc2FnZTsKKyAgICBBU1NFUlRfRkFM
U0UoW3N1YnNjcmlwdGlvbiBpc0VxdWFsOltOU051bGwgbnVsbF1dKTsKKyAgICBBU1NFUlRfVFJV
RShbc3Vic2NyaXB0aW9uIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dICYmIFtz
dWJzY3JpcHRpb24gb2JqZWN0Rm9yS2V5OkAiZW5kcG9pbnQiXSk7CisKKyAgICBtZXNzYWdlID0g
bmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1YXRlSmF2
YVNjcmlwdDpAImdldFN1YnNjcmlwdGlvbigpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOwor
ICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWw6c3Vic2NyaXB0aW9uLmdldCgpXSk7CisK
KyAgICAvLyBJZiB0aGUgcHVibGljIHRva2VuIGNoYW5nZXMsIGFsbCBzdWJzY3JpcHRpb25zIHNo
b3VsZCBiZSBpbnZhbGlkYXRlZC4KKyAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRl
QW5kQ29uZmlndXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRh
ZW1vbi5zZXJ2aWNlIik7CisgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1
dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9yVGVz
dGluZywgZW5jb2RlU3RyaW5nKCJmb29iYXIiX3MpKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7Cisg
ICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAiZ2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNT
RVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpbTlNOdWxsIG51bGxdXSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457544</attachid>
            <date>2022-04-13 10:39:47 -0700</date>
            <delta_ts>2022-04-13 11:14:24 -0700</delta_ts>
            <desc>Patch feedback</desc>
            <filename>bug-239042-20220413103946.patch</filename>
            <type>text/plain</type>
            <size>43157</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjI0Njc1ZGZhZjAxNjI3NjA1NWEwNTA1MWRi
MmIxZTg3ZDA5MWFiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTMzLDEyICszMywxNSBAQAogI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKICNkZWZpbmUg
UFVTSERCX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhQdXNoLCAiJXAgLSBQdXNo
RGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBQVVNIREJfUkVM
RUFTRV9MT0dfRVJST1IoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICIlcCAtIFB1
c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCkBAIC00OCwxMSArNTEsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3RleHByIGludCBjdXJyZW50
UHVzaERhdGFiYXNlVmVyc2lvbiA9IDI7Ci0jZGVmaW5lIGtDdXJyZW50UHVzaERhdGFiYXNlVmVy
c2lvblN0cmluZyAiMiIKLQotc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNoRGF0YWJhc2VT
Y2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHB1
c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50c1tdID0gewogICAgICJQUkFHTUEgYXV0b192YWN1
dW09SU5DUkVNRU5UQUwiX3MsCit9OworCitzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBw
dXNoRGF0YWJhc2VTY2hlbWFWMlN0YXRlbWVudHNbXSA9IHsKICAgICAiQ1JFQVRFIFRBQkxFIFN1
YnNjcmlwdGlvblNldHMoIgogICAgICIgIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lO
Q1JFTUVOVCwiCiAgICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCkBAIC03NCw5ICs3
NywyMiBAQCBzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYxU3Rh
dGVtZW50c1tdID0gewogICAgICIgIGV4cGlyYXRpb25UaW1lIElOVCwiCiAgICAgIiAgVU5JUVVF
KHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAogICAgICJDUkVBVEUgSU5ERVggU3Vic2Ny
aXB0aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlw
dGlvblNldElEKSJfcywKLSAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9ICIga0N1cnJlbnRQdXNo
RGF0YWJhc2VWZXJzaW9uU3RyaW5nICIiX3MKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlM
aXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYzU3RhdGVtZW50c1tdID0geworICAgICJDUkVBVEUg
VEFCTEUgTWV0YWRhdGEoa2V5IFRFWFQsIHZhbHVlLCBVTklRVUUoa2V5KSkiX3MsCit9OworCitz
dGF0aWMgY29uc3RleHByIFNwYW48Y29uc3QgQVNDSUlMaXRlcmFsPiBwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzW10gPSB7CisgICAgeyBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMg
fSwKKyAgICB7IHB1c2hEYXRhYmFzZVNjaGVtYVYyU3RhdGVtZW50cyB9LAorICAgIHsgcHVzaERh
dGFiYXNlU2NoZW1hVjNTdGF0ZW1lbnRzIH0sCit9OworCitzdGF0aWMgY29uc3RleHByIHNpemVf
dCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiA9IHN0ZDo6c2l6ZShwdXNoRGF0YWJhc2VTY2hl
bWFTdGF0ZW1lbnRzKTsKKworc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgcHVibGljVG9r
ZW5LZXkgPSAicHVibGljVG9rZW4iX3M7CisKIFB1c2hSZWNvcmQgUHVzaFJlY29yZDo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QgJgogewogICAgIHJldHVybiB7CkBAIC0xNDAsMzMgKzE1NiwzOCBAQCBz
dGF0aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPFNRTGl0ZURhdGFiYXNlPiwgU2hvdWxkRGVsZXRlQW5k
UmV0cnk+IG9wZW5BbmRNaWdyYXRlRAogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU2hv
dWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAgICAgfQogCi0gICAgaW50IHZlcnNpb24gPSAwOwor
ICAgIHNpemVfdCB2ZXJzaW9uID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gc3FsID0gZGItPnBy
ZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOwogICAgICAgICBpZiAoIXNx
bCB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihQdXNoLCAiQ291bGRuJ3QgZ2V0IFB1c2hEYXRhYmFzZSB2ZXJzaW9uIGF0IHBhdGgg
JXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMpOwogICAgICAgICB9Ci0gICAgICAgIHZlcnNp
b24gPSBzcWwtPmNvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byB1c2VyVmVyc2lvbiA9IHNxbC0+
Y29sdW1uSW50KDApOworICAgICAgICB2ZXJzaW9uID0gdXNlclZlcnNpb24gPj0gMCA/IHVzZXJW
ZXJzaW9uIDogc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKICAgICB9CiAKLSAg
ICBpZiAodmVyc2lvbiAmJiB2ZXJzaW9uICE9IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgbWlncmF0aW9uIHdoZW4gd2UgbmVlZCBpdC4KLSAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkZvdW5kIHVuZXhwZWN0ZWQgUHVzaERhdGFiYXNl
IHZlcnNpb246ICVkIChleHBlY3RlZDogJWQpIGF0IHBhdGg6ICVzIiwgdmVyc2lvbiwgY3VycmVu
dFB1c2hEYXRhYmFzZVZlcnNpb24sIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKHZlcnNp
b24gPiBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihQdXNoLCAiRm91bmQgdW5leHBlY3RlZCBQdXNoRGF0YWJhc2UgdmVyc2lvbjogJXp1IChl
eHBlY3RlZDogJXp1KSBhdCBwYXRoOiAlcyIsIHZlcnNpb24sIGN1cnJlbnRQdXNoRGF0YWJhc2VW
ZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAgICAgfQogCi0gICAgaWYgKCF2ZXJzaW9u
KSB7CisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgewogICAg
ICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYik7CiAgICAgICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBwdXNoRGF0YWJh
c2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKLSAgICAgICAgICAgIGlmICghZGItPmV4ZWN1dGVDb21t
YW5kKHN0YXRlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiRXJyb3IgZXhlY3V0aW5nIFB1c2hEYXRhYmFzZSBEREwgc3RhdGVtZW50ICVzIGF0IHBhdGgg
JXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRyeTo6WWVz
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHZlcnNpb247IGkgPCBjdXJyZW50UHVzaERhdGFi
YXNlVmVyc2lvbjsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3RhdGVtZW50IDogcHVz
aERhdGFiYXNlU2NoZW1hU3RhdGVtZW50c1tpXSkgeworICAgICAgICAgICAgICAgIGlmICghZGIt
PmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoUHVzaCwgIkVycm9yIGV4ZWN1dGluZyBQdXNoRGF0YWJhc2UgRERMIHN0YXRl
bWVudCAlcyBhdCBwYXRoICVzOiAlZCIsIHN0YXRlbWVudC5jaGFyYWN0ZXJzKCksIHBhdGgudXRm
OCgpLmRhdGEoKSwgZGItPmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmICghZGItPmV4ZWN1
dGVDb21tYW5kU2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdXNlcl92ZXJzaW9uID0gIiwgY3VycmVu
dFB1c2hEYXRhYmFzZVZlcnNpb24pKSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJFcnJvciBzZXR0aW5nIHVzZXIgdmVyc2lvbiBmb3IgUHVzaERhdGFiYXNlIGF0IHBhdGgg
JXM6ICVkIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkYi0+bGFzdEVycm9yKCkpOworCiAgICAgICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIH0KIApAQCAtMjgwLDExICszMDEsMTA1IEBAIHRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgogc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBVJiYgcmVz
dWx0KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFdvcmtRdWV1ZTo6
bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCByZXN1bHQgPSBjcm9zc1RocmVhZENvcHkoV1RGTW92ZShyZXN1bHQpKV0oKSBtdXRh
YmxlIHsKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KHN0
ZDo6Zm9yd2FyZDxVPihyZXN1bHQpKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKIH0KIAordm9pZCBQdXNoRGF0YWJhc2U6
OnVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gcHVibGljVG9rZW4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoUHVibGljVG9rZW5DaGFuZ2VkKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCBuZXdQdWJsaWNUb2tlbiA9IFZl
Y3Rvcjx1aW50OF90PiB7IHB1YmxpY1Rva2VuIH0sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpObzsKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGN1cnJlbnRQdWJsaWNUb2tlbjsKKworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlNFTEVDVCB2YWx1ZSBGUk9NIE1l
dGFkYXRhIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5i
aW5kVGV4dCgxLCBwdWJsaWNUb2tlbktleSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAg
ICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNx
bC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgY3VycmVudFB1YmxpY1Rv
a2VuID0gc3FsLT5jb2x1bW5CbG9iKDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJl
bnRQdWJsaWNUb2tlbiA9PSBuZXdQdWJsaWNUb2tlbikgeworICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3Fs
ID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiUkVQTEFDRSBJTlRPIE1ldGFkYXRhKGtleSwgdmFs
dWUpIFZBTFVFUyg/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5LZXkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMiwgbmV3UHVibGljVG9rZW4pICE9IFNRTElU
RV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7
CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGYWlsZWQgdG8gc2F2ZSBuZXcgcHVi
bGljIHRva2VuOiAlZCIsIG1fZGItPmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIElmIHdlIGFyZSB1cGRhdGluZyBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2hl
cmUgY3VycmVudFB1YmxpY1Rva2VuIGRvZXNuJ3QgZXhpc3QsIGp1c3QKKyAgICAgICAgLy8gc2F2
ZSB0aGUgaW5pdGlhbCBwdWJsaWNUb2tlbiB3aXRob3V0IGRlbGV0aW5nIGFsbCBzdWJzY3JpcHRp
b25zIGFuZCBub3RpZnlpbmcgdGhlIGNhbGxlciB0aGF0CisgICAgICAgIC8vIHRoZSB0b2tlbiBj
aGFuZ2VkLgorICAgICAgICBpZiAoIWN1cnJlbnRQdWJsaWNUb2tlbi5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gZGVsZXRlU3Vic2NyaXB0aW9uU2V0cyA9IGNhY2hlZFN0YXRlbWVudE9u
UXVldWUoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlvblNldHMiX3MpOworICAgICAgICAgICAgYXV0
byBkZWxldGVTdWJzY3JpcHRpb25zID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZS
T00gU3Vic2NyaXB0aW9ucyJfcyk7CisKKyAgICAgICAgICAgIGlmICghZGVsZXRlU3Vic2NyaXB0
aW9uU2V0cyB8fCAhZGVsZXRlU3Vic2NyaXB0aW9ucykgeworICAgICAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZWxldGVTdWJz
Y3JpcHRpb25TZXRzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUgfHwgZGVsZXRlU3Vic2NyaXB0aW9u
cy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoUHVzaCwgIkZhaWxlZCB0byBkZWxldGUgc3Vic2NyaXB0aW9uczogJWQiLCBtX2RiLT5s
YXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdCA9IFB1YmxpY1Rva2VuQ2hhbmdlZDo6
WWVzOworICAgICAgICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAg
ICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0
KTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldFB1YmxpY1Rva2VuKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZh
bHVlIEZST00gTWV0YWRhdGEgV0hFUkUga2V5ID0gPyJfcyk7CisgICAgICAgIGlmICghc3FsIHx8
IHNxbC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5LZXkpICE9IFNRTElURV9PSykgeworICAgICAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgIGNvbXBs
ZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFZlY3Rvcjx1aW50OF90
PiB7IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPmNvbHVtbkJsb2IoMCk7CisKKyAgICAgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9KTsKK30KKwogdm9p
ZCBQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiByZWNvcmQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCByZWNvcmQg
PSBjcm9zc1RocmVhZENvcHkocmVjb3JkKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCmluZGV4IDMzZTQzYmU4YWVmMGVmZGVhMmM4NzdiMGE1
ODcwNjQ3N2I5MmI3OGQuLjgzNzM4OTNlMDE2ZGNlMDQzYTI5MTI0ODUwN2FkNzZiY2Q1MTUxNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9T
cGFuLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CkBAIC03Niw2ICs3NywxMCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0
aCwgQ3JlYXRpb25IYW5kbGVyJiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5QdXNoRGF0YWJhc2Uo
KTsKIAorICAgIGVudW0gY2xhc3MgUHVibGljVG9rZW5DaGFuZ2VkIDogYm9vbCB7IE5vLCBZZXMg
fTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3Qg
dWludDhfdD4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVibGljVG9rZW5DaGFuZ2VkKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQdWJsaWNUb2tlbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBn
ZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKaW5kZXggZTkwZWVlZDAxNDA3ODY1N2ExMThl
YTZhM2Y0YzI5MDI3ZjZkNGJkZS4uYTg1YjY5ZDI5ODZhOTM4OTJhZDRjMDdlNDUyMzA2MjJlNDUw
YWZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0
YW50cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMu
aApAQCAtNTUsNiArNTUsNyBAQCBlbnVtIGNsYXNzIE1lc3NhZ2VUeXBlIDogdWludDhfdCB7CiAg
ICAgSW5jcmVtZW50U2lsZW50UHVzaENvdW50LAogICAgIFJlbW92ZUFsbFB1c2hTdWJzY3JpcHRp
b25zLAogICAgIFJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luLAorICAgIFNldFB1Ymxp
Y1Rva2VuRm9yVGVzdGluZywKIH07CiAKIGlubGluZSBib29sIG1lc3NhZ2VUeXBlU2VuZHNSZXBs
eShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSkKQEAgLTc0LDYgKzc1LDcgQEAgaW5saW5lIGJvb2wg
bWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OkluY3JlbWVudFNpbGVudFB1c2hDb3VudDoKICAgICBjYXNlIE1lc3NhZ2VU
eXBlOjpSZW1vdmVBbGxQdXNoU3Vic2NyaXB0aW9uczoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpS
ZW1vdmVQdXNoU3Vic2NyaXB0aW9uc0Zvck9yaWdpbjoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpT
ZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5hYmxlZDoKICAgICBjYXNlIE1lc3NhZ2VUeXBl
OjpVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL0FwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGVmZjdlYWU1Y2Zm
YTg3Nzc4YjY2NjJhYjZiMTU0ZTBkNGE0ZjA3ZDguLjQ2NjRmNTA4NGYwYWMxZmY2YTcyMmY5ZDA2
MTRkYzU3ZjM3Y2MyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwbGVQ
dXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBs
ZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtNDgsMTMgKzQ4LDE1IEBAIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbm5lY3Rpb246KFdlYlB1c2hEOjpBcHBsZVB1c2hTZXJ2aWNlQ29ubmVj
dGlvbiAqKWNvbm5lCiAtICh2b2lkKWNvbm5lY3Rpb246KEFQU0Nvbm5lY3Rpb24gKiljb25uZWN0
aW9uIGRpZFJlY2VpdmVQdWJsaWNUb2tlbjooTlNEYXRhICopcHVibGljVG9rZW4KIHsKICAgICBV
TlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHB1YmxpY1Rva2VuKTsK
KyAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmIChfY29ubmVjdGlvbiAmJiBw
dWJsaWNUb2tlbi5sZW5ndGgpCisgICAgICAgIF9jb25uZWN0aW9uLT5kaWRSZWNlaXZlUHVibGlj
VG9rZW4oVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHB1Ymxp
Y1Rva2VuLmJ5dGVzKSwgcHVibGljVG9rZW4ubGVuZ3RoIH0pOwogfQogCiAtICh2b2lkKWNvbm5l
Y3Rpb246KEFQU0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVJbmNvbWluZ01lc3Nh
Z2U6KEFQU0luY29taW5nTWVzc2FnZSAqKW1lc3NhZ2UKIHsKICAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7Ci0KICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKIAogICAgIGlmIChfY29u
bmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKaW5kZXggYjk1M2JiOWMxMmRkN2UyMmJkNjkxMzA1NDQ4NzljN2RmNDZkOTRh
Mi4uMWY4ZTZlZjllMmUzZDA4NDg0YzExMDFmYjU4MjYyMDFjYmZmY2MzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9uV2FraW5nVG9waWNzKFZlY3RvcjxT
dHJpbmc+JiYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRUb3BpY0xpc3RzKFRvcGljTGlzdHMm
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8
dWludDhfdD4mJikgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1t
CmluZGV4IGM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQuLjc5NmQ1Y2Qx
MTY3YmYxZTA2NGRiZTFkNjdiNGJjYTc1ZGI2MGQzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTM0LDYgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6TW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCiB7CisgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFZl
Y3Rvcjx1aW50OF90PiB7ICdhJywgJ2InLCAnYycgfSk7CiB9CiAKIE1vY2tQdXNoU2VydmljZUNv
bm5lY3Rpb246On5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwpAQCAtMTA0
LDQgKzEwNSw5IEBAIHZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0VG9waWNMaXN0
cyhUb3BpY0xpc3RzJiYgdG9waWNMaXN0cykKIHsKIH0KIAordm9pZCBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYgdG9r
ZW4pCit7CisgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFdURk1vdmUodG9rZW4pKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2UuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApp
bmRleCBlNDQ1MDE5ZWM5ZTJjN2NiMWRlZjYyZDQxYzBhMWIxMTk3YmE1NDliLi41MTgyMGYyMTFl
OTZjZjI0MDc3MTJmODJiMjg5ZDI5Yzc4NjU4YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
U2VydmljZS5oCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbXBsZXRl
U3Vic2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CiAgICAgdm9pZCBkaWRDb21wbGV0
ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsKIAorICAgIHZvaWQgc2V0
UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJik7CiAgICAgdm9pZCBkaWRSZWNlaXZl
UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0pOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2UubW0KaW5kZXggZTI2ODQ0ZDNiNjg2ODk5ZmU3MzE3ZDlkYTVh
NDdlNzM3ODJmMDMzZi4uZGIxYTgzZDRlZDYyYTg1YmM4ZjcwN2FhNDNlZDdlZTQ3M2M2NzI0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCkBAIC0xMTYsNiArMTE2LDEwIEBA
IFB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9u
PiYmIHB1c2hTZXJ2aWNlQ29ubmVjdGlvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9pbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlcik7CiAKKyAgICBtX2Nvbm5lY3Rpb24tPnN0YXJ0TGlzdGVuaW5n
Rm9yUHVibGljVG9rZW4oW3RoaXNdKGF1dG8mJiB0b2tlbikgeworICAgICAgICBkaWRSZWNlaXZl
UHVibGljVG9rZW4oV1RGTW92ZSh0b2tlbikpOworICAgIH0pOworCiAgICAgbV9jb25uZWN0aW9u
LT5zdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhbdGhpc10oTlNTdHJpbmcgKnRvcGljLCBO
U0RpY3Rpb25hcnkgKnVzZXJJbmZvKSB7CiAgICAgICAgIGRpZFJlY2VpdmVQdXNoTWVzc2FnZSh0
b3BpYywgdXNlckluZm8pOwogICAgIH0pOwpAQCAtNjIxLDYgKzYyNSwyNCBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSYXdQdXNoTWVzc2FnZT4gbWFrZVJhd1B1c2hNZXNzYWdlKE5TU3RyaW5nICp0
b3BpYywgTlNEaWN0aQogICAgIHJldHVybiBtZXNzYWdlOwogfQogCit2b2lkIFB1c2hTZXJ2aWNl
OjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYgdG9rZW4pCit7Cisg
ICAgbV9jb25uZWN0aW9uLT5zZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoV1RGTW92ZSh0b2tlbikp
OworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9yPHVp
bnQ4X3Q+JiYgdG9rZW4pCit7CisgICAgbV9kYXRhYmFzZS0+dXBkYXRlUHVibGljVG9rZW4odG9r
ZW4sIFt0aGlzXShhdXRvIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0g
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhQdXNoLCAiUmVjZWl2ZWQgZXhwZWN0ZWQgcHVibGljIHRva2VuIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNo
LCAiUHVibGljIHRva2VuIGNoYW5nZWQ7IGludmFsaWRhdGVkIGFsbCBleGlzdGluZyBwdXNoIHN1
YnNjcmlwdGlvbnMiKTsKKyAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1f
ZGF0YWJhc2UsIFtdKCkgeyB9KTsKKyAgICB9KTsKK30KKwogdm9pZCBQdXNoU2VydmljZTo6ZGlk
UmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5m
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gbWVzc2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5k
ZXggMTk4MTQzZjU2OTdjZDI4YzY5MjhkNDU2OGMyMWMzMjU0OTIwZDIwZi4uNTQzYmUwNjA1Mzk5
YzA5MmE1NDhmYmZhYTQ1YWFiN2FlYmU5ODA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBX
ZWJQdXNoRCB7CiBjbGFzcyBQdXNoU2VydmljZUNvbm5lY3Rpb24gOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CisgICAgdXNpbmcgUHVibGljVG9rZW5IYW5kbGVyID0gRnVuY3Rpb248dm9p
ZChWZWN0b3I8dWludDhfdD4mJik+OwogICAgIHVzaW5nIEluY29taW5nUHVzaE1lc3NhZ2VIYW5k
bGVyID0gRnVuY3Rpb248dm9pZChOU1N0cmluZyAqLCBOU0RpY3Rpb25hcnkgKik+OwogCiAgICAg
UHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwpAQCAtNzQsMTAgKzc1LDE2IEBAIHB1
YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BpY0xpc3RzKFRvcGljTGlzdHMm
JikgPSAwOwogCisgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKFB1YmxpY1Rv
a2VuSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWlu
dDhfdD4mJik7CisgICAgdmlydHVhbCB2b2lkIHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0
b3I8dWludDhfdD4mJik7CisKICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2Vz
KEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hN
ZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyk7CiAKIHByaXZh
dGU6CisgICAgUHVibGljVG9rZW5IYW5kbGVyIG1fcHVibGljVG9rZW5IYW5kbGVyOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX3BlbmRpbmdQdWJsaWNUb2tlbjsKICAgICBJbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyOwogICAgIERlcXVlPHN0ZDo6
cGFpcjxSZXRhaW5QdHI8TlNTdHJpbmc+LCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5Pj4+IG1fcGVu
ZGluZ1B1c2hlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tCmluZGV4IDkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4
NjguLjg4ZjI3ZWVjM2Y4ZDdjNWIwYzQxODg2MDk4NjA2MTA5ZDk2NDY3M2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0zNyw2ICsz
NywzMCBAQCBQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2Vu
ZXJhdGVDbGllbnRLZXlzKCkKICAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2Vu
ZXJhdGUoKTsKIH0KIAordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5n
Rm9yUHVibGljVG9rZW4oUHVibGljVG9rZW5IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBtX3B1
YmxpY1Rva2VuSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CisKKyAgICBpZiAobV9wZW5kaW5n
UHVibGljVG9rZW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3B1YmxpY1Rv
a2VuSGFuZGxlcihzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1B1YmxpY1Rva2VuLCB7IH0pKTsKK30K
Kwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0
b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBpZiAoIW1fcHVibGljVG9rZW5IYW5kbGVyKSB7
CisgICAgICAgIG1fcGVuZGluZ1B1YmxpY1Rva2VuID0gV1RGTW92ZSh0b2tlbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3B1YmxpY1Rva2VuSGFuZGxlcihXVEZNb3ZlKHRva2Vu
KSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpCit7Cit9CisKIHZvaWQgUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciA9IFdU
Rk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1
c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCmluZGV4
IDA2NjJmMTNlOTgzOTQ5MDBjNTQxZmFiZGU5NTZlODVjOTY2MmRiMzMuLmY0OWRlMmU3ZDFmMDQz
NGJhNWNiYzg2NzJhM2I3NzIzNGI5ZmFlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluY3JlbWVudFNp
bGVudFB1c2hDb3VudChDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYpOwogICAgIHZv
aWQgcmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKICAgICB2b2lkIHJlbW92ZVB1c2hTdWJzY3Jp
cHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJik7CisgICAg
dm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0
cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2
b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShTdHJpbmdWaWV3KTsKICAgICB2b2lkIGJyb2FkY2Fz
dEFsbENvbm5lY3Rpb25JZGVudGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb24ubW0KaW5kZXggNzg1MzJkMDRhZjYxNzBjMTg4ZjhjOTEzNjlhODIxMDc5MmQwYmJhMC4u
NGNlYzY0MTE1ZGZjNWM5NWVlOGJlNTJkNGJlZWQyYTFjZTk5NWM0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTM0LDExICsxMzQsMjEgQEAgQVJHVU1FTlRT
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSkKIFJFUExZKHVuc2lnbmVkKQogRU5ECiAKK0ZV
TkNUSU9OKHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBM
WSgpCitFTkQKKworCiAjdW5kZWYgRlVOQ1RJT04KICN1bmRlZiBBUkdVTUVOVFMKICN1bmRlZiBS
RVBMWQogI3VuZGVmIEVORAogCisjZGVmaW5lIEVNUFRZX1JFUExZKG1mKSBXZWJQdXNoRDo6RW5j
b2RlZE1lc3NhZ2UgbWY6OmVuY29kZVJlcGx5KCkgeyByZXR1cm4geyB9OyB9CitFTVBUWV9SRVBM
WShzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOworI3VuZGVmIEVNUFRZX1JFUExZCisKIFdlYlB1
c2hEOjpFbmNvZGVkTWVzc2FnZSBlY2hvVHdpY2U6OmVuY29kZVJlcGx5KFN0cmluZyByZXBseSkK
IHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtNDQ1LDYgKzQ1NSw5
IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKHhwY19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6UmVtb3Zl
UHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW46CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2Fn
ZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6cmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4+
KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9y
VGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJ
bmZvOjpzZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRN
ZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtNzIyLDYgKzczNSwxOSBAQCB2b2lkIERhZW1vbjo6cmVtb3ZlUHVzaFN1YnNjcmlwdGlv
bnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29ucwogICAgIH0pOwog
fQogCit2b2lkIERhZW1vbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKENsaWVudENvbm5lY3Rp
b24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgcmVwbHlTZW5kZXIpCit7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlz
LCBwdWJsaWNUb2tlbiwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNl
bmRlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNo
U2VydmljZS0+c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiB7IHB1Ymxp
Y1Rva2VuLnV0ZjgoKS5ieXRlcygpIH0pOworICAgICAgICByZXBseVNlbmRlcigpOworICAgIH0p
OworfQorCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRvQ2xpZW50Q29ubmVjdGlvbih4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiB7CiAgICAgYXV0byBjbGllbnRDb25uZWN0aW9uID0g
bV9jb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiOTFmZTRjYWMzYWE5MjVlNjc0YTQ1NTkyYjQ4
N2E3MjkyZDhmZjUyLi4yZWY1MDliYjFjMmY5NjczZjE0ZWQ4YjllMDE5MTQ4Mzk3YjkwYTU5IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjggQEAKKzIwMjItMDQtMDkgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBUZXN0IHRoYXQgcHVibGljIHRv
a2VuIHVwZGF0ZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkgYXQgdGhlIFB1c2hEYXRhYmFzZSBhbmQg
V2ViUHVzaERhZW1vbiBsZXZlbHMKKyAgICAgICAgIC0gVGVzdCBzY2hlbWEgbWlncmF0aW9uIGlu
IFB1c2hEYXRhYmFzZQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1
c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjcmVhdGVEYXRhYmFzZVN5
bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVibGljVG9rZW5TeW5jKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OnVwZGF0ZVB1YmxpY1Rva2VuU3luYyk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0Um93SWRlbnRpZmllcnNTeW5jKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFB1YmxpY1Rva2VuKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJlY29yZEJ5QnVuZGxl
SWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFz
ZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Rf
Rik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKwogMjAyMi0wNC0wNyAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW01lcmdlLVF1ZXVl
XSBVcGRhdGUgaGVhZCBhbmQgYmFzZSByZWZlcmVuY2VzIGluIFBSCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcxZWZlYWNj
ZmI4N2NkZmE5YTM2OGY4YjgzODczYjRlNWEzYWJmZDMuLjkxMTBjZDBlMzhmMzI5NjA1MzZlMWZj
MWMxMTEwYzkyNzEwMWNiMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTQzLDYg
KzQ0LDc3IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpCiAgICAg
cmV0dXJuIHBhdGg7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBj
cmVhdGVEYXRhYmFzZVN5bmMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoRGF0YWJhc2U+IHJlc3VsdDsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAg
IFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmZG9uZSwgJnJlc3VsdF0oc3RkOjp1bmlxdWVf
cHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAgICByZXN1bHQgPSBXVEZNb3Zl
KGRhdGFiYXNlKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVu
KCZkb25lKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8dWludDhf
dD4gZ2V0UHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCit7CisgICAgYm9v
bCBkb25lID0gZmFsc2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldFJlc3VsdDsKKworICAgIGRh
dGFiYXNlLmdldFB1YmxpY1Rva2VuKFsmZG9uZSwgJmdldFJlc3VsdF0oYXV0byYmIHJlc3VsdCkg
eworICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVz
dWx0OworfQorCitzdGF0aWMgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQgdXBkYXRl
UHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIFNwYW48Y29uc3QgdWludDhf
dD4gdG9rZW4pCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgYXV0byB1cGRhdGVSZXN1
bHQgPSBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm87CisKKyAgICBkYXRhYmFz
ZS51cGRhdGVQdWJsaWNUb2tlbih0b2tlbiwgWyZkb25lLCAmdXBkYXRlUmVzdWx0XShhdXRvJiYg
cmVzdWx0KSB7CisgICAgICAgIHVwZGF0ZVJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJl
dHVybiB1cGRhdGVSZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYyhQdXNoRGF0YWJhc2UmIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQorewor
ICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0
UmVzdWx0OworCisgICAgZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2Nv
cGUoYnVuZGxlSUQsIHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRdKHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4mJiByZXN1bHQpIHsKKyAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQp
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgcmV0dXJuIGdldFJlc3VsdDsKK30KKworc3RhdGljIEhhc2hTZXQ8dWludDY0X3Q+IGdl
dFJvd0lkZW50aWZpZXJzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOworICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOworCisg
ICAgZGF0YWJhc2UuZ2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmllcnNdKEhhc2hT
ZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsKKyAgICAgICAg
Zm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAgICAgICAgICAgIHJvd0lkZW50
aWZpZXJzLmFkZChpZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIHJvd0lkZW50aWZp
ZXJzOworfQorCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0VG9waWNzU3luYyhQdXNoRGF0YWJh
c2UmIGRhdGFiYXNlKQogewogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtNjYsNyArMTM4LDcg
QEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKICAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhv
bmUiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJodHRw
czovL3B1c2hFbmRwb2ludDEiX3MsCiAgICAgICAgICJ0b3BpYzEiX3MsCiAgICAgICAgIHsgNSwg
NiB9LAogICAgICAgICB7IDYsIDcgfSwKQEAgLTc4LDggKzE1MCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3Jn
Il9zLAogICAgICAgICAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zLAotICAgICAgICAi
aHR0cHM6Ly9wdXNoRW5kcG9pbnQ0Il9zLAotICAgICAgICAidG9waWM0Il9zLAorICAgICAgICAi
aHR0cHM6Ly9wdXNoRW5kcG9pbnQyIl9zLAorICAgICAgICAidG9waWMyIl9zLAogICAgICAgICB7
IDE0LCAxNSB9LAogICAgICAgICB7IDE2LCAxNyB9LAogICAgICAgICB7IDE4LCAxOSB9LApAQCAt
OTAsOCArMTYyLDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAg
ICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFw
cGxlLmNvbS9tYWMiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCi0gICAg
ICAgICJ0b3BpYzIiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAg
ICAgICJ0b3BpYzMiX3MsCiAgICAgICAgIHsgMCwgMSB9LAogICAgICAgICB7IDEsIDIgfSwKICAg
ICAgICAgeyAyLCAzIH0sCkBAIC0xMDMsOCArMTc1LDggQEAgcHVibGljOgogICAgICAgICAiY29t
LmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAg
ICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAgICAgICJodHRwczov
L3B1c2hFbmRwb2ludDMiX3MsCi0gICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgICJodHRwczov
L3B1c2hFbmRwb2ludDQiX3MsCisgICAgICAgICJ0b3BpYzQiX3MsCiAgICAgICAgIHsgOSwgMTAg
fSwKICAgICAgICAgeyAxMCwgMTEgfSwKICAgICAgICAgeyAxMSwgMTIgfSwKQEAgLTExNiw2ICsx
ODgsMTYgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVz
dWx0MzsKICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDQ7CiAKKyAg
ICBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGljVG9rZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdldFB1YmxpY1Rva2VuU3luYygqZGIpOworICAgIH0KKworICAgIFB1c2hEYXRhYmFzZTo6UHVi
bGljVG9rZW5DaGFuZ2VkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gdG9r
ZW4pCisgICAgeworICAgICAgICByZXR1cm4gdXBkYXRlUHVibGljVG9rZW5TeW5jKCpkYiwgdG9r
ZW4pOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVjb3Jk
KGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCkKICAgICB7CiAgICAgICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwpAQCAtMTYwLDMxICsyNDIsMTIgQEAgcHVibGljOgogCiAgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25zdCBTdHJp
bmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQogICAgIHsKLSAgICAgICAgYm9vbCBk
b25lID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0
OwotCi0gICAgICAgIGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5k
bGVJRCwgc2NvcGUsIFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3Jk
PiYmIHJlc3VsdCkgewotICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOwot
ICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4o
JmRvbmUpOwotCi0gICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgICAgIHJldHVybiBnZXRS
ZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoKmRiLCBidW5kbGVJRCwgc2NvcGUp
OwogICAgIH0KIAogICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzKCkKICAg
ICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBIYXNoU2V0PHVpbnQ2NF90
PiByb3dJZGVudGlmaWVyczsKLQotICAgICAgICBkYi0+Z2V0SWRlbnRpZmllcnMoWyZkb25lLCAm
cm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRl
bnRpZmllcnMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmll
cnMpCi0gICAgICAgICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9VSW50
NjQoKSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0
aWw6OnJ1bigmZG9uZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworICAgICAg
ICByZXR1cm4gZ2V0Um93SWRlbnRpZmllcnNTeW5jKCpkYik7CiAgICAgfQogCiAgICAgVmVjdG9y
PFN0cmluZz4gZ2V0VG9waWNzKCkKQEAgLTIzNiwxMyArMjk5LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBTZXRVcCgpIGZpbmFsCiAgICAgewotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAg
ICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUobWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpLCBb
dGhpcywgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsK
LSAgICAgICAgICAgIGRiID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KKyAgICAgICAg
ZGIgPSBjcmVhdGVEYXRhYmFzZVN5bmMoU1FMaXRlRGF0YWJhc2U6OmluTWVtb3J5UGF0aCgpKTsK
ICAgICAgICAgQVNTRVJUX1RSVUUoZGIpOwogICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1
bHQxID0gaW5zZXJ0UmVjb3JkKHJlY29yZDEpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0
UmVzdWx0MiA9IGluc2VydFJlY29yZChyZWNvcmQyKSk7CkBAIC0yNjYsNiArMzIzLDM2IEBAIHN0
YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwgY29uc3QgUHVzaFJlY29y
ZCYgYikKICAgICAgICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lOwog
fQogCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgVXBkYXRlUHVibGljVG9rZW4pCit7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGluaXRpYWxUb2tlbiA9IHsgJ2EnLCAnYicsICdjJyB9OworICAgIFZl
Y3Rvcjx1aW50OF90PiBtb2RpZmllZFRva2VuID0geyAnZCcsICdlJywgJ2YnIH07CisKKyAgICAv
LyBTZXR0aW5nIHRoZSBpbml0aWFsIHB1YmxpYyB0b2tlbiBzaG91bGRuJ3QgZGVsZXRlIGFueXRo
aW5nLgorICAgIGF1dG8gdXBkYXRlUmVzdWx0MSA9IHVwZGF0ZVB1YmxpY1Rva2VuKGluaXRpYWxU
b2tlbik7CisgICAgRVhQRUNUX0VRKHVwZGF0ZVJlc3VsdDEsIFB1c2hEYXRhYmFzZTo6UHVibGlj
VG9rZW5DaGFuZ2VkOjpObyk7CisgICAgRVhQRUNUX0VRKGdldFJvd0lkZW50aWZpZXJzKCksIChI
YXNoU2V0PHVpbnQ2NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAgYXV0byBnZXRSZXN1bHQx
ID0gZ2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MSwgaW5pdGlhbFRv
a2VuKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHNhbWUgdG9rZW4gYWdhaW4gc2hvdWxkIGRvIG5v
dGhpbmcuCisgICAgYXV0byB1cGRhdGVSZXN1bHQyID0gdXBkYXRlUHVibGljVG9rZW4oaW5pdGlh
bFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MiwgUHVzaERhdGFiYXNlOjpQdWJs
aWNUb2tlbkNoYW5nZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwg
KEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisKKyAgICBhdXRvIGdldFJlc3Vs
dDIgPSBnZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRSZXN1bHQyLCBpbml0aWFs
VG9rZW4pOworCisgICAgLy8gQ2hhbmdpbmcgdGhlIHB1YmxpYyB0b2tlbiBhZnRlcndhcmRzIHNo
b3VsZCBkZWxldGUgZXZlcnl0aGluZy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDMgPSB1cGRhdGVQ
dWJsaWNUb2tlbihtb2RpZmllZFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0Mywg
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Olllcyk7CisgICAgRVhQRUNUX1RSVUUo
Z2V0Um93SWRlbnRpZmllcnMoKS5pc0VtcHR5KCkpOworCisgICAgYXV0byBnZXRSZXN1bHQzID0g
Z2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVzdWx0MywgbW9kaWZpZWRUb2tl
bik7Cit9CisKIFRFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBJbnNlcnRSZWNvcmQpCiB7CiAgICAg
YXV0byBleHBlY3RlZFJlY29yZDEgPSByZWNvcmQxOwpAQCAtNDAzLDEzICs0OTAsNyBAQCBURVNU
KFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBy
ZWNvcmRDb3VudCA9IDI1NjsKIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hE
YXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAg
ICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6
OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVh
dGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwot
ICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVh
dGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVF
KGNyZWF0ZVJlc3VsdCk7CiAKICAgICAgICAgYXV0byYgZGF0YWJhc2UgPSAqY3JlYXRlUmVzdWx0
OwpAQCAtNDQyLDEzICs1MjMsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3Bz
KQogICAgIH0KIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4g
Y3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERh
dGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9w
dHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQg
PSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9
KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQg
PSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJl
c3VsdCk7CiAKICAgICAgICAgYXV0byB0b3BpY3MgPSBnZXRUb3BpY3NTeW5jKCpjcmVhdGVSZXN1
bHQpOwpAQCAtNDY3LDEzICs1NDIsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNj
cmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
Ci0gICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRlUmVzdWx0LCAmZG9u
ZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewotICAgICAgICAg
ICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0gICAgICAgICAgICBkb25lID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisgICAgICAgIGF1
dG8gY3JlYXRlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOwogICAgICAgICBBU1NF
UlRfVFJVRShjcmVhdGVSZXN1bHQpOwogICAgIH0KIApAQCAtNDkxLDYgKzU2MCw3NCBAQCBURVNU
KFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiB9CiAK
K3N0YXRpYyBib29sIGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMoU3RyaW5nIHBhdGgsIEFT
Q0lJTGl0ZXJhbCogc3RhdGVtZW50cywgc2l6ZV90IGNvdW50KQoreworICAgIFNRTGl0ZURhdGFi
YXNlIGRiOworICAgIGRiLm9wZW4ocGF0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZChzdGF0ZW1lbnRz
W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gQWNxdWlyZWQgYnkgcnVubmluZyAuZHVtcCBmcm9tIHRoZSBzcWxpdGUzIHNo
ZWxsIG9uIGEgVjIgZGF0YWJhc2UuCitzdGF0aWMgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVYy
U3RhdGVtZW50c1tdID0geworICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cyggIHJv
d0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQg
Tk9UIE5VTEwsICBidW5kbGVJRCBURVhUIE5PVCBOVUxMLCAgc2VjdXJpdHlPcmlnaW4gVEVYVCBO
T1QgTlVMTCwgIHNpbGVudFB1c2hDb3VudCBJTlQgTk9UIE5VTEwsICBVTklRVUUoYnVuZGxlSUQs
IHNlY3VyaXR5T3JpZ2luKSkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMg
VkFMVUVTKDEsMTY0OTU0MTAwMSwnY29tLmFwcGxlLndlYmFwcCcsJ2h0dHBzOi8vd3d3LmFwcGxl
LmNvbScsMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDIs
MTY0OTU0MTAwMSwnY29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LndlYmtpdC5vcmcnLDAp
Il9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUygzLDE2NDk1NDEw
MDEsJ2NvbS5hcHBsZS5TYWZhcmknLCdodHRwczovL3d3dy5hcHBsZS5jb20nLDApIl9zLAorICAg
ICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucyggIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkg
QVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBzdWJzY3JpcHRpb25T
ZXRJRCBJTlQgTk9UIE5VTEwsICBzY29wZSBURVhUIE5PVCBOVUxMLCAgZW5kcG9pbnQgVEVYVCBO
T1QgTlVMTCwgIHRvcGljIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCAgc2VydmVyVkFQSURQdWJsaWNL
ZXkgQkxPQiBOT1QgTlVMTCwgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCAgY2xpZW50
UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxM
LCAgZXhwaXJhdGlvblRpbWUgSU5ULCAgVU5JUVVFKHNjb3BlLCBzdWJzY3JpcHRpb25TZXRJRCkp
Il9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygxLDE2NDk1NDEwMDEs
MSwnaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZScsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MScs
J3RvcGljMScsWCcwNTA2JyxYJzA2MDcnLFgnMDcwOCcsWCcwODA5JyxOVUxMKSJfcywKKyAgICAi
SU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoMiwxNjQ5NTQxMDAxLDIsJ2h0dHBzOi8v
d3d3LndlYmtpdC5vcmcvYmxvZycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MicsJ3RvcGljMicsWCcw
ZTBmJyxYJzEwMTEnLFgnMTIxMycsWCcxNDE1JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8g
U3Vic2NyaXB0aW9ucyBWQUxVRVMoMywxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8vd3d3LmFwcGxlLmNv
bS9tYWMnLCdodHRwczovL3B1c2hFbmRwb2ludDMnLCd0b3BpYzMnLFgnMDAwMScsWCcwMTAyJyxY
JzAyMDMnLFgnMDQwNScsMTY0MzM1MDAwMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlw
dGlvbnMgVkFMVUVTKDQsMTY0OTU0MTAwMSwzLCdodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25l
JywnaHR0cHM6Ly9wdXNoRW5kcG9pbnQ0JywndG9waWM0JyxYJzA5MGEnLFgnMGEwYicsWCcwYjBj
JyxYJzBjMGQnLE5VTEwpIl9zLAorICAgICJERUxFVEUgRlJPTSBzcWxpdGVfc2VxdWVuY2UiX3Ms
CisgICAgIklOU0VSVCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlwdGlvblNl
dHMnLDMpIl9zLAorICAgICJJTlNFUlQgSU5UTyBzcWxpdGVfc2VxdWVuY2UgVkFMVUVTKCdTdWJz
Y3JpcHRpb25zJyw0KSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2Ny
aXB0aW9uU2V0SURfSW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3Ms
CisgICAgIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAyIl9zLAorfTsKKworVEVTVChQdXNoRGF0YWJh
c2UsIENhbk1pZ3JhdGVWMkRhdGFiYXNlVG9DdXJyZW50U2NoZW1hKQoreworICAgIGF1dG8gcGF0
aCA9IG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgoKTsKKyAgICBBU1NFUlRfVFJVRShjcmVhdGVE
YXRhYmFzZUZyb21TdGF0ZW1lbnRzKHBhdGgsIHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50cywgc3Rk
OjpzaXplKHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50cykpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBy
ZWNvcmRzIGFyZSB0aGVyZSBhZnRlciBtaWdyYXRpbmcuCisgICAgeworICAgICAgICBhdXRvIGRh
dGFiYXNlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRf
VFJVRShkYXRhYmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNl
UmVzdWx0OworCisgICAgICAgIGF1dG8gcmVjb3JkUmVzdWx0ID0gZ2V0UmVjb3JkQnlCdW5kbGVJ
ZGVudGlmaWVyQW5kU2NvcGVTeW5jKGRhdGFiYXNlLCAiY29tLmFwcGxlLlNhZmFyaSJfcywgImh0
dHBzOi8vd3d3LndlYmtpdC5vcmcvYmxvZyJfcyk7CisgICAgICAgIEFTU0VSVF9UUlVFKHJlY29y
ZFJlc3VsdCk7CisgICAgICAgIEFTU0VSVF9FUShyZWNvcmRSZXN1bHQtPnRvcGljLCAidG9waWMy
Il9zKTsKKworICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRpZmllcnNT
eW5jKGRhdGFiYXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAoSGFzaFNl
dDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRoZSBp
bml0aWFsIHRva2VuIHNob3VsZCByZXR1cm4gUHVibGljVG9rZW5DaGFuZ2VkOjpOby4KKyAgICAg
ICAgYXV0byB1cGRhdGVSZXN1bHQgPSB1cGRhdGVQdWJsaWNUb2tlblN5bmMoZGF0YWJhc2UsIFZl
Y3Rvcjx1aW50OF90PiB7ICdhJywgJ2InIH0pOworICAgICAgICBBU1NFUlRfRVEodXBkYXRlUmVz
dWx0LCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pOworICAgIH0KKworICAg
IC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciByZS1vcGVuaW5nIHdpdGhvdXQg
bWlncmF0aW9uLgorICAgIHsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IGNyZWF0ZURh
dGFiYXNlU3luYyhwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGF0YWJhc2VSZXN1bHQpOwor
ICAgICAgICBhdXRvJiBkYXRhYmFzZSA9ICpkYXRhYmFzZVJlc3VsdDsKKworICAgICAgICBhdXRv
IGdldFJlc3VsdCA9IGdldFB1YmxpY1Rva2VuU3luYyhkYXRhYmFzZSk7CisgICAgICAgIEFTU0VS
VF9FUShnZXRSZXN1bHQsIChWZWN0b3I8dWludDhfdD4geyAnYScsICdiJyB9KSk7CisKKyAgICAg
ICAgYXV0byByb3dJZGVudGlmaWVycyA9IGdldFJvd0lkZW50aWZpZXJzU3luYyhkYXRhYmFzZSk7
CisgICAgICAgIEFTU0VSVF9FUShyb3dJZGVudGlmaWVycywgKEhhc2hTZXQ8dWludDY0X3Q+IHsg
MSwgMiwgMywgNCB9KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CiAKICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggZWQ4
MzI4MGYxMmUzZDA5M2I2ODBmZGFiNGVhNjFlODYwNzNiMGExMS4uMjQ5N2E0ODhhOGRkODIwYzIz
YjJhZDg1MTEyNDJjMmYxODJjMjhhNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTA5MCw2ICsxMDkwLDc1
IEBAIFRFU1RfRihXZWJQdXNoRFRlc3QsIFRvb01hbnlTaWxlbnRQdXNoZXNDYXVzZXNVbnN1YnNj
cmliZSkKICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJVbnN1YnNj
cmliZWQiXSk7CiB9CiAKK1RFU1RfRihXZWJQdXNoRFRlc3QsIEdldFB1c2hTdWJzY3JpcHRpb25X
aXRoTWlzbWF0Y2hlZFB1YmxpY1Rva2VuKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBo
dG1sU291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGxldCBwb3N0Tm90ZU1lc3NhZ2UgPSB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlLmJpbmQod2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMubm90ZSk7CisgICAgbGV0IGdldFB1c2hNYW5hZ2VyID0KKyAgICAgICAg
bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpCisgICAgICAgICAgICAu
dGhlbigoKSA9PiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSkKKyAgICAgICAgICAgIC50
aGVuKHJlZ2lzdHJhdGlvbiA9PiByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIpOworCisgICAgZnVu
Y3Rpb24gc3Vic2NyaWJlKCkKKyAgICB7CisgICAgICAgIGdldFB1c2hNYW5hZ2VyCisgICAgICAg
ICAgICAudGhlbihwdXNoTWFuYWdlciA9PiBwdXNoTWFuYWdlci5zdWJzY3JpYmUoeyB1c2VyVmlz
aWJsZU9ubHk6IHRydWUsIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZIH0p
KQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi50b0pTT04o
KSkKKyAgICAgICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkKKyAgICAgICAgICAgIC5jYXRj
aChlID0+IHBvc3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBnZXRTdWJzY3JpcHRpb24oKQorICAgIHsKKyAgICAgICAgZ2V0UHVzaE1hbmFnZXIKKyAg
ICAgICAgICAgIC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlv
bigpKQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbiA/IHN1
YnNjcmlwdGlvbi50b0pTT04oKSA6IG51bGwpCisgICAgICAgICAgICAudGhlbihwb3N0Tm90ZU1l
c3NhZ2UpCisgICAgICAgICAgICAuY2F0Y2goZSA9PiBwb3N0Tm90ZU1lc3NhZ2UoZS50b1N0cmlu
ZygpKSk7CisgICAgfQorCisgICAgcG9zdE5vdGVNZXNzYWdlKCdSZWFkeScpOworICAgIDwvc2Ny
aXB0PgorICAgIClIVE1MIl9zOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG1lc3NhZ2Ug
PSBuaWw7CisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV9ub3Rp
ZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIHJlY2VpdmVkTWVz
c2FnZSkgeworICAgICAgICBtZXNzYWdlID0gcmVjZWl2ZWRNZXNzYWdlOworICAgICAgICBnb3RN
ZXNzYWdlID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KGh0bWxTb3VyY2UsICIi
X3MpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNT
RVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUmVhZHkiXSk7CisKKyAgICBtZXNz
YWdlID0gbmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAInN1YnNjcmliZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOwor
ICAgIFJldGFpblB0cjxpZD4gc3Vic2NyaXB0aW9uID0gbWVzc2FnZTsKKyAgICBBU1NFUlRfRkFM
U0UoW3N1YnNjcmlwdGlvbiBpc0VxdWFsOltOU051bGwgbnVsbF1dKTsKKyAgICBBU1NFUlRfVFJV
RShbc3Vic2NyaXB0aW9uIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dICYmIFtz
dWJzY3JpcHRpb24gb2JqZWN0Rm9yS2V5OkAiZW5kcG9pbnQiXSk7CisKKyAgICBtZXNzYWdlID0g
bmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93ZWJWaWV3IGV2YWx1YXRlSmF2
YVNjcmlwdDpAImdldFN1YnNjcmlwdGlvbigpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vy
cm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2UpOwor
ICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWw6c3Vic2NyaXB0aW9uLmdldCgpXSk7CisK
KyAgICAvLyBJZiB0aGUgcHVibGljIHRva2VuIGNoYW5nZXMsIGFsbCBzdWJzY3JpcHRpb25zIHNo
b3VsZCBiZSBpbnZhbGlkYXRlZC4KKyAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRl
QW5kQ29uZmlndXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRh
ZW1vbi5zZXJ2aWNlIik7CisgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1
dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldFB1YmxpY1Rva2VuRm9yVGVz
dGluZywgZW5jb2RlU3RyaW5nKCJmb29iYXIiX3MpKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7Cisg
ICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAiZ2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNT
RVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpbTlNOdWxsIG51bGxdXSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457548</attachid>
            <date>2022-04-13 11:14:26 -0700</date>
            <delta_ts>2022-04-19 20:58:12 -0700</delta_ts>
            <desc>Patch feedback</desc>
            <filename>bug-239042-20220413111425.patch</filename>
            <type>text/plain</type>
            <size>42149</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY1NzQ1ZTc3NDIzMGVj
ZmIzOGZiYTA3YjlhMjY3MGYyYWYyZjU5MS4uOGQ4MWQ4NmFjNjI5MzdhZjFmN2Y2ZTZlYWMzY2Nh
M2MxNGZlYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTA5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29jaWF0ZWQgd2l0aCBvdXIgcHVzaCBz
ZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwKKyAgICAgICAgcHVzaCBz
dWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUgZnJvbSB0aGUgcHVibGljIHRva2Vu
LiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAgaGFwcGVuIGluIHZlcnkgcmFyZSBj
YXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisgICAgICAgIFRvIGltcGxlbWVudCB0
aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4gdXBkYXRlcyBmcm9tIG91ciBwdXNo
IHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24gdG8gUHVzaERhdGFiYXNlLiBQdXNo
RGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxldGVzIGFsbCBzdWJzY3JpcHRpb25z
IG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgSSBoYWQg
dG8gY2hhbmdlIHRoZSBzY2hlbWEgdG8gYWxsb3cgZm9yIHRoaXMuIG9wZW5BbmRNaWdyYXRlRGF0
YWJhc2VJbXBsIG5vdyBtaWdyYXRlcworICAgICAgICBleGlzdGluZyBkYXRhIG9uIHNjaGVtYSBj
aGFuZ2UgcmF0aGVyIHRoYW4gbnVraW5nIHRoZSB3aG9sZSBkYXRhYmFzZSBzbyB1c2VycyB3b24n
dCBsb3NlCisgICAgICAgIHRoZWlyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuCisKKyAgICAgICAg
KiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJh
c2U6OnVwZGF0ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4pOgorCiAyMDIyLTA0LTA3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdCBhbmQgcmVmYWN0b3Igc29tZSBVQSBzdHls
ZXMgYW5kIGxvZ2ljIGZvciBpbmplY3RpbmcgTGl2ZSBUZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5OWNmZDQ2
NTU3N2ViZjFiYjZkNDgxMzBmOWYxNDc5ODVlMTA0M2EuLjg4MzA1ZDAyMDAzZTJkNjhmNDVjZTc3
NjczMDhjMzRiNTkyNzY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDQtMDkg
IEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tl
biB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIHRoZSBwdWJsaWMgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIG91ciBw
dXNoIHNlcnZpY2UgY2hhbmdlcywgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIGFsbAorICAgICAgICBw
dXNoIHN1YnNjcmlwdGlvbnMsIHNpbmNlIHRoZXkgYWxsIGRlcml2ZSBmcm9tIHRoZSBwdWJsaWMg
dG9rZW4uIFRoaXMgaXMgb25seSBleHBlY3RlZCB0bworICAgICAgICBoYXBwZW4gaW4gdmVyeSBy
YXJlIGNhc2VzLCBlLmcuIGtleWNoYWluIGNvcnJ1cHRpb24uCisKKyAgICAgICAgVG8gaW1wbGVt
ZW50IHRoaXMsIHdlIG5vdyBsaXN0ZW4gZm9yIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGZyb20gb3Vy
IHB1c2ggc2VydmljZSwgYW5kIHBhc3MKKyAgICAgICAgdGhhdCBvbiB0byBQdXNoRGF0YWJhc2Uu
IFB1c2hEYXRhYmFzZSBwZXJzaXN0cyB0aGUgdG9rZW4gYW5kIGRlbGV0ZXMgYWxsIHN1YnNjcmlw
dGlvbnMgb24KKyAgICAgICAgdG9rZW4gY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAq
IFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1
c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAgICAqIHdlYnB1c2hkL0FwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUHVibGljVG9rZW46XSk6CisgICAgICAgICgtW19XS0FQ
U0Nvbm5lY3Rpb25EZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVJbmNvbWluZ01lc3NhZ2U6
XSk6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hT
ZXJ2aWNlLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tl
bik6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAg
ICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdWJs
aWNUb2tlbik6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcpOgorCiAyMDIyLTA0LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgdGhlIHNhbWUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBTZXJ2aWNlV29y
a2VyIG9wZW5XaW5kb3cgYW5kIG5hdmlnYXRlIGluIFVJUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCmluZGV4IDcwMDY4NDJhZTNm
NTExYTdlY2JiNWU0NGUzMzU1M2QwZDY5Zjc4YmYuLjA4YzA2ODJjY2VhZjUzM2FkOGVkZjFlYWI3
YWUwOGY3YzIzMTVhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0Nyb3Nz
VGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9T
Y29wZS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0co
Zm10LCAuLi4pIFJFTEVBU0VfTE9HKFB1c2gsICIlcCAtIFB1c2hEYXRhYmFzZTo6IiBmbXQsIHRo
aXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUihmbXQs
IC4uLikgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwg
dGhpcywgIyNfX1ZBX0FSR1NfXykKQEAgLTQ4LDExICs1MCwxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBjb25zdGV4cHIgaW50IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9u
ID0gMjsKLSNkZWZpbmUga0N1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uU3RyaW5nICIyIgotCi1z
dGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50c1td
ID0geworc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFT
dGF0ZW1lbnRzW10gPSB7CiAgICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywK
K307CisKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHB1c2hEYXRhYmFzZVNjaGVtYVYy
U3RhdGVtZW50c1tdID0gewogICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cygiCiAg
ICAgIiAgcm93SUQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCIKICAgICAiICBj
cmVhdGlvblRpbWUgSU5UIE5PVCBOVUxMLCIKQEAgLTc0LDkgKzc2LDIyIEBAIHN0YXRpYyBjb25z
dCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7CiAgICAg
IiAgZXhwaXJhdGlvblRpbWUgSU5ULCIKICAgICAiICBVTklRVUUoc2NvcGUsIHN1YnNjcmlwdGlv
blNldElEKSkiX3MsCiAgICAgIkNSRUFURSBJTkRFWCBTdWJzY3JpcHRpb25zX1N1YnNjcmlwdGlv
blNldElEX0luZGV4IE9OIFN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9uU2V0SUQpIl9zLAotICAg
ICJQUkFHTUEgdXNlcl92ZXJzaW9uID0gIiBrQ3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb25TdHJp
bmcgIiJfcwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNl
U2NoZW1hVjNTdGF0ZW1lbnRzW10gPSB7CisgICAgIkNSRUFURSBUQUJMRSBNZXRhZGF0YShrZXkg
VEVYVCwgdmFsdWUsIFVOSVFVRShrZXkpKSJfcywKK307CisKK3N0YXRpYyBjb25zdGV4cHIgU3Bh
bjxjb25zdCBBU0NJSUxpdGVyYWw+IHB1c2hEYXRhYmFzZVNjaGVtYVN0YXRlbWVudHNbXSA9IHsK
KyAgICB7IHB1c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50cyB9LAorICAgIHsgcHVzaERhdGFi
YXNlU2NoZW1hVjJTdGF0ZW1lbnRzIH0sCisgICAgeyBwdXNoRGF0YWJhc2VTY2hlbWFWM1N0YXRl
bWVudHMgfSwKK307CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1cnJlbnRQdXNoRGF0YWJhc2VW
ZXJzaW9uID0gc3RkOjpzaXplKHB1c2hEYXRhYmFzZVNjaGVtYVN0YXRlbWVudHMpOworCitzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBwdWJsaWNUb2tlbktleSA9ICJwdWJsaWNUb2tlbiJf
czsKKwogUHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25zdCAmCiB7CiAg
ICAgcmV0dXJuIHsKQEAgLTE1MCwyMyArMTY1LDI3IEBAIHN0YXRpYyBFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlRGF0YWJhc2U+LCBTaG91bGREZWxldGVBbmRSZXRyeT4gb3BlbkFuZE1pZ3JhdGVE
CiAgICAgICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKICAgICB9CiAKLSAgICBpZiAo
dmVyc2lvbiAmJiB2ZXJzaW9uICE9IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBhZGQgbWlncmF0aW9uIHdoZW4gd2UgbmVlZCBpdC4KKyAgICBpZiAodmVy
c2lvbiA8IDAgfHwgdmVyc2lvbiA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGb3VuZCB1bmV4cGVjdGVkIFB1c2hEYXRhYmFz
ZSB2ZXJzaW9uOiAlZCAoZXhwZWN0ZWQ6ICVkKSBhdCBwYXRoOiAlcyIsIHZlcnNpb24sIGN1cnJl
bnRQdXNoRGF0YWJhc2VWZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CiAgICAgfQogCi0g
ICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNl
VmVyc2lvbikgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYik7CiAg
ICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1l
bnQgOiBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKLSAgICAgICAgICAgIGlmICgh
ZGItPmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihQdXNoLCAiRXJyb3IgZXhlY3V0aW5nIFB1c2hEYXRhYmFzZSBEREwgc3RhdGVt
ZW50ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxl
dGVBbmRSZXRyeTo6WWVzKTsKKyAgICAgICAgZm9yIChhdXRvIGkgPSB2ZXJzaW9uOyBpIDwgY3Vy
cmVudFB1c2hEYXRhYmFzZVZlcnNpb247IGkrKykgeworICAgICAgICAgICAgZm9yIChhdXRvIHN0
YXRlbWVudCA6IHB1c2hEYXRhYmFzZVNjaGVtYVN0YXRlbWVudHNbaV0pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWRiLT5leGVjdXRlQ29tbWFuZChzdGF0ZW1lbnQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJFcnJvciBleGVjdXRpbmcgUHVzaERhdGFi
YXNlIERETCBzdGF0ZW1lbnQgJXMgYXQgcGF0aCAlczogJWQiLCBzdGF0ZW1lbnQuY2hhcmFjdGVy
cygpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRiLT5sYXN0RXJyb3IoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRyeTo6WWVzKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBp
ZiAoIWRiLT5leGVjdXRlQ29tbWFuZFNsb3cobWFrZVN0cmluZygiUFJBR01BIHVzZXJfdmVyc2lv
biA9ICIsIGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSkpCisgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihQdXNoLCAiRXJyb3Igc2V0dGluZyB1c2VyIHZlcnNpb24gZm9yIFB1c2hEYXRh
YmFzZSBhdCBwYXRoICVzOiAlZCIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGItPmxhc3RFcnJvcigp
KTsKKwogICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKICAgICB9CiAKQEAgLTI4MCwxMSAr
Mjk5LDEwMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KIHN0YXRpYyB2b2lkIGNvbXBs
ZXRlT25NYWluUXVldWUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChUKT4mJiBjb21wbGV0aW9uSGFu
ZGxlciwgVSYmIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KFdURk1vdmUocmVz
dWx0KSldKCkgbXV0YWJsZSB7CisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCA9IGNyb3Nz
VGhyZWFkQ29weShzdGQ6OmZvcndhcmQ8VT4ocmVzdWx0KSldKCkgbXV0YWJsZSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfSk7CiB9CiAKK3ZvaWQg
UHVzaERhdGFiYXNlOjp1cGRhdGVQdWJsaWNUb2tlbihTcGFuPGNvbnN0IHVpbnQ4X3Q+IHB1Ymxp
Y1Rva2VuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFB1YmxpY1Rva2VuQ2hhbmdlZCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgZGlzcGF0Y2hPbldvcmtRdWV1ZShbdGhpcywgbmV3UHVi
bGljVG9rZW4gPSBWZWN0b3I8dWludDhfdD4geyBwdWJsaWNUb2tlbiB9LCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IFB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm87
CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjdXJyZW50UHVibGljVG9rZW47CisgICAgICAgIGF1
dG8gc2NvcGUgPSBtYWtlU2NvcGVFeGl0KFsmY29tcGxldGlvbkhhbmRsZXIsICZyZXN1bHRdIHsK
KyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdCk7CisgICAgICAgIH0pOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
c3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHZhbHVlIEZST00gTWV0YWRhdGEg
V0hFUkUga2V5ID0gPyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0
KDEsIHB1YmxpY1Rva2VuS2V5KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNI
REJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgICAgICAgICAgY3VycmVudFB1YmxpY1Rva2VuID0gc3FsLT5jb2x1bW5CbG9iKDAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJlbnRQdWJsaWNUb2tlbiA9PSBuZXdQdWJs
aWNUb2tlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlJFUExBQ0UgSU5UTyBNZXRhZGF0YShr
ZXksIHZhbHVlKSBWQUxVRVMoPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzcWwKKyAgICAg
ICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIHB1YmxpY1Rva2VuS2V5KSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDIsIG5ld1B1YmxpY1Rva2VuKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9F
UlJPUigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkZhaWxlZCB0byBzYXZlIG5ldyBwdWJsaWMgdG9rZW46
ICVkIiwgbV9kYi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGFyZSB1cGRhdGluZyBhbiBv
bGQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2hlcmUgY3VycmVudFB1YmxpY1Rva2VuIGRvZXNu
J3QgZXhpc3QsIGp1c3QKKyAgICAgICAgLy8gc2F2ZSB0aGUgaW5pdGlhbCBwdWJsaWNUb2tlbiB3
aXRob3V0IGRlbGV0aW5nIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBub3RpZnlpbmcgdGhlIGNhbGxl
ciB0aGF0CisgICAgICAgIC8vIHRoZSB0b2tlbiBjaGFuZ2VkLgorICAgICAgICBpZiAoIWN1cnJl
bnRQdWJsaWNUb2tlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZGVsZXRlU3Vic2Ny
aXB0aW9uU2V0cyA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIkRFTEVURSBGUk9NIFN1YnNjcmlw
dGlvblNldHMiX3MpOworICAgICAgICAgICAgYXV0byBkZWxldGVTdWJzY3JpcHRpb25zID0gY2Fj
aGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9ucyJfcyk7CisKKyAg
ICAgICAgICAgIGlmICghZGVsZXRlU3Vic2NyaXB0aW9uU2V0cyB8fCAhZGVsZXRlU3Vic2NyaXB0
aW9ucykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZGVsZXRlU3Vic2NyaXB0aW9uU2V0cy0+c3RlcCgpICE9IFNRTElURV9ET05FIHx8IGRlbGV0
ZVN1YnNjcmlwdGlvbnMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGYWlsZWQgdG8gZGVsZXRlIHN1YnNjcmlwdGlvbnM6
ICVkIiwgbV9kYi0+bGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpZZXM7
CisgICAgICAgIH0KKworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCByZXN1bHQpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6
Z2V0UHVibGljVG9rZW4oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGlzcGF0Y2hPbldvcmtRdWV1ZShbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYik7CisgICAgICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1l
bnRPblF1ZXVlKCJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhZGF0YSBXSEVSRSBrZXkgPSA/Il9zKTsK
KyAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kVGV4dCgxLCBwdWJsaWNUb2tlbktleSkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigp
OworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgVmVjdG9yPHVpbnQ4X3Q+IHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgICAgICBpZiAoc3FsLT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+Y29sdW1uQmxv
YigwKTsKKworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShyZXN1bHQpKTsK
KyAgICB9KTsKK30KKwogdm9pZCBQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZChjb25zdCBQdXNo
UmVjb3JkJiByZWNvcmQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNo
UmVjb3JkPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBkaXNwYXRjaE9uV29ya1F1
ZXVlKFt0aGlzLCByZWNvcmQgPSBjcm9zc1RocmVhZENvcHkocmVjb3JkKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCmluZGV4IDMzZTQzYmU4
YWVmMGVmZGVhMmM4NzdiMGE1ODcwNjQ3N2I5MmI3OGQuLjgzNzM4OTNlMDE2ZGNlMDQzYTI5MTI0
ODUwN2FkNzZiY2Q1MTUxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFw
aS9QdXNoRGF0YWJhc2UuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9TcGFuLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CkBAIC03Niw2
ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgY3JlYXRl
KGNvbnN0IFN0cmluZyYgcGF0aCwgQ3JlYXRpb25IYW5kbGVyJiYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIH5QdXNoRGF0YWJhc2UoKTsKIAorICAgIGVudW0gY2xhc3MgUHVibGljVG9rZW5DaGFuZ2Vk
IDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVB1Ymxp
Y1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVibGlj
VG9rZW5DaGFuZ2VkKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQdWJsaWNUb2tl
bihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKaW5kZXggZTkw
ZWVlZDAxNDA3ODY1N2ExMThlYTZhM2Y0YzI5MDI3ZjZkNGJkZS4uYTg1YjY5ZDI5ODZhOTM4OTJh
ZDRjMDdlNDUyMzA2MjJlNDUwYWZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1
c2hEYWVtb25Db25zdGFudHMuaApAQCAtNTUsNiArNTUsNyBAQCBlbnVtIGNsYXNzIE1lc3NhZ2VU
eXBlIDogdWludDhfdCB7CiAgICAgSW5jcmVtZW50U2lsZW50UHVzaENvdW50LAogICAgIFJlbW92
ZUFsbFB1c2hTdWJzY3JpcHRpb25zLAogICAgIFJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3Jp
Z2luLAorICAgIFNldFB1YmxpY1Rva2VuRm9yVGVzdGluZywKIH07CiAKIGlubGluZSBib29sIG1l
c3NhZ2VUeXBlU2VuZHNSZXBseShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSkKQEAgLTc0LDYgKzc1
LDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3Nh
Z2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluY3JlbWVudFNpbGVudFB1c2hDb3VudDoK
ICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpSZW1vdmVBbGxQdXNoU3Vic2NyaXB0aW9uczoKICAgICBj
YXNlIE1lc3NhZ2VUeXBlOjpSZW1vdmVQdXNoU3Vic2NyaXB0aW9uc0Zvck9yaWdpbjoKKyAgICBj
YXNlIE1lc3NhZ2VUeXBlOjpTZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5hYmxlZDoKICAg
ICBjYXNlIE1lc3NhZ2VUeXBlOjpVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbjoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1t
CmluZGV4IGVmZjdlYWU1Y2ZmYTg3Nzc4YjY2NjJhYjZiMTU0ZTBkNGE0ZjA3ZDguLjQ2NjRmNTA4
NGYwYWMxZmY2YTcyMmY5ZDA2MTRkYzU3ZjM3Y2MyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtNDgsMTMgKzQ4
LDE1IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbm5lY3Rpb246KFdlYlB1c2hEOjpBcHBs
ZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbiAqKWNvbm5lCiAtICh2b2lkKWNvbm5lY3Rpb246KEFQU0Nv
bm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVQdWJsaWNUb2tlbjooTlNEYXRhICopcHVi
bGljVG9rZW4KIHsKICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKHB1YmxpY1Rva2VuKTsKKyAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlm
IChfY29ubmVjdGlvbiAmJiBwdWJsaWNUb2tlbi5sZW5ndGgpCisgICAgICAgIF9jb25uZWN0aW9u
LT5kaWRSZWNlaXZlUHVibGljVG9rZW4oVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHB1YmxpY1Rva2VuLmJ5dGVzKSwgcHVibGljVG9rZW4ubGVuZ3RoIH0pOwog
fQogCiAtICh2b2lkKWNvbm5lY3Rpb246KEFQU0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJl
Y2VpdmVJbmNvbWluZ01lc3NhZ2U6KEFQU0luY29taW5nTWVzc2FnZSAqKW1lc3NhZ2UKIHsKICAg
ICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgp
KTsKIAogICAgIGlmIChfY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5kZXggYjk1M2JiOWMxMmRkN2UyMmJkNjkx
MzA1NDQ4NzljN2RmNDZkOTRhMi4uMWY4ZTZlZjllMmUzZDA4NDg0YzExMDFmYjU4MjYyMDFjYmZm
Y2MzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9uV2Fr
aW5nVG9waWNzKFZlY3RvcjxTdHJpbmc+JiYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRUb3Bp
Y0xpc3RzKFRvcGljTGlzdHMmJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFB1YmxpY1Rva2Vu
Rm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJikgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJQdXNoRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgw
MWQ4NzgzNjQuLjc5NmQ1Y2QxMTY3YmYxZTA2NGRiZTFkNjdiNGJjYTc1ZGI2MGQzYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24u
bW0KQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAogTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbjo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCiB7CisgICAgZGlkUmVj
ZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90PiB7ICdhJywgJ2InLCAnYycgfSk7CiB9CiAK
IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246On5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkg
PSBkZWZhdWx0OwpAQCAtMTA0LDQgKzEwNSw5IEBAIHZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6c2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYgdG9waWNMaXN0cykKIHsKIH0KIAordm9p
ZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVj
dG9yPHVpbnQ4X3Q+JiYgdG9rZW4pCit7CisgICAgZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKFdURk1v
dmUodG9rZW4pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2UuaAppbmRleCBlNDQ1MDE5ZWM5ZTJjN2NiMWRlZjYyZDQxYzBhMWIxMTk3
YmE1NDliLi41MTgyMGYyMTFlOTZjZjI0MDc3MTJmODJiMjg5ZDI5Yzc4NjU4YjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKKysrIGIvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CiAg
ICAgdm9pZCBkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3Qm
KTsKIAorICAgIHZvaWQgc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYm
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJik7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25h
cnkgKnVzZXJJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0pOwogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5t
bSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0KaW5kZXggZTI2ODQ0ZDNi
Njg2ODk5ZmU3MzE3ZDlkYTVhNDdlNzM3ODJmMDMzZi4uZGIxYTgzZDRlZDYyYTg1YmM4ZjcwN2Fh
NDNlZDdlZTQ3M2M2NzI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
U2VydmljZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCkBA
IC0xMTYsNiArMTE2LDEwIEBAIFB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZShVbmlxdWVSZWY8UHVz
aFNlcnZpY2VDb25uZWN0aW9uPiYmIHB1c2hTZXJ2aWNlQ29ubmVjdGlvCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcik7CiAKKyAgICBtX2Nvbm5lY3Rp
b24tPnN0YXJ0TGlzdGVuaW5nRm9yUHVibGljVG9rZW4oW3RoaXNdKGF1dG8mJiB0b2tlbikgewor
ICAgICAgICBkaWRSZWNlaXZlUHVibGljVG9rZW4oV1RGTW92ZSh0b2tlbikpOworICAgIH0pOwor
CiAgICAgbV9jb25uZWN0aW9uLT5zdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhbdGhpc10o
TlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKSB7CiAgICAgICAgIGRpZFJl
Y2VpdmVQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8pOwogICAgIH0pOwpAQCAtNjIxLDYgKzYy
NSwyNCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxSYXdQdXNoTWVzc2FnZT4gbWFrZVJhd1B1c2hN
ZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aQogICAgIHJldHVybiBtZXNzYWdlOwogfQog
Cit2b2lkIFB1c2hTZXJ2aWNlOjpzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4
X3Q+JiYgdG9rZW4pCit7CisgICAgbV9jb25uZWN0aW9uLT5zZXRQdWJsaWNUb2tlbkZvclRlc3Rp
bmcoV1RGTW92ZSh0b2tlbikpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVi
bGljVG9rZW4oVmVjdG9yPHVpbnQ4X3Q+JiYgdG9rZW4pCit7CisgICAgbV9kYXRhYmFzZS0+dXBk
YXRlUHVibGljVG9rZW4odG9rZW4sIFt0aGlzXShhdXRvIHJlc3VsdCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmIChyZXN1bHQgPT0gUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUmVjZWl2ZWQgZXhwZWN0ZWQgcHVibGlj
IHRva2VuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiUHVibGljIHRva2VuIGNoYW5nZWQ7IGludmFsaWRhdGVkIGFs
bCBleGlzdGluZyBwdXNoIHN1YnNjcmlwdGlvbnMiKTsKKyAgICAgICAgdXBkYXRlVG9waWNMaXN0
cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFtdKCkgeyB9KTsKKyAgICB9KTsKK30KKwogdm9p
ZCBQdXNoU2VydmljZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNE
aWN0aW9uYXJ5KiB1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gbWVzc2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2Fn
ZSh0b3BpYywgdXNlckluZm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZUNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLmgKaW5kZXggMTk4MTQzZjU2OTdjZDI4YzY5MjhkNDU2OGMyMWMzMjU0OTIw
ZDIwZi4uNTQzYmUwNjA1Mzk5YzA5MmE1NDhmYmZhYTQ1YWFiN2FlYmU5ODA1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC00Myw2ICs0
Myw3IEBAIG5hbWVzcGFjZSBXZWJQdXNoRCB7CiBjbGFzcyBQdXNoU2VydmljZUNvbm5lY3Rpb24g
OiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgdXNpbmcgUHVibGljVG9rZW5IYW5k
bGVyID0gRnVuY3Rpb248dm9pZChWZWN0b3I8dWludDhfdD4mJik+OwogICAgIHVzaW5nIEluY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChOU1N0cmluZyAqLCBOU0RpY3Rp
b25hcnkgKik+OwogCiAgICAgUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwpAQCAt
NzQsMTAgKzc1LDE2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRUb3Bp
Y0xpc3RzKFRvcGljTGlzdHMmJikgPSAwOwogCisgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvclB1
YmxpY1Rva2VuKFB1YmxpY1Rva2VuSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVQdWJs
aWNUb2tlbihWZWN0b3I8dWludDhfdD4mJik7CisgICAgdmlydHVhbCB2b2lkIHNldFB1YmxpY1Rv
a2VuRm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJik7CisKICAgICB2b2lkIHN0YXJ0TGlzdGVu
aW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYpOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1
c2VySW5mbyk7CiAKIHByaXZhdGU6CisgICAgUHVibGljVG9rZW5IYW5kbGVyIG1fcHVibGljVG9r
ZW5IYW5kbGVyOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3BlbmRpbmdQdWJsaWNUb2tlbjsKICAg
ICBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
OwogICAgIERlcXVlPHN0ZDo6cGFpcjxSZXRhaW5QdHI8TlNTdHJpbmc+LCBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5Pj4+IG1fcGVuZGluZ1B1c2hlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IDkyZjgxNDI3N2E4MzgxNTMxNjg4
YjBlNDg1MTgyZDQzZDg1Y2M4NjguLjg4ZjI3ZWVjM2Y4ZDdjNWIwYzQxODg2MDk4NjA2MTA5ZDk2
NDY3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25u
ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0
aW9uLm1tCkBAIC0zNyw2ICszNywzMCBAQCBQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2
aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKICAgICByZXR1cm4gUHVzaENyeXB0
bzo6Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKIH0KIAordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rp
b246OnN0YXJ0TGlzdGVuaW5nRm9yUHVibGljVG9rZW4oUHVibGljVG9rZW5IYW5kbGVyJiYgaGFu
ZGxlcikKK3sKKyAgICBtX3B1YmxpY1Rva2VuSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CisK
KyAgICBpZiAobV9wZW5kaW5nUHVibGljVG9rZW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3B1YmxpY1Rva2VuSGFuZGxlcihzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1B1Ymxp
Y1Rva2VuLCB7IH0pKTsKK30KKwordm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OmRpZFJlY2Vp
dmVQdWJsaWNUb2tlbihWZWN0b3I8dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBpZiAoIW1fcHVi
bGljVG9rZW5IYW5kbGVyKSB7CisgICAgICAgIG1fcGVuZGluZ1B1YmxpY1Rva2VuID0gV1RGTW92
ZSh0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3B1YmxpY1Rva2VuSGFu
ZGxlcihXVEZNb3ZlKHRva2VuKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpz
ZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpCit7Cit9CisKIHZvaWQg
UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5oCmluZGV4IDA2NjJmMTNlOTgzOTQ5MDBjNTQxZmFiZGU5NTZlODVjOTY2MmRi
MzMuLmY0OWRlMmU3ZDFmMDQzNGJhNWNiYzg2NzJhM2I3NzIzNGI5ZmFlOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluY3JlbWVudFNpbGVudFB1c2hDb3VudChDbGllbnRDb25uZWN0aW9uKiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNp
Z25lZCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlQWxsUHVzaFN1YnNjcmlwdGlvbnMoQ2xpZW50Q29u
bmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKICAgICB2b2lk
IHJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVu
c2lnbmVkKT4mJik7CisgICAgdm9pZCBzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoQ2xpZW50Q29u
bmVjdGlvbiosIGNvbnN0IFN0cmluZyYgcHVibGljVG9rZW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKICAgICB2b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShTdHJpbmdWaWV3KTsK
ICAgICB2b2lkIGJyb2FkY2FzdEFsbENvbm5lY3Rpb25JZGVudGl0aWVzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggNzg1MzJkMDRhZjYxNzBjMTg4ZjhjOTEz
NjlhODIxMDc5MmQwYmJhMC4uNGNlYzY0MTE1ZGZjNWM5NWVlOGJlNTJkNGJlZWQyYTFjZTk5NWM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMTM0LDExICsx
MzQsMjEgQEAgQVJHVU1FTlRTKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSkKIFJFUExZKHVu
c2lnbmVkKQogRU5ECiAKK0ZVTkNUSU9OKHNldFB1YmxpY1Rva2VuRm9yVGVzdGluZykKK0FSR1VN
RU5UUyhTdHJpbmcpCitSRVBMWSgpCitFTkQKKworCiAjdW5kZWYgRlVOQ1RJT04KICN1bmRlZiBB
UkdVTUVOVFMKICN1bmRlZiBSRVBMWQogI3VuZGVmIEVORAogCisjZGVmaW5lIEVNUFRZX1JFUExZ
KG1mKSBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgbWY6OmVuY29kZVJlcGx5KCkgeyByZXR1cm4g
eyB9OyB9CitFTVBUWV9SRVBMWShzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpOworI3VuZGVmIEVN
UFRZX1JFUExZCisKIFdlYlB1c2hEOjpFbmNvZGVkTWVzc2FnZSBlY2hvVHdpY2U6OmVuY29kZVJl
cGx5KFN0cmluZyByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVy
OwpAQCAtNDQ1LDYgKzQ1NSw5IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdl
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBN
ZXNzYWdlVHlwZTo6UmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW46CiAgICAgICAgIGhh
bmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6cmVtb3ZlUHVzaFN1YnNj
cmlwdGlvbnNGb3JPcmlnaW4+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZN
b3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdl
V2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjpzZXRQdWJsaWNUb2tlbkZvclRlc3Rpbmc+KGNsaWVudENv
bm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtNzIyLDYgKzczNSwxOSBAQCB2b2lkIERhZW1vbjo6cmVt
b3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgY29ucwogICAgIH0pOwogfQogCit2b2lkIERhZW1vbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0
aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgcmVwbHlTZW5kZXIpCit7CisgICAgcnVuQWZ0ZXJTdGFydGlu
Z1B1c2hTZXJ2aWNlKFt0aGlzLCBwdWJsaWNUb2tlbiwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJl
cGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7Cisg
ICAgICAgICAgICByZXBseVNlbmRlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rv
cjx1aW50OF90PiB7IHB1YmxpY1Rva2VuLnV0ZjgoKS5ieXRlcygpIH0pOworICAgICAgICByZXBs
eVNlbmRlcigpOworICAgIH0pOworfQorCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRvQ2xp
ZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiB7CiAgICAgYXV0byBj
bGllbnRDb25uZWN0aW9uID0gbV9jb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiOTFmZTRjYWMz
YWE5MjVlNjc0YTQ1NTkyYjQ4N2E3MjkyZDhmZjUyLi4yZWY1MDliYjFjMmY5NjczZjE0ZWQ4Yjll
MDE5MTQ4Mzk3YjkwYTU5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjItMDQtMDkgIEJlbiBOaGFtICA8bmhhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1
c2hkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkw
NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBU
ZXN0IHRoYXQgcHVibGljIHRva2VuIHVwZGF0ZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkgYXQgdGhl
IFB1c2hEYXRhYmFzZSBhbmQgV2ViUHVzaERhZW1vbiBsZXZlbHMKKyAgICAgICAgIC0gVGVzdCBz
Y2hlbWEgbWlncmF0aW9uIGluIFB1c2hEYXRhYmFzZQorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpjcmVhdGVEYXRhYmFzZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0UHVibGlj
VG9rZW5TeW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnVwZGF0ZVB1YmxpY1Rva2VuU3lu
Yyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZVN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2V0Um93SWRlbnRpZmllcnNT
eW5jKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFB1Ymxp
Y1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnVwZGF0
ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6
OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToK
KwogMjAyMi0wNC0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01lcmdlLVF1ZXVlXSBVcGRhdGUgaGVhZCBhbmQgYmFzZSByZWZlcmVuY2VzIGluIFBS
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFi
YXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2Uu
Y3BwCmluZGV4IDcxZWZlYWNjZmI4N2NkZmE5YTM2OGY4YjgzODczYjRlNWEzYWJmZDMuLjkxMTBj
ZDBlMzhmMzI5NjA1MzZlMWZjMWMxMTEwYzkyNzEwMWNiMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJh
c2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8aXRl
cmF0b3I+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKQEAgLTQzLDYgKzQ0LDc3IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVRlbXBvcmFyeURh
dGFiYXNlUGF0aCgpCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8UHVzaERhdGFiYXNlPiBjcmVhdGVEYXRhYmFzZVN5bmMoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IHJlc3VsdDsKKyAgICBib29sIGRv
bmUgPSBmYWxzZTsKKworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmZG9uZSwgJnJl
c3VsdF0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAg
ICByZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
fSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0
YWJhc2UpCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGdl
dFJlc3VsdDsKKworICAgIGRhdGFiYXNlLmdldFB1YmxpY1Rva2VuKFsmZG9uZSwgJmdldFJlc3Vs
dF0oYXV0byYmIHJlc3VsdCkgeworICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICByZXR1cm4gZ2V0UmVzdWx0OworfQorCitzdGF0aWMgUHVzaERhdGFiYXNlOjpQdWJsaWNU
b2tlbkNoYW5nZWQgdXBkYXRlUHVibGljVG9rZW5TeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2Us
IFNwYW48Y29uc3QgdWludDhfdD4gdG9rZW4pCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7Cisg
ICAgYXV0byB1cGRhdGVSZXN1bHQgPSBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6
Tm87CisKKyAgICBkYXRhYmFzZS51cGRhdGVQdWJsaWNUb2tlbih0b2tlbiwgWyZkb25lLCAmdXBk
YXRlUmVzdWx0XShhdXRvJiYgcmVzdWx0KSB7CisgICAgICAgIHVwZGF0ZVJlc3VsdCA9IFdURk1v
dmUocmVzdWx0KTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVu
KCZkb25lKTsKKworICAgIHJldHVybiB1cGRhdGVSZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3lu
YyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBT
dHJpbmcmIHNjb3BlKQoreworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9u
YWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OworCisgICAgZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUoYnVuZGxlSUQsIHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRd
KHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJiByZXN1bHQpIHsKKyAgICAgICAgZ2V0UmVzdWx0
ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBV
dGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIGdldFJlc3VsdDsKK30KKworc3RhdGljIEhh
c2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFi
YXNlKQoreworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJv
d0lkZW50aWZpZXJzOworCisgICAgZGF0YWJhc2UuZ2V0SWRlbnRpZmllcnMoWyZkb25lLCAmcm93
SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYgaWRlbnRp
ZmllcnMpIHsKKyAgICAgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAg
ICAgICAgICAgIHJvd0lkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyLnRvVUludDY0KCkpOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAg
cmV0dXJuIHJvd0lkZW50aWZpZXJzOworfQorCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0VG9w
aWNzU3luYyhQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKQogewogICAgIGJvb2wgZG9uZSA9IGZhbHNl
OwpAQCAtNjYsNyArMTM4LDcgQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJf
cywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8v
d3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIi
X3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCiAgICAgICAgICJ0b3BpYzEi
X3MsCiAgICAgICAgIHsgNSwgNiB9LAogICAgICAgICB7IDYsIDcgfSwKQEAgLTc4LDggKzE1MCw4
IEBAIHB1YmxpYzoKICAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCiAgICAgICAgICJodHRw
czovL3d3dy53ZWJraXQub3JnIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9i
bG9nIl9zLAotICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQ0Il9zLAotICAgICAgICAidG9w
aWM0Il9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQyIl9zLAorICAgICAgICAidG9w
aWMyIl9zLAogICAgICAgICB7IDE0LCAxNSB9LAogICAgICAgICB7IDE2LCAxNyB9LAogICAgICAg
ICB7IDE4LCAxOSB9LApAQCAtOTAsOCArMTYyLDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFw
cGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKICAgICAg
ICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMiX3MsCi0gICAgICAgICJodHRwczovL3B1c2hF
bmRwb2ludDEiX3MsCi0gICAgICAgICJ0b3BpYzIiX3MsCisgICAgICAgICJodHRwczovL3B1c2hF
bmRwb2ludDMiX3MsCisgICAgICAgICJ0b3BpYzMiX3MsCiAgICAgICAgIHsgMCwgMSB9LAogICAg
ICAgICB7IDEsIDIgfSwKICAgICAgICAgeyAyLCAzIH0sCkBAIC0xMDMsOCArMTc1LDggQEAgcHVi
bGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3
LmFwcGxlLmNvbSJfcywKICAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3Ms
Ci0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCi0gICAgICAgICJ0b3BpYzMiX3Ms
CisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDQiX3MsCisgICAgICAgICJ0b3BpYzQiX3Ms
CiAgICAgICAgIHsgOSwgMTAgfSwKICAgICAgICAgeyAxMCwgMTEgfSwKICAgICAgICAgeyAxMSwg
MTIgfSwKQEAgLTExNiw2ICsxODgsMTYgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGlu
c2VydFJlc3VsdDQ7CiAKKyAgICBWZWN0b3I8dWludDhfdD4gZ2V0UHVibGljVG9rZW4oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdldFB1YmxpY1Rva2VuU3luYygqZGIpOworICAgIH0KKworICAg
IFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2VkIHVwZGF0ZVB1YmxpY1Rva2VuKFNwYW48
Y29uc3QgdWludDhfdD4gdG9rZW4pCisgICAgeworICAgICAgICByZXR1cm4gdXBkYXRlUHVibGlj
VG9rZW5TeW5jKCpkYiwgdG9rZW4pOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJl
Y29yZD4gaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCkKICAgICB7CiAgICAg
ICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtMTYwLDMxICsyNDIsMTIgQEAgcHVibGljOgogCiAg
ICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQogICAg
IHsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4gZ2V0UmVzdWx0OwotCi0gICAgICAgIGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50
aWZpZXJBbmRTY29wZShidW5kbGVJRCwgc2NvcGUsIFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpv
cHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkgewotICAgICAgICAgICAgZ2V0UmVzdWx0ID0g
V1RGTW92ZShyZXN1bHQpOwotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwot
ICAgICAgICBVdGlsOjpydW4oJmRvbmUpOwotCi0gICAgICAgIHJldHVybiBnZXRSZXN1bHQ7Cisg
ICAgICAgIHJldHVybiBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoKmRi
LCBidW5kbGVJRCwgc2NvcGUpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJv
d0lkZW50aWZpZXJzKCkKICAgICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAg
ICBIYXNoU2V0PHVpbnQ2NF90PiByb3dJZGVudGlmaWVyczsKLQotICAgICAgICBkYi0+Z2V0SWRl
bnRpZmllcnMoWyZkb25lLCAmcm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byBpZGVu
dGlmaWVyIDogaWRlbnRpZmllcnMpCi0gICAgICAgICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRk
KGlkZW50aWZpZXIudG9VSW50NjQoKSk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJvd0lk
ZW50aWZpZXJzOworICAgICAgICByZXR1cm4gZ2V0Um93SWRlbnRpZmllcnNTeW5jKCpkYik7CiAg
ICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0VG9waWNzKCkKQEAgLTIzNiwxMyArMjk5LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBTZXRVcCgpIGZpbmFsCiAgICAgewotICAgICAgICBib29s
IGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUobWFrZVRlbXBvcmFy
eURhdGFiYXNlUGF0aCgpLCBbdGhpcywgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJh
c2U+JiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAgIGRiID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0g
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigm
ZG9uZSk7Ci0KKyAgICAgICAgZGIgPSBjcmVhdGVEYXRhYmFzZVN5bmMoU1FMaXRlRGF0YWJhc2U6
OmluTWVtb3J5UGF0aCgpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoZGIpOwogICAgICAgICBBU1NF
UlRfVFJVRShpbnNlcnRSZXN1bHQxID0gaW5zZXJ0UmVjb3JkKHJlY29yZDEpKTsKICAgICAgICAg
QVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MiA9IGluc2VydFJlY29yZChyZWNvcmQyKSk7CkBAIC0y
NjYsNiArMzIzLDM2IEBAIHN0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYg
YSwgY29uc3QgUHVzaFJlY29yZCYgYikKICAgICAgICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBi
LmV4cGlyYXRpb25UaW1lOwogfQogCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgVXBkYXRlUHVi
bGljVG9rZW4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGluaXRpYWxUb2tlbiA9IHsgJ2EnLCAn
YicsICdjJyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtb2RpZmllZFRva2VuID0geyAnZCcsICdl
JywgJ2YnIH07CisKKyAgICAvLyBTZXR0aW5nIHRoZSBpbml0aWFsIHB1YmxpYyB0b2tlbiBzaG91
bGRuJ3QgZGVsZXRlIGFueXRoaW5nLgorICAgIGF1dG8gdXBkYXRlUmVzdWx0MSA9IHVwZGF0ZVB1
YmxpY1Rva2VuKGluaXRpYWxUb2tlbik7CisgICAgRVhQRUNUX0VRKHVwZGF0ZVJlc3VsdDEsIFB1
c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2VkOjpObyk7CisgICAgRVhQRUNUX0VRKGdldFJv
d0lkZW50aWZpZXJzKCksIChIYXNoU2V0PHVpbnQ2NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisg
ICAgYXV0byBnZXRSZXN1bHQxID0gZ2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0
UmVzdWx0MSwgaW5pdGlhbFRva2VuKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHNhbWUgdG9rZW4g
YWdhaW4gc2hvdWxkIGRvIG5vdGhpbmcuCisgICAgYXV0byB1cGRhdGVSZXN1bHQyID0gdXBkYXRl
UHVibGljVG9rZW4oaW5pdGlhbFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0Miwg
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0
Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisK
KyAgICBhdXRvIGdldFJlc3VsdDIgPSBnZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShn
ZXRSZXN1bHQyLCBpbml0aWFsVG9rZW4pOworCisgICAgLy8gQ2hhbmdpbmcgdGhlIHB1YmxpYyB0
b2tlbiBhZnRlcndhcmRzIHNob3VsZCBkZWxldGUgZXZlcnl0aGluZy4KKyAgICBhdXRvIHVwZGF0
ZVJlc3VsdDMgPSB1cGRhdGVQdWJsaWNUb2tlbihtb2RpZmllZFRva2VuKTsKKyAgICBFWFBFQ1Rf
RVEodXBkYXRlUmVzdWx0MywgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Olllcyk7
CisgICAgRVhQRUNUX1RSVUUoZ2V0Um93SWRlbnRpZmllcnMoKS5pc0VtcHR5KCkpOworCisgICAg
YXV0byBnZXRSZXN1bHQzID0gZ2V0UHVibGljVG9rZW4oKTsKKyAgICBFWFBFQ1RfRVEoZ2V0UmVz
dWx0MywgbW9kaWZpZWRUb2tlbik7Cit9CisKIFRFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBJbnNl
cnRSZWNvcmQpCiB7CiAgICAgYXV0byBleHBlY3RlZFJlY29yZDEgPSByZWNvcmQxOwpAQCAtNDAz
LDEzICs0OTAsNyBAQCBURVNUKFB1c2hEYXRhYmFzZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIGNv
bnN0ZXhwciB1bnNpZ25lZCByZWNvcmRDb3VudCA9IDI1NjsKIAogICAgIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRv
bmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVS
ZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7
Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAg
ICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsK
KyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAg
ICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CiAKICAgICAgICAgYXV0byYgZGF0YWJh
c2UgPSAqY3JlYXRlUmVzdWx0OwpAQCAtNDQyLDEzICs1MjMsNyBAQCBURVNUKFB1c2hEYXRhYmFz
ZSwgTWFueUluRmxpZ2h0T3BzKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAgICBib29sIGRvbmUgPSBmYWxz
ZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZk
b25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7Ci0gICAgICAg
ICAgICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKLSAgICAgICAgICAgIGRvbmUg
PSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAg
YXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0aCk7CiAgICAgICAgIEFT
U0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CiAKICAgICAgICAgYXV0byB0b3BpY3MgPSBnZXRUb3Bp
Y3NTeW5jKCpjcmVhdGVSZXN1bHQpOwpAQCAtNDY3LDEzICs1NDIsNyBAQCBURVNUKFB1c2hEYXRh
YmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKICAgICB9CiAKICAgICB7Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKLSAgICAgICAg
Ym9vbCBkb25lID0gZmFsc2U7Ci0gICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsm
Y3JlYXRlUmVzdWx0LCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRh
YmFzZSkgewotICAgICAgICAgICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7Ci0g
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFV0aWw6OnJ1bigm
ZG9uZSk7CisgICAgICAgIGF1dG8gY3JlYXRlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBh
dGgpOwogICAgICAgICBBU1NFUlRfVFJVRShjcmVhdGVSZXN1bHQpOwogICAgIH0KIApAQCAtNDkx
LDYgKzU2MCw3NCBAQCBURVNUKFB1c2hEYXRhYmFzZSwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25n
cmFkZSkKICAgICB9CiB9CiAKK3N0YXRpYyBib29sIGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVu
dHMoU3RyaW5nIHBhdGgsIEFTQ0lJTGl0ZXJhbCogc3RhdGVtZW50cywgc2l6ZV90IGNvdW50KQor
eworICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAgIGRiLm9wZW4ocGF0aCk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKCFkYi5leGVjdXRl
Q29tbWFuZChzdGF0ZW1lbnRzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWNxdWlyZWQgYnkgcnVubmluZyAuZHVtcCBm
cm9tIHRoZSBzcWxpdGUzIHNoZWxsIG9uIGEgVjIgZGF0YWJhc2UuCitzdGF0aWMgQVNDSUlMaXRl
cmFsIHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50c1tdID0geworICAgICJDUkVBVEUgVEFCTEUgU3Vi
c2NyaXB0aW9uU2V0cyggIHJvd0lEIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwg
IGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsICBidW5kbGVJRCBURVhUIE5PVCBOVUxMLCAgc2Vj
dXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwgIHNpbGVudFB1c2hDb3VudCBJTlQgTk9UIE5VTEws
ICBVTklRVUUoYnVuZGxlSUQsIHNlY3VyaXR5T3JpZ2luKSkiX3MsCisgICAgIklOU0VSVCBJTlRP
IFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKDEsMTY0OTU0MTAwMSwnY29tLmFwcGxlLndlYmFwcCcs
J2h0dHBzOi8vd3d3LmFwcGxlLmNvbScsMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlw
dGlvblNldHMgVkFMVUVTKDIsMTY0OTU0MTAwMSwnY29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8v
d3d3LndlYmtpdC5vcmcnLDApIl9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25TZXRz
IFZBTFVFUygzLDE2NDk1NDEwMDEsJ2NvbS5hcHBsZS5TYWZhcmknLCdodHRwczovL3d3dy5hcHBs
ZS5jb20nLDApIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucyggIHJvd0lEIElO
VEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5V
TEwsICBzdWJzY3JpcHRpb25TZXRJRCBJTlQgTk9UIE5VTEwsICBzY29wZSBURVhUIE5PVCBOVUxM
LCAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwgIHRvcGljIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCAg
c2VydmVyVkFQSURQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwgIGNsaWVudFB1YmxpY0tleSBCTE9C
IE5PVCBOVUxMLCAgY2xpZW50UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCAgc2hhcmVkQXV0aFNl
Y3JldCBCTE9CIE5PVCBOVUxMLCAgZXhwaXJhdGlvblRpbWUgSU5ULCAgVU5JUVVFKHNjb3BlLCBz
dWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZB
TFVFUygxLDE2NDk1NDEwMDEsMSwnaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZScsJ2h0dHBz
Oi8vcHVzaEVuZHBvaW50MScsJ3RvcGljMScsWCcwNTA2JyxYJzA2MDcnLFgnMDcwOCcsWCcwODA5
JyxOVUxMKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoMiwxNjQ5
NTQxMDAxLDIsJ2h0dHBzOi8vd3d3LndlYmtpdC5vcmcvYmxvZycsJ2h0dHBzOi8vcHVzaEVuZHBv
aW50MicsJ3RvcGljMicsWCcwZTBmJyxYJzEwMTEnLFgnMTIxMycsWCcxNDE1JyxOVUxMKSJfcywK
KyAgICAiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoMywxNjQ5NTQxMDAxLDMsJ2h0
dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMnLCdodHRwczovL3B1c2hFbmRwb2ludDMnLCd0b3BpYzMn
LFgnMDAwMScsWCcwMTAyJyxYJzAyMDMnLFgnMDQwNScsMTY0MzM1MDAwMCkiX3MsCisgICAgIklO
U0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKDQsMTY0OTU0MTAwMSwzLCdodHRwczovL3d3
dy5hcHBsZS5jb20vaXBob25lJywnaHR0cHM6Ly9wdXNoRW5kcG9pbnQ0JywndG9waWM0JyxYJzA5
MGEnLFgnMGEwYicsWCcwYjBjJyxYJzBjMGQnLE5VTEwpIl9zLAorICAgICJERUxFVEUgRlJPTSBz
cWxpdGVfc2VxdWVuY2UiX3MsCisgICAgIklOU0VSVCBJTlRPIHNxbGl0ZV9zZXF1ZW5jZSBWQUxV
RVMoJ1N1YnNjcmlwdGlvblNldHMnLDMpIl9zLAorICAgICJJTlNFUlQgSU5UTyBzcWxpdGVfc2Vx
dWVuY2UgVkFMVUVTKCdTdWJzY3JpcHRpb25zJyw0KSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1
YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURfSW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJz
Y3JpcHRpb25TZXRJRCkiX3MsCisgICAgIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAyIl9zLAorfTsK
KworVEVTVChQdXNoRGF0YWJhc2UsIENhbk1pZ3JhdGVWMkRhdGFiYXNlVG9DdXJyZW50U2NoZW1h
KQoreworICAgIGF1dG8gcGF0aCA9IG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgoKTsKKyAgICBB
U1NFUlRfVFJVRShjcmVhdGVEYXRhYmFzZUZyb21TdGF0ZW1lbnRzKHBhdGgsIHB1c2hEYXRhYmFz
ZVYyU3RhdGVtZW50cywgc3RkOjpzaXplKHB1c2hEYXRhYmFzZVYyU3RhdGVtZW50cykpKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciBtaWdyYXRpbmcuCisgICAg
eworICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgp
OworICAgICAgICBBU1NFUlRfVFJVRShkYXRhYmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRh
dGFiYXNlID0gKmRhdGFiYXNlUmVzdWx0OworCisgICAgICAgIGF1dG8gcmVjb3JkUmVzdWx0ID0g
Z2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGVTeW5jKGRhdGFiYXNlLCAiY29tLmFw
cGxlLlNhZmFyaSJfcywgImh0dHBzOi8vd3d3LndlYmtpdC5vcmcvYmxvZyJfcyk7CisgICAgICAg
IEFTU0VSVF9UUlVFKHJlY29yZFJlc3VsdCk7CisgICAgICAgIEFTU0VSVF9FUShyZWNvcmRSZXN1
bHQtPnRvcGljLCAidG9waWMyIl9zKTsKKworICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0g
Z2V0Um93SWRlbnRpZmllcnNTeW5jKGRhdGFiYXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lk
ZW50aWZpZXJzLCAoSGFzaFNldDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsKKworICAgICAg
ICAvLyBTZXR0aW5nIHRoZSBpbml0aWFsIHRva2VuIHNob3VsZCByZXR1cm4gUHVibGljVG9rZW5D
aGFuZ2VkOjpOby4KKyAgICAgICAgYXV0byB1cGRhdGVSZXN1bHQgPSB1cGRhdGVQdWJsaWNUb2tl
blN5bmMoZGF0YWJhc2UsIFZlY3Rvcjx1aW50OF90PiB7ICdhJywgJ2InIH0pOworICAgICAgICBB
U1NFUlRfRVEodXBkYXRlUmVzdWx0LCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6
Tm8pOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSByZWNvcmRzIGFyZSB0aGVyZSBhZnRlciBy
ZS1vcGVuaW5nIHdpdGhvdXQgbWlncmF0aW9uLgorICAgIHsKKyAgICAgICAgYXV0byBkYXRhYmFz
ZVJlc3VsdCA9IGNyZWF0ZURhdGFiYXNlU3luYyhwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
ZGF0YWJhc2VSZXN1bHQpOworICAgICAgICBhdXRvJiBkYXRhYmFzZSA9ICpkYXRhYmFzZVJlc3Vs
dDsKKworICAgICAgICBhdXRvIGdldFJlc3VsdCA9IGdldFB1YmxpY1Rva2VuU3luYyhkYXRhYmFz
ZSk7CisgICAgICAgIEFTU0VSVF9FUShnZXRSZXN1bHQsIChWZWN0b3I8dWludDhfdD4geyAnYScs
ICdiJyB9KSk7CisKKyAgICAgICAgYXV0byByb3dJZGVudGlmaWVycyA9IGdldFJvd0lkZW50aWZp
ZXJzU3luYyhkYXRhYmFzZSk7CisgICAgICAgIEFTU0VSVF9FUShyb3dJZGVudGlmaWVycywgKEhh
c2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hE
YWVtb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hE
YWVtb24ubW0KaW5kZXggZWQ4MzI4MGYxMmUzZDA5M2I2ODBmZGFiNGVhNjFlODYwNzNiMGExMS4u
MjQ5N2E0ODhhOGRkODIwYzIzYjJhZDg1MTEyNDJjMmYxODJjMjhhNiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpA
QCAtMTA5MCw2ICsxMDkwLDc1IEBAIFRFU1RfRihXZWJQdXNoRFRlc3QsIFRvb01hbnlTaWxlbnRQ
dXNoZXNDYXVzZXNVbnN1YnNjcmliZSkKICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFs
VG9TdHJpbmc6QCJVbnN1YnNjcmliZWQiXSk7CiB9CiAKK1RFU1RfRihXZWJQdXNoRFRlc3QsIEdl
dFB1c2hTdWJzY3JpcHRpb25XaXRoTWlzbWF0Y2hlZFB1YmxpY1Rva2VuKQoreworICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBodG1sU291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIv
Y29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGxldCBwb3N0Tm90ZU1l
c3NhZ2UgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlLmJp
bmQod2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZSk7CisgICAgbGV0IGdldFB1c2hN
YW5hZ2VyID0KKyAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5q
cycpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFk
eSkKKyAgICAgICAgICAgIC50aGVuKHJlZ2lzdHJhdGlvbiA9PiByZWdpc3RyYXRpb24ucHVzaE1h
bmFnZXIpOworCisgICAgZnVuY3Rpb24gc3Vic2NyaWJlKCkKKyAgICB7CisgICAgICAgIGdldFB1
c2hNYW5hZ2VyCisgICAgICAgICAgICAudGhlbihwdXNoTWFuYWdlciA9PiBwdXNoTWFuYWdlci5z
dWJzY3JpYmUoeyB1c2VyVmlzaWJsZU9ubHk6IHRydWUsIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBW
QUxJRF9TRVJWRVJfS0VZIH0pKQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHN1
YnNjcmlwdGlvbi50b0pTT04oKSkKKyAgICAgICAgICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkK
KyAgICAgICAgICAgIC5jYXRjaChlID0+IHBvc3ROb3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRTdWJzY3JpcHRpb24oKQorICAgIHsKKyAgICAgICAg
Z2V0UHVzaE1hbmFnZXIKKyAgICAgICAgICAgIC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5h
Z2VyLmdldFN1YnNjcmlwdGlvbigpKQorICAgICAgICAgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+
IHN1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbi50b0pTT04oKSA6IG51bGwpCisgICAgICAgICAg
ICAudGhlbihwb3N0Tm90ZU1lc3NhZ2UpCisgICAgICAgICAgICAuY2F0Y2goZSA9PiBwb3N0Tm90
ZU1lc3NhZ2UoZS50b1N0cmluZygpKSk7CisgICAgfQorCisgICAgcG9zdE5vdGVNZXNzYWdlKCdS
ZWFkeScpOworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIl9zOworCisgICAgX19ibG9jayBSZXRh
aW5QdHI8aWQ+IG1lc3NhZ2UgPSBuaWw7CisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2UgPSBm
YWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxl
cjpeKGlkIHJlY2VpdmVkTWVzc2FnZSkgeworICAgICAgICBtZXNzYWdlID0gcmVjZWl2ZWRNZXNz
YWdlOworICAgICAgICBnb3RNZXNzYWdlID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1
ZXN0KGh0bWxTb3VyY2UsICIiX3MpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290
TWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUmVh
ZHkiXSk7CisKKyAgICBtZXNzYWdlID0gbmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAg
ICBbbV93ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInN1YnNjcmliZSgpIiBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkLCBOU0Vycm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmdvdE1lc3NhZ2UpOworICAgIFJldGFpblB0cjxpZD4gc3Vic2NyaXB0aW9uID0gbWVzc2Fn
ZTsKKyAgICBBU1NFUlRfRkFMU0UoW3N1YnNjcmlwdGlvbiBpc0VxdWFsOltOU051bGwgbnVsbF1d
KTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uIGlzS2luZE9mQ2xhc3M6W05TRGljdGlv
bmFyeSBjbGFzc11dICYmIFtzdWJzY3JpcHRpb24gb2JqZWN0Rm9yS2V5OkAiZW5kcG9pbnQiXSk7
CisKKyAgICBtZXNzYWdlID0gbmlsOworICAgIGdvdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV93
ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImdldFN1YnNjcmlwdGlvbigpIiBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkLCBOU0Vycm9yKikgeyB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmdvdE1lc3NhZ2UpOworICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWw6c3Vic2Ny
aXB0aW9uLmdldCgpXSk7CisKKyAgICAvLyBJZiB0aGUgcHVibGljIHRva2VuIGNoYW5nZXMsIGFs
bCBzdWJzY3JpcHRpb25zIHNob3VsZCBiZSBpbnZhbGlkYXRlZC4KKyAgICBhdXRvIHV0aWxpdHlD
b25uZWN0aW9uID0gY3JlYXRlQW5kQ29uZmlndXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndl
YmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIik7CisgICAgc2VuZE1lc3NhZ2VUb0RhZW1v
bldhaXRpbmdGb3JSZXBseSh1dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNl
dFB1YmxpY1Rva2VuRm9yVGVzdGluZywgZW5jb2RlU3RyaW5nKCJmb29iYXIiX3MpKTsKKworICAg
IG1lc3NhZ2UgPSBuaWw7CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFttX3dlYlZpZXcg
ZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRpb25IYW5kbGVy
Ol4oaWQsIE5TRXJyb3IqKSB7IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290
TWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpbTlNOdWxsIG51bGxd
XSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457956</attachid>
            <date>2022-04-19 20:58:15 -0700</date>
            <delta_ts>2022-04-19 22:13:09 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-239042-20220419205814.patch</filename>
            <type>text/plain</type>
            <size>41809</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZiMDAwZWNhMTc4MjRh
ODNiZDc4NGQwNzJiODcwZTZkNzhkY2UwMS4uODBmOWUxYmNmOGFhNGZkMTAwNWM3MWIxZWI4YzA5
MjY1NmExNGU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTA0LTE5ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBk
YXRlcyBpbiB3ZWJwdXNoZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM5MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgorCisg
ICAgICAgIFdoZW4gdGhlIHB1YmxpYyB0b2tlbiBhc3NvY2lhdGVkIHdpdGggb3VyIHB1c2ggc2Vy
dmljZSBjaGFuZ2VzLCB3ZSBoYXZlIHRvIGludmFsaWRhdGUgYWxsCisgICAgICAgIHB1c2ggc3Vi
c2NyaXB0aW9ucywgc2luY2UgdGhleSBhbGwgZGVyaXZlIGZyb20gdGhlIHB1YmxpYyB0b2tlbi4g
VGhpcyBpcyBvbmx5IGV4cGVjdGVkIHRvCisgICAgICAgIGhhcHBlbiBpbiB2ZXJ5IHJhcmUgY2Fz
ZXMsIGUuZy4ga2V5Y2hhaW4gY29ycnVwdGlvbi4KKworICAgICAgICBUbyBpbXBsZW1lbnQgdGhp
cywgd2Ugbm93IGxpc3RlbiBmb3IgcHVibGljIHRva2VuIHVwZGF0ZXMgZnJvbSBvdXIgcHVzaCBz
ZXJ2aWNlLCBhbmQgcGFzcworICAgICAgICB0aGF0IG9uIHRvIFB1c2hEYXRhYmFzZS4gUHVzaERh
dGFiYXNlIHBlcnNpc3RzIHRoZSB0b2tlbiBhbmQgZGVsZXRlcyBhbGwgc3Vic2NyaXB0aW9ucyBv
bgorICAgICAgICB0b2tlbiBjaGFuZ2UgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgIEkgaGFkIHRv
IGNoYW5nZSB0aGUgc2NoZW1hIHRvIGFsbG93IGZvciB0aGlzLiBvcGVuQW5kTWlncmF0ZURhdGFi
YXNlSW1wbCBub3cgbWlncmF0ZXMKKyAgICAgICAgZXhpc3RpbmcgZGF0YSBvbiBzY2hlbWEgY2hh
bmdlIHJhdGhlciB0aGFuIG51a2luZyB0aGUgd2hvbGUgZGF0YWJhc2Ugc28gdXNlcnMgd29uJ3Qg
bG9zZQorICAgICAgICB0aGVpciBleGlzdGluZyBzdWJzY3JpcHRpb25zLgorCisgICAgICAgICog
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
bkFuZE1pZ3JhdGVEYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNl
Ojp1cGRhdGVQdWJsaWNUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6Omdl
dFB1YmxpY1Rva2VuKToKKwogMjAyMi0wNC0xOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTI5NDcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDkyZGUzYjVjMWRlMjFlZGE3ZTRkMDA5ZTg5N2ZjNDI0YzU4ZTcyODUuLmNhOGVm
MjI5ZmYzYjlkNWFmZmZjY2RmMjk0ZmI3ZDhhZWY0ZWNlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzggQEAKKzIwMjItMDQtMTkgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SGFuZGxlIHB1YmxpYyB0b2tlbiB1cGRhdGVzIGluIHdlYnB1c2hkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkwNDIKKworICAgICAgICBSZXZpZXdl
ZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgV2hlbiB0aGUgcHVibGljIHRva2VuIGFzc29j
aWF0ZWQgd2l0aCBvdXIgcHVzaCBzZXJ2aWNlIGNoYW5nZXMsIHdlIGhhdmUgdG8gaW52YWxpZGF0
ZSBhbGwKKyAgICAgICAgcHVzaCBzdWJzY3JpcHRpb25zLCBzaW5jZSB0aGV5IGFsbCBkZXJpdmUg
ZnJvbSB0aGUgcHVibGljIHRva2VuLiBUaGlzIGlzIG9ubHkgZXhwZWN0ZWQgdG8KKyAgICAgICAg
aGFwcGVuIGluIHZlcnkgcmFyZSBjYXNlcywgZS5nLiBrZXljaGFpbiBjb3JydXB0aW9uLgorCisg
ICAgICAgIFRvIGltcGxlbWVudCB0aGlzLCB3ZSBub3cgbGlzdGVuIGZvciBwdWJsaWMgdG9rZW4g
dXBkYXRlcyBmcm9tIG91ciBwdXNoIHNlcnZpY2UsIGFuZCBwYXNzCisgICAgICAgIHRoYXQgb24g
dG8gUHVzaERhdGFiYXNlLiBQdXNoRGF0YWJhc2UgcGVyc2lzdHMgdGhlIHRva2VuIGFuZCBkZWxl
dGVzIGFsbCBzdWJzY3JpcHRpb25zIG9uCisgICAgICAgIHRva2VuIGNoYW5nZSBpZiBuZWNlc3Nh
cnkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQdXNoRDo6bWVzc2FnZVR5cGVTZW5kc1JlcGx5KToKKyAgICAgICAgKiB3
ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKC1bX1dLQVBT
Q29ubmVjdGlvbkRlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuOl0pOgor
ICAgICAgICAoLVtfV0tBUFNDb25uZWN0aW9uRGVsZWdhdGUgY29ubmVjdGlvbjpkaWRSZWNlaXZl
SW5jb21pbmdNZXNzYWdlOl0pOgorICAgICAgICAqIHdlYnB1c2hkL01vY2tQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW06CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bjo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKyAgICAgICAg
KiB3ZWJwdXNoZC9QdXNoU2VydmljZS5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpzZXRQdWJs
aWNUb2tlbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpkaWRS
ZWNlaXZlUHVibGljVG9rZW4pOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0
TGlzdGVuaW5nRm9yUHVibGljVG9rZW4pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVB1YmxpY1Rva2VuKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZUNvbm5lY3Rpb246OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyk6CisgICAgICAg
ICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6c2V0
UHVibGljVG9rZW5Gb3JUZXN0aW5nKToKKwogMjAyMi0wNC0xOSAgU2lodWkgTGl1ICA8c2lodWlf
bGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbG9nZ2luZyBmb3IgV2Vic2l0ZURhdGFTdG9y
ZSBkYXRhIGZldGNoIGFuZCByZW1vdmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1
c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAKaW5kZXggNzAwNjg0MmFlM2Y1MTFhN2VjYmI1ZTQ0ZTMz
NTUzZDBkNjlmNzhiZi4uMDhjMDY4MmNjZWFmNTMzYWQ4ZWRmMWVhYjdhZTA4ZjdjMjMxNWEwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNw
cApAQCAtMzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4K
ICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgog
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgogCiAjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFT
RV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1Nf
XykKICNkZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJH
U19fKQpAQCAtNDgsMTEgKzUwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGNvbnN0ZXhwciBpbnQgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24gPSAyOwotI2RlZmluZSBr
Q3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb25TdHJpbmcgIjIiCi0KLXN0YXRpYyBjb25zdCBBU0NJ
SUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7CitzdGF0aWMgY29u
c3RleHByIEFTQ0lJTGl0ZXJhbCBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsK
ICAgICAiUFJBR01BIGF1dG9fdmFjdXVtPUlOQ1JFTUVOVEFMIl9zLAorfTsKKworc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjJTdGF0ZW1lbnRzW10gPSB7
CiAgICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25TZXRzKCIKICAgICAiICByb3dJRCBJTlRF
R0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIgogICAgICIgIGNyZWF0aW9uVGltZSBJTlQg
Tk9UIE5VTEwsIgpAQCAtNzQsOSArNzYsMjIgQEAgc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBw
dXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKICAgICAiICBleHBpcmF0aW9uVGlt
ZSBJTlQsIgogICAgICIgIFVOSVFVRShzY29wZSwgc3Vic2NyaXB0aW9uU2V0SUQpKSJfcywKICAg
ICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2NyaXB0aW9uU2V0SURfSW5kZXggT04g
U3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3MsCi0gICAgIlBSQUdNQSB1c2VyX3Zl
cnNpb24gPSAiIGtDdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvblN0cmluZyAiIl9zCiB9OwogCitz
dGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBwdXNoRGF0YWJhc2VTY2hlbWFWM1N0YXRlbWVu
dHNbXSA9IHsKKyAgICAiQ1JFQVRFIFRBQkxFIE1ldGFkYXRhKGtleSBURVhULCB2YWx1ZSwgVU5J
UVVFKGtleSkpIl9zLAorfTsKKworc3RhdGljIGNvbnN0ZXhwciBTcGFuPGNvbnN0IEFTQ0lJTGl0
ZXJhbD4gcHVzaERhdGFiYXNlU2NoZW1hU3RhdGVtZW50c1tdID0geworICAgIHsgcHVzaERhdGFi
YXNlU2NoZW1hVjFTdGF0ZW1lbnRzIH0sCisgICAgeyBwdXNoRGF0YWJhc2VTY2hlbWFWMlN0YXRl
bWVudHMgfSwKKyAgICB7IHB1c2hEYXRhYmFzZVNjaGVtYVYzU3RhdGVtZW50cyB9LAorfTsKKwor
c3RhdGljIGNvbnN0ZXhwciBpbnQgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24gPSBzdGQ6OnNp
emUocHVzaERhdGFiYXNlU2NoZW1hU3RhdGVtZW50cyk7CisKK3N0YXRpYyBjb25zdGV4cHIgQVND
SUlMaXRlcmFsIHB1YmxpY1Rva2VuS2V5ID0gInB1YmxpY1Rva2VuIl9zOworCiBQdXNoUmVjb3Jk
IFB1c2hSZWNvcmQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0ICYKIHsKICAgICByZXR1cm4gewpAQCAt
MTUwLDIzICsxNjUsMjcgQEAgc3RhdGljIEV4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVEYXRhYmFz
ZT4sIFNob3VsZERlbGV0ZUFuZFJldHJ5PiBvcGVuQW5kTWlncmF0ZUQKICAgICAgICAgdmVyc2lv
biA9IHNxbC0+Y29sdW1uSW50KDApOwogICAgIH0KIAotICAgIGlmICh2ZXJzaW9uICYmIHZlcnNp
b24gIT0gY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IGFk
ZCBtaWdyYXRpb24gd2hlbiB3ZSBuZWVkIGl0LgorICAgIGlmICh2ZXJzaW9uIDwgMCB8fCB2ZXJz
aW9uID4gY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoUHVzaCwgIkZvdW5kIHVuZXhwZWN0ZWQgUHVzaERhdGFiYXNlIHZlcnNpb246ICVkIChl
eHBlY3RlZDogJWQpIGF0IHBhdGg6ICVzIiwgdmVyc2lvbiwgY3VycmVudFB1c2hEYXRhYmFzZVZl
cnNpb24sIHBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChTaG91bGREZWxldGVBbmRSZXRyeTo6WWVzKTsKICAgICB9CiAKLSAgICBpZiAoIXZlcnNpb24p
IHsKKyAgICBpZiAodmVyc2lvbiA8IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7CiAgICAg
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRiKTsKICAgICAgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IHB1c2hEYXRhYmFz
ZVNjaGVtYVYxU3RhdGVtZW50cykgewotICAgICAgICAgICAgaWYgKCFkYi0+ZXhlY3V0ZUNvbW1h
bmQoc3RhdGVtZW50KSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gs
ICJFcnJvciBleGVjdXRpbmcgUHVzaERhdGFiYXNlIERETCBzdGF0ZW1lbnQgJXMgYXQgcGF0aCAl
cyIsIHN0YXRlbWVudC5jaGFyYWN0ZXJzKCksIHBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMp
OworICAgICAgICBmb3IgKGF1dG8gaSA9IHZlcnNpb247IGkgPCBjdXJyZW50UHVzaERhdGFiYXNl
VmVyc2lvbjsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3RhdGVtZW50IDogcHVzaERh
dGFiYXNlU2NoZW1hU3RhdGVtZW50c1tpXSkgeworICAgICAgICAgICAgICAgIGlmICghZGItPmV4
ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoUHVzaCwgIkVycm9yIGV4ZWN1dGluZyBQdXNoRGF0YWJhc2UgRERMIHN0YXRlbWVu
dCAlcyBhdCBwYXRoICVzOiAlZCIsIHN0YXRlbWVudC5jaGFyYWN0ZXJzKCksIHBhdGgudXRmOCgp
LmRhdGEoKSwgZGItPmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFNob3VsZERlbGV0ZUFuZFJldHJ5OjpZZXMpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmICghZGItPmV4ZWN1dGVD
b21tYW5kU2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdXNlcl92ZXJzaW9uID0gIiwgY3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb24pKSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gs
ICJFcnJvciBzZXR0aW5nIHVzZXIgdmVyc2lvbiBmb3IgUHVzaERhdGFiYXNlIGF0IHBhdGggJXM6
ICVkIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkYi0+bGFzdEVycm9yKCkpOworCiAgICAgICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIH0KIApAQCAtMjgwLDExICsyOTksMTAwIEBAIHRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBVPgogc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1ZShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBVJiYgcmVzdWx0
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFdvcmtRdWV1ZTo6bWFp
bigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCByZXN1bHQgPSBjcm9zc1RocmVhZENvcHkoV1RGTW92ZShyZXN1bHQpKV0oKSBtdXRhYmxl
IHsKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KHN0ZDo6
Zm9yd2FyZDxVPihyZXN1bHQpKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKIH0KIAordm9pZCBQdXNoRGF0YWJhc2U6OnVw
ZGF0ZVB1YmxpY1Rva2VuKFNwYW48Y29uc3QgdWludDhfdD4gcHVibGljVG9rZW4sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoUHVibGljVG9rZW5DaGFuZ2VkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCBuZXdQdWJsaWNUb2tlbiA9IFZlY3Rv
cjx1aW50OF90PiB7IHB1YmxpY1Rva2VuIH0sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gUHVibGljVG9rZW5DaGFuZ2VkOjpObzsKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGN1cnJlbnRQdWJsaWNUb2tlbjsKKyAgICAgICAgYXV0byBzY29wZSA9IG1ha2VT
Y29wZUV4aXQoWyZjb21wbGV0aW9uSGFuZGxlciwgJnJlc3VsdF0geworICAgICAgICAgICAgY29t
cGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0KTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnRPblF1ZXVlKCJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhZGF0YSBXSEVSRSBrZXkgPSA/Il9z
KTsKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5L
ZXkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19C
SU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UHVibGljVG9rZW4gPSBzcWwtPmNvbHVtbkJsb2IoMCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY3VycmVudFB1YmxpY1Rva2VuID09IG5ld1B1YmxpY1Rva2VuKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVk
U3RhdGVtZW50T25RdWV1ZSgiUkVQTEFDRSBJTlRPIE1ldGFkYXRhKGtleSwgdmFsdWUpIFZBTFVF
Uyg/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgICAgIHx8IHNx
bC0+YmluZFRleHQoMSwgcHVibGljVG9rZW5LZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZEJsb2IoMiwgbmV3UHVibGljVG9rZW4pICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3FsLT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihQdXNoLCAiRmFpbGVkIHRvIHNhdmUgbmV3IHB1YmxpYyB0b2tlbjogJWQiLCBtX2RiLT5sYXN0
RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVwZGF0aW5nIGFuIG9sZCB2ZXJzaW9uIG9mIHRo
ZSBkYXRhYmFzZSB3aGVyZSBjdXJyZW50UHVibGljVG9rZW4gZG9lc24ndCBleGlzdCwganVzdAor
ICAgICAgICAvLyBzYXZlIHRoZSBpbml0aWFsIHB1YmxpY1Rva2VuIHdpdGhvdXQgZGVsZXRpbmcg
YWxsIHN1YnNjcmlwdGlvbnMgYW5kIG5vdGlmeWluZyB0aGUgY2FsbGVyIHRoYXQKKyAgICAgICAg
Ly8gdGhlIHRva2VuIGNoYW5nZWQuCisgICAgICAgIGlmICghY3VycmVudFB1YmxpY1Rva2VuLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBkZWxldGVTdWJzY3JpcHRpb25TZXRzID0gY2Fj
aGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyJfcyk7Cisg
ICAgICAgICAgICBhdXRvIGRlbGV0ZVN1YnNjcmlwdGlvbnMgPSBjYWNoZWRTdGF0ZW1lbnRPblF1
ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIl9zKTsKKworICAgICAgICAgICAgaWYgKCFk
ZWxldGVTdWJzY3JpcHRpb25TZXRzIHx8ICFkZWxldGVTdWJzY3JpcHRpb25zKSB7CisgICAgICAg
ICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZWxldGVTdWJzY3Jp
cHRpb25TZXRzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUgfHwgZGVsZXRlU3Vic2NyaXB0aW9ucy0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkZhaWxlZCB0byBkZWxldGUgc3Vic2NyaXB0aW9uczogJWQiLCBtX2RiLT5sYXN0
RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXN1bHQgPSBQdWJsaWNUb2tlbkNoYW5nZWQ6OlllczsKKyAgICAgICAgfQorCisg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Cisg
ICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJl
c3VsdCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpnZXRQdWJsaWNUb2tlbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlNFTEVD
VCB2YWx1ZSBGUk9NIE1ldGFkYXRhIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICBpZiAoIXNx
bCB8fCBzcWwtPmJpbmRUZXh0KDEsIHB1YmxpY1Rva2VuS2V5KSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBWZWN0b3I8dWlu
dDhfdD4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgICAgIGlmIChzcWwtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5jb2x1bW5CbG9iKDApOworCisgICAgICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCiB2
b2lkIFB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIHJlY29y
ZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmgKaW5kZXggMzNlNDNiZThhZWYwZWZkZWEyYzg3N2Iw
YTU4NzA2NDc3YjkyYjc4ZC4uODM3Mzg5M2UwMTZkY2UwNDNhMjkxMjQ4NTA3YWQ3NmJjZDUxNTE3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5o
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1NwYW4uaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTc2LDYgKzc3LDEwIEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBDcmVhdGlvbkhhbmRsZXImJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflB1c2hEYXRhYmFz
ZSgpOwogCisgICAgZW51bSBjbGFzcyBQdWJsaWNUb2tlbkNoYW5nZWQgOiBib29sIHsgTm8sIFll
cyB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUHVibGljVG9rZW4oU3Bhbjxjb25z
dCB1aW50OF90PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdWJsaWNUb2tlbkNoYW5nZWQpPiYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFB1YmxpY1Rva2VuKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGdldFJlY29yZEJ5VG9waWMoY29uc3QgU3RyaW5nJiB0b3BpYywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRleCBlOTBlZWVkMDE0MDc4NjU3YTEx
OGVhNmEzZjRjMjkwMjdmNmQ0YmRlLi5hODViNjlkMjk4NmE5Mzg5MmFkNGMwN2U0NTIzMDYyMmU0
NTBhZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29u
c3RhbnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50
cy5oCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gY2xhc3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsK
ICAgICBJbmNyZW1lbnRTaWxlbnRQdXNoQ291bnQsCiAgICAgUmVtb3ZlQWxsUHVzaFN1YnNjcmlw
dGlvbnMsCiAgICAgUmVtb3ZlUHVzaFN1YnNjcmlwdGlvbnNGb3JPcmlnaW4sCisgICAgU2V0UHVi
bGljVG9rZW5Gb3JUZXN0aW5nLAogfTsKIAogaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1Jl
cGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQpAQCAtNzQsNiArNzUsNyBAQCBpbmxpbmUgYm9v
bCBtZXNzYWdlVHlwZVNlbmRzUmVwbHkoTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUpCiAgICAgY2Fz
ZSBNZXNzYWdlVHlwZTo6SW5jcmVtZW50U2lsZW50UHVzaENvdW50OgogICAgIGNhc2UgTWVzc2Fn
ZVR5cGU6OlJlbW92ZUFsbFB1c2hTdWJzY3JpcHRpb25zOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlNldFB1YmxpY1Rva2VuRm9yVGVzdGluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2Fz
ZSBNZXNzYWdlVHlwZTo6U2V0RGVidWdNb2RlSXNFbmFibGVkOgogICAgIGNhc2UgTWVzc2FnZVR5
cGU6OlVwZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9BcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KaW5kZXggZWZmN2VhZTVj
ZmZhODc3NzhiNjY2MmFiNmIxNTRlMGQ0YTRmMDdkOC4uNDY2NGY1MDg0ZjBhYzFmZjZhNzIyZjlk
MDYxNGRjNTdmMzdjYzJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBs
ZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Fw
cGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC00OCwxMyArNDgsMTUgQEAgLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29ubmVjdGlvbjooV2ViUHVzaEQ6OkFwcGxlUHVzaFNlcnZpY2VDb25u
ZWN0aW9uICopY29ubmUKIC0gKHZvaWQpY29ubmVjdGlvbjooQVBTQ29ubmVjdGlvbiAqKWNvbm5l
Y3Rpb24gZGlkUmVjZWl2ZVB1YmxpY1Rva2VuOihOU0RhdGEgKilwdWJsaWNUb2tlbgogewogICAg
IFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0ocHVibGljVG9rZW4p
OworICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKF9jb25uZWN0aW9uICYm
IHB1YmxpY1Rva2VuLmxlbmd0aCkKKyAgICAgICAgX2Nvbm5lY3Rpb24tPmRpZFJlY2VpdmVQdWJs
aWNUb2tlbihWZWN0b3I8dWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocHVi
bGljVG9rZW4uYnl0ZXMpLCBwdWJsaWNUb2tlbi5sZW5ndGggfSk7CiB9CiAKIC0gKHZvaWQpY29u
bmVjdGlvbjooQVBTQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZUluY29taW5nTWVz
c2FnZTooQVBTSW5jb21pbmdNZXNzYWdlICopbWVzc2FnZQogewogICAgIFVOVVNFRF9QQVJBTShj
b25uZWN0aW9uKTsKLQogICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkpOwogCiAgICAgaWYgKF9j
b25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaAppbmRleCBiOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5
NGEyLi4xZjhlNmVmOWUyZTNkMDg0ODRjMTEwMWZiNTgyNjIwMWNiZmZjYzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAt
NTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb25XYWtpbmdUb3BpY3MoVmVjdG9y
PFN0cmluZz4mJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFRvcGljTGlzdHMoVG9waWNMaXN0
cyYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rv
cjx1aW50OF90PiYmKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYlB1c2hECmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rp
b24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24u
bW0KaW5kZXggYzRjZjJlNjc5YjkyYmY5MjM1NjFjMTU4YzIzZDM2ODAxZDg3ODM2NC4uNzk2ZDVj
ZDExNjdiZjFlMDY0ZGJlMWQ2N2I0YmNhNzVkYjYwZDNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMzQsNiArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpN
b2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKIHsKKyAgICBkaWRSZWNlaXZlUHVibGljVG9rZW4o
VmVjdG9yPHVpbnQ4X3Q+IHsgJ2EnLCAnYicsICdjJyB9KTsKIH0KIAogTW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CkBAIC0x
MDQsNCArMTA1LDkgQEAgdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzZXRUb3BpY0xp
c3RzKFRvcGljTGlzdHMmJiB0b3BpY0xpc3RzKQogewogfQogCit2b2lkIE1vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb246OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJiB0
b2tlbikKK3sKKyAgICBkaWRSZWNlaXZlUHVibGljVG9rZW4oV1RGTW92ZSh0b2tlbikpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9QdXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5o
CmluZGV4IGU0NDUwMTllYzllMmM3Y2IxZGVmNjJkNDFjMGExYjExOTdiYTU0OWIuLjUxODIwZjIx
MWU5NmNmMjQwNzcxMmY4MmIyODlkMjljNzg2NThiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlLmgKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29tcGxl
dGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmKTsKICAgICB2b2lkIGRpZENvbXBs
ZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYpOwogCisgICAgdm9pZCBz
ZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHZvaWQgZGlk
UmVjZWl2ZVB1YmxpY1Rva2VuKFZlY3Rvcjx1aW50OF90PiYmKTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSk7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tIGIvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQppbmRleCBlMjY4NDRkM2I2ODY4OTlmZTczMTdkOWRh
NWE0N2U3Mzc4MmYwMzNmLi5kYjFhODNkNGVkNjJhODViYzhmNzA3YWE0M2VkN2VlNDczYzY3MjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0KQEAgLTExNiw2ICsxMTYsMTAg
QEAgUHVzaFNlcnZpY2U6OlB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rp
b24+JiYgcHVzaFNlcnZpY2VDb25uZWN0aW8KIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyKTsKIAorICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5p
bmdGb3JQdWJsaWNUb2tlbihbdGhpc10oYXV0byYmIHRva2VuKSB7CisgICAgICAgIGRpZFJlY2Vp
dmVQdWJsaWNUb2tlbihXVEZNb3ZlKHRva2VuKSk7CisgICAgfSk7CisKICAgICBtX2Nvbm5lY3Rp
b24tPnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKFt0aGlzXShOU1N0cmluZyAqdG9waWMs
IE5TRGljdGlvbmFyeSAqdXNlckluZm8pIHsKICAgICAgICAgZGlkUmVjZWl2ZVB1c2hNZXNzYWdl
KHRvcGljLCB1c2VySW5mbyk7CiAgICAgfSk7CkBAIC02MjEsNiArNjI1LDI0IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJhd1B1c2hNZXNzYWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcg
KnRvcGljLCBOU0RpY3RpCiAgICAgcmV0dXJuIG1lc3NhZ2U7CiB9CiAKK3ZvaWQgUHVzaFNlcnZp
Y2U6OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8dWludDhfdD4mJiB0b2tlbikKK3sK
KyAgICBtX2Nvbm5lY3Rpb24tPnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhXVEZNb3ZlKHRva2Vu
KSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdWJsaWNUb2tlbihWZWN0b3I8
dWludDhfdD4mJiB0b2tlbikKK3sKKyAgICBtX2RhdGFiYXNlLT51cGRhdGVQdWJsaWNUb2tlbih0
b2tlbiwgW3RoaXNdKGF1dG8gcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HKFB1c2gsICJSZWNlaXZlZCBleHBlY3RlZCBwdWJsaWMgdG9rZW4iKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJQdWJsaWMgdG9rZW4gY2hhbmdlZDsgaW52YWxpZGF0ZWQgYWxsIGV4aXN0aW5nIHB1c2gg
c3Vic2NyaXB0aW9ucyIpOworICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwg
bV9kYXRhYmFzZSwgW10oKSB7IH0pOworICAgIH0pOworfQorCiB2b2lkIFB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcqIHRvcGljLCBOU0RpY3Rpb25hcnkqIHVzZXJJ
bmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgYXV0byBtZXNzYWdlUmVzdWx0ID0gbWFrZVJhd1B1c2hNZXNzYWdlKHRvcGljLCB1c2VySW5m
byk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaApp
bmRleCAxOTgxNDNmNTY5N2NkMjhjNjkyOGQ0NTY4YzIxYzMyNTQ5MjBkMjBmLi4zNzA0YTIxNDhl
NDdiZDNkZGY2YWQ4NmEwNDhhNjM4MzBiOGUyYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTc0LDEwICs3NCwxNiBAQCBwdWJsaWM6
CiAgICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9waWNMaXN0cyhUb3BpY0xpc3RzJiYpID0g
MDsKIAorICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdGb3JQdWJsaWNUb2tlbihGdW5jdGlvbjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUHVibGljVG9rZW4o
VmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQdWJsaWNUb2tlbkZvclRl
c3RpbmcoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCiAgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvclB1
c2hNZXNzYWdlcyhJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmKTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8p
OwogCiBwcml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiBtX3B1
YmxpY1Rva2VuQ2hhbmdlSGFuZGxlcjsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9wZW5kaW5nUHVi
bGljVG9rZW47CiAgICAgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgbV9pbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlcjsKICAgICBEZXF1ZTxzdGQ6OnBhaXI8UmV0YWluUHRyPE5TU3RyaW5nPiwg
UmV0YWluUHRyPE5TRGljdGlvbmFyeT4+PiBtX3BlbmRpbmdQdXNoZXM7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCA5MmY4MTQy
NzdhODM4MTUzMTY4OGIwZTQ4NTE4MmQ0M2Q4NWNjODY4Li45ZGNjZWJhNzQwMTA1ZTEzY2QyZmEz
ODRhYWMwM2MxZDY3MGYxMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMzcsNiArMzcsMzAgQEAgUHVzaENyeXB0bzo6Q2xpZW50
S2V5cyBQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCiAgICAgcmV0
dXJuIFB1c2hDcnlwdG86OkNsaWVudEtleXM6OmdlbmVyYXRlKCk7CiB9CiAKK3ZvaWQgUHVzaFNl
cnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1YmxpY1Rva2VuKEZ1bmN0aW9uPHZv
aWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGhhbmRsZXIpCit7CisgICAgbV9wdWJsaWNUb2tlbkNo
YW5nZUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworCisgICAgaWYgKG1fcGVuZGluZ1B1Ymxp
Y1Rva2VuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wdWJsaWNUb2tlbkNo
YW5nZUhhbmRsZXIoc3RkOjpleGNoYW5nZShtX3BlbmRpbmdQdWJsaWNUb2tlbiwgeyB9KSk7Cit9
CisKK3ZvaWQgUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpkaWRSZWNlaXZlUHVibGljVG9rZW4oVmVj
dG9yPHVpbnQ4X3Q+JiYgdG9rZW4pCit7CisgICAgaWYgKCFtX3B1YmxpY1Rva2VuQ2hhbmdlSGFu
ZGxlcikgeworICAgICAgICBtX3BlbmRpbmdQdWJsaWNUb2tlbiA9IFdURk1vdmUodG9rZW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wdWJsaWNUb2tlbkNoYW5nZUhhbmRsZXIo
V1RGTW92ZSh0b2tlbikpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c2V0UHVi
bGljVG9rZW5Gb3JUZXN0aW5nKFZlY3Rvcjx1aW50OF90PiYmKQoreworfQorCiB2b2lkIFB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoSW5jb21pbmdQ
dXNoTWVzc2FnZUhhbmRsZXImJiBoYW5kbGVyKQogewogICAgIG1faW5jb21pbmdQdXNoTWVzc2Fn
ZUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb24uaAppbmRleCAwNjYyZjEzZTk4Mzk0OTAwYzU0MWZhYmRlOTU2ZTg1Yzk2NjJkYjMzLi5m
NDlkZTJlN2QxZjA0MzRiYTVjYmM4NjcyYTNiNzcyMzRiOWZhZTkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24uaApAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbmNyZW1lbnRTaWxlbnRQdXNoQ291bnQoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQp
PiYmKTsKICAgICB2b2lkIHJlbW92ZUFsbFB1c2hTdWJzY3JpcHRpb25zKENsaWVudENvbm5lY3Rp
b24qLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJik7CiAgICAgdm9pZCByZW1v
dmVQdXNoU3Vic2NyaXB0aW9uc0Zvck9yaWdpbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25l
ZCk+JiYpOworICAgIHZvaWQgc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKENsaWVudENvbm5lY3Rp
b24qLCBjb25zdCBTdHJpbmcmIHB1YmxpY1Rva2VuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgdm9pZCBicm9hZGNhc3REZWJ1Z01lc3NhZ2UoU3RyaW5nVmlldyk7CiAgICAg
dm9pZCBicm9hZGNhc3RBbGxDb25uZWN0aW9uSWRlbnRpdGllcygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IDc4NTMyZDA0YWY2MTcwYzE4OGY4YzkxMzY5YTgy
MTA3OTJkMGJiYTAuLjRjZWM2NDExNWRmYzVjOTVlZThiZTUyZDRiZWVkMmExY2U5OTVjNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTEzNCwxMSArMTM0LDIx
IEBAIEFSR1VNRU5UUyhXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEpCiBSRVBMWSh1bnNpZ25l
ZCkKIEVORAogCitGVU5DVElPTihzZXRQdWJsaWNUb2tlbkZvclRlc3RpbmcpCitBUkdVTUVOVFMo
U3RyaW5nKQorUkVQTFkoKQorRU5ECisKKwogI3VuZGVmIEZVTkNUSU9OCiAjdW5kZWYgQVJHVU1F
TlRTCiAjdW5kZWYgUkVQTFkKICN1bmRlZiBFTkQKIAorI2RlZmluZSBFTVBUWV9SRVBMWShtZikg
V2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIG1mOjplbmNvZGVSZXBseSgpIHsgcmV0dXJuIHsgfTsg
fQorRU1QVFlfUkVQTFkoc2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nKTsKKyN1bmRlZiBFTVBUWV9S
RVBMWQorCiBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgZWNob1R3aWNlOjplbmNvZGVSZXBseShT
dHJpbmcgcmVwbHkpCiB7CiAgICAgV2ViS2l0OjpEYWVtb246OkVuY29kZXIgZW5jb2RlcjsKQEAg
LTQ0NSw2ICs0NTUsOSBAQCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lcwogICAgIGNhc2UgTWVzc2Fn
ZVR5cGU6OlJlbW92ZVB1c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luOgogICAgICAgICBoYW5kbGVX
ZWJQdXNoRE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OnJlbW92ZVB1c2hTdWJzY3JpcHRp
b25zRm9yT3JpZ2luPihjbGllbnRDb25uZWN0aW9uLCBlbmNvZGVkTWVzc2FnZSwgV1RGTW92ZShy
ZXBseVNlbmRlcikpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTZXRQ
dWJsaWNUb2tlbkZvclRlc3Rpbmc6CisgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhS
ZXBseTxNZXNzYWdlSW5mbzo6c2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nPihjbGllbnRDb25uZWN0
aW9uLCBlbmNvZGVkTWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgICAgICBicmVh
azsKICAgICB9CiB9CiAKQEAgLTcyMiw2ICs3MzUsMTkgQEAgdm9pZCBEYWVtb246OnJlbW92ZVB1
c2hTdWJzY3JpcHRpb25zRm9yT3JpZ2luKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnMKICAgICB9KTsKIH0KIAordm9pZCBEYWVtb246OnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhD
bGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiBwdWJsaWNUb2tlbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIHJlcGx5U2VuZGVyKQoreworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNo
U2VydmljZShbdGhpcywgcHVibGljVG9rZW4sIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNl
bmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAg
ICAgICAgcmVwbHlTZW5kZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fcHVzaFNlcnZpY2UtPnNldFB1YmxpY1Rva2VuRm9yVGVzdGluZyhWZWN0b3I8dWlu
dDhfdD4geyBwdWJsaWNUb2tlbi51dGY4KCkuYnl0ZXMoKSB9KTsKKyAgICAgICAgcmVwbHlTZW5k
ZXIoKTsKKyAgICB9KTsKK30KKwogQ2xpZW50Q29ubmVjdGlvbiogRGFlbW9uOjp0b0NsaWVudENv
bm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogewogICAgIGF1dG8gY2xpZW50
Q29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbk1hcC5nZXQoY29ubmVjdGlvbik7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGU1MTI2ODQyYzI0YjBk
ZjdjNjhkYTY2ZDdiYzI1ZWU3MDQ5YmM4ZC4uMjFiODhlMzIwY2Y2YWQ2ZTViMjRjNjE2YTVkZDBj
OTkwODE2NTk3YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIyLTA0LTE5ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUu
Y29tPgorCisgICAgICAgIEhhbmRsZSBwdWJsaWMgdG9rZW4gdXBkYXRlcyBpbiB3ZWJwdXNoZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MDQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgorCisgICAgICAgICAtIFRlc3QgdGhh
dCBwdWJsaWMgdG9rZW4gdXBkYXRlcyBhcmUgaGFuZGxlZCBwcm9wZXJseSBhdCB0aGUgUHVzaERh
dGFiYXNlIGFuZCBXZWJQdXNoRGFlbW9uIGxldmVscworICAgICAgICAgLSBUZXN0IHNjaGVtYSBt
aWdyYXRpb24gaW4gUHVzaERhdGFiYXNlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0
ZURhdGFiYXNlU3luYyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRQdWJsaWNUb2tlblN5
bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dXBkYXRlUHVibGljVG9rZW5TeW5jKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3Bl
U3luYyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZXRSb3dJZGVudGlmaWVyc1N5bmMpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UHVibGljVG9rZW4p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6dXBkYXRlUHVibGlj
VG9rZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVj
b3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
UHVzaERhdGFiYXNlVGVzdDo6Z2V0Um93SWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Y3JlYXRlRGF0YWJhc2VGcm9tU3RhdGVtZW50cyk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tOgorCiAyMDIy
LTA0LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
ZXdzLWJ1aWxkLndlYmtpdC5vcmddIEdpdEh1YiB1c2VybmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRp
dmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0
YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFz
ZS5jcHAKaW5kZXggYTYyNDBhMzUzMGYxNGNlOTI1NWUyNDQ4YmE3NzMxMDU0MWQ4MzAzNC4uMDVj
MzY2MGI5Y2FmNTZkYzVjZWIyZDNkOGUzY2I4NWIzZTRhZmJiNyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRh
YmFzZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxp
dGVyYXRvcj4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgRU5BQkxFKFNFUlZJ
Q0VfV09SS0VSKQpAQCAtNDMsNiArNDQsNzcgQEAgc3RhdGljIFN0cmluZyBtYWtlVGVtcG9yYXJ5
RGF0YWJhc2VQYXRoKCkKICAgICByZXR1cm4gcGF0aDsKIH0KIAorc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZURhdGFiYXNlU3luYyhjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gcmVzdWx0OworICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOworCisgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZkb25lLCAm
cmVzdWx0XShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7CisgICAg
ICAgIHJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9KTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBnZXRQdWJsaWNUb2tlblN5bmMoUHVzaERhdGFiYXNlJiBk
YXRhYmFzZSkKK3sKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBWZWN0b3I8dWludDhfdD4g
Z2V0UmVzdWx0OworCisgICAgZGF0YWJhc2UuZ2V0UHVibGljVG9rZW4oWyZkb25lLCAmZ2V0UmVz
dWx0XShhdXRvJiYgcmVzdWx0KSB7CisgICAgICAgIGdldFJlc3VsdCA9IFdURk1vdmUocmVzdWx0
KTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSk7CisgICAgVXRpbDo6cnVuKCZkb25lKTsK
KworICAgIHJldHVybiBnZXRSZXN1bHQ7Cit9CisKK3N0YXRpYyBQdXNoRGF0YWJhc2U6OlB1Ymxp
Y1Rva2VuQ2hhbmdlZCB1cGRhdGVQdWJsaWNUb2tlblN5bmMoUHVzaERhdGFiYXNlJiBkYXRhYmFz
ZSwgU3Bhbjxjb25zdCB1aW50OF90PiB0b2tlbikKK3sKKyAgICBib29sIGRvbmUgPSBmYWxzZTsK
KyAgICBhdXRvIHVwZGF0ZVJlc3VsdCA9IFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2Vk
OjpObzsKKworICAgIGRhdGFiYXNlLnVwZGF0ZVB1YmxpY1Rva2VuKHRva2VuLCBbJmRvbmUsICZ1
cGRhdGVSZXN1bHRdKGF1dG8mJiByZXN1bHQpIHsKKyAgICAgICAgdXBkYXRlUmVzdWx0ID0gV1RG
TW92ZShyZXN1bHQpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBVdGlsOjpy
dW4oJmRvbmUpOworCisgICAgcmV0dXJuIHVwZGF0ZVJlc3VsdDsKK30KKworc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGVT
eW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSUQsIGNvbnN0
IFN0cmluZyYgc2NvcGUpCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgc3RkOjpvcHRp
b25hbDxQdXNoUmVjb3JkPiBnZXRSZXN1bHQ7CisKKyAgICBkYXRhYmFzZS5nZXRSZWNvcmRCeUJ1
bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5kbGVJRCwgc2NvcGUsIFsmZG9uZSwgJmdldFJlc3Vs
dF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkgeworICAgICAgICBnZXRSZXN1
bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0pOworICAg
IFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVzdWx0OworfQorCitzdGF0aWMg
SGFzaFNldDx1aW50NjRfdD4gZ2V0Um93SWRlbnRpZmllcnNTeW5jKFB1c2hEYXRhYmFzZSYgZGF0
YWJhc2UpCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgSGFzaFNldDx1aW50NjRfdD4g
cm93SWRlbnRpZmllcnM7CisKKyAgICBkYXRhYmFzZS5nZXRJZGVudGlmaWVycyhbJmRvbmUsICZy
b3dJZGVudGlmaWVyc10oSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJiBpZGVu
dGlmaWVycykgeworICAgICAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGlkZW50aWZpZXJzKQor
ICAgICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9VSW50NjQoKSk7Cisg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICByZXR1cm4gcm93SWRlbnRpZmllcnM7Cit9CisKIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBnZXRU
b3BpY3NTeW5jKFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgYm9vbCBkb25lID0gZmFs
c2U7CkBAIC02Niw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICJjb20uYXBwbGUud2ViYXBw
Il9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAogICAgICAgICAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJfcywKLSAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50
MiJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MSJfcywKICAgICAgICAgInRvcGlj
MSJfcywKICAgICAgICAgeyA1LCA2IH0sCiAgICAgICAgIHsgNiwgNyB9LApAQCAtNzgsOCArMTUw
LDggQEAgcHVibGljOgogICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKICAgICAgICAgImh0
dHBzOi8vd3d3LndlYmtpdC5vcmciX3MsCiAgICAgICAgICJodHRwczovL3d3dy53ZWJraXQub3Jn
L2Jsb2ciX3MsCi0gICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDQiX3MsCi0gICAgICAgICJ0
b3BpYzQiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJ0
b3BpYzIiX3MsCiAgICAgICAgIHsgMTQsIDE1IH0sCiAgICAgICAgIHsgMTYsIDE3IH0sCiAgICAg
ICAgIHsgMTgsIDE5IH0sCkBAIC05MCw4ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICJjb20u
YXBwbGUuU2FmYXJpIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAogICAg
ICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYyJfcywKLSAgICAgICAgImh0dHBzOi8vcHVz
aEVuZHBvaW50MSJfcywKLSAgICAgICAgInRvcGljMiJfcywKKyAgICAgICAgImh0dHBzOi8vcHVz
aEVuZHBvaW50MyJfcywKKyAgICAgICAgInRvcGljMyJfcywKICAgICAgICAgeyAwLCAxIH0sCiAg
ICAgICAgIHsgMSwgMiB9LAogICAgICAgICB7IDIsIDMgfSwKQEAgLTEwMyw4ICsxNzUsOCBAQCBw
dWJsaWM6CiAgICAgICAgICJjb20uYXBwbGUuU2FmYXJpIl9zLAogICAgICAgICAiaHR0cHM6Ly93
d3cuYXBwbGUuY29tIl9zLAogICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJf
cywKLSAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MyJfcywKLSAgICAgICAgInRvcGljMyJf
cywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50NCJfcywKKyAgICAgICAgInRvcGljNCJf
cywKICAgICAgICAgeyA5LCAxMCB9LAogICAgICAgICB7IDEwLCAxMSB9LAogICAgICAgICB7IDEx
LCAxMiB9LApAQCAtMTE2LDYgKzE4OCwxNiBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQzOwogICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4g
aW5zZXJ0UmVzdWx0NDsKIAorICAgIFZlY3Rvcjx1aW50OF90PiBnZXRQdWJsaWNUb2tlbigpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2V0UHVibGljVG9rZW5TeW5jKCpkYik7CisgICAgfQorCisg
ICAgUHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQgdXBkYXRlUHVibGljVG9rZW4oU3Bh
bjxjb25zdCB1aW50OF90PiB0b2tlbikKKyAgICB7CisgICAgICAgIHJldHVybiB1cGRhdGVQdWJs
aWNUb2tlblN5bmMoKmRiLCB0b2tlbik7CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxQdXNo
UmVjb3JkPiBpbnNlcnRSZWNvcmQoY29uc3QgUHVzaFJlY29yZCYgcmVjb3JkKQogICAgIHsKICAg
ICAgICAgYm9vbCBkb25lID0gZmFsc2U7CkBAIC0xNjAsMzEgKzI0MiwxMiBAQCBwdWJsaWM6CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmll
ckFuZFNjb3BlKGNvbnN0IFN0cmluZyYgYnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUpCiAg
ICAgewotICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBnZXRSZXN1bHQ7Ci0KLSAgICAgICAgZGItPmdldFJlY29yZEJ5QnVuZGxlSWRl
bnRpZmllckFuZFNjb3BlKGJ1bmRsZUlELCBzY29wZSwgWyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6
Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7Ci0gICAgICAgICAgICBnZXRSZXN1bHQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlU3luYygq
ZGIsIGJ1bmRsZUlELCBzY29wZSk7CiAgICAgfQogCiAgICAgSGFzaFNldDx1aW50NjRfdD4gZ2V0
Um93SWRlbnRpZmllcnMoKQogICAgIHsKLSAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAg
ICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOwotCi0gICAgICAgIGRiLT5nZXRJ
ZGVudGlmaWVycyhbJmRvbmUsICZyb3dJZGVudGlmaWVyc10oSGFzaFNldDxQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllcj4mJiBpZGVudGlmaWVycykgewotICAgICAgICAgICAgZm9yIChhdXRvIGlk
ZW50aWZpZXIgOiBpZGVudGlmaWVycykKLSAgICAgICAgICAgICAgICByb3dJZGVudGlmaWVycy5h
ZGQoaWRlbnRpZmllci50b1VJbnQ2NCgpKTsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAg
ICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKLQotICAgICAgICByZXR1cm4gcm93
SWRlbnRpZmllcnM7CisgICAgICAgIHJldHVybiBnZXRSb3dJZGVudGlmaWVyc1N5bmMoKmRiKTsK
ICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBnZXRUb3BpY3MoKQpAQCAtMjM2LDEzICsyOTks
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIFNldFVwKCkgZmluYWwKICAgICB7Ci0gICAgICAgIGJv
b2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShtYWtlVGVtcG9y
YXJ5RGF0YWJhc2VQYXRoKCksIFt0aGlzLCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRh
YmFzZT4mJiBkYXRhYmFzZSkgewotICAgICAgICAgICAgZGIgPSBXVEZNb3ZlKGRhdGFiYXNlKTsK
LSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVu
KCZkb25lKTsKLQorICAgICAgICBkYiA9IGNyZWF0ZURhdGFiYXNlU3luYyhTUUxpdGVEYXRhYmFz
ZTo6aW5NZW1vcnlQYXRoKCkpOwogICAgICAgICBBU1NFUlRfVFJVRShkYik7CiAgICAgICAgIEFT
U0VSVF9UUlVFKGluc2VydFJlc3VsdDEgPSBpbnNlcnRSZWNvcmQocmVjb3JkMSkpOwogICAgICAg
ICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQyID0gaW5zZXJ0UmVjb3JkKHJlY29yZDIpKTsKQEAg
LTI2Niw2ICszMjMsMzYgQEAgc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXNoUmVjb3Jk
JiBhLCBjb25zdCBQdXNoUmVjb3JkJiBiKQogICAgICAgICAmJiBhLmV4cGlyYXRpb25UaW1lID09
IGIuZXhwaXJhdGlvblRpbWU7CiB9CiAKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBVcGRhdGVQ
dWJsaWNUb2tlbikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gaW5pdGlhbFRva2VuID0geyAnYScs
ICdiJywgJ2MnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZGlmaWVkVG9rZW4gPSB7ICdkJywg
J2UnLCAnZicgfTsKKworICAgIC8vIFNldHRpbmcgdGhlIGluaXRpYWwgcHVibGljIHRva2VuIHNo
b3VsZG4ndCBkZWxldGUgYW55dGhpbmcuCisgICAgYXV0byB1cGRhdGVSZXN1bHQxID0gdXBkYXRl
UHVibGljVG9rZW4oaW5pdGlhbFRva2VuKTsKKyAgICBFWFBFQ1RfRVEodXBkYXRlUmVzdWx0MSwg
UHVzaERhdGFiYXNlOjpQdWJsaWNUb2tlbkNoYW5nZWQ6Ok5vKTsKKyAgICBFWFBFQ1RfRVEoZ2V0
Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8dWludDY0X3Q+IHsgMSwgMiwgMywgNCB9KSk7CisK
KyAgICBhdXRvIGdldFJlc3VsdDEgPSBnZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShn
ZXRSZXN1bHQxLCBpbml0aWFsVG9rZW4pOworCisgICAgLy8gU2V0dGluZyB0aGUgc2FtZSB0b2tl
biBhZ2FpbiBzaG91bGQgZG8gbm90aGluZy4KKyAgICBhdXRvIHVwZGF0ZVJlc3VsdDIgPSB1cGRh
dGVQdWJsaWNUb2tlbihpbml0aWFsVG9rZW4pOworICAgIEVYUEVDVF9FUSh1cGRhdGVSZXN1bHQy
LCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6Tm8pOworICAgIEVYUEVDVF9FUShn
ZXRSb3dJZGVudGlmaWVycygpLCAoSGFzaFNldDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsK
KworICAgIGF1dG8gZ2V0UmVzdWx0MiA9IGdldFB1YmxpY1Rva2VuKCk7CisgICAgRVhQRUNUX0VR
KGdldFJlc3VsdDIsIGluaXRpYWxUb2tlbik7CisKKyAgICAvLyBDaGFuZ2luZyB0aGUgcHVibGlj
IHRva2VuIGFmdGVyd2FyZHMgc2hvdWxkIGRlbGV0ZSBldmVyeXRoaW5nLgorICAgIGF1dG8gdXBk
YXRlUmVzdWx0MyA9IHVwZGF0ZVB1YmxpY1Rva2VuKG1vZGlmaWVkVG9rZW4pOworICAgIEVYUEVD
VF9FUSh1cGRhdGVSZXN1bHQzLCBQdXNoRGF0YWJhc2U6OlB1YmxpY1Rva2VuQ2hhbmdlZDo6WWVz
KTsKKyAgICBFWFBFQ1RfVFJVRShnZXRSb3dJZGVudGlmaWVycygpLmlzRW1wdHkoKSk7CisKKyAg
ICBhdXRvIGdldFJlc3VsdDMgPSBnZXRQdWJsaWNUb2tlbigpOworICAgIEVYUEVDVF9FUShnZXRS
ZXN1bHQzLCBtb2RpZmllZFRva2VuKTsKK30KKwogVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIElu
c2VydFJlY29yZCkKIHsKICAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CkBAIC00
MDMsMTMgKzQ5MCw3IEBAIFRFU1QoUHVzaERhdGFiYXNlLCBNYW55SW5GbGlnaHRPcHMpCiAgICAg
Y29uc3RleHByIHVuc2lnbmVkIHJlY29yZENvdW50ID0gMjU2OwogCiAgICAgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVSZXN1bHQ7Ci0gICAgICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOwotICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoLCBbJmNyZWF0
ZVJlc3VsdCwgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2Up
IHsKLSAgICAgICAgICAgIGNyZWF0ZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOwotICAgICAg
ICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4oJmRvbmUp
OworICAgICAgICBhdXRvIGNyZWF0ZVJlc3VsdCA9IGNyZWF0ZURhdGFiYXNlU3luYyhwYXRoKTsK
ICAgICAgICAgQVNTRVJUX1RSVUUoY3JlYXRlUmVzdWx0KTsKIAogICAgICAgICBhdXRvJiBkYXRh
YmFzZSA9ICpjcmVhdGVSZXN1bHQ7CkBAIC00NDIsMTMgKzUyMyw3IEBAIFRFU1QoUHVzaERhdGFi
YXNlLCBNYW55SW5GbGlnaHRPcHMpCiAgICAgfQogCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVSZXN1bHQ7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwotICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoLCBbJmNyZWF0ZVJlc3VsdCwg
JmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKLSAgICAg
ICAgICAgIGNyZWF0ZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJhc2UpOwotICAgICAgICAgICAgZG9u
ZSA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworICAgICAg
ICBhdXRvIGNyZWF0ZVJlc3VsdCA9IGNyZWF0ZURhdGFiYXNlU3luYyhwYXRoKTsKICAgICAgICAg
QVNTRVJUX1RSVUUoY3JlYXRlUmVzdWx0KTsKIAogICAgICAgICBhdXRvIHRvcGljcyA9IGdldFRv
cGljc1N5bmMoKmNyZWF0ZVJlc3VsdCk7CkBAIC00NjcsMTMgKzU0Miw3IEBAIFRFU1QoUHVzaERh
dGFiYXNlLCBTdGFydHNGcm9tU2NyYXRjaE9uRG93bmdyYWRlKQogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0OwotICAgICAg
ICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwg
WyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRh
dGFiYXNlKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsK
LSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICB9KTsKLSAgICAgICAgVXRpbDo6cnVu
KCZkb25lKTsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMo
cGF0aCk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CiAgICAgfQogCkBAIC00
OTEsNiArNTYwLDc0IEBAIFRFU1QoUHVzaERhdGFiYXNlLCBTdGFydHNGcm9tU2NyYXRjaE9uRG93
bmdyYWRlKQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgY3JlYXRlRGF0YWJhc2VGcm9tU3RhdGVt
ZW50cyhTdHJpbmcgcGF0aCwgQVNDSUlMaXRlcmFsKiBzdGF0ZW1lbnRzLCBzaXplX3QgY291bnQp
Cit7CisgICAgU1FMaXRlRGF0YWJhc2UgZGI7CisgICAgZGIub3BlbihwYXRoKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpZiAoIWRiLmV4ZWN1
dGVDb21tYW5kKHN0YXRlbWVudHNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBY3F1aXJlZCBieSBydW5uaW5nIC5kdW1w
IGZyb20gdGhlIHNxbGl0ZTMgc2hlbGwgb24gYSBWMiBkYXRhYmFzZS4KK3N0YXRpYyBBU0NJSUxp
dGVyYWwgcHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzW10gPSB7CisgICAgIkNSRUFURSBUQUJMRSBT
dWJzY3JpcHRpb25TZXRzKCAgcm93SUQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5U
LCAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwgIGJ1bmRsZUlEIFRFWFQgTk9UIE5VTEwsICBz
ZWN1cml0eU9yaWdpbiBURVhUIE5PVCBOVUxMLCAgc2lsZW50UHVzaENvdW50IElOVCBOT1QgTlVM
TCwgIFVOSVFVRShidW5kbGVJRCwgc2VjdXJpdHlPcmlnaW4pKSJfcywKKyAgICAiSU5TRVJUIElO
VE8gU3Vic2NyaXB0aW9uU2V0cyBWQUxVRVMoMSwxNjQ5NTQxMDAxLCdjb20uYXBwbGUud2ViYXBw
JywnaHR0cHM6Ly93d3cuYXBwbGUuY29tJywwKSJfcywKKyAgICAiSU5TRVJUIElOVE8gU3Vic2Ny
aXB0aW9uU2V0cyBWQUxVRVMoMiwxNjQ5NTQxMDAxLCdjb20uYXBwbGUuU2FmYXJpJywnaHR0cHM6
Ly93d3cud2Via2l0Lm9yZycsMCkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNl
dHMgVkFMVUVTKDMsMTY0OTU0MTAwMSwnY29tLmFwcGxlLlNhZmFyaScsJ2h0dHBzOi8vd3d3LmFw
cGxlLmNvbScsMCkiX3MsCisgICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25zKCAgcm93SUQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCAgY3JlYXRpb25UaW1lIElOVCBOT1Qg
TlVMTCwgIHN1YnNjcmlwdGlvblNldElEIElOVCBOT1QgTlVMTCwgIHNjb3BlIFRFWFQgTk9UIE5V
TEwsICBlbmRwb2ludCBURVhUIE5PVCBOVUxMLCAgdG9waWMgVEVYVCBOT1QgTlVMTCBVTklRVUUs
ICBzZXJ2ZXJWQVBJRFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCAgY2xpZW50UHVibGljS2V5IEJM
T0IgTk9UIE5VTEwsICBjbGllbnRQcml2YXRlS2V5IEJMT0IgTk9UIE5VTEwsICBzaGFyZWRBdXRo
U2VjcmV0IEJMT0IgTk9UIE5VTEwsICBleHBpcmF0aW9uVGltZSBJTlQsICBVTklRVUUoc2NvcGUs
IHN1YnNjcmlwdGlvblNldElEKSkiX3MsCisgICAgIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMg
VkFMVUVTKDEsMTY0OTU0MTAwMSwxLCdodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lJywnaHR0
cHM6Ly9wdXNoRW5kcG9pbnQxJywndG9waWMxJyxYJzA1MDYnLFgnMDYwNycsWCcwNzA4JyxYJzA4
MDknLE5VTEwpIl9zLAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygyLDE2
NDk1NDEwMDEsMiwnaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nJywnaHR0cHM6Ly9wdXNoRW5k
cG9pbnQyJywndG9waWMyJyxYJzBlMGYnLFgnMTAxMScsWCcxMjEzJyxYJzE0MTUnLE5VTEwpIl9z
LAorICAgICJJTlNFUlQgSU5UTyBTdWJzY3JpcHRpb25zIFZBTFVFUygzLDE2NDk1NDEwMDEsMywn
aHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYycsJ2h0dHBzOi8vcHVzaEVuZHBvaW50MycsJ3RvcGlj
MycsWCcwMDAxJyxYJzAxMDInLFgnMDIwMycsWCcwNDA1JywxNjQzMzUwMDAwKSJfcywKKyAgICAi
SU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoNCwxNjQ5NTQxMDAxLDMsJ2h0dHBzOi8v
d3d3LmFwcGxlLmNvbS9pcGhvbmUnLCdodHRwczovL3B1c2hFbmRwb2ludDQnLCd0b3BpYzQnLFgn
MDkwYScsWCcwYTBiJyxYJzBiMGMnLFgnMGMwZCcsTlVMTCkiX3MsCisgICAgIkRFTEVURSBGUk9N
IHNxbGl0ZV9zZXF1ZW5jZSJfcywKKyAgICAiSU5TRVJUIElOVE8gc3FsaXRlX3NlcXVlbmNlIFZB
TFVFUygnU3Vic2NyaXB0aW9uU2V0cycsMykiX3MsCisgICAgIklOU0VSVCBJTlRPIHNxbGl0ZV9z
ZXF1ZW5jZSBWQUxVRVMoJ1N1YnNjcmlwdGlvbnMnLDQpIl9zLAorICAgICJDUkVBVEUgSU5ERVgg
U3Vic2NyaXB0aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1
YnNjcmlwdGlvblNldElEKSJfcywKKyAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9IDIiX3MsCit9
OworCitURVNUKFB1c2hEYXRhYmFzZSwgQ2FuTWlncmF0ZVYyRGF0YWJhc2VUb0N1cnJlbnRTY2hl
bWEpCit7CisgICAgYXV0byBwYXRoID0gbWFrZVRlbXBvcmFyeURhdGFiYXNlUGF0aCgpOworICAg
IEFTU0VSVF9UUlVFKGNyZWF0ZURhdGFiYXNlRnJvbVN0YXRlbWVudHMocGF0aCwgcHVzaERhdGFi
YXNlVjJTdGF0ZW1lbnRzLCBzdGQ6OnNpemUocHVzaERhdGFiYXNlVjJTdGF0ZW1lbnRzKSkpOwor
CisgICAgLy8gTWFrZSBzdXJlIHJlY29yZHMgYXJlIHRoZXJlIGFmdGVyIG1pZ3JhdGluZy4KKyAg
ICB7CisgICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBjcmVhdGVEYXRhYmFzZVN5bmMocGF0
aCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGRhdGFiYXNlUmVzdWx0KTsKKyAgICAgICAgYXV0byYg
ZGF0YWJhc2UgPSAqZGF0YWJhc2VSZXN1bHQ7CisKKyAgICAgICAgYXV0byByZWNvcmRSZXN1bHQg
PSBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZVN5bmMoZGF0YWJhc2UsICJjb20u
YXBwbGUuU2FmYXJpIl9zLCAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9ibG9nIl9zKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUocmVjb3JkUmVzdWx0KTsKKyAgICAgICAgQVNTRVJUX0VRKHJlY29yZFJl
c3VsdC0+dG9waWMsICJ0b3BpYzIiX3MpOworCisgICAgICAgIGF1dG8gcm93SWRlbnRpZmllcnMg
PSBnZXRSb3dJZGVudGlmaWVyc1N5bmMoZGF0YWJhc2UpOworICAgICAgICBBU1NFUlRfRVEocm93
SWRlbnRpZmllcnMsIChIYXNoU2V0PHVpbnQ2NF90PiB7IDEsIDIsIDMsIDQgfSkpOworCisgICAg
ICAgIC8vIFNldHRpbmcgdGhlIGluaXRpYWwgdG9rZW4gc2hvdWxkIHJldHVybiBQdWJsaWNUb2tl
bkNoYW5nZWQ6Ok5vLgorICAgICAgICBhdXRvIHVwZGF0ZVJlc3VsdCA9IHVwZGF0ZVB1YmxpY1Rv
a2VuU3luYyhkYXRhYmFzZSwgVmVjdG9yPHVpbnQ4X3Q+IHsgJ2EnLCAnYicgfSk7CisgICAgICAg
IEFTU0VSVF9FUSh1cGRhdGVSZXN1bHQsIFB1c2hEYXRhYmFzZTo6UHVibGljVG9rZW5DaGFuZ2Vk
OjpObyk7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHJlY29yZHMgYXJlIHRoZXJlIGFmdGVy
IHJlLW9wZW5pbmcgd2l0aG91dCBtaWdyYXRpb24uCisgICAgeworICAgICAgICBhdXRvIGRhdGFi
YXNlUmVzdWx0ID0gY3JlYXRlRGF0YWJhc2VTeW5jKHBhdGgpOworICAgICAgICBBU1NFUlRfVFJV
RShkYXRhYmFzZVJlc3VsdCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlID0gKmRhdGFiYXNlUmVz
dWx0OworCisgICAgICAgIGF1dG8gZ2V0UmVzdWx0ID0gZ2V0UHVibGljVG9rZW5TeW5jKGRhdGFi
YXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKGdldFJlc3VsdCwgKFZlY3Rvcjx1aW50OF90PiB7ICdh
JywgJ2InIH0pKTsKKworICAgICAgICBhdXRvIHJvd0lkZW50aWZpZXJzID0gZ2V0Um93SWRlbnRp
ZmllcnNTeW5jKGRhdGFiYXNlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJvd0lkZW50aWZpZXJzLCAo
SGFzaFNldDx1aW50NjRfdD4geyAxLCAyLCAzLCA0IH0pKTsKKyAgICB9Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVz
aERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVz
aERhZW1vbi5tbQppbmRleCBlZDgzMjgwZjEyZTNkMDkzYjY4MGZkYWI0ZWE2MWU4NjA3M2IwYTEx
Li4yNDk3YTQ4OGE4ZGQ4MjBjMjNiMmFkODUxMTI0MmMyZjE4MmMyOGE2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1t
CkBAIC0xMDkwLDYgKzEwOTAsNzUgQEAgVEVTVF9GKFdlYlB1c2hEVGVzdCwgVG9vTWFueVNpbGVu
dFB1c2hlc0NhdXNlc1Vuc3Vic2NyaWJlKQogICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1
YWxUb1N0cmluZzpAIlVuc3Vic2NyaWJlZCJdKTsKIH0KIAorVEVTVF9GKFdlYlB1c2hEVGVzdCwg
R2V0UHVzaFN1YnNjcmlwdGlvbldpdGhNaXNtYXRjaGVkUHVibGljVG9rZW4pCit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGh0bWxTb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9
Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbGV0IHBvc3ROb3Rl
TWVzc2FnZSA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2Uu
YmluZCh3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlKTsKKyAgICBsZXQgZ2V0UHVz
aE1hbmFnZXIgPQorICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3
LmpzJykKKyAgICAgICAgICAgIC50aGVuKCgpID0+IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJl
YWR5KQorICAgICAgICAgICAgLnRoZW4ocmVnaXN0cmF0aW9uID0+IHJlZ2lzdHJhdGlvbi5wdXNo
TWFuYWdlcik7CisKKyAgICBmdW5jdGlvbiBzdWJzY3JpYmUoKQorICAgIHsKKyAgICAgICAgZ2V0
UHVzaE1hbmFnZXIKKyAgICAgICAgICAgIC50aGVuKHB1c2hNYW5hZ2VyID0+IHB1c2hNYW5hZ2Vy
LnN1YnNjcmliZSh7IHVzZXJWaXNpYmxlT25seTogdHJ1ZSwgYXBwbGljYXRpb25TZXJ2ZXJLZXk6
IFZBTElEX1NFUlZFUl9LRVkgfSkpCisgICAgICAgICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4g
c3Vic2NyaXB0aW9uLnRvSlNPTigpKQorICAgICAgICAgICAgLnRoZW4ocG9zdE5vdGVNZXNzYWdl
KQorICAgICAgICAgICAgLmNhdGNoKGUgPT4gcG9zdE5vdGVNZXNzYWdlKGUudG9TdHJpbmcoKSkp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldFN1YnNjcmlwdGlvbigpCisgICAgeworICAgICAg
ICBnZXRQdXNoTWFuYWdlcgorICAgICAgICAgICAgLnRoZW4ocHVzaE1hbmFnZXIgPT4gcHVzaE1h
bmFnZXIuZ2V0U3Vic2NyaXB0aW9uKCkpCisgICAgICAgICAgICAudGhlbihzdWJzY3JpcHRpb24g
PT4gc3Vic2NyaXB0aW9uID8gc3Vic2NyaXB0aW9uLnRvSlNPTigpIDogbnVsbCkKKyAgICAgICAg
ICAgIC50aGVuKHBvc3ROb3RlTWVzc2FnZSkKKyAgICAgICAgICAgIC5jYXRjaChlID0+IHBvc3RO
b3RlTWVzc2FnZShlLnRvU3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBwb3N0Tm90ZU1lc3NhZ2Uo
J1JlYWR5Jyk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhUTUwiX3M7CisKKyAgICBfX2Jsb2NrIFJl
dGFpblB0cjxpZD4gbWVzc2FnZSA9IG5pbDsKKyAgICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZSA9
IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5k
bGVyOl4oaWQgcmVjZWl2ZWRNZXNzYWdlKSB7CisgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlZE1l
c3NhZ2U7CisgICAgICAgIGdvdE1lc3NhZ2UgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJl
cXVlc3QoaHRtbFNvdXJjZSwgIiJfcyk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZn
b3RNZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJS
ZWFkeSJdKTsKKworICAgIG1lc3NhZ2UgPSBuaWw7CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOwor
ICAgIFttX3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAic3Vic2NyaWJlKCkiIGNvbXBsZXRp
b25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZ290TWVzc2FnZSk7CisgICAgUmV0YWluUHRyPGlkPiBzdWJzY3JpcHRpb24gPSBtZXNz
YWdlOworICAgIEFTU0VSVF9GQUxTRShbc3Vic2NyaXB0aW9uIGlzRXF1YWw6W05TTnVsbCBudWxs
XV0pOworICAgIEFTU0VSVF9UUlVFKFtzdWJzY3JpcHRpb24gaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0gJiYgW3N1YnNjcmlwdGlvbiBvYmplY3RGb3JLZXk6QCJlbmRwb2ludCJd
KTsKKworICAgIG1lc3NhZ2UgPSBuaWw7CisgICAgZ290TWVzc2FnZSA9IGZhbHNlOworICAgIFtt
X3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U3Vic2NyaXB0aW9uKCkiIGNvbXBsZXRp
b25IYW5kbGVyOl4oaWQsIE5TRXJyb3IqKSB7IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZ290TWVzc2FnZSk7CisgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbDpzdWJz
Y3JpcHRpb24uZ2V0KCldKTsKKworICAgIC8vIElmIHRoZSBwdWJsaWMgdG9rZW4gY2hhbmdlcywg
YWxsIHN1YnNjcmlwdGlvbnMgc2hvdWxkIGJlIGludmFsaWRhdGVkLgorICAgIGF1dG8gdXRpbGl0
eUNvbm5lY3Rpb24gPSBjcmVhdGVBbmRDb25maWd1cmVDb25uZWN0aW9uVG9TZXJ2aWNlKCJvcmcu
d2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFl
bW9uV2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6
U2V0UHVibGljVG9rZW5Gb3JUZXN0aW5nLCBlbmNvZGVTdHJpbmcoImZvb2JhciJfcykpOworCisg
ICAgbWVzc2FnZSA9IG5pbDsKKyAgICBnb3RNZXNzYWdlID0gZmFsc2U7CisgICAgW21fd2ViVmll
dyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJnZXRTdWJzY3JpcHRpb24oKSIgY29tcGxldGlvbkhhbmRs
ZXI6XihpZCwgTlNFcnJvciopIHsgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZn
b3RNZXNzYWdlKTsKKyAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsOltOU051bGwgbnVs
bF1dKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>