<?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>173730</bug_id>
          
          <creation_ts>2017-06-22 11:55:28 -0700</creation_ts>
          <short_desc>Add SPI to WKURLSchemeTask for redirection</short_desc>
          <delta_ts>2022-05-13 14:57:51 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>173836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>garvankeeley</cc>
    
    <cc>geniusbrother</cc>
    
    <cc>jens</cc>
    
    <cc>zwaugh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321996</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 11:55:28 -0700</bug_when>
    <thetext>Add SPI to WKURLSchemeTask for redirection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322004</commentid>
    <comment_count>1</comment_count>
      <attachid>313649</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 12:19:18 -0700</bug_when>
    <thetext>Created attachment 313649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322006</commentid>
    <comment_count>2</comment_count>
      <attachid>313649</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-06-22 12:26:36 -0700</bug_when>
    <thetext>Comment on attachment 313649
Patch

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

&gt; Source/WebKit2/ChangeLog:17
&gt; +        Right now just responding with an HTTP 301/302/307/308 response code
&gt; +        doesn&apos;t work because there is nothing that synthesizes an NSURLRequest
&gt; +        from the Location header, and that would require using an NSHTTPURLResponse
&gt; +        for non-HTTP responses, which is conceptually wrong.  Also, adding such NSURLResponse
&gt; +        synthesizing to WebURLSchemeTaskProxy::didReceiveResponse like we do in
&gt; +        SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest et al. for HSTS
&gt; +        would not work because we wouldn&apos;t properly do anything with the completion handler
&gt; +        of ResourceLoader::willSendRequest.

I disagree about the conceptual wrongness.

Everything else here lists problems that can be solved with bug fixing in current code, without expanding the API/SPI surface.

&quot;for HSTS would not work because we wouldn&apos;t properly do anything with the completion handler of ResourceLoader::willSendRequest.&quot;
I don&apos;t think there&apos;s actually a technical reason preventing this from working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322007</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-06-22 12:29:40 -0700</bug_when>
    <thetext>
(In reply to Brady Eidson from comment #2)
&gt; I disagree about the conceptual wrongness.

Let me rephrase.

The &quot;conceptual wrongness&quot; is by no means a deal breaker for the approach of making this work within the footprint of the existing API.

Plus, the existing API needs to work *for HTTP responses* if a URLSchemeHandler is being handled by performing an HTTP load in the UI process.

So fixing the bugs makes something we intend to support work, allows the test that relies on redirects to work, and doesn&apos;t expand the API surface.

win-win-win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322011</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 12:37:55 -0700</bug_when>
    <thetext>I assert that there is a technical problem of nothing to do with the completion handler if we synthesize a request from an HTTP response.  We should not do that, as it would cause conceptual problems with future loading plans, such as implementing WebCoreNSURLSession&apos;s receivedRedirect.  If we just fed it a series of responses and synthesized requests and did nothing with the completion handler, it would all be wrong.  I think we are supporting NSHTTPURLResponses, but if they have a redirect status code they should go through this new SPI, *not* through didReceiveResponse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322018</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 12:43:32 -0700</bug_when>
    <thetext>If someone is feeding HTTP responses into WKURLSchemeTask, they will get their 302 responses through their NSURLSessionDataDelegate&apos;s willPerformHTTPRedirection which requires an NSURLRequest in the completion handler, not through didReceiveResponse, which does not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322040</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-06-22 14:03:19 -0700</bug_when>
    <thetext>We had an in-person, pow-wow and came up with a great modification to this approach that Alex will be working on shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322113</commentid>
    <comment_count>7</comment_count>
      <attachid>313669</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 16:29:43 -0700</bug_when>
    <thetext>Created attachment 313669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322140</commentid>
    <comment_count>8</comment_count>
      <attachid>313669</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-06-22 17:30:38 -0700</bug_when>
    <thetext>Comment on attachment 313669
Patch

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

&gt; Source/WebKit2/UIProcess/WebURLSchemeTask.cpp:65
&gt; +    m_request = request;

This is a little weird - Kinda wish we called the property &quot;initialRequest&quot; in API.

Before we upgrade this SPI to API we&apos;ll need to think it through carefully - I&apos;d wager that some code written with .request expects it to never change.

Maybe don&apos;t change m_request but instead add a new property &quot;currentRequest&quot; to keep updated?

&gt; Source/WebKit2/UIProcess/WebURLSchemeTask.cpp:89
&gt; -WebURLSchemeTask::ExceptionType WebURLSchemeTask::didReceiveData(Ref&lt;SharedBuffer&gt; buffer)
&gt; +auto WebURLSchemeTask::didReceiveData(Ref&lt;SharedBuffer&gt; buffer) -&gt; ExceptionType

Are these really necessary? We can use auto return types, but are they *preferred*...?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKURLSchemeTask.mm:54
&gt; -        [NSException raise:NSInternalInconsistencyException format:@&quot;This task has already been stopped&quot;];
&gt; +        [NSException raise:NSInternalInconsistencyException format:@&quot;This task has already been stopped.&quot;];
&gt;          break;
&gt;      case WebKit::WebURLSchemeTask::ExceptionType::CompleteAlreadyCalled:
&gt; -        [NSException raise:NSInternalInconsistencyException format:@&quot;[WKURLSchemeTask taskDidCompleteWithError:] has already been called for this task&quot;];
&gt; +        [NSException raise:NSInternalInconsistencyException format:@&quot;[WKURLSchemeTask taskDidCompleteWithError:] has already been called for this task.&quot;];
&gt;          break;
&gt;      case WebKit::WebURLSchemeTask::ExceptionType::DataAlreadySent:
&gt; -        [NSException raise:NSInternalInconsistencyException format:@&quot;[WKURLSchemeTask taskDidReceiveData:] has already been called for this task&quot;];
&gt; +        [NSException raise:NSInternalInconsistencyException format:@&quot;[WKURLSchemeTask taskDidReceiveData:] has already been called for this task.&quot;];
&gt;          break;
&gt;      case WebKit::WebURLSchemeTask::ExceptionType::NoResponseSent:
&gt; -        [NSException raise:NSInternalInconsistencyException format:@&quot;No response has been sent for this task&quot;];
&gt; +        [NSException raise:NSInternalInconsistencyException format:@&quot;No response has been sent for this task.&quot;];

I personally don&apos;t like the trailing period style.

Analyzing with actual data:

We currently raise 68 Objective-C exceptions in API.
Exactly 3 of those have a period at the end of the message.

I don&apos;t think we should change these - They&apos;re fine without the period.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:263
&gt; +    // FIXME: Add tests that exercise all the invalid state exceptions a WKURLSchemeHandler can raise.

Plz to actually do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322142</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 17:34:11 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #8)
&gt; Before we upgrade this SPI to API we&apos;ll need to think it through carefully -
&gt; I&apos;d wager that some code written with .request expects it to never change.
Definitely.  If you redirect, you have changed the request.  If you adopt the new functions, your code changes functionality.  We should consider adding initialRequest.
&gt; &gt; Source/WebKit2/UIProcess/WebURLSchemeTask.cpp:89
&gt; &gt; -WebURLSchemeTask::ExceptionType WebURLSchemeTask::didReceiveData(Ref&lt;SharedBuffer&gt; buffer)
&gt; &gt; +auto WebURLSchemeTask::didReceiveData(Ref&lt;SharedBuffer&gt; buffer) -&gt; ExceptionType
&gt; 
&gt; Are these really necessary? We can use auto return types, but are they
&gt; *preferred*...?
Trailing return types are in the name scope of the function.  It removes a bunch of unnecessary WebURLSchemeTask::.  I like it here.
&gt; I personally don&apos;t like the trailing period style.
I thought it was cool.  I&apos;ll change it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322145</commentid>
    <comment_count>10</comment_count>
      <attachid>313678</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 17:49:52 -0700</bug_when>
    <thetext>Created attachment 313678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322202</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-06-22 22:57:54 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; (In reply to Brady Eidson from comment #8)
&gt; &gt; Before we upgrade this SPI to API we&apos;ll need to think it through carefully -
&gt; &gt; I&apos;d wager that some code written with .request expects it to never change.
&gt; Definitely.  If you redirect, you have changed the request.  If you adopt
&gt; the new functions, your code changes functionality.  We should consider
&gt; adding initialRequest.

I think if this became API, and we added a non-changing initialRequest, then &quot;request&quot; changing as you redirected would be fine (as pointed out, only users of the new API would notice the change in behavior.)

So I&apos;m no longer held up on this.

The red bots, though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322205</commentid>
    <comment_count>12</comment_count>
      <attachid>313692</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 23:25:28 -0700</bug_when>
    <thetext>Created attachment 313692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322330</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-23 10:26:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/r218750</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322704</commentid>
    <comment_count>14</comment_count>
      <attachid>313692</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-25 10:35:16 -0700</bug_when>
    <thetext>Comment on attachment 313692
Patch

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

&gt; Source/WebKit2/UIProcess/WebURLSchemeTask.cpp:66
&gt; +    m_page-&gt;send(Messages::WebPage::URLSchemeTaskDidPerformRedirection(m_urlSchemeHandler-&gt;identifier(), m_identifier, response, request));

We are not taking advantage of the fact that the arguments are rvalue references here; no WTFMove on response and request. Maybe that’s because tasks can’t do that? If so, then I suggest we consider making the arguments const&amp; instead of &amp;&amp;. Or we could use WTFMove when setting m_request and use m_request here.

&gt; Source/WebKit2/UIProcess/WebURLSchemeTask.h:60
&gt; +    ExceptionType didPerformRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp;);

I don’t understand why these arguments are rvalue references; didReceiveResponse doesn’t do that.

&gt; Source/WebKit2/UIProcess/WebURLSchemeTask.h:62
&gt;      ExceptionType didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;);

The type should be SharedBuffer&amp;, not Ref&lt;SharedBuffer&gt;.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKURLSchemeTask.mm:96
&gt; +    auto result = _urlSchemeTask-&gt;task().didPerformRedirection(response, request);
&gt; +    raiseExceptionIfNecessary(result);

I think this reads better as a one-liner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477988</commentid>
    <comment_count>15</comment_count>
    <who name="Garvan Keeley">garvankeeley</who>
    <bug_when>2018-11-13 07:13:41 -0800</bug_when>
    <thetext>Can I clarify if this is expected behaviour for this bug: on iOS w/ Xcode 10.1, this is not performing a redirection (nothing happens)

func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
     let resp = HTTPURLResponse(url: urlSchemeTask.request.url!, statusCode: 301, httpVersion: &quot;HTTP/1.1&quot;, headerFields: [&quot;Location&quot;: &quot;https://www.google.com&quot;])!
      urlSchemeTask.didReceive(resp)
      urlSchemeTask.didFinish()
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478128</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-11-13 13:44:14 -0800</bug_when>
    <thetext>(In reply to Garvan Keeley from comment #15)
&gt; Can I clarify if this is expected behaviour for this bug: on iOS w/ Xcode
&gt; 10.1, this is not performing a redirection (nothing happens)
&gt; 
&gt; func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
&gt;      let resp = HTTPURLResponse(url: urlSchemeTask.request.url!, statusCode:
&gt; 301, httpVersion: &quot;HTTP/1.1&quot;, headerFields: [&quot;Location&quot;:
&gt; &quot;https://www.google.com&quot;])!
&gt;       urlSchemeTask.didReceive(resp)
&gt;       urlSchemeTask.didFinish()
&gt; }

Based on your comment, I think you expect WebKit to start handling the load once you tell it about the redirect.

But that&apos;s not right. This API is for you - the application UI process - to tell WebKit about loading progress.

So in the above code you&apos;re telling WebKit:
- &quot;There was a redirect to this HTTP URL&quot;
- &quot;The load finished&quot;

What I think you mean to do is tell WebKit:
- &quot;There was a redirect to this HTTP URL&quot;
- &quot;Here is the data for the resource as I retrieved it from this new URL&quot;
- &quot;The load finished&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478133</commentid>
    <comment_count>17</comment_count>
    <who name="Garvan Keeley">garvankeeley</who>
    <bug_when>2018-11-13 13:55:02 -0800</bug_when>
    <thetext>(In reply to Brady Eidson from comment #16)

&gt; Based on your comment, I think you expect WebKit to start handling the load
&gt; once you tell it about the redirect.
&gt; 
&gt; But that&apos;s not right. This API is for you - the application UI process - to
&gt; tell WebKit about loading progress.

Indeed I was hoping to use this as redirection mechanism, we currently rely on a local webserver to that which is a clunky approach (i.e. a &quot;http://localhost:9999/url?http://google.com&quot; will forward to &apos;http://google.com&apos; -excuse lack of escaping).

This method is the only way we have to restore the history state in WKWebView, by `history.pushState(&apos;http://localhost:9999/url?&lt;the url&gt;&apos;)` for each URL in the history.


Thanks for the info!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617126</commentid>
    <comment_count>18</comment_count>
    <who name="Zach Waugh">zwaugh</who>
    <bug_when>2020-02-10 14:50:18 -0800</bug_when>
    <thetext>Can you confirm that this means currently without this new API, it is impossible to perform an HTTP redirect using a custom URL scheme? In my case, I&apos;m using a custom url scheme to act as a proxy for a http API to support caching in my app since Service Workers aren&apos;t available. When using the fetch API from WKWebView to my custom url scheme, if that that upstream server returns a 302 response, and I pass that back through the custom URL scheme, the fetch API fails to detect that as redirect.

I would appreciate confirmation if this is something I&apos;m doing wrong, or if it&apos;s expected behavior that it will fail and will need to wait for this API to be made public. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617229</commentid>
    <comment_count>19</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-10 17:37:08 -0800</bug_when>
    <thetext>Zach, you are correct.  It is impossible to perform an HTTP redirect using a custom URL scheme without this SPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679958</commentid>
    <comment_count>20</comment_count>
    <who name="geniusbrother">geniusbrother</who>
    <bug_when>2020-08-13 05:02:34 -0700</bug_when>
    <thetext>Hi @Alex Christense, i also have the proble too. For example, I open a webView which url is `http://www.example.com`. Then, the server response 301 redirect to `http://www.foo.com`, if i use the code below, the redirect response will dismiss, so do you hava any solutions? I will be very grateful if you help me


- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler
{
    
    // I will save `urlSchemeTask` in advance
    [urlSchemeTask didReceiveResponse:response];
    completionHandler(request);
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
   [urlSchemeTask didReceiveResponse:response];
   completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data
{
   [urlSchemeTask didReceiveData:data];
    
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    if (error) {
       if (error.code != NSURLErrorCancelled) {
          [urlSchemeTask didFailWithError:error];
       }
     } else {
       [urlSchemeTask didFinish];
     }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868507</commentid>
    <comment_count>21</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2022-05-12 12:38:28 -0700</bug_when>
    <thetext>Apparently this is still not fixed, nearly five years after the patch was submitted?
I have just run into exactly this problem in macOS 12.3.

This is a pretty bad problem for any app that is trying to run a web-app in a WKWebView without having to bind its HTTP server to a real TCP socket. 

It&apos;s straightforward to implement a WKURLSchemeHandler that proxies the NSURLRequest to the embedded server&apos;s C/C++ API (I&apos;m using Yuji Hirose&apos;s httplib, FWIW) and the server&apos;s responses back to an NSHTTPURLResponse. It works great ... until the server tries to redirect.

- If I return the 30x response back to WebKit, it thinks it&apos;s an error and fails.

- If I run the redirect loop myself, sending the updated location back to the server until I get a non-redirect response, WebKit does not recognize that the URL of the response is different from its initial request, even though I put the correct redirected URL in the NSURLResponse object I return. Again, this _almost_ works, but in my case JS running in the page is breaking because document.location contains the wrong URL.

If it&apos;s too problematic to make this SPI public, would it be easier to have WebKit recognize the response URL when it&apos;s different from the request, and update its state to reflect the new redirected URL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868514</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-05-12 13:07:35 -0700</bug_when>
    <thetext>Not sure all the answers to what Jens said above. But if we need this for apps, then we need API, not &quot;SPI&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868874</commentid>
    <comment_count>23</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2022-05-13 14:57:51 -0700</bug_when>
    <thetext>FYI, in case it helps anyone else, I have a skanky workaround using the ancient client-side-redirect technique:

Instead of giving WebKit a response with a 30x redirect, change the response to a 200 with the following HTML body:

    &lt;!doctype html&gt;&lt;html lang=&quot;en&quot;&gt;&lt;head&gt;
    &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0;URL=&apos;URL_TO_REDIRECT_TO&apos;&quot;&gt;
    &lt;/head&gt;&lt;body&gt;&lt;p&gt;Redirecting&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;

where &quot;URL_TO_REDIRECT_TO&quot; is the URL from the real response&apos;s Location header.

This works reasonably well in most cases; sometimes the redirect page shows up for a moment. The limitation is that it only works with GET requests. If you have a POST/PUT/whatever that redirects, you&apos;re out of luck.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313649</attachid>
            <date>2017-06-22 12:19:18 -0700</date>
            <delta_ts>2017-06-22 16:29:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173730-20170622121918.patch</filename>
            <type>text/plain</type>
            <size>41109</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSB0
byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhU
VFBGYW1pbHkpOgorICAgICAgICBBc3NlcnRpbmcgdGhhdCByZWRpcmVjdHMgYXJlIGFsd2F5cyBo
dHRwL2h0dHBzIFVSTHMgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICBJZiB0aGVyZSdzIGEg
Y3VzdG9tIHNjaGVtZSByZWRpcmVjdCwgZ2l2ZSBpdCBubyBmcmVzaG5lc3MgbGlmZXRpbWUgaW4g
dGhlIGNhY2hlLgorCiAyMDE3LTA2LTIxICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBz
b255LmNvbT4KIAogICAgICAgICBbQ3VybF0gRXh0cmFjdCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFz
IHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBjb21wdXRlRnJlc2huZQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9u
bzsKIAotICAgIEFTU0VSVChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
OworICAgIGlmICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gMHVzOwogCiAgICAgLy8gRnJlc2huZXNzIExpZmV0aW1lOgogICAgIC8vIGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzQjc2VjdGlvbi00LjIuMQpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTctMDYtMjIgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2No
ZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGFuIHVwY29taW5nIGZp
eCBmb3IgcmVkaXJlY3QgY2FsbGJhY2tzLAorICAgICAgICBhbmQgaXQgbWlnaHQgYmUgbmVjZXNz
YXJ5IGZvciBsb2FkaW5nIHdpdGggY3VzdG9tIHNjaGVtZXMgaW4gZ2VuZXJhbC4KKyAgICAgICAg
UmlnaHQgbm93IGp1c3QgcmVzcG9uZGluZyB3aXRoIGFuIEhUVFAgMzAxLzMwMi8zMDcvMzA4IHJl
c3BvbnNlIGNvZGUKKyAgICAgICAgZG9lc24ndCB3b3JrIGJlY2F1c2UgdGhlcmUgaXMgbm90aGlu
ZyB0aGF0IHN5bnRoZXNpemVzIGFuIE5TVVJMUmVxdWVzdAorICAgICAgICBmcm9tIHRoZSBMb2Nh
dGlvbiBoZWFkZXIsIGFuZCB0aGF0IHdvdWxkIHJlcXVpcmUgdXNpbmcgYW4gTlNIVFRQVVJMUmVz
cG9uc2UKKyAgICAgICAgZm9yIG5vbi1IVFRQIHJlc3BvbnNlcywgd2hpY2ggaXMgY29uY2VwdHVh
bGx5IHdyb25nLiAgQWxzbywgYWRkaW5nIHN1Y2ggTlNVUkxSZXNwb25zZQorICAgICAgICBzeW50
aGVzaXppbmcgdG8gV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRSZWNlaXZlUmVzcG9uc2UgbGlr
ZSB3ZSBkbyBpbgorICAgICAgICBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCBldCBhbC4gZm9yIEhTVFMKKyAgICAgICAgd291
bGQgbm90IHdvcmsgYmVjYXVzZSB3ZSB3b3VsZG4ndCBwcm9wZXJseSBkbyBhbnl0aGluZyB3aXRo
IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKyAgICAgICAgb2YgUmVzb3VyY2VMb2FkZXI6OndpbGxT
ZW5kUmVxdWVzdC4KKworICAgICAgICBXZSBuZWVkIGEgbmV3IFNQSSBmdW5jdGlvbiB3aXRoIGEg
Y29tcGxldGlvbiBoYW5kbGVyLgorICAgICAgICBUaGlzIGFkZHMgV0tVUkxTY2hlbWVUYXNrUHJp
dmF0ZS5fd2lsbFBlcmZvcm1SZWRpcmVjdGlvbiB3aGljaCBpcyBjb3ZlcmVkIGJ5IG5ldyBBUEkg
dGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5t
bToKKyAgICAgICAgKHJhaXNlRXhjZXB0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoLVtXS1VS
TFNjaGVtZVRhc2tJbXBsIF93aWxsUGVyZm9ybVJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVt
ZVRhc2tJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hl
bWVUYXNrUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRhc2sp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb250aW51ZVVSTFNjaGVtZVRhc2tSZWRpcmVj
dGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlVSTFNjaGVtZUhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5k
bGVyOjpzdGFydFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyOjpz
dG9wVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OmNvbnRpbnVl
VVJMU2NoZW1lVGFza1JlZGlyZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6Y29udGludWVXaWxsUGVyZm9ybVJl
ZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6
ZGlkUmVjZWl2ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVU
YXNrOjpkaWRDb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp1cmxTY2hlbWVUYXNrV2lsbFBlcmZvcm1SZWRpcmVjdGlvbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
U2NoZW1lSGFuZGxlclByb3h5Ojp0YXNrV2lsbFBlcmZvcm1SZWRpcmVjdGlvbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrUHJveHk6OndpbGxQZXJmb3JtUmVkaXJlY3Rpb24p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaDoK
KwogMjAxNy0wNi0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAg
ICAgRG9uJ3QgY2xlYXIgYXVkaW8gbXV0ZSB3aGVuIG11dGluZyBjYXB0dXJlLgpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIxODYzNSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02ODc5LDIwICs2ODc5LDI4IEBAIFdlYlVSTFNjaGVtZUhhbmRsZXIqIFdlYlBhZ2VQ
cm94eTo6dXJsU2MKICAgICByZXR1cm4gbV91cmxTY2hlbWVIYW5kbGVyc0J5U2NoZW1lLmdldChz
Y2hlbWUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2
NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpz
dGFydFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7
CiAgICAgYXV0byBpdGVyYXRvciA9IG1fdXJsU2NoZW1lSGFuZGxlcnNCeUlkZW50aWZpZXIuZmlu
ZChoYW5kbGVySWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdXJsU2NoZW1l
SGFuZGxlcnNCeUlkZW50aWZpZXIuZW5kKCkpOwogCi0gICAgaXRlcmF0b3ItPnZhbHVlLT5zdGFy
dFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllciwgcmVxdWVzdCk7CisgICAgaXRlcmF0b3It
PnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0KTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVu
dGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6
c3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3VybFNjaGVtZUhhbmRsZXJz
QnlJZGVudGlmaWVyLmZpbmQoaGFuZGxlcklkZW50aWZpZXIpOwogICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmVuZCgpKTsKIAotICAgIGl0ZXJh
dG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllcik7CisgICAgaXRl
cmF0b3ItPnZhbHVlLT5zdG9wVGFzaygqdGhpcywgdGFza0lkZW50aWZpZXIpOworfQorCit2b2lk
IFdlYlBhZ2VQcm94eTo6Y29udGludWVVUkxTY2hlbWVUYXNrUmVkaXJlY3Rpb24odWludDY0X3Qg
aGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiByZXF1ZXN0KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3VybFNjaGVt
ZUhhbmRsZXJzQnlJZGVudGlmaWVyLmZpbmQoaGFuZGxlcklkZW50aWZpZXIpOworICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmVuZCgpKTsKKyAg
ICAKKyAgICBpdGVyYXRvci0+dmFsdWUtPmNvbnRpbnVlVVJMU2NoZW1lVGFza1JlZGlyZWN0aW9u
KHRhc2tJZGVudGlmaWVyLCBXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldEF2b2lkc1Vuc2FmZUFyZWEoYm9vbCBhdm9pZHNVbnNhZmVBcmVhKQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjE4NjM1KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTk5LDggKzE1OTksOSBAQCBwcml2YXRlOgogI2VuZGlmCiAjZW5kaWYKIAotICAgIHZvaWQg
c3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCBy
ZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAg
IHZvaWQgc3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2
NF90IHJlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBzdGFydFVSTFNjaGVtZVRhc2sodWlu
dDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CisgICAg
dm9pZCBjb250aW51ZVVSTFNjaGVtZVRhc2tSZWRpcmVjdGlvbih1aW50NjRfdCBoYW5kbGVySWRl
bnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmKTsKIAogICAgIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljayhjb25zdCBVc2VyRGF0
YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw2ICs0
OTUsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU2V0SXNVc2luZ0hpZ2hQ
ZXJmb3JtYW5jZVdlYkdMKGJvb2wgaXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMKQogCi0gICAg
U3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGxvYWRlcklkZW50aWZpZXIsIHVpbnQ2NF90IHJl
c291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCi0gICAg
U3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgbG9hZGVySWRlbnRpZmllciwgdWludDY0X3QgcmVz
b3VyY2VJZGVudGlmaWVyKQorICAgIFN0YXJ0VVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVy
SWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCByZXF1ZXN0KQorICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVu
dGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKKyAgICBDb250aW51ZVVSTFNjaGVtZVRh
c2tSZWRpcmVjdGlvbih1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmNwcAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhh
bmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNyArNDgsMTcgQEAgV2ViVVJMU2NoZW1l
SGFuZGxlcjo6fldlYlVSTFNjaGVtZUhhbmRsZQogICAgIEFTU0VSVChtX3Rhc2tzLmlzRW1wdHko
KSk7CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlcjo6c3RhcnRUYXNrKFdlYlBhZ2VQcm94
eSYgcGFnZSwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXI6OnN0YXJ0VGFzayhXZWJQYWdl
UHJveHkmIHBhZ2UsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3Rhc2tzLmFkZChyZXNvdXJjZUlk
ZW50aWZpZXIsIFdlYlVSTFNjaGVtZVRhc2s6OmNyZWF0ZSgqdGhpcywgcGFnZSwgcmVzb3VyY2VJ
ZGVudGlmaWVyLCByZXF1ZXN0KSk7CisgICAgYXV0byByZXN1bHQgPSBtX3Rhc2tzLmFkZCh0YXNr
SWRlbnRpZmllciwgV2ViVVJMU2NoZW1lVGFzazo6Y3JlYXRlKCp0aGlzLCBwYWdlLCB0YXNrSWRl
bnRpZmllciwgcmVxdWVzdCkpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAKICAg
ICBwbGF0Zm9ybVN0YXJ0VGFzayhwYWdlLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIH0KIAot
dm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpzdG9wVGFzayhXZWJQYWdlUHJveHkmIHBhZ2UsIHVp
bnQ2NF90IHJlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlcjo6c3Rv
cFRhc2soV2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIHsKLSAg
ICBhdXRvIGl0ZXJhdG9yID0gbV90YXNrcy5maW5kKHJlc291cmNlSWRlbnRpZmllcik7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fdGFza3MuZmluZCh0YXNrSWRlbnRpZmllcik7CiAgICAgaWYgKGl0
ZXJhdG9yID09IG1fdGFza3MuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjksNCArNjks
MTMgQEAgdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpzdG9wVGFzayhXZWJQYQogICAgIG1fdGFz
a3MucmVtb3ZlKGl0ZXJhdG9yKTsKIH0KIAordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpjb250
aW51ZVVSTFNjaGVtZVRhc2tSZWRpcmVjdGlvbih1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV90YXNrcy5maW5kKHRhc2tJZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV90YXNr
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlcmF0b3ItPnZhbHVlLT5jb250aW51
ZVdpbGxQZXJmb3JtUmVkaXJlY3Rpb24oV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVt
ZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJM
U2NoZW1lSGFuZGxlci5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw5
IEBAIHB1YmxpYzoKIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXI7IH0KIAotICAgIHZvaWQgc3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIHVpbnQ2
NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
Ci0gICAgdm9pZCBzdG9wVGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCByZXNvdXJjZUlkZW50
aWZpZXIpOworICAgIHZvaWQgc3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHN0
b3BUYXNrKFdlYlBhZ2VQcm94eSYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lk
IGNvbnRpbnVlVVJMU2NoZW1lVGFza1JlZGlyZWN0aW9uKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJVUkxT
Y2hlbWVIYW5kbGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2No
ZW1lVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZVRhc2suY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDU0ICs0OCw5
MiBAQCBXZWJVUkxTY2hlbWVUYXNrOjpXZWJVUkxTY2hlbWVUYXNrKFdlYlVSCiB7CiB9CiAKLVdl
YlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorYXV0byBXZWJVUkxT
Y2hlbWVUYXNrOjp3aWxsUGVyZm9ybVJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiByZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgRnVuY3Rp
b248dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
IC0+IEV4Y2VwdGlvblR5cGUKIHsKICAgICBpZiAobV9zdG9wcGVkKQotICAgICAgICByZXR1cm4g
V2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOworICAgIAorICAg
IGlmIChtX2NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6OkNvbXBsZXRl
QWxyZWFkeUNhbGxlZDsKKyAgICAKKyAgICBpZiAobV9kYXRhU2VudCkKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblR5cGU6OkRhdGFBbHJlYWR5U2VudDsKKyAgICAKKyAgICBpZiAobV9yZXNwb25z
ZVNlbnQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpSZWRpcmVjdEFmdGVyUmVzcG9u
c2U7CisgICAgCisgICAgaWYgKG1fcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvblR5cGU6OkNhbGxzQmVmb3JlUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxl
cjsKKyAgICAKKyAgICBtX3JlcXVlc3QgPSByZXF1ZXN0OworICAgIG1fcmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6VVJMU2NoZW1lVGFza1dpbGxQZXJmb3JtUmVkaXJlY3Rpb24o
bV91cmxTY2hlbWVIYW5kbGVyLT5pZGVudGlmaWVyKCksIG1faWRlbnRpZmllciwgcmVzcG9uc2Us
IHJlcXVlc3QpKTsKKworICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb25lOworfQorCit2b2lk
IFdlYlVSTFNjaGVtZVRhc2s6OmNvbnRpbnVlV2lsbFBlcmZvcm1SZWRpcmVjdGlvbihSZXNvdXJj
ZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdCA9IG5ld1JlcXVlc3Q7Cisg
ICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZWRpcmVjdENvbXBs
ZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAgICBBU1NFUlQoY29tcGxldGlvbkhhbmRsZXIpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUobmV3UmVxdWVzdCkpOworfQorCithdXRvIFdl
YlVSTFNjaGVtZVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkgLT4gRXhjZXB0aW9uVHlwZQoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CiAKICAgICBpZiAo
bV9jb21wbGV0ZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25U
eXBlOjpDb21wbGV0ZUFscmVhZHlDYWxsZWQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBl
OjpDb21wbGV0ZUFscmVhZHlDYWxsZWQ7CiAKICAgICBpZiAobV9kYXRhU2VudCkKLSAgICAgICAg
cmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6OkRhdGFBbHJlYWR5U2VudDsK
LQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6RGF0YUFscmVhZHlTZW50OworICAgIAor
ICAgIGlmIChtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb25UeXBlOjpDYWxsc0JlZm9yZVJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXI7CisgICAgCiAg
ICAgbV9yZXNwb25zZVNlbnQgPSB0cnVlOwogCiAgICAgcmVzcG9uc2UuaW5jbHVkZUNlcnRpZmlj
YXRlSW5mbygpOwogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VVJMU2NoZW1l
VGFza0RpZFJlY2VpdmVSZXNwb25zZShtX3VybFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwg
bV9pZGVudGlmaWVyLCByZXNwb25zZSkpOwotICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpF
eGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb25lOwogfQog
Ci1XZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlIFdlYlVSTFNjaGVtZVRhc2s6OmRpZFJl
Y2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK2F1dG8gV2ViVVJMU2NoZW1lVGFz
azo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKSAtPiBFeGNlcHRpb25U
eXBlCiB7CiAgICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRh
c2s6OkV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKIAogICAgIGlmIChtX2NvbXBsZXRlZCkK
LSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6OkNvbXBsZXRl
QWxyZWFkeUNhbGxlZDsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6OkNvbXBsZXRlQWxy
ZWFkeUNhbGxlZDsKIAogICAgIGlmICghbV9yZXNwb25zZVNlbnQpCi0gICAgICAgIHJldHVybiBX
ZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNlU2VudDsKLQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Tm9SZXNwb25zZVNlbnQ7CisgICAgCisgICAgaWYgKG1f
cmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6
OkNhbGxzQmVmb3JlUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcjsKKyAgICAKICAgICBtX2RhdGFT
ZW50ID0gdHJ1ZTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVSTFNjaGVt
ZVRhc2tEaWRSZWNlaXZlRGF0YShtX3VybFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwgbV9p
ZGVudGlmaWVyLCBJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UoYnVmZmVyLnB0cigpKSkp
OwotICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAg
IHJldHVybiBFeGNlcHRpb25UeXBlOjpOb25lOwogfQogCi1XZWJVUkxTY2hlbWVUYXNrOjpFeGNl
cHRpb25UeXBlIFdlYlVSTFNjaGVtZVRhc2s6OmRpZENvbXBsZXRlKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQorYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikgLT4gRXhjZXB0aW9uVHlwZQogewogICAgIGlmIChtX3N0b3BwZWQp
Ci0gICAgICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpUYXNrQWxy
ZWFkeVN0b3BwZWQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0
b3BwZWQ7CiAKICAgICBpZiAobV9jb21wbGV0ZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxTY2hl
bWVUYXNrOjpFeGNlcHRpb25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxsZWQ7CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxsZWQ7CiAKICAgICBpZiAoIW1f
cmVzcG9uc2VTZW50ICYmIGVycm9yLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gV2ViVVJMU2No
ZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Tm9SZXNwb25zZVNlbnQ7CisgICAgICAgIHJldHVybiBF
eGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNlU2VudDsKIAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsK
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRDb21w
bGV0ZShtX3VybFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBlcnJv
cikpOwotICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOwor
ICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb25lOwogfQogCiB2b2lkIFdlYlVSTFNjaGVtZVRh
c2s6OnBhZ2VEZXN0cm95ZWQoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVS
TFNjaGVtZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
VVJMU2NoZW1lVGFzay5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTQg
QEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSB7CiAgICAgICAgIERhdGFB
bHJlYWR5U2VudCwKICAgICAgICAgQ29tcGxldGVBbHJlYWR5Q2FsbGVkLAorICAgICAgICBSZWRp
cmVjdEFmdGVyUmVzcG9uc2UsCisgICAgICAgIENhbGxzQmVmb3JlUmVkaXJlY3RDb21wbGV0aW9u
SGFuZGxlciwKICAgICAgICAgVGFza0FscmVhZHlTdG9wcGVkLAogICAgICAgICBOb1Jlc3BvbnNl
U2VudCwKICAgICAgICAgTm9uZSwKICAgICB9OworICAgIEV4Y2VwdGlvblR5cGUgd2lsbFBlcmZv
cm1SZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4m
Jik7CisgICAgdm9pZCBjb250aW51ZVdpbGxQZXJmb3JtUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYpOwogICAgIEV4Y2VwdGlvblR5cGUgZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICBFeGNlcHRpb25UeXBlIGRpZFJl
Y2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KTsKICAgICBFeGNlcHRpb25UeXBl
IGRpZENvbXBsZXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKQEAgLTcwLDYgKzc0
LDcgQEAgcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKICAgICB1aW50NjRfdCBt
X2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAg
ICBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4gbV9yZWRpcmVjdENv
bXBsZXRpb25IYW5kbGVyOwogICAgIGJvb2wgbV9zdG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29s
IG1fcmVzcG9uc2VTZW50IHsgZmFsc2UgfTsKICAgICBib29sIG1fZGF0YVNlbnQgeyBmYWxzZSB9
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VSTFNjaGVtZVRhc2subW0JKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMCArMjgsMTEgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbmNsdWRlICJXZWJVUkxT
Y2hlbWVUYXNrLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KKyNpbXBvcnQgIldlYlVSTFNjaGVtZVRhc2suaCIKKyNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00MSwxNiArNDIsMjIgQEAgc3RhdGlj
IHZvaWQgcmFpc2VFeGNlcHRpb25JZk5lY2Vzc2FyeShXZQogICAgIGNhc2UgV2ViS2l0OjpXZWJV
UkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOgogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBXZWJLaXQ6OldlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5
U3RvcHBlZDoKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3Rl
bmN5RXhjZXB0aW9uIGZvcm1hdDpAIlRoaXMgdGFzayBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWQi
XTsKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhj
ZXB0aW9uIGZvcm1hdDpAIlRoaXMgdGFzayBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWQuIl07CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRp
b25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxsZWQ6Ci0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiBmb3JtYXQ6QCJbV0tVUkxTY2hlbWVU
YXNrIHRhc2tEaWRDb21wbGV0ZVdpdGhFcnJvcjpdIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZv
ciB0aGlzIHRhc2siXTsKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNv
bnNpc3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIltXS1VSTFNjaGVtZVRhc2sgdGFza0RpZENvbXBs
ZXRlV2l0aEVycm9yOl0gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgdGFzay4iXTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6OldlYlVSTFNjaGVtZVRhc2s6OkV4Y2Vw
dGlvblR5cGU6OkRhdGFBbHJlYWR5U2VudDoKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5T
SW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIltXS1VSTFNjaGVtZVRhc2sg
dGFza0RpZFJlY2VpdmVEYXRhOl0gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgdGFz
ayJdOworICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lF
eGNlcHRpb24gZm9ybWF0OkAiW1dLVVJMU2NoZW1lVGFzayB0YXNrRGlkUmVjZWl2ZURhdGE6XSBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyB0YXNrLiJdOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Tm9SZXNw
b25zZVNlbnQ6Ci0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludGVybmFsSW5jb25zaXN0
ZW5jeUV4Y2VwdGlvbiBmb3JtYXQ6QCJObyByZXNwb25zZSBoYXMgYmVlbiBzZW50IGZvciB0aGlz
IHRhc2siXTsKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3Rl
bmN5RXhjZXB0aW9uIGZvcm1hdDpAIk5vIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQgZm9yIHRoaXMg
dGFzay4iXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXQ6OldlYlVSTFNjaGVtZVRh
c2s6OkV4Y2VwdGlvblR5cGU6OlJlZGlyZWN0QWZ0ZXJSZXNwb25zZToKKyAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIk5v
IHJlZGlyZWN0cyBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIHRhc2sgYWZ0ZXIgdGhlIHJlc3BvbnNl
LiJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6
RXhjZXB0aW9uVHlwZTo6Q2FsbHNCZWZvcmVSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyOgorICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24g
Zm9ybWF0OkAiTm8gY2FsbHMgc2hvdWxkIGJlIG1hZGUgd2hlbiB3YWl0aW5nIGZvciBhIHJlZGly
ZWN0IGNvbXBsZXRpb24gaGFuZGxlci4iXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAt
ODYsNiArOTMsMTIgQEAgLSAodm9pZClkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJybwog
ICAgIHJhaXNlRXhjZXB0aW9uSWZOZWNlc3NhcnkocmVzdWx0KTsKIH0KIAorLSAodm9pZClfd2ls
bFBlcmZvcm1SZWRpcmVjdGlvbjooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIG5ld1JlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJM
UmVxdWVzdCAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gcmVzdWx0ID0gX3VybFNj
aGVtZVRhc2stPnRhc2soKS53aWxsUGVyZm9ybVJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSB7IGNvbXBsZXRpb25IYW5kbGVyLmdl
dCgpKHJlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpKTsgfSk7CisgICAg
cmFpc2VFeGNlcHRpb25JZk5lY2Vzc2FyeShyZXN1bHQpOworfQorCiAjcHJhZ21hIG1hcmsgV0tP
YmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmpl
Y3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVU
YXNrSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVVJMU2NoZW1lVGFza0ludGVybmFsLmgJKHJldmlzaW9uIDIxODYzNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV0tVUkxTY2hlbWVUYXNrLmgiCisjaW1w
b3J0ICJXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmgiCiAKICNpZiBXS19BUElfRU5BQkxFRAogCiAj
aW1wb3J0ICJBUElVUkxTY2hlbWVUYXNrLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCi1AaW50
ZXJmYWNlIFdLVVJMU2NoZW1lVGFza0ltcGwgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVUYXNrPgor
QGludGVyZmFjZSBXS1VSTFNjaGVtZVRhc2tJbXBsIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lVGFz
a1ByaXZhdGU+CiBAZW5kCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRhc2tQ
cml2YXRlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2suaD4KKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKK1dLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpCitAcHJvdG9jb2wgV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZSA8V0tV
UkxTY2hlbWVUYXNrPgorCistICh2b2lkKV93aWxsUGVyZm9ybVJlZGlyZWN0aW9uOihOU1VSTFJl
c3BvbnNlICopcmVzcG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxSZXF1ZXN0ICopKWNvbXBsZXRpb25IYW5kbGVy
OworCitAZW5kCisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTExNjAsNiArMTE2MCw3IEBACiAJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3
b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0gKi87IH07CiAJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUUx
QkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi87IH07CiAJCTVDMjk4REEwMUMz
REYwMjEwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5k
aW5nRG93bmxvYWQuaCAqLzsgfTsKKwkJNUM2MkZERjkxRUZDMjcxQzAwQ0UwNzJFIC8qIFdLVVJM
U2NoZW1lVGFza1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAvKiBXS1VSTFNjaGVtZVRhc2tQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NUM3NzA2NzQxRDExMzgzODAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzcwNjczMUQxMTFEOEIw
MDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi87IH07CiAJCTVDODVDNzg4MUMzRjIz
Q0UwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRp
bmdEb3dubG9hZC5jcHAgKi87IH07CiAJCTVDOUU1NjgyMURGN0YxQUIwMEM5RUUzMyAvKiBXS1dl
YnNpdGVQb2xpY2llcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzlFNTY4MDFERjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3Bw
ICovOyB9OwpAQCAtMzQ0Myw2ICszNDQ0LDcgQEAKIAkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmg7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBlbmRpbmdEb3dubG9hZC5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1QzYyRkRGODFFRkMyNjNDMDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNrUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQ
cm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2Nr
ZXRQcm92aWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4REMxRDBGNDFBMDAwOUQyRjZEIC8qIFdl
YlNvY2tldFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNv
Y2tldFByb3ZpZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5k
aW5nRG93bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGVu
ZGluZ0Rvd25sb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5n
RG93bmxvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTcxOCw2ICs1NzIw
LDcgQEAKIAkJCQk1MUQxMjQyRjFFNkREREQ3MDAyQjI4MjAgLyogV0tVUkxTY2hlbWVUYXNrLmgg
Ki8sCiAJCQkJNTFEMTI0MzAxRTZERERENzAwMkIyODIwIC8qIFdLVVJMU2NoZW1lVGFzay5tbSAq
LywKIAkJCQk1MUQxMjQzNzFFNkRGRDJBMDAyQjI4MjAgLyogV0tVUkxTY2hlbWVUYXNrSW50ZXJu
YWwuaCAqLywKKwkJCQk1QzYyRkRGODFFRkMyNjNDMDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNr
UHJpdmF0ZS5oICovLAogCQkJCTFBRkEzQUM3MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1VzZXJDb250
ZW50Q29udHJvbGxlci5oICovLAogCQkJCTFBRkEzQUM2MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1Vz
ZXJDb250ZW50Q29udHJvbGxlci5tbSAqLywKIAkJCQkxQUFGMDhBMzE5MjY4MkRBMDBCNjM5MEMg
LyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oICovLApAQCAtODk0NCw2ICs4OTQ3
LDcgQEAKIAkJCQkzN0Y2MjNCODEyQTU3QjYyMDBFM0ZERjYgLyogV0tGaW5kT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QjUxOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybUlucHV0
Q29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QjcxOEJFQzE4QzAwREU0MTc5IC8q
IFdLRm9ybVBlcmlwaGVyYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNjJGREY5MUVGQzI3MUMw
MENFMDcyRSAvKiBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTQyNTZCODE4QkVDMThDMDBERTQxNzkgLyogV0tGb3JtUG9wb3Zlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzU0MjU2QkExOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRyb2wuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDhDRjUyMUQ2M0MxM0EwMEI0OERGMSAvKiBXS0Zvcm1TZWxl
Y3RQaWNrZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OTEyLDYgKzU5MTIsMTYgQEAgdm9pZCBXZWJQYWdlOjpyZWdpc3RlclVSTFNjaGVtZUhhbmRsZXIo
dQogICAgIEFTU0VSVF9VTlVTRUQoaWRlbnRpZmllclJlc3VsdCwgaWRlbnRpZmllclJlc3VsdC5p
c05ld0VudHJ5KTsKIH0KIAordm9pZCBXZWJQYWdlOjp1cmxTY2hlbWVUYXNrV2lsbFBlcmZvcm1S
ZWRpcmVjdGlvbih1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50
aWZpZXIsIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkKK3sKKyAgICBhdXRvKiBoYW5kbGVyID0gbV9pZGVudGlmaWVyVG9VUkxTY2hlbWVIYW5k
bGVyUHJveHlNYXAuZ2V0KGhhbmRsZXJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoaGFuZGxlcik7
CisgICAgCisgICAgaGFuZGxlci0+dGFza1dpbGxQZXJmb3JtUmVkaXJlY3Rpb24odGFza0lkZW50
aWZpZXIsIFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKHJlcXVlc3QpLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBoYW5kbGVySWRlbnRpZmllciwgdGFza0lkZW50aWZp
ZXJdIChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSB7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6Q29udGludWVVUkxTY2hlbWVUYXNrUmVkaXJlY3Rpb24oaGFuZGxlcklk
ZW50aWZpZXIsIHRhc2tJZGVudGlmaWVyLCBXVEZNb3ZlKHJlcXVlc3QpKSk7CisgICAgfSk7Cit9
CisgICAgCiB2b2lkIFdlYlBhZ2U6OnVybFNjaGVtZVRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWlu
dDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBhdXRvKiBoYW5kbGVyID0gbV9pZGVu
dGlmaWVyVG9VUkxTY2hlbWVIYW5kbGVyUHJveHlNYXAuZ2V0KGhhbmRsZXJJZGVudGlmaWVyKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3Niw2ICsxMjc2LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc2NoZW1lKTsKIAorICAgIHZvaWQgdXJsU2NoZW1lVGFza1dpbGxQZXJmb3JtUmVk
aXJlY3Rpb24odWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlm
aWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmKTsKICAgICB2b2lkIHVybFNjaGVtZVRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qg
aGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCB1cmxTY2hlbWVUYXNrRGlkUmVjZWl2ZURh
dGEodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICB2b2lkIHVybFNjaGVtZVRhc2tEaWRDb21w
bGV0ZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw4IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVy
KHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0cmluZyBzY2hlbWUpCiAKLSAgICBVUkxTY2hlbWVUYXNr
RGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwgdWludDY0X3Qg
dGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UpCi0gICAg
VVJMU2NoZW1lVGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwg
dWludDY0X3QgdGFza0lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotICAgIFVS
TFNjaGVtZVRhc2tEaWRDb21wbGV0ZSh1aW50NjRfdCBwcm92aWRlcklkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQorICAgIFVS
TFNjaGVtZVRhc2tXaWxsUGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCisgICAgVVJMU2NoZW1l
VGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0
X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UpCisg
ICAgVVJMU2NoZW1lVGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVy
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCisgICAg
VVJMU2NoZW1lVGFza0RpZENvbXBsZXRlKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50
NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcikKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTQgQEAgdm9pZCBXZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHk6OnN0YXJ0TmV3VAogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN0YXJ0TG9h
ZGluZygpOwogfQogCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6dGFza1dpbGxQZXJm
b3JtUmVkaXJlY3Rpb24odWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiBu
ZXdSZXF1ZXN0LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvKiB0YXNrID0gbV90YXNrcy5nZXQodGFza0lk
ZW50aWZpZXIpOworICAgIGlmICghdGFzaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRh
c2stPndpbGxQZXJmb3JtUmVkaXJlY3Rpb24oV1RGTW92ZShyZWRpcmVjdFJlc3BvbnNlKSwgV1RG
TW92ZShuZXdSZXF1ZXN0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQogCiB2b2lk
IFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6dGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRf
dCB0YXNrSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxl
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
UmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXNw
b25zZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJuIG1f
d2ViUGFnZTsgfQogCisgICAgdm9pZCB0YXNrV2lsbFBlcmZvcm1SZWRpcmVjdGlvbih1aW50NjRf
dCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
Jik+JiYpOwogICAgIHZvaWQgdGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCB0YXNrSWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgdGFz
a0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBzaXplX3QsIGNvbnN0IHVp
bnQ4X3QqIGRhdGEpOwogICAgIHZvaWQgdGFza0RpZENvbXBsZXRlKHVpbnQ2NF90IHRhc2tJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFz
a1Byb3h5LmNwcAkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDYgKzYyLDE0IEBAIHZvaWQgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpzdG9wTG9hZGluZygKICAg
ICAvLyBUaGlzIGxpbmUgd2lsbCByZXN1bHQgaW4gdGhpcyBiZWluZyBkZWxldGVkLgogICAgIG1f
dXJsU2NoZW1lSGFuZGxlci50YXNrRGlkU3RvcExvYWRpbmcoKnRoaXMpOwogfQorICAgIAordm9p
ZCBXZWJVUkxTY2hlbWVUYXNrUHJveHk6OndpbGxQZXJmb3JtUmVkaXJlY3Rpb24oV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmIG5ld1JlcXVlc3QsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFzTG9hZGVyKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvcmVMb2FkZXItPndpbGxTZW5kUmVxdWVzdChXVEZN
b3ZlKG5ld1JlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Cit9CiAKIHZvaWQgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRhc2tQ
cm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRMb2FkaW5nKCk7CiAgICAgdm9pZCBzdG9wTG9h
ZGluZygpOwogCisgICAgdm9pZCB3aWxsUGVyZm9ybVJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIEZ1bmN0aW9uPHZvaWQo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpPiYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBkaWRSZWNl
aXZlRGF0YShzaXplX3QsIGNvbnN0IHVpbnQ4X3QqIGRhdGEpOwogICAgIHZvaWQgZGlkQ29tcGxl
dGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4NzA5KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDYtMjIg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgU1BJIHRvIFdLVVJMU2NoZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyQ29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLTEubW06CisgICAgICAgICgtW1NjaGVtZUhh
bmRsZXIgd2ViVmlldzpzdGFydFVSTFNjaGVtZVRhc2s6XSk6CisgICAgICAgICgtW1NjaGVtZUhh
bmRsZXIgd2ViVmlldzpzdG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmlldzpzdGFydFVSTFNjaGVtZVRhc2s6
XSk6CisgICAgICAgICgtW1JlZGlyZWN0U2NoZW1lSGFuZGxlciB3ZWJWaWV3OnN0b3BVUkxTY2hl
bWVUYXNrOl0pOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmlldzpkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb246XSk6CisgICAgICAg
ICgtW1JlZGlyZWN0U2NoZW1lSGFuZGxlciB3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZTpkZWNpc2lvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1JlZGlyZWN0U2NoZW1l
SGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6
CisKIDIwMTctMDYtMjIgIE1hdHQgTGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE4NjMzLgpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVUkxTY2hlbWVI
YW5kbGVyLTEubW0JKHJldmlzaW9uIDIxODYzNSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxNCArMjgsMTQgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0
ICJUZXN0LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVU
YXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CiAKICNpZiBXS19BUElfRU5BQkxFRAogCi1zdGF0aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1l
c3NhZ2U7CitzdGF0aWMgYm9vbCBkb25lOwogCiBAaW50ZXJmYWNlIFNjaGVtZUhhbmRsZXIgOiBO
U09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgogQHByb3BlcnR5IChyZWFkb25seSkgTlNNdXRh
YmxlQXJyYXk8TlNVUkwgKj4gKnN0YXJ0ZWRVUkxzOwpAQCAtNzYsNyArNzYsNyBAQCAtICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhCiAgICAgLy8gQWx3YXlzIGZhaWwgdGhl
IGltYWdlIGxvYWQuCiAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlz
RXF1YWxUb1N0cmluZzpAInRlc3Rpbmc6aW1hZ2UiXSkgewogICAgICAgICBbdGFzayBkaWRGYWls
V2l0aEVycm9yOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIlRlc3RXZWJLaXRBUEkiIGNvZGU6
MSB1c2VySW5mbzpuaWxdXTsKLSAgICAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsK
KyAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkwLDcg
KzkwLDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0bwogewogICAg
IFtfc3RvcHBlZFVSTHMgYWRkT2JqZWN0OnRhc2sucmVxdWVzdC5VUkxdOwogCi0gICAgcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICBkb25lID0gdHJ1ZTsKIH0KIAogQGVuZApAQCAt
MTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG1haW5CeXRlc1tdID0KIAogVEVTVChV
UkxTY2hlbWVIYW5kbGVyLCBCYXNpYykKIHsKLSAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBm
YWxzZTsKKyAgICBkb25lID0gZmFsc2U7CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAKQEAgLTExNCw3ICsxMTQsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRs
ZXIsIEJhc2ljKQogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOm1haW4iXV07CiAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKIAogICAgIEVYUEVDVF9FUShbaGFuZGxlci5nZXQoKS5zdGFydGVkVVJMcyBj
b3VudF0sIDJ1KTsKICAgICBFWFBFQ1RfVFJVRShbW2hhbmRsZXIuZ2V0KCkuc3RhcnRlZFVSTHMg
b2JqZWN0QXRJbmRleDowXSBpc0VxdWFsOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzpt
YWluIl1dKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIE5vTUlN
RVR5cGUpCiAgICAgLy8gU2luY2UgdGhlcmUncyBubyBNSU1FVHlwZSwgYW5kIG5vIE5hdmlnYXRp
b25EZWxlZ2F0ZSB0byB0ZWxsIFdlYktpdCB0byBkbyB0aGUgbG9hZCBhbnl3YXlzLCBXZWJLaXQg
d2lsbCBpZ25vcmUgKHNpbGVudGx5IGZhaWwpIHRoZSBsb2FkLgogICAgIC8vIFRoaXMgdGVzdCBt
YWtlcyBzdXJlIHRoYXQgaXMgY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIFVSTFNjaGVtZUhhbmRs
ZXIuCiAKLSAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBkb25lID0gZmFs
c2U7CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKQEAg
LTEzOSw3ICsxMzksNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIE5vTUlNRVR5cGUpCiAgICAg
TlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6bWFpbiJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpyZXF1ZXN0XTsKIAotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAg
ICAgRVhQRUNUX0VRKFtoYW5kbGVyLmdldCgpLnN0YXJ0ZWRVUkxzIGNvdW50XSwgMXUpOwogICAg
IEVYUEVDVF9UUlVFKFtbaGFuZGxlci5nZXQoKS5zdGFydGVkVVJMcyBvYmplY3RBdEluZGV4OjBd
IGlzRXF1YWw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOm1haW4iXV0pOwpAQCAtMTkx
LDUgKzE5MSw4MCBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIEJ1aWx0aW5TY2hlbWVzKQogICAg
IH0KIH0KIAorc3RhdGljIGJvb2wgcmVjZWl2ZWRSZWRpcmVjdDsKK3N0YXRpYyBib29sIHJlc3Bv
bnNlUG9saWN5RGVjaWRlZDsKKworQGludGVyZmFjZSBSZWRpcmVjdFNjaGVtZUhhbmRsZXIgOiBO
U09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyLCBXS05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tTY3Jp
cHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFJlZGlyZWN0U2NoZW1l
SGFuZGxlciB7IH0KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0YXJ0
VVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdGFzaworeworICAgIEFTU0VSVF9T
VFJFUSh0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJ0ZXN0aW5n
Oi8vL2luaXRpYWwiKTsKKyAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVz
cG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6bmlsIGV4
cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly8vcmVkaXJlY3RlZCJdXTsKKyAgICBB
U1NFUlRfRkFMU0UocmVjZWl2ZWRSZWRpcmVjdCk7CisgICAgWyhpZDxXS1VSTFNjaGVtZVRhc2tQ
cml2YXRlPil0YXNrIF93aWxsUGVyZm9ybVJlZGlyZWN0aW9uOnJlc3BvbnNlIG5ld1JlcXVlc3Q6
cmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TVVJMUmVxdWVzdCAqcmVkaXJlY3RlZFJlcXVl
c3QpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUocmVjZWl2ZWRSZWRpcmVjdCk7CisgICAgICAgIEFT
U0VSVF9GQUxTRShyZXNwb25zZVBvbGljeURlY2lkZWQpOworICAgICAgICBOU1N0cmluZyAqaHRt
bCA9IEAiPHNjcmlwdD53aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZSgnRG9jdW1lbnQgVVJMOiAnICsgZG9jdW1lbnQuVVJMKTs8L3NjcmlwdD4iOwor
ICAgICAgICBBU1NFUlRfU1RSRVEodGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4
U3RyaW5nLCAidGVzdGluZzovLy9yZWRpcmVjdGVkIik7CisgICAgICAgIFt0YXNrIGRpZFJlY2Vp
dmVSZXNwb25zZTpbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpodG1sLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF1dOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0
YTpbaHRtbCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgICAg
ICBbdGFzayBkaWRGaW5pc2hdOworICAgIH1dOworICAgIEFTU0VSVF9TVFJFUSh0YXNrLnJlcXVl
c3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJ0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQi
KTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0b3BVUkxTY2hl
bWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgQVNTRVJUX1RSVUUoZmFs
c2UpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOihudWxsX3Vuc3BlY2lmaWVk
IFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBBU1NFUlRfRkFMU0UocmVjZWl2ZWRS
ZWRpcmVjdCk7CisgICAgcmVjZWl2ZWRSZWRpcmVjdCA9IHRydWU7Cit9CisKKy0gKHZvaWQpd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9u
c2U6KFdLTmF2aWdhdGlvblJlc3BvbnNlICopbmF2aWdhdGlvblJlc3BvbnNlIGRlY2lzaW9uSGFu
ZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3kpKWRlY2lzaW9uSGFuZGxl
cgoreworICAgIEFTU0VSVF9UUlVFKHJlY2VpdmVkUmVkaXJlY3QpOworICAgIEFTU0VSVF9TVFJF
UShuYXZpZ2F0aW9uUmVzcG9uc2UucmVzcG9uc2UuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJp
bmcsICJ0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQiKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzcG9uc2VQ
b2xpY3lEZWNpZGVkKTsKKyAgICByZXNwb25zZVBvbGljeURlY2lkZWQgPSB0cnVlOworICAgIGRl
Y2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeUFsbG93KTsKK30KKworLSAo
dm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNl
ckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3Nh
Z2UgKiltZXNzYWdlCit7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiRG9jdW1lbnQgVVJMOiB0ZXN0
aW5nOi8vL3JlZGlyZWN0ZWQiLCBbbWVzc2FnZSBib2R5XSk7CisgICAgZG9uZSA9IHRydWU7Cit9
CitAZW5kCisKK1RFU1QoVVJMU2NoZW1lSGFuZGxlciwgUmVkaXJlY3Rpb24pCit7CisgICAgYXV0
byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbUmVkaXJlY3RTY2hlbWVIYW5k
bGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxl
cjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RpbmciXTsKKyAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5k
bGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmhhbmRsZXIuZ2V0KCldOworICAgIAorICAgIE5TVVJMUmVx
dWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJ0ZXN0aW5nOi8vL2luaXRpYWwiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6cmVxdWVzdF07CisgICAgCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KyAgICAKKyAgICBFWFBFQ1RfVFJVRShyZXNwb25zZVBvbGljeURlY2lkZWQpOworICAgIEVYUEVD
VF9TVFJFUSh3ZWJWaWV3LmdldCgpLlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nLCAidGVz
dGluZzovLy9yZWRpcmVjdGVkIik7Cit9CisKK1RFU1QoVVJMU2NoZW1lSGFuZGxlciwgRXhjZXB0
aW9ucykKK3sKKyAgICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgZXhlcmNpc2UgYWxsIHRoZSBp
bnZhbGlkIHN0YXRlIGV4Y2VwdGlvbnMgYSBXS1VSTFNjaGVtZUhhbmRsZXIgY2FuIHJhaXNlLgor
fQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313669</attachid>
            <date>2017-06-22 16:29:43 -0700</date>
            <delta_ts>2017-06-22 17:49:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173730-20170622162943.patch</filename>
            <type>text/plain</type>
            <size>41743</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSB0
byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhU
VFBGYW1pbHkpOgorICAgICAgICBBc3NlcnRpbmcgdGhhdCByZWRpcmVjdHMgYXJlIGFsd2F5cyBo
dHRwL2h0dHBzIFVSTHMgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICBJZiB0aGVyZSdzIGEg
Y3VzdG9tIHNjaGVtZSByZWRpcmVjdCwgZ2l2ZSBpdCBubyBmcmVzaG5lc3MgbGlmZXRpbWUgaW4g
dGhlIGNhY2hlLgorCiAyMDE3LTA2LTIxICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBz
b255LmNvbT4KIAogICAgICAgICBbQ3VybF0gRXh0cmFjdCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFz
IHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBjb21wdXRlRnJlc2huZQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9u
bzsKIAotICAgIEFTU0VSVChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
OworICAgIGlmICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gMHVzOwogCiAgICAgLy8gRnJlc2huZXNzIExpZmV0aW1lOgogICAgIC8vIGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzQjc2VjdGlvbi00LjIuMQpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTctMDYtMjIgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2No
ZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGFuIHVwY29taW5nIGZp
eCBmb3IgcmVkaXJlY3QgY2FsbGJhY2tzLCBhbmQgaXQgbWlnaHQgYmUKKyAgICAgICAgbmVjZXNz
YXJ5IGZvciBsb2FkaW5nIHdpdGggY3VzdG9tIHNjaGVtZXMgaW4gZ2VuZXJhbC4gUmlnaHQgbm93
IGp1c3QgcmVzcG9uZGluZyB3aXRoCisgICAgICAgICBhbiBIVFRQIDMwMS8zMDIvMzA3LzMwOCBy
ZXNwb25zZSBjb2RlIGRvZXNuJ3Qgd29yayBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAor
ICAgICAgICBzeW50aGVzaXplcyBhbiBOU1VSTFJlcXVlc3QgZnJvbSB0aGUgTG9jYXRpb24gaGVh
ZGVyIGxpa2Ugd2UgZG8gaW4gCisgICAgICAgIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0IGV0IGFsLiBmb3IgSFNUUywgCisg
ICAgICAgIGFuZCB0aGF0IHdvdWxkIHJlcXVpcmUgdXNpbmcgYW4gTlNIVFRQVVJMUmVzcG9uc2Ug
Zm9yIG5vbi1IVFRQIHJlc3BvbnNlcywgd2hpY2ggaXMgCisgICAgICAgIGNvbmNlcHR1YWxseSB3
cm9uZy4gIEluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBjb21wbGV0aW9uIGhhbmRsZXIgaW4gdGhl
IEFQSSwgd2UgYXJlCisgICAgICAgIGZvbGxvd2luZyB0aGUgcGF0dGVybiBvZiBXS05hdmlnYXRp
b25EZWxlZ2F0ZS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24KKyAgICAgICAgYW5kIGFsbG93aW5nIHRoZSBTUEkgdG8gaW5kaWNhdGUgdGhhdCBhIHJlZGly
ZWN0IGhhcyBoYXBwZW5lZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mCisgICAgICAgIFdlYktpdCwg
YnV0IG5vdCBhbGxvd2luZyB0aGUgU1BJIHRvIHdhaXQgZm9yIGEgcHJvY2Vzc2VkIHJlcXVlc3Qg
YW5kIHNsb3cgZG93biBsb2FkaW5nLgorCisgICAgICAgIFRoaXMgYWRkcyBXS1VSTFNjaGVtZVRh
c2tQcml2YXRlLl9kaWRQZXJmb3JtUmVkaXJlY3Rpb24gd2hpY2ggaXMgY292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW06CisgICAgICAgIChyYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKC1b
V0tVUkxTY2hlbWVUYXNrSW1wbCBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNj
aGVtZVRhc2tJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0
YXJ0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0b3BUYXNr
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
U2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cmxTY2hlbWVUYXNrRGlkUGVyZm9y
bVJlZGlyZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnRhc2tEaWRQZXJmb3JtUmVk
aXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFz
a1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRQ
ZXJmb3JtUmVkaXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxT
Y2hlbWVUYXNrUHJveHkuaDoKKwogMjAxNy0wNi0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBh
cHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgY2xlYXIgYXVkaW8gbXV0ZSB3aGVuIG11dGluZyBj
YXB0dXJlLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODc5LDIwICs2ODc5LDIwIEBAIFdlYlVSTFNjaGVt
ZUhhbmRsZXIqIFdlYlBhZ2VQcm94eTo6dXJsU2MKICAgICByZXR1cm4gbV91cmxTY2hlbWVIYW5k
bGVyc0J5U2NoZW1lLmdldChzY2hlbWUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRV
UkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fdXJsU2NoZW1lSGFuZGxl
cnNCeUlkZW50aWZpZXIuZmluZChoYW5kbGVySWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fdXJsU2NoZW1lSGFuZGxlcnNCeUlkZW50aWZpZXIuZW5kKCkpOwogCi0gICAgaXRl
cmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllciwgcmVxdWVz
dCk7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHRhc2tJZGVudGlmaWVy
LCByZXF1ZXN0KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmZpbmQoaGFuZGxlcklkZW50aWZpZXIpOwog
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmVu
ZCgpKTsKIAotICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRl
bnRpZmllcik7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdG9wVGFzaygqdGhpcywgdGFza0lkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXZvaWRzVW5zYWZlQXJlYShib29s
IGF2b2lkc1Vuc2FmZUFyZWEpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTksOCArMTU5OSw4IEBAIHByaXZhdGU6
CiAjZW5kaWYKICNlbmRpZgogCi0gICAgdm9pZCBzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3Qg
aGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBzdG9wVVJMU2NoZW1lVGFzayh1aW50
NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHN0YXJ0VVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWlu
dDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIHZvaWQgc3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVp
bnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhjb25zdCBVc2VyRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxODYzNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ5NSw2ICs0OTUsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAg
ICAgU2V0SXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMKGJvb2wgaXNVc2luZ0hpZ2hQZXJmb3Jt
YW5jZVdlYkdMKQogCi0gICAgU3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGxvYWRlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QpCi0gICAgU3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgbG9hZGVySWRlbnRp
ZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQorICAgIFN0YXJ0VVJMU2NoZW1lVGFz
ayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQorICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5j
cHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTcgKzQ4LDE3IEBAIFdlYlVS
TFNjaGVtZUhhbmRsZXI6On5XZWJVUkxTY2hlbWVIYW5kbGUKICAgICBBU1NFUlQobV90YXNrcy5p
c0VtcHR5KCkpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXI6OnN0YXJ0VGFzayhXZWJQ
YWdlUHJveHkmIHBhZ2UsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpzdGFydFRhc2so
V2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5hZGQocmVz
b3VyY2VJZGVudGlmaWVyLCBXZWJVUkxTY2hlbWVUYXNrOjpjcmVhdGUoKnRoaXMsIHBhZ2UsIHJl
c291cmNlSWRlbnRpZmllciwgcmVxdWVzdCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5h
ZGQodGFza0lkZW50aWZpZXIsIFdlYlVSTFNjaGVtZVRhc2s6OmNyZWF0ZSgqdGhpcywgcGFnZSwg
dGFza0lkZW50aWZpZXIsIHJlcXVlc3QpKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkp
OwogCiAgICAgcGxhdGZvcm1TdGFydFRhc2socGFnZSwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlcjo6c3RvcFRhc2soV2ViUGFnZVByb3h5JiBw
YWdlLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRs
ZXI6OnN0b3BUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3QgdGFza0lkZW50aWZpZXIp
CiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdGFza3MuZmluZChyZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rhc2tzLmZpbmQodGFza0lkZW50aWZpZXIpOwogICAg
IGlmIChpdGVyYXRvciA9PSBtX3Rhc2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhh
bmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB1
aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAg
ICB2b2lkIHN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgc3RvcFRhc2so
V2ViUGFnZVByb3h5JiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHN0
YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBzdG9wVGFzayhXZWJQYWdlUHJveHkm
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJVUkxTY2hl
bWVIYW5kbGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
VGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDU0ICs0OCw3NCBA
QCBXZWJVUkxTY2hlbWVUYXNrOjpXZWJVUkxTY2hlbWVUYXNrKFdlYlVSCiB7CiB9CiAKLVdlYlVS
TFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorYXV0byBXZWJVUkxTY2hl
bWVUYXNrOjpkaWRQZXJmb3JtUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
IHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSAtPiBFeGNlcHRp
b25UeXBlCiB7CiAgICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVt
ZVRhc2s6OkV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAKKyAgICBpZiAobV9jb21w
bGV0ZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxs
ZWQ7CisgICAgCisgICAgaWYgKG1fZGF0YVNlbnQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25U
eXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgCisgICAgaWYgKG1fcmVzcG9uc2VTZW50KQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRlclJlc3BvbnNlOworICAgIAor
ICAgIG1fcmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpVUkxTY2hlbWVUYXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKG1fdXJsU2NoZW1lSGFuZGxl
ci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3BvbnNlLCByZXF1ZXN0KSk7CisKKyAg
ICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Tm9uZTsKK30KKworYXV0byBXZWJVUkxTY2hlbWVUYXNr
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIC0+
IEV4Y2VwdGlvblR5cGUKK3sKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQot
ICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVB
bHJlYWR5Q2FsbGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJl
YWR5Q2FsbGVkOwogCiAgICAgaWYgKG1fZGF0YVNlbnQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgICAgIHJldHVy
biBFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CiAKICAgICBtX3Jlc3BvbnNlU2VudCA9
IHRydWU7CiAKICAgICByZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZvKCk7CiAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVUkxTY2hlbWVUYXNrRGlkUmVjZWl2ZVJlc3Bv
bnNlKG1fdXJsU2NoZW1lSGFuZGxlci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3Bv
bnNlKSk7Ci0gICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6Ok5vbmU7
CisgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6Ok5vbmU7CiB9CiAKLVdlYlVSTFNjaGVtZVRhc2s6
OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyKQorYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRSZWNlaXZlRGF0YShS
ZWY8U2hhcmVkQnVmZmVyPiBidWZmZXIpIC0+IEV4Y2VwdGlvblR5cGUKIHsKICAgICBpZiAobV9z
dG9wcGVkKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
VGFza0FscmVhZHlTdG9wcGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6VGFza0Fs
cmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQotICAgICAgICByZXR1cm4gV2Vi
VVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOwogCiAgICAg
aWYgKCFtX3Jlc3BvbnNlU2VudCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4
Y2VwdGlvblR5cGU6Ok5vUmVzcG9uc2VTZW50OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlw
ZTo6Tm9SZXNwb25zZVNlbnQ7CiAKICAgICBtX2RhdGFTZW50ID0gdHJ1ZTsKICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlRGF0YShtX3Vy
bFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBJUEM6OlNoYXJlZEJ1
ZmZlckRhdGFSZWZlcmVuY2UoYnVmZmVyLnB0cigpKSkpOwotICAgIHJldHVybiBXZWJVUkxTY2hl
bWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpO
b25lOwogfQogCi1XZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlIFdlYlVSTFNjaGVtZVRh
c2s6OmRpZENvbXBsZXRlKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorYXV0byBXZWJVUkxT
Y2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgLT4gRXhj
ZXB0aW9uVHlwZQogewogICAgIGlmIChtX3N0b3BwZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CiAKICAgICBpZiAobV9jb21w
bGV0ZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpD
b21wbGV0ZUFscmVhZHlDYWxsZWQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21w
bGV0ZUFscmVhZHlDYWxsZWQ7CiAKICAgICBpZiAoIW1fcmVzcG9uc2VTZW50ICYmIGVycm9yLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
Tm9SZXNwb25zZVNlbnQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNl
U2VudDsKIAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRDb21wbGV0ZShtX3VybFNjaGVtZUhhbmRsZXIt
PmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBlcnJvcikpOwotICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBl
OjpOb25lOwogfQogCiB2b2lkIFdlYlVSTFNjaGVtZVRhc2s6OnBhZ2VEZXN0cm95ZWQoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lv
biAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTIgQEAgcHVibGljOgogICAgIGVudW0gY2xh
c3MgRXhjZXB0aW9uVHlwZSB7CiAgICAgICAgIERhdGFBbHJlYWR5U2VudCwKICAgICAgICAgQ29t
cGxldGVBbHJlYWR5Q2FsbGVkLAorICAgICAgICBSZWRpcmVjdEFmdGVyUmVzcG9uc2UsCiAgICAg
ICAgIFRhc2tBbHJlYWR5U3RvcHBlZCwKICAgICAgICAgTm9SZXNwb25zZVNlbnQsCiAgICAgICAg
IE5vbmUsCiAgICAgfTsKKyAgICBFeGNlcHRpb25UeXBlIGRpZFBlcmZvcm1SZWRpcmVjdGlvbihX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsK
ICAgICBFeGNlcHRpb25UeXBlIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRSZWNlaXZlRGF0YShSZWY8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRDb21wbGV0ZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2luY2x1ZGUgIldlYlVSTFNjaGVtZVRhc2suaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCAiV2ViVVJMU2NoZW1l
VGFzay5oIgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTQxLDE2ICs0MiwxOSBAQCBzdGF0aWMgdm9pZCByYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5
KFdlCiAgICAgY2FzZSBXZWJLaXQ6OldlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6Ok5v
bmU6CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6
RXhjZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOgotICAgICAgICBbTlNFeGNlcHRpb24g
cmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiVGhpcyB0YXNr
IGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZCJdOworICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiVGhpcyB0YXNrIGhhcyBh
bHJlYWR5IGJlZW4gc3RvcHBlZC4iXTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJLaXQ6
OldlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6OkNvbXBsZXRlQWxyZWFkeUNhbGxlZDoK
LSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0
aW9uIGZvcm1hdDpAIltXS1VSTFNjaGVtZVRhc2sgdGFza0RpZENvbXBsZXRlV2l0aEVycm9yOl0g
aGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgdGFzayJdOworICAgICAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiW1dL
VVJMU2NoZW1lVGFzayB0YXNrRGlkQ29tcGxldGVXaXRoRXJyb3I6XSBoYXMgYWxyZWFkeSBiZWVu
IGNhbGxlZCBmb3IgdGhpcyB0YXNrLiJdOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYktp
dDo6V2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6RGF0YUFscmVhZHlTZW50OgotICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24g
Zm9ybWF0OkAiW1dLVVJMU2NoZW1lVGFzayB0YXNrRGlkUmVjZWl2ZURhdGE6XSBoYXMgYWxyZWFk
eSBiZWVuIGNhbGxlZCBmb3IgdGhpcyB0YXNrIl07CisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiBmb3JtYXQ6QCJbV0tVUkxTY2hlbWVU
YXNrIHRhc2tEaWRSZWNlaXZlRGF0YTpdIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlz
IHRhc2suIl07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViS2l0OjpXZWJVUkxTY2hlbWVU
YXNrOjpFeGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNlU2VudDoKLSAgICAgICAgW05TRXhjZXB0aW9u
IHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIk5vIHJlc3Bv
bnNlIGhhcyBiZWVuIHNlbnQgZm9yIHRoaXMgdGFzayJdOworICAgICAgICBbTlNFeGNlcHRpb24g
cmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiTm8gcmVzcG9u
c2UgaGFzIGJlZW4gc2VudCBmb3IgdGhpcyB0YXNrLiJdOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdlYktpdDo6V2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRl
clJlc3BvbnNlOgorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lz
dGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiTm8gcmVkaXJlY3RzIGFyZSBhbGxvd2VkIGFmdGVyIHRo
ZSByZXNwb25zZS4iXTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtODYsNiArOTAsMTIg
QEAgLSAodm9pZClkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJybwogICAgIHJhaXNlRXhj
ZXB0aW9uSWZOZWNlc3NhcnkocmVzdWx0KTsKIH0KIAorLSAodm9pZClfZGlkUGVyZm9ybVJlZGly
ZWN0aW9uOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdAoreworICAgIGF1dG8gcmVzdWx0ID0gX3VybFNjaGVtZVRhc2stPnRhc2soKS5k
aWRQZXJmb3JtUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVlc3QpOworICAgIHJhaXNlRXhjZXB0
aW9uSWZOZWNlc3NhcnkocmVzdWx0KTsKK30KKwogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3Rv
Y29sIGltcGxlbWVudGF0aW9uCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFza0ludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VS
TFNjaGVtZVRhc2tJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFza0ludGVybmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDE0ICsyMywxNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpbXBvcnQgIldLVVJMU2NoZW1lVGFzay5oIgorI2ltcG9ydCAiV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJ
VVJMU2NoZW1lVGFzay5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAotQGludGVyZmFjZSBXS1VS
TFNjaGVtZVRhc2tJbXBsIDogTlNPYmplY3QgPFdLVVJMU2NoZW1lVGFzaz4KK0BpbnRlcmZhY2Ug
V0tVUkxTY2hlbWVUYXNrSW1wbCA6IE5TT2JqZWN0IDxXS1VSTFNjaGVtZVRhc2tQcml2YXRlPgog
QGVuZAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrLmg+CisKKyNpZiBXS19BUElf
RU5BQkxFRAorCitXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKQorQHByb3RvY29sIFdLVVJMU2NoZW1lVGFza1ByaXZhdGUgPFdLVVJMU2NoZW1lVGFz
az4KKworLSAodm9pZClfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOihOU1VSTFJlc3BvbnNlICopcmVz
cG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdDsKKworQGVuZAorCisjZW5k
aWYKKwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYwLDYgKzExNjAs
NyBAQAogCQk1QzIwQ0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlC
MUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tICovOyB9OwogCQk1QzIw
Q0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAv
KiBOZXR3b3JrU2Vzc2lvbi5oICovOyB9OwogCQk1QzI5OERBMDFDM0RGMDIxMDA0NzBBRkUgLyog
UGVuZGluZ0Rvd25sb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi87
IH07CisJCTVDNjJGREY5MUVGQzI3MUMwMENFMDcyRSAvKiBXS1VSTFNjaGVtZVRhc2tQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzYyRkRG
ODFFRkMyNjNDMDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNzcwNjc0MUQxMTM4Mzgw
MDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29j
a2V0UHJvdmlkZXIuY3BwICovOyB9OwogCQk1Qzg1Qzc4ODFDM0YyM0NFMDA2MUE0RkEgLyogUGVu
ZGluZ0Rvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwICov
OyB9OwogCQk1QzlFNTY4MjFERjdGMUFCMDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU2ODAx
REY3RjA1NTAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmNwcCAqLzsgfTsKQEAgLTM0NDMs
NiArMzQ0NCw3IEBACiAJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lv
bkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29y
a1Nlc3Npb25Db2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjBDQjlFMUJCMERE
MTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyOThEOUUxQzNERUYyOTAw
NDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQZW5kaW5nRG93bmxvYWQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Q
ZW5kaW5nRG93bmxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM2MkZERjgx
RUZDMjYzQzAwQ0UwNzJFIC8qIFdLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuY3BwOyBw
YXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDN0M4OERDMUQwRjQxQTAwMDlEMkY2RCAvKiBXZWJTb2NrZXRQcm92aWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5oOyBw
YXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBlbmRpbmdEb3dubG9hZC5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MTgsNiArNTcyMCw3IEBACiAJCQkJNTFEMTI0
MkYxRTZERERENzAwMkIyODIwIC8qIFdLVVJMU2NoZW1lVGFzay5oICovLAogCQkJCTUxRDEyNDMw
MUU2RERERDcwMDJCMjgyMCAvKiBXS1VSTFNjaGVtZVRhc2subW0gKi8sCiAJCQkJNTFEMTI0Mzcx
RTZERkQyQTAwMkIyODIwIC8qIFdLVVJMU2NoZW1lVGFza0ludGVybmFsLmggKi8sCisJCQkJNUM2
MkZERjgxRUZDMjYzQzAwQ0UwNzJFIC8qIFdLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCAqLywKIAkJ
CQkxQUZBM0FDNzE4RTYxQzYxMDAzQ0NCQUUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaCAq
LywKIAkJCQkxQUZBM0FDNjE4RTYxQzYxMDAzQ0NCQUUgLyogV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIubW0gKi8sCiAJCQkJMUFBRjA4QTMxOTI2ODJEQTAwQjYzOTBDIC8qIFdLVXNlckNvbnRlbnRD
b250cm9sbGVySW50ZXJuYWwuaCAqLywKQEAgLTg5NDQsNiArODk0Nyw3IEBACiAJCQkJMzdGNjIz
QjgxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUM1NDI1NkI1MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1JbnB1dENvbnRyb2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1NDI1NkI3MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1QZXJpcGhlcmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzYyRkRGOTFFRkMyNzFDMDBDRTA3MkUgLyogV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QjgxOEJFQzE4QzAw
REU0MTc5IC8qIFdLRm9ybVBvcG92ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NDI1NkJBMThC
RUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxlY3RDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjA4Q0Y1MjFENjNDMTNBMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UGlja2VyLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkwNSwxMyArNTkwNSwyMSBA
QCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkqIFdlYlBhZ2U6OnVybFNjCiAKIHZvaWQgV2ViUGFn
ZTo6cmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBhdXRvIHNjaGVtZVJlc3VsdCA9IG1fc2NoZW1l
VG9VUkxTY2hlbWVIYW5kbGVyUHJveHlNYXAuYWRkKHNjaGVtZSwgc3RkOjptYWtlX3VuaXF1ZTxX
ZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk+KCp0aGlzLCBoYW5kbGVySWRlbnRpZmllcikpOworICAg
IGF1dG8gc2NoZW1lUmVzdWx0ID0gbV9zY2hlbWVUb1VSTFNjaGVtZUhhbmRsZXJQcm94eU1hcC5h
ZGQoc2NoZW1lLCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OmNyZWF0ZSgqdGhpcywgaGFuZGxl
cklkZW50aWZpZXIpKTsKICAgICBBU1NFUlQoc2NoZW1lUmVzdWx0LmlzTmV3RW50cnkpOwogCiAg
ICAgYXV0byBpZGVudGlmaWVyUmVzdWx0ID0gbV9pZGVudGlmaWVyVG9VUkxTY2hlbWVIYW5kbGVy
UHJveHlNYXAuYWRkKGhhbmRsZXJJZGVudGlmaWVyLCBzY2hlbWVSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmdldCgpKTsKICAgICBBU1NFUlRfVU5VU0VEKGlkZW50aWZpZXJSZXN1bHQsIGlkZW50aWZp
ZXJSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6dXJsU2NoZW1lVGFza0Rp
ZFBlcmZvcm1SZWRpcmVjdGlvbih1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3Qg
dGFza0lkZW50aWZpZXIsIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCkKK3sKKyAgICBhdXRvKiBoYW5kbGVyID0gbV9pZGVudGlmaWVyVG9VUkxT
Y2hlbWVIYW5kbGVyUHJveHlNYXAuZ2V0KGhhbmRsZXJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQo
aGFuZGxlcik7CisgICAgCisgICAgaGFuZGxlci0+dGFza0RpZFBlcmZvcm1SZWRpcmVjdGlvbih0
YXNrSWRlbnRpZmllciwgV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUocmVxdWVzdCkpOworfQor
ICAgIAogdm9pZCBXZWJQYWdlOjp1cmxTY2hlbWVUYXNrRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2
NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgYXV0byogaGFuZGxlciA9IG1faWRlbnRp
ZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwLmdldChoYW5kbGVySWRlbnRpZmllcik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlz
aW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNzYsNiArMTI3Niw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHJlZ2lzdGVyVVJMU2NoZW1lSGFuZGxlcih1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHNjaGVtZSk7CiAKKyAgICB2b2lkIHVybFNjaGVtZVRhc2tEaWRQZXJmb3JtUmVkaXJl
Y3Rpb24odWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
KTsKICAgICB2b2lkIHVybFNjaGVtZVRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgaGFu
ZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCB1cmxTY2hlbWVUYXNrRGlkUmVjZWl2ZURhdGEo
dWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICAgICB2b2lkIHVybFNjaGVtZVRhc2tEaWRDb21wbGV0
ZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKQEAgLTE1NjgsNyArMTU2OSw3IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgU3RyaW5nIG1fb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxkb3VibGU+IG1fY3B1TGltaXQ7CiAKLSAgICBIYXNoTWFw
PFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eT4+IG1fc2No
ZW1lVG9VUkxTY2hlbWVIYW5kbGVyUHJveHlNYXA7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk+PiBtX3NjaGVtZVRvVVJMU2NoZW1lSGFuZGxlclBy
b3h5TWFwOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSo+
IG1faWRlbnRpZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwOwogfTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNyArNDc1LDgg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAKICAgICBSZWdpc3RlclVS
TFNjaGVtZUhhbmRsZXIodWludDY0X3QgaWRlbnRpZmllciwgU3RyaW5nIHNjaGVtZSkKIAotICAg
IFVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgcHJvdmlkZXJJZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZSkKLSAgICBVUkxTY2hlbWVUYXNrRGlkUmVjZWl2ZURhdGEodWludDY0X3QgcHJvdmlk
ZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGEpCi0gICAgVVJMU2NoZW1lVGFza0RpZENvbXBsZXRlKHVpbnQ2NF90IHByb3ZpZGVySWRl
bnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IpCisgICAgVVJMU2NoZW1lVGFza0RpZFBlcmZvcm1SZWRpcmVjdGlvbih1aW50NjRfdCBo
YW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQor
ICAgIFVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlKQorICAgIFVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBoYW5k
bGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5j
ZSBkYXRhKQorICAgIFVSTFNjaGVtZVRhc2tEaWRDb21wbGV0ZSh1aW50NjRfdCBoYW5kbGVySWRl
bnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IpCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJM
U2NoZW1lSGFuZGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhh
bmRsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwyMSBAQCBXZWJVUkxT
Y2hlbWVIYW5kbGVyUHJveHk6On5XZWJVUkxTY2hlbWVICiAKIHZvaWQgV2ViVVJMU2NoZW1lSGFu
ZGxlclByb3h5OjpzdGFydE5ld1Rhc2soUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fdGFza3MuYWRkKGxvYWRlci5pZGVudGlmaWVyKCksIHN0ZDo6bWFrZV91
bmlxdWU8V2ViVVJMU2NoZW1lVGFza1Byb3h5PigqdGhpcywgbG9hZGVyKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBtX3Rhc2tzLmFkZChsb2FkZXIuaWRlbnRpZmllcigpLCBXZWJVUkxTY2hlbWVUYXNr
UHJveHk6OmNyZWF0ZSgqdGhpcywgbG9hZGVyKSk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc05ld0Vu
dHJ5KTsKIAogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkxvYWRlclN0cmF0ZWd5KCku
YWRkVVJMU2NoZW1lVGFza1Byb3h5KCpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5zdGFydExvYWRpbmcoKTsKIH0KIAordm9pZCBXZWJVUkxTY2hl
bWVIYW5kbGVyUHJveHk6OnRhc2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odWludDY0X3QgdGFza0lk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQoreworICAgIGF1dG8qIHRhc2sg
PSBtX3Rhc2tzLmdldCh0YXNrSWRlbnRpZmllcik7CisgICAgaWYgKCF0YXNrKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgdGFzay0+ZGlkUGVyZm9ybVJlZGlyZWN0aW9uKFdURk1vdmUocmVk
aXJlY3RSZXNwb25zZSksIFdURk1vdmUobmV3UmVxdWVzdCkpOworfQogCiB2b2lkIFdlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eTo6dGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCB0YXNrSWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDIxICsyNywyNSBAQAogCiAjaW5jbHVkZSAiV2ViVVJMU2NoZW1lVGFza1Byb3h5
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVz
b3VyY2VMb2FkZXI7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3Mg
V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkpOworY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5IDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5PiB7CiBwdWJsaWM6Ci0g
ICAgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5KFdlYlBhZ2UmLCB1aW50NjRfdCBpZGVudGlmaWVy
KTsKKyAgICBzdGF0aWMgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eT4gY3JlYXRlKFdlYlBh
Z2UmIHBhZ2UsIHVpbnQ2NF90IGlkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkocGFnZSwgaWRlbnRpZmllcikpOwor
ICAgIH0KICAgICB+V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5KCk7CiAKICAgICB2b2lkIHN0YXJ0
TmV3VGFzayhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDksMTYgKzUzLDE4IEBAIHB1
YmxpYzoKICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAgICAgV2ViUGFnZSYgcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZTsgfQogCisgICAg
dm9pZCB0YXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsK
ICAgICB2b2lkIHRhc2tEaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgdGFza0lkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIHRhc2tEaWRSZWNl
aXZlRGF0YSh1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgc2l6ZV90LCBjb25zdCB1aW50OF90KiBk
YXRhKTsKICAgICB2b2lkIHRhc2tEaWRDb21wbGV0ZSh1aW50NjRfdCB0YXNrSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgIHZvaWQgdGFza0RpZFN0b3BMb2Fk
aW5nKFdlYlVSTFNjaGVtZVRhc2tQcm94eSYpOwogCiBwcml2YXRlOgorICAgIFdlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eShXZWJQYWdlJiwgdWludDY0X3QgaWRlbnRpZmllcik7CiAgICAgV2ViUGFn
ZSYgbV93ZWJQYWdlOwogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllciB7IDAgfTsKIAotICAgIEhh
c2hNYXA8dW5zaWduZWQgbG9uZywgc3RkOjp1bmlxdWVfcHRyPFdlYlVSTFNjaGVtZVRhc2tQcm94
eT4+IG1fdGFza3M7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlVSTFNjaGVtZVRh
c2tQcm94eT4+IG1fdGFza3M7CiB9OyAvLyBjbGFzcyBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVS
TFNjaGVtZVRhc2tQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDMyIEBAIHZv
aWQgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpzdG9wTG9hZGluZygKICAgICAvLyBUaGlzIGxpbmUg
d2lsbCByZXN1bHQgaW4gdGhpcyBiZWluZyBkZWxldGVkLgogICAgIG1fdXJsU2NoZW1lSGFuZGxl
ci50YXNrRGlkU3RvcExvYWRpbmcoKnRoaXMpOwogfQorICAgIAordm9pZCBXZWJVUkxTY2hlbWVU
YXNrUHJveHk6OmRpZFBlcmZvcm1SZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkK
K3sKKyAgICBpZiAoIWhhc0xvYWRlcigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIG9yaWdpbmFsUmVxdWVzdCA9IHJlcXVlc3RdIChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0
KSB7CisgICAgICAgIG1fd2FpdGluZ0ZvclJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIgPSBmYWxz
ZTsKKyAgICAgICAgLy8gV2UgZG8gbm90IGluZm9ybSB0aGUgVUlQcm9jZXNzIG9mIFdlYktpdCdz
IG5ldyByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIHN1Z2dlc3RlZCByZXF1ZXN0LgorICAgICAgICAv
LyBXZSBkbyB3YW50IHRvIGtub3cgaWYgV2ViS2l0IHdvdWxkIGhhdmUgZ2VuZXJhdGVkIGEgcmVx
dWVzdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc3VnZ2VzdGVkIHJlcXVlc3QsIHRob3VnaC4KKyAg
ICAgICAgaWYgKHJlcXVlc3QudXJsKCkgIT0gb3JpZ2luYWxSZXF1ZXN0LnVybCgpKQorICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJSZWRpcmVjdGVkIHNjaGVtZSB0YXNrIHdvdWxkIGhhdmUgYmVl
biBzZW50IHRvIGEgZGlmZmVyZW50IFVSTC4iKTsKKyAgICB9OworICAgIAorICAgIGlmIChtX3dh
aXRpbmdGb3JSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBXVEZMb2dBbHdheXMo
IlJlY2VpdmVkIHJlZGlyZWN0IGR1cmluZyBwcmV2aW91cyByZWRpcmVjdCBwcm9jZXNzaW5nLiIp
OworICAgIG1fd2FpdGluZ0ZvclJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIgPSB0cnVlOworCisg
ICAgbV9jb3JlTG9hZGVyLT53aWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwgcmVkaXJl
Y3RSZXNwb25zZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQogCiB2b2lkIFdlYlVS
TFNjaGVtZVRhc2tQcm94eTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQogeworICAgIGlmIChtX3dhaXRpbmdGb3JSZWRpcmVjdENvbXBsZXRpb25I
YW5kbGVyKQorICAgICAgICBXVEZMb2dBbHdheXMoIlJlY2VpdmVkIHJlc3BvbnNlIGR1cmluZyBy
ZWRpcmVjdCBwcm9jZXNzaW5nLiIpOworICAgIAogICAgIGlmICghaGFzTG9hZGVyKCkpCiAgICAg
ICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlVSTFNjaGVtZVRhc2tQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaAkocmV2aXNpb24gMjE4NjM1KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTM3
LDE2ICszOCwxOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViVVJMU2NoZW1lSGFu
ZGxlclByb3h5OwogCi1jbGFzcyBXZWJVUkxTY2hlbWVUYXNrUHJveHkgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYlVSTFNjaGVtZVRhc2tQcm94eSk7CitjbGFzcyBXZWJVUkxTY2hlbWVU
YXNrUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVUkxTY2hlbWVUYXNrUHJveHk+IHsKIHB1
YmxpYzoKLSAgICBXZWJVUkxTY2hlbWVUYXNrUHJveHkoV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5
JiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXImKTsKLQorICAgIHN0YXRpYyBSZWY8V2ViVVJMU2No
ZW1lVGFza1Byb3h5PiBjcmVhdGUoV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5JiBoYW5kbGVyLCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViVVJMU2NoZW1lVGFza1Byb3h5KGhhbmRsZXIsIGxvYWRlcikpOworICAg
IH0KKyAgICAKICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0KIAogICAgIHZvaWQgc3RhcnRMb2FkaW5nKCk7CiAg
ICAgdm9pZCBzdG9wTG9hZGluZygpOwogCisgICAgdm9pZCBkaWRQZXJmb3JtUmVkaXJlY3Rpb24o
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7
CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoc2l6ZV90LCBjb25zdCB1aW50OF90KiBk
YXRhKTsKICAgICB2b2lkIGRpZENvbXBsZXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
KTsKQEAgLTU0LDEyICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6CisgICAgV2Vi
VVJMU2NoZW1lVGFza1Byb3h5KFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSYsIFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyJik7CiAgICAgYm9vbCBoYXNMb2FkZXIoKTsKIAogICAgIFdlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eSYgbV91cmxTY2hlbWVIYW5kbGVyOwogICAgIFJlZlB0cjxXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcj4gbV9jb3JlTG9hZGVyOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCBtX3JlcXVlc3Q7CiAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7CisgICAgYm9vbCBt
X3dhaXRpbmdGb3JSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyIHsgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjE4NzA5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDYtMjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2NoZW1l
VGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVUkxTY2hl
bWVIYW5kbGVyLTEubW06CisgICAgICAgICgtW1NjaGVtZUhhbmRsZXIgd2ViVmlldzpzdGFydFVS
TFNjaGVtZVRhc2s6XSk6CisgICAgICAgICgtW1NjaGVtZUhhbmRsZXIgd2ViVmlldzpzdG9wVVJM
U2NoZW1lVGFzazpdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVt
ZUhhbmRsZXIgd2ViVmlldzpzdGFydFVSTFNjaGVtZVRhc2s6XSk6CisgICAgICAgICgtW1JlZGly
ZWN0U2NoZW1lSGFuZGxlciB3ZWJWaWV3OnN0b3BVUkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAo
LVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmlldzpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb246XSk6CisgICAgICAgICgtW1JlZGlyZWN0U2NoZW1lSGFu
ZGxlciB3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZTpkZWNpc2lvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1JlZGlyZWN0U2NoZW1lSGFuZGxlciB1c2VyQ29udGVudENv
bnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisKIDIwMTctMDYtMjIgIE1hdHQg
TGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMjE4NjMzLgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29j
b2EvV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0JKHJldmlzaW9u
IDIxODYzNSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVVJM
U2NoZW1lSGFuZGxlci0xLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgsMTQgQEAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVU
YXNrLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBXS19BUElfRU5B
QkxFRAogCi1zdGF0aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1lc3NhZ2U7CitzdGF0aWMgYm9vbCBk
b25lOwogCiBAaW50ZXJmYWNlIFNjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVI
YW5kbGVyPgogQHByb3BlcnR5IChyZWFkb25seSkgTlNNdXRhYmxlQXJyYXk8TlNVUkwgKj4gKnN0
YXJ0ZWRVUkxzOwpAQCAtNzYsNyArNzYsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgc3RhCiAgICAgLy8gQWx3YXlzIGZhaWwgdGhlIGltYWdlIGxvYWQuCiAgICAgaWYg
KFt0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAInRlc3Rp
bmc6aW1hZ2UiXSkgewogICAgICAgICBbdGFzayBkaWRGYWlsV2l0aEVycm9yOltOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpAIlRlc3RXZWJLaXRBUEkiIGNvZGU6MSB1c2VySW5mbzpuaWxdXTsKLSAg
ICAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICAgICAgZG9uZSA9IHRydWU7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAgLSAodm9pZCl3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0bwogewogICAgIFtfc3RvcHBlZFVSTHMgYWRkT2Jq
ZWN0OnRhc2sucmVxdWVzdC5VUkxdOwogCi0gICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1
ZTsKKyAgICBkb25lID0gdHJ1ZTsKIH0KIAogQGVuZApAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyIG1haW5CeXRlc1tdID0KIAogVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBCYXNp
YykKIHsKLSAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBkb25lID0gZmFs
c2U7CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKQEAg
LTExNCw3ICsxMTQsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIEJhc2ljKQogICAgIE5TVVJM
UmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOm1haW4iXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
cmVxdWVzdF07CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0
TWVzc2FnZSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIEVY
UEVDVF9FUShbaGFuZGxlci5nZXQoKS5zdGFydGVkVVJMcyBjb3VudF0sIDJ1KTsKICAgICBFWFBF
Q1RfVFJVRShbW2hhbmRsZXIuZ2V0KCkuc3RhcnRlZFVSTHMgb2JqZWN0QXRJbmRleDowXSBpc0Vx
dWFsOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzptYWluIl1dKTsKQEAgLTEyNyw3ICsx
MjcsNyBAQCBURVNUKFVSTFNjaGVtZUhhbmRsZXIsIE5vTUlNRVR5cGUpCiAgICAgLy8gU2luY2Ug
dGhlcmUncyBubyBNSU1FVHlwZSwgYW5kIG5vIE5hdmlnYXRpb25EZWxlZ2F0ZSB0byB0ZWxsIFdl
YktpdCB0byBkbyB0aGUgbG9hZCBhbnl3YXlzLCBXZWJLaXQgd2lsbCBpZ25vcmUgKHNpbGVudGx5
IGZhaWwpIHRoZSBsb2FkLgogICAgIC8vIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgaXMgY29t
bXVuaWNhdGVkIGJhY2sgdG8gdGhlIFVSTFNjaGVtZUhhbmRsZXIuCiAKLSAgICByZWNlaXZlZFNj
cmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBkb25lID0gZmFsc2U7CiAKICAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCBURVNU
KFVSTFNjaGVtZUhhbmRsZXIsIE5vTUlNRVR5cGUpCiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0
ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRl
c3Rpbmc6bWFpbiJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKIAotICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAgICAgRVhQRUNUX0VRKFtoYW5kbGVy
LmdldCgpLnN0YXJ0ZWRVUkxzIGNvdW50XSwgMXUpOwogICAgIEVYUEVDVF9UUlVFKFtbaGFuZGxl
ci5nZXQoKS5zdGFydGVkVVJMcyBvYmplY3RBdEluZGV4OjBdIGlzRXF1YWw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJ0ZXN0aW5nOm1haW4iXV0pOwpAQCAtMTkxLDUgKzE5MSw3NiBAQCBURVNUKFVS
TFNjaGVtZUhhbmRsZXIsIEJ1aWx0aW5TY2hlbWVzKQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wg
cmVjZWl2ZWRSZWRpcmVjdDsKK3N0YXRpYyBib29sIHJlc3BvbnNlUG9saWN5RGVjaWRlZDsKKwor
QGludGVyZmFjZSBSZWRpcmVjdFNjaGVtZUhhbmRsZXIgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVI
YW5kbGVyLCBXS05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFJlZGlyZWN0U2NoZW1lSGFuZGxlciB7IH0KKworLSAodm9p
ZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0YXJ0VVJMU2NoZW1lVGFzazooaWQgPFdL
VVJMU2NoZW1lVGFzaz4pdGFzaworeworICAgIEFTU0VSVF9TVFJFUSh0YXNrLnJlcXVlc3QuVVJM
LmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJ0ZXN0aW5nOi8vL2luaXRpYWwiKTsKKyAgICBO
U1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRo
VVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6bmlsIGV4cGVjdGVkQ29udGVudExlbmd0aDow
IHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV07CisgICAgTlNVUkxSZXF1ZXN0ICpy
ZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAInRlc3Rpbmc6Ly8vcmVkaXJlY3RlZCJdXTsKKyAgICBbKGlkPFdLVVJMU2NoZW1lVGFza1By
aXZhdGU+KXRhc2sgX2RpZFBlcmZvcm1SZWRpcmVjdGlvbjpyZXNwb25zZSBuZXdSZXF1ZXN0OnJl
cXVlc3RdOworICAgIEFTU0VSVF9GQUxTRShyZWNlaXZlZFJlZGlyZWN0KTsKKyAgICBBU1NFUlRf
U1RSRVEodGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nLCAidGVzdGlu
ZzovLy9yZWRpcmVjdGVkIik7CisgICAgTlNTdHJpbmcgKmh0bWwgPSBAIjxzY3JpcHQ+d2luZG93
LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ0RvY3VtZW50
IFVSTDogJyArIGRvY3VtZW50LlVSTCk7PC9zY3JpcHQ+IjsKKyAgICBbdGFzayBkaWRSZWNlaXZl
UmVzcG9uc2U6W1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3Qu
VVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6aHRtbC5sZW5n
dGggdGV4dEVuY29kaW5nTmFtZTpuaWxdXTsKKyAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbaHRt
bCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFt0YXNrIGRp
ZEZpbmlzaF07Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdG9w
VVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdGFzaworeworICAgIEFTU0VSVF9U
UlVFKGZhbHNlKTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjoobnVsbF91bnNw
ZWNpZmllZCBXS05hdmlnYXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgQVNTRVJUX0ZBTFNFKHJl
Y2VpdmVkUmVkaXJlY3QpOworICAgIHJlY2VpdmVkUmVkaXJlY3QgPSB0cnVlOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
blJlc3BvbnNlOihXS05hdmlnYXRpb25SZXNwb25zZSAqKW5hdmlnYXRpb25SZXNwb25zZSBkZWNp
c2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5KSlkZWNpc2lv
bkhhbmRsZXIKK3sKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlZFJlZGlyZWN0KTsKKyAgICBBU1NF
UlRfU1RSRVEobmF2aWdhdGlvblJlc3BvbnNlLnJlc3BvbnNlLlVSTC5hYnNvbHV0ZVN0cmluZy5V
VEY4U3RyaW5nLCAidGVzdGluZzovLy9yZWRpcmVjdGVkIik7CisgICAgQVNTRVJUX0ZBTFNFKHJl
c3BvbnNlUG9saWN5RGVjaWRlZCk7CisgICAgcmVzcG9uc2VQb2xpY3lEZWNpZGVkID0gdHJ1ZTsK
KyAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3lBbGxvdyk7Cit9
CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxl
ciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3Jp
cHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIEVYUEVDVF9XS19TVFJFUShAIkRvY3VtZW50IFVS
TDogdGVzdGluZzovLy9yZWRpcmVjdGVkIiwgW21lc3NhZ2UgYm9keV0pOworICAgIGRvbmUgPSB0
cnVlOworfQorQGVuZAorCitURVNUKFVSTFNjaGVtZUhhbmRsZXIsIFJlZGlyZWN0aW9uKQorewor
ICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW1JlZGlyZWN0U2No
ZW1lSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVt
ZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0aW5nIl07CisgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3
ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpoYW5kbGVyLmdldCgpXTsKKyAgICAKKyAgICBO
U1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovLy9pbml0aWFsIl1dOworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7CisgICAgCisgICAgRVhQRUNUX1RSVUUocmVzcG9uc2VQb2xpY3lEZWNpZGVkKTsKKyAg
ICBFWFBFQ1RfU1RSRVEod2ViVmlldy5nZXQoKS5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmlu
ZywgInRlc3Rpbmc6Ly8vcmVkaXJlY3RlZCIpOworfQorCitURVNUKFVSTFNjaGVtZUhhbmRsZXIs
IEV4Y2VwdGlvbnMpCit7CisgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGV4ZXJjaXNlIGFs
bCB0aGUgaW52YWxpZCBzdGF0ZSBleGNlcHRpb25zIGEgV0tVUkxTY2hlbWVIYW5kbGVyIGNhbiBy
YWlzZS4KK30KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313678</attachid>
            <date>2017-06-22 17:49:52 -0700</date>
            <delta_ts>2017-06-22 23:25:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173730-20170622174952.patch</filename>
            <type>text/plain</type>
            <size>44161</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSB0
byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhU
VFBGYW1pbHkpOgorICAgICAgICBBc3NlcnRpbmcgdGhhdCByZWRpcmVjdHMgYXJlIGFsd2F5cyBo
dHRwL2h0dHBzIFVSTHMgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICBJZiB0aGVyZSdzIGEg
Y3VzdG9tIHNjaGVtZSByZWRpcmVjdCwgZ2l2ZSBpdCBubyBmcmVzaG5lc3MgbGlmZXRpbWUgaW4g
dGhlIGNhY2hlLgorCiAyMDE3LTA2LTIxICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBz
b255LmNvbT4KIAogICAgICAgICBbQ3VybF0gRXh0cmFjdCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFz
IHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBjb21wdXRlRnJlc2huZQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9u
bzsKIAotICAgIEFTU0VSVChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
OworICAgIGlmICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gMHVzOwogCiAgICAgLy8gRnJlc2huZXNzIExpZmV0aW1lOgogICAgIC8vIGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzQjc2VjdGlvbi00LjIuMQpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTctMDYtMjIgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2No
ZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGFuIHVwY29taW5nIGZp
eCBmb3IgcmVkaXJlY3QgY2FsbGJhY2tzLCBhbmQgaXQgbWlnaHQgYmUKKyAgICAgICAgbmVjZXNz
YXJ5IGZvciBsb2FkaW5nIHdpdGggY3VzdG9tIHNjaGVtZXMgaW4gZ2VuZXJhbC4gUmlnaHQgbm93
IGp1c3QgcmVzcG9uZGluZyB3aXRoCisgICAgICAgICBhbiBIVFRQIDMwMS8zMDIvMzA3LzMwOCBy
ZXNwb25zZSBjb2RlIGRvZXNuJ3Qgd29yayBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAor
ICAgICAgICBzeW50aGVzaXplcyBhbiBOU1VSTFJlcXVlc3QgZnJvbSB0aGUgTG9jYXRpb24gaGVh
ZGVyIGxpa2Ugd2UgZG8gaW4gCisgICAgICAgIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0IGV0IGFsLiBmb3IgSFNUUywgCisg
ICAgICAgIGFuZCB0aGF0IHdvdWxkIHJlcXVpcmUgdXNpbmcgYW4gTlNIVFRQVVJMUmVzcG9uc2Ug
Zm9yIG5vbi1IVFRQIHJlc3BvbnNlcywgd2hpY2ggaXMgCisgICAgICAgIGNvbmNlcHR1YWxseSB3
cm9uZy4gIEluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBjb21wbGV0aW9uIGhhbmRsZXIgaW4gdGhl
IEFQSSwgd2UgYXJlCisgICAgICAgIGZvbGxvd2luZyB0aGUgcGF0dGVybiBvZiBXS05hdmlnYXRp
b25EZWxlZ2F0ZS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24KKyAgICAgICAgYW5kIGFsbG93aW5nIHRoZSBTUEkgdG8gaW5kaWNhdGUgdGhhdCBhIHJlZGly
ZWN0IGhhcyBoYXBwZW5lZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mCisgICAgICAgIFdlYktpdCwg
YnV0IG5vdCBhbGxvd2luZyB0aGUgU1BJIHRvIHdhaXQgZm9yIGEgcHJvY2Vzc2VkIHJlcXVlc3Qg
YW5kIHNsb3cgZG93biBsb2FkaW5nLgorCisgICAgICAgIFRoaXMgYWRkcyBXS1VSTFNjaGVtZVRh
c2tQcml2YXRlLl9kaWRQZXJmb3JtUmVkaXJlY3Rpb24gd2hpY2ggaXMgY292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW06CisgICAgICAgIChyYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKC1b
V0tVUkxTY2hlbWVUYXNrSW1wbCBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNj
aGVtZVRhc2tJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0
YXJ0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0b3BUYXNr
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
U2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cmxTY2hlbWVUYXNrRGlkUGVyZm9y
bVJlZGlyZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnRhc2tEaWRQZXJmb3JtUmVk
aXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFz
a1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRQ
ZXJmb3JtUmVkaXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxT
Y2hlbWVUYXNrUHJveHkuaDoKKwogMjAxNy0wNi0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBh
cHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgY2xlYXIgYXVkaW8gbXV0ZSB3aGVuIG11dGluZyBj
YXB0dXJlLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODc5LDIwICs2ODc5LDIwIEBAIFdlYlVSTFNjaGVt
ZUhhbmRsZXIqIFdlYlBhZ2VQcm94eTo6dXJsU2MKICAgICByZXR1cm4gbV91cmxTY2hlbWVIYW5k
bGVyc0J5U2NoZW1lLmdldChzY2hlbWUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRV
UkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fdXJsU2NoZW1lSGFuZGxl
cnNCeUlkZW50aWZpZXIuZmluZChoYW5kbGVySWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fdXJsU2NoZW1lSGFuZGxlcnNCeUlkZW50aWZpZXIuZW5kKCkpOwogCi0gICAgaXRl
cmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllciwgcmVxdWVz
dCk7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHRhc2tJZGVudGlmaWVy
LCByZXF1ZXN0KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmZpbmQoaGFuZGxlcklkZW50aWZpZXIpOwog
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmVu
ZCgpKTsKIAotICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRl
bnRpZmllcik7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdG9wVGFzaygqdGhpcywgdGFza0lkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXZvaWRzVW5zYWZlQXJlYShib29s
IGF2b2lkc1Vuc2FmZUFyZWEpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTksOCArMTU5OSw4IEBAIHByaXZhdGU6
CiAjZW5kaWYKICNlbmRpZgogCi0gICAgdm9pZCBzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3Qg
aGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBzdG9wVVJMU2NoZW1lVGFzayh1aW50
NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHN0YXJ0VVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWlu
dDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIHZvaWQgc3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVp
bnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhjb25zdCBVc2VyRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxODYzNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ5NSw2ICs0OTUsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAg
ICAgU2V0SXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMKGJvb2wgaXNVc2luZ0hpZ2hQZXJmb3Jt
YW5jZVdlYkdMKQogCi0gICAgU3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGxvYWRlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QpCi0gICAgU3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgbG9hZGVySWRlbnRp
ZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQorICAgIFN0YXJ0VVJMU2NoZW1lVGFz
ayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQorICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5j
cHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTcgKzQ4LDE3IEBAIFdlYlVS
TFNjaGVtZUhhbmRsZXI6On5XZWJVUkxTY2hlbWVIYW5kbGUKICAgICBBU1NFUlQobV90YXNrcy5p
c0VtcHR5KCkpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXI6OnN0YXJ0VGFzayhXZWJQ
YWdlUHJveHkmIHBhZ2UsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpzdGFydFRhc2so
V2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5hZGQocmVz
b3VyY2VJZGVudGlmaWVyLCBXZWJVUkxTY2hlbWVUYXNrOjpjcmVhdGUoKnRoaXMsIHBhZ2UsIHJl
c291cmNlSWRlbnRpZmllciwgcmVxdWVzdCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5h
ZGQodGFza0lkZW50aWZpZXIsIFdlYlVSTFNjaGVtZVRhc2s6OmNyZWF0ZSgqdGhpcywgcGFnZSwg
dGFza0lkZW50aWZpZXIsIHJlcXVlc3QpKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkp
OwogCiAgICAgcGxhdGZvcm1TdGFydFRhc2socGFnZSwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlcjo6c3RvcFRhc2soV2ViUGFnZVByb3h5JiBw
YWdlLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRs
ZXI6OnN0b3BUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3QgdGFza0lkZW50aWZpZXIp
CiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdGFza3MuZmluZChyZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rhc2tzLmZpbmQodGFza0lkZW50aWZpZXIpOwogICAg
IGlmIChpdGVyYXRvciA9PSBtX3Rhc2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhh
bmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB1
aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAg
ICB2b2lkIHN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgc3RvcFRhc2so
V2ViUGFnZVByb3h5JiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHN0
YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBzdG9wVGFzayhXZWJQYWdlUHJveHkm
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJVUkxTY2hl
bWVIYW5kbGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
VGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDU0ICs0OCw3NCBA
QCBXZWJVUkxTY2hlbWVUYXNrOjpXZWJVUkxTY2hlbWVUYXNrKFdlYlVSCiB7CiB9CiAKLVdlYlVS
TFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorYXV0byBXZWJVUkxTY2hl
bWVUYXNrOjpkaWRQZXJmb3JtUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
IHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSAtPiBFeGNlcHRp
b25UeXBlCiB7CiAgICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVt
ZVRhc2s6OkV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAKKyAgICBpZiAobV9jb21w
bGV0ZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxs
ZWQ7CisgICAgCisgICAgaWYgKG1fZGF0YVNlbnQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25U
eXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgCisgICAgaWYgKG1fcmVzcG9uc2VTZW50KQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRlclJlc3BvbnNlOworICAgIAor
ICAgIG1fcmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpVUkxTY2hlbWVUYXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKG1fdXJsU2NoZW1lSGFuZGxl
ci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3BvbnNlLCByZXF1ZXN0KSk7CisKKyAg
ICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Tm9uZTsKK30KKworYXV0byBXZWJVUkxTY2hlbWVUYXNr
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIC0+
IEV4Y2VwdGlvblR5cGUKK3sKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQot
ICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVB
bHJlYWR5Q2FsbGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJl
YWR5Q2FsbGVkOwogCiAgICAgaWYgKG1fZGF0YVNlbnQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgICAgIHJldHVy
biBFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CiAKICAgICBtX3Jlc3BvbnNlU2VudCA9
IHRydWU7CiAKICAgICByZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZvKCk7CiAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVUkxTY2hlbWVUYXNrRGlkUmVjZWl2ZVJlc3Bv
bnNlKG1fdXJsU2NoZW1lSGFuZGxlci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3Bv
bnNlKSk7Ci0gICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6Ok5vbmU7
CisgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6Ok5vbmU7CiB9CiAKLVdlYlVSTFNjaGVtZVRhc2s6
OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyKQorYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRSZWNlaXZlRGF0YShS
ZWY8U2hhcmVkQnVmZmVyPiBidWZmZXIpIC0+IEV4Y2VwdGlvblR5cGUKIHsKICAgICBpZiAobV9z
dG9wcGVkKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
VGFza0FscmVhZHlTdG9wcGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6VGFza0Fs
cmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQotICAgICAgICByZXR1cm4gV2Vi
VVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOwogCiAgICAg
aWYgKCFtX3Jlc3BvbnNlU2VudCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4
Y2VwdGlvblR5cGU6Ok5vUmVzcG9uc2VTZW50OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlw
ZTo6Tm9SZXNwb25zZVNlbnQ7CiAKICAgICBtX2RhdGFTZW50ID0gdHJ1ZTsKICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlRGF0YShtX3Vy
bFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBJUEM6OlNoYXJlZEJ1
ZmZlckRhdGFSZWZlcmVuY2UoYnVmZmVyLnB0cigpKSkpOwotICAgIHJldHVybiBXZWJVUkxTY2hl
bWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpO
b25lOwogfQogCi1XZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlIFdlYlVSTFNjaGVtZVRh
c2s6OmRpZENvbXBsZXRlKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorYXV0byBXZWJVUkxT
Y2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgLT4gRXhj
ZXB0aW9uVHlwZQogewogICAgIGlmIChtX3N0b3BwZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CiAKICAgICBpZiAobV9jb21w
bGV0ZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpD
b21wbGV0ZUFscmVhZHlDYWxsZWQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21w
bGV0ZUFscmVhZHlDYWxsZWQ7CiAKICAgICBpZiAoIW1fcmVzcG9uc2VTZW50ICYmIGVycm9yLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
Tm9SZXNwb25zZVNlbnQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNl
U2VudDsKIAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRDb21wbGV0ZShtX3VybFNjaGVtZUhhbmRsZXIt
PmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBlcnJvcikpOwotICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBl
OjpOb25lOwogfQogCiB2b2lkIFdlYlVSTFNjaGVtZVRhc2s6OnBhZ2VEZXN0cm95ZWQoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lv
biAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTIgQEAgcHVibGljOgogICAgIGVudW0gY2xh
c3MgRXhjZXB0aW9uVHlwZSB7CiAgICAgICAgIERhdGFBbHJlYWR5U2VudCwKICAgICAgICAgQ29t
cGxldGVBbHJlYWR5Q2FsbGVkLAorICAgICAgICBSZWRpcmVjdEFmdGVyUmVzcG9uc2UsCiAgICAg
ICAgIFRhc2tBbHJlYWR5U3RvcHBlZCwKICAgICAgICAgTm9SZXNwb25zZVNlbnQsCiAgICAgICAg
IE5vbmUsCiAgICAgfTsKKyAgICBFeGNlcHRpb25UeXBlIGRpZFBlcmZvcm1SZWRpcmVjdGlvbihX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsK
ICAgICBFeGNlcHRpb25UeXBlIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRSZWNlaXZlRGF0YShSZWY8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRDb21wbGV0ZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2luY2x1ZGUgIldlYlVSTFNjaGVtZVRhc2suaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCAiV2ViVVJMU2NoZW1l
VGFzay5oIgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTUyLDYgKzUzLDkgQEAgc3RhdGljIHZvaWQgcmFpc2VFeGNlcHRpb25JZk5lY2Vzc2FyeShX
ZQogICAgIGNhc2UgV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb1Jl
c3BvbnNlU2VudDoKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNp
c3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIk5vIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQgZm9yIHRo
aXMgdGFzayJdOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdDo6V2ViVVJMU2NoZW1l
VGFzazo6RXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRlclJlc3BvbnNlOgorICAgICAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAi
Tm8gcmVkaXJlY3RzIGFyZSBhbGxvd2VkIGFmdGVyIHRoZSByZXNwb25zZSJdOworICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTg2LDYgKzkwLDEyIEBAIC0gKHZvaWQpZGlkRmFpbFdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm8KICAgICByYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KHJlc3Vs
dCk7CiB9CiAKKy0gKHZvaWQpX2RpZFBlcmZvcm1SZWRpcmVjdGlvbjooTlNVUkxSZXNwb25zZSAq
KXJlc3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IF91cmxTY2hlbWVUYXNrLT50YXNrKCkuZGlkUGVyZm9ybVJlZGlyZWN0aW9uKHJl
c3BvbnNlLCByZXF1ZXN0KTsKKyAgICByYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KHJlc3VsdCk7
Cit9CisKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCiAt
IChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRhc2tJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrSW50ZXJuYWwuaAko
cmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VSTFNjaGVtZVRhc2tJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNCArMjMsMTQg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJX
S1VSTFNjaGVtZVRhc2suaCIKKyNpbXBvcnQgIldLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCIKIAog
I2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSVVSTFNjaGVtZVRhc2suaCIKICNpbXBv
cnQgIldLT2JqZWN0LmgiCiAKLUBpbnRlcmZhY2UgV0tVUkxTY2hlbWVUYXNrSW1wbCA6IE5TT2Jq
ZWN0IDxXS1VSTFNjaGVtZVRhc2s+CitAaW50ZXJmYWNlIFdLVVJMU2NoZW1lVGFza0ltcGwgOiBO
U09iamVjdCA8V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZT4KIEBlbmQKIAogbmFtZXNwYWNlIFdlYktp
dCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1l
VGFza1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lVGFzay5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bwcm90b2NvbCBXS1VS
TFNjaGVtZVRhc2tQcml2YXRlIDxXS1VSTFNjaGVtZVRhc2s+CisKKy0gKHZvaWQpX2RpZFBlcmZv
cm1SZWRpcmVjdGlvbjooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3Q7CisKK0BlbmQKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIx
ODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE2MCw2ICsxMTYwLDcgQEAKIAkJNUMyMENCOUQxQkIwRENG
QTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0
d29ya1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKIAkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8q
IE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLzsg
fTsKIAkJNUMyOThEQTAxQzNERjAyMTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyOThEOUUxQzNERUYy
OTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oICovOyB9OworCQk1QzYyRkRGOTFFRkMyNzFD
MDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM2MkZERjgxRUZDMjYzQzAwQ0UwNzJFIC8qIFdL
VVJMU2NoZW1lVGFza1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1Qzc3MDY3NDFEMTEzODM4MDAxMjcwMEYgLyogV2ViU29ja2V0UHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM3NzA2NzMxRDExMUQ4QjAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCAqLzsgfTsK
IAkJNUM4NUM3ODgxQzNGMjNDRTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzg1Qzc4NjFDM0YyM0M1
MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLzsgfTsKIAkJNUM5RTU2ODIxREY3RjFB
QjAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgwMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dl
YnNpdGVQb2xpY2llcy5jcHAgKi87IH07CkBAIC0zNDQzLDYgKzM0NDQsNyBAQAogCQk1QzIwQ0I5
QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uQ29jb2EubW07IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb24u
aDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxv
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGVuZGluZ0Rvd25sb2FkLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAvKiBXS1VS
TFNjaGVtZVRhc2tQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVVJMU2NoZW1lVGFza1ByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3NzA2NzMxRDExMUQ4QjAwMTI3
MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYlNvY2tldFByb3ZpZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFEMEY0
MUEwMDA5RDJGNkQgLyogV2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNGMjND
NTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzE4LDYgKzU3MjAsNyBAQAogCQkJCTUxRDEyNDJGMUU2RERERDcwMDJCMjgyMCAvKiBX
S1VSTFNjaGVtZVRhc2suaCAqLywKIAkJCQk1MUQxMjQzMDFFNkREREQ3MDAyQjI4MjAgLyogV0tV
UkxTY2hlbWVUYXNrLm1tICovLAogCQkJCTUxRDEyNDM3MUU2REZEMkEwMDJCMjgyMCAvKiBXS1VS
TFNjaGVtZVRhc2tJbnRlcm5hbC5oICovLAorCQkJCTVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAv
KiBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmggKi8sCiAJCQkJMUFGQTNBQzcxOEU2MUM2MTAwM0ND
QkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8sCiAJCQkJMUFGQTNBQzYxOEU2MUM2
MTAwM0NDQkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tICovLAogCQkJCTFBQUYwOEEz
MTkyNjgyREEwMEI2MzkwQyAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmggKi8s
CkBAIC04OTQ0LDYgKzg5NDcsNyBAQAogCQkJCTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBX
S0ZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCNTE4QkVDMThDMDBERTQx
NzkgLyogV0tGb3JtSW5wdXRDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCNzE4
QkVDMThDMDBERTQxNzkgLyogV0tGb3JtUGVyaXBoZXJhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUM2MkZERjkxRUZDMjcxQzAwQ0UwNzJFIC8qIFdLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1NDI1NkI4MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1Qb3BvdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCQTE4QkVDMThDMDBERTQxNzkgLyogV0tGb3Jt
U2VsZWN0Q29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwOENGNTIxRDYzQzEzQTAwQjQ4
REYxIC8qIFdLRm9ybVNlbGVjdFBpY2tlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMTg2
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5MDUsMTMgKzU5MDUsMjEgQEAgV2ViVVJMU2NoZW1lSGFuZGxlclBy
b3h5KiBXZWJQYWdlOjp1cmxTYwogCiB2b2lkIFdlYlBhZ2U6OnJlZ2lzdGVyVVJMU2NoZW1lSGFu
ZGxlcih1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7
Ci0gICAgYXV0byBzY2hlbWVSZXN1bHQgPSBtX3NjaGVtZVRvVVJMU2NoZW1lSGFuZGxlclByb3h5
TWFwLmFkZChzY2hlbWUsIHN0ZDo6bWFrZV91bmlxdWU8V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5
PigqdGhpcywgaGFuZGxlcklkZW50aWZpZXIpKTsKKyAgICBhdXRvIHNjaGVtZVJlc3VsdCA9IG1f
c2NoZW1lVG9VUkxTY2hlbWVIYW5kbGVyUHJveHlNYXAuYWRkKHNjaGVtZSwgV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5OjpjcmVhdGUoKnRoaXMsIGhhbmRsZXJJZGVudGlmaWVyKSk7CiAgICAgQVNT
RVJUKHNjaGVtZVJlc3VsdC5pc05ld0VudHJ5KTsKIAogICAgIGF1dG8gaWRlbnRpZmllclJlc3Vs
dCA9IG1faWRlbnRpZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwLmFkZChoYW5kbGVySWRl
bnRpZmllciwgc2NoZW1lUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChpZGVudGlmaWVyUmVzdWx0LCBpZGVudGlmaWVyUmVzdWx0LmlzTmV3RW50cnkpOwog
fQogCit2b2lkIFdlYlBhZ2U6OnVybFNjaGVtZVRhc2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odWlu
dDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAg
YXV0byogaGFuZGxlciA9IG1faWRlbnRpZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwLmdl
dChoYW5kbGVySWRlbnRpZmllcik7CisgICAgQVNTRVJUKGhhbmRsZXIpOworICAgIAorICAgIGhh
bmRsZXItPnRhc2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odGFza0lkZW50aWZpZXIsIFdURk1vdmUo
cmVzcG9uc2UpLCBXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKyAgICAKIHZvaWQgV2ViUGFnZTo6dXJs
U2NoZW1lVGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwg
dWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewogICAgIGF1dG8qIGhhbmRsZXIgPSBtX2lkZW50aWZpZXJUb1VSTFNjaGVtZUhhbmRsZXJQ
cm94eU1hcC5nZXQoaGFuZGxlcklkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mjc2LDYgKzEyNzYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUhh
bmRsZXIodWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY2hlbWUpOwogCisgICAg
dm9pZCB1cmxTY2hlbWVUYXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IGhhbmRsZXJJ
ZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB1cmxTY2hlbWVU
YXNrRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgdXJsU2NoZW1lVGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7
CiAgICAgdm9pZCB1cmxTY2hlbWVUYXNrRGlkQ29tcGxldGUodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJik7CkBAIC0xNTY4LDcgKzE1NjksNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFN0cmluZyBt
X292ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5OwogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBtX2NwdUxpbWl0OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk+PiBtX3NjaGVtZVRvVVJMU2NoZW1lSGFuZGxlclBy
b3h5TWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2ViVVJMU2NoZW1lSGFuZGxlclBy
b3h5Pj4gbV9zY2hlbWVUb1VSTFNjaGVtZUhhbmRsZXJQcm94eU1hcDsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkqPiBtX2lkZW50aWZpZXJUb1VSTFNjaGVt
ZUhhbmRsZXJQcm94eU1hcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTg2MzUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
TGVnYWN5UmVjZWl2ZXIgewogCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKHVpbnQ2NF90
IGlkZW50aWZpZXIsIFN0cmluZyBzY2hlbWUpCiAKLSAgICBVUkxTY2hlbWVUYXNrRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50
aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UpCi0gICAgVVJMU2NoZW1l
VGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwgdWludDY0X3Qg
dGFza0lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotICAgIFVSTFNjaGVtZVRh
c2tEaWRDb21wbGV0ZSh1aW50NjRfdCBwcm92aWRlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQorICAgIFVSTFNjaGVtZVRh
c2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKKyAgICBVUkxTY2hlbWVUYXNrRGlkUmVj
ZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRl
bnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSkKKyAgICBVUkxTY2hl
bWVUYXNrRGlkUmVjZWl2ZURhdGEodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKKyAgICBVUkxTY2hlbWVU
YXNrRGlkQ29tcGxldGUodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQogfQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMyArNDgsMjEgQEAgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojp+V2Vi
VVJMU2NoZW1lSAogCiB2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6c3RhcnROZXdUYXNr
KFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3Rhc2tzLmFk
ZChsb2FkZXIuaWRlbnRpZmllcigpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYlVSTFNjaGVtZVRhc2tQ
cm94eT4oKnRoaXMsIGxvYWRlcikpOworICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5hZGQobG9h
ZGVyLmlkZW50aWZpZXIoKSwgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpjcmVhdGUoKnRoaXMsIGxv
YWRlcikpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAKICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJMb2FkZXJTdHJhdGVneSgpLmFkZFVSTFNjaGVtZVRhc2tQcm94eSgq
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3Rh
cnRMb2FkaW5nKCk7CiB9CiAKK3ZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojp0YXNrRGlk
UGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYgbmV3UmVxdWVzdCkKK3sKKyAgICBhdXRvKiB0YXNrID0gbV90YXNrcy5nZXQodGFza0lkZW50
aWZpZXIpOworICAgIGlmICghdGFzaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRhc2st
PmRpZFBlcmZvcm1SZWRpcmVjdGlvbihXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2UpLCBXVEZNb3Zl
KG5ld1JlcXVlc3QpKTsKK30KIAogdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnRhc2tE
aWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVS
TFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMSArMjcsMjUgQEAK
IAogI2luY2x1ZGUgIldlYlVSTFNjaGVtZVRhc2tQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5KTsK
K2NsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVS
TFNjaGVtZUhhbmRsZXJQcm94eT4gewogcHVibGljOgotICAgIFdlYlVSTFNjaGVtZUhhbmRsZXJQ
cm94eShXZWJQYWdlJiwgdWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHk+IGNyZWF0ZShXZWJQYWdlJiBwYWdlLCB1aW50NjRfdCBpZGVu
dGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5KHBhZ2UsIGlkZW50aWZpZXIpKTsKKyAgICB9CiAgICAgfldlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eSgpOwogCiAgICAgdm9pZCBzdGFydE5ld1Rhc2soV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXImKTsKQEAgLTQ5LDE2ICs1MywxOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdlYlBhZ2UmIHBh
Z2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAorICAgIHZvaWQgdGFza0RpZFBlcmZvcm1SZWRp
cmVjdGlvbih1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB0YXNrRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJik7CiAgICAgdm9pZCB0YXNrRGlkUmVjZWl2ZURhdGEodWludDY0X3QgdGFza0lk
ZW50aWZpZXIsIHNpemVfdCwgY29uc3QgdWludDhfdCogZGF0YSk7CiAgICAgdm9pZCB0YXNrRGlk
Q29tcGxldGUodWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKICAgICB2b2lkIHRhc2tEaWRTdG9wTG9hZGluZyhXZWJVUkxTY2hlbWVUYXNrUHJv
eHkmKTsKIAogcHJpdmF0ZToKKyAgICBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkoV2ViUGFnZSYs
IHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKICAgICB1aW50
NjRfdCBtX2lkZW50aWZpZXIgeyAwIH07CiAKLSAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIHN0
ZDo6dW5pcXVlX3B0cjxXZWJVUkxTY2hlbWVUYXNrUHJveHk+PiBtX3Rhc2tzOworICAgIEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJVUkxTY2hlbWVUYXNrUHJveHk+PiBtX3Rhc2tzOwogfTsg
Ly8gY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRh
c2tQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94eS5jcHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwzMiBAQCB2b2lkIFdlYlVSTFNjaGVtZVRhc2tQcm94
eTo6c3RvcExvYWRpbmcoCiAgICAgLy8gVGhpcyBsaW5lIHdpbGwgcmVzdWx0IGluIHRoaXMgYmVp
bmcgZGVsZXRlZC4KICAgICBtX3VybFNjaGVtZUhhbmRsZXIudGFza0RpZFN0b3BMb2FkaW5nKCp0
aGlzKTsKIH0KKyAgICAKK3ZvaWQgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRQZXJmb3JtUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgaWYgKCFoYXNMb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBvcmlnaW5hbFJlcXVlc3QgPSBy
ZXF1ZXN0XSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgeworICAgICAgICBtX3dhaXRpbmdG
b3JSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gZmFsc2U7CisgICAgICAgIC8vIFdlIGRvIG5v
dCBpbmZvcm0gdGhlIFVJUHJvY2VzcyBvZiBXZWJLaXQncyBuZXcgcmVxdWVzdCB3aXRoIHRoZSBn
aXZlbiBzdWdnZXN0ZWQgcmVxdWVzdC4KKyAgICAgICAgLy8gV2UgZG8gd2FudCB0byBrbm93IGlm
IFdlYktpdCB3b3VsZCBoYXZlIGdlbmVyYXRlZCBhIHJlcXVlc3QgdGhhdCBkaWZmZXJzIGZyb20g
dGhlIHN1Z2dlc3RlZCByZXF1ZXN0LCB0aG91Z2guCisgICAgICAgIGlmIChyZXF1ZXN0LnVybCgp
ICE9IG9yaWdpbmFsUmVxdWVzdC51cmwoKSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVk
aXJlY3RlZCBzY2hlbWUgdGFzayB3b3VsZCBoYXZlIGJlZW4gc2VudCB0byBhIGRpZmZlcmVudCBV
UkwuIik7CisgICAgfTsKKyAgICAKKyAgICBpZiAobV93YWl0aW5nRm9yUmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlcikKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJSZWNlaXZlZCByZWRpcmVjdCBkdXJp
bmcgcHJldmlvdXMgcmVkaXJlY3QgcHJvY2Vzc2luZy4iKTsKKyAgICBtX3dhaXRpbmdGb3JSZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyID0gdHJ1ZTsKKworICAgIG1fY29yZUxvYWRlci0+d2lsbFNl
bmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKK30KIAogdm9pZCBXZWJVUkxTY2hlbWVUYXNrUHJveHk6OmRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKKyAgICBp
ZiAobV93YWl0aW5nRm9yUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJSZWNlaXZlZCByZXNwb25zZSBkdXJpbmcgcmVkaXJlY3QgcHJvY2Vzc2luZy4iKTsK
KyAgICAKICAgICBpZiAoIWhhc0xvYWRlcigpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2No
ZW1lVGFza1Byb3h5LmgJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC0zNywxNiArMzgsMTkgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTsKIAotY2xhc3MgV2Vi
VVJMU2NoZW1lVGFza1Byb3h5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hl
bWVUYXNrUHJveHkpOworY2xhc3MgV2ViVVJMU2NoZW1lVGFza1Byb3h5IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViVVJMU2NoZW1lVGFza1Byb3h5PiB7CiBwdWJsaWM6Ci0gICAgV2ViVVJMU2NoZW1l
VGFza1Byb3h5KFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSYsIFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyJik7Ci0KKyAgICBzdGF0aWMgUmVmPFdlYlVSTFNjaGVtZVRhc2tQcm94eT4gY3JlYXRlKFdl
YlVSTFNjaGVtZUhhbmRsZXJQcm94eSYgaGFuZGxlciwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIm
IGxvYWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVSTFNjaGVt
ZVRhc2tQcm94eShoYW5kbGVyLCBsb2FkZXIpKTsKKyAgICB9CisgICAgCiAgICAgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0
OyB9CiAKICAgICB2b2lkIHN0YXJ0TG9hZGluZygpOwogICAgIHZvaWQgc3RvcExvYWRpbmcoKTsK
IAorICAgIHZvaWQgZGlkUGVyZm9ybVJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVEYXRhKHNpemVfdCwgY29uc3QgdWludDhfdCogZGF0YSk7CiAgICAgdm9pZCBkaWRDb21w
bGV0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkBAIC01NCwxMiArNTgsMTQgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQogCiBwcml2YXRlOgorICAgIFdlYlVSTFNjaGVtZVRhc2tQcm94eShXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkmLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYpOwogICAgIGJv
b2wgaGFzTG9hZGVyKCk7CiAKICAgICBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkmIG1fdXJsU2No
ZW1lSGFuZGxlcjsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI+IG1fY29yZUxv
YWRlcjsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogICAgIHVuc2ln
bmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIGJvb2wgbV93YWl0aW5nRm9yUmVkaXJlY3RDb21w
bGV0aW9uSGFuZGxlciB7IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIx
ODcwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE3LTA2LTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWRkIFNQSSB0byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tOgorICAgICAg
ICAoLVtTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAg
ICAoLVtTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RvcFVSTFNjaGVtZVRhc2s6XSk6CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKC1bUmVkaXJlY3RTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RhcnRV
UkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmll
dzpzdG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKC1bUmVkaXJlY3RTY2hlbWVIYW5kbGVy
IHdlYlZpZXc6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
Ol0pOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmlldzpkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U6ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtS
ZWRpcmVjdFNjaGVtZUhhbmRsZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3Jp
cHRNZXNzYWdlOl0pOgorCiAyMDE3LTA2LTIyICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxODYzMy4KSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0x
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29h
L1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tCShyZXZpc2lvbiAyMTg2MzUpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItMS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE1IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGll
cy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxl
ci5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFzay5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotc3RhdGljIGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOworc3RhdGljIGJvb2wg
ZG9uZTsKIAogQGludGVyZmFjZSBTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1l
SGFuZGxlcj4KIEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpz
dGFydGVkVVJMczsKQEAgLTc2LDcgKzc3LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHN0YQogICAgIC8vIEFsd2F5cyBmYWlsIHRoZSBpbWFnZSBsb2FkLgogICAgIGlm
IChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0
aW5nOmltYWdlIl0pIHsKICAgICAgICAgW3Rhc2sgZGlkRmFpbFdpdGhFcnJvcjpbTlNFcnJvciBl
cnJvcldpdGhEb21haW46QCJUZXN0V2ViS2l0QVBJIiBjb2RlOjEgdXNlckluZm86bmlsXV07Ci0g
ICAgICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IHRydWU7CisgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MCw3ICs5MSw3IEBAIC0gKHZvaWQpd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdG8KIHsKICAgICBbX3N0b3BwZWRVUkxzIGFkZE9i
amVjdDp0YXNrLnJlcXVlc3QuVVJMXTsKIAotICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IHRy
dWU7CisgICAgZG9uZSA9IHRydWU7CiB9CiAKIEBlbmQKQEAgLTEwMiw3ICsxMDMsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciBtYWluQnl0ZXNbXSA9CiAKIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgQmFz
aWMpCiB7Ci0gICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgZG9uZSA9IGZh
bHNlOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCkBA
IC0xMTQsNyArMTE1LDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBCYXNpYykKICAgICBOU1VS
TFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAidGVzdGluZzptYWluIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OnJlcXVlc3RdOwogCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBF
WFBFQ1RfRVEoW2hhbmRsZXIuZ2V0KCkuc3RhcnRlZFVSTHMgY291bnRdLCAydSk7CiAgICAgRVhQ
RUNUX1RSVUUoW1toYW5kbGVyLmdldCgpLnN0YXJ0ZWRVUkxzIG9iamVjdEF0SW5kZXg6MF0gaXNF
cXVhbDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6bWFpbiJdXSk7CkBAIC0xMjcsNyAr
MTI4LDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBOb01JTUVUeXBlKQogICAgIC8vIFNpbmNl
IHRoZXJlJ3Mgbm8gTUlNRVR5cGUsIGFuZCBubyBOYXZpZ2F0aW9uRGVsZWdhdGUgdG8gdGVsbCBX
ZWJLaXQgdG8gZG8gdGhlIGxvYWQgYW55d2F5cywgV2ViS2l0IHdpbGwgaWdub3JlIChzaWxlbnRs
eSBmYWlsKSB0aGUgbG9hZC4KICAgICAvLyBUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGlzIGNv
bW11bmljYXRlZCBiYWNrIHRvIHRoZSBVUkxTY2hlbWVIYW5kbGVyLgogCi0gICAgcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCkBAIC0xMzksNyArMTQwLDcgQEAgVEVT
VChVUkxTY2hlbWVIYW5kbGVyLCBOb01JTUVUeXBlKQogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVz
dCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0
ZXN0aW5nOm1haW4iXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAKLSAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIEVYUEVDVF9FUShbaGFuZGxl
ci5nZXQoKS5zdGFydGVkVVJMcyBjb3VudF0sIDF1KTsKICAgICBFWFBFQ1RfVFJVRShbW2hhbmRs
ZXIuZ2V0KCkuc3RhcnRlZFVSTHMgb2JqZWN0QXRJbmRleDowXSBpc0VxdWFsOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAidGVzdGluZzptYWluIl1dKTsKQEAgLTE5MSw1ICsxOTIsMTY2IEBAIFRFU1Qo
VVJMU2NoZW1lSGFuZGxlciwgQnVpbHRpblNjaGVtZXMpCiAgICAgfQogfQogCitzdGF0aWMgYm9v
bCByZWNlaXZlZFJlZGlyZWN0Oworc3RhdGljIGJvb2wgcmVzcG9uc2VQb2xpY3lEZWNpZGVkOwor
CitAaW50ZXJmYWNlIFJlZGlyZWN0U2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVt
ZUhhbmRsZXIsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gUmVkaXJlY3RTY2hlbWVIYW5kbGVyIHsgfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8
V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgQVNTRVJUX1NUUkVRKHRhc2sucmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZywgInRlc3Rpbmc6Ly8vaW5pdGlhbCIpOworICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpuaWwgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICBOU1VSTFJlcXVlc3Qg
KnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAidGVzdGluZzovLy9yZWRpcmVjdGVkIl1dOworICAgIFsoaWQ8V0tVUkxTY2hlbWVUYXNr
UHJpdmF0ZT4pdGFzayBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOnJlc3BvbnNlIG5ld1JlcXVlc3Q6
cmVxdWVzdF07CisgICAgQVNTRVJUX0ZBTFNFKHJlY2VpdmVkUmVkaXJlY3QpOworICAgIEFTU0VS
VF9TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJ0ZXN0
aW5nOi8vL3JlZGlyZWN0ZWQiKTsKKyAgICBOU1N0cmluZyAqaHRtbCA9IEAiPHNjcmlwdD53aW5k
b3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnRG9jdW1l
bnQgVVJMOiAnICsgZG9jdW1lbnQuVVJMKTs8L3NjcmlwdD4iOworICAgIFt0YXNrIGRpZFJlY2Vp
dmVSZXNwb25zZTpbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpodG1sLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF1dOworICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOlto
dG1sIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW3Rhc2sg
ZGlkRmluaXNoXTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0
b3BVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgQVNTRVJU
X1RSVUUoZmFsc2UpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOihudWxsX3Vu
c3BlY2lmaWVkIFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBBU1NFUlRfRkFMU0Uo
cmVjZWl2ZWRSZWRpcmVjdCk7CisgICAgcmVjZWl2ZWRSZWRpcmVjdCA9IHRydWU7Cit9CisKKy0g
KHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uUmVzcG9uc2U6KFdLTmF2aWdhdGlvblJlc3BvbnNlICopbmF2aWdhdGlvblJlc3BvbnNlIGRl
Y2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3kpKWRlY2lz
aW9uSGFuZGxlcgoreworICAgIEFTU0VSVF9UUlVFKHJlY2VpdmVkUmVkaXJlY3QpOworICAgIEFT
U0VSVF9TVFJFUShuYXZpZ2F0aW9uUmVzcG9uc2UucmVzcG9uc2UuVVJMLmFic29sdXRlU3RyaW5n
LlVURjhTdHJpbmcsICJ0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQiKTsKKyAgICBBU1NFUlRfRkFMU0Uo
cmVzcG9uc2VQb2xpY3lEZWNpZGVkKTsKKyAgICByZXNwb25zZVBvbGljeURlY2lkZWQgPSB0cnVl
OworICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeUFsbG93KTsK
K30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9s
bGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1Nj
cmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiRG9jdW1lbnQg
VVJMOiB0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQiLCBbbWVzc2FnZSBib2R5XSk7CisgICAgZG9uZSA9
IHRydWU7Cit9CitAZW5kCisKK1RFU1QoVVJMU2NoZW1lSGFuZGxlciwgUmVkaXJlY3Rpb24pCit7
CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbUmVkaXJlY3RT
Y2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2No
ZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RpbmciXTsKKyAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
W3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmhhbmRsZXIuZ2V0KCldOworICAgIAorICAg
IE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOi8vL2luaXRpYWwiXV07CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAgCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKyAgICAKKyAgICBFWFBFQ1RfVFJVRShyZXNwb25zZVBvbGljeURlY2lkZWQpOwor
ICAgIEVYUEVDVF9TVFJFUSh3ZWJWaWV3LmdldCgpLlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3Ry
aW5nLCAidGVzdGluZzovLy9yZWRpcmVjdGVkIik7Cit9CisKK2VudW0gY2xhc3MgQ29tbWFuZCB7
CisgICAgUmVkaXJlY3QsCisgICAgUmVzcG9uc2UsCisgICAgRGF0YSwKKyAgICBGaW5pc2gsCisg
ICAgRXJyb3IsCit9OworCitAaW50ZXJmYWNlIFRhc2tTY2hlbWVIYW5kbGVyIDogTlNPYmplY3Qg
PFdLVVJMU2NoZW1lSGFuZGxlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbW1hbmRzOihW
ZWN0b3I8Q29tbWFuZD4mJiljb21tYW5kcyBleHBlY3RlZEV4Y2VwdGlvbjooYm9vbClleHBlY3Rl
ZDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRhc2tTY2hlbWVIYW5kbGVyIHsKKyAgICBWZWN0
b3I8Q29tbWFuZD4gY29tbWFuZHM7CisgICAgYm9vbCBleHBlY3RlZEV4Y2VwdGlvbjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29tbWFuZHM6KFZlY3RvcjxDb21tYW5kPiYmKWNvbW1h
bmRzIGV4cGVjdGVkRXhjZXB0aW9uOihib29sKWV4cGVjdGVkCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
c2VsZi0+Y29tbWFuZHMgPSBXVEZNb3ZlKGNvbW1hbmRzKTsKKyAgICBzZWxmLT5leHBlY3RlZEV4
Y2VwdGlvbiA9IGV4cGVjdGVkOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8V0tV
UkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgYm9vbCBjYXVnaHRFeGNlcHRpb24gPSBmYWxzZTsK
KyAgICBAdHJ5IHsKKyAgICAgICAgZm9yIChhdXRvIGNvbW1hbmQgOiBjb21tYW5kcykgeworICAg
ICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OlJl
ZGlyZWN0OgorICAgICAgICAgICAgICAgIFsoaWQ8V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZT4pdGFz
ayBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXSBuZXdSZXF1ZXN0OltbW05TVVJMUmVxdWVzdCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29tbWFu
ZDo6UmVzcG9uc2U6CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltb
W05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV07CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkRhdGE6CisgICAgICAgICAgICAg
ICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W1tbTlNEYXRhIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV1dOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpG
aW5pc2g6CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6RXJyb3I6CisgICAgICAgICAgICAg
ICAgW3Rhc2sgZGlkRmFpbFdpdGhFcnJvcjpbW1tOU0Vycm9yIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV1dOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIEBjYXRjaChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKQorICAgIHsKKyAgICAg
ICAgY2F1Z2h0RXhjZXB0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX0VRKGNhdWdodEV4
Y2VwdGlvbiwgZXhwZWN0ZWRFeGNlcHRpb24pOworICAgIGRvbmUgPSB0cnVlOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RvcFVSTFNjaGVtZVRhc2s6KGlkIDxX
S1VSTFNjaGVtZVRhc2s+KXRhc2sKK3sKK30KK0BlbmQKKworZW51bSBjbGFzcyBTaG91bGRSYWlz
ZUV4Y2VwdGlvbiB7IE5vLCBZZXMgfTsKKworc3RhdGljIHZvaWQgY2hlY2tDYWxsU2VxdWVuY2Uo
VmVjdG9yPENvbW1hbmQ+JiYgY29tbWFuZHMsIFNob3VsZFJhaXNlRXhjZXB0aW9uIHNob3VsZFJh
aXNlRXhjZXB0aW9uKQoreworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUYXNrU2NoZW1lSGFuZGxlciBhbGxvY10gaW5pdFdp
dGhDb21tYW5kczpXVEZNb3ZlKGNvbW1hbmRzKSBleHBlY3RlZEV4Y2VwdGlvbjpzaG91bGRSYWlz
ZUV4Y2VwdGlvbiA9PSBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzXSk7CisgICAgW2NvbmZpZ3Vy
YXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRl
c3RpbmciXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOi8vL2luaXRp
YWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK1RFU1Qo
VVJMU2NoZW1lSGFuZGxlciwgRXhjZXB0aW9ucykKK3sKKyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7
Q29tbWFuZDo6UmVzcG9uc2UsIENvbW1hbmQ6OkRhdGEsIENvbW1hbmQ6OkZpbmlzaH0sIFNob3Vs
ZFJhaXNlRXhjZXB0aW9uOjpObyk7CisgICAgY2hlY2tDYWxsU2VxdWVuY2Uoe0NvbW1hbmQ6OlJl
c3BvbnNlLCBDb21tYW5kOjpSZWRpcmVjdH0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpZZXMpOwor
ICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZWRpcmVjdCwgQ29tbWFuZDo6UmVzcG9u
c2V9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6Tm8pOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtD
b21tYW5kOjpEYXRhLCBDb21tYW5kOjpGaW5pc2h9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVz
KTsKKyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6RXJyb3J9LCBTaG91bGRSYWlzZUV4
Y2VwdGlvbjo6Tm8pOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpFcnJvciwgQ29t
bWFuZDo6RXJyb3J9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKKyAgICBjaGVja0NhbGxT
ZXF1ZW5jZSh7Q29tbWFuZDo6RXJyb3IsIENvbW1hbmQ6OkRhdGF9LCBTaG91bGRSYWlzZUV4Y2Vw
dGlvbjo6WWVzKTsKKyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6UmVzcG9uc2UsIENv
bW1hbmQ6OkZpbmlzaCwgQ29tbWFuZDo6RGF0YX0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpZZXMp
OworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25zZSwgQ29tbWFuZDo6Rmlu
aXNoLCBDb21tYW5kOjpSZWRpcmVjdH0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpZZXMpOworICAg
IGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25zZSwgQ29tbWFuZDo6RmluaXNoLCBD
b21tYW5kOjpSZXNwb25zZX0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpZZXMpOworICAgIGNoZWNr
Q2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25zZSwgQ29tbWFuZDo6RmluaXNoLCBDb21tYW5k
OjpGaW5pc2h9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKKyAgICBjaGVja0NhbGxTZXF1
ZW5jZSh7Q29tbWFuZDo6UmVzcG9uc2UsIENvbW1hbmQ6OkZpbmlzaCwgQ29tbWFuZDo6RXJyb3J9
LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKK30KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313692</attachid>
            <date>2017-06-22 23:25:28 -0700</date>
            <delta_ts>2017-06-23 10:25:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173730-20170622232526.patch</filename>
            <type>text/plain</type>
            <size>44176</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSB0
byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhU
VFBGYW1pbHkpOgorICAgICAgICBBc3NlcnRpbmcgdGhhdCByZWRpcmVjdHMgYXJlIGFsd2F5cyBo
dHRwL2h0dHBzIFVSTHMgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICBJZiB0aGVyZSdzIGEg
Y3VzdG9tIHNjaGVtZSByZWRpcmVjdCwgZ2l2ZSBpdCBubyBmcmVzaG5lc3MgbGlmZXRpbWUgaW4g
dGhlIGNhY2hlLgorCiAyMDE3LTA2LTIxICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBz
b255LmNvbT4KIAogICAgICAgICBbQ3VybF0gRXh0cmFjdCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFz
IHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBjb21wdXRlRnJlc2huZQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9u
bzsKIAotICAgIEFTU0VSVChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
OworICAgIGlmICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gMHVzOwogCiAgICAgLy8gRnJlc2huZXNzIExpZmV0aW1lOgogICAgIC8vIGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzQjc2VjdGlvbi00LjIuMQpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTctMDYtMjIgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2No
ZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGFuIHVwY29taW5nIGZp
eCBmb3IgcmVkaXJlY3QgY2FsbGJhY2tzLCBhbmQgaXQgbWlnaHQgYmUKKyAgICAgICAgbmVjZXNz
YXJ5IGZvciBsb2FkaW5nIHdpdGggY3VzdG9tIHNjaGVtZXMgaW4gZ2VuZXJhbC4gUmlnaHQgbm93
IGp1c3QgcmVzcG9uZGluZyB3aXRoCisgICAgICAgICBhbiBIVFRQIDMwMS8zMDIvMzA3LzMwOCBy
ZXNwb25zZSBjb2RlIGRvZXNuJ3Qgd29yayBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAor
ICAgICAgICBzeW50aGVzaXplcyBhbiBOU1VSTFJlcXVlc3QgZnJvbSB0aGUgTG9jYXRpb24gaGVh
ZGVyIGxpa2Ugd2UgZG8gaW4gCisgICAgICAgIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0IGV0IGFsLiBmb3IgSFNUUywgCisg
ICAgICAgIGFuZCB0aGF0IHdvdWxkIHJlcXVpcmUgdXNpbmcgYW4gTlNIVFRQVVJMUmVzcG9uc2Ug
Zm9yIG5vbi1IVFRQIHJlc3BvbnNlcywgd2hpY2ggaXMgCisgICAgICAgIGNvbmNlcHR1YWxseSB3
cm9uZy4gIEluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBjb21wbGV0aW9uIGhhbmRsZXIgaW4gdGhl
IEFQSSwgd2UgYXJlCisgICAgICAgIGZvbGxvd2luZyB0aGUgcGF0dGVybiBvZiBXS05hdmlnYXRp
b25EZWxlZ2F0ZS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24KKyAgICAgICAgYW5kIGFsbG93aW5nIHRoZSBTUEkgdG8gaW5kaWNhdGUgdGhhdCBhIHJlZGly
ZWN0IGhhcyBoYXBwZW5lZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mCisgICAgICAgIFdlYktpdCwg
YnV0IG5vdCBhbGxvd2luZyB0aGUgU1BJIHRvIHdhaXQgZm9yIGEgcHJvY2Vzc2VkIHJlcXVlc3Qg
YW5kIHNsb3cgZG93biBsb2FkaW5nLgorCisgICAgICAgIFRoaXMgYWRkcyBXS1VSTFNjaGVtZVRh
c2tQcml2YXRlLl9kaWRQZXJmb3JtUmVkaXJlY3Rpb24gd2hpY2ggaXMgY292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW06CisgICAgICAgIChyYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKC1b
V0tVUkxTY2hlbWVUYXNrSW1wbCBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNj
aGVtZVRhc2tJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxT
Y2hlbWVUYXNrUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2No
ZW1lSGFuZGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0
YXJ0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFNjaGVtZUhhbmRsZXI6OnN0b3BUYXNr
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
U2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpkaWRDb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cmxTY2hlbWVUYXNrRGlkUGVyZm9y
bVJlZGlyZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnRhc2tEaWRQZXJmb3JtUmVk
aXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFz
a1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRQ
ZXJmb3JtUmVkaXJlY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxT
Y2hlbWVUYXNrUHJveHkuaDoKKwogMjAxNy0wNi0yMSAgSmVyZW15IEpvbmVzICA8amVyZW15akBh
cHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgY2xlYXIgYXVkaW8gbXV0ZSB3aGVuIG11dGluZyBj
YXB0dXJlLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODc5LDIwICs2ODc5LDIwIEBAIFdlYlVSTFNjaGVt
ZUhhbmRsZXIqIFdlYlBhZ2VQcm94eTo6dXJsU2MKICAgICByZXR1cm4gbV91cmxTY2hlbWVIYW5k
bGVyc0J5U2NoZW1lLmdldChzY2hlbWUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRV
UkxTY2hlbWVUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fdXJsU2NoZW1lSGFuZGxl
cnNCeUlkZW50aWZpZXIuZmluZChoYW5kbGVySWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fdXJsU2NoZW1lSGFuZGxlcnNCeUlkZW50aWZpZXIuZW5kKCkpOwogCi0gICAgaXRl
cmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllciwgcmVxdWVz
dCk7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdGFydFRhc2soKnRoaXMsIHRhc2tJZGVudGlmaWVy
LCByZXF1ZXN0KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmZpbmQoaGFuZGxlcklkZW50aWZpZXIpOwog
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmVu
ZCgpKTsKIAotICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRl
bnRpZmllcik7CisgICAgaXRlcmF0b3ItPnZhbHVlLT5zdG9wVGFzaygqdGhpcywgdGFza0lkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXZvaWRzVW5zYWZlQXJlYShib29s
IGF2b2lkc1Vuc2FmZUFyZWEpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTksOCArMTU5OSw4IEBAIHByaXZhdGU6
CiAjZW5kaWYKICNlbmRpZgogCi0gICAgdm9pZCBzdGFydFVSTFNjaGVtZVRhc2sodWludDY0X3Qg
aGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBzdG9wVVJMU2NoZW1lVGFzayh1aW50
NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHN0YXJ0VVJMU2NoZW1lVGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWlu
dDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIHZvaWQgc3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVp
bnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhjb25zdCBVc2VyRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxODYzNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ5NSw2ICs0OTUsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAg
ICAgU2V0SXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMKGJvb2wgaXNVc2luZ0hpZ2hQZXJmb3Jt
YW5jZVdlYkdMKQogCi0gICAgU3RhcnRVUkxTY2hlbWVUYXNrKHVpbnQ2NF90IGxvYWRlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QpCi0gICAgU3RvcFVSTFNjaGVtZVRhc2sodWludDY0X3QgbG9hZGVySWRlbnRp
ZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQorICAgIFN0YXJ0VVJMU2NoZW1lVGFz
ayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQorICAgIFN0b3BVUkxTY2hlbWVUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lSGFuZGxlci5j
cHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxT
Y2hlbWVIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTcgKzQ4LDE3IEBAIFdlYlVS
TFNjaGVtZUhhbmRsZXI6On5XZWJVUkxTY2hlbWVIYW5kbGUKICAgICBBU1NFUlQobV90YXNrcy5p
c0VtcHR5KCkpOwogfQogCi12b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXI6OnN0YXJ0VGFzayhXZWJQ
YWdlUHJveHkmIHBhZ2UsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyOjpzdGFydFRhc2so
V2ViUGFnZVByb3h5JiBwYWdlLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5hZGQocmVz
b3VyY2VJZGVudGlmaWVyLCBXZWJVUkxTY2hlbWVUYXNrOjpjcmVhdGUoKnRoaXMsIHBhZ2UsIHJl
c291cmNlSWRlbnRpZmllciwgcmVxdWVzdCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5h
ZGQodGFza0lkZW50aWZpZXIsIFdlYlVSTFNjaGVtZVRhc2s6OmNyZWF0ZSgqdGhpcywgcGFnZSwg
dGFza0lkZW50aWZpZXIsIHJlcXVlc3QpKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkp
OwogCiAgICAgcGxhdGZvcm1TdGFydFRhc2socGFnZSwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiB9CiAKLXZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlcjo6c3RvcFRhc2soV2ViUGFnZVByb3h5JiBw
YWdlLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFdlYlVSTFNjaGVtZUhhbmRs
ZXI6OnN0b3BUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZSwgdWludDY0X3QgdGFza0lkZW50aWZpZXIp
CiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdGFza3MuZmluZChyZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rhc2tzLmZpbmQodGFza0lkZW50aWZpZXIpOwogICAg
IGlmIChpdGVyYXRvciA9PSBtX3Rhc2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhhbmRsZXIuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZUhh
bmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB1
aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAg
ICB2b2lkIHN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgc3RvcFRhc2so
V2ViUGFnZVByb3h5JiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHN0
YXJ0VGFzayhXZWJQYWdlUHJveHkmLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBzdG9wVGFzayhXZWJQYWdlUHJveHkm
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJVUkxTY2hl
bWVIYW5kbGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1l
VGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNj
aGVtZVRhc2suY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViVVJMU2NoZW1lVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDU0ICs0OCw3NCBA
QCBXZWJVUkxTY2hlbWVUYXNrOjpXZWJVUkxTY2hlbWVUYXNrKFdlYlVSCiB7CiB9CiAKLVdlYlVS
TFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorYXV0byBXZWJVUkxTY2hl
bWVUYXNrOjpkaWRQZXJmb3JtUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
IHJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSAtPiBFeGNlcHRp
b25UeXBlCiB7CiAgICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVt
ZVRhc2s6OkV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblR5cGU6OlRhc2tBbHJlYWR5U3RvcHBlZDsKKyAgICAKKyAgICBpZiAobV9jb21w
bGV0ZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21wbGV0ZUFscmVhZHlDYWxs
ZWQ7CisgICAgCisgICAgaWYgKG1fZGF0YVNlbnQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25U
eXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgCisgICAgaWYgKG1fcmVzcG9uc2VTZW50KQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRlclJlc3BvbnNlOworICAgIAor
ICAgIG1fcmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpVUkxTY2hlbWVUYXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKG1fdXJsU2NoZW1lSGFuZGxl
ci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3BvbnNlLCByZXF1ZXN0KSk7CisKKyAg
ICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Tm9uZTsKK30KKworYXV0byBXZWJVUkxTY2hlbWVUYXNr
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIC0+
IEV4Y2VwdGlvblR5cGUKK3sKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uVHlwZTo6VGFza0FscmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQot
ICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVB
bHJlYWR5Q2FsbGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJl
YWR5Q2FsbGVkOwogCiAgICAgaWYgKG1fZGF0YVNlbnQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CisgICAgICAgIHJldHVy
biBFeGNlcHRpb25UeXBlOjpEYXRhQWxyZWFkeVNlbnQ7CiAKICAgICBtX3Jlc3BvbnNlU2VudCA9
IHRydWU7CiAKICAgICByZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZvKCk7CiAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVUkxTY2hlbWVUYXNrRGlkUmVjZWl2ZVJlc3Bv
bnNlKG1fdXJsU2NoZW1lSGFuZGxlci0+aWRlbnRpZmllcigpLCBtX2lkZW50aWZpZXIsIHJlc3Bv
bnNlKSk7Ci0gICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4Y2VwdGlvblR5cGU6Ok5vbmU7
CisgICAgcmV0dXJuIEV4Y2VwdGlvblR5cGU6Ok5vbmU7CiB9CiAKLVdlYlVSTFNjaGVtZVRhc2s6
OkV4Y2VwdGlvblR5cGUgV2ViVVJMU2NoZW1lVGFzazo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyKQorYXV0byBXZWJVUkxTY2hlbWVUYXNrOjpkaWRSZWNlaXZlRGF0YShS
ZWY8U2hhcmVkQnVmZmVyPiBidWZmZXIpIC0+IEV4Y2VwdGlvblR5cGUKIHsKICAgICBpZiAobV9z
dG9wcGVkKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
VGFza0FscmVhZHlTdG9wcGVkOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6VGFza0Fs
cmVhZHlTdG9wcGVkOwogCiAgICAgaWYgKG1fY29tcGxldGVkKQotICAgICAgICByZXR1cm4gV2Vi
VVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uVHlwZTo6Q29tcGxldGVBbHJlYWR5Q2FsbGVkOwogCiAgICAg
aWYgKCFtX3Jlc3BvbnNlU2VudCkKLSAgICAgICAgcmV0dXJuIFdlYlVSTFNjaGVtZVRhc2s6OkV4
Y2VwdGlvblR5cGU6Ok5vUmVzcG9uc2VTZW50OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uVHlw
ZTo6Tm9SZXNwb25zZVNlbnQ7CiAKICAgICBtX2RhdGFTZW50ID0gdHJ1ZTsKICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRSZWNlaXZlRGF0YShtX3Vy
bFNjaGVtZUhhbmRsZXItPmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBJUEM6OlNoYXJlZEJ1
ZmZlckRhdGFSZWZlcmVuY2UoYnVmZmVyLnB0cigpKSkpOwotICAgIHJldHVybiBXZWJVUkxTY2hl
bWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpO
b25lOwogfQogCi1XZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlIFdlYlVSTFNjaGVtZVRh
c2s6OmRpZENvbXBsZXRlKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorYXV0byBXZWJVUkxT
Y2hlbWVUYXNrOjpkaWRDb21wbGV0ZShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgLT4gRXhj
ZXB0aW9uVHlwZQogewogICAgIGlmIChtX3N0b3BwZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UeXBlOjpUYXNrQWxyZWFkeVN0b3BwZWQ7CiAKICAgICBpZiAobV9jb21w
bGV0ZWQpCi0gICAgICAgIHJldHVybiBXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpD
b21wbGV0ZUFscmVhZHlDYWxsZWQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpDb21w
bGV0ZUFscmVhZHlDYWxsZWQ7CiAKICAgICBpZiAoIW1fcmVzcG9uc2VTZW50ICYmIGVycm9yLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gV2ViVVJMU2NoZW1lVGFzazo6RXhjZXB0aW9uVHlwZTo6
Tm9SZXNwb25zZVNlbnQ7CisgICAgICAgIHJldHVybiBFeGNlcHRpb25UeXBlOjpOb1Jlc3BvbnNl
U2VudDsKIAogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlVSTFNjaGVtZVRhc2tEaWRDb21wbGV0ZShtX3VybFNjaGVtZUhhbmRsZXIt
PmlkZW50aWZpZXIoKSwgbV9pZGVudGlmaWVyLCBlcnJvcikpOwotICAgIHJldHVybiBXZWJVUkxT
Y2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb25lOworICAgIHJldHVybiBFeGNlcHRpb25UeXBl
OjpOb25lOwogfQogCiB2b2lkIFdlYlVSTFNjaGVtZVRhc2s6OnBhZ2VEZXN0cm95ZWQoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVSTFNjaGVtZVRhc2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5oCShyZXZpc2lv
biAyMTg2MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVVJMU2NoZW1lVGFzay5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTIgQEAgcHVibGljOgogICAgIGVudW0gY2xh
c3MgRXhjZXB0aW9uVHlwZSB7CiAgICAgICAgIERhdGFBbHJlYWR5U2VudCwKICAgICAgICAgQ29t
cGxldGVBbHJlYWR5Q2FsbGVkLAorICAgICAgICBSZWRpcmVjdEFmdGVyUmVzcG9uc2UsCiAgICAg
ICAgIFRhc2tBbHJlYWR5U3RvcHBlZCwKICAgICAgICAgTm9SZXNwb25zZVNlbnQsCiAgICAgICAg
IE5vbmUsCiAgICAgfTsKKyAgICBFeGNlcHRpb25UeXBlIGRpZFBlcmZvcm1SZWRpcmVjdGlvbihX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsK
ICAgICBFeGNlcHRpb25UeXBlIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRSZWNlaXZlRGF0YShSZWY8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPik7CiAgICAgRXhjZXB0aW9uVHlwZSBkaWRDb21wbGV0ZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFzay5tbQkocmV2aXNpb24gMjE4
NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRh
c2subW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2luY2x1ZGUgIldlYlVSTFNjaGVtZVRhc2suaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCAiV2ViVVJMU2NoZW1l
VGFzay5oIgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTUyLDYgKzUzLDkgQEAgc3RhdGljIHZvaWQgcmFpc2VFeGNlcHRpb25JZk5lY2Vzc2FyeShX
ZQogICAgIGNhc2UgV2ViS2l0OjpXZWJVUkxTY2hlbWVUYXNrOjpFeGNlcHRpb25UeXBlOjpOb1Jl
c3BvbnNlU2VudDoKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNp
c3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIk5vIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQgZm9yIHRo
aXMgdGFzayJdOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdDo6V2ViVVJMU2NoZW1l
VGFzazo6RXhjZXB0aW9uVHlwZTo6UmVkaXJlY3RBZnRlclJlc3BvbnNlOgorICAgICAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAi
Tm8gcmVkaXJlY3RzIGFyZSBhbGxvd2VkIGFmdGVyIHRoZSByZXNwb25zZSJdOworICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTg2LDYgKzkwLDEyIEBAIC0gKHZvaWQpZGlkRmFpbFdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm8KICAgICByYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KHJlc3Vs
dCk7CiB9CiAKKy0gKHZvaWQpX2RpZFBlcmZvcm1SZWRpcmVjdGlvbjooTlNVUkxSZXNwb25zZSAq
KXJlc3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IF91cmxTY2hlbWVUYXNrLT50YXNrKCkuZGlkUGVyZm9ybVJlZGlyZWN0aW9uKHJl
c3BvbnNlLCByZXF1ZXN0KTsKKyAgICByYWlzZUV4Y2VwdGlvbklmTmVjZXNzYXJ5KHJlc3VsdCk7
Cit9CisKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCiAt
IChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VSTFNjaGVtZVRhc2tJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVUkxTY2hlbWVUYXNrSW50ZXJuYWwuaAko
cmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VSTFNjaGVtZVRhc2tJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNCArMjMsMTQg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJX
S1VSTFNjaGVtZVRhc2suaCIKKyNpbXBvcnQgIldLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCIKIAog
I2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSVVSTFNjaGVtZVRhc2suaCIKICNpbXBv
cnQgIldLT2JqZWN0LmgiCiAKLUBpbnRlcmZhY2UgV0tVUkxTY2hlbWVUYXNrSW1wbCA6IE5TT2Jq
ZWN0IDxXS1VSTFNjaGVtZVRhc2s+CitAaW50ZXJmYWNlIFdLVVJMU2NoZW1lVGFza0ltcGwgOiBO
U09iamVjdCA8V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZT4KIEBlbmQKIAogbmFtZXNwYWNlIFdlYktp
dCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1l
VGFza1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lVGFzay5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bwcm90b2NvbCBXS1VS
TFNjaGVtZVRhc2tQcml2YXRlIDxXS1VSTFNjaGVtZVRhc2s+CisKKy0gKHZvaWQpX2RpZFBlcmZv
cm1SZWRpcmVjdGlvbjooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIG5ld1JlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3Q7CisKK0BlbmQKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIx
ODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE2MCw2ICsxMTYwLDcgQEAKIAkJNUMyMENCOUQxQkIwRENG
QTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0
d29ya1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKIAkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8q
IE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLzsg
fTsKIAkJNUMyOThEQTAxQzNERjAyMTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyOThEOUUxQzNERUYy
OTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oICovOyB9OworCQk1QzYyRkRGOTFFRkMyNzFD
MDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM2MkZERjgxRUZDMjYzQzAwQ0UwNzJFIC8qIFdL
VVJMU2NoZW1lVGFza1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1Qzc3MDY3NDFEMTEzODM4MDAxMjcwMEYgLyogV2ViU29ja2V0UHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM3NzA2NzMxRDExMUQ4QjAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCAqLzsgfTsK
IAkJNUM4NUM3ODgxQzNGMjNDRTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzg1Qzc4NjFDM0YyM0M1
MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLzsgfTsKIAkJNUM5RTU2ODIxREY3RjFB
QjAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgwMURGN0YwNTUwMEM5RUUzMyAvKiBXS1dl
YnNpdGVQb2xpY2llcy5jcHAgKi87IH07CkBAIC0zNDQzLDYgKzM0NDQsNyBAQAogCQk1QzIwQ0I5
QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uQ29jb2EubW07IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb24u
aDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxv
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGVuZGluZ0Rvd25sb2FkLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAvKiBXS1VS
TFNjaGVtZVRhc2tQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVVJMU2NoZW1lVGFza1ByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3NzA2NzMxRDExMUQ4QjAwMTI3
MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYlNvY2tldFByb3ZpZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFEMEY0
MUEwMDA5RDJGNkQgLyogV2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNGMjND
NTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzE4LDYgKzU3MjAsNyBAQAogCQkJCTUxRDEyNDJGMUU2RERERDcwMDJCMjgyMCAvKiBX
S1VSTFNjaGVtZVRhc2suaCAqLywKIAkJCQk1MUQxMjQzMDFFNkREREQ3MDAyQjI4MjAgLyogV0tV
UkxTY2hlbWVUYXNrLm1tICovLAogCQkJCTUxRDEyNDM3MUU2REZEMkEwMDJCMjgyMCAvKiBXS1VS
TFNjaGVtZVRhc2tJbnRlcm5hbC5oICovLAorCQkJCTVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAv
KiBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmggKi8sCiAJCQkJMUFGQTNBQzcxOEU2MUM2MTAwM0ND
QkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8sCiAJCQkJMUFGQTNBQzYxOEU2MUM2
MTAwM0NDQkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tICovLAogCQkJCTFBQUYwOEEz
MTkyNjgyREEwMEI2MzkwQyAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmggKi8s
CkBAIC04OTQ0LDYgKzg5NDcsNyBAQAogCQkJCTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBX
S0ZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCNTE4QkVDMThDMDBERTQx
NzkgLyogV0tGb3JtSW5wdXRDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCNzE4
QkVDMThDMDBERTQxNzkgLyogV0tGb3JtUGVyaXBoZXJhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUM2MkZERjkxRUZDMjcxQzAwQ0UwNzJFIC8qIFdLVVJMU2NoZW1lVGFza1ByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1NDI1NkI4MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1Qb3BvdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCQTE4QkVDMThDMDBERTQxNzkgLyogV0tGb3Jt
U2VsZWN0Q29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwOENGNTIxRDYzQzEzQTAwQjQ4
REYxIC8qIFdLRm9ybVNlbGVjdFBpY2tlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMTg2
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5MDUsMTMgKzU5MDUsMjEgQEAgV2ViVVJMU2NoZW1lSGFuZGxlclBy
b3h5KiBXZWJQYWdlOjp1cmxTYwogCiB2b2lkIFdlYlBhZ2U6OnJlZ2lzdGVyVVJMU2NoZW1lSGFu
ZGxlcih1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7
Ci0gICAgYXV0byBzY2hlbWVSZXN1bHQgPSBtX3NjaGVtZVRvVVJMU2NoZW1lSGFuZGxlclByb3h5
TWFwLmFkZChzY2hlbWUsIHN0ZDo6bWFrZV91bmlxdWU8V2ViVVJMU2NoZW1lSGFuZGxlclByb3h5
PigqdGhpcywgaGFuZGxlcklkZW50aWZpZXIpKTsKKyAgICBhdXRvIHNjaGVtZVJlc3VsdCA9IG1f
c2NoZW1lVG9VUkxTY2hlbWVIYW5kbGVyUHJveHlNYXAuYWRkKHNjaGVtZSwgV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5OjpjcmVhdGUoKnRoaXMsIGhhbmRsZXJJZGVudGlmaWVyKSk7CiAgICAgQVNT
RVJUKHNjaGVtZVJlc3VsdC5pc05ld0VudHJ5KTsKIAogICAgIGF1dG8gaWRlbnRpZmllclJlc3Vs
dCA9IG1faWRlbnRpZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwLmFkZChoYW5kbGVySWRl
bnRpZmllciwgc2NoZW1lUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChpZGVudGlmaWVyUmVzdWx0LCBpZGVudGlmaWVyUmVzdWx0LmlzTmV3RW50cnkpOwog
fQogCit2b2lkIFdlYlBhZ2U6OnVybFNjaGVtZVRhc2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odWlu
dDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAg
YXV0byogaGFuZGxlciA9IG1faWRlbnRpZmllclRvVVJMU2NoZW1lSGFuZGxlclByb3h5TWFwLmdl
dChoYW5kbGVySWRlbnRpZmllcik7CisgICAgQVNTRVJUKGhhbmRsZXIpOworICAgIAorICAgIGhh
bmRsZXItPnRhc2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odGFza0lkZW50aWZpZXIsIFdURk1vdmUo
cmVzcG9uc2UpLCBXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKyAgICAKIHZvaWQgV2ViUGFnZTo6dXJs
U2NoZW1lVGFza0RpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwg
dWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewogICAgIGF1dG8qIGhhbmRsZXIgPSBtX2lkZW50aWZpZXJUb1VSTFNjaGVtZUhhbmRsZXJQ
cm94eU1hcC5nZXQoaGFuZGxlcklkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mjc2LDYgKzEyNzYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUhh
bmRsZXIodWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY2hlbWUpOwogCisgICAg
dm9pZCB1cmxTY2hlbWVUYXNrRGlkUGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IGhhbmRsZXJJ
ZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB1cmxTY2hlbWVU
YXNrRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgdXJsU2NoZW1lVGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7
CiAgICAgdm9pZCB1cmxTY2hlbWVUYXNrRGlkQ29tcGxldGUodWludDY0X3QgaGFuZGxlcklkZW50
aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJik7CkBAIC0xNTY4LDcgKzE1NjksNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFN0cmluZyBt
X292ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5OwogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBtX2NwdUxpbWl0OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk+PiBtX3NjaGVtZVRvVVJMU2NoZW1lSGFuZGxlclBy
b3h5TWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2ViVVJMU2NoZW1lSGFuZGxlclBy
b3h5Pj4gbV9zY2hlbWVUb1VSTFNjaGVtZUhhbmRsZXJQcm94eU1hcDsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkqPiBtX2lkZW50aWZpZXJUb1VSTFNjaGVt
ZUhhbmRsZXJQcm94eU1hcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTg2MzUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
TGVnYWN5UmVjZWl2ZXIgewogCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKHVpbnQ2NF90
IGlkZW50aWZpZXIsIFN0cmluZyBzY2hlbWUpCiAKLSAgICBVUkxTY2hlbWVUYXNrRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50
aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UpCi0gICAgVVJMU2NoZW1l
VGFza0RpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHByb3ZpZGVySWRlbnRpZmllciwgdWludDY0X3Qg
dGFza0lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotICAgIFVSTFNjaGVtZVRh
c2tEaWRDb21wbGV0ZSh1aW50NjRfdCBwcm92aWRlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQorICAgIFVSTFNjaGVtZVRh
c2tEaWRQZXJmb3JtUmVkaXJlY3Rpb24odWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKKyAgICBVUkxTY2hlbWVUYXNrRGlkUmVj
ZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRl
bnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSkKKyAgICBVUkxTY2hl
bWVUYXNrRGlkUmVjZWl2ZURhdGEodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKKyAgICBVUkxTY2hlbWVU
YXNrRGlkQ29tcGxldGUodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQogfQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMyArNDgsMjEgQEAgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojp+V2Vi
VVJMU2NoZW1lSAogCiB2b2lkIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTo6c3RhcnROZXdUYXNr
KFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3Rhc2tzLmFk
ZChsb2FkZXIuaWRlbnRpZmllcigpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYlVSTFNjaGVtZVRhc2tQ
cm94eT4oKnRoaXMsIGxvYWRlcikpOworICAgIGF1dG8gcmVzdWx0ID0gbV90YXNrcy5hZGQobG9h
ZGVyLmlkZW50aWZpZXIoKSwgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpjcmVhdGUoKnRoaXMsIGxv
YWRlcikpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAKICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJMb2FkZXJTdHJhdGVneSgpLmFkZFVSTFNjaGVtZVRhc2tQcm94eSgq
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3Rh
cnRMb2FkaW5nKCk7CiB9CiAKK3ZvaWQgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5Ojp0YXNrRGlk
UGVyZm9ybVJlZGlyZWN0aW9uKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYgbmV3UmVxdWVzdCkKK3sKKyAgICBhdXRvKiB0YXNrID0gbV90YXNrcy5nZXQodGFza0lkZW50
aWZpZXIpOworICAgIGlmICghdGFzaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRhc2st
PmRpZFBlcmZvcm1SZWRpcmVjdGlvbihXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2UpLCBXVEZNb3Zl
KG5ld1JlcXVlc3QpKTsKK30KIAogdm9pZCBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHk6OnRhc2tE
aWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuaAkocmV2
aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVS
TFNjaGVtZUhhbmRsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMSArMjcsMjUgQEAK
IAogI2luY2x1ZGUgIldlYlVSTFNjaGVtZVRhc2tQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5KTsK
K2NsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlVS
TFNjaGVtZUhhbmRsZXJQcm94eT4gewogcHVibGljOgotICAgIFdlYlVSTFNjaGVtZUhhbmRsZXJQ
cm94eShXZWJQYWdlJiwgdWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHk+IGNyZWF0ZShXZWJQYWdlJiBwYWdlLCB1aW50NjRfdCBpZGVu
dGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVVJMU2NoZW1l
SGFuZGxlclByb3h5KHBhZ2UsIGlkZW50aWZpZXIpKTsKKyAgICB9CiAgICAgfldlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eSgpOwogCiAgICAgdm9pZCBzdGFydE5ld1Rhc2soV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXImKTsKQEAgLTQ5LDE2ICs1MywxOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFdlYlBhZ2UmIHBh
Z2UoKSB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAorICAgIHZvaWQgdGFza0RpZFBlcmZvcm1SZWRp
cmVjdGlvbih1aW50NjRfdCB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB0YXNrRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJik7CiAgICAgdm9pZCB0YXNrRGlkUmVjZWl2ZURhdGEodWludDY0X3QgdGFza0lk
ZW50aWZpZXIsIHNpemVfdCwgY29uc3QgdWludDhfdCogZGF0YSk7CiAgICAgdm9pZCB0YXNrRGlk
Q29tcGxldGUodWludDY0X3QgdGFza0lkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKICAgICB2b2lkIHRhc2tEaWRTdG9wTG9hZGluZyhXZWJVUkxTY2hlbWVUYXNrUHJv
eHkmKTsKIAogcHJpdmF0ZToKKyAgICBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkoV2ViUGFnZSYs
IHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKICAgICB1aW50
NjRfdCBtX2lkZW50aWZpZXIgeyAwIH07CiAKLSAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIHN0
ZDo6dW5pcXVlX3B0cjxXZWJVUkxTY2hlbWVUYXNrUHJveHk+PiBtX3Rhc2tzOworICAgIEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJVUkxTY2hlbWVUYXNrUHJveHk+PiBtX3Rhc2tzOwogfTsg
Ly8gY2xhc3MgV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRh
c2tQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94eS5jcHAJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwzMiBAQCB2b2lkIFdlYlVSTFNjaGVtZVRhc2tQcm94
eTo6c3RvcExvYWRpbmcoCiAgICAgLy8gVGhpcyBsaW5lIHdpbGwgcmVzdWx0IGluIHRoaXMgYmVp
bmcgZGVsZXRlZC4KICAgICBtX3VybFNjaGVtZUhhbmRsZXIudGFza0RpZFN0b3BMb2FkaW5nKCp0
aGlzKTsKIH0KKyAgICAKK3ZvaWQgV2ViVVJMU2NoZW1lVGFza1Byb3h5OjpkaWRQZXJmb3JtUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgaWYgKCFoYXNMb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBvcmlnaW5hbFJlcXVlc3QgPSBy
ZXF1ZXN0XSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgeworICAgICAgICBtX3dhaXRpbmdG
b3JSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gZmFsc2U7CisgICAgICAgIC8vIFdlIGRvIG5v
dCBpbmZvcm0gdGhlIFVJUHJvY2VzcyBvZiBXZWJLaXQncyBuZXcgcmVxdWVzdCB3aXRoIHRoZSBn
aXZlbiBzdWdnZXN0ZWQgcmVxdWVzdC4KKyAgICAgICAgLy8gV2UgZG8gd2FudCB0byBrbm93IGlm
IFdlYktpdCB3b3VsZCBoYXZlIGdlbmVyYXRlZCBhIHJlcXVlc3QgdGhhdCBkaWZmZXJzIGZyb20g
dGhlIHN1Z2dlc3RlZCByZXF1ZXN0LCB0aG91Z2guCisgICAgICAgIGlmIChyZXF1ZXN0LnVybCgp
ICE9IG9yaWdpbmFsUmVxdWVzdC51cmwoKSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVk
aXJlY3RlZCBzY2hlbWUgdGFzayB3b3VsZCBoYXZlIGJlZW4gc2VudCB0byBhIGRpZmZlcmVudCBV
UkwuIik7CisgICAgfTsKKyAgICAKKyAgICBpZiAobV93YWl0aW5nRm9yUmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlcikKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJSZWNlaXZlZCByZWRpcmVjdCBkdXJp
bmcgcHJldmlvdXMgcmVkaXJlY3QgcHJvY2Vzc2luZy4iKTsKKyAgICBtX3dhaXRpbmdGb3JSZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyID0gdHJ1ZTsKKworICAgIG1fY29yZUxvYWRlci0+d2lsbFNl
bmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKK30KIAogdm9pZCBXZWJVUkxTY2hlbWVUYXNrUHJveHk6OmRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKKyAgICBp
ZiAobV93YWl0aW5nRm9yUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJSZWNlaXZlZCByZXNwb25zZSBkdXJpbmcgcmVkaXJlY3QgcHJvY2Vzc2luZy4iKTsK
KyAgICAKICAgICBpZiAoIWhhc0xvYWRlcigpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2No
ZW1lVGFza1Byb3h5LmgJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC0zNywxNiArMzgsMTkgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eTsKIAotY2xhc3MgV2Vi
VVJMU2NoZW1lVGFza1Byb3h5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJVUkxTY2hl
bWVUYXNrUHJveHkpOworY2xhc3MgV2ViVVJMU2NoZW1lVGFza1Byb3h5IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViVVJMU2NoZW1lVGFza1Byb3h5PiB7CiBwdWJsaWM6Ci0gICAgV2ViVVJMU2NoZW1l
VGFza1Byb3h5KFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSYsIFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyJik7Ci0KKyAgICBzdGF0aWMgUmVmPFdlYlVSTFNjaGVtZVRhc2tQcm94eT4gY3JlYXRlKFdl
YlVSTFNjaGVtZUhhbmRsZXJQcm94eSYgaGFuZGxlciwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIm
IGxvYWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVSTFNjaGVt
ZVRhc2tQcm94eShoYW5kbGVyLCBsb2FkZXIpKTsKKyAgICB9CisgICAgCiAgICAgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0
OyB9CiAKICAgICB2b2lkIHN0YXJ0TG9hZGluZygpOwogICAgIHZvaWQgc3RvcExvYWRpbmcoKTsK
IAorICAgIHZvaWQgZGlkUGVyZm9ybVJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVEYXRhKHNpemVfdCwgY29uc3QgdWludDhfdCogZGF0YSk7CiAgICAgdm9pZCBkaWRDb21w
bGV0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CkBAIC01NCwxMiArNTgsMTQgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQogCiBwcml2YXRlOgorICAgIFdlYlVSTFNjaGVtZVRhc2tQcm94eShXZWJV
UkxTY2hlbWVIYW5kbGVyUHJveHkmLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciYpOwogICAgIGJv
b2wgaGFzTG9hZGVyKCk7CiAKICAgICBXZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkmIG1fdXJsU2No
ZW1lSGFuZGxlcjsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI+IG1fY29yZUxv
YWRlcjsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogICAgIHVuc2ln
bmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIGJvb2wgbV93YWl0aW5nRm9yUmVkaXJlY3RDb21w
bGV0aW9uSGFuZGxlciB7IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIx
ODcwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE3LTA2LTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWRkIFNQSSB0byBXS1VSTFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tOgorICAgICAg
ICAoLVtTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAg
ICAoLVtTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RvcFVSTFNjaGVtZVRhc2s6XSk6CisgICAgICAg
IChURVNUKToKKyAgICAgICAgKC1bUmVkaXJlY3RTY2hlbWVIYW5kbGVyIHdlYlZpZXc6c3RhcnRV
UkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmll
dzpzdG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKC1bUmVkaXJlY3RTY2hlbWVIYW5kbGVy
IHdlYlZpZXc6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
Ol0pOgorICAgICAgICAoLVtSZWRpcmVjdFNjaGVtZUhhbmRsZXIgd2ViVmlldzpkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U6ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtS
ZWRpcmVjdFNjaGVtZUhhbmRsZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3Jp
cHRNZXNzYWdlOl0pOgorCiAyMDE3LTA2LTIyICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxODYzMy4KSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0x
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29h
L1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tCShyZXZpc2lvbiAyMTg2MzUpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VSTFNjaGVtZUhhbmRsZXItMS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE1IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGll
cy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxl
ci5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFzay5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotc3RhdGljIGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOworc3RhdGljIGJvb2wg
ZG9uZTsKIAogQGludGVyZmFjZSBTY2hlbWVIYW5kbGVyIDogTlNPYmplY3QgPFdLVVJMU2NoZW1l
SGFuZGxlcj4KIEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpz
dGFydGVkVVJMczsKQEAgLTc2LDcgKzc3LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHN0YQogICAgIC8vIEFsd2F5cyBmYWlsIHRoZSBpbWFnZSBsb2FkLgogICAgIGlm
IChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0
aW5nOmltYWdlIl0pIHsKICAgICAgICAgW3Rhc2sgZGlkRmFpbFdpdGhFcnJvcjpbTlNFcnJvciBl
cnJvcldpdGhEb21haW46QCJUZXN0V2ViS2l0QVBJIiBjb2RlOjEgdXNlckluZm86bmlsXV07Ci0g
ICAgICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IHRydWU7CisgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MCw3ICs5MSw3IEBAIC0gKHZvaWQpd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdG8KIHsKICAgICBbX3N0b3BwZWRVUkxzIGFkZE9i
amVjdDp0YXNrLnJlcXVlc3QuVVJMXTsKIAotICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IHRy
dWU7CisgICAgZG9uZSA9IHRydWU7CiB9CiAKIEBlbmQKQEAgLTEwMiw3ICsxMDMsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciBtYWluQnl0ZXNbXSA9CiAKIFRFU1QoVVJMU2NoZW1lSGFuZGxlciwgQmFz
aWMpCiB7Ci0gICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgZG9uZSA9IGZh
bHNlOwogCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCkBA
IC0xMTQsNyArMTE1LDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBCYXNpYykKICAgICBOU1VS
TFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAidGVzdGluZzptYWluIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OnJlcXVlc3RdOwogCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBF
WFBFQ1RfRVEoW2hhbmRsZXIuZ2V0KCkuc3RhcnRlZFVSTHMgY291bnRdLCAydSk7CiAgICAgRVhQ
RUNUX1RSVUUoW1toYW5kbGVyLmdldCgpLnN0YXJ0ZWRVUkxzIG9iamVjdEF0SW5kZXg6MF0gaXNF
cXVhbDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6bWFpbiJdXSk7CkBAIC0xMjcsNyAr
MTI4LDcgQEAgVEVTVChVUkxTY2hlbWVIYW5kbGVyLCBOb01JTUVUeXBlKQogICAgIC8vIFNpbmNl
IHRoZXJlJ3Mgbm8gTUlNRVR5cGUsIGFuZCBubyBOYXZpZ2F0aW9uRGVsZWdhdGUgdG8gdGVsbCBX
ZWJLaXQgdG8gZG8gdGhlIGxvYWQgYW55d2F5cywgV2ViS2l0IHdpbGwgaWdub3JlIChzaWxlbnRs
eSBmYWlsKSB0aGUgbG9hZC4KICAgICAvLyBUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGlzIGNv
bW11bmljYXRlZCBiYWNrIHRvIHRoZSBVUkxTY2hlbWVIYW5kbGVyLgogCi0gICAgcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgUmV0YWluUHRy
PFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCkBAIC0xMzksNyArMTQwLDcgQEAgVEVT
VChVUkxTY2hlbWVIYW5kbGVyLCBOb01JTUVUeXBlKQogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVz
dCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0
ZXN0aW5nOm1haW4iXV07CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAKLSAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIEVYUEVDVF9FUShbaGFuZGxl
ci5nZXQoKS5zdGFydGVkVVJMcyBjb3VudF0sIDF1KTsKICAgICBFWFBFQ1RfVFJVRShbW2hhbmRs
ZXIuZ2V0KCkuc3RhcnRlZFVSTHMgb2JqZWN0QXRJbmRleDowXSBpc0VxdWFsOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAidGVzdGluZzptYWluIl1dKTsKQEAgLTE5MSw1ICsxOTIsMTY2IEBAIFRFU1Qo
VVJMU2NoZW1lSGFuZGxlciwgQnVpbHRpblNjaGVtZXMpCiAgICAgfQogfQogCitzdGF0aWMgYm9v
bCByZWNlaXZlZFJlZGlyZWN0Oworc3RhdGljIGJvb2wgcmVzcG9uc2VQb2xpY3lEZWNpZGVkOwor
CitAaW50ZXJmYWNlIFJlZGlyZWN0U2NoZW1lSGFuZGxlciA6IE5TT2JqZWN0IDxXS1VSTFNjaGVt
ZUhhbmRsZXIsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gUmVkaXJlY3RTY2hlbWVIYW5kbGVyIHsgfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8
V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgQVNTRVJUX1NUUkVRKHRhc2sucmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZywgInRlc3Rpbmc6Ly8vaW5pdGlhbCIpOworICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gW1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpuaWwgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXTsKKyAgICBOU1VSTFJlcXVlc3Qg
KnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAidGVzdGluZzovLy9yZWRpcmVjdGVkIl1dOworICAgIFsoaWQ8V0tVUkxTY2hlbWVUYXNr
UHJpdmF0ZT4pdGFzayBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOnJlc3BvbnNlIG5ld1JlcXVlc3Q6
cmVxdWVzdF07CisgICAgQVNTRVJUX0ZBTFNFKHJlY2VpdmVkUmVkaXJlY3QpOworICAgIEFTU0VS
VF9TVFJFUSh0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJ0ZXN0
aW5nOi8vL3JlZGlyZWN0ZWQiKTsKKyAgICBOU1N0cmluZyAqaHRtbCA9IEAiPHNjcmlwdD53aW5k
b3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnRG9jdW1l
bnQgVVJMOiAnICsgZG9jdW1lbnQuVVJMKTs8L3NjcmlwdD4iOworICAgIFt0YXNrIGRpZFJlY2Vp
dmVSZXNwb25zZTpbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpodG1sLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF1dOworICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOlto
dG1sIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW3Rhc2sg
ZGlkRmluaXNoXTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0
b3BVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgQVNTRVJU
X1RSVUUoZmFsc2UpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOihudWxsX3Vu
c3BlY2lmaWVkIFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBBU1NFUlRfRkFMU0Uo
cmVjZWl2ZWRSZWRpcmVjdCk7CisgICAgcmVjZWl2ZWRSZWRpcmVjdCA9IHRydWU7Cit9CisKKy0g
KHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uUmVzcG9uc2U6KFdLTmF2aWdhdGlvblJlc3BvbnNlICopbmF2aWdhdGlvblJlc3BvbnNlIGRl
Y2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3kpKWRlY2lz
aW9uSGFuZGxlcgoreworICAgIEFTU0VSVF9UUlVFKHJlY2VpdmVkUmVkaXJlY3QpOworICAgIEFT
U0VSVF9TVFJFUShuYXZpZ2F0aW9uUmVzcG9uc2UucmVzcG9uc2UuVVJMLmFic29sdXRlU3RyaW5n
LlVURjhTdHJpbmcsICJ0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQiKTsKKyAgICBBU1NFUlRfRkFMU0Uo
cmVzcG9uc2VQb2xpY3lEZWNpZGVkKTsKKyAgICByZXNwb25zZVBvbGljeURlY2lkZWQgPSB0cnVl
OworICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeUFsbG93KTsK
K30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9s
bGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1Nj
cmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiRG9jdW1lbnQg
VVJMOiB0ZXN0aW5nOi8vL3JlZGlyZWN0ZWQiLCBbbWVzc2FnZSBib2R5XSk7CisgICAgZG9uZSA9
IHRydWU7Cit9CitAZW5kCisKK1RFU1QoVVJMU2NoZW1lSGFuZGxlciwgUmVkaXJlY3Rpb24pCit7
CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbUmVkaXJlY3RT
Y2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2No
ZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RpbmciXTsKKyAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
W3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmhhbmRsZXIuZ2V0KCldOworICAgIAorICAg
IE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOi8vL2luaXRpYWwiXV07CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAgCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKyAgICAKKyAgICBFWFBFQ1RfVFJVRShyZXNwb25zZVBvbGljeURlY2lkZWQpOwor
ICAgIEVYUEVDVF9TVFJFUSh3ZWJWaWV3LmdldCgpLlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3Ry
aW5nLCAidGVzdGluZzovLy9yZWRpcmVjdGVkIik7Cit9CisKK2VudW0gY2xhc3MgQ29tbWFuZCB7
CisgICAgUmVkaXJlY3QsCisgICAgUmVzcG9uc2UsCisgICAgRGF0YSwKKyAgICBGaW5pc2gsCisg
ICAgRXJyb3IsCit9OworCitAaW50ZXJmYWNlIFRhc2tTY2hlbWVIYW5kbGVyIDogTlNPYmplY3Qg
PFdLVVJMU2NoZW1lSGFuZGxlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbW1hbmRzOihW
ZWN0b3I8Q29tbWFuZD4mJiljb21tYW5kVmVjdG9yIGV4cGVjdGVkRXhjZXB0aW9uOihib29sKWV4
cGVjdGVkOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGFza1NjaGVtZUhhbmRsZXIgeworICAg
IFZlY3RvcjxDb21tYW5kPiBjb21tYW5kczsKKyAgICBib29sIGV4cGVjdGVkRXhjZXB0aW9uOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb21tYW5kczooVmVjdG9yPENvbW1hbmQ+JiYp
Y29tbWFuZFZlY3RvciBleHBlY3RlZEV4Y2VwdGlvbjooYm9vbClleHBlY3RlZAoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIHNlbGYtPmNvbW1hbmRzID0gV1RGTW92ZShjb21tYW5kVmVjdG9yKTsKKyAgICBz
ZWxmLT5leHBlY3RlZEV4Y2VwdGlvbiA9IGV4cGVjdGVkOworICAgIAorICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hl
bWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCit7CisgICAgYm9vbCBjYXVnaHRFeGNl
cHRpb24gPSBmYWxzZTsKKyAgICBAdHJ5IHsKKyAgICAgICAgZm9yIChhdXRvIGNvbW1hbmQgOiBj
b21tYW5kcykgeworICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBj
YXNlIENvbW1hbmQ6OlJlZGlyZWN0OgorICAgICAgICAgICAgICAgIFsoaWQ8V0tVUkxTY2hlbWVU
YXNrUHJpdmF0ZT4pdGFzayBfZGlkUGVyZm9ybVJlZGlyZWN0aW9uOltbW05TVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXSBuZXdSZXF1ZXN0OltbW05TVVJMUmVxdWVzdCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQ29tbWFuZDo6UmVzcG9uc2U6CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkUmVj
ZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV07
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkRhdGE6
CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W1tbTlNEYXRhIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDb21tYW5kOjpGaW5pc2g6CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6RXJyb3I6
CisgICAgICAgICAgICAgICAgW3Rhc2sgZGlkRmFpbFdpdGhFcnJvcjpbW1tOU0Vycm9yIGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIEBjYXRjaChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9u
KQorICAgIHsKKyAgICAgICAgY2F1Z2h0RXhjZXB0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAgQVNT
RVJUX0VRKGNhdWdodEV4Y2VwdGlvbiwgZXhwZWN0ZWRFeGNlcHRpb24pOworICAgIGRvbmUgPSB0
cnVlOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RvcFVSTFNj
aGVtZVRhc2s6KGlkIDxXS1VSTFNjaGVtZVRhc2s+KXRhc2sKK3sKK30KK0BlbmQKKworZW51bSBj
bGFzcyBTaG91bGRSYWlzZUV4Y2VwdGlvbiB7IE5vLCBZZXMgfTsKKworc3RhdGljIHZvaWQgY2hl
Y2tDYWxsU2VxdWVuY2UoVmVjdG9yPENvbW1hbmQ+JiYgY29tbWFuZHMsIFNob3VsZFJhaXNlRXhj
ZXB0aW9uIHNob3VsZFJhaXNlRXhjZXB0aW9uKQoreworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUYXNrU2NoZW1lSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhDb21tYW5kczpXVEZNb3ZlKGNvbW1hbmRzKSBleHBlY3RlZEV4Y2Vw
dGlvbjpzaG91bGRSYWlzZUV4Y2VwdGlvbiA9PSBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzXSk7
CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZv
clVSTFNjaGVtZTpAInRlc3RpbmciXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0
ZXN0aW5nOi8vL2luaXRpYWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Cit9CisKK1RFU1QoVVJMU2NoZW1lSGFuZGxlciwgRXhjZXB0aW9ucykKK3sKKyAgICBjaGVj
a0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6UmVzcG9uc2UsIENvbW1hbmQ6OkRhdGEsIENvbW1hbmQ6
OkZpbmlzaH0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpObyk7CisgICAgY2hlY2tDYWxsU2VxdWVu
Y2Uoe0NvbW1hbmQ6OlJlc3BvbnNlLCBDb21tYW5kOjpSZWRpcmVjdH0sIFNob3VsZFJhaXNlRXhj
ZXB0aW9uOjpZZXMpOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZWRpcmVjdCwg
Q29tbWFuZDo6UmVzcG9uc2V9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6Tm8pOworICAgIGNoZWNr
Q2FsbFNlcXVlbmNlKHtDb21tYW5kOjpEYXRhLCBDb21tYW5kOjpGaW5pc2h9LCBTaG91bGRSYWlz
ZUV4Y2VwdGlvbjo6WWVzKTsKKyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6RXJyb3J9
LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6Tm8pOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21t
YW5kOjpFcnJvciwgQ29tbWFuZDo6RXJyb3J9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsK
KyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6RXJyb3IsIENvbW1hbmQ6OkRhdGF9LCBT
aG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKKyAgICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFu
ZDo6UmVzcG9uc2UsIENvbW1hbmQ6OkZpbmlzaCwgQ29tbWFuZDo6RGF0YX0sIFNob3VsZFJhaXNl
RXhjZXB0aW9uOjpZZXMpOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25z
ZSwgQ29tbWFuZDo6RmluaXNoLCBDb21tYW5kOjpSZWRpcmVjdH0sIFNob3VsZFJhaXNlRXhjZXB0
aW9uOjpZZXMpOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25zZSwgQ29t
bWFuZDo6RmluaXNoLCBDb21tYW5kOjpSZXNwb25zZX0sIFNob3VsZFJhaXNlRXhjZXB0aW9uOjpZ
ZXMpOworICAgIGNoZWNrQ2FsbFNlcXVlbmNlKHtDb21tYW5kOjpSZXNwb25zZSwgQ29tbWFuZDo6
RmluaXNoLCBDb21tYW5kOjpGaW5pc2h9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKKyAg
ICBjaGVja0NhbGxTZXF1ZW5jZSh7Q29tbWFuZDo6UmVzcG9uc2UsIENvbW1hbmQ6OkZpbmlzaCwg
Q29tbWFuZDo6RXJyb3J9LCBTaG91bGRSYWlzZUV4Y2VwdGlvbjo6WWVzKTsKK30KIAogI2VuZGlm
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>