<?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>217420</bug_id>
          
          <creation_ts>2020-10-06 20:27:15 -0700</creation_ts>
          <short_desc>Use sendWithAsyncReply for NetworkProcess::CancelDownload</short_desc>
          <delta_ts>2020-10-09 09:25:17 -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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>peng.liu6</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1695445</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-06 20:27:15 -0700</bug_when>
    <thetext>Use sendWithAsyncReply for NetworkProcess::CancelDownload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695447</commentid>
    <comment_count>1</comment_count>
      <attachid>410728</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-06 20:29:14 -0700</bug_when>
    <thetext>Created attachment 410728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695459</commentid>
    <comment_count>2</comment_count>
      <attachid>410734</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-06 21:44:49 -0700</bug_when>
    <thetext>Created attachment 410734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695579</commentid>
    <comment_count>3</comment_count>
      <attachid>410734</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-07 10:05:39 -0700</bug_when>
    <thetext>Comment on attachment 410734
Patch

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

&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:170
&gt; +        ASSERT_NOT_REACHED();

Will this be an issue in the case when we cancel a download without a completion handler?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695580</commentid>
    <comment_count>4</comment_count>
      <attachid>410734</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-07 10:06:24 -0700</bug_when>
    <thetext>Comment on attachment 410734
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:170
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Will this be an issue in the case when we cancel a download without a completion handler?

No.  Those now call didFail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695583</commentid>
    <comment_count>5</comment_count>
      <attachid>410734</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-07 10:19:38 -0700</bug_when>
    <thetext>Comment on attachment 410734
Patch

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

&gt;&gt;&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:170
&gt;&gt;&gt; +        ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; Will this be an issue in the case when we cancel a download without a completion handler?
&gt; 
&gt; No.  Those now call didFail.

I see, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695821</commentid>
    <comment_count>6</comment_count>
      <attachid>410734</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-10-08 01:08:47 -0700</bug_when>
    <thetext>Comment on attachment 410734
Patch

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

&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:95
&gt; +    if (completionHandler) {

Why do we need a check for completionHandler.
Can we just write:
if (m_wasCanceled) {
    completionHandler({ });
    return;
}
m_wasCanceled = true;
m_cancelCompletionHandler = WTFMove(completionHandler);

&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:171
&gt;  

I would write it as:
ASSERT(m_cancelCompletionHandler)
if (m_cancelCompletionHandler)
    m_cancelCompletionHandler(resumeData);

Why do we need the ASSERT though. Can we just try to ship without?

&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.cpp:121
&gt; +        m_download.cancel(nullptr);

Can we write it as m_download.cancel([] { }) instead?
We could add a default value in cancel declaration if needed.

&gt; Source/WebKit/NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:49
&gt; +        m_download-&gt;cancel(nullptr);

I would go with a default value instead of nullptr.

&gt; Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp:69
&gt; +    return API::Data::create(data.data(), data.size());

One liner?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm:772
&gt; +- (void)_download:(_WKDownload *)download didFailWithError:(NSError *)error

We do not check for errors in the test. It would be nice to validate this is a &apos;cancel&apos; error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696062</commentid>
    <comment_count>7</comment_count>
      <attachid>410734</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-08 16:20:25 -0700</bug_when>
    <thetext>Comment on attachment 410734
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/Downloads/DownloadMonitor.cpp:121
&gt;&gt; +        m_download.cancel(nullptr);
&gt; 
&gt; Can we write it as m_download.cancel([] { }) instead?
&gt; We could add a default value in cancel declaration if needed.

I was trying to make a difference between cancelling from the API which will want a resume data response and cancelling from here or NSProgress, which will call didFailWithError.  I&apos;m doing this a cleaner way in the next patch.

&gt;&gt; Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp:69
&gt;&gt; +    return API::Data::create(data.data(), data.size());
&gt; 
&gt; One liner?

That would require an explicit call to the RefPtr&lt;API::Data&gt; constructor because API::Data::create returns a Ref&lt;API::Data&gt; and the ?: operator requires the same type for the last two arguments and the first one would be nullptr.  I think this looks better, and it&apos;s identical to what we had.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm:772
&gt;&gt; +- (void)_download:(_WKDownload *)download didFailWithError:(NSError *)error
&gt; 
&gt; We do not check for errors in the test. It would be nice to validate this is a &apos;cancel&apos; error.

Good idea.  I&apos;m adding that check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696063</commentid>
    <comment_count>8</comment_count>
      <attachid>410894</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-08 16:22:41 -0700</bug_when>
    <thetext>Created attachment 410894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696074</commentid>
    <comment_count>9</comment_count>
      <attachid>410894</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-08 17:10:16 -0700</bug_when>
    <thetext>Comment on attachment 410894
Patch

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

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:730
&gt; +    WTFLogAlways(&quot;didCompleteWithError %@&quot;, error);

Will remove these logs before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696120</commentid>
    <comment_count>10</comment_count>
      <attachid>410906</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-08 20:58:45 -0700</bug_when>
    <thetext>Created attachment 410906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696123</commentid>
    <comment_count>11</comment_count>
      <attachid>410907</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-08 21:07:31 -0700</bug_when>
    <thetext>Created attachment 410907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696223</commentid>
    <comment_count>12</comment_count>
      <attachid>410907</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-10-09 08:42:29 -0700</bug_when>
    <thetext>Comment on attachment 410907
Patch

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

&gt; Source/WebKit/ChangeLog:11
&gt; +        cause any problems in practice.  That&apos;s only used by Safari and behaves similarly.

This might need more explanation

&gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:96
&gt; +    m_ignoreDidFail = ignoreDidFail;

There could be two calls with cancel({}, true) and cancel({}, false), the latter would override m_ignoreDidFail.
Can we capture ignoreDidFail and add a different check in didFail&gt;?
For instance, if there is a guarantee that completionHandlerWrapper is called before Download::didFail, we could add a check in didFail to see whether downLoadManager knows that the download is finished.

&gt; Source/WebKit/NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:49
&gt; +        m_download-&gt;cancel([](auto&amp;) { }, false);

It is not easy to understand why we use false here.
Maybe an enum would help, maybe add more info in ChangeLog.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm:822
&gt; +    EXPECT_EQ(error.code, NSURLErrorCancelled);

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696224</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-09 08:51:19 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #12)
&gt; Comment on attachment 410907 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410907&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; +        cause any problems in practice.  That&apos;s only used by Safari and behaves similarly.
&gt; 
&gt; This might need more explanation
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Downloads/Download.cpp:96
&gt; &gt; +    m_ignoreDidFail = ignoreDidFail;
&gt; 
&gt; There could be two calls with cancel({}, true) and cancel({}, false), the
&gt; latter would override m_ignoreDidFail.
That hypothetical future code would be a bug, and you would know because the first one would never receive didFail or didCancel.  Since there are only two calls here, I&apos;ve made sure both of them are correct, and tests cover that.
&gt; Can we capture ignoreDidFail and add a different check in didFail&gt;?
&gt; For instance, if there is a guarantee that completionHandlerWrapper is
&gt; called before Download::didFail, we could add a check in didFail to see
&gt; whether downLoadManager knows that the download is finished.
The problem is that when you tell CFNetwork to cancel a download, it tells you twice that it&apos;s done, once in the completionHandler of cancelByProducingResumeData and once in your NSURLSessionDelegate&apos;s didCompleteWithError.  Our API should inform the UI process once that the download ended.  I&apos;ve implemented two different ways of making sure the didCompleteWithError is ignored if you cancelled the download, and I think this is the better one.  We still need didCompleteWithError because sometimes downloads just fail without you cancelling them, like if the network connection is lost.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:49
&gt; &gt; +        m_download-&gt;cancel([](auto&amp;) { }, false);
&gt; 
&gt; It is not easy to understand why we use false here.
&gt; Maybe an enum would help, maybe add more info in ChangeLog.
I&apos;ll use an enum class IgnoreDidFail : bool { No, Yes } instead of this bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696225</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-09 08:52:18 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #13)
&gt; (In reply to youenn fablet from comment #12)
&gt; &gt; Comment on attachment 410907 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=410907&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; &gt; +        cause any problems in practice.  That&apos;s only used by Safari and behaves similarly.
&gt; &gt; 
&gt; &gt; This might need more explanation
Safari is the only API client that uses this, and it behaves similarly in didCancel and didFailWithError.  I&apos;ll include this in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696228</commentid>
    <comment_count>15</comment_count>
      <attachid>410907</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-10-09 09:02:49 -0700</bug_when>
    <thetext>Comment on attachment 410907
Patch

ok, let&apos;s go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696229</commentid>
    <comment_count>16</comment_count>
      <attachid>410940</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-09 09:04:49 -0700</bug_when>
    <thetext>Created attachment 410940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696233</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-09 09:24:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/r268261</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696235</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-09 09:25:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/70141283&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410728</attachid>
            <date>2020-10-06 20:29:14 -0700</date>
            <delta_ts>2020-10-06 21:44:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201006202914.patch</filename>
            <type>text/plain</type>
            <size>25029</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRhNzBkMmMwMTdkMDk2YWY5
ZGI2ZjY0NTI5ZDc5N2Y0MzEyNTUxNzkuLjM1ODBmOGZjMDJjMmQ5ZWVhNWRhNDYyZTJmNTQyZTY3
ZmYzZjllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMTAtMDYgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2Ugc2VuZFdp
dGhBc3luY1JlcGx5IGZvciBOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdh
eSBmb3IgYSBnb29kIGRvd25sb2FkIEFQSSB0aGF0IGhhcyBhIGNvbXBsZXRpb24gaGFuZGxlciB3
aGVuIHlvdSBjYWxsIGNhbmNlbCB0aGF0IGdpdmVzIHlvdSB0aGUgcmVzdW1lIGRhdGEgaWYgaXQg
Y2FuLgorICAgICAgICBDdXJyZW50bHkgeW91IGhhdmUgdG8gY2FsbCBjYW5jZWwgb24gdGhlIGRv
d25sb2FkLCB3YWl0IGZvciBkaWRDYW5jZWwgb24gdGhlIGRlbGVnYXRlLCB0aGVuIGdldCB0aGUg
cmVzdW1lIGRhdGEgZnJvbSB0aGUgZG93bmxvYWQgYWdhaW4uCisgICAgICAgIFRoaXMgaGFzIHRo
ZSBzaWRlIGVmZmVjdCBvZiBEb3dubG9hZE1vbml0b3IgY2FuY2VsbGF0aW9ucyBjYWxsaW5nIGRp
ZEZhaWxXaXRoRXJyb3IgaW5zdGVhZCBvZiBkaWRDYW5jZWwsIHdoaWNoIG1ha2VzIHNlbnNlIGFu
ZCBzaG91bGRuJ3QKKyAgICAgICAgY2F1c2UgYW55IHByb2JsZW1zIGluIHByYWN0aWNlLiAgVGhh
dCdzIG9ubHkgdXNlZCBieSBTYWZhcmkgYW5kIGJlaGF2ZXMgc2ltaWxhcmx5LgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRDYW5j
ZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2FkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkTW9uaXRvcjo6dGltZXJGaXJlZCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBl
bmRpbmdEb3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvUGVuZGluZ0Rvd25sb2FkLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2NvY29hL1dLRG93bmxvYWRQcm9ncmVzcy5tbToKKyAgICAgICAgKC1bV0tEb3dubG9hZFByb2dy
ZXNzIHBlcmZvcm1DYW5jZWxdKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjYW5jZWxEb3dubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGVuZGluZ0Rvd25s
b2FkQ2FuY2VsZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZENhbmNl
bCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2Vz
LmluOgorCiAyMDIwLTEwLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTW92ZSBvd25lcnNoaXAgb2YgRG93bmxvYWRDbGllbnQgZnJvbSBX
ZWJQcm9jZXNzUG9vbCB0byBEb3dubG9hZFByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKaW5kZXggOWI2NTNjNWVjODM3OTIz
N2Q2MjQ2ZWNjYzhiNjU5M2ViNWU0MDMzYS4uMmFhMjAxY2I5NTU5NjU0MzdmNjVlNzQ0ZWQ0ZjVh
NmU5NDgzNGIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkLmNwcApAQCAtODYsMTMgKzg2LDE2IEBAIERvd25sb2FkOjp+RG93bmxv
YWQoKQogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQogCi12
b2lkIERvd25sb2FkOjpjYW5jZWwoKQordm9pZCBEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKG1f
d2FzQ2FuY2VsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dhc0NhbmNlbGVkID0gdHJ1ZTsK
KyAgICBpZiAobV93YXNDYW5jZWxlZCAmJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7
CisgICAgICAgIG1fd2FzQ2FuY2VsZWQgPSB0cnVlOworICAgICAgICBtX2NhbmNlbENvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgfQogCiAgICAgaWYg
KG1fZG93bmxvYWQpIHsKICAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7CkBAIC0xNjEsNyAr
MTY0LDEwIEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkQ2FuY2Vs
OiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkudG9VSW50NjQoKSk7CiAKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwocmVzdW1lRGF0YSkpOworICAg
IGlmIChtX2NhbmNlbENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBtX2NhbmNlbENvbXBsZXRp
b25IYW5kbGVyKHJlc3VtZURhdGEpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAKICAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7CiAgICAgICAgIG1fc2FuZGJv
eEV4dGVuc2lvbi0+cmV2b2tlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBhMDA0NWI4YzA3NzhlYjJhNmZkZTVmNzlhOWE3
ZmY4OWE5ZTQxMjg5Li5jMzM4NGZkOTZmYWVjN2U5M2E0ZjZmOGYwMzMxNzdjYzVhZWRiZmQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmgKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIH5Eb3dubG9hZCgpOwogCiAgICAgdm9p
ZCByZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJp
bmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKLSAgICB2b2lkIGNhbmNlbCgp
OworICAgIHZvaWQgY2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik+JiYpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcHVibGlzaFBy
b2dyZXNzKGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpA
QCAtMTI4LDYgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVkRGF0YSB7
IGZhbHNlIH07CiAgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07CiAgICAg
dW5zaWduZWQgbV90ZXN0U3BlZWRNdWx0aXBsaWVyIHsgMSB9OworICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+IG1fY2FuY2VsQ29tcGxldGlvbkhh
bmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmlu
ZGV4IGQwOTFjMjkyZDA0NTdiNTU3YzE3MzMwM2M4YzVlN2Q1MTc4YjIzY2EuLjI0YTY2MDdiOGMw
YjA5ODVjMWRiMWJkMjUxNzhlMGZmYmEzYWQ0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAt
MTA5LDE1ICsxMDksMTkgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgRG93bmxvYWRJRCBkb3dubG8KICNlbmRpZgogfQogCi12
b2lkIERvd25sb2FkTWFuYWdlcjo6Y2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KQordm9pZCBEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxv
YWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoYXV0byogZG93bmxvYWQgPSBtX2Rvd25s
b2Fkcy5nZXQoZG93bmxvYWRJRCkpIHsKICAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdEb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwotICAgICAgICBkb3dubG9hZC0+Y2FuY2VsKCk7Cisg
ICAgICAgIGRvd25sb2FkLT5jYW5jZWwoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVu
ZGluZ0Rvd25sb2Fkcy50YWtlKGRvd25sb2FkSUQpKQotICAgICAgICBwZW5kaW5nRG93bmxvYWQt
PmNhbmNlbCgpOworICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVuZGluZ0Rvd25s
b2Fkcy50YWtlKGRvd25sb2FkSUQpKSB7CisgICAgICAgIHBlbmRpbmdEb3dubG9hZC0+Y2FuY2Vs
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDZlNDRhZDI2NDJiNmYy
MDQ3NjEzNDZmZjE5MjQwYjk2NWRjODZkODIuLjJjZDE2MWIwYWMzZTc4OWUyMjQ2YzA1YjAxNjVm
MWM3MjY3OGZhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCkBAIC03Myw3ICs3Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9u
KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb25Gb3JEb3dubG9hZHMoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQXV0aGVudGljYXRp
b25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwZW5kaW5nRG93bmxvYWRDYW5jZWxlZChEb3dubG9hZElEKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWYoKSBjb25zdCA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIGNvbnN0ID0gMDsKQEAgLTg5LDcgKzg4LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQQUw6OlNlc3Npb25JRCwgRG93bmxv
YWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKIAotICAgIHZvaWQgY2FuY2VsRG93
bmxvYWQoRG93bmxvYWRJRCk7CisgICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3dubG9hZElELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKERvd25s
b2FkSUQsIGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKaW5kZXggOWJkOTlkMTI3MWM1ZDdmZTQ4NTNjNTg5YWVjOTYxMTEx
YmRlMjEwYS4uNTU4Y2M0ZGRkN2ViNzIyMWEwZWM4ZTk3MTRjN2ViMGQwYzBmNWJmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25p
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1vbml0b3IuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEb3dubG9hZE1vbml0b3I6
OnRpbWVyRmlyZWQoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlf
TEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKTsKICAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0
UmF0ZSgpIDwgdGhyb3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5n
IGRvd25sb2FkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLnRv
VUludDY0KCkpOwotICAgICAgICBtX2Rvd25sb2FkLmNhbmNlbCgpOworICAgICAgICBtX2Rvd25s
b2FkLmNhbmNlbChudWxscHRyKTsKICAgICB9IGVsc2UgaWYgKG1faW50ZXJ2YWwgKyAxIDwgV1RG
X0FSUkFZX0xFTkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSkgewogICAgICAgICBSRUxFQVNFX0xP
R19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBzdWZmaWNpZW50IHRocm91Z2hwdXQgcmF0ZSAoaWQg
PSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2FkSUQoKS50b1VJbnQ2NCgpKTsKICAg
ICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVydmFsKG1faW50ZXJ2
YWwrKykgLyB0ZXN0U3BlZWRNdWx0aXBsaWVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKaW5kZXgg
ZDkyMjU5NjMxMDk1MDExNGU1OTdiNDY0YWQ5YTllYTg1ZmNkNmIxZS4uZjgyYWE0OGNlN2YwMTM2
YmVmM2Q2YWM3NDQwMmYwNmU4ODhhMWM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCkBAIC03Miwx
MSArNzIsMTEgQEAgdm9pZCBQZW5kaW5nRG93bmxvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXUKICAgICBtX25ldHdvcmtMb2FkLT5j
b250aW51ZVdpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKG5ld1JlcXVlc3QpKTsKIH0KIAotdm9pZCBQ
ZW5kaW5nRG93bmxvYWQ6OmNhbmNlbCgpCit2b2lkIFBlbmRpbmdEb3dubG9hZDo6Y2FuY2VsKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKG1fbmV0d29ya0xvYWQpOwogICAgIG1fbmV0d29y
a0xvYWQtPmNhbmNlbCgpOwotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENh
bmNlbCh7IH0pKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9QZW5kaW5nRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oCmluZGV4IGVlODc3NGZiOWRlNDgzODdkYjc2Yjc0OGU1
YTQyMWE1YTg1OThjYmEuLmE5MWY5YmUxZmI5YjU5ODM0ZDFhOTJmNjExZGNiNDY2YmJiZTcxZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRp
bmdEb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBQZW5kaW5n
RG93bmxvYWQoSVBDOjpDb25uZWN0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtMb2FkPiYm
LCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIAog
ICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjYW5jZWwoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0KaW5kZXgg
OTU1YzA0ODBmZTdjN2NhZjYzYzEyZDc5M2RkNmY4NDQxMDI0NDIxYS4uMmQ0Yzk4NzQ5NDRlNTli
MmNmODI0MGExMzdjNWQ4OTFiMzYwYmMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvV0tEb3dubG9hZFByb2dyZXNzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL1dLRG93bmxvYWRQcm9n
cmVzcy5tbQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBjb3VudE9m
Qnl0ZXNSZWNlaXZlZEtleVBhdGggPSBAImNvdW50T2ZCeXRlc1JlY2VpdmVkIjsKIC0gKHZvaWQp
cGVyZm9ybUNhbmNlbAogewogICAgIGlmIChtX2Rvd25sb2FkKQotICAgICAgICBtX2Rvd25sb2Fk
LT5jYW5jZWwoKTsKKyAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKG51bGxwdHIpOwogICAgIG1f
ZG93bmxvYWQgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNhMTM5Yzg5MTAwZWJhMjE4Y2JmZmZhZGMyZTNk
ZmE4NjIxN2YxNjMuLmE1OTExNzU2OWUxZmQxZWUzOGU5ODRmZTg0MzkzNTI2MTJmYmMzNTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBA
IC0yMDcxLDkgKzIwNzEsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWVEb3dubG9hZChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYQogICAgIGRvd25sb2Fk
TWFuYWdlcigpLnJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRJRCwgcmVzdW1lRGF0
YSwgcGF0aCwgV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9CiAKLXZvaWQgTmV0
d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBkb3dubG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3du
bG9hZElEKTsKKyAgICBkb3dubG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTIwODgsMTEgKzIwODgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChEb3dubG9hZElEIGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlcwogICAgIGRvd25s
b2FkTWFuYWdlcigpLmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGRvd25sb2FkSUQsIFdURk1vdmUo
cmVxdWVzdCkpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpwZW5kaW5nRG93bmxvYWRDYW5j
ZWxlZChEb3dubG9hZElEIGRvd25sb2FkSUQpCi17Ci0gICAgZG93bmxvYWRQcm94eUNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ2FuY2VsKHsgfSksIGRvd25s
b2FkSUQudG9VSW50NjQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihOZXR3b3JrRGF0YVRhc2smIG5ldHdvcmtEYXRhVGFzaywgUmVzcG9u
c2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKICAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0gbmV0d29y
a0RhdGFUYXNrLnBlbmRpbmdEb3dubG9hZElEKCkudG9VSW50NjQoKTsKQEAgLTIxMDUsMTEgKzIx
MDAsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24o
TmV0d29ya0RhdGFUYXNrJiBuZXR3b3JrRGF0YVRhcwogCiAgICAgZG93bmxvYWRQcm94eUNvbm5l
Y3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG5ldHdvcmtEYXRhVGFzayA9IG1ha2VSZWYobmV0
d29ya0RhdGFUYXNrKV0gKFN0cmluZyYmIGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3
cml0ZSkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFz
ay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZG93bmxvYWRNYW5hZ2VyKCkuY2FuY2VsRG93bmxvYWQoZG93bmxv
YWRJRCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246Oklnbm9y
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRlc3RpbmF0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihQb2xp
Y3lBY3Rpb246Oklnbm9yZSk7CiAgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+c2V0UGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24oZGVzdGluYXRpb24sIFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSksIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246OkRvd25sb2FkKTsKICAgICAgICAgaWYgKG5ldHdv
cmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlOjpDYW5jZWxpbmcg
fHwgbmV0d29ya0RhdGFUYXNrLT5zdGF0ZSgpID09IE5ldHdvcmtEYXRhVGFzazo6U3RhdGU6OkNv
bXBsZXRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAppbmRleCBkMWJmZDIwNDVhODIyMjcyNTAxNTBkMjA3NWU4NGQ3ZTAyZGUwZTM4Li42ZDNlN2Iz
YmIyNTQ4NDBhOTZlNzkxOWI2NTM1NzY4OTE1YjE1YzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC00MDMsNyArNDAzLDYgQEAgcHJpdmF0
ZToKICAgICBJUEM6OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkgb3ZlcnJp
ZGU7CiAgICAgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbkZvckRvd25s
b2FkcygpIG92ZXJyaWRlIHsgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7IH0KICAg
ICBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigp
IG92ZXJyaWRlOwotICAgIHZvaWQgcGVuZGluZ0Rvd25sb2FkQ2FuY2VsZWQoRG93bmxvYWRJRCkg
b3ZlcnJpZGU7CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNlaXZl
U3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtNDI0LDcgKzQyMyw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRvd25sb2FkUmVxdWVzdChQQUw6OlNlc3Npb25JRCwgRG93bmxv
YWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKTsKICAg
ICB2b2lkIHJlc3VtZURvd25sb2FkKFBBTDo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiYpOwotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJ
RCk7CisgICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIHB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKERvd25sb2FkSUQsIGNvbnN0IFVS
TCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5k
ZXggZDBjNDk5MjgzZDcwYTJiOGU0ZGE2OTc0YjY3NmVhZDZmNjAxYjE5NC4uMDZkYzFkOTlhNDgz
ZmQ0MGU4MzBlZjZkODRkODI1NmEwMjEwMzMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC01MSw3ICs1
MSw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAg
IERvd25sb2FkUmVxdWVzdChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYktpdDo6RG93bmxv
YWRJRCBkb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgZW51bTpi
b29sIE9wdGlvbmFsPFdlYktpdDo6TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4sIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSkKICAgICBSZXN1
bWVEb3dubG9hZChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYktpdDo6RG93bmxvYWRJRCBk
b3dubG9hZElELCBJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1lRGF0YSwgU3RyaW5nIHBhdGgsIFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi0g
ICAgQ2FuY2VsRG93bmxvYWQoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQpCisgICAgQ2Fu
Y2VsRG93bmxvYWQoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQpIC0+IChJUEM6OkRhdGFS
ZWZlcmVuY2UgcmVzdW1lRGF0YSkgQXN5bmMKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBQdWJs
aXNoRG93bmxvYWRQcm9ncmVzcyhXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgVVJMIHVy
bCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCmluZGV4IDlkM2JjMzg2MDkzMWE5ZjhlNzQ0ZTgxNTVlNzI3YTZiY2Ez
ODdiNTEuLjVjOWVlOTM5ZTZiZWNlMDQwZWFkYmNkYjI3Yjk3MWY5OTAxNmVlMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
QEAgLTYxLDEwICs2MSwyMyBAQCBEb3dubG9hZFByb3h5OjpEb3dubG9hZFByb3h5KERvd25sb2Fk
UHJveHlNYXAmIGRvd25sb2FkUHJveHlNYXAsIFdlYnNpdGVEYXRhU3RvcgogCiBEb3dubG9hZFBy
b3h5Ojp+RG93bmxvYWRQcm94eSgpID0gZGVmYXVsdDsKIAorc3RhdGljIFJlZlB0cjxBUEk6OkRh
dGE+IGNyZWF0ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIGlm
IChkYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
QVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKK30KKwogdm9pZCBE
b3dubG9hZFByb3h5OjpjYW5jZWwoKQogewotICAgIGlmIChtX2RhdGFTdG9yZSkKLSAgICAgICAg
bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkgeworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2Fk
SUQpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKSB7CisgICAgICAgICAgICBtX3Jlc3VtZURhdGEgPSBj
cmVhdGVEYXRhKHJlc3VtZURhdGEpOworICAgICAgICAgICAgbV9jbGllbnQtPmRpZENhbmNlbCgq
dGhpcyk7CisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgq
dGhpcyk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZh
bGlkYXRlKCkKQEAgLTE2MSwxNCArMTc0LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGaW5p
c2goKQogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0K
IAotc3RhdGljIFJlZlB0cjxBUEk6OkRhdGE+IGNyZWF0ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiBkYXRhKQotewotICAgIGlmIChkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKLX0KLQogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCiB7CiAgICAg
bV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsKQEAgLTE3OSwxNSArMTg0LDUg
QEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UKICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxv
YWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKLXsKLSAgICBtX3Jlc3VtZURhdGEg
PSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOwotCi0gICAgbV9jbGllbnQtPmRpZENhbmNlbCgqdGhp
cyk7Ci0KLSAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhp
cyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAppbmRleCAzZTc0MDhjMWViZWRlYTRl
N2FmMmQ5YjliYjFkOTIwOTVmZmMzNjBmLi5mYjNlMGMxZjUxNDM1OWIyMTYzZmFmMTVkMDVjODU3
MjE1NzkzYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmgKQEAgLTExNiw3ICsxMTYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
Q3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICB2b2lkIGRpZEZpbmlz
aCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKLSAgICB2b2lkIGRpZENhbmNlbChj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogICAgIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGlyZWN0UmVxdWVzdCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZywgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlLCBBbGxvd092ZXJ3cml0ZSk+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDU3YjlkYmU3YzU1MmY1NzRmZDA1ODJjOWM2YjdmMDg1ZWU4NzliMDkuLjQ3ZWRmYjRi
OTZjYzgwZDBmZjEwMTY0NWUwNTc4NmU2YjUxYzk3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0zMSw1ICszMSw0IEBAIG1lc3NhZ2VzIC0+IERvd25sb2FkUHJveHkgewogICAgIERpZENy
ZWF0ZURlc3RpbmF0aW9uKFN0cmluZyBwYXRoKQogICAgIERpZEZpbmlzaCgpCiAgICAgRGlkRmFp
bChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1l
RGF0YSkKLSAgICBEaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpCiB9CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTY2NDFj
MDJhNDcyZWIyOGQ3YWEzZjFmYzFlOTU0M2ZmNTQ0MmQ3OS4uM2FjOGE1MDcxYjAzOTAxZTIxZTNj
NDUwODZiZWVkMjY2YTkyYzkxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTEwLTA2ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRoQXN5
bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgICgtW1dhaXRVbnRpbERvd25sb2FkQ2Fu
Y2VsZWREZWxlZ2F0ZSBfZG93bmxvYWQ6ZGlkRmFpbFdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
RG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIF9kb3dubG9hZDpkaWRGYWlsV2l0aEVycm9yOl0p
OgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgd2FpdEZvckRpZEZhaWxd
KToKKyAgICAgICAgKC1bRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIHN0b3BXYWl0aW5nRm9y
RGlkRmFpbF0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bW9uaXRvckRlbGVnYXRlKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoLVtXYWl0VW50aWxEb3dubG9hZENh
bmNlbGVkRGVsZWdhdGUgX2Rvd25sb2FkRGlkQ2FuY2VsOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkQ2FuY2VsOl0pOiBEZWxl
dGVkLgorCiAyMDIwLTEwLTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNv
bT4KIAogICAgICAgICBydW4tbWluaWJyb3dzZXIgbm90IGNvbXBhdGlibGUgd2l0aCBweXRob24z
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25s
b2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5t
bQppbmRleCAxODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0Li4yZDRjZmY3
MTA2OGMyMTVhZDAxMDBiMTE3YjEyMmRmMWJjNmZlMjU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTc2OSw3ICs3NjksNyBA
QCBzdGF0aWMgYm9vbCBkaWREb3dubG9hZFN0YXJ0OwogICAgIFtkb3dubG9hZC5vcmlnaW5hdGlu
Z1dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGVdOwogfQogCi0tICh2
b2lkKV9kb3dubG9hZERpZENhbmNlbDooX1dLRG93bmxvYWQgKilkb3dubG9hZAorLSAodm9pZClf
ZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQgZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJv
ciAqKWVycm9yCiB7CiAgICAgaXNEb25lID0gdHJ1ZTsKIH0KQEAgLTc5OCwyMiArNzk4LDM4IEBA
IFRFU1QoX1dLRG93bmxvYWQsIENyYXNoQWZ0ZXJEb3dubG9hZERpZEZpbmlzaFdoZW5Eb3dubG9h
ZFByb3h5SG9sZHNUaGVMYXN0UmVmT25XCiB9CiAKIHN0YXRpYyBib29sIHJlY2VpdmVkRGF0YTsK
LXN0YXRpYyBib29sIGRpZENhbmNlbDsKIHN0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGRlc3Rp
bmF0aW9uOwogCiBAaW50ZXJmYWNlIERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxfV0tEb3dubG9hZERlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9yRGlkRmFpbDsKKy0gKHZv
aWQpc3RvcFdhaXRpbmdGb3JEaWRGYWlsOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gRG93bmxv
YWRNb25pdG9yVGVzdERlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVz
dERlbGVnYXRlIHsKKyAgICBib29sIGRpZEZhaWw7Cit9CiAKIC0gKHZvaWQpX2Rvd25sb2FkRGlk
U3RhcnQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKIHsKICAgICBkaWREb3dubG9hZFN0YXJ0ID0g
dHJ1ZTsKIH0KIAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9XS0Rvd25sb2FkICopZG93
bmxvYWQKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxX
aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIGRpZEZhaWwgPSB0cnVlOworfQorCist
ICh2b2lkKXdhaXRGb3JEaWRGYWlsCit7CisgICAgZGlkRmFpbCA9IGZhbHNlOworICAgIHdoaWxl
ICghZGlkRmFpbCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
K30KKworLSAodm9pZClzdG9wV2FpdGluZ0ZvckRpZEZhaWwKIHsKLSAgICBkaWRDYW5jZWwgPSB0
cnVlOworICAgIEVYUEVDVF9GQUxTRShkaWRGYWlsKTsKKyAgICBkaWRGYWlsID0gdHJ1ZTsKIH0K
IAogLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQgZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYWxsb3dPdmVyd3JpdGUsIE5TU3RyaW5nICpkZXN0aW5h
dGlvbikpY29tcGxldGlvbkhhbmRsZXIKQEAgLTg1OSwxMCArODc1LDE1IEBAIHZvaWQgcmVzcG9u
ZFNsb3dseShpbnQgc29ja2V0LCBkb3VibGUga2JwcywgYm9vbCYgdGVybWluYXRlU2VydmVyKQog
ICAgIH0KIH0KIAorc3RhdGljIFJldGFpblB0cjxEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGU+
IG1vbml0b3JEZWxlZ2F0ZSgpCit7CisgICAgc3RhdGljIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CisgICAgcmV0dXJuIGRlbGVnYXRl
OworfQorCiBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllcihzaXplX3QgbXVsdGlwbGllcikKIHsKICAgICBzdGF0aWMgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXdd
KTsKLSAgICBzdGF0aWMgYXV0byBkb3dubG9hZERlbGVnYXRlID0gYWRvcHROUyhbRG93bmxvYWRN
b25pdG9yVGVzdERlbGVnYXRlIG5ld10pOwogICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIG5ld10pOwogICAgIGF1
dG8gcHJvY2Vzc1Bvb2wgPSBhZG9wdE5TKFtbV0tQcm9jZXNzUG9vbCBhbGxvY10gX2luaXRXaXRo
Q29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtb
X1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CkBAIC04
NzEsNyArODkyLDcgQEAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlld1dpdGhEb3dubG9hZE1v
bml0b3JTcGVlZE11bHRpcGxpZXIoc2l6ZV90IG11bHRpcGxpZXIKICAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdXTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmll
d0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKLSAgICBbd2ViVmlldyBjb25maWd1cmF0aW9u
XS5wcm9jZXNzUG9vbC5fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGUuZ2V0KCk7
CisgICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wuX2Rvd25sb2FkRGVsZWdh
dGUgPSBtb25pdG9yRGVsZWdhdGUoKS5nZXQoKTsKICAgICByZXR1cm4gd2ViVmlldzsKIH0KIApA
QCAtODkyLDggKzkxMyw3IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBz
LCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVn
cm91bmQ6OlllcykKICAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwotICAgIGRpZENhbmNlbCA9IGZh
bHNlOwotICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKKyAgICBbbW9uaXRvckRlbGVnYXRlKCkg
d2FpdEZvckRpZEZhaWxdOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CiAgICAgW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKIH0K
QEAgLTkwOCw4ICs5MjgsNyBAQCBURVNUKF9XS0Rvd25sb2FkLCBESVNBQkxFRF9Eb3dubG9hZE1v
bml0b3JTdXJ2aXZlKQogewogICAgIF9fYmxvY2sgQk9PTCB0aW1lb3V0UmVhY2hlZCA9IE5POwog
ICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDIuNSAq
IE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShkaWRDYW5jZWwpOwotICAgICAgICBkaWRDYW5jZWwgPSB0cnVlOworICAgICAg
ICBbbW9uaXRvckRlbGVnYXRlKCkgc3RvcFdhaXRpbmdGb3JEaWRGYWlsXTsKICAgICAgICAgdGlt
ZW91dFJlYWNoZWQgPSBZRVM7CiAgICAgfSk7CiAKQEAgLTkyMyw4ICs5NDIsNyBAQCBURVNUKF9X
S0Rvd25sb2FkLCBEb3dubG9hZE1vbml0b3JSZXR1cm5Ub0ZvcmVncm91bmQpCiB7CiAgICAgX19i
bG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7Ci0g
ICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIFttb25pdG9yRGVsZWdhdGUoKSBzdG9w
V2FpdGluZ0ZvckRpZEZhaWxdOwogICAgICAgICB0aW1lb3V0UmVhY2hlZCA9IFlFUzsKICAgICB9
KTsKICAgICBkb3dubG9hZEF0UmF0ZSgwLjUsIDEyMCwgQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6
WWVzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410734</attachid>
            <date>2020-10-06 21:44:49 -0700</date>
            <delta_ts>2020-10-08 16:22:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201006214442.patch</filename>
            <type>text/plain</type>
            <size>25775</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRhNzBkMmMwMTdkMDk2YWY5
ZGI2ZjY0NTI5ZDc5N2Y0MzEyNTUxNzkuLjM1ODBmOGZjMDJjMmQ5ZWVhNWRhNDYyZTJmNTQyZTY3
ZmYzZjllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMTAtMDYgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2Ugc2VuZFdp
dGhBc3luY1JlcGx5IGZvciBOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdh
eSBmb3IgYSBnb29kIGRvd25sb2FkIEFQSSB0aGF0IGhhcyBhIGNvbXBsZXRpb24gaGFuZGxlciB3
aGVuIHlvdSBjYWxsIGNhbmNlbCB0aGF0IGdpdmVzIHlvdSB0aGUgcmVzdW1lIGRhdGEgaWYgaXQg
Y2FuLgorICAgICAgICBDdXJyZW50bHkgeW91IGhhdmUgdG8gY2FsbCBjYW5jZWwgb24gdGhlIGRv
d25sb2FkLCB3YWl0IGZvciBkaWRDYW5jZWwgb24gdGhlIGRlbGVnYXRlLCB0aGVuIGdldCB0aGUg
cmVzdW1lIGRhdGEgZnJvbSB0aGUgZG93bmxvYWQgYWdhaW4uCisgICAgICAgIFRoaXMgaGFzIHRo
ZSBzaWRlIGVmZmVjdCBvZiBEb3dubG9hZE1vbml0b3IgY2FuY2VsbGF0aW9ucyBjYWxsaW5nIGRp
ZEZhaWxXaXRoRXJyb3IgaW5zdGVhZCBvZiBkaWRDYW5jZWwsIHdoaWNoIG1ha2VzIHNlbnNlIGFu
ZCBzaG91bGRuJ3QKKyAgICAgICAgY2F1c2UgYW55IHByb2JsZW1zIGluIHByYWN0aWNlLiAgVGhh
dCdzIG9ubHkgdXNlZCBieSBTYWZhcmkgYW5kIGJlaGF2ZXMgc2ltaWxhcmx5LgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRDYW5j
ZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2FkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkTW9uaXRvcjo6dGltZXJGaXJlZCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBl
bmRpbmdEb3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvUGVuZGluZ0Rvd25sb2FkLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2NvY29hL1dLRG93bmxvYWRQcm9ncmVzcy5tbToKKyAgICAgICAgKC1bV0tEb3dubG9hZFByb2dy
ZXNzIHBlcmZvcm1DYW5jZWxdKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjYW5jZWxEb3dubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGVuZGluZ0Rvd25s
b2FkQ2FuY2VsZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZENhbmNl
bCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2Vz
LmluOgorCiAyMDIwLTEwLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTW92ZSBvd25lcnNoaXAgb2YgRG93bmxvYWRDbGllbnQgZnJvbSBX
ZWJQcm9jZXNzUG9vbCB0byBEb3dubG9hZFByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKaW5kZXggOWI2NTNjNWVjODM3OTIz
N2Q2MjQ2ZWNjYzhiNjU5M2ViNWU0MDMzYS4uMmFhMjAxY2I5NTU5NjU0MzdmNjVlNzQ0ZWQ0ZjVh
NmU5NDgzNGIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkLmNwcApAQCAtODYsMTMgKzg2LDE2IEBAIERvd25sb2FkOjp+RG93bmxv
YWQoKQogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQogCi12
b2lkIERvd25sb2FkOjpjYW5jZWwoKQordm9pZCBEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKG1f
d2FzQ2FuY2VsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dhc0NhbmNlbGVkID0gdHJ1ZTsK
KyAgICBpZiAobV93YXNDYW5jZWxlZCAmJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7
CisgICAgICAgIG1fd2FzQ2FuY2VsZWQgPSB0cnVlOworICAgICAgICBtX2NhbmNlbENvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgfQogCiAgICAgaWYg
KG1fZG93bmxvYWQpIHsKICAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7CkBAIC0xNjEsNyAr
MTY0LDEwIEBAIHZvaWQgRG93bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkQ2FuY2Vs
OiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkudG9VSW50NjQoKSk7CiAKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwocmVzdW1lRGF0YSkpOworICAg
IGlmIChtX2NhbmNlbENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBtX2NhbmNlbENvbXBsZXRp
b25IYW5kbGVyKHJlc3VtZURhdGEpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAKICAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7CiAgICAgICAgIG1fc2FuZGJv
eEV4dGVuc2lvbi0+cmV2b2tlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBhMDA0NWI4YzA3NzhlYjJhNmZkZTVmNzlhOWE3
ZmY4OWE5ZTQxMjg5Li5jMzM4NGZkOTZmYWVjN2U5M2E0ZjZmOGYwMzMxNzdjYzVhZWRiZmQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmgKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIH5Eb3dubG9hZCgpOwogCiAgICAgdm9p
ZCByZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJp
bmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKLSAgICB2b2lkIGNhbmNlbCgp
OworICAgIHZvaWQgY2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik+JiYpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcHVibGlzaFBy
b2dyZXNzKGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpA
QCAtMTI4LDYgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVkRGF0YSB7
IGZhbHNlIH07CiAgICAgRG93bmxvYWRNb25pdG9yIG1fbW9uaXRvciB7ICp0aGlzIH07CiAgICAg
dW5zaWduZWQgbV90ZXN0U3BlZWRNdWx0aXBsaWVyIHsgMSB9OworICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+IG1fY2FuY2VsQ29tcGxldGlvbkhh
bmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmlu
ZGV4IGQwOTFjMjkyZDA0NTdiNTU3YzE3MzMwM2M4YzVlN2Q1MTc4YjIzY2EuLjI0YTY2MDdiOGMw
YjA5ODVjMWRiMWJkMjUxNzhlMGZmYmEzYWQ0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAt
MTA5LDE1ICsxMDksMTkgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgRG93bmxvYWRJRCBkb3dubG8KICNlbmRpZgogfQogCi12
b2lkIERvd25sb2FkTWFuYWdlcjo6Y2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElE
KQordm9pZCBEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxv
YWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoYXV0byogZG93bmxvYWQgPSBtX2Rvd25s
b2Fkcy5nZXQoZG93bmxvYWRJRCkpIHsKICAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdEb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwotICAgICAgICBkb3dubG9hZC0+Y2FuY2VsKCk7Cisg
ICAgICAgIGRvd25sb2FkLT5jYW5jZWwoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVu
ZGluZ0Rvd25sb2Fkcy50YWtlKGRvd25sb2FkSUQpKQotICAgICAgICBwZW5kaW5nRG93bmxvYWQt
PmNhbmNlbCgpOworICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVuZGluZ0Rvd25s
b2Fkcy50YWtlKGRvd25sb2FkSUQpKSB7CisgICAgICAgIHBlbmRpbmdEb3dubG9hZC0+Y2FuY2Vs
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDZlNDRhZDI2NDJiNmYy
MDQ3NjEzNDZmZjE5MjQwYjk2NWRjODZkODIuLjJjZDE2MWIwYWMzZTc4OWUyMjQ2YzA1YjAxNjVm
MWM3MjY3OGZhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCkBAIC03Myw3ICs3Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9u
KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb25Gb3JEb3dubG9hZHMoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQXV0aGVudGljYXRp
b25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwZW5kaW5nRG93bmxvYWRDYW5jZWxlZChEb3dubG9hZElEKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWYoKSBjb25zdCA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIGNvbnN0ID0gMDsKQEAgLTg5LDcgKzg4LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQQUw6OlNlc3Npb25JRCwgRG93bmxv
YWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKIAotICAgIHZvaWQgY2FuY2VsRG93
bmxvYWQoRG93bmxvYWRJRCk7CisgICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3dubG9hZElELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKERvd25s
b2FkSUQsIGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTW9uaXRvci5jcHAKaW5kZXggOWJkOTlkMTI3MWM1ZDdmZTQ4NTNjNTg5YWVjOTYxMTEx
YmRlMjEwYS4uNTU4Y2M0ZGRkN2ViNzIyMWEwZWM4ZTk3MTRjN2ViMGQwYzBmNWJmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25p
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1vbml0b3IuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEb3dubG9hZE1vbml0b3I6
OnRpbWVyRmlyZWQoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwgPCBXVEZfQVJSQVlf
TEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKTsKICAgICBpZiAobWVhc3VyZWRUaHJvdWdocHV0
UmF0ZSgpIDwgdGhyb3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRlc1BlclNlY29uZCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBjYW5jZWxsaW5n
IGRvd25sb2FkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLnRv
VUludDY0KCkpOwotICAgICAgICBtX2Rvd25sb2FkLmNhbmNlbCgpOworICAgICAgICBtX2Rvd25s
b2FkLmNhbmNlbChudWxscHRyKTsKICAgICB9IGVsc2UgaWYgKG1faW50ZXJ2YWwgKyAxIDwgV1RG
X0FSUkFZX0xFTkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSkgewogICAgICAgICBSRUxFQVNFX0xP
R19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBzdWZmaWNpZW50IHRocm91Z2hwdXQgcmF0ZSAoaWQg
PSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2FkSUQoKS50b1VJbnQ2NCgpKTsKICAg
ICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dEludGVydmFsKG1faW50ZXJ2
YWwrKykgLyB0ZXN0U3BlZWRNdWx0aXBsaWVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKaW5kZXgg
ZDkyMjU5NjMxMDk1MDExNGU1OTdiNDY0YWQ5YTllYTg1ZmNkNmIxZS4uZjgyYWE0OGNlN2YwMTM2
YmVmM2Q2YWM3NDQwMmYwNmU4ODhhMWM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCkBAIC03Miwx
MSArNzIsMTEgQEAgdm9pZCBQZW5kaW5nRG93bmxvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXUKICAgICBtX25ldHdvcmtMb2FkLT5j
b250aW51ZVdpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKG5ld1JlcXVlc3QpKTsKIH0KIAotdm9pZCBQ
ZW5kaW5nRG93bmxvYWQ6OmNhbmNlbCgpCit2b2lkIFBlbmRpbmdEb3dubG9hZDo6Y2FuY2VsKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKG1fbmV0d29ya0xvYWQpOwogICAgIG1fbmV0d29y
a0xvYWQtPmNhbmNlbCgpOwotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENh
bmNlbCh7IH0pKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9QZW5kaW5nRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oCmluZGV4IGVlODc3NGZiOWRlNDgzODdkYjc2Yjc0OGU1
YTQyMWE1YTg1OThjYmEuLmE5MWY5YmUxZmI5YjU5ODM0ZDFhOTJmNjExZGNiNDY2YmJiZTcxZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRp
bmdEb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBQZW5kaW5n
RG93bmxvYWQoSVBDOjpDb25uZWN0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtMb2FkPiYm
LCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIAog
ICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjYW5jZWwoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0KaW5kZXgg
OTU1YzA0ODBmZTdjN2NhZjYzYzEyZDc5M2RkNmY4NDQxMDI0NDIxYS4uMmQ0Yzk4NzQ5NDRlNTli
MmNmODI0MGExMzdjNWQ4OTFiMzYwYmMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvV0tEb3dubG9hZFByb2dyZXNzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL1dLRG93bmxvYWRQcm9n
cmVzcy5tbQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBjb3VudE9m
Qnl0ZXNSZWNlaXZlZEtleVBhdGggPSBAImNvdW50T2ZCeXRlc1JlY2VpdmVkIjsKIC0gKHZvaWQp
cGVyZm9ybUNhbmNlbAogewogICAgIGlmIChtX2Rvd25sb2FkKQotICAgICAgICBtX2Rvd25sb2Fk
LT5jYW5jZWwoKTsKKyAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKG51bGxwdHIpOwogICAgIG1f
ZG93bmxvYWQgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNhMTM5Yzg5MTAwZWJhMjE4Y2JmZmZhZGMyZTNk
ZmE4NjIxN2YxNjMuLmE1OTExNzU2OWUxZmQxZWUzOGU5ODRmZTg0MzkzNTI2MTJmYmMzNTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBA
IC0yMDcxLDkgKzIwNzEsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWVEb3dubG9hZChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYQogICAgIGRvd25sb2Fk
TWFuYWdlcigpLnJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRJRCwgcmVzdW1lRGF0
YSwgcGF0aCwgV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9CiAKLXZvaWQgTmV0
d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBkb3dubG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3du
bG9hZElEKTsKKyAgICBkb3dubG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTIwODgsMTEgKzIwODgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChEb3dubG9hZElEIGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlcwogICAgIGRvd25s
b2FkTWFuYWdlcigpLmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGRvd25sb2FkSUQsIFdURk1vdmUo
cmVxdWVzdCkpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpwZW5kaW5nRG93bmxvYWRDYW5j
ZWxlZChEb3dubG9hZElEIGRvd25sb2FkSUQpCi17Ci0gICAgZG93bmxvYWRQcm94eUNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ2FuY2VsKHsgfSksIGRvd25s
b2FkSUQudG9VSW50NjQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihOZXR3b3JrRGF0YVRhc2smIG5ldHdvcmtEYXRhVGFzaywgUmVzcG9u
c2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKICAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0gbmV0d29y
a0RhdGFUYXNrLnBlbmRpbmdEb3dubG9hZElEKCkudG9VSW50NjQoKTsKQEAgLTIxMDUsMTEgKzIx
MDAsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24o
TmV0d29ya0RhdGFUYXNrJiBuZXR3b3JrRGF0YVRhcwogCiAgICAgZG93bmxvYWRQcm94eUNvbm5l
Y3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG5ldHdvcmtEYXRhVGFzayA9IG1ha2VSZWYobmV0
d29ya0RhdGFUYXNrKV0gKFN0cmluZyYmIGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3
cml0ZSkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFz
ay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZG93bmxvYWRNYW5hZ2VyKCkuY2FuY2VsRG93bmxvYWQoZG93bmxv
YWRJRCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246Oklnbm9y
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRlc3RpbmF0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihQb2xp
Y3lBY3Rpb246Oklnbm9yZSk7CiAgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+c2V0UGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24oZGVzdGluYXRpb24sIFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSksIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246OkRvd25sb2FkKTsKICAgICAgICAgaWYgKG5ldHdv
cmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlOjpDYW5jZWxpbmcg
fHwgbmV0d29ya0RhdGFUYXNrLT5zdGF0ZSgpID09IE5ldHdvcmtEYXRhVGFzazo6U3RhdGU6OkNv
bXBsZXRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAppbmRleCBkMWJmZDIwNDVhODIyMjcyNTAxNTBkMjA3NWU4NGQ3ZTAyZGUwZTM4Li42ZDNlN2Iz
YmIyNTQ4NDBhOTZlNzkxOWI2NTM1NzY4OTE1YjE1YzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC00MDMsNyArNDAzLDYgQEAgcHJpdmF0
ZToKICAgICBJUEM6OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkgb3ZlcnJp
ZGU7CiAgICAgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbkZvckRvd25s
b2FkcygpIG92ZXJyaWRlIHsgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7IH0KICAg
ICBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigp
IG92ZXJyaWRlOwotICAgIHZvaWQgcGVuZGluZ0Rvd25sb2FkQ2FuY2VsZWQoRG93bmxvYWRJRCkg
b3ZlcnJpZGU7CiAKICAgICAvLyBNZXNzYWdlIEhhbmRsZXJzCiAgICAgdm9pZCBkaWRSZWNlaXZl
U3luY05ldHdvcmtQcm9jZXNzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwpAQCAtNDI0LDcgKzQyMyw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRvd25sb2FkUmVxdWVzdChQQUw6OlNlc3Npb25JRCwgRG93bmxv
YWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKTsKICAg
ICB2b2lkIHJlc3VtZURvd25sb2FkKFBBTDo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiYpOwotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJ
RCk7CisgICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIHB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKERvd25sb2FkSUQsIGNvbnN0IFVS
TCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5k
ZXggZDBjNDk5MjgzZDcwYTJiOGU0ZGE2OTc0YjY3NmVhZDZmNjAxYjE5NC4uMDZkYzFkOTlhNDgz
ZmQ0MGU4MzBlZjZkODRkODI1NmEwMjEwMzMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC01MSw3ICs1
MSw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKIAogICAg
IERvd25sb2FkUmVxdWVzdChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYktpdDo6RG93bmxv
YWRJRCBkb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgZW51bTpi
b29sIE9wdGlvbmFsPFdlYktpdDo6TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4sIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSkKICAgICBSZXN1
bWVEb3dubG9hZChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYktpdDo6RG93bmxvYWRJRCBk
b3dubG9hZElELCBJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1lRGF0YSwgU3RyaW5nIHBhdGgsIFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi0g
ICAgQ2FuY2VsRG93bmxvYWQoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQpCisgICAgQ2Fu
Y2VsRG93bmxvYWQoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQpIC0+IChJUEM6OkRhdGFS
ZWZlcmVuY2UgcmVzdW1lRGF0YSkgQXN5bmMKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBQdWJs
aXNoRG93bmxvYWRQcm9ncmVzcyhXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgVVJMIHVy
bCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCmluZGV4IDlkM2JjMzg2MDkzMWE5ZjhlNzQ0ZTgxNTVlNzI3YTZiY2Ez
ODdiNTEuLjVjOWVlOTM5ZTZiZWNlMDQwZWFkYmNkYjI3Yjk3MWY5OTAxNmVlMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
QEAgLTYxLDEwICs2MSwyMyBAQCBEb3dubG9hZFByb3h5OjpEb3dubG9hZFByb3h5KERvd25sb2Fk
UHJveHlNYXAmIGRvd25sb2FkUHJveHlNYXAsIFdlYnNpdGVEYXRhU3RvcgogCiBEb3dubG9hZFBy
b3h5Ojp+RG93bmxvYWRQcm94eSgpID0gZGVmYXVsdDsKIAorc3RhdGljIFJlZlB0cjxBUEk6OkRh
dGE+IGNyZWF0ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIGlm
IChkYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
QVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKK30KKwogdm9pZCBE
b3dubG9hZFByb3h5OjpjYW5jZWwoKQogewotICAgIGlmIChtX2RhdGFTdG9yZSkKLSAgICAgICAg
bV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIGlmIChtX2RhdGFTdG9y
ZSkgeworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2Fk
SUQpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKSB7CisgICAgICAgICAgICBtX3Jlc3VtZURhdGEgPSBj
cmVhdGVEYXRhKHJlc3VtZURhdGEpOworICAgICAgICAgICAgbV9jbGllbnQtPmRpZENhbmNlbCgq
dGhpcyk7CisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgq
dGhpcyk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZh
bGlkYXRlKCkKQEAgLTE2MSwxNCArMTc0LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGaW5p
c2goKQogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0K
IAotc3RhdGljIFJlZlB0cjxBUEk6OkRhdGE+IGNyZWF0ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiBkYXRhKQotewotICAgIGlmIChkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKLX0KLQogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCiB7CiAgICAg
bV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsKQEAgLTE3OSwxNSArMTg0LDUg
QEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UKICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxv
YWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKLXsKLSAgICBtX3Jlc3VtZURhdGEg
PSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOwotCi0gICAgbV9jbGllbnQtPmRpZENhbmNlbCgqdGhp
cyk7Ci0KLSAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhp
cyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAppbmRleCAzZTc0MDhjMWViZWRlYTRl
N2FmMmQ5YjliYjFkOTIwOTVmZmMzNjBmLi5mYjNlMGMxZjUxNDM1OWIyMTYzZmFmMTVkMDVjODU3
MjE1NzkzYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmgKQEAgLTExNiw3ICsxMTYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
Q3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICB2b2lkIGRpZEZpbmlz
aCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKLSAgICB2b2lkIGRpZENhbmNlbChj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogICAgIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGlyZWN0UmVxdWVzdCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZywgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlLCBBbGxvd092ZXJ3cml0ZSk+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDU3YjlkYmU3YzU1MmY1NzRmZDA1ODJjOWM2YjdmMDg1ZWU4NzliMDkuLjQ3ZWRmYjRi
OTZjYzgwZDBmZjEwMTY0NWUwNTc4NmU2YjUxYzk3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0zMSw1ICszMSw0IEBAIG1lc3NhZ2VzIC0+IERvd25sb2FkUHJveHkgewogICAgIERpZENy
ZWF0ZURlc3RpbmF0aW9uKFN0cmluZyBwYXRoKQogICAgIERpZEZpbmlzaCgpCiAgICAgRGlkRmFp
bChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1l
RGF0YSkKLSAgICBEaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpCiB9CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTY2NDFj
MDJhNDcyZWIyOGQ3YWEzZjFmYzFlOTU0M2ZmNTQ0MmQ3OS4uM2FjOGE1MDcxYjAzOTAxZTIxZTNj
NDUwODZiZWVkMjY2YTkyYzkxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTEwLTA2ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRoQXN5
bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG93bmxvYWQubW06CisgICAgICAgICgtW1dhaXRVbnRpbERvd25sb2FkQ2Fu
Y2VsZWREZWxlZ2F0ZSBfZG93bmxvYWQ6ZGlkRmFpbFdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
RG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIF9kb3dubG9hZDpkaWRGYWlsV2l0aEVycm9yOl0p
OgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgd2FpdEZvckRpZEZhaWxd
KToKKyAgICAgICAgKC1bRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIHN0b3BXYWl0aW5nRm9y
RGlkRmFpbF0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bW9uaXRvckRlbGVnYXRlKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OndlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0
aXBsaWVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRvd25sb2FkQXRSYXRlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoLVtXYWl0VW50aWxEb3dubG9hZENh
bmNlbGVkRGVsZWdhdGUgX2Rvd25sb2FkRGlkQ2FuY2VsOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkRGlkQ2FuY2VsOl0pOiBEZWxl
dGVkLgorCiAyMDIwLTEwLTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNv
bT4KIAogICAgICAgICBydW4tbWluaWJyb3dzZXIgbm90IGNvbXBhdGlibGUgd2l0aCBweXRob24z
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25s
b2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5t
bQppbmRleCAxODE5MTMxYzlhMGZlYjMwYjFhMmYwY2ZjZDg3YmYyMDQ1ZWJiM2Y0Li4yZDRjZmY3
MTA2OGMyMTVhZDAxMDBiMTE3YjEyMmRmMWJjNmZlMjU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWQubW0KQEAgLTc2OSw3ICs3NjksNyBA
QCBzdGF0aWMgYm9vbCBkaWREb3dubG9hZFN0YXJ0OwogICAgIFtkb3dubG9hZC5vcmlnaW5hdGlu
Z1dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGVdOwogfQogCi0tICh2
b2lkKV9kb3dubG9hZERpZENhbmNlbDooX1dLRG93bmxvYWQgKilkb3dubG9hZAorLSAodm9pZClf
ZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQgZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJv
ciAqKWVycm9yCiB7CiAgICAgaXNEb25lID0gdHJ1ZTsKIH0KQEAgLTc5OCwyMiArNzk4LDM4IEBA
IFRFU1QoX1dLRG93bmxvYWQsIENyYXNoQWZ0ZXJEb3dubG9hZERpZEZpbmlzaFdoZW5Eb3dubG9h
ZFByb3h5SG9sZHNUaGVMYXN0UmVmT25XCiB9CiAKIHN0YXRpYyBib29sIHJlY2VpdmVkRGF0YTsK
LXN0YXRpYyBib29sIGRpZENhbmNlbDsKIHN0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGRlc3Rp
bmF0aW9uOwogCiBAaW50ZXJmYWNlIERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxfV0tEb3dubG9hZERlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9yRGlkRmFpbDsKKy0gKHZv
aWQpc3RvcFdhaXRpbmdGb3JEaWRGYWlsOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gRG93bmxv
YWRNb25pdG9yVGVzdERlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVz
dERlbGVnYXRlIHsKKyAgICBib29sIGRpZEZhaWw7Cit9CiAKIC0gKHZvaWQpX2Rvd25sb2FkRGlk
U3RhcnQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKIHsKICAgICBkaWREb3dubG9hZFN0YXJ0ID0g
dHJ1ZTsKIH0KIAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9XS0Rvd25sb2FkICopZG93
bmxvYWQKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxX
aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIGRpZEZhaWwgPSB0cnVlOworfQorCist
ICh2b2lkKXdhaXRGb3JEaWRGYWlsCit7CisgICAgZGlkRmFpbCA9IGZhbHNlOworICAgIHdoaWxl
ICghZGlkRmFpbCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsK
K30KKworLSAodm9pZClzdG9wV2FpdGluZ0ZvckRpZEZhaWwKIHsKLSAgICBkaWRDYW5jZWwgPSB0
cnVlOworICAgIEVYUEVDVF9GQUxTRShkaWRGYWlsKTsKKyAgICBkaWRGYWlsID0gdHJ1ZTsKIH0K
IAogLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQgZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYWxsb3dPdmVyd3JpdGUsIE5TU3RyaW5nICpkZXN0aW5h
dGlvbikpY29tcGxldGlvbkhhbmRsZXIKQEAgLTg1OSwxMCArODc1LDE1IEBAIHZvaWQgcmVzcG9u
ZFNsb3dseShpbnQgc29ja2V0LCBkb3VibGUga2JwcywgYm9vbCYgdGVybWluYXRlU2VydmVyKQog
ICAgIH0KIH0KIAorc3RhdGljIFJldGFpblB0cjxEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGU+
IG1vbml0b3JEZWxlZ2F0ZSgpCit7CisgICAgc3RhdGljIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CisgICAgcmV0dXJuIGRlbGVnYXRl
OworfQorCiBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2FkTW9uaXRvclNw
ZWVkTXVsdGlwbGllcihzaXplX3QgbXVsdGlwbGllcikKIHsKICAgICBzdGF0aWMgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXdd
KTsKLSAgICBzdGF0aWMgYXV0byBkb3dubG9hZERlbGVnYXRlID0gYWRvcHROUyhbRG93bmxvYWRN
b25pdG9yVGVzdERlbGVnYXRlIG5ld10pOwogICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIG5ld10pOwogICAgIGF1
dG8gcHJvY2Vzc1Bvb2wgPSBhZG9wdE5TKFtbV0tQcm9jZXNzUG9vbCBhbGxvY10gX2luaXRXaXRo
Q29uZmlndXJhdGlvbjpwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtb
X1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CkBAIC04
NzEsNyArODkyLDcgQEAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlld1dpdGhEb3dubG9hZE1v
bml0b3JTcGVlZE11bHRpcGxpZXIoc2l6ZV90IG11bHRpcGxpZXIKICAgICBbd2ViVmlld0NvbmZp
Z3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdXTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmll
d0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKLSAgICBbd2ViVmlldyBjb25maWd1cmF0aW9u
XS5wcm9jZXNzUG9vbC5fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGUuZ2V0KCk7
CisgICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wuX2Rvd25sb2FkRGVsZWdh
dGUgPSBtb25pdG9yRGVsZWdhdGUoKS5nZXQoKTsKICAgICByZXR1cm4gd2ViVmlldzsKIH0KIApA
QCAtODkyLDggKzkxMyw3IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2lyZWRLYnBz
LCB1bnNpZ25lZCBzcGVlZE11bHRpcGxpZXIsIEFwcFJldHVybnNUb0ZvCiAgICAgW1t3ZWJWaWV3
IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91
bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVn
cm91bmQ6OlllcykKICAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRh
U3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwotICAgIGRpZENhbmNlbCA9IGZh
bHNlOwotICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKKyAgICBbbW9uaXRvckRlbGVnYXRlKCkg
d2FpdEZvckRpZEZhaWxdOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CiAgICAgW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKIH0K
QEAgLTkwOCw4ICs5MjgsNyBAQCBURVNUKF9XS0Rvd25sb2FkLCBESVNBQkxFRF9Eb3dubG9hZE1v
bml0b3JTdXJ2aXZlKQogewogICAgIF9fYmxvY2sgQk9PTCB0aW1lb3V0UmVhY2hlZCA9IE5POwog
ICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDIuNSAq
IE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShkaWRDYW5jZWwpOwotICAgICAgICBkaWRDYW5jZWwgPSB0cnVlOworICAgICAg
ICBbbW9uaXRvckRlbGVnYXRlKCkgc3RvcFdhaXRpbmdGb3JEaWRGYWlsXTsKICAgICAgICAgdGlt
ZW91dFJlYWNoZWQgPSBZRVM7CiAgICAgfSk7CiAKQEAgLTkyMyw4ICs5NDIsNyBAQCBURVNUKF9X
S0Rvd25sb2FkLCBEb3dubG9hZE1vbml0b3JSZXR1cm5Ub0ZvcmVncm91bmQpCiB7CiAgICAgX19i
bG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7Ci0g
ICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIFttb25pdG9yRGVsZWdhdGUoKSBzdG9w
V2FpdGluZ0ZvckRpZEZhaWxdOwogICAgICAgICB0aW1lb3V0UmVhY2hlZCA9IFlFUzsKICAgICB9
KTsKICAgICBkb3dubG9hZEF0UmF0ZSgwLjUsIDEyMCwgQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6
WWVzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWRQcm9ncmVzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG93bmxvYWRQcm9ncmVzcy5tbQppbmRleCBlZTQyOWYxZmUxMDNhOTE1NDI5MzMyY2IxZmNj
NThiZmRiZDM5NTUxLi5mMDAzYWMyOGNlMWU4OTY3ZjVkYWIwZDg4OGNjNzg2ODc1MTE2NTY5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
UHJvZ3Jlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3dubG9hZFByb2dyZXNzLm1tCkBAIC00ODcsNyArNDg3LDcgQEAgVEVTVChEb3dubG9hZFByb2dy
ZXNzLCBDYW5jZWxEb3dubG9hZFdoZW5Qcm9ncmVzc0lzQ2FuY2VsZWQpCiAgICAgW3Rlc3RSdW5u
ZXIuZ2V0KCkgc3Vic2NyaWJlQW5kV2FpdEZvclByb2dyZXNzXTsKICAgICBbdGVzdFJ1bm5lci5n
ZXQoKSByZWNlaXZlRGF0YTo1MF07CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkucHJvZ3Jlc3MgY2Fu
Y2VsXTsKLSAgICBbdGVzdFJ1bm5lci5nZXQoKSB3YWl0Rm9yRG93bmxvYWRDYW5jZWxlZF07Cisg
ICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2FpdEZvckRvd25sb2FkRmFpbGVkXTsKICAgICBbdGVzdFJ1
bm5lci5nZXQoKSB3YWl0VG9Mb3NlUHJvZ3Jlc3NdOwogCiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkg
dGVhckRvd25dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410894</attachid>
            <date>2020-10-08 16:22:41 -0700</date>
            <delta_ts>2020-10-08 20:58:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201008162240.patch</filename>
            <type>text/plain</type>
            <size>30264</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgxODEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTA4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRo
QXN5bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdmVzIHRoZSB3YXkg
Zm9yIGEgZ29vZCBkb3dubG9hZCBBUEkgdGhhdCBoYXMgYSBjb21wbGV0aW9uIGhhbmRsZXIgd2hl
biB5b3UgY2FsbCBjYW5jZWwgdGhhdCBnaXZlcyB5b3UgdGhlIHJlc3VtZSBkYXRhIGlmIGl0IGNh
bi4KKyAgICAgICAgQ3VycmVudGx5IHlvdSBoYXZlIHRvIGNhbGwgY2FuY2VsIG9uIHRoZSBkb3du
bG9hZCwgd2FpdCBmb3IgZGlkQ2FuY2VsIG9uIHRoZSBkZWxlZ2F0ZSwgdGhlbiBnZXQgdGhlIHJl
c3VtZSBkYXRhIGZyb20gdGhlIGRvd25sb2FkIGFnYWluLgorICAgICAgICBUaGlzIGhhcyB0aGUg
c2lkZSBlZmZlY3Qgb2YgRG93bmxvYWRNb25pdG9yIGNhbmNlbGxhdGlvbnMgY2FsbGluZyBkaWRG
YWlsV2l0aEVycm9yIGluc3RlYWQgb2YgZGlkQ2FuY2VsLCB3aGljaCBtYWtlcyBzZW5zZSBhbmQg
c2hvdWxkbid0CisgICAgICAgIGNhdXNlIGFueSBwcm9ibGVtcyBpbiBwcmFjdGljZS4gIFRoYXQn
cyBvbmx5IHVzZWQgYnkgU2FmYXJpIGFuZCBiZWhhdmVzIHNpbWlsYXJseS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkQ2FuY2Vs
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQZW5k
aW5nRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9j
b2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW06CisgICAgICAgICgtW1dLRG93bmxvYWRQcm9ncmVz
cyBwZXJmb3JtQ2FuY2VsXSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2FuY2VsRG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBlbmRpbmdEb3dubG9h
ZENhbmNlbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmNyZWF0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5p
bjoKKwogMjAyMC0xMC0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW21hY09TXSBEZW55IGFjY2VzcyB0byBwZXJmb3JtYW5jZSBhbmFseXNpcyBzZXJ2
aWNlIGluIHRoZSBXZWJDb250ZW50IHByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNjgxODEpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA3MSw5ICsyMDcxLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lRG93
bmxvYWQoUEFMOgogICAgIGRvd25sb2FkTWFuYWdlcigpLnJlc3VtZURvd25sb2FkKHNlc3Npb25J
RCwgZG93bmxvYWRJRCwgcmVzdW1lRGF0YSwgcGF0aCwgV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERvd25s
b2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKERv
d25sb2FkSUQgZG93bmxvYWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBkb3dubG9hZE1hbmFn
ZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKKyAgICBkb3dubG9hZE1hbmFnZXIoKS5j
YW5jZWxEb3dubG9hZChkb3dubG9hZElELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTIwODgsMTEgKzIwODgsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjb250aW51ZVdpbGxTZW5kUmVxCiAgICAgZG93bmxvYWRNYW5hZ2VyKCkuY29u
dGludWVXaWxsU2VuZFJlcXVlc3QoZG93bmxvYWRJRCwgV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAK
LXZvaWQgTmV0d29ya1Byb2Nlc3M6OnBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERvd25sb2FkSUQg
ZG93bmxvYWRJRCkKLXsKLSAgICBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwoeyB9KSwgZG93bmxvYWRJRC50b1VJbnQ2NCgp
KTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KE5ldHdvcmtEYXRhVGFzayYgbmV0d29ya0RhdGFUYXNrLCBSZXNwb25zZUNvbXBsZXRpb25IYW5k
bGVyJiYgY29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewogICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSBuZXR3b3JrRGF0YVRhc2sucGVuZGlu
Z0Rvd25sb2FkSUQoKS50b1VJbnQ2NCgpOwpAQCAtMjEwNSwxMSArMjEwMCw4IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5nRG93bmxvYWQKIAogICAgIGRvd25sb2FkUHJveHlDb25u
ZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBuZXR3b3JrRGF0YVRhc2sgPSBtYWtlUmVmKG5l
dHdvcmtEYXRhVGFzayldIChTdHJpbmcmJiBkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVy
d3JpdGUpIG11dGFibGUgewogICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRh
c2stPnBlbmRpbmdEb3dubG9hZElEKCk7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbi5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25s
b2FkSUQpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpJZ25v
cmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChkZXN0aW5h
dGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoUG9s
aWN5QWN0aW9uOjpJZ25vcmUpOwogICAgICAgICBuZXR3b3JrRGF0YVRhc2stPnNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGRlc3RpbmF0aW9uLCBXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKTsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpEb3dubG9hZCk7CiAgICAgICAgIGlmIChuZXR3
b3JrRGF0YVRhc2stPnN0YXRlKCkgPT0gTmV0d29ya0RhdGFUYXNrOjpTdGF0ZTo6Q2FuY2VsaW5n
IHx8IG5ldHdvcmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlOjpD
b21wbGV0ZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCShyZXZpc2lvbiAyNjgxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw3ICs0MDMsNiBAQCBw
cml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKSBv
dmVycmlkZTsKICAgICBJUEM6OkNvbm5lY3Rpb24qIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uRm9y
RG93bmxvYWRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsg
fQogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5h
Z2VyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZW5kaW5nRG93bmxvYWRDYW5jZWxlZChEb3dubG9h
ZElEKSBvdmVycmlkZTsKIAogICAgIC8vIE1lc3NhZ2UgSGFuZGxlcnMKICAgICB2b2lkIGRpZFJl
Y2VpdmVTeW5jTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CkBAIC00MjQsNyArNDIzLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZG93bmxvYWRSZXF1ZXN0KFBBTDo6U2Vzc2lvbklELCBE
b3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBPcHRpb25hbDxOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbj4sIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
OwogICAgIHZvaWQgcmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7Ci0gICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3du
bG9hZElEKTsKKyAgICB2b2lkIGNhbmNlbERvd25sb2FkKERvd25sb2FkSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIHZvaWQgcHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoRG93bmxvYWRJRCwgY29u
c3QgVVJMJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZQogCiAgICAgRG93
bmxvYWRSZXF1ZXN0KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViS2l0OjpEb3dubG9hZElE
IGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0LCBlbnVtOmJvb2wg
T3B0aW9uYWw8V2ViS2l0OjpOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbiwgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKQogICAgIFJlc3VtZURv
d25sb2FkKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViS2l0OjpEb3dubG9hZElEIGRvd25s
b2FkSUQsIElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhLCBTdHJpbmcgcGF0aCwgV2ViS2l0
OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKLSAgICBD
YW5jZWxEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCkKKyAgICBDYW5jZWxE
b3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCkgLT4gKElQQzo6RGF0YVJlZmVy
ZW5jZSByZXN1bWVEYXRhKSBBc3luYwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBVUkwgdXJsLCBX
ZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWQuY3BwCShyZXZpc2lvbiAyNjgxODEpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDIwICs4NiwzMSBAQCBEb3dubG9hZDo6fkRvd25sb2FkKCkKICAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kaWREZXN0cm95RG93bmxvYWQoKTsKIH0KIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKK3Zv
aWQgRG93bmxvYWQ6OmNhbmNlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBib29sIGlnbm9yZURpZEZhaWwpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKG1fd2FzQ2Fu
Y2VsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dhc0NhbmNlbGVkID0gdHJ1ZTsKKyAgICAv
LyBVUkxTZXNzaW9uOnRhc2s6ZGlkQ29tcGxldGVXaXRoRXJyb3I6IGlzIHN0aWxsIGNhbGxlZCBh
ZnRlciBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGEncyBjb21wbGV0aW9uSGFuZGxlci4KKyAg
ICAvLyBJZiB0aGlzIGNhbmNlbCByZXF1ZXN0IGNhbWUgZnJvbSB0aGUgQVBJLCB3ZSBkbyBub3Qg
d2FudCB0byBzZW5kIERvd25sb2FkUHJveHk6OkRpZEZhaWwgYmVjYXVzZSB0aGUKKyAgICAvLyBj
b21wbGV0aW9uSGFuZGxlciB3aWxsIGluZm9ybSB0aGUgQVBJIHRoYXQgdGhlIGNhbmNlbGxhdGlv
biBzdWNjZWVkZWQuCisgICAgbV9pZ25vcmVEaWRGYWlsID0gaWdub3JlRGlkRmFpbDsKKworICAg
IGF1dG8gY29tcGxldGlvbkhhbmRsZXJXcmFwcGVyID0gW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKSBtdXRhYmxlIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdW1lRGF0YSk7CisgICAgICAgIGlmICghd2Vha1Ro
aXMgfHwgIW1faWdub3JlRGlkRmFpbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkQ2FuY2VsOiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3du
bG9hZElEKCkudG9VSW50NjQoKSk7CisgICAgICAgIGlmIChhdXRvIGV4dGVuc2lvbiA9IHN0ZDo6
ZXhjaGFuZ2UobV9zYW5kYm94RXh0ZW5zaW9uLCBudWxscHRyKSkKKyAgICAgICAgICAgIGV4dGVu
c2lvbi0+cmV2b2tlKCk7CisgICAgICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNo
ZWQoKnRoaXMpOworICAgIH07CiAKICAgICBpZiAobV9kb3dubG9hZCkgewogICAgICAgICBtX2Rv
d25sb2FkLT5jYW5jZWwoKTsKLSAgICAgICAgZGlkQ2FuY2VsKHsgfSk7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyV3JhcHBlcih7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBs
YXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKTsKKyAgICBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2Fk
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJXcmFwcGVyKSk7CiB9CiAKIHZvaWQgRG93bmxvYWQ6
OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE0NSw2ICsxNTYsOSBAQCB2b2lkIERvd25sb2FkOjpkaWRGaW5pc2goKQogCiB2
b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCiB7CisgICAgaWYgKG1faWdub3JlRGlkRmFp
bCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkRmFp
bDogKGlkID0gJSIgUFJJdTY0ICIsIGlzVGltZW91dCA9ICVkLCBpc0NhbmNlbGxhdGlvbiA9ICVk
LCBlcnJDb2RlID0gJWQpIiwKICAgICAgICAgZG93bmxvYWRJRCgpLnRvVUludDY0KCksIGVycm9y
LmlzVGltZW91dCgpLCBlcnJvci5pc0NhbmNlbGxhdGlvbigpLCBlcnJvci5lcnJvckNvZGUoKSk7
CiAKQEAgLTE1NywxOSArMTcxLDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNv
dXJjZUVycgogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwog
fQogCi12b2lkIERvd25sb2FkOjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBy
ZXN1bWVEYXRhKQotewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImRpZENhbmNlbDogKGlk
ID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLnRvVUludDY0KCkpOwotCi0gICAgc2VuZChN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ2FuY2VsKHJlc3VtZURhdGEpKTsKLQotICAgIGlm
IChtX3NhbmRib3hFeHRlbnNpb24pIHsKLSAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZv
a2UoKTsKLSAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKLSAgICB9Ci0gICAg
bV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7Ci19Ci0KIElQQzo6Q29u
bmVjdGlvbiogRG93bmxvYWQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKTsKQEAg
LTE5MCw4ICsxOTEsOSBAQCBib29sIERvd25sb2FkOjppc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNl
bE5ldHdvcmtMb2FkKCkKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQogCiB2b2lk
IERvd25sb2FkOjpwbGF0Zm9ybURlc3Ryb3lEb3dubG9hZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHJldmlzaW9uIDI2
ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIH5Eb3dubG9h
ZCgpOwogCiAgICAgdm9pZCByZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKLSAg
ICB2b2lkIGNhbmNlbCgpOworICAgIHZvaWQgY2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYsIGJvb2wgaWdub3JlRGlkRmFpbCk7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiwgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYpOwogI2VuZGlmCkBAIC05MSwxMCArOTEsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBieXRlc1dyaXR0ZW4sIHVpbnQ2
NF90IHRvdGFsQnl0ZXNXcml0dGVuLCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRl
KTsKICAgICB2b2lkIGRpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsK
LSAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEp
OwogCiAgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKLSAgICBib29s
IHdhc0NhbmNlbGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNDYW5jZWxlZDsgfQogCiAgICAgdm9p
ZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpIHsgbV9tb25pdG9yLmFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKCk7IH0KICAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCgpIHsgbV9tb25pdG9yLmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpOyB9
CkBAIC0xMDcsNyArMTA1LDcgQEAgcHJpdmF0ZToKICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZv
cm1DYW5jZWxOZXR3b3JrTG9hZCgpOworICAgIHZvaWQgcGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9h
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmKTsK
ICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveURvd25sb2FkKCk7CiAKICAgICBEb3dubG9hZE1hbmFn
ZXImIG1fZG93bmxvYWRNYW5hZ2VyOwpAQCAtMTI0LDEwICsxMjIsMTEgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIFN0cmluZyBtX3N1Z2dl
c3RlZE5hbWU7Ci0gICAgYm9vbCBtX3dhc0NhbmNlbGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsKICAgICBEb3dubG9hZE1vbml0b3IgbV9tb25pdG9y
IHsgKnRoaXMgfTsKICAgICB1bnNpZ25lZCBtX3Rlc3RTcGVlZE11bHRpcGxpZXIgeyAxIH07Cisg
ICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4gbV9j
YW5jZWxDb21wbGV0aW9uSGFuZGxlcjsKKyAgICBib29sIG1faWdub3JlRGlkRmFpbCB7IGZhbHNl
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMjY4MTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDE1ICsxMDks
MTkgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFBBTAogI2VuZGlmCiB9
CiAKLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZChEb3dubG9hZElEIGRvd25s
b2FkSUQpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6Y2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCBk
b3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IG1f
ZG93bmxvYWRzLmdldChkb3dubG9hZElEKSkgewogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rv
d25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7Ci0gICAgICAgIGRvd25sb2FkLT5jYW5jZWwo
KTsKKyAgICAgICAgZG93bmxvYWQtPmNhbmNlbChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
dHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGF1dG8gcGVuZGluZ0Rvd25s
b2FkID0gbV9wZW5kaW5nRG93bmxvYWRzLnRha2UoZG93bmxvYWRJRCkpCi0gICAgICAgIHBlbmRp
bmdEb3dubG9hZC0+Y2FuY2VsKCk7CisgICAgaWYgKGF1dG8gcGVuZGluZ0Rvd25sb2FkID0gbV9w
ZW5kaW5nRG93bmxvYWRzLnRha2UoZG93bmxvYWRJRCkpIHsKKyAgICAgICAgcGVuZGluZ0Rvd25s
b2FkLT5jYW5jZWwoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShy
ZXZpc2lvbiAyNjgxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVj
dGlvbigpID0gMDsKICAgICAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIHBhcmVudFByb2Nl
c3NDb25uZWN0aW9uRm9yRG93bmxvYWRzKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVuZGluZ0Rvd25sb2FkQ2FuY2VsZWQoRG93bmxvYWRJRCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIE5ldHdvcmtTZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbihQQUw6OlNl
c3Npb25JRCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBjb25zdCA9IDA7CkBAIC04OSw3ICs4OCw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQsIERv
d25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAKLSAgICB2b2lkIGNhbmNl
bERvd25sb2FkKERvd25sb2FkSUQpOworICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhE
b3dubG9hZElELCBjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
TW9uaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkocmV2aXNpb24gMjY4MTgxKQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgRG93bmxvYWRNb25pdG9yOjp0aW1l
ckZpcmVkKCkKICAgICBSRUxFQVNFX0FTU0VSVChtX2ludGVydmFsIDwgV1RGX0FSUkFZX0xFTkdU
SCh0aHJvdWdocHV0SW50ZXJ2YWxzKSk7CiAgICAgaWYgKG1lYXN1cmVkVGhyb3VnaHB1dFJhdGUo
KSA8IHRocm91Z2hwdXRJbnRlcnZhbHNbbV9pbnRlcnZhbF0uYnl0ZXNQZXJTZWNvbmQpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogY2FuY2VsbGluZyBkb3du
bG9hZCAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2FkSUQoKS50b1VJbnQ2
NCgpKTsKLSAgICAgICAgbV9kb3dubG9hZC5jYW5jZWwoKTsKKyAgICAgICAgbV9kb3dubG9hZC5j
YW5jZWwoW10oYXV0byYpIHsgfSwgZmFsc2UpOwogICAgIH0gZWxzZSBpZiAobV9pbnRlcnZhbCAr
IDEgPCBXVEZfQVJSQVlfTEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IHN1ZmZpY2llbnQgdGhyb3VnaHB1dCBy
YXRlIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93bmxvYWRJRCgpLnRvVUludDY0
KCkpOwogICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVW50aWxOZXh0SW50ZXJ2YWwo
bV9pbnRlcnZhbCsrKSAvIHRlc3RTcGVlZE11bHRpcGxpZXIoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3du
bG9hZC5jcHAJKHJldmlzaW9uIDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEx
ICs3MiwxMSBAQCB2b2lkIFBlbmRpbmdEb3dubG9hZDo6Y29udGludWVXaWxsU2VuZFJlCiAgICAg
bV9uZXR3b3JrTG9hZC0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShuZXdSZXF1ZXN0
KSk7CiB9CiAKLXZvaWQgUGVuZGluZ0Rvd25sb2FkOjpjYW5jZWwoKQordm9pZCBQZW5kaW5nRG93
bmxvYWQ6OmNhbmNlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChtX25ldHdvcmtMb2Fk
KTsKICAgICBtX25ldHdvcmtMb2FkLT5jYW5jZWwoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjpEaWRDYW5jZWwoeyB9KSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
IH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgJKHJldmlzaW9u
IDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRp
bmdEb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICBQZW5kaW5nRG93bmxvYWQoSVBDOjpDb25uZWN0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtMb2FkPiYmLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYsIERvd25sb2FkSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKIAogICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjYW5jZWwoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJik7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmLCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0J
KHJldmlzaW9uIDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgIldLRG93bmxvYWRQcm9ncmVzcy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZi9D
Rk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNQcm9ncmVzc1NQSS5oPgor
I2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC03OSwx
NyArODAsMTMgQEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZgogICAg
IFttX2Rvd25sb2FkVGFzayByZXN1bWVdOwogfQogICAgIAotdm9pZCBEb3dubG9hZDo6cGxhdGZv
cm1DYW5jZWxOZXR3b3JrTG9hZCgpCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdv
cmtMb2FkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRUYXNrKTsKLQot
ICAgIC8vIFRoZSBkb3dubG9hZCdzIHJlc3VtZSBkYXRhIGlzIGFjY2Vzc2VkIGluIHRoZSBuZXR3
b3JrIHNlc3Npb24gZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgLVVSTFNlc3Npb246dGFzazpkaWRD
b21wbGV0ZVdpdGhFcnJvcjogaW5zdGVhZCBvZiBpbnNpZGUgdGhpcyBibG9jaywKLSAgICAvLyB0
byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgdHdvLiBDYWxsaW5nIC1jYW5jZWwg
aXMgbm90IHN1ZmZpY2llbnQKLSAgICAvLyBoZXJlIGJlY2F1c2UgQ0ZOZXR3b3JrIHdvbid0IHBy
b3ZpZGUgdGhlIHJlc3VtZSBkYXRhIHVubGVzcyB3ZSBhc2sgZm9yIGl0LgotICAgIFttX2Rvd25s
b2FkVGFzayBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6XihOU0RhdGEgKnJlc3VtZURhdGEp
IHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJlc3VtZURhdGEpOwotICAgIH1dOworICAgIFttX2Rv
d25sb2FkVGFzayBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoTlNEYXRhICpyZXN1
bWVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byByZXN1bWVEYXRhUmVmZXJlbmNlID0gcmVz
dW1lRGF0YSA/IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihyZXN1bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGggfSA6IElQQzo6RGF0YVJlZmVy
ZW5jZSB7IH07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VtZURhdGFSZWZlcmVuY2Up
OworICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EZXN0cm95RG93
bmxvYWQoKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29j
b2EvV0tEb3dubG9hZFByb2dyZXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL1dLRG93bmxvYWRQcm9ncmVzcy5tbQkocmV2aXNp
b24gMjY4MTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29j
b2EvV0tEb3dubG9hZFByb2dyZXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IGNvdW50T2ZCeXRlc1JlY2UKIC0gKHZvaWQpcGVyZm9y
bUNhbmNlbAogewogICAgIGlmIChtX2Rvd25sb2FkKQotICAgICAgICBtX2Rvd25sb2FkLT5jYW5j
ZWwoKTsKKyAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKFtdKGF1dG8mKSB7IH0sIGZhbHNlKTsK
ICAgICBtX2Rvd25sb2FkID0gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQko
cmV2aXNpb24gMjY4MTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjcsNiArNzI3LDcgQEAg
LSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRh
c2sgZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogeworICAgIFdURkxvZ0Fs
d2F5cygiZGlkQ29tcGxldGVXaXRoRXJyb3IgJUAiLCBlcnJvcik7CiAgICAgTE9HKE5ldHdvcmtT
ZXNzaW9uLCAiJWxsdSBkaWRDb21wbGV0ZVdpdGhFcnJvciAlQCIsIHRhc2sudGFza0lkZW50aWZp
ZXIsIGVycm9yKTsKIAogICAgIGlmIChlcnJvcikgewpAQCAtNzY5LDExICs3NzAsOCBAQCAtICh2
b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvIHJlc3VtZURhdGFSZWZlcmVuY2UgPSByZXN1bWVEYXRhID8gSVBDOjpEYXRhUmVmZXJl
bmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3VtZURhdGEuYnl0ZXMpLCByZXN1
bWVEYXRhLmxlbmd0aCB9IDogSVBDOjpEYXRhUmVmZXJlbmNlIHsgfTsKLQotICAgICAgICBpZiAo
ZG93bmxvYWQtPndhc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICBkb3dubG9hZC0+ZGlkQ2FuY2Vs
KHJlc3VtZURhdGFSZWZlcmVuY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb3dubG9h
ZC0+ZGlkRmFpbChlcnJvciwgcmVzdW1lRGF0YVJlZmVyZW5jZSk7CisgICAgICAgIFdURkxvZ0Fs
d2F5cygiZG93bmxvYWQgZGlkIGZhaWwiLCBlcnJvcik7CisgICAgICAgIGRvd25sb2FkLT5kaWRG
YWlsKGVycm9yLCByZXN1bWVEYXRhUmVmZXJlbmNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJ
KHJldmlzaW9uIDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDIyIEBAIERvd25s
b2FkUHJveHk6OkRvd25sb2FkUHJveHkoRG93bmxvYWRQcm8KIAogRG93bmxvYWRQcm94eTo6fkRv
d25sb2FkUHJveHkoKSA9IGRlZmF1bHQ7CiAKK3N0YXRpYyBSZWZQdHI8QVBJOjpEYXRhPiBjcmVh
dGVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sKKyAgICBpZiAoZGF0YS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBUEk6OkRhdGE6
OmNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworfQorCiB2b2lkIERvd25sb2FkUHJv
eHk6OmNhbmNlbCgpCiB7Ci0gICAgaWYgKG1fZGF0YVN0b3JlKQotICAgICAgICBtX2RhdGFTdG9y
ZS0+bmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CisgICAgaWYgKG1fZGF0YVN0b3JlKSB7CisgICAg
ICAgIG1fZGF0YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmVzdW1lRGF0YSA9IGNyZWF0ZURhdGEo
cmVzdW1lRGF0YSk7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQ2FuY2VsKCp0aGlzKTsKKyAg
ICAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKKyAg
ICAgICAgfSk7CisgICAgfQogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpA
QCAtMTYxLDE0ICsxNzMsNiBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZEZpbmlzaCgpCiAgICAg
bV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCi1zdGF0aWMg
UmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEpCi17Ci0gICAgaWYgKGRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotfQot
CiB2b2lkIERvd25sb2FkUHJveHk6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Is
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKIHsKICAgICBtX3Jlc3VtZURh
dGEgPSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOwpAQCAtMTc5LDE1ICsxODMsNSBAQCB2b2lkIERv
d25sb2FkUHJveHk6OmRpZEZhaWwoY29uc3QgUmVzb3VyCiAgICAgbV9kb3dubG9hZFByb3h5TWFw
LmRvd25sb2FkRmluaXNoZWQoKnRoaXMpOwogfQogCi12b2lkIERvd25sb2FkUHJveHk6OmRpZENh
bmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCi17Ci0gICAgbV9yZXN1
bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsKLQotICAgIG1fY2xpZW50LT5kaWRDYW5j
ZWwoKnRoaXMpOwotCi0gICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERvd25sb2FkUHJveHkgb2Jq
ZWN0IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNo
ZWQoKnRoaXMpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oCShyZXZpc2lv
biAyNjgxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgdm9pZCBk
aWRGaW5pc2goKTsKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7Ci0gICAgdm9pZCBkaWRD
YW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIHdp
bGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZWRpcmVjdFJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
IHZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcsIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSwgQWxsb3dPdmVyd3JpdGUpPiYmKTsKIApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2ODE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw1ICszMSw0IEBAIG1lc3NhZ2VzIC0+IERvd25sb2FkUHJveHkgewogICAgIERpZENyZWF0
ZURlc3RpbmF0aW9uKFN0cmluZyBwYXRoKQogICAgIERpZEZpbmlzaCgpCiAgICAgRGlkRmFpbChX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1lRGF0
YSkKLSAgICBEaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpCiB9CkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjgxODEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MiBAQAorMjAyMC0xMC0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIFVzZSBzZW5kV2l0aEFzeW5jUmVwbHkgZm9yIE5ldHdvcmtQcm9jZXNz
OjpDYW5jZWxEb3dubG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tOgor
ICAgICAgICAoLVtXYWl0VW50aWxEb3dubG9hZENhbmNlbGVkRGVsZWdhdGUgX2Rvd25sb2FkOmRp
ZEZhaWxXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0
ZSBfZG93bmxvYWQ6ZGlkRmFpbFdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1bRG93bmxvYWRNb25p
dG9yVGVzdERlbGVnYXRlIHdhaXRGb3JEaWRGYWlsXSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9u
aXRvclRlc3REZWxlZ2F0ZSBzdG9wV2FpdGluZ0ZvckRpZEZhaWxdKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6Om1vbml0b3JEZWxlZ2F0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp3ZWJW
aWV3V2l0aERvd25sb2FkTW9uaXRvclNwZWVkTXVsdGlwbGllcik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpkb3dubG9hZEF0UmF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKC1bV2FpdFVudGlsRG93bmxvYWRDYW5jZWxlZERlbGVnYXRlIF9kb3dubG9hZERp
ZENhbmNlbDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bRG93bmxvYWRNb25pdG9yVGVzdERlbGVn
YXRlIF9kb3dubG9hZERpZENhbmNlbDpdKTogRGVsZXRlZC4KKwogMjAyMC0xMC0wNyAgQWRpdHlh
IEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjY4
MTIzKTogWyBpT1MgXSA0IFRlc3RXZWJLaXRBUEkuV2ViS2l0TGVnYWN5IGZhaWx1cmVzOiBGaWxl
IG5hbWUgdW5hdmFpbGFibGUuIFVua25vd24gQysrIGV4Y2VwdGlvbiB0aHJvd24gaW4gdGhlIHRl
c3QgYm9keS4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93
bmxvYWQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3dubG9hZC5tbQkocmV2aXNpb24gMjY4MTgxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzY5LDgg
Kzc2OSwxMCBAQCAtICh2b2lkKV9kb3dubG9hZERpZFN0YXJ0OihfV0tEb3dubG9hZCAqCiAgICAg
W2Rvd25sb2FkLm9yaWdpbmF0aW5nV2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVz
ZXRTdGF0ZV07CiB9CiAKLS0gKHZvaWQpX2Rvd25sb2FkRGlkQ2FuY2VsOihfV0tEb3dubG9hZCAq
KWRvd25sb2FkCistICh2b2lkKV9kb3dubG9hZDooX1dLRG93bmxvYWQgKilkb3dubG9hZCBkaWRG
YWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKIHsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoZXJy
b3IuZG9tYWluLCBOU1VSTEVycm9yRG9tYWluKTsKKyAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwg
TlNVUkxFcnJvckNhbmNlbGxlZCk7CiAgICAgaXNEb25lID0gdHJ1ZTsKIH0KIApAQCAtNzk4LDIy
ICs4MDAsMzggQEAgVEVTVChfV0tEb3dubG9hZCwgQ3Jhc2hBZnRlckRvd25sb2FkRGlkRgogfQog
CiBzdGF0aWMgYm9vbCByZWNlaXZlZERhdGE7Ci1zdGF0aWMgYm9vbCBkaWRDYW5jZWw7CiBzdGF0
aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBkZXN0aW5hdGlvbjsKIAogQGludGVyZmFjZSBEb3dubG9h
ZE1vbml0b3JUZXN0RGVsZWdhdGUgOiBOU09iamVjdCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4KKy0g
KHZvaWQpd2FpdEZvckRpZEZhaWw7CistICh2b2lkKXN0b3BXYWl0aW5nRm9yRGlkRmFpbDsKIEBl
bmQKIAotQGltcGxlbWVudGF0aW9uIERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZQorQGltcGxl
bWVudGF0aW9uIERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSB7CisgICAgYm9vbCBkaWRGYWls
OworfQogCiAtICh2b2lkKV9kb3dubG9hZERpZFN0YXJ0OihfV0tEb3dubG9hZCAqKWRvd25sb2Fk
CiB7CiAgICAgZGlkRG93bmxvYWRTdGFydCA9IHRydWU7CiB9CiAKLS0gKHZvaWQpX2Rvd25sb2Fk
RGlkQ2FuY2VsOihfV0tEb3dubG9hZCAqKWRvd25sb2FkCistICh2b2lkKV9kb3dubG9hZDooX1dL
RG93bmxvYWQgKilkb3dubG9hZCBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sK
KyAgICBkaWRGYWlsID0gdHJ1ZTsKK30KKworLSAodm9pZCl3YWl0Rm9yRGlkRmFpbAoreworICAg
IGRpZEZhaWwgPSBmYWxzZTsKKyAgICB3aGlsZSAoIWRpZEZhaWwpCisgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7Cit9CisKKy0gKHZvaWQpc3RvcFdhaXRpbmdGb3JE
aWRGYWlsCiB7Ci0gICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICBFWFBFQ1RfRkFMU0UoZGlkRmFp
bCk7CisgICAgZGlkRmFpbCA9IHRydWU7CiB9CiAKIC0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3du
bG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihO
U1N0cmluZyAqKWZpbGVuYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGFsbG93
T3ZlcndyaXRlLCBOU1N0cmluZyAqZGVzdGluYXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCkBAIC04
NTksMTAgKzg3NywxNSBAQCB2b2lkIHJlc3BvbmRTbG93bHkoaW50IHNvY2tldCwgZG91YmxlIGti
CiAgICAgfQogfQogCitzdGF0aWMgUmV0YWluUHRyPERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0
ZT4gbW9uaXRvckRlbGVnYXRlKCkKK3sKKyAgICBzdGF0aWMgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBuZXddKTsKKyAgICByZXR1cm4gZGVsZWdh
dGU7Cit9CisKIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9y
U3BlZWRNdWx0aXBsaWVyKHNpemVfdCBtdWx0aXBsaWVyKQogewogICAgIHN0YXRpYyBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTmF2aWdhdGlvbkRlbGVnYXRlIG5l
d10pOwotICAgIHN0YXRpYyBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9h
ZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CiAgICAgYXV0byBwcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gbmV3XSk7CiAgICAg
YXV0byBwcm9jZXNzUG9vbCA9IGFkb3B0TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIF9X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0g
W1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKQEAg
LTg3MSw3ICs4OTQsNyBAQCBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2Fk
CiAgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6W1tbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZp
Z3VyYXRpb25dIGF1dG9yZWxlYXNlXV07CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW3dl
YlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wuX2Rvd25sb2FkRGVsZWdhdGUgPSBkb3du
bG9hZERlbGVnYXRlLmdldCgpOworICAgIFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQ
b29sLl9kb3dubG9hZERlbGVnYXRlID0gbW9uaXRvckRlbGVnYXRlKCkuZ2V0KCk7CiAgICAgcmV0
dXJuIHdlYlZpZXc7CiB9CiAKQEAgLTg5Miw4ICs5MTUsNyBAQCB2b2lkIGRvd25sb2FkQXRSYXRl
KGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNp
dGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0
dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykKICAgICAgICAg
W1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQ6Tk9dOwotICAgIGRpZENhbmNlbCA9IGZhbHNlOwotICAgIFV0aWw6OnJ1bigm
ZGlkQ2FuY2VsKTsKKyAgICBbbW9uaXRvckRlbGVnYXRlKCkgd2FpdEZvckRpZEZhaWxdOwogICAg
IHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbi5n
ZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKIH0KQEAgLTkwOCw4ICs5MzAsNyBAQCBU
RVNUKF9XS0Rvd25sb2FkLCBESVNBQkxFRF9Eb3dubG9hZE1vbml0CiB7CiAgICAgX19ibG9jayBC
T09MIHRpbWVvdXRSZWFjaGVkID0gTk87CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGlt
ZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7Ci0gICAgICAg
IGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIFttb25pdG9yRGVsZWdhdGUoKSBzdG9wV2FpdGlu
Z0ZvckRpZEZhaWxdOwogICAgICAgICB0aW1lb3V0UmVhY2hlZCA9IFlFUzsKICAgICB9KTsKIApA
QCAtOTIzLDggKzk0NCw3IEBAIFRFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclJldHVy
blQKIHsKICAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJlYWNoZWQgPSBOTzsKICAgICBkaXNwYXRj
aF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9T
RUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBFWFBFQ1RfRkFMU0Uo
ZGlkQ2FuY2VsKTsKLSAgICAgICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICAgICAgW21vbml0b3JE
ZWxlZ2F0ZSgpIHN0b3BXYWl0aW5nRm9yRGlkRmFpbF07CiAgICAgICAgIHRpbWVvdXRSZWFjaGVk
ID0gWUVTOwogICAgIH0pOwogICAgIGRvd25sb2FkQXRSYXRlKDAuNSwgMTIwLCBBcHBSZXR1cm5z
VG9Gb3JlZ3JvdW5kOjpZZXMpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Eb3dubG9hZFByb2dyZXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWRQcm9ncmVzcy5tbQkocmV2aXNpb24gMjY4
MTgxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZFBy
b2dyZXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgVEVTVChEb3dubG9h
ZFByb2dyZXNzLCBDYW5jZWxEb3dubG9hZFdoZQogICAgIFt0ZXN0UnVubmVyLmdldCgpIHN1YnNj
cmliZUFuZFdhaXRGb3JQcm9ncmVzc107CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgcmVjZWl2ZURh
dGE6NTBdOwogICAgIFt0ZXN0UnVubmVyLmdldCgpLnByb2dyZXNzIGNhbmNlbF07Ci0gICAgW3Rl
c3RSdW5uZXIuZ2V0KCkgd2FpdEZvckRvd25sb2FkQ2FuY2VsZWRdOworICAgIFt0ZXN0UnVubmVy
LmdldCgpIHdhaXRGb3JEb3dubG9hZEZhaWxlZF07CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2Fp
dFRvTG9zZVByb2dyZXNzXTsKIAogICAgIFt0ZXN0UnVubmVyLmdldCgpIHRlYXJEb3duXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410906</attachid>
            <date>2020-10-08 20:58:45 -0700</date>
            <delta_ts>2020-10-08 21:07:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201008205844.patch</filename>
            <type>text/plain</type>
            <size>29909</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgyNDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTA4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRo
QXN5bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdmVzIHRoZSB3YXkg
Zm9yIGEgZ29vZCBkb3dubG9hZCBBUEkgdGhhdCBoYXMgYSBjb21wbGV0aW9uIGhhbmRsZXIgd2hl
biB5b3UgY2FsbCBjYW5jZWwgdGhhdCBnaXZlcyB5b3UgdGhlIHJlc3VtZSBkYXRhIGlmIGl0IGNh
bi4KKyAgICAgICAgQ3VycmVudGx5IHlvdSBoYXZlIHRvIGNhbGwgY2FuY2VsIG9uIHRoZSBkb3du
bG9hZCwgd2FpdCBmb3IgZGlkQ2FuY2VsIG9uIHRoZSBkZWxlZ2F0ZSwgdGhlbiBnZXQgdGhlIHJl
c3VtZSBkYXRhIGZyb20gdGhlIGRvd25sb2FkIGFnYWluLgorICAgICAgICBUaGlzIGhhcyB0aGUg
c2lkZSBlZmZlY3Qgb2YgRG93bmxvYWRNb25pdG9yIGNhbmNlbGxhdGlvbnMgY2FsbGluZyBkaWRG
YWlsV2l0aEVycm9yIGluc3RlYWQgb2YgZGlkQ2FuY2VsLCB3aGljaCBtYWtlcyBzZW5zZSBhbmQg
c2hvdWxkbid0CisgICAgICAgIGNhdXNlIGFueSBwcm9ibGVtcyBpbiBwcmFjdGljZS4gIFRoYXQn
cyBvbmx5IHVzZWQgYnkgU2FmYXJpIGFuZCBiZWhhdmVzIHNpbWlsYXJseS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkQ2FuY2Vs
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQZW5k
aW5nRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9j
b2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW06CisgICAgICAgICgtW1dLRG93bmxvYWRQcm9ncmVz
cyBwZXJmb3JtQ2FuY2VsXSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2FuY2VsRG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBlbmRpbmdEb3dubG9h
ZENhbmNlbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmNyZWF0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5p
bjoKKwogMjAyMC0xMC0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjc3NjMpOiBTSE9VTEQgTkVWRVIgQkUgUkVB
Q0hFRCBpbiBXZWJLaXQ6OmNvbnRlbnRSdWxlTGlzdHNGcm9tSWRlbnRpZmllcgpJbmRleDogU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlz
aW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcxLDkgKzIwNzEsOSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZXN1bWVEb3dubG9hZChQQUw6CiAgICAgZG93bmxvYWRNYW5hZ2VyKCkucmVzdW1l
RG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZElELCByZXN1bWVEYXRhLCBwYXRoLCBXVEZNb3Zl
KHNhbmRib3hFeHRlbnNpb25IYW5kbGUpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2Fu
Y2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElEKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGRvd25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25sb2FkSUQpOworICAgIGRv
d25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25sb2FkSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMjA4OCwxMSArMjA4
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlV2lsbFNlbmRSZXEKICAgICBkb3du
bG9hZE1hbmFnZXIoKS5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChkb3dubG9hZElELCBXVEZNb3Zl
KHJlcXVlc3QpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGVuZGluZ0Rvd25sb2FkQ2Fu
Y2VsZWQoRG93bmxvYWRJRCBkb3dubG9hZElEKQotewotICAgIGRvd25sb2FkUHJveHlDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbCh7IH0pLCBkb3du
bG9hZElELnRvVUludDY0KCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3b3JrRGF0YVRhc2ssIFJlc3Bv
bnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IG5ldHdv
cmtEYXRhVGFzay5wZW5kaW5nRG93bmxvYWRJRCgpLnRvVUludDY0KCk7CkBAIC0yMTA1LDExICsy
MTAwLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZAogCiAgICAg
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdn
ZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG5ldHdvcmtEYXRh
VGFzayA9IG1ha2VSZWYobmV0d29ya0RhdGFUYXNrKV0gKFN0cmluZyYmIGRlc3RpbmF0aW9uLCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gZG93bmxvYWRJ
RCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgaWYgKGRl
c3RpbmF0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZG93bmxvYWRNYW5hZ2VyKCkuY2Fu
Y2VsRG93bmxvYWQoZG93bmxvYWRJRCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQ
b2xpY3lBY3Rpb246Oklnbm9yZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246Oklnbm9yZSk7CiAgICAgICAgIG5ldHdvcmtEYXRh
VGFzay0+c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZGVzdGluYXRpb24sIFdURk1vdmUoc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZ
ZXMpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246OkRvd25sb2FkKTsK
ICAgICAgICAgaWYgKG5ldHdvcmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0YVRhc2s6
OlN0YXRlOjpDYW5jZWxpbmcgfHwgbmV0d29ya0RhdGFUYXNrLT5zdGF0ZSgpID09IE5ldHdvcmtE
YXRhVGFzazo6U3RhdGU6OkNvbXBsZXRlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAzLDcgKzQwMyw2IEBAIHByaXZhdGU6CiAgICAgSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFBy
b3h5Q29ubmVjdGlvbigpIG92ZXJyaWRlOwogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNB
dXRoZW50aWNhdGlvbk1hbmFnZXIoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlbmRpbmdEb3dubG9h
ZENhbmNlbGVkKERvd25sb2FkSUQpIG92ZXJyaWRlOwogCiAgICAgLy8gTWVzc2FnZSBIYW5kbGVy
cwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNOZXR3b3JrUHJvY2Vzc01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
QEAgLTQyNCw3ICs0MjMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkb3dubG9hZFJlcXVlc3Qo
UEFMOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSk7CiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQQUw6OlNlc3Npb25J
RCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKLSAgICB2b2lkIGNh
bmNlbERvd25sb2FkKERvd25sb2FkSUQpOworICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxv
YWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
Jik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhEb3dubG9hZElELCBjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlCiAKICAgICBEb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBX
ZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QsIGVudW06Ym9vbCBPcHRpb25hbDxXZWJLaXQ6Ok5hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5h
bWUpCiAgICAgUmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJLaXQ6
OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEsIFN0
cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKQotICAgIENhbmNlbERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9h
ZElEKQorICAgIENhbmNlbERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElEKSAt
PiAoSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpIEFzeW5jCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoV2ViS2l0OjpEb3dubG9hZElEIGRvd25s
b2FkSUQsIFVSTCB1cmwsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI2ODIxNykKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYsMjAgKzg2LDMxIEBAIERvd25sb2FkOjp+RG93bmxvYWQoKQogICAg
IG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQogCi12b2lkIERvd25s
b2FkOjpjYW5jZWwoKQordm9pZCBEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIsIGJvb2wg
aWdub3JlRGlkRmFpbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
LSAgICBpZiAobV93YXNDYW5jZWxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2FzQ2FuY2Vs
ZWQgPSB0cnVlOworICAgIC8vIFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhFcnJvcjog
aXMgc3RpbGwgY2FsbGVkIGFmdGVyIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YSdzIGNvbXBs
ZXRpb25IYW5kbGVyLgorICAgIC8vIElmIHRoaXMgY2FuY2VsIHJlcXVlc3QgY2FtZSBmcm9tIHRo
ZSBBUEksIHdlIGRvIG5vdCB3YW50IHRvIHNlbmQgRG93bmxvYWRQcm94eTo6RGlkRmFpbCBiZWNh
dXNlIHRoZQorICAgIC8vIGNvbXBsZXRpb25IYW5kbGVyIHdpbGwgaW5mb3JtIHRoZSBBUEkgdGhh
dCB0aGUgY2FuY2VsbGF0aW9uIHN1Y2NlZWRlZC4KKyAgICBtX2lnbm9yZURpZEZhaWwgPSBpZ25v
cmVEaWRGYWlsOworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlcldyYXBwZXIgPSBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURh
dGEpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bWVEYXRhKTsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhbV9pZ25vcmVEaWRGYWlsKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJkaWRDYW5jZWw6IChpZCA9ICUi
IFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS50b1VJbnQ2NCgpKTsKKyAgICAgICAgaWYgKGF1dG8g
ZXh0ZW5zaW9uID0gc3RkOjpleGNoYW5nZShtX3NhbmRib3hFeHRlbnNpb24sIG51bGxwdHIpKQor
ICAgICAgICAgICAgZXh0ZW5zaW9uLT5yZXZva2UoKTsKKyAgICAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CisgICAgfTsKIAogICAgIGlmIChtX2Rvd25sb2Fk
KSB7CiAgICAgICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAgICAgICBkaWRDYW5jZWwoeyB9
KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXJXcmFwcGVyKHsgfSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgcGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpOworICAgIHBsYXRmb3Jt
Q2FuY2VsTmV0d29ya0xvYWQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcldyYXBwZXIpKTsKIH0K
IAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1LDYgKzE1Niw5IEBAIHZvaWQgRG93bmxvYWQ6
OmRpZEZpbmlzaCgpCiAKIHZvaWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKIHsKKyAgICBp
ZiAobV9pZ25vcmVEaWRGYWlsKQorICAgICAgICByZXR1cm47CisKICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJkaWRGYWlsOiAoaWQgPSAlIiBQUkl1NjQgIiwgaXNUaW1lb3V0ID0gJWQsIGlz
Q2FuY2VsbGF0aW9uID0gJWQsIGVyckNvZGUgPSAlZCkiLAogICAgICAgICBkb3dubG9hZElEKCku
dG9VSW50NjQoKSwgZXJyb3IuaXNUaW1lb3V0KCksIGVycm9yLmlzQ2FuY2VsbGF0aW9uKCksIGVy
cm9yLmVycm9yQ29kZSgpKTsKIApAQCAtMTU3LDE5ICsxNzEsNiBAQCB2b2lkIERvd25sb2FkOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRG
aW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgRG93bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCi17Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiZGlkQ2FuY2VsOiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkudG9VSW50NjQo
KSk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwocmVzdW1l
RGF0YSkpOwotCi0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikgewotICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb24tPnJldm9rZSgpOwotICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxs
cHRyOwotICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKCp0aGlz
KTsKLX0KLQogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9hZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdAogewogICAgIHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZFByb3h5
Q29ubmVjdGlvbigpOwpAQCAtMTkwLDggKzE5MSw5IEBAIGJvb2wgRG93bmxvYWQ6OmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgRG93bmxv
YWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1D
YW5jZWxOZXR3b3JrTG9hZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CiB9CiAKIHZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGVzdHJveURvd25sb2FkKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgfkRvd25sb2FkKCk7CiAKICAgICB2b2lkIHJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiYpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjYW5jZWwoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiwgYm9vbCBpZ25v
cmVEaWRGYWlsKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9ncmVz
cyhjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAjZW5kaWYKQEAgLTkx
LDEwICs5MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGJ5
dGVzV3JpdHRlbiwgdWludDY0X3QgdG90YWxCeXRlc1dyaXR0ZW4sIHVpbnQ2NF90IHRvdGFsQnl0
ZXNFeHBlY3RlZFRvV3JpdGUpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRG
YWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgcmVzdW1lRGF0YSk7CiAKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0OwotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NhbmNl
bGVkOyB9CiAKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkgeyBtX21v
bml0b3IuYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsgfQogICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgeyBtX21vbml0b3IuYXBwbGljYXRpb25XaWxsRW50
ZXJGb3JlZ3JvdW5kKCk7IH0KQEAgLTEwNyw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CisgICAgdm9pZCBwbGF0Zm9y
bUNhbmNlbE5ldHdvcmtMb2FkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95RG93bmxvYWQoKTsKIAog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CkBAIC0xMjQsMTAgKzEyMiwx
MSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAg
ICAgU3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKLSAgICBib29sIG1fd2FzQ2FuY2VsZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9oYXNSZWNlaXZlZERhdGEgeyBmYWxzZSB9OwogICAgIERvd25sb2Fk
TW9uaXRvciBtX21vbml0b3IgeyAqdGhpcyB9OwogICAgIHVuc2lnbmVkIG1fdGVzdFNwZWVkTXVs
dGlwbGllciB7IDEgfTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiBtX2NhbmNlbENvbXBsZXRpb25IYW5kbGVyOworICAgIGJvb2wgbV9pZ25v
cmVEaWRGYWlsIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTUgKzEwOSwxOSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6cmVzdW1lRG93bmxv
YWQoUEFMCiAjZW5kaWYKIH0KIAotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2Fk
KERvd25sb2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3du
bG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKGF1
dG8qIGRvd25sb2FkID0gbV9kb3dubG9hZHMuZ2V0KGRvd25sb2FkSUQpKSB7CiAgICAgICAgIEFT
U0VSVCghbV9wZW5kaW5nRG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKLSAgICAgICAg
ZG93bmxvYWQtPmNhbmNlbCgpOworICAgICAgICBkb3dubG9hZC0+Y2FuY2VsKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
YXV0byBwZW5kaW5nRG93bmxvYWQgPSBtX3BlbmRpbmdEb3dubG9hZHMudGFrZShkb3dubG9hZElE
KSkKLSAgICAgICAgcGVuZGluZ0Rvd25sb2FkLT5jYW5jZWwoKTsKKyAgICBpZiAoYXV0byBwZW5k
aW5nRG93bmxvYWQgPSBtX3BlbmRpbmdEb3dubG9hZHMudGFrZShkb3dubG9hZElEKSkgeworICAg
ICAgICBwZW5kaW5nRG93bmxvYWQtPmNhbmNlbChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw2IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIGRv
d25sb2FkUHJveHlDb25uZWN0aW9uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIElQQzo6Q29ubmVj
dGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb25Gb3JEb3dubG9hZHMoKSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1h
bmFnZXIoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwZW5kaW5nRG93bmxvYWRDYW5jZWxl
ZChEb3dubG9hZElEKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgTmV0d29ya1Nlc3Npb24qIG5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWYoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIGNvbnN0ID0g
MDsKQEAgLTg5LDcgKzg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQ
QUw6OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsK
IAotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCk7CisgICAgdm9pZCBjYW5jZWxE
b3dubG9hZChEb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKERvd25sb2FkSUQsIGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYmKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCShyZXZpc2lvbiAy
NjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEb3du
bG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwg
PCBXVEZfQVJSQVlfTEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKTsKICAgICBpZiAobWVhc3Vy
ZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhyb3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRl
c1BlclNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVk
OiBjYW5jZWxsaW5nIGRvd25sb2FkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93
bmxvYWRJRCgpLnRvVUludDY0KCkpOwotICAgICAgICBtX2Rvd25sb2FkLmNhbmNlbCgpOworICAg
ICAgICBtX2Rvd25sb2FkLmNhbmNlbChbXShhdXRvJikgeyB9LCBmYWxzZSk7CiAgICAgfSBlbHNl
IGlmIChtX2ludGVydmFsICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFs
cykpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmlj
aWVudCB0aHJvdWdocHV0IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3du
bG9hZElEKCkudG9VSW50NjQoKSk7CiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHRpbWVV
bnRpbE5leHRJbnRlcnZhbChtX2ludGVydmFsKyspIC8gdGVzdFNwZWVkTXVsdGlwbGllcigpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3du
bG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsMTEgKzcyLDExIEBAIHZvaWQgUGVuZGluZ0Rvd25sb2FkOjpjb250aW51
ZVdpbGxTZW5kUmUKICAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChX
VEZNb3ZlKG5ld1JlcXVlc3QpKTsKIH0KIAotdm9pZCBQZW5kaW5nRG93bmxvYWQ6OmNhbmNlbCgp
Cit2b2lkIFBlbmRpbmdEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKG1fbmV0d29ya0xvYWQpOwogICAgIG1fbmV0d29ya0xvYWQtPmNhbmNlbCgpOwotICAgIHNl
bmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbCh7IH0pKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcih7IH0pOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93
bmxvYWQuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIFBlbmRpbmdEb3dubG9hZChJUEM6OkNvbm5lY3Rpb24qLCBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0xvYWQ+JiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiwg
RG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7Ci0gICAgdm9pZCBjYW5jZWwoKTsKKyAgICB2
b2lkIGNhbmNlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcHVibGlzaFByb2dyZXNz
KGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2Ev
RG93bmxvYWRDb2NvYS5tbQkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiV0tEb3dubG9hZFByb2dyZXNzLmgiCiAjaW1w
b3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9O
U1Byb2dyZXNzU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKQEAgLTc5LDE3ICs4MCwxMyBAQCB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3Qg
SVBDOjpEYXRhUmVmCiAgICAgW21fZG93bmxvYWRUYXNrIHJlc3VtZV07CiB9CiAgICAgCi12b2lk
IERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKK3ZvaWQgRG93bmxvYWQ6OnBs
YXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQobV9k
b3dubG9hZFRhc2spOwotCi0gICAgLy8gVGhlIGRvd25sb2FkJ3MgcmVzdW1lIGRhdGEgaXMgYWNj
ZXNzZWQgaW4gdGhlIG5ldHdvcmsgc2Vzc2lvbiBkZWxlZ2F0ZQotICAgIC8vIG1ldGhvZCAtVVJM
U2Vzc2lvbjp0YXNrOmRpZENvbXBsZXRlV2l0aEVycm9yOiBpbnN0ZWFkIG9mIGluc2lkZSB0aGlz
IGJsb2NrLAotICAgIC8vIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSB0d28u
IENhbGxpbmcgLWNhbmNlbCBpcyBub3Qgc3VmZmljaWVudAotICAgIC8vIGhlcmUgYmVjYXVzZSBD
Rk5ldHdvcmsgd29uJ3QgcHJvdmlkZSB0aGUgcmVzdW1lIGRhdGEgdW5sZXNzIHdlIGFzayBmb3Ig
aXQuCi0gICAgW21fZG93bmxvYWRUYXNrIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTpeKE5T
RGF0YSAqcmVzdW1lRGF0YSkgewotICAgICAgICBVTlVTRURfUEFSQU0ocmVzdW1lRGF0YSk7Ci0g
ICAgfV07CisgICAgW21fZG93bmxvYWRUYXNrIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTpt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChOU0RhdGEgKnJlc3VtZURhdGEpIG11dGFibGUgeworICAgICAgICBhdXRvIHJlc3VtZURh
dGFSZWZlcmVuY2UgPSByZXN1bWVEYXRhID8gSVBDOjpEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHJlc3VtZURhdGEuYnl0ZXMpLCByZXN1bWVEYXRhLmxlbmd0aCB9
IDogSVBDOjpEYXRhUmVmZXJlbmNlIHsgfTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVz
dW1lRGF0YVJlZmVyZW5jZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIERvd25sb2FkOjpw
bGF0Zm9ybURlc3Ryb3lEb3dubG9hZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvV0tEb3dubG9hZFBy
b2dyZXNzLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgY291bnRPZkJ5dGVzUmVj
ZQogLSAodm9pZClwZXJmb3JtQ2FuY2VsCiB7CiAgICAgaWYgKG1fZG93bmxvYWQpCi0gICAgICAg
IG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgICAgICBtX2Rvd25sb2FkLT5jYW5jZWwoW10oYXV0
byYpIHsgfSwgZmFsc2UpOwogICAgIG1fZG93bmxvYWQgPSBudWxscHRyOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTc2OSwxMSArNzY5LDcgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aQogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXN1bWVEYXRhUmVmZXJlbmNlID0gcmVzdW1l
RGF0YSA/IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihy
ZXN1bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGggfSA6IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IH07Ci0KLSAgICAgICAgaWYgKGRvd25sb2FkLT53YXNDYW5jZWxlZCgpKQotICAgICAgICAg
ICAgZG93bmxvYWQtPmRpZENhbmNlbChyZXN1bWVEYXRhUmVmZXJlbmNlKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGFSZWZlcmVu
Y2UpOworICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgcmVzdW1lRGF0YVJlZmVyZW5j
ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDEwICs2MSwyMiBAQCBEb3dubG9hZFByb3h5OjpEb3dubG9hZFByb3h5KERvd25s
b2FkUHJvCiAKIERvd25sb2FkUHJveHk6On5Eb3dubG9hZFByb3h5KCkgPSBkZWZhdWx0OwogCitz
dGF0aWMgUmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGEpCit7CisgICAgaWYgKGRhdGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKK30KKwogdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogewotICAgIGlmIChtX2Rh
dGFTdG9yZSkKLSAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwor
ICAgIGlmIChtX2RhdGFTdG9yZSkgeworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxE
b3dubG9hZChtX2Rvd25sb2FkSUQpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKSB7CisgICAgICAgICAg
ICBtX3Jlc3VtZURhdGEgPSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOworICAgICAgICAgICAgbV9j
bGllbnQtPmRpZENhbmNlbCgqdGhpcyk7CisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAu
ZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBE
b3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTE2MSwxNCArMTczLDYgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRGaW5pc2goKQogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZp
bmlzaGVkKCp0aGlzKTsKIH0KIAotc3RhdGljIFJlZlB0cjxBUEk6OkRhdGE+IGNyZWF0ZURhdGEo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIGlmIChkYXRhLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJl
c3VtZURhdGEpCiB7CiAgICAgbV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsK
QEAgLTE3OSwxNSArMTgzLDUgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJl
c291cgogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0K
IAotdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQotewotICAgIG1fcmVzdW1lRGF0YSA9IGNyZWF0ZURhdGEocmVzdW1lRGF0
YSk7Ci0KLSAgICBtX2NsaWVudC0+ZGlkQ2FuY2VsKCp0aGlzKTsKLQotICAgIC8vIFRoaXMgY2Fu
IGNhdXNlIHRoZSBEb3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxldGVkLgotICAgIG1fZG93
bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDcgKzExNiw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25z
dCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRGYWls
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVkaXJlY3RSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUsIEFsbG93T3Zl
cndyaXRlKT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjgy
MTcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEsNSArMzEsNCBAQCBtZXNzYWdlcyAtPiBE
b3dubG9hZFByb3h5IHsKICAgICBEaWRDcmVhdGVEZXN0aW5hdGlvbihTdHJpbmcgcGF0aCkKICAg
ICBEaWRGaW5pc2goKQogICAgIERpZEZhaWwoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwg
SVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpCi0gICAgRGlkQ2FuY2VsKElQQzo6RGF0YVJl
ZmVyZW5jZSByZXN1bWVEYXRhKQogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MjE3KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMTAtMDggIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2Ugc2VuZFdpdGhB
c3luY1JlcGx5IGZvciBOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQyMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKC1bV2FpdFVudGlsRG93bmxvYWRD
YW5jZWxlZERlbGVnYXRlIF9kb3dubG9hZDpkaWRGYWlsV2l0aEVycm9yOl0pOgorICAgICAgICAo
LVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkOmRpZEZhaWxXaXRoRXJyb3I6
XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFp
bF0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgc3RvcFdhaXRpbmdG
b3JEaWRGYWlsXSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptb25pdG9yRGVsZWdhdGUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6d2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11
bHRpcGxpZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICgtW1dhaXRVbnRpbERvd25sb2Fk
Q2FuY2VsZWREZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6IERl
bGV0ZWQuCisKIDIwMjAtMTAtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjY3NzYzKTogWyBpT1Mgd2syIF0gaHR0
cC90ZXN0cy9pbi1hcHAtYnJvd3Nlci1wcml2YWN5L25vbi1hcHAtYm91bmQtZG9tYWluLWRvZXMt
bm90LWdldC1hcHAtYm91bmQtc2Vzc2lvbi5odG1sIGlzIGEgY29uc3RhbnQgZmFpbHVyZQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NjksOCArNzY5LDEwIEBAIC0g
KHZvaWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9XS0Rvd25sb2FkICoKICAgICBbZG93bmxvYWQub3Jp
Z2luYXRpbmdXZWJWaWV3IF9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlXTsKIH0K
IAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKKy0g
KHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6
KE5TRXJyb3IgKillcnJvcgogeworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sIE5T
VVJMRXJyb3JEb21haW4pOworICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBOU1VSTEVycm9yQ2Fu
Y2VsbGVkKTsKICAgICBpc0RvbmUgPSB0cnVlOwogfQogCkBAIC03OTgsMjIgKzgwMCwzOCBAQCBU
RVNUKF9XS0Rvd25sb2FkLCBDcmFzaEFmdGVyRG93bmxvYWREaWRGCiB9CiAKIHN0YXRpYyBib29s
IHJlY2VpdmVkRGF0YTsKLXN0YXRpYyBib29sIGRpZENhbmNlbDsKIHN0YXRpYyBSZXRhaW5QdHI8
TlNTdHJpbmc+IGRlc3RpbmF0aW9uOwogCiBAaW50ZXJmYWNlIERvd25sb2FkTW9uaXRvclRlc3RE
ZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfV0tEb3dubG9hZERlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9y
RGlkRmFpbDsKKy0gKHZvaWQpc3RvcFdhaXRpbmdGb3JEaWRGYWlsOwogQGVuZAogCi1AaW1wbGVt
ZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gRG93
bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIHsKKyAgICBib29sIGRpZEZhaWw7Cit9CiAKIC0gKHZv
aWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKIHsKICAgICBkaWRE
b3dubG9hZFN0YXJ0ID0gdHJ1ZTsKIH0KIAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9X
S0Rvd25sb2FkICopZG93bmxvYWQKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRv
d25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIGRpZEZhaWwg
PSB0cnVlOworfQorCistICh2b2lkKXdhaXRGb3JEaWRGYWlsCit7CisgICAgZGlkRmFpbCA9IGZh
bHNlOworICAgIHdoaWxlICghZGlkRmFpbCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
c3BpblJ1bkxvb3AoKTsKK30KKworLSAodm9pZClzdG9wV2FpdGluZ0ZvckRpZEZhaWwKIHsKLSAg
ICBkaWRDYW5jZWwgPSB0cnVlOworICAgIEVYUEVDVF9GQUxTRShkaWRGYWlsKTsKKyAgICBkaWRG
YWlsID0gdHJ1ZTsKIH0KIAogLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxv
YWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopZmls
ZW5hbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYWxsb3dPdmVyd3JpdGUsIE5T
U3RyaW5nICpkZXN0aW5hdGlvbikpY29tcGxldGlvbkhhbmRsZXIKQEAgLTg1OSwxMCArODc3LDE1
IEBAIHZvaWQgcmVzcG9uZFNsb3dseShpbnQgc29ja2V0LCBkb3VibGUga2IKICAgICB9CiB9CiAK
K3N0YXRpYyBSZXRhaW5QdHI8RG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlPiBtb25pdG9yRGVs
ZWdhdGUoKQoreworICAgIHN0YXRpYyBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbRG93bmxvYWRN
b25pdG9yVGVzdERlbGVnYXRlIG5ld10pOworICAgIHJldHVybiBkZWxlZ2F0ZTsKK30KKwogUmV0
YWluUHRyPFdLV2ViVmlldz4gd2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxp
ZXIoc2l6ZV90IG11bHRpcGxpZXIpCiB7CiAgICAgc3RhdGljIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gYWRvcHROUyhbRG93bmxvYWROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSk7Ci0gICAgc3Rh
dGljIGF1dG8gZG93bmxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTW9uaXRvclRlc3RE
ZWxlZ2F0ZSBuZXddKTsKICAgICBhdXRvIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBuZXddKTsKICAgICBhdXRvIHByb2Nlc3NQ
b29sID0gYWRvcHROUyhbW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwpAQCAtODcxLDcgKzg5NCw3
IEBAIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXdXaXRoRG93bmxvYWQKICAgICBbd2ViVmll
d0NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpbW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0
b3JlbGVhc2VdXTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9u
RGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKLSAgICBbd2ViVmlldyBjb25maWd1
cmF0aW9uXS5wcm9jZXNzUG9vbC5fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGUu
Z2V0KCk7CisgICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wuX2Rvd25sb2Fk
RGVsZWdhdGUgPSBtb25pdG9yRGVsZWdhdGUoKS5nZXQoKTsKICAgICByZXR1cm4gd2ViVmlldzsK
IH0KIApAQCAtODkyLDggKzkxNSw3IEBAIHZvaWQgZG93bmxvYWRBdFJhdGUoZG91YmxlIGRlc2ly
ZWRLYnBzLCAKICAgICBbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBf
c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpZRVNdOwogICAgIGlmIChyZXR1cm5Ub0ZvcmVncm91
bmQgPT0gQXBwUmV0dXJuc1RvRm9yZWdyb3VuZDo6WWVzKQogICAgICAgICBbW3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBfc3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZDpO
T107Ci0gICAgZGlkQ2FuY2VsID0gZmFsc2U7Ci0gICAgVXRpbDo6cnVuKCZkaWRDYW5jZWwpOwor
ICAgIFttb25pdG9yRGVsZWdhdGUoKSB3YWl0Rm9yRGlkRmFpbF07CiAgICAgdGVybWluYXRlU2Vy
dmVyID0gdHJ1ZTsKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0
ZW1BdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmRlc3RpbmF0aW9uLmdldCgpIGlzRGlyZWN0
b3J5Ok5PXSBlcnJvcjpuaWxdOwogfQpAQCAtOTA4LDggKzkzMCw3IEBAIFRFU1QoX1dLRG93bmxv
YWQsIERJU0FCTEVEX0Rvd25sb2FkTW9uaXQKIHsKICAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJl
YWNoZWQgPSBOTzsKICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJ
TUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
ewotICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FuY2VsKTsKLSAgICAgICAgZGlkQ2FuY2VsID0g
dHJ1ZTsKKyAgICAgICAgW21vbml0b3JEZWxlZ2F0ZSgpIHN0b3BXYWl0aW5nRm9yRGlkRmFpbF07
CiAgICAgICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOwogICAgIH0pOwogCkBAIC05MjMsOCArOTQ0
LDcgQEAgVEVTVChfV0tEb3dubG9hZCwgRG93bmxvYWRNb25pdG9yUmV0dXJuVAogewogICAgIF9f
YmxvY2sgQk9PTCB0aW1lb3V0UmVhY2hlZCA9IE5POwogICAgIGRpc3BhdGNoX2FmdGVyKGRpc3Bh
dGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIDIuNSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIEVYUEVDVF9GQUxTRShkaWRDYW5jZWwpOwot
ICAgICAgICBkaWRDYW5jZWwgPSB0cnVlOworICAgICAgICBbbW9uaXRvckRlbGVnYXRlKCkgc3Rv
cFdhaXRpbmdGb3JEaWRGYWlsXTsKICAgICAgICAgdGltZW91dFJlYWNoZWQgPSBZRVM7CiAgICAg
fSk7CiAgICAgZG93bmxvYWRBdFJhdGUoMC41LCAxMjAsIEFwcFJldHVybnNUb0ZvcmVncm91bmQ6
Olllcyk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25s
b2FkUHJvZ3Jlc3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3dubG9hZFByb2dyZXNzLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkUHJvZ3Jlc3MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBURVNUKERvd25sb2FkUHJvZ3Jlc3MsIENh
bmNlbERvd25sb2FkV2hlCiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgc3Vic2NyaWJlQW5kV2FpdEZv
clByb2dyZXNzXTsKICAgICBbdGVzdFJ1bm5lci5nZXQoKSByZWNlaXZlRGF0YTo1MF07CiAgICAg
W3Rlc3RSdW5uZXIuZ2V0KCkucHJvZ3Jlc3MgY2FuY2VsXTsKLSAgICBbdGVzdFJ1bm5lci5nZXQo
KSB3YWl0Rm9yRG93bmxvYWRDYW5jZWxlZF07CisgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2FpdEZv
ckRvd25sb2FkRmFpbGVkXTsKICAgICBbdGVzdFJ1bm5lci5nZXQoKSB3YWl0VG9Mb3NlUHJvZ3Jl
c3NdOwogCiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgdGVhckRvd25dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410907</attachid>
            <date>2020-10-08 21:07:31 -0700</date>
            <delta_ts>2020-10-09 09:04:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201008210731.patch</filename>
            <type>text/plain</type>
            <size>30012</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgyNDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTA4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRo
QXN5bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdmVzIHRoZSB3YXkg
Zm9yIGEgZ29vZCBkb3dubG9hZCBBUEkgdGhhdCBoYXMgYSBjb21wbGV0aW9uIGhhbmRsZXIgd2hl
biB5b3UgY2FsbCBjYW5jZWwgdGhhdCBnaXZlcyB5b3UgdGhlIHJlc3VtZSBkYXRhIGlmIGl0IGNh
bi4KKyAgICAgICAgQ3VycmVudGx5IHlvdSBoYXZlIHRvIGNhbGwgY2FuY2VsIG9uIHRoZSBkb3du
bG9hZCwgd2FpdCBmb3IgZGlkQ2FuY2VsIG9uIHRoZSBkZWxlZ2F0ZSwgdGhlbiBnZXQgdGhlIHJl
c3VtZSBkYXRhIGZyb20gdGhlIGRvd25sb2FkIGFnYWluLgorICAgICAgICBUaGlzIGhhcyB0aGUg
c2lkZSBlZmZlY3Qgb2YgRG93bmxvYWRNb25pdG9yIGNhbmNlbGxhdGlvbnMgY2FsbGluZyBkaWRG
YWlsV2l0aEVycm9yIGluc3RlYWQgb2YgZGlkQ2FuY2VsLCB3aGljaCBtYWtlcyBzZW5zZSBhbmQg
c2hvdWxkbid0CisgICAgICAgIGNhdXNlIGFueSBwcm9ibGVtcyBpbiBwcmFjdGljZS4gIFRoYXQn
cyBvbmx5IHVzZWQgYnkgU2FmYXJpIGFuZCBiZWhhdmVzIHNpbWlsYXJseS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkQ2FuY2Vs
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZE1vbml0b3I6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQZW5k
aW5nRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9j
b2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW06CisgICAgICAgICgtW1dLRG93bmxvYWRQcm9ncmVz
cyBwZXJmb3JtQ2FuY2VsXSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2FuY2VsRG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBlbmRpbmdEb3dubG9h
ZENhbmNlbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmNyZWF0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFBy
b3h5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5p
bjoKKwogMjAyMC0xMC0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjc3NjMpOiBTSE9VTEQgTkVWRVIgQkUgUkVB
Q0hFRCBpbiBXZWJLaXQ6OmNvbnRlbnRSdWxlTGlzdHNGcm9tSWRlbnRpZmllcgpJbmRleDogU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlz
aW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcxLDkgKzIwNzEsOSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZXN1bWVEb3dubG9hZChQQUw6CiAgICAgZG93bmxvYWRNYW5hZ2VyKCkucmVzdW1l
RG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZElELCByZXN1bWVEYXRhLCBwYXRoLCBXVEZNb3Zl
KHNhbmRib3hFeHRlbnNpb25IYW5kbGUpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2Fu
Y2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElEKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGRvd25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25sb2FkSUQpOworICAgIGRv
d25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25sb2FkSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMjA4OCwxMSArMjA4
OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlV2lsbFNlbmRSZXEKICAgICBkb3du
bG9hZE1hbmFnZXIoKS5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChkb3dubG9hZElELCBXVEZNb3Zl
KHJlcXVlc3QpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGVuZGluZ0Rvd25sb2FkQ2Fu
Y2VsZWQoRG93bmxvYWRJRCBkb3dubG9hZElEKQotewotICAgIGRvd25sb2FkUHJveHlDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbCh7IH0pLCBkb3du
bG9hZElELnRvVUludDY0KCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3b3JrRGF0YVRhc2ssIFJlc3Bv
bnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IG5ldHdv
cmtEYXRhVGFzay5wZW5kaW5nRG93bmxvYWRJRCgpLnRvVUludDY0KCk7CkBAIC0yMTA1LDExICsy
MTAwLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdEb3dubG9hZAogCiAgICAg
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdn
ZXN0ZWRGaWxlbmFtZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG5ldHdvcmtEYXRh
VGFzayA9IG1ha2VSZWYobmV0d29ya0RhdGFUYXNrKV0gKFN0cmluZyYmIGRlc3RpbmF0aW9uLCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gZG93bmxvYWRJ
RCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgaWYgKGRl
c3RpbmF0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZG93bmxvYWRNYW5hZ2VyKCkuY2Fu
Y2VsRG93bmxvYWQoZG93bmxvYWRJRCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQ
b2xpY3lBY3Rpb246Oklnbm9yZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246Oklnbm9yZSk7CiAgICAgICAgIG5ldHdvcmtEYXRh
VGFzay0+c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZGVzdGluYXRpb24sIFdURk1vdmUoc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZ
ZXMpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246OkRvd25sb2FkKTsK
ICAgICAgICAgaWYgKG5ldHdvcmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0YVRhc2s6
OlN0YXRlOjpDYW5jZWxpbmcgfHwgbmV0d29ya0RhdGFUYXNrLT5zdGF0ZSgpID09IE5ldHdvcmtE
YXRhVGFzazo6U3RhdGU6OkNvbXBsZXRlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAzLDcgKzQwMyw2IEBAIHByaXZhdGU6CiAgICAgSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFBy
b3h5Q29ubmVjdGlvbigpIG92ZXJyaWRlOwogICAgIElQQzo6Q29ubmVjdGlvbiogcGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb25Gb3JEb3dubG9hZHMoKSBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpOyB9CiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNB
dXRoZW50aWNhdGlvbk1hbmFnZXIoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlbmRpbmdEb3dubG9h
ZENhbmNlbGVkKERvd25sb2FkSUQpIG92ZXJyaWRlOwogCiAgICAgLy8gTWVzc2FnZSBIYW5kbGVy
cwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNOZXR3b3JrUHJvY2Vzc01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
QEAgLTQyNCw3ICs0MjMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkb3dubG9hZFJlcXVlc3Qo
UEFMOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSk7CiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQQUw6OlNlc3Npb25J
RCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKLSAgICB2b2lkIGNh
bmNlbERvd25sb2FkKERvd25sb2FkSUQpOworICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxv
YWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4m
Jik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwdWJsaXNoRG93bmxvYWRQcm9ncmVz
cyhEb3dubG9hZElELCBjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlCiAKICAgICBEb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBX
ZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QsIGVudW06Ym9vbCBPcHRpb25hbDxXZWJLaXQ6Ok5hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5h
bWUpCiAgICAgUmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJLaXQ6
OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEsIFN0
cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKQotICAgIENhbmNlbERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9h
ZElEKQorICAgIENhbmNlbERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElEKSAt
PiAoSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpIEFzeW5jCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoV2ViS2l0OjpEb3dubG9hZElEIGRvd25s
b2FkSUQsIFVSTCB1cmwsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDI2ODIxNykKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYsMjAgKzg2LDMxIEBAIERvd25sb2FkOjp+RG93bmxvYWQoKQogICAg
IG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQogCi12b2lkIERvd25s
b2FkOjpjYW5jZWwoKQordm9pZCBEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIsIGJvb2wg
aWdub3JlRGlkRmFpbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
LSAgICBpZiAobV93YXNDYW5jZWxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2FzQ2FuY2Vs
ZWQgPSB0cnVlOworICAgIC8vIFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhFcnJvcjog
aXMgc3RpbGwgY2FsbGVkIGFmdGVyIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YSdzIGNvbXBs
ZXRpb25IYW5kbGVyLgorICAgIC8vIElmIHRoaXMgY2FuY2VsIHJlcXVlc3QgY2FtZSBmcm9tIHRo
ZSBBUEksIHdlIGRvIG5vdCB3YW50IHRvIHNlbmQgRG93bmxvYWRQcm94eTo6RGlkRmFpbCBiZWNh
dXNlIHRoZQorICAgIC8vIGNvbXBsZXRpb25IYW5kbGVyIHdpbGwgaW5mb3JtIHRoZSBBUEkgdGhh
dCB0aGUgY2FuY2VsbGF0aW9uIHN1Y2NlZWRlZC4KKyAgICBtX2lnbm9yZURpZEZhaWwgPSBpZ25v
cmVEaWRGYWlsOworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlcldyYXBwZXIgPSBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURh
dGEpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bWVEYXRhKTsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhbV9pZ25vcmVEaWRGYWlsKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJkaWRDYW5jZWw6IChpZCA9ICUi
IFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS50b1VJbnQ2NCgpKTsKKyAgICAgICAgaWYgKGF1dG8g
ZXh0ZW5zaW9uID0gc3RkOjpleGNoYW5nZShtX3NhbmRib3hFeHRlbnNpb24sIG51bGxwdHIpKQor
ICAgICAgICAgICAgZXh0ZW5zaW9uLT5yZXZva2UoKTsKKyAgICAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CisgICAgfTsKIAogICAgIGlmIChtX2Rvd25sb2Fk
KSB7CiAgICAgICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAgICAgICBkaWRDYW5jZWwoeyB9
KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXJXcmFwcGVyKHsgfSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgcGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpOworICAgIHBsYXRmb3Jt
Q2FuY2VsTmV0d29ya0xvYWQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcldyYXBwZXIpKTsKIH0K
IAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1LDYgKzE1Niw5IEBAIHZvaWQgRG93bmxvYWQ6
OmRpZEZpbmlzaCgpCiAKIHZvaWQgRG93bmxvYWQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKIHsKKyAgICBp
ZiAobV9pZ25vcmVEaWRGYWlsKQorICAgICAgICByZXR1cm47CisKICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJkaWRGYWlsOiAoaWQgPSAlIiBQUkl1NjQgIiwgaXNUaW1lb3V0ID0gJWQsIGlz
Q2FuY2VsbGF0aW9uID0gJWQsIGVyckNvZGUgPSAlZCkiLAogICAgICAgICBkb3dubG9hZElEKCku
dG9VSW50NjQoKSwgZXJyb3IuaXNUaW1lb3V0KCksIGVycm9yLmlzQ2FuY2VsbGF0aW9uKCksIGVy
cm9yLmVycm9yQ29kZSgpKTsKIApAQCAtMTU3LDE5ICsxNzEsNiBAQCB2b2lkIERvd25sb2FkOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRG
aW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgRG93bmxvYWQ6OmRpZENhbmNlbChjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCi17Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiZGlkQ2FuY2VsOiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkudG9VSW50NjQo
KSk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwocmVzdW1l
RGF0YSkpOwotCi0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikgewotICAgICAgICBtX3NhbmRi
b3hFeHRlbnNpb24tPnJldm9rZSgpOwotICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxs
cHRyOwotICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKCp0aGlz
KTsKLX0KLQogSVBDOjpDb25uZWN0aW9uKiBEb3dubG9hZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdAogewogICAgIHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZFByb3h5
Q29ubmVjdGlvbigpOwpAQCAtMTkwLDggKzE5MSw5IEBAIGJvb2wgRG93bmxvYWQ6OmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgRG93bmxv
YWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1D
YW5jZWxOZXR3b3JrTG9hZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CiB9CiAKIHZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGVzdHJveURvd25sb2FkKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgfkRvd25sb2FkKCk7CiAKICAgICB2b2lkIHJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiYpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjYW5jZWwoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiwgYm9vbCBpZ25v
cmVEaWRGYWlsKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9ncmVz
cyhjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAjZW5kaWYKQEAgLTkx
LDEwICs5MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGJ5
dGVzV3JpdHRlbiwgdWludDY0X3QgdG90YWxCeXRlc1dyaXR0ZW4sIHVpbnQ2NF90IHRvdGFsQnl0
ZXNFeHBlY3RlZFRvV3JpdGUpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRG
YWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgcmVzdW1lRGF0YSk7CiAKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0OwotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NhbmNl
bGVkOyB9CiAKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkgeyBtX21v
bml0b3IuYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsgfQogICAgIHZvaWQgYXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgeyBtX21vbml0b3IuYXBwbGljYXRpb25XaWxsRW50
ZXJGb3JlZ3JvdW5kKCk7IH0KQEAgLTEwNyw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CisgICAgdm9pZCBwbGF0Zm9y
bUNhbmNlbE5ldHdvcmtMb2FkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95RG93bmxvYWQoKTsKIAog
ICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CkBAIC0xMjQsMTAgKzEyMiwx
MSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAg
ICAgU3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKLSAgICBib29sIG1fd2FzQ2FuY2VsZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9oYXNSZWNlaXZlZERhdGEgeyBmYWxzZSB9OwogICAgIERvd25sb2Fk
TW9uaXRvciBtX21vbml0b3IgeyAqdGhpcyB9OwogICAgIHVuc2lnbmVkIG1fdGVzdFNwZWVkTXVs
dGlwbGllciB7IDEgfTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiBtX2NhbmNlbENvbXBsZXRpb25IYW5kbGVyOworICAgIGJvb2wgbV9pZ25v
cmVEaWRGYWlsIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTUgKzEwOSwxOSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6cmVzdW1lRG93bmxv
YWQoUEFMCiAjZW5kaWYKIH0KIAotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2Fk
KERvd25sb2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3du
bG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKGF1
dG8qIGRvd25sb2FkID0gbV9kb3dubG9hZHMuZ2V0KGRvd25sb2FkSUQpKSB7CiAgICAgICAgIEFT
U0VSVCghbV9wZW5kaW5nRG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKLSAgICAgICAg
ZG93bmxvYWQtPmNhbmNlbCgpOworICAgICAgICBkb3dubG9hZC0+Y2FuY2VsKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
YXV0byBwZW5kaW5nRG93bmxvYWQgPSBtX3BlbmRpbmdEb3dubG9hZHMudGFrZShkb3dubG9hZElE
KSkKLSAgICAgICAgcGVuZGluZ0Rvd25sb2FkLT5jYW5jZWwoKTsKKyAgICBpZiAoYXV0byBwZW5k
aW5nRG93bmxvYWQgPSBtX3BlbmRpbmdEb3dubG9hZHMudGFrZShkb3dubG9hZElEKSkgeworICAg
ICAgICBwZW5kaW5nRG93bmxvYWQtPmNhbmNlbChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw2IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIGRv
d25sb2FkUHJveHlDb25uZWN0aW9uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIElQQzo6Q29ubmVj
dGlvbiogcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb25Gb3JEb3dubG9hZHMoKSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1h
bmFnZXIoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwZW5kaW5nRG93bmxvYWRDYW5jZWxl
ZChEb3dubG9hZElEKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgTmV0d29ya1Nlc3Npb24qIG5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWYoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIGNvbnN0ID0g
MDsKQEAgLTg5LDcgKzg4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQ
QUw6OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsK
IAotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCk7CisgICAgdm9pZCBjYW5jZWxE
b3dubG9hZChEb3dubG9hZElELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKERvd25sb2FkSUQsIGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYmKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCShyZXZpc2lvbiAy
NjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEb3du
bG9hZE1vbml0b3I6OnRpbWVyRmlyZWQoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1faW50ZXJ2YWwg
PCBXVEZfQVJSQVlfTEVOR1RIKHRocm91Z2hwdXRJbnRlcnZhbHMpKTsKICAgICBpZiAobWVhc3Vy
ZWRUaHJvdWdocHV0UmF0ZSgpIDwgdGhyb3VnaHB1dEludGVydmFsc1ttX2ludGVydmFsXS5ieXRl
c1BlclNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVk
OiBjYW5jZWxsaW5nIGRvd25sb2FkIChpZCA9ICUiIFBSSXU2NCAiKSIsIG1fZG93bmxvYWQuZG93
bmxvYWRJRCgpLnRvVUludDY0KCkpOwotICAgICAgICBtX2Rvd25sb2FkLmNhbmNlbCgpOworICAg
ICAgICBtX2Rvd25sb2FkLmNhbmNlbChbXShhdXRvJikgeyB9LCBmYWxzZSk7CiAgICAgfSBlbHNl
IGlmIChtX2ludGVydmFsICsgMSA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVydmFs
cykpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidGltZXJGaXJlZDogc3VmZmlj
aWVudCB0aHJvdWdocHV0IHJhdGUgKGlkID0gJSIgUFJJdTY0ICIpIiwgbV9kb3dubG9hZC5kb3du
bG9hZElEKCkudG9VSW50NjQoKSk7CiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHRpbWVV
bnRpbE5leHRJbnRlcnZhbChtX2ludGVydmFsKyspIC8gdGVzdFNwZWVkTXVsdGlwbGllcigpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3du
bG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsMTEgKzcyLDExIEBAIHZvaWQgUGVuZGluZ0Rvd25sb2FkOjpjb250aW51
ZVdpbGxTZW5kUmUKICAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChX
VEZNb3ZlKG5ld1JlcXVlc3QpKTsKIH0KIAotdm9pZCBQZW5kaW5nRG93bmxvYWQ6OmNhbmNlbCgp
Cit2b2lkIFBlbmRpbmdEb3dubG9hZDo6Y2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKG1fbmV0d29ya0xvYWQpOwogICAgIG1fbmV0d29ya0xvYWQtPmNhbmNlbCgpOwotICAgIHNl
bmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbCh7IH0pKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcih7IH0pOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93
bmxvYWQuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIFBlbmRpbmdEb3dubG9hZChJUEM6OkNvbm5lY3Rpb24qLCBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0xvYWQ+JiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiwg
RG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7Ci0gICAgdm9pZCBjYW5jZWwoKTsKKyAgICB2
b2lkIGNhbmNlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpPiYmKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcHVibGlzaFByb2dyZXNz
KGNvbnN0IFVSTCYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2Ev
RG93bmxvYWRDb2NvYS5tbQkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiV0tEb3dubG9hZFByb2dyZXNzLmgiCiAjaW1w
b3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9O
U1Byb2dyZXNzU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKQEAgLTc5LDE3ICs4MCwxMyBAQCB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3Qg
SVBDOjpEYXRhUmVmCiAgICAgW21fZG93bmxvYWRUYXNrIHJlc3VtZV07CiB9CiAgICAgCi12b2lk
IERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKK3ZvaWQgRG93bmxvYWQ6OnBs
YXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQobV9k
b3dubG9hZFRhc2spOwotCi0gICAgLy8gVGhlIGRvd25sb2FkJ3MgcmVzdW1lIGRhdGEgaXMgYWNj
ZXNzZWQgaW4gdGhlIG5ldHdvcmsgc2Vzc2lvbiBkZWxlZ2F0ZQotICAgIC8vIG1ldGhvZCAtVVJM
U2Vzc2lvbjp0YXNrOmRpZENvbXBsZXRlV2l0aEVycm9yOiBpbnN0ZWFkIG9mIGluc2lkZSB0aGlz
IGJsb2NrLAotICAgIC8vIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSB0d28u
IENhbGxpbmcgLWNhbmNlbCBpcyBub3Qgc3VmZmljaWVudAotICAgIC8vIGhlcmUgYmVjYXVzZSBD
Rk5ldHdvcmsgd29uJ3QgcHJvdmlkZSB0aGUgcmVzdW1lIGRhdGEgdW5sZXNzIHdlIGFzayBmb3Ig
aXQuCi0gICAgW21fZG93bmxvYWRUYXNrIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTpeKE5T
RGF0YSAqcmVzdW1lRGF0YSkgewotICAgICAgICBVTlVTRURfUEFSQU0ocmVzdW1lRGF0YSk7Ci0g
ICAgfV07CisgICAgW21fZG93bmxvYWRUYXNrIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTpt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChOU0RhdGEgKnJlc3VtZURhdGEpIG11dGFibGUgeworICAgICAgICBhdXRvIHJlc3VtZURh
dGFSZWZlcmVuY2UgPSByZXN1bWVEYXRhID8gSVBDOjpEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHJlc3VtZURhdGEuYnl0ZXMpLCByZXN1bWVEYXRhLmxlbmd0aCB9
IDogSVBDOjpEYXRhUmVmZXJlbmNlIHsgfTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVz
dW1lRGF0YVJlZmVyZW5jZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIERvd25sb2FkOjpw
bGF0Zm9ybURlc3Ryb3lEb3dubG9hZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvV0tEb3dubG9hZFBy
b2dyZXNzLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jlc3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgY291bnRPZkJ5dGVzUmVj
ZQogLSAodm9pZClwZXJmb3JtQ2FuY2VsCiB7CiAgICAgaWYgKG1fZG93bmxvYWQpCi0gICAgICAg
IG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgICAgICBtX2Rvd25sb2FkLT5jYW5jZWwoW10oYXV0
byYpIHsgfSwgZmFsc2UpOwogICAgIG1fZG93bmxvYWQgPSBudWxscHRyOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTc2OSwxMSArNzY5LDcgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aQogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXN1bWVEYXRhUmVmZXJlbmNlID0gcmVzdW1l
RGF0YSA/IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihy
ZXN1bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGggfSA6IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IH07Ci0KLSAgICAgICAgaWYgKGRvd25sb2FkLT53YXNDYW5jZWxlZCgpKQotICAgICAgICAg
ICAgZG93bmxvYWQtPmRpZENhbmNlbChyZXN1bWVEYXRhUmVmZXJlbmNlKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGFSZWZlcmVu
Y2UpOworICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgcmVzdW1lRGF0YVJlZmVyZW5j
ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDEwICs2MSwyMiBAQCBEb3dubG9hZFByb3h5OjpEb3dubG9hZFByb3h5KERvd25s
b2FkUHJvCiAKIERvd25sb2FkUHJveHk6On5Eb3dubG9hZFByb3h5KCkgPSBkZWZhdWx0OwogCitz
dGF0aWMgUmVmUHRyPEFQSTo6RGF0YT4gY3JlYXRlRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGEpCit7CisgICAgaWYgKGRhdGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKTsKK30KKwogdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogewotICAgIGlmIChtX2Rh
dGFTdG9yZSkKLSAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwor
ICAgIGlmIChtX2RhdGFTdG9yZSkgeworICAgICAgICBtX2RhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxE
b3dubG9hZChtX2Rvd25sb2FkSUQpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKSB7CisgICAgICAgICAg
ICBtX3Jlc3VtZURhdGEgPSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOworICAgICAgICAgICAgbV9j
bGllbnQtPmRpZENhbmNlbCgqdGhpcyk7CisgICAgICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAu
ZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBE
b3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKQEAgLTE2MSwxNCArMTczLDYgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpkaWRGaW5pc2goKQogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZp
bmlzaGVkKCp0aGlzKTsKIH0KIAotc3RhdGljIFJlZlB0cjxBUEk6OkRhdGE+IGNyZWF0ZURhdGEo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIGlmIChkYXRhLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJl
c3VtZURhdGEpCiB7CiAgICAgbV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsK
QEAgLTE3OSwxNSArMTgzLDUgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGYWlsKGNvbnN0IFJl
c291cgogICAgIG1fZG93bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKIH0K
IAotdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQotewotICAgIG1fcmVzdW1lRGF0YSA9IGNyZWF0ZURhdGEocmVzdW1lRGF0
YSk7Ci0KLSAgICBtX2NsaWVudC0+ZGlkQ2FuY2VsKCp0aGlzKTsKLQotICAgIC8vIFRoaXMgY2Fu
IGNhdXNlIHRoZSBEb3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxldGVkLgotICAgIG1fZG93
bmxvYWRQcm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKCp0aGlzKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuaAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDcgKzExNiw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25z
dCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRGYWls
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgcmVzdW1lRGF0YSk7CiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVkaXJlY3RSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUsIEFsbG93T3Zl
cndyaXRlKT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjgy
MTcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEsNSArMzEsNCBAQCBtZXNzYWdlcyAtPiBE
b3dubG9hZFByb3h5IHsKICAgICBEaWRDcmVhdGVEZXN0aW5hdGlvbihTdHJpbmcgcGF0aCkKICAg
ICBEaWRGaW5pc2goKQogICAgIERpZEZhaWwoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwg
SVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEpCi0gICAgRGlkQ2FuY2VsKElQQzo6RGF0YVJl
ZmVyZW5jZSByZXN1bWVEYXRhKQogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MjE3KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMTAtMDggIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2Ugc2VuZFdpdGhB
c3luY1JlcGx5IGZvciBOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQyMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbToKKyAgICAgICAgKC1bV2FpdFVudGlsRG93bmxvYWRD
YW5jZWxlZERlbGVnYXRlIF9kb3dubG9hZDpkaWRGYWlsV2l0aEVycm9yOl0pOgorICAgICAgICAo
LVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgX2Rvd25sb2FkOmRpZEZhaWxXaXRoRXJyb3I6
XSk6CisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFp
bF0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgc3RvcFdhaXRpbmdG
b3JEaWRGYWlsXSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptb25pdG9yRGVsZWdhdGUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6d2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11
bHRpcGxpZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICgtW1dhaXRVbnRpbERvd25sb2Fk
Q2FuY2VsZWREZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6IERl
bGV0ZWQuCisKIDIwMjAtMTAtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjY3NzYzKTogWyBpT1Mgd2syIF0gaHR0
cC90ZXN0cy9pbi1hcHAtYnJvd3Nlci1wcml2YWN5L25vbi1hcHAtYm91bmQtZG9tYWluLWRvZXMt
bm90LWdldC1hcHAtYm91bmQtc2Vzc2lvbi5odG1sIGlzIGEgY29uc3RhbnQgZmFpbHVyZQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2Fk
Lm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0Rvd25sb2FkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NjksOCArNzY5LDEwIEBAIC0g
KHZvaWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9XS0Rvd25sb2FkICoKICAgICBbZG93bmxvYWQub3Jp
Z2luYXRpbmdXZWJWaWV3IF9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlXTsKIH0K
IAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKKy0g
KHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6
KE5TRXJyb3IgKillcnJvcgogeworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sIE5T
VVJMRXJyb3JEb21haW4pOworICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBOU1VSTEVycm9yQ2Fu
Y2VsbGVkKTsKICAgICBpc0RvbmUgPSB0cnVlOwogfQogCkBAIC03OTgsMjIgKzgwMCw0MCBAQCBU
RVNUKF9XS0Rvd25sb2FkLCBDcmFzaEFmdGVyRG93bmxvYWREaWRGCiB9CiAKIHN0YXRpYyBib29s
IHJlY2VpdmVkRGF0YTsKLXN0YXRpYyBib29sIGRpZENhbmNlbDsKIHN0YXRpYyBSZXRhaW5QdHI8
TlNTdHJpbmc+IGRlc3RpbmF0aW9uOwogCiBAaW50ZXJmYWNlIERvd25sb2FkTW9uaXRvclRlc3RE
ZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfV0tEb3dubG9hZERlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9y
RGlkRmFpbDsKKy0gKHZvaWQpc3RvcFdhaXRpbmdGb3JEaWRGYWlsOwogQGVuZAogCi1AaW1wbGVt
ZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gRG93
bmxvYWRNb25pdG9yVGVzdERlbGVnYXRlIHsKKyAgICBib29sIGRpZEZhaWw7Cit9CiAKIC0gKHZv
aWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKIHsKICAgICBkaWRE
b3dubG9hZFN0YXJ0ID0gdHJ1ZTsKIH0KIAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9X
S0Rvd25sb2FkICopZG93bmxvYWQKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRv
d25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIEVYUEVDVF9X
S19TVFJFUShlcnJvci5kb21haW4sIE5TVVJMRXJyb3JEb21haW4pOworICAgIEVYUEVDVF9FUShl
cnJvci5jb2RlLCBOU1VSTEVycm9yQ2FuY2VsbGVkKTsKKyAgICBkaWRGYWlsID0gdHJ1ZTsKK30K
KworLSAodm9pZCl3YWl0Rm9yRGlkRmFpbAoreworICAgIGRpZEZhaWwgPSBmYWxzZTsKKyAgICB3
aGlsZSAoIWRpZEZhaWwpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29w
KCk7Cit9CisKKy0gKHZvaWQpc3RvcFdhaXRpbmdGb3JEaWRGYWlsCiB7Ci0gICAgZGlkQ2FuY2Vs
ID0gdHJ1ZTsKKyAgICBFWFBFQ1RfRkFMU0UoZGlkRmFpbCk7CisgICAgZGlkRmFpbCA9IHRydWU7
CiB9CiAKIC0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURl
c3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGFsbG93T3ZlcndyaXRlLCBOU1N0cmluZyAqZGVz
dGluYXRpb24pKWNvbXBsZXRpb25IYW5kbGVyCkBAIC04NTksMTAgKzg3OSwxNSBAQCB2b2lkIHJl
c3BvbmRTbG93bHkoaW50IHNvY2tldCwgZG91YmxlIGtiCiAgICAgfQogfQogCitzdGF0aWMgUmV0
YWluUHRyPERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZT4gbW9uaXRvckRlbGVnYXRlKCkKK3sK
KyAgICBzdGF0aWMgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTW9uaXRvclRlc3RE
ZWxlZ2F0ZSBuZXddKTsKKyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisKIFJldGFpblB0cjxXS1dl
YlZpZXc+IHdlYlZpZXdXaXRoRG93bmxvYWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHNpemVfdCBt
dWx0aXBsaWVyKQogewogICAgIHN0YXRpYyBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0
TlMoW0Rvd25sb2FkTmF2aWdhdGlvbkRlbGVnYXRlIG5ld10pOwotICAgIHN0YXRpYyBhdXRvIGRv
d25sb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3
XSk7CiAgICAgYXV0byBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24gbmV3XSk7CiAgICAgYXV0byBwcm9jZXNzUG9vbCA9IGFkb3B0
TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOnByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKQEAgLTg3MSw3ICs4OTYsNyBAQCBSZXRhaW5Q
dHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0aERvd25sb2FkCiAgICAgW3dlYlZpZXdDb25maWd1cmF0
aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6W1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXV07
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25m
aWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJv
Y2Vzc1Bvb2wuX2Rvd25sb2FkRGVsZWdhdGUgPSBkb3dubG9hZERlbGVnYXRlLmdldCgpOworICAg
IFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sLl9kb3dubG9hZERlbGVnYXRlID0g
bW9uaXRvckRlbGVnYXRlKCkuZ2V0KCk7CiAgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKQEAgLTg5
Miw4ICs5MTcsNyBAQCB2b2lkIGRvd25sb2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAg
ICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVB
cHBJc0JhY2tncm91bmQ6WUVTXTsKICAgICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJl
dHVybnNUb0ZvcmVncm91bmQ6OlllcykKICAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwotICAgIGRp
ZENhbmNlbCA9IGZhbHNlOwotICAgIFV0aWw6OnJ1bigmZGlkQ2FuY2VsKTsKKyAgICBbbW9uaXRv
ckRlbGVnYXRlKCkgd2FpdEZvckRpZEZhaWxdOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7
CiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJy
b3I6bmlsXTsKIH0KQEAgLTkwOCw4ICs5MzIsNyBAQCBURVNUKF9XS0Rvd25sb2FkLCBESVNBQkxF
RF9Eb3dubG9hZE1vbml0CiB7CiAgICAgX19ibG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87
CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41
ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7Ci0gICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAg
ICAgIFttb25pdG9yRGVsZWdhdGUoKSBzdG9wV2FpdGluZ0ZvckRpZEZhaWxdOwogICAgICAgICB0
aW1lb3V0UmVhY2hlZCA9IFlFUzsKICAgICB9KTsKIApAQCAtOTIzLDggKzk0Niw3IEBAIFRFU1Qo
X1dLRG93bmxvYWQsIERvd25sb2FkTW9uaXRvclJldHVyblQKIHsKICAgICBfX2Jsb2NrIEJPT0wg
dGltZW91dFJlYWNoZWQgPSBOTzsKICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJ
U1BBVENIX1RJTUVfTk9XLCAyLjUgKiBOU0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeewotICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FuY2VsKTsKLSAgICAgICAgZGlk
Q2FuY2VsID0gdHJ1ZTsKKyAgICAgICAgW21vbml0b3JEZWxlZ2F0ZSgpIHN0b3BXYWl0aW5nRm9y
RGlkRmFpbF07CiAgICAgICAgIHRpbWVvdXRSZWFjaGVkID0gWUVTOwogICAgIH0pOwogICAgIGRv
d25sb2FkQXRSYXRlKDAuNSwgMTIwLCBBcHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpOwpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZFByb2dyZXNz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG93bmxvYWRQcm9ncmVzcy5tbQkocmV2aXNpb24gMjY4MjE3KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZFByb2dyZXNzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00ODcsNyArNDg3LDcgQEAgVEVTVChEb3dubG9hZFByb2dyZXNzLCBDYW5jZWxEb3dubG9h
ZFdoZQogICAgIFt0ZXN0UnVubmVyLmdldCgpIHN1YnNjcmliZUFuZFdhaXRGb3JQcm9ncmVzc107
CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgcmVjZWl2ZURhdGE6NTBdOwogICAgIFt0ZXN0UnVubmVy
LmdldCgpLnByb2dyZXNzIGNhbmNlbF07Ci0gICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2FpdEZvckRv
d25sb2FkQ2FuY2VsZWRdOworICAgIFt0ZXN0UnVubmVyLmdldCgpIHdhaXRGb3JEb3dubG9hZEZh
aWxlZF07CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2FpdFRvTG9zZVByb2dyZXNzXTsKIAogICAg
IFt0ZXN0UnVubmVyLmdldCgpIHRlYXJEb3duXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410940</attachid>
            <date>2020-10-09 09:04:49 -0700</date>
            <delta_ts>2020-10-09 09:08:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217420-20201009090448.patch</filename>
            <type>text/plain</type>
            <size>30387</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgyNDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTA4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRo
QXN5bmNSZXBseSBmb3IgTmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIFRoaXMgcGF2ZXMgdGhlIHdheSBm
b3IgYSBnb29kIGRvd25sb2FkIEFQSSB0aGF0IGhhcyBhIGNvbXBsZXRpb24gaGFuZGxlciB3aGVu
IHlvdSBjYWxsIGNhbmNlbCB0aGF0IGdpdmVzIHlvdSB0aGUgcmVzdW1lIGRhdGEgaWYgaXQgY2Fu
LgorICAgICAgICBDdXJyZW50bHkgeW91IGhhdmUgdG8gY2FsbCBjYW5jZWwgb24gdGhlIGRvd25s
b2FkLCB3YWl0IGZvciBkaWRDYW5jZWwgb24gdGhlIGRlbGVnYXRlLCB0aGVuIGdldCB0aGUgcmVz
dW1lIGRhdGEgZnJvbSB0aGUgZG93bmxvYWQgYWdhaW4uCisgICAgICAgIFRoaXMgaGFzIHRoZSBz
aWRlIGVmZmVjdCBvZiBEb3dubG9hZE1vbml0b3IgY2FuY2VsbGF0aW9ucyBjYWxsaW5nIGRpZEZh
aWxXaXRoRXJyb3IgaW5zdGVhZCBvZiBkaWRDYW5jZWwsIHdoaWNoIG1ha2VzIHNlbnNlIGFuZCBz
aG91bGRuJ3QKKyAgICAgICAgY2F1c2UgYW55IHByb2JsZW1zIGluIHByYWN0aWNlLiAgU2FmYXJp
IGlzIHRoZSBvbmx5IEFQSSBjbGllbnQgdGhhdCB1c2VzIHRoaXMsIGFuZCBpdCBiZWhhdmVzIHNp
bWlsYXJseSBpbiBkaWRDYW5jZWwgYW5kIGRpZEZhaWxXaXRoRXJyb3IuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZENhbmNlbCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y2FuY2VsRG93bmxvYWQpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWRNb25pdG9yOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGVuZGlu
Z0Rvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Q
ZW5kaW5nRG93bmxvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29j
b2EvV0tEb3dubG9hZFByb2dyZXNzLm1tOgorICAgICAgICAoLVtXS0Rvd25sb2FkUHJvZ3Jlc3Mg
cGVyZm9ybUNhbmNlbF0pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNhbmNlbERvd25sb2FkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwZW5kaW5nRG93bmxvYWRD
YW5jZWxlZCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94
eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGlkQ2FuY2VsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW46
CisKIDIwMjAtMTAtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjY3NzYzKTogU0hPVUxEIE5FVkVSIEJFIFJFQUNI
RUQgaW4gV2ViS2l0Ojpjb250ZW50UnVsZUxpc3RzRnJvbUlkZW50aWZpZXIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lv
biAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3MSw5ICsyMDcxLDkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cmVzdW1lRG93bmxvYWQoUEFMOgogICAgIGRvd25sb2FkTWFuYWdlcigpLnJlc3VtZURv
d25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRJRCwgcmVzdW1lRGF0YSwgcGF0aCwgV1RGTW92ZShz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNhbmNl
bERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmNh
bmNlbERvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBkb3dubG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKKyAgICBkb3du
bG9hZE1hbmFnZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTIwODgsMTEgKzIwODgs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb250aW51ZVdpbGxTZW5kUmVxCiAgICAgZG93bmxv
YWRNYW5hZ2VyKCkuY29udGludWVXaWxsU2VuZFJlcXVlc3QoZG93bmxvYWRJRCwgV1RGTW92ZShy
ZXF1ZXN0KSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OnBlbmRpbmdEb3dubG9hZENhbmNl
bGVkKERvd25sb2FkSUQgZG93bmxvYWRJRCkKLXsKLSAgICBkb3dubG9hZFByb3h5Q29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwoeyB9KSwgZG93bmxv
YWRJRC50b1VJbnQ2NCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKE5ldHdvcmtEYXRhVGFzayYgbmV0d29ya0RhdGFUYXNrLCBSZXNwb25z
ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQogewogICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSBuZXR3b3Jr
RGF0YVRhc2sucGVuZGluZ0Rvd25sb2FkSUQoKS50b1VJbnQ2NCgpOwpAQCAtMjEwNSwxMSArMjEw
MCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5nRG93bmxvYWQKIAogICAgIGRv
d25sb2FkUHJveHlDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6RGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2Vz
dGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBuZXR3b3JrRGF0YVRh
c2sgPSBtYWtlUmVmKG5ldHdvcmtEYXRhVGFzayldIChTdHJpbmcmJiBkZXN0aW5hdGlvbiwgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgQWxsb3dPdmVy
d3JpdGUgYWxsb3dPdmVyd3JpdGUpIG11dGFibGUgewogICAgICAgICBhdXRvIGRvd25sb2FkSUQg
PSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7Ci0gICAgICAgIGlmIChkZXN0
aW5hdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlcigpLmNhbmNl
bERvd25sb2FkKGRvd25sb2FkSUQpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9s
aWN5QWN0aW9uOjpJZ25vcmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
ICAgIGlmIChkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpJZ25vcmUpOwogICAgICAgICBuZXR3b3JrRGF0YVRh
c2stPnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGRlc3RpbmF0aW9uLCBXVEZNb3ZlKHNhbmRi
b3hFeHRlbnNpb25IYW5kbGUpLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVz
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpEb3dubG9hZCk7CiAg
ICAgICAgIGlmIChuZXR3b3JrRGF0YVRhc2stPnN0YXRlKCkgPT0gTmV0d29ya0RhdGFUYXNrOjpT
dGF0ZTo6Q2FuY2VsaW5nIHx8IG5ldHdvcmtEYXRhVGFzay0+c3RhdGUoKSA9PSBOZXR3b3JrRGF0
YVRhc2s6OlN0YXRlOjpDb21wbGV0ZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
Myw3ICs0MDMsNiBAQCBwcml2YXRlOgogICAgIElQQzo6Q29ubmVjdGlvbiogZG93bmxvYWRQcm94
eUNvbm5lY3Rpb24oKSBvdmVycmlkZTsKICAgICBJUEM6OkNvbm5lY3Rpb24qIHBhcmVudFByb2Nl
c3NDb25uZWN0aW9uRm9yRG93bmxvYWRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gcGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKTsgfQogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0
aGVudGljYXRpb25NYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZW5kaW5nRG93bmxvYWRD
YW5jZWxlZChEb3dubG9hZElEKSBvdmVycmlkZTsKIAogICAgIC8vIE1lc3NhZ2UgSGFuZGxlcnMK
ICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CkBA
IC00MjQsNyArNDIzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZG93bmxvYWRSZXF1ZXN0KFBB
TDo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4sIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpOwogICAgIHZvaWQgcmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQs
IERvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7Ci0gICAgdm9pZCBjYW5j
ZWxEb3dubG9hZChEb3dubG9hZElEKTsKKyAgICB2b2lkIGNhbmNlbERvd25sb2FkKERvd25sb2Fk
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYp
OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcHVibGlzaERvd25sb2FkUHJvZ3Jlc3Mo
RG93bmxvYWRJRCwgY29uc3QgVVJMJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVj
ZWl2ZQogCiAgICAgRG93bmxvYWRSZXF1ZXN0KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
S2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1
ZXN0LCBlbnVtOmJvb2wgT3B0aW9uYWw8V2ViS2l0OjpOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
KQogICAgIFJlc3VtZURvd25sb2FkKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViS2l0OjpE
b3dubG9hZElEIGRvd25sb2FkSUQsIElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhLCBTdHJp
bmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSkKLSAgICBDYW5jZWxEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJ
RCkKKyAgICBDYW5jZWxEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCkgLT4g
KElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhKSBBc3luYwogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9h
ZElELCBVUkwgdXJsLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDIwICs4NiwzMSBAQCBEb3dubG9hZDo6fkRvd25sb2FkKCkKICAgICBt
X2Rvd25sb2FkTWFuYWdlci5kaWREZXN0cm95RG93bmxvYWQoKTsKIH0KIAotdm9pZCBEb3dubG9h
ZDo6Y2FuY2VsKCkKK3ZvaWQgRG93bmxvYWQ6OmNhbmNlbChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBJZ25vcmVE
aWRGYWlsQ2FsbGJhY2sgaWdub3JlRGlkRmFpbENhbGxiYWNrKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChtX3dhc0NhbmNlbGVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV93YXNDYW5jZWxlZCA9IHRydWU7CisgICAgLy8gVVJMU2Vzc2lvbjp0YXNr
OmRpZENvbXBsZXRlV2l0aEVycm9yOiBpcyBzdGlsbCBjYWxsZWQgYWZ0ZXIgY2FuY2VsQnlQcm9k
dWNpbmdSZXN1bWVEYXRhJ3MgY29tcGxldGlvbkhhbmRsZXIuCisgICAgLy8gSWYgdGhpcyBjYW5j
ZWwgcmVxdWVzdCBjYW1lIGZyb20gdGhlIEFQSSwgd2UgZG8gbm90IHdhbnQgdG8gc2VuZCBEb3du
bG9hZFByb3h5OjpEaWRGYWlsIGJlY2F1c2UgdGhlCisgICAgLy8gY29tcGxldGlvbkhhbmRsZXIg
d2lsbCBpbmZvcm0gdGhlIEFQSSB0aGF0IHRoZSBjYW5jZWxsYXRpb24gc3VjY2VlZGVkLgorICAg
IG1faWdub3JlRGlkRmFpbENhbGxiYWNrID0gaWdub3JlRGlkRmFpbENhbGxiYWNrOworCisgICAg
YXV0byBjb21wbGV0aW9uSGFuZGxlcldyYXBwZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpIG11dGFibGUgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bWVEYXRhKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cyB8fCBtX2lnbm9yZURpZEZhaWxDYWxsYmFjayA9PSBJZ25vcmVEaWRGYWlsQ2FsbGJhY2s6Ok5v
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJk
aWRDYW5jZWw6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS50b1VJbnQ2NCgpKTsK
KyAgICAgICAgaWYgKGF1dG8gZXh0ZW5zaW9uID0gc3RkOjpleGNoYW5nZShtX3NhbmRib3hFeHRl
bnNpb24sIG51bGxwdHIpKQorICAgICAgICAgICAgZXh0ZW5zaW9uLT5yZXZva2UoKTsKKyAgICAg
ICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CisgICAgfTsKIAog
ICAgIGlmIChtX2Rvd25sb2FkKSB7CiAgICAgICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAg
ICAgICBkaWRDYW5jZWwoeyB9KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXJXcmFwcGVyKHsg
fSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9h
ZCgpOworICAgIHBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcldyYXBwZXIpKTsKIH0KIAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1LDYgKzE1Niw5
IEBAIHZvaWQgRG93bmxvYWQ6OmRpZEZpbmlzaCgpCiAKIHZvaWQgRG93bmxvYWQ6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVz
dW1lRGF0YSkKIHsKKyAgICBpZiAobV9pZ25vcmVEaWRGYWlsQ2FsbGJhY2sgPT0gSWdub3JlRGlk
RmFpbENhbGxiYWNrOjpZZXMpCisgICAgICAgIHJldHVybjsKKwogICAgIFJFTEVBU0VfTE9HX0lG
X0FMTE9XRUQoImRpZEZhaWw6IChpZCA9ICUiIFBSSXU2NCAiLCBpc1RpbWVvdXQgPSAlZCwgaXND
YW5jZWxsYXRpb24gPSAlZCwgZXJyQ29kZSA9ICVkKSIsCiAgICAgICAgIGRvd25sb2FkSUQoKS50
b1VJbnQ2NCgpLCBlcnJvci5pc1RpbWVvdXQoKSwgZXJyb3IuaXNDYW5jZWxsYXRpb24oKSwgZXJy
b3IuZXJyb3JDb2RlKCkpOwogCkBAIC0xNTcsMTkgKzE3MSw2IEBAIHZvaWQgRG93bmxvYWQ6OmRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnIKICAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZp
bmlzaGVkKCp0aGlzKTsKIH0KIAotdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKLXsKLSAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJkaWRDYW5jZWw6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS50b1VJbnQ2NCgp
KTsKLQotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbChyZXN1bWVE
YXRhKSk7Ci0KLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7Ci0gICAgICAgIG1fc2FuZGJv
eEV4dGVuc2lvbi0+cmV2b2tlKCk7Ci0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxw
dHI7Ci0gICAgfQotICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OwotfQotCiBJUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkUHJveHlD
b25uZWN0aW9uKCk7CkBAIC0xOTAsOCArMTkxLDkgQEAgYm9vbCBEb3dubG9hZDo6aXNBbHdheXNP
bkxvZ2dpbmdBbGxvd2VkKAogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBEb3dubG9h
ZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNh
bmNlbE5ldHdvcmtMb2FkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKIH0KIAogdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EZXN0cm95RG93bmxvYWQoKQpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5oCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw4IEBAIHB1Ymxp
YzoKICAgICB+RG93bmxvYWQoKTsKIAogICAgIHZvaWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmJik7Ci0gICAgdm9pZCBjYW5jZWwoKTsKKyAgICBlbnVtIGNsYXNzIElnbm9yZURp
ZEZhaWxDYWxsYmFjayA6IGJvb2wgeyBObywgWWVzIH07CisgICAgdm9pZCBjYW5jZWwoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4mJiwgSWdub3JlRGlk
RmFpbENhbGxiYWNrKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHB1Ymxpc2hQcm9n
cmVzcyhjb25zdCBVUkwmLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7CiAjZW5kaWYKQEAg
LTkxLDEwICs5Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IGJ5dGVzV3JpdHRlbiwgdWludDY0X3QgdG90YWxCeXRlc1dyaXR0ZW4sIHVpbnQ2NF90IHRvdGFs
Qnl0ZXNFeHBlY3RlZFRvV3JpdGUpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBk
aWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpIGNvbnN0OwotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0Nh
bmNlbGVkOyB9CiAKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkgeyBt
X21vbml0b3IuYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKTsgfQogICAgIHZvaWQgYXBw
bGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgeyBtX21vbml0b3IuYXBwbGljYXRpb25XaWxs
RW50ZXJGb3JlZ3JvdW5kKCk7IH0KQEAgLTEwNyw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIElQ
Qzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
ICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CisgICAgdm9pZCBwbGF0
Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95RG93bmxvYWQoKTsK
IAogICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7CkBAIC0xMjQsMTAgKzEy
MywxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKLSAgICBib29sIG1fd2FzQ2FuY2VsZWQgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9oYXNSZWNlaXZlZERhdGEgeyBmYWxzZSB9OworICAgIElnbm9y
ZURpZEZhaWxDYWxsYmFjayBtX2lnbm9yZURpZEZhaWxDYWxsYmFjayB7IElnbm9yZURpZEZhaWxD
YWxsYmFjazo6Tm8gfTsKICAgICBEb3dubG9hZE1vbml0b3IgbV9tb25pdG9yIHsgKnRoaXMgfTsK
ICAgICB1bnNpZ25lZCBtX3Rlc3RTcGVlZE11bHRpcGxpZXIgeyAxIH07CisgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKT4gbV9jYW5jZWxDb21wbGV0
aW9uSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
MTUgKzEwOSwxOSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6cmVzdW1lRG93bmxvYWQoUEFMCiAj
ZW5kaWYKIH0KIAotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNhbmNlbERvd25sb2FkKERvd25sb2Fk
SUQgZG93bmxvYWRJRCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZChEb3du
bG9hZElEIGRvd25sb2FkSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKGF1dG8qIGRvd25s
b2FkID0gbV9kb3dubG9hZHMuZ2V0KGRvd25sb2FkSUQpKSB7CiAgICAgICAgIEFTU0VSVCghbV9w
ZW5kaW5nRG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKLSAgICAgICAgZG93bmxvYWQt
PmNhbmNlbCgpOworICAgICAgICBkb3dubG9hZC0+Y2FuY2VsKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBEb3dubG9hZDo6SWdub3JlRGlkRmFpbENhbGxiYWNrOjpZZXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVuZGluZ0Rv
d25sb2Fkcy50YWtlKGRvd25sb2FkSUQpKQotICAgICAgICBwZW5kaW5nRG93bmxvYWQtPmNhbmNl
bCgpOworICAgIGlmIChhdXRvIHBlbmRpbmdEb3dubG9hZCA9IG1fcGVuZGluZ0Rvd25sb2Fkcy50
YWtlKGRvd25sb2FkSUQpKSB7CisgICAgICAgIHBlbmRpbmdEb3dubG9hZC0+Y2FuY2VsKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAkocmV2aXNpb24gMjY4MjE3KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIElQQzo6Q29ubmVjdGlvbiogZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKSA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbkZvckRv
d25sb2FkcygpID0gMDsKICAgICAgICAgdmlydHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRv
d25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHBlbmRpbmdEb3dubG9hZENhbmNlbGVkKERvd25sb2FkSUQpID0gMDsKICAgICAgICAgdmlydHVh
bCBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0ID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZigpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRlcmVmKCkgY29uc3QgPSAwOwpAQCAtODksNyArODgsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHJlc3VtZURvd25sb2FkKFBBTDo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiYpOwogCi0gICAgdm9pZCBjYW5jZWxEb3dubG9hZChEb3dubG9h
ZElEKTsKKyAgICB2b2lkIGNhbmNlbERvd25sb2FkKERvd25sb2FkSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+JiYpOwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZvaWQgcHVibGlzaERvd25sb2FkUHJvZ3Jlc3MoRG93bmxvYWRJRCwgY29uc3Qg
VVJMJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1vbml0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
TW9uaXRvci5jcHAJKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTW9uaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw3ICsxMTgsNyBAQCB2b2lkIERvd25sb2FkTW9uaXRvcjo6dGltZXJGaXJlZCgpCiAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbnRlcnZhbCA8IFdURl9BUlJBWV9MRU5HVEgodGhyb3VnaHB1dEludGVy
dmFscykpOwogICAgIGlmIChtZWFzdXJlZFRocm91Z2hwdXRSYXRlKCkgPCB0aHJvdWdocHV0SW50
ZXJ2YWxzW21faW50ZXJ2YWxdLmJ5dGVzUGVyU2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoInRpbWVyRmlyZWQ6IGNhbmNlbGxpbmcgZG93bmxvYWQgKGlkID0gJSIgUFJJ
dTY0ICIpIiwgbV9kb3dubG9hZC5kb3dubG9hZElEKCkudG9VSW50NjQoKSk7Ci0gICAgICAgIG1f
ZG93bmxvYWQuY2FuY2VsKCk7CisgICAgICAgIG1fZG93bmxvYWQuY2FuY2VsKFtdKGF1dG8mKSB7
IH0sIERvd25sb2FkOjpJZ25vcmVEaWRGYWlsQ2FsbGJhY2s6Ok5vKTsKICAgICB9IGVsc2UgaWYg
KG1faW50ZXJ2YWwgKyAxIDwgV1RGX0FSUkFZX0xFTkdUSCh0aHJvdWdocHV0SW50ZXJ2YWxzKSkg
ewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ0aW1lckZpcmVkOiBzdWZmaWNpZW50
IHRocm91Z2hwdXQgcmF0ZSAoaWQgPSAlIiBQUkl1NjQgIikiLCBtX2Rvd25sb2FkLmRvd25sb2Fk
SUQoKS50b1VJbnQ2NCgpKTsKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZVVudGls
TmV4dEludGVydmFsKG1faW50ZXJ2YWwrKykgLyB0ZXN0U3BlZWRNdWx0aXBsaWVyKCkpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2Fk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9QZW5kaW5nRG93bmxvYWQuY3BwCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MiwxMSArNzIsMTEgQEAgdm9pZCBQZW5kaW5nRG93bmxvYWQ6OmNvbnRpbnVlV2ls
bFNlbmRSZQogICAgIG1fbmV0d29ya0xvYWQtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdURk1v
dmUobmV3UmVxdWVzdCkpOwogfQogCi12b2lkIFBlbmRpbmdEb3dubG9hZDo6Y2FuY2VsKCkKK3Zv
aWQgUGVuZGluZ0Rvd25sb2FkOjpjYW5jZWwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
bV9uZXR3b3JrTG9hZCk7CiAgICAgbV9uZXR3b3JrTG9hZC0+Y2FuY2VsKCk7Ci0gICAgc2VuZChN
ZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ2FuY2VsKHsgfSkpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9h
ZC5oCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgUGVuZGluZ0Rvd25sb2FkKElQQzo6Q29ubmVjdGlvbiosIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrTG9hZD4mJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmLCBEb3du
bG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7CiAKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKLSAgICB2b2lkIGNhbmNlbCgpOworICAgIHZvaWQg
Y2FuY2VsKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik+
JiYpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwdWJsaXNoUHJvZ3Jlc3MoY29u
c3QgVVJMJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYpOwpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3du
bG9hZENvY29hLm1tCShyZXZpc2lvbiAyNjgyMTcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJXS0Rvd25sb2FkUHJvZ3Jlc3MuaCIKICNpbXBvcnQg
PHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TUHJv
Z3Jlc3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIApAQCAtNzksMTcgKzgwLDEzIEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6
OkRhdGFSZWYKICAgICBbbV9kb3dubG9hZFRhc2sgcmVzdW1lXTsKIH0KICAgICAKLXZvaWQgRG93
bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZv
cm1DYW5jZWxOZXR3b3JrTG9hZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChtX2Rvd25s
b2FkVGFzayk7Ci0KLSAgICAvLyBUaGUgZG93bmxvYWQncyByZXN1bWUgZGF0YSBpcyBhY2Nlc3Nl
ZCBpbiB0aGUgbmV0d29yayBzZXNzaW9uIGRlbGVnYXRlCi0gICAgLy8gbWV0aG9kIC1VUkxTZXNz
aW9uOnRhc2s6ZGlkQ29tcGxldGVXaXRoRXJyb3I6IGluc3RlYWQgb2YgaW5zaWRlIHRoaXMgYmxv
Y2ssCi0gICAgLy8gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIHR3by4gQ2Fs
bGluZyAtY2FuY2VsIGlzIG5vdCBzdWZmaWNpZW50Ci0gICAgLy8gaGVyZSBiZWNhdXNlIENGTmV0
d29yayB3b24ndCBwcm92aWRlIHRoZSByZXN1bWUgZGF0YSB1bmxlc3Mgd2UgYXNrIGZvciBpdC4K
LSAgICBbbV9kb3dubG9hZFRhc2sgY2FuY2VsQnlQcm9kdWNpbmdSZXN1bWVEYXRhOl4oTlNEYXRh
ICpyZXN1bWVEYXRhKSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXN1bWVEYXRhKTsKLSAgICB9
XTsKKyAgICBbbV9kb3dubG9hZFRhc2sgY2FuY2VsQnlQcm9kdWNpbmdSZXN1bWVEYXRhOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KE5TRGF0YSAqcmVzdW1lRGF0YSkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcmVzdW1lRGF0YVJl
ZmVyZW5jZSA9IHJlc3VtZURhdGEgPyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4ocmVzdW1lRGF0YS5ieXRlcyksIHJlc3VtZURhdGEubGVuZ3RoIH0gOiBJ
UEM6OkRhdGFSZWZlcmVuY2UgeyB9OworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bWVE
YXRhUmVmZXJlbmNlKTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgRG93bmxvYWQ6OnBsYXRm
b3JtRGVzdHJveURvd25sb2FkKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL2NvY29hL1dLRG93bmxvYWRQcm9ncmVzcy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9XS0Rvd25sb2FkUHJvZ3Jl
c3MubW0JKHJldmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL2NvY29hL1dLRG93bmxvYWRQcm9ncmVzcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBjb3VudE9mQnl0ZXNSZWNlCiAt
ICh2b2lkKXBlcmZvcm1DYW5jZWwKIHsKICAgICBpZiAobV9kb3dubG9hZCkKLSAgICAgICAgbV9k
b3dubG9hZC0+Y2FuY2VsKCk7CisgICAgICAgIG1fZG93bmxvYWQtPmNhbmNlbChbXShhdXRvJikg
eyB9LCBXZWJLaXQ6OkRvd25sb2FkOjpJZ25vcmVEaWRGYWlsQ2FsbGJhY2s6Ok5vKTsKICAgICBt
X2Rvd25sb2FkID0gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNp
b24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NjksMTEgKzc2OSw3IEBAIC0gKHZv
aWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICAgICAgICAgfQogCiAgICAgICAg
IGF1dG8gcmVzdW1lRGF0YVJlZmVyZW5jZSA9IHJlc3VtZURhdGEgPyBJUEM6OkRhdGFSZWZlcmVu
Y2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdW1lRGF0YS5ieXRlcyksIHJlc3Vt
ZURhdGEubGVuZ3RoIH0gOiBJUEM6OkRhdGFSZWZlcmVuY2UgeyB9OwotCi0gICAgICAgIGlmIChk
b3dubG9hZC0+d2FzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgIGRvd25sb2FkLT5kaWRDYW5jZWwo
cmVzdW1lRGF0YVJlZmVyZW5jZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvd25sb2Fk
LT5kaWRGYWlsKGVycm9yLCByZXN1bWVEYXRhUmVmZXJlbmNlKTsKKyAgICAgICAgZG93bmxvYWQt
PmRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGFSZWZlcmVuY2UpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMCArNjEsMjIgQEAg
RG93bmxvYWRQcm94eTo6RG93bmxvYWRQcm94eShEb3dubG9hZFBybwogCiBEb3dubG9hZFByb3h5
Ojp+RG93bmxvYWRQcm94eSgpID0gZGVmYXVsdDsKIAorc3RhdGljIFJlZlB0cjxBUEk6OkRhdGE+
IGNyZWF0ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIGlmIChk
YXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEFQSTo6
RGF0YTo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Cit9CisKIHZvaWQgRG93bmxv
YWRQcm94eTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAobV9kYXRhU3RvcmUpCi0gICAgICAgIG1fZGF0
YVN0b3JlLT5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
YW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBpZiAobV9kYXRhU3RvcmUpIHsK
KyAgICAgICAgbV9kYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSkgeworICAgICAgICAgICAgbV9yZXN1bWVEYXRhID0gY3JlYXRl
RGF0YShyZXN1bWVEYXRhKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDYW5jZWwoKnRoaXMp
OworICAgICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLmRvd25sb2FkRmluaXNoZWQoKnRoaXMp
OworICAgICAgICB9KTsKKyAgICB9CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0
ZSgpCkBAIC0xNjEsMTQgKzE3Myw2IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkRmluaXNoKCkK
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKLXN0
YXRpYyBSZWZQdHI8QVBJOjpEYXRhPiBjcmVhdGVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSkKLXsKLSAgICBpZiAoZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
Ci19Ci0KIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQogewogICAgIG1fcmVz
dW1lRGF0YSA9IGNyZWF0ZURhdGEocmVzdW1lRGF0YSk7CkBAIC0xNzksMTUgKzE4Myw1IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6ZGlkRmFpbChjb25zdCBSZXNvdXIKICAgICBtX2Rvd25sb2FkUHJv
eHlNYXAuZG93bmxvYWRGaW5pc2hlZCgqdGhpcyk7CiB9CiAKLXZvaWQgRG93bmxvYWRQcm94eTo6
ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKLXsKLSAgICBt
X3Jlc3VtZURhdGEgPSBjcmVhdGVEYXRhKHJlc3VtZURhdGEpOwotCi0gICAgbV9jbGllbnQtPmRp
ZENhbmNlbCgqdGhpcyk7Ci0KLSAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94
eSBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRG
aW5pc2hlZCgqdGhpcyk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmgJKHJl
dmlzaW9uIDI2ODIxNykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICB2
b2lkIGRpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKLSAgICB2b2lk
IGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogICAgIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGlyZWN0UmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7
CiAgICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZywg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlLCBBbGxvd092ZXJ3cml0ZSk+JiYpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjY4MjE3KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDUgKzMxLDQgQEAgbWVzc2FnZXMgLT4gRG93bmxvYWRQcm94eSB7CiAgICAgRGlk
Q3JlYXRlRGVzdGluYXRpb24oU3RyaW5nIHBhdGgpCiAgICAgRGlkRmluaXNoKCkKICAgICBEaWRG
YWlsKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSByZXN1
bWVEYXRhKQotICAgIERpZENhbmNlbChJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdW1lRGF0YSkKIH0K
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODIxNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIyIEBACisyMDIwLTEwLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNlbmRXaXRoQXN5bmNSZXBseSBmb3IgTmV0d29ya1By
b2Nlc3M6OkNhbmNlbERvd25sb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTc0MjAKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5t
bToKKyAgICAgICAgKC1bV2FpdFVudGlsRG93bmxvYWRDYW5jZWxlZERlbGVnYXRlIF9kb3dubG9h
ZDpkaWRGYWlsV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtEb3dubG9hZE1vbml0b3JUZXN0RGVs
ZWdhdGUgX2Rvd25sb2FkOmRpZEZhaWxXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW0Rvd25sb2Fk
TW9uaXRvclRlc3REZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFpbF0pOgorICAgICAgICAoLVtEb3dubG9h
ZE1vbml0b3JUZXN0RGVsZWdhdGUgc3RvcFdhaXRpbmdGb3JEaWRGYWlsXSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjptb25pdG9yRGVsZWdhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
d2ViVmlld1dpdGhEb3dubG9hZE1vbml0b3JTcGVlZE11bHRpcGxpZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6ZG93bmxvYWRBdFJhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisgICAgICAgICgtW1dhaXRVbnRpbERvd25sb2FkQ2FuY2VsZWREZWxlZ2F0ZSBfZG93bmxv
YWREaWRDYW5jZWw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW0Rvd25sb2FkTW9uaXRvclRlc3RE
ZWxlZ2F0ZSBfZG93bmxvYWREaWRDYW5jZWw6XSk6IERlbGV0ZWQuCisKIDIwMjAtMTAtMDggIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMjY3NzYzKTogWyBpT1Mgd2syIF0gaHR0cC90ZXN0cy9pbi1hcHAtYnJvd3Nlci1w
cml2YWN5L25vbi1hcHAtYm91bmQtZG9tYWluLWRvZXMtbm90LWdldC1hcHAtYm91bmQtc2Vzc2lv
bi5odG1sIGlzIGEgY29uc3RhbnQgZmFpbHVyZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCShyZXZpc2lvbiAyNjgyMTcpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rvd25sb2FkLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NjksOCArNzY5LDEwIEBAIC0gKHZvaWQpX2Rvd25sb2FkRGlkU3RhcnQ6
KF9XS0Rvd25sb2FkICoKICAgICBbZG93bmxvYWQub3JpZ2luYXRpbmdXZWJWaWV3IF9raWxsV2Vi
Q29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlXTsKIH0KIAotLSAodm9pZClfZG93bmxvYWREaWRD
YW5jZWw6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKKy0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3du
bG9hZCAqKWRvd25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogeworICAg
IEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sIE5TVVJMRXJyb3JEb21haW4pOworICAgIEVY
UEVDVF9FUShlcnJvci5jb2RlLCBOU1VSTEVycm9yQ2FuY2VsbGVkKTsKICAgICBpc0RvbmUgPSB0
cnVlOwogfQogCkBAIC03OTgsMjIgKzgwMCw0MCBAQCBURVNUKF9XS0Rvd25sb2FkLCBDcmFzaEFm
dGVyRG93bmxvYWREaWRGCiB9CiAKIHN0YXRpYyBib29sIHJlY2VpdmVkRGF0YTsKLXN0YXRpYyBi
b29sIGRpZENhbmNlbDsKIHN0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGRlc3RpbmF0aW9uOwog
CiBAaW50ZXJmYWNlIERvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfV0tE
b3dubG9hZERlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9yRGlkRmFpbDsKKy0gKHZvaWQpc3RvcFdh
aXRpbmdGb3JEaWRGYWlsOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gRG93bmxvYWRNb25pdG9y
VGVzdERlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gRG93bmxvYWRNb25pdG9yVGVzdERlbGVnYXRl
IHsKKyAgICBib29sIGRpZEZhaWw7Cit9CiAKIC0gKHZvaWQpX2Rvd25sb2FkRGlkU3RhcnQ6KF9X
S0Rvd25sb2FkICopZG93bmxvYWQKIHsKICAgICBkaWREb3dubG9hZFN0YXJ0ID0gdHJ1ZTsKIH0K
IAotLSAodm9pZClfZG93bmxvYWREaWRDYW5jZWw6KF9XS0Rvd25sb2FkICopZG93bmxvYWQKKy0g
KHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZEZhaWxXaXRoRXJyb3I6
KE5TRXJyb3IgKillcnJvcgoreworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sIE5T
VVJMRXJyb3JEb21haW4pOworICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBOU1VSTEVycm9yQ2Fu
Y2VsbGVkKTsKKyAgICBkaWRGYWlsID0gdHJ1ZTsKK30KKworLSAodm9pZCl3YWl0Rm9yRGlkRmFp
bAoreworICAgIGRpZEZhaWwgPSBmYWxzZTsKKyAgICB3aGlsZSAoIWRpZEZhaWwpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7Cit9CisKKy0gKHZvaWQpc3RvcFdh
aXRpbmdGb3JEaWRGYWlsCiB7Ci0gICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICBFWFBFQ1RfRkFM
U0UoZGlkRmFpbCk7CisgICAgZGlkRmFpbCA9IHRydWU7CiB9CiAKIC0gKHZvaWQpX2Rvd25sb2Fk
OihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZp
bGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShC
T09MIGFsbG93T3ZlcndyaXRlLCBOU1N0cmluZyAqZGVzdGluYXRpb24pKWNvbXBsZXRpb25IYW5k
bGVyCkBAIC04NTksMTAgKzg3OSwxNSBAQCB2b2lkIHJlc3BvbmRTbG93bHkoaW50IHNvY2tldCwg
ZG91YmxlIGtiCiAgICAgfQogfQogCitzdGF0aWMgUmV0YWluUHRyPERvd25sb2FkTW9uaXRvclRl
c3REZWxlZ2F0ZT4gbW9uaXRvckRlbGVnYXRlKCkKK3sKKyAgICBzdGF0aWMgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTW9uaXRvclRlc3REZWxlZ2F0ZSBuZXddKTsKKyAgICByZXR1
cm4gZGVsZWdhdGU7Cit9CisKIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXdXaXRoRG93bmxv
YWRNb25pdG9yU3BlZWRNdWx0aXBsaWVyKHNpemVfdCBtdWx0aXBsaWVyKQogewogICAgIHN0YXRp
YyBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW0Rvd25sb2FkTmF2aWdhdGlvbkRl
bGVnYXRlIG5ld10pOwotICAgIHN0YXRpYyBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBhZG9wdE5T
KFtEb3dubG9hZE1vbml0b3JUZXN0RGVsZWdhdGUgbmV3XSk7CiAgICAgYXV0byBwcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gbmV3
XSk7CiAgICAgYXV0byBwcm9jZXNzUG9vbCA9IGFkb3B0TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5nZXQoKV0p
OwogICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1
cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxl
YXNlXTsKQEAgLTg3MSw3ICs4OTYsNyBAQCBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3V2l0
aERvd25sb2FkCiAgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6
W1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFT
dG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXV07CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAg
W3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07
Ci0gICAgW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ucHJvY2Vzc1Bvb2wuX2Rvd25sb2FkRGVsZWdh
dGUgPSBkb3dubG9hZERlbGVnYXRlLmdldCgpOworICAgIFt3ZWJWaWV3IGNvbmZpZ3VyYXRpb25d
LnByb2Nlc3NQb29sLl9kb3dubG9hZERlbGVnYXRlID0gbW9uaXRvckRlbGVnYXRlKCkuZ2V0KCk7
CiAgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKQEAgLTg5Miw4ICs5MTcsNyBAQCB2b2lkIGRvd25s
b2FkQXRSYXRlKGRvdWJsZSBkZXNpcmVkS2JwcywgCiAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRoZXNpemVBcHBJc0JhY2tncm91bmQ6WUVTXTsKICAg
ICBpZiAocmV0dXJuVG9Gb3JlZ3JvdW5kID09IEFwcFJldHVybnNUb0ZvcmVncm91bmQ6OlllcykK
ICAgICAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNpdGVEYXRhU3RvcmUgX3N5bnRo
ZXNpemVBcHBJc0JhY2tncm91bmQ6Tk9dOwotICAgIGRpZENhbmNlbCA9IGZhbHNlOwotICAgIFV0
aWw6OnJ1bigmZGlkQ2FuY2VsKTsKKyAgICBbbW9uaXRvckRlbGVnYXRlKCkgd2FpdEZvckRpZEZh
aWxdOwogICAgIHRlcm1pbmF0ZVNlcnZlciA9IHRydWU7CiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0
aW5hdGlvbi5nZXQoKSBpc0RpcmVjdG9yeTpOT10gZXJyb3I6bmlsXTsKIH0KQEAgLTkwOCw4ICs5
MzIsNyBAQCBURVNUKF9XS0Rvd25sb2FkLCBESVNBQkxFRF9Eb3dubG9hZE1vbml0CiB7CiAgICAg
X19ibG9jayBCT09MIHRpbWVvdXRSZWFjaGVkID0gTk87CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlz
cGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMi41ICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGRpZENhbmNlbCk7
Ci0gICAgICAgIGRpZENhbmNlbCA9IHRydWU7CisgICAgICAgIFttb25pdG9yRGVsZWdhdGUoKSBz
dG9wV2FpdGluZ0ZvckRpZEZhaWxdOwogICAgICAgICB0aW1lb3V0UmVhY2hlZCA9IFlFUzsKICAg
ICB9KTsKIApAQCAtOTIzLDggKzk0Niw3IEBAIFRFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkTW9u
aXRvclJldHVyblQKIHsKICAgICBfX2Jsb2NrIEJPT0wgdGltZW91dFJlYWNoZWQgPSBOTzsKICAg
ICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAyLjUgKiBO
U0VDX1BFUl9TRUMpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBFWFBF
Q1RfRkFMU0UoZGlkQ2FuY2VsKTsKLSAgICAgICAgZGlkQ2FuY2VsID0gdHJ1ZTsKKyAgICAgICAg
W21vbml0b3JEZWxlZ2F0ZSgpIHN0b3BXYWl0aW5nRm9yRGlkRmFpbF07CiAgICAgICAgIHRpbWVv
dXRSZWFjaGVkID0gWUVTOwogICAgIH0pOwogICAgIGRvd25sb2FkQXRSYXRlKDAuNSwgMTIwLCBB
cHBSZXR1cm5zVG9Gb3JlZ3JvdW5kOjpZZXMpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb3dubG9hZFByb2dyZXNzLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG93bmxvYWRQcm9ncmVzcy5tbQkocmV2
aXNpb24gMjY4MjE3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3dubG9hZFByb2dyZXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgVEVT
VChEb3dubG9hZFByb2dyZXNzLCBDYW5jZWxEb3dubG9hZFdoZQogICAgIFt0ZXN0UnVubmVyLmdl
dCgpIHN1YnNjcmliZUFuZFdhaXRGb3JQcm9ncmVzc107CiAgICAgW3Rlc3RSdW5uZXIuZ2V0KCkg
cmVjZWl2ZURhdGE6NTBdOwogICAgIFt0ZXN0UnVubmVyLmdldCgpLnByb2dyZXNzIGNhbmNlbF07
Ci0gICAgW3Rlc3RSdW5uZXIuZ2V0KCkgd2FpdEZvckRvd25sb2FkQ2FuY2VsZWRdOworICAgIFt0
ZXN0UnVubmVyLmdldCgpIHdhaXRGb3JEb3dubG9hZEZhaWxlZF07CiAgICAgW3Rlc3RSdW5uZXIu
Z2V0KCkgd2FpdFRvTG9zZVByb2dyZXNzXTsKIAogICAgIFt0ZXN0UnVubmVyLmdldCgpIHRlYXJE
b3duXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>