<?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>59843</bug_id>
          
          <creation_ts>2011-04-29 16:26:52 -0700</creation_ts>
          <short_desc>Support cross-origin XMLHttpRequest in isolated worlds</short_desc>
          <delta_ts>2011-06-01 10:58:05 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Mihai Parparita">mihaip</assigned_to>
          <cc>aa</cc>
    
    <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jberlin</cc>
    
    <cc>joe</cc>
    
    <cc>magreenblatt</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>395607</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-29 16:26:52 -0700</bug_when>
    <thetext>Support cross-origin XMLHttpRequest in isolated worlds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395608</commentid>
    <comment_count>1</comment_count>
      <attachid>91764</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-29 16:27:41 -0700</bug_when>
    <thetext>Created attachment 91764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395611</commentid>
    <comment_count>2</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-29 16:33:32 -0700</bug_when>
    <thetext>This is a very rough sketch of the simpler approach, where the XMLHttpRequest constructor has a SecurityOrigin passed to it, and it (and the DocumentThreadableLoader that it uses) use that instead of the document&apos;s/script execution context&apos;s.

The V8 bindings get the set of whitelisted origins from the V8IsolatedContext. Does it seem right to hang the whitelist off the V8IsolatedContext?

The copying of document&apos;s SecurityOrigin that WhitelistedSecurityOrigin seems like a bad idea. Ideally I&apos;d like to turn WhitelistedSecurityOrigin into a facade that delegates to the document&apos;s, except for the whitelisted queries.

There&apos;s also no JSC support, I haven&apos;t looked into what it would take on that side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395619</commentid>
    <comment_count>3</comment_count>
      <attachid>91764</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-29 16:42:13 -0700</bug_when>
    <thetext>Comment on attachment 91764
Patch

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

The whitespace changes are also distracting.  Maybe make them separately?

&gt; Source/WebCore/bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:59
&gt; +    RefPtr&lt;SecurityOrigin&gt; securityOrigin = 0;

RefPtr automagically inits to 0.

&gt; Source/WebCore/bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:62
&gt; +      securityOrigin = WhitelistedSecurityOrigin::create(
&gt; +          context-&gt;securityOrigin(), isolatedContext-&gt;originAccessWhitelist());

Bad indent here.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:71
&gt; -    , m_sameOriginRequest(document-&gt;securityOrigin()-&gt;canRequest(request.url()))
&gt; +    , m_sameOriginRequest((options.securityOrigin ? options.securityOrigin.get() : document-&gt;securityOrigin())-&gt;canRequest(request.url()))

This should be a helper function.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:99
&gt; +        SecurityOrigin* securityOrigin = options.securityOrigin ? options.securityOrigin.get() : document-&gt;securityOrigin();

Another instance of the helper function.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:406
&gt; +SecurityOrigin* DocumentThreadableLoader::securityOrigin() const
&gt; +{
&gt; +    return m_options.securityOrigin ? m_options.securityOrigin.get() : m_document-&gt;securityOrigin();
&gt;  }

Ah, you wrote it but didn&apos;t use it everywhere.  :)

&gt; Source/WebCore/loader/ThreadableLoader.h:60
&gt; +        ThreadableLoaderOptions() : sendLoadCallbacks(false), sniffContent(false), allowCredentials(false), forcePreflight(false), crossOriginRequestPolicy(DenyCrossOriginRequests), securityOrigin(0) { }

RefPtr automagically inits to zero.

&gt; Source/WebCore/page/SecurityOrigin.h:224
&gt; +class WhitelistedSecurityOrigin : public SecurityOrigin {

Can do we this without making a subclass?  That doesn&apos;t seem like the right approach.  You should hand the XMLHttpRequest constructor the SecurityOrigin for the content script, not the one from the main world augmented with extra data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395764</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-29 22:30:52 -0700</bug_when>
    <thetext>This is probably a dumb question, but doesn&apos;t cross-origin XHR in isolated worlds already work, as evidenced by Chrome and Safari extensions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395767</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-29 22:39:40 -0700</bug_when>
    <thetext>&gt; This is probably a dumb question, but doesn&apos;t cross-origin XHR in isolated worlds already work, as evidenced by Chrome and Safari extensions?

In the Chrome extension system (and possibly the Safari system as well), extensions can have privileges to make XMLHttpRequests to some origins without the restrictions from CORS.  Mihai would like to extend that privilege to extension content scripts as well as background pages in the Chrome system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395768</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-29 22:53:21 -0700</bug_when>
    <thetext>CC&apos;ing some people who may have an opinion about this. Making XHR requests from content scripts seems suspicious to me, but I admit knowing very little about extensions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395771</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-29 23:04:42 -0700</bug_when>
    <thetext>&gt; Making XHR requests from content scripts seems suspicious to me, but I admit knowing very little about extensions.

It&apos;s a top feature request from Chrome extension authors:
http://code.google.com/p/chromium/issues/detail?id=18857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395775</commentid>
    <comment_count>8</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-29 23:34:56 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Mihai would like to extend that privilege to extension content scripts as well as background pages in the Chrome system.

Background pages in Chrome can already make cross-origin requests (this is enabled by SecurityOrigin::addOriginAccessWhitelistEntry) to hosts that are listed in the permissions section of the manifest. I&apos;m not clear if global HTML pages (the Safari extension system equivalent) can do this too, at least from my reading of http://developer.apple.com/library/safari/#documentation/Tools/Conceptual/SafariExtensionGuide/AddingaGlobalHTMLPage/AddingaGlobalHTMLPage.html and the permissions section. Pointers by someone familiar with the Safari extension system would be appreciated.

Given that content scripts can already communicate with background pages (and vice-versa), it&apos;s already possible to do cross-origin requests from them by having the background page do the request and pass the response back to the script, so this is not adding any new capabilities.

There are two reasons for wanting to allow content scripts to have cross-origin access (within their isolated world) directly:
1. For a large class of extensions, this removes the need for a background page. In the Chromium multi-process model, this means that that whole process can be gotten rid of (I&apos;m not sure if in a WebKit2 model Safari would also have global HTML pages in their own process)
2. Extension authors find the content script/background page interaction confusing and cumbersome. Additionally, the Greasemonkey compatibility layer that Chromium provides is currently not as compatible as it could be, since GM_xmlhttprequest (which can make cross-origin requests with Greasemonkey) does not behave the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395781</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-30 00:51:28 -0700</bug_when>
    <thetext>&gt; For a large class of extensions, this removes the need for a background page.

Safari documentation recommends keeping injected scripts lightweight (which is only natural, because they are loaded into every frame). As much code as possible should be in global page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395815</commentid>
    <comment_count>10</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-30 09:02:56 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Mihai would like to extend that privilege to extension content scripts as well as background pages in the Chrome system.
&gt; 
&gt; Background pages in Chrome can already make cross-origin requests (this is enabled by SecurityOrigin::addOriginAccessWhitelistEntry) to hosts that are listed in the permissions section of the manifest. I&apos;m not clear if global HTML pages (the Safari extension system equivalent) can do this too, at least from my reading of http://developer.apple.com/library/safari/#documentation/Tools/Conceptual/SafariExtensionGuide/AddingaGlobalHTMLPage/AddingaGlobalHTMLPage.html and the permissions section. Pointers by someone familiar with the Safari extension system would be appreciated.

In Safari Extensions, Global pages *can* make cross-origin requests to hosts that are in the whitelist specified in the Extension builder.

In addition, full pages (Extension content loaded into a tab, not content scripts) can also make cross-origin requests to the hosts that are in the whitelist specified in the Extension builder.

&gt; 
&gt; Given that content scripts can already communicate with background pages (and vice-versa), it&apos;s already possible to do cross-origin requests from them by having the background page do the request and pass the response back to the script, so this is not adding any new capabilities.

Which makes me a little suspicious of adding another way to do the same thing.

&gt; 
&gt; There are two reasons for wanting to allow content scripts to have cross-origin access (within their isolated world) directly:
&gt; 1. For a large class of extensions, this removes the need for a background page. In the Chromium multi-process model, this means that that whole process can be gotten rid of (I&apos;m not sure if in a WebKit2 model Safari would also have global HTML pages in their own process)
&gt; 2. Extension authors find the content script/background page interaction confusing and cumbersome. Additionally, the Greasemonkey compatibility layer that Chromium provides is currently not as compatible as it could be, since GM_xmlhttprequest (which can make cross-origin requests with Greasemonkey) does not behave the same way.

I am not so much convinced by (1) because keeping the injected scripts lightweight means shorter loading times. 

I am also not really convinced by the beginning argument of (2) because async communication is the model that we have intentionally exposed to developers.

As to the second part of (2) - the Greasemonkey compatibility layer - I am a bit ambivalent. I don&apos;t think that all browser Extension APIs need to be able to do the exact same things. However, It does seem to be a big request by Chrome Extension Developers.

Tim, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395824</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-04-30 10:41:07 -0700</bug_when>
    <thetext>Yes, global page in Safari are the more-or-less same as Chrome&apos;s background page.

Keeping content scripts light-weight is nice, but not always practical. And when content scripts are  whitelisted suitably they don&apos;t really impact things much. And if you let developers eliminate a global page that only exists for cross-origin XHR, then you eliminate the overhead of a whole WebView (and maybe a process) along with the required IPC in Chrome and WebKit2.

The current model somewhat encurages developers to cache responses for XHRs in the global page (assuming multiple tabs might be requesting the same info.) (At least that is what I try to do.) But I suspect most developers just wire things up to do direct XHRs and don&apos;t do anything smart. And even create wrappers like GM_xmlhttprequest to help them.

Given that, I think we should just allow cross-origin XHRs an simplify things for developers and make it more efficient than what they already do with a global page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395843</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-04-30 17:26:19 -0700</bug_when>
    <thetext>It seems slightly confusing to me that we would allow violation of the same-origin policy for only XHR. Is there a reason to limit this?  Perhaps all origin checks should by tied to a world?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395844</commentid>
    <comment_count>13</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2011-04-30 18:10:09 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; It seems slightly confusing to me that we would allow violation of the same-origin policy for only XHR. Is there a reason to limit this?  Perhaps all origin checks should by tied to a world?

XHR is all we needed when we first implemented this. There was no reason that I remember other than that.

In Chrome extensions, when you request permission to an origin, access to script that origin (via programmatic script injection) comes with it. So your proposal wouldn&apos;t be a capability increase for us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399252</commentid>
    <comment_count>14</comment_count>
      <attachid>92517</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-05 17:58:08 -0700</bug_when>
    <thetext>Created attachment 92517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399256</commentid>
    <comment_count>15</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-05 18:05:27 -0700</bug_when>
    <thetext>(new patch fixes other comments)

(In reply to comment #3)
&gt; &gt; Source/WebCore/page/SecurityOrigin.h:224
&gt; &gt; +class WhitelistedSecurityOrigin : public SecurityOrigin {
&gt; 
&gt; Can do we this without making a subclass?  That doesn&apos;t seem like the right approach.  You should hand the XMLHttpRequest constructor the SecurityOrigin for the content script, not the one from the main world augmented with extra data.

Not quite sure I understand. I&apos;d like the content script to have access to the origin that the document that it&apos;s injected is in (hence the copy from the main world), plus additional entries. Right now SecurityOrigin only stores data about one origin.

Or are you suggesting that I create a new (unique and/or keyed off the world ID) for the content script/isolated world, and then use SecurityOrigin::addOriginAccessWhitelistEntry to give it access to additional origins?

I might actually prefer that, since then I wouldn&apos;t have to create the V8IsolatedContext in  V8Proxy::addIsolatedWorldOriginAccessWhitelistEntry (just to have something to hang the entries off of), which in turn requires the extension ID to be passed around everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399262</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 18:17:24 -0700</bug_when>
    <thetext>Can an extension have a content script injected into a page which it isn&apos;t allowed to issue XMLHttpRequests for?  Those two abilities seem equally powerful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399300</commentid>
    <comment_count>17</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-05 20:23:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Can an extension have a content script injected into a page which it isn&apos;t allowed to issue XMLHttpRequests for?  Those two abilities seem equally powerful.

Yes, I believe the list of host/origin permissions at the extension manifest level can be different from the list of match patterns for the content scripts.

However, I don&apos;t think we would actually want to disallow the content script from make requests to the parent page&apos;s origin, since that&apos;s possible right now (that&apos;s all they can do), and so we&apos;d risk breaking existing extensions (we can try to figure out how many Chrome extensions that would be affected if you think it&apos;s a worthwhile compatibility break).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399302</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 20:27:48 -0700</bug_when>
    <thetext>&gt; Yes, I believe the list of host/origin permissions at the extension manifest level can be different from the list of match patterns for the content scripts.

Can we just make them the same?  There isn&apos;t much sense in them being different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399303</commentid>
    <comment_count>19</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-05 20:30:54 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Can we just make them the same?  There isn&apos;t much sense in them being different.

Possible scenario: an extension that shows the Barnes&amp;Noble price for a book when I&apos;m on Amazon&apos;s page. Then the permission would be for bn.com, but the content script match pattern would be for amazon.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399304</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 20:34:13 -0700</bug_when>
    <thetext>&gt; Possible scenario: an extension that shows the Barnes&amp;Noble price for a book when I&apos;m on Amazon&apos;s page. Then the permission would be for bn.com, but the content script match pattern would be for amazon.com.

Right but, in the end, the extension has access to both bn.com and amazon.com.  We could just reflect that information in it&apos;s privileges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399305</commentid>
    <comment_count>21</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-05-05 20:35:35 -0700</bug_when>
    <thetext>Safari is the same way. Domain access can differ from content script patterns. I makes sense to allow conten scripts to be a subset of the domain list (XHR access only to one domain with content scripts on another domain), but it does not make sense to have content script patterns be a super set (since those patterns outside the domain set wont work and get filtered out, at least in Safari.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399320</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 22:03:04 -0700</bug_when>
    <thetext>ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409918</commentid>
    <comment_count>23</comment_count>
      <attachid>94857</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-25 14:23:36 -0700</bug_when>
    <thetext>Created attachment 94857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409920</commentid>
    <comment_count>24</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-25 14:26:43 -0700</bug_when>
    <thetext>I&apos;ve changed the approach slightly (as discussed in comment 15) to accomplish this via a ScriptController::setIsolatedWorldSecurityOrigin function, which allows XHRs in an isolated world to be associated with an arbitrary origin. Then extensions can set the associated security origin for the isolated world to &quot;chrome-extension://&lt;extension ID&gt;&quot; and then use addOriginAccessWhitelistEntry (like they already do to allow cross-origin XHR from extension pages).

The patch does not currently have JSC support or an implementation of LayoutTestController.setIsolatedWorldSecurityOrigin for any port but Chromium. I will add those if this approach seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409999</commentid>
    <comment_count>25</comment_count>
      <attachid>94857</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-25 16:13:54 -0700</bug_when>
    <thetext>Comment on attachment 94857
Patch

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

This looks like a nice approach.  It would be slightly prettier if DocumentThreadableLoader could be fully detached from Document, but we can&apos;t quite do that yet because of the loading system being entangled with Frame.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:376
&gt; +    return m_options.securityOrigin ? m_options.securityOrigin.get() : m_document-&gt;securityOrigin();

It&apos;s interesting, you can almost remove the m_document pointer from DocumentThreadableLoader.  There&apos;s still a tiny dependency on Frame / FrameLoader though.

&gt; Source/WebKit/chromium/public/WebFrame.h:256
&gt; +    virtual void setIsolatedWorldSecurityOrigin(int worldId, const WebSecurityOrigin&amp;) = 0;

It&apos;s strange that this is scoped to a WebFrame.  It seems more global somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410004</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-25 16:19:54 -0700</bug_when>
    <thetext>My read of the foregoing discussion is that it&apos;s unclear whether Safari will want to surface this feature in its extension system, but that there&apos;s general agreement that this isn&apos;t an unreasonable feature for embedders to want.

The approach in Mihai&apos;s current patch doesn&apos;t impose much of a cost.  The main complexity is to let the constructor of XMLHttpRequest and DocumentThreadableLoader override the SecurityOrigin of the associated Document.

The main question seems to be whether we should ask Mihai to provide a JSC implementation of this feature as well.  Given the uncertainty about whether Safari will want to surface this feature in its extension system, I&apos;m inclined to let him off the hook for now.  If there&apos;s a desire for a JSC implementation as well, I can certainly help strong-arm him into providing it as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410006</commentid>
    <comment_count>27</comment_count>
      <attachid>94857</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-25 16:20:39 -0700</bug_when>
    <thetext>Comment on attachment 94857
Patch

I&apos;m marking this R+ for now, but please give other folks a chance to comment before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410422</commentid>
    <comment_count>28</comment_count>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2011-05-26 07:32:14 -0700</bug_when>
    <thetext>I have a use case (bug #61007) that&apos;s related to but not identical to the isolated worlds requirements. I&apos;m using a custom (non-HTTP) protocol and would like to allow cross-origin XMLHttpRequest. Due to CrossOriginAccessControl non-HTTP protocols are not allowed to execute cross-origin XHR even when using the &quot;Access-Control-Allow-Origin&quot; header. So I think my only option currently is to grantUniversalAccess() which I would rather not do. For my use case it would be very nice if I could set the the SecurityOrigin (with whitelisting capabilities) on the WebFrame as a whole. Is this a feature that could be supported based on this patch? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410567</commentid>
    <comment_count>29</comment_count>
      <attachid>94997</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-26 10:16:37 -0700</bug_when>
    <thetext>Created attachment 94997
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410578</commentid>
    <comment_count>30</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-26 10:24:34 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; It&apos;s interesting, you can almost remove the m_document pointer from DocumentThreadableLoader.  There&apos;s still a tiny dependency on Frame / FrameLoader though.

Is it worth changing the DocumentThreadableLoader constructor to take a Frame instead of a Document, to make the dependency slightly smaller?

 &gt; &gt; Source/WebKit/chromium/public/WebFrame.h:256
&gt; &gt; +    virtual void setIsolatedWorldSecurityOrigin(int worldId, const WebSecurityOrigin&amp;) = 0;
&gt; 
&gt; It&apos;s strange that this is scoped to a WebFrame.  It seems more global somehow.

It needs to use the ScriptController instance, which is owned by the Frame.

(In reply to comment #26)
&gt; If there&apos;s a desire for a JSC implementation as well, I can certainly help strong-arm him into providing it as well.

I&apos;ve filed bug 61540 about the JSC implementation and added the new test to Skipped files for now. I&apos;ll start looking to an implementation of that this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410579</commentid>
    <comment_count>31</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-26 10:25:39 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; I have a use case (bug #61007) that&apos;s related to but not identical to the isolated worlds requirements. I&apos;m using a custom (non-HTTP) protocol and would like to allow cross-origin XMLHttpRequest. Due to CrossOriginAccessControl non-HTTP protocols are not allowed to execute cross-origin XHR even when using the &quot;Access-Control-Allow-Origin&quot; header. So I think my only option currently is to grantUniversalAccess() which I would rather not do. For my use case it would be very nice if I could set the the SecurityOrigin (with whitelisting capabilities) on the WebFrame as a whole. Is this a feature that could be supported based on this patch? Thanks.

Document exposes a setSecurityOrigin method that might be appropriate for your needs. I don&apos;t think adding not-quire-related functionality makes sense for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410585</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 10:41:02 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #25)
&gt; &gt; It&apos;s interesting, you can almost remove the m_document pointer from DocumentThreadableLoader.  There&apos;s still a tiny dependency on Frame / FrameLoader though.
&gt; 
&gt; Is it worth changing the DocumentThreadableLoader constructor to take a Frame instead of a Document, to make the dependency slightly smaller?

Probably not.  Eventually we&apos;ll remove the Frame dependency from the loader.  We can handle this issue at that time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410749</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 12:50:54 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 94997:

inspector/debugger/debugger-scripts.html bug 59921 (authors: pfeldman@chromium.org and podivilov@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410751</commentid>
    <comment_count>34</comment_count>
      <attachid>94997</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 12:53:13 -0700</bug_when>
    <thetext>Comment on attachment 94997
Patch for landing

Clearing flags on attachment: 94997

Committed r87423: &lt;http://trac.webkit.org/changeset/87423&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410753</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 12:53:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410844</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 14:36:50 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 94997:

http/tests/websocket/tests/multiple-connections.html bug 53825 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410850</commentid>
    <comment_count>37</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-05-26 14:39:55 -0700</bug_when>
    <thetext>Eric/Adam: the commit queue is still processing this patch even though it already landed it an hour ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410856</commentid>
    <comment_count>38</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-26 14:44:01 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Eric/Adam: the commit queue is still processing this patch even though it already landed it an hour ago.

It&apos;s trouble with our lock table, I think.  Sometimes two machines will get assigned the same patch even though they should not.  If you feel well versed in AppEngine datastore and transactions, perhaps you can tell me where I went wrong. :)  I&apos;m happy to give you a tour of the code.  Or it&apos;s possible that my re-write in https://bugs.webkit.org/show_bug.cgi?id=60993 will fix this class of bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413324</commentid>
    <comment_count>39</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-06-01 06:17:27 -0700</bug_when>
    <thetext>How does this affect thing like localStorage which use the security origin to determin what data store to access?

You might break content scripts if localStorage starts using the extension&apos;s security origin instead of the frame&apos;s security origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413492</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-01 10:52:01 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; How does this affect thing like localStorage which use the security origin to determin what data store to access?

It doesn&apos;t.

&gt; You might break content scripts if localStorage starts using the extension&apos;s security origin instead of the frame&apos;s security origin.

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413507</commentid>
    <comment_count>41</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-06-01 10:58:05 -0700</bug_when>
    <thetext>Great! Thanks Adam.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91764</attachid>
            <date>2011-04-29 16:27:41 -0700</date>
            <delta_ts>2011-05-05 17:58:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59843-20110429162740.patch</filename>
            <type>text/plain</type>
            <size>55942</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUyMDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MjdhOTY2M2ZlNjc5NTU5OTc5YmY2
MjcxMzg1YjVlMzQ5ZDEzNzEyLi4xZDM0YmI2MTA0NDBlZjQ2ZWUxNTQ5MDEwMTk1YjcxODY2ZWY0
ZTNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMjkgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNv
bGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTg0MworCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxk
L2Nyb3NzLW9yaWdpbi14aHItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sOiBBZGRlZC4K
KwogMjAxMS0wNC0yOCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGEgaHlwaGVuYXRpb24gdGVzdApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9y
aWdpbi14aHItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL2Nyb3NzLW9yaWdpbi14aHItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZm
NDNjYTQwOTE1MGE1NDc5NDE1OTgxODAzOTU1ZWUxZDQwZTRkMTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3Jp
Z2luLXhoci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorU1VDQ0VTUwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9yaWdp
bi14aHIuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZhYTg2OWNlMTA0ZWIwY2QyZGMz
OTI4ZWQ0NDI2NzdlNmVjZjFiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwKQEAgLTAs
MCArMSw5MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUT0RPKG1paGFpcCknKTsKKworanNUZXN0
SXNBc3luYyA9IHRydWU7CisKK3ZhciB0ZXN0cyA9IFsKKyAgICBmdW5jdGlvbigpIHsKKyAgICAg
ICAgZGVidWcoJ1hIUiBmcm9tIG1haW4gd29ybGQnKTsKKyAgICAgICAgeGhyKCk7CisgICAgfSwK
KyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxk
IHdpdGggbm8gd2hpdGVsaXN0Jyk7CisgICAgICAgIHJ1blRlc3RJbldvcmxkKDEsICd4aHInKTsK
KyAgICB9LAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnWEhSIGZyb20gaXNvbGF0
ZWQgd29ybGQgd2l0aCB3aGl0ZWxpc3QnKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KDEsICdodHRwJywgJ2xv
Y2FsaG9zdCcsIHRydWUpOworICAgICAgICBydW5UZXN0SW5Xb3JsZCgxLCAneGhyJyk7CisgICAg
fQorXTsKK3ZhciBjdXJyZW50VGVzdCA9IDA7CisKKy8vIFRoaXMgdGVzdCBpcyBtZWFuaW5nbGVz
cyB3aXRob3V0IGxheW91dFRlc3RDb250cm9sbGVyLgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKAorICAgICAgICAnbWVzc2Fn
ZScsCisgICAgICAgIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9
IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlw
ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgJ3Rlc3QtZG9uZSc6CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRUZXN0Kys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGVzdCA9
PSB0ZXN0cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNb
Y3VycmVudFRlc3RdKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgJ2RlYnVnJzoKKyAgICAgICAgICAgICAgICAgICAgZGVidWcobWVzc2FnZS5tZXNz
YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgnVW5rbm93biBtZXNzYWdlOiAnICsg
ZXZlbnQuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBmYWxzZSk7CisKKyAgICB0ZXN0c1swXSgpOworfSBlbHNlIHsK
KyAgICB0ZXN0RmFpbGVkKCdUZXN0IGRlcGVuZHMgb24gTGF5b3V0VGVzdENvbnRyb2xsZXIgYW5k
IG11c3QgYmUgcnVuIGJ5IERSVCcpOworfQorCitmdW5jdGlvbiBydW5UZXN0SW5Xb3JsZCh3b3Js
ZElkLCBmdW5jTmFtZSkKK3sKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgd29ybGRJZCwgU3RyaW5nKGV2YWwoZnVuY05hbWUp
KSArICJcbiIgKyBmdW5jTmFtZSArICIoKTsiKTsKK30KKworZnVuY3Rpb24geGhyKCkKK3sKKyAg
ICBmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKSB7CisgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShK
U09OLnN0cmluZ2lmeSh7CisgICAgICAgICAgICAgICAgJ3R5cGUnOiAnZGVidWcnLAorICAgICAg
ICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZQorICAgICAgICAgICAgfSksCisgICAgICAgICAg
ICAnKicpOworICAgIH0KKworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg
ICB4aHIub3BlbignR0VUJywgJ2h0dHA6Ly9sb2NhbGhvc3Qvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC9yZXNvdXJjZXMvZ2V0LnR4dCcsIHRydWUpOworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ3hoci5yZWFkeVN0YXRlOiAnICsgeGhyLnJl
YWR5U3RhdGUpOworICAgICAgICBkZWJ1ZygneGhyLnN0YXR1czogJyArIHhoci5zdGF0dXMpOwor
ICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkKKyAgICAgICAgICAgIHdpbmRvdy5wb3N0
TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7J3R5cGUnOiAndGVzdC1kb25lJ30pLCAnKicpOworICAg
IH07CisgICAgeGhyLnNlbmQobnVsbCk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGM1NjljOTEyYzBmNjM1M2UyYTdkMWNmYjgzOTgxNGZmMTFiZDJhZGEuLmI5OWNiZTJjYjlkYTMx
MjQyY2RjNTBlYWNkNTBiZWFhYjEzZWVjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAor
MjAxMS0wNC0yOSAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGNyb3Nz
LW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBpbiBpc29sYXRlZCB3b3JsZHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5ODQzCisKKyAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9yaWdpbi14aHIuaHRtbAor
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRDb250ZXh0OjpvcmlnaW5BY2Nlc3NX
aGl0ZWxpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiYXRj
aENvbmZpZ3VyZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YmF0Y2hDb25maWd1cmVD
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6aXNvbGF0ZWRDb250ZXh0Rm9y
V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFhNTEh0dHBSZXF1ZXN0Ojpjb25zdHJ1Y3RvckNhbGxi
YWNrKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRo
UHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6cHJlZmxpZ2h0U3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6aXNBbGxvd2VkUmVkaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRh
YmxlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNhblJlY2VpdmVEcmFnRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6aXNTZWN1cmVUcmFuc2l0aW9u
VG8pOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFz
ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmRhdGFiYXNl
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6ZXF1YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmlzU2FtZVNjaGVtZUhvc3RQb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OldoaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW46OldoaXRlbGlzdGVk
U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVsaXN0ZWRTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldoaXRlbGlzdGVkU2VjdXJpdHlPcmln
aW46OmlzQWNjZXNzV2hpdGVMaXN0ZWQpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4u
aDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNl
Y3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25z
ZVhNTCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0QXNCbG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKToKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuaDoKKwogMjAxMS0wNC0yOCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApp
bmRleCAwNGViNzllYzkyZGIyZmNhY2Y1ZjRkZWYyN2Y0ZDNiYWMwMzJkNDAwLi5mNTY0NzMzYmM2
ZTI0YmUwNmE2Nzg5YmE0ODYxNGJhYmU5OGQ2MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKICAgICB9CiAgICAgLy8g
RklYTUU6IFdlIGNoZWNrIHRoZSBqYXZhc2NyaXB0IGFuY2hvciBuYXZpZ2F0aW9uIGZyb20gdGhl
IGxhc3QgZW50ZXJlZAogICAgIC8vIGZyYW1lIGJlY3Vhc2UgaXQgc2hvdWxkIG9ubHkgYmUgaW5p
dGlhdGVkIG9uIHRoZSBsYXN0IGVudGVyZWQgZnJhbWUgaW4KLSAgICAvLyB3aGljaCBleGVjdXRp
b24gYmVnYW4gaWYgaXQgZG9lcyBoYXBwZW4uICAgIAorICAgIC8vIHdoaWNoIGV4ZWN1dGlvbiBi
ZWdhbiBpZiBpdCBkb2VzIGhhcHBlbi4KICAgICBjb25zdCBTdHJpbmcqIHNvdXJjZVVSTCA9IGFj
dGl2ZUZyYW1lLT5zY3JpcHQoKS0+c291cmNlVVJMKCk7CiAgICAgaWYgKHNvdXJjZVVSTCAmJiBz
b3VyY2VVUkwtPmlzTnVsbCgpICYmICFhY3RpdmVQcm94eS0+dGltZXJDYWxsYmFjaygpKSB7CiAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIDxhIGhyZWY9ImphdmFzY3JpcHQ6d2luZG93Lm9wZW4oJy4u
LicpPiBjYXNlIC0+IHdlIGxldCBpdCB0aHJvdWdoLgpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKICAgICBpZiAoYWN0aXZl
RnJhbWUtPnNjcmlwdCgpLT5hbGxvd1BvcHVwc0Zyb21QbHVnaW4oKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgLy8gVGhpcyBpcyB0aGUgPHNjcmlwdD53aW5kb3cub3BlbiguLi4pPC9zY3Jp
cHQ+IGNhc2Ugb3IgYSB0aW1lciBjYWxsYmFjayAtPiBibG9jayBpdC4KLSAgICAvLyBCYXNlZCBv
biBKU0MgdmVyc2lvbiwgdXNlIHJldHVybmVkIHZhbHVlIG9mIFVzZXJHZXN0dXJlSW5kaWNhdG9y
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUgZm9yIGFsbCBvdGhlciBzaXR1YXRpb25zLiAKKyAgICAv
LyBCYXNlZCBvbiBKU0MgdmVyc2lvbiwgdXNlIHJldHVybmVkIHZhbHVlIG9mIFVzZXJHZXN0dXJl
SW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUgZm9yIGFsbCBvdGhlciBzaXR1YXRpb25z
LgogICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CiB9CiAKQEAgLTIxNiw2ICsyMTYsMTIgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2MKICAg
ICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRl
bnNpb25Hcm91cCk7CiB9CiAKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YWRkSXNvbGF0ZWRXb3Js
ZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpCit7
CisgICAgbV9wcm94eS0+YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KHdvcmxkSUQsIHByb3RvY29sLCBob3N0LCBhbGxvd1N1YmRvbWFpbnMpOworfQorCisKIC8vIEV2
YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGVudmlyb25tZW50IG9mIHRoaXMgcHJveHkuCiBT
Y3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oCmluZGV4IGIyMGU3ZmQ5ZTgwYWQ2YjNkZjRmMTE1MGFlZWJjYWFiMTk3MGU0
N2EuLjg3ZmNmMWExZDVlNDYyYzMyY2M4Mjc5ZWJiMmQyZGY3YTE4M2E2NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTk5LDYgKzk5LDgg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUu
CiAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25z
dCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCisgICAg
dm9pZCBhZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3QgU3RyaW5nJiBob3N0LCBib29s
IGFsbG93U3ViZG9tYWlucyk7CisKICAgICAvLyBNYXNxdWVyYWRlICd0aGlzJyBhcyB0aGUgd2lu
ZG93U2hlbGwuCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCBwcm92aWRlcyBy
ZWFzb25hYmxlIGNvbXBhdGliaWxpdHkKICAgICAvLyB3aXRoIHdoYXQgSlNDIGRvZXMgYXMgd2Vs
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNw
cAppbmRleCA3YjIxYTM2ZGU5ODY1OGFkMTY2Nzc2MDQ3NDMzOWRkYmIxNzNmYWM0Li44MzA1NDBl
YjY4OTQwMzFjNzNkOGU2ZWEzNTRjOTJjYjZiMWZiOWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCiAjaW5jbHVk
ZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgogCkBA
IC04Nyw0ICs4NywxNyBAQCBWOElzb2xhdGVkQ29udGV4dDo6flY4SXNvbGF0ZWRDb250ZXh0KCkK
ICAgICBtX2NvbnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKIH0KIAordm9pZCBWOElzb2xhdGVkQ29u
dGV4dDo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCwgY29uc3QgU3RyaW5nJiBob3N0LCBib29sIGFsbG93U3ViZG9tYWlucykKK3sKKyAgICBtX29y
aWdpbkFjY2Vzc1doaXRlbGlzdC5hcHBlbmQoT3JpZ2luQWNjZXNzRW50cnkoCisgICAgICAgIHBy
b3RvY29sLCBob3N0LCBhbGxvd1N1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dT
dWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOworfQor
CitWZWN0b3I8T3JpZ2luQWNjZXNzRW50cnk+IFY4SXNvbGF0ZWRDb250ZXh0OjpvcmlnaW5BY2Nl
c3NXaGl0ZWxpc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX29yaWdpbkFjY2Vzc1doaXRlbGlz
dDsKK30KKworCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCmluZGV4IDVjZDljNjU2ZjVhMTU1ODJjZjBj
YmM5ZGYyZjg5M2Q1NGNkNmJhYmMuLjBmNjRkYmM1MTE4YjhhYzhhMzM0NGFiMjhhZjQzYmEwMGE0
YjVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuaApAQCAtMzYsMTEgKzM2LDEzIEBACiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJWZWN0
b3IuaCIKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFY4
UHJveHk7CitjbGFzcyBPcmlnaW5BY2Nlc3NFbnRyeTsKIAogLy8gVjhJc29sYXRlZENvbnRleHQK
IC8vCkBAIC05Myw2ICs5NSw5IEBAIHB1YmxpYzoKIAogICAgIElzb2xhdGVkV29ybGQqIHdvcmxk
KCkgY29uc3QgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogCisgICAgdm9pZCBhZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcm
IGhvc3QsIGJvb2wgYWxsb3dTdWJkb21haW5zKTsKKyAgICBWZWN0b3I8T3JpZ2luQWNjZXNzRW50
cnk+IG9yaWdpbkFjY2Vzc1doaXRlbGlzdCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjb250ZXh0KQogICAgIHsKQEAgLTEwOCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKIAogICAg
IFJlZlB0cjxJc29sYXRlZFdvcmxkPiBtX3dvcmxkOworCisgICAgVmVjdG9yPE9yaWdpbkFjY2Vz
c0VudHJ5PiBtX29yaWdpbkFjY2Vzc1doaXRlbGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggY2RjODc3ZWY5
ZWIzYzc2ODk0MzY1M2EzNWVmYmRiOGQ5MTIzODliNC4uOTU3NjQ2OGYxYmFlMjkyM2QxMDdkNjI1
MWMxOWFlYmJiMmZmNTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAK
QEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtODgsMjQg
Kzg4LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFN0YXRpYyBsaXN0IG9mIHJlZ2lzdGVy
ZWQgZXh0ZW5zaW9ucwogVjhFeHRlbnNpb25zIFY4UHJveHk6Om1fZXh0ZW5zaW9uczsKIAotdm9p
ZCBiYXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+
IGluc3RhbmNlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCYXRjaGVkQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCAKK3ZvaWQgYmF0Y2hDb25maWd1cmVB
dHRyaWJ1dGVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBw
cm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRBdHRyaWJ1
dGUqIGF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXR0
cmlidXRlQ291bnQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3Vu
dDsgKytpKQogICAgICAgICBjb25maWd1cmVBdHRyaWJ1dGUoaW5zdGFuY2UsIHByb3RvLCBhdHRy
aWJ1dGVzW2ldKTsKIH0KIAotdm9pZCBiYXRjaENvbmZpZ3VyZUNhbGxiYWNrcyh2ODo6SGFuZGxl
PHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IHNpZ25hdHVyZSwgCit2b2lkIGJhdGNoQ29uZmln
dXJlQ2FsbGJhY2tzKHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBzaWduYXR1
cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZSBh
dHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQ2Fs
bGJhY2sqIGNhbGxiYWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNh
bGxiYWNrQ291bnQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50
OyArK2kpIHsKICAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoY2FsbGJhY2tzW2ld
Lm5hbWUpLAotICAgICAgICAgICAgICAgICAgIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoY2Fs
bGJhY2tzW2ldLmNhbGxiYWNrLCAKKyAgICAgICAgICAgICAgICAgICB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KGNhbGxiYWNrc1tpXS5jYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlKSwKICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVzKTsKQEAgLTI0MSwxMiArMjQxLDggQEAgYm9vbCBWOFByb3h5
OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVjhQcm94
eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQorVjhJc29sYXRlZENv
bnRleHQqIFY4UHJveHk6Omlzb2xhdGVkQ29udGV4dEZvcldvcmxkKGludCB3b3JsZElELCBpbnQg
ZXh0ZW5zaW9uR3JvdXApCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCBy
ZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdv
cmxkLgotICAgIHdpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKLQotICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0
ZWRDb250ZXh0ID0gMDsKIAogICAgIGlmICh3b3JsZElEID4gMCkgewpAQCAtMjU3LDcgKzI1Myw3
IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNv
bnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXApOwogICAgICAgICAg
ICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIHVzaW5nIHdpbmRvdyBzaGVsbHMgdG8g
bWF0Y2ggSlNDLgpAQCAtMjY3LDI0ICsyNjMsNDYgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGUK
ICAgICAgICAgICAgIGlmICghc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZChpc29sYXRl
ZENvbnRleHQtPmNvbnRleHQoKSkpIHsKICAgICAgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRz
LnRha2Uod29ybGRJRCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsK
LSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaXNvbGF0ZWRDb250
ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKICAgICAg
ICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICAg
ICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCisgICAgcmV0dXJuIGlzb2xhdGVkQ29u
dGV4dDsKK30KKwordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5z
aW9uR3JvdXApCit7CisgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2Fu
aXplZCBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgor
ICAgIHdpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKworICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250
ZXh0ID0gaXNvbGF0ZWRDb250ZXh0Rm9yV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApOwor
CiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250
ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKTsKICAgICB2ODo6Q29udGV4dDo6
U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNvdXJjZXMuc2l6ZSgpOyArK2kpCi0gICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsKKyAg
ICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CiAKICAgICBpZiAod29ybGRJRCA9PSAwKQot
ICAgICAgaXNvbGF0ZWRDb250ZXh0LT5kZXN0cm95KCk7CisgICAgICAgIGlzb2xhdGVkQ29udGV4
dC0+ZGVzdHJveSgpOworfQorCit2b2lkIFY4UHJveHk6OmFkZElzb2xhdGVkV29ybGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBTdHJpbmcmIHByb3Rv
Y29sLCBjb25zdCBTdHJpbmcmIGhvc3QsIGJvb2wgYWxsb3dTdWJkb21haW5zKQoreworICAgIC8v
IFRPRE86IENIRUNLIHRoYXQgd29ybGRJRCBpcyBub3QgMAorICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKKyAgICAvLyBUT0RPOiByZW1vdmUgZXh0ZW5zaW9uR3JvdXAKKyAgICBWOElz
b2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0Rm9yV29ybGQo
d29ybGRJRCwgMCk7CisKKyAgICBpZiAoaXNvbGF0ZWRDb250ZXh0KQorICAgICAgICBpc29sYXRl
ZENvbnRleHQtPmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KHByb3RvY29sLCBob3N0LCBh
bGxvd1N1YmRvbWFpbnMpOwogfQogCiBib29sIFY4UHJveHk6OnNldEluamVjdGVkU2NyaXB0Q29u
dGV4dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdGFyZ2V0Q29udGV4dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAppbmRleCA3Nzc4MTViNmZmZDA5MmYyZmRkMDJhMzBl
ZTQxMGJmMzg0NTU3YTBhLi5lZWM2NzllYmRiOGYwODYxNDVkOGUwYjY0MzY3NjhkZDgyNDM3NDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0xLDEwICsxLDEwIEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAor
ICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTExMCwxMCArMTEwLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdjg6Okludm9jYXRpb25DYWxsYmFjayBjYWxsYmFjazsKICAgICB9Owog
Ci0gICAgdm9pZCBiYXRjaENvbmZpZ3VyZUNhbGxiYWNrcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RU
ZW1wbGF0ZT4sIAorICAgIHZvaWQgYmF0Y2hDb25maWd1cmVDYWxsYmFja3Modjg6OkhhbmRsZTx2
ODo6T2JqZWN0VGVtcGxhdGU+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEJhdGNoZWRDYWxsYmFjayosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQmF0Y2hlZENhbGxiYWNrKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBjYWxsYmFja0NvdW50KTsKIAogICAgIGNvbnN0IGludCBrTWF4UmVjdXJzaW9u
RGVwdGggPSAyMjsKQEAgLTE2MCw2ICsxNjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIGNvbnN0cnVjdG9ycy4KICAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJZCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBp
bnQgZXh0ZW5zaW9uR3JvdXApOwogCisgICAgICAgIHZvaWQgYWRkSXNvbGF0ZWRXb3JsZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wsIGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpOworCiAgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJveHkgaXMgY3VycmVudGx5IGV4ZWN1dGluZyBh
IHNjcmlwdCBpbiBWOC4KICAgICAgICAgYm9vbCBleGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKIApA
QCAtMjg5LDYgKzI5MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0dXJu
cyBmYWxzZSB3aGVuIHdlJ3JlIG91dCBvZiBtZW1vcnkgaW4gVjguCiAgICAgICAgIGJvb2wgc2V0
SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJn
ZXRDb250ZXh0KTsKIAorICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0
Rm9yV29ybGQoaW50IHdvcmxkSUQsIGludCBleHRlbnNpb25Hcm91cCk7CisKICAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHJhbmdlRXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBldmVudEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlv
bkNvZGUpOwogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogeG1sSHR0cFJlcXVlc3RFeGNlcHRp
b25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggNmI1YjY0ZjI0NzY3ZGRkOGY4ODE3OTI4ODM3ZTEyMDAwZjY2Yjk1MS4uM2Q5MGU0
N2YxOTc3NmE0ZjBhOWJiOTUxNWNlZTljNzY0ZDJlMTEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvci5jcHAKQEAgLTMyLDggKzMyLDExIEBACiAjaW5jbHVkZSAiVjhYTUxIdHRwUmVx
dWVzdC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgorI2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAj
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5j
bHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCkBAIC01Miw3ICs1NSwxMyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6Y29uc3RydWN0b3JDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiWE1MSHR0cFJlcXVlc3QgY29uc3RydWN0b3IncyBhc3Nv
Y2lhdGVkIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9y
KTsKLSAgICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0KTsKKworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4gPSAwOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAgc2VjdXJpdHlP
cmlnaW4gPSBXaGl0ZWxpc3RlZFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoCisgICAgICAgICAgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgaXNvbGF0ZWRDb250ZXh0LT5vcmlnaW5BY2Nlc3NXaGl0
ZWxpc3QoKSk7CisgICAgfQorICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVl
c3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKTsKICAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIHhtbEh0
dHBSZXF1ZXN0LmdldCgpKTsKIAogICAgIC8vIEFkZCBvYmplY3QgdG8gdGhlIHdyYXBwZXIgbWFw
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAppbmRleCAzZGNmYWIwZjJmOTcyZThjZDMzYmFkYzI5NGU0M2I2NWVmOTVlNGQyLi4yYmY2
MjljNDhlYTNjZDBjMDc4NDMyMGQ2MDA4ODE3ZGY0ZWI0OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtNjgsNyArNjgs
NyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihE
b2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibAogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
ICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9vcHRpb25hbE91dGdvaW5nUmVmZXJy
ZXIob3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKQotICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdChk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKKyAg
ICAsIG1fc2FtZU9yaWdpblJlcXVlc3QoKG9wdGlvbnMuc2VjdXJpdHlPcmlnaW4gPyBvcHRpb25z
LnNlY3VyaXR5T3JpZ2luLmdldCgpIDogZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpLT5jYW5S
ZXF1ZXN0KHJlcXVlc3QudXJsKCkpKQogICAgICwgbV9hc3luYyhibG9ja2luZ0JlaGF2aW9yID09
IExvYWRBc3luY2hyb25vdXNseSkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwpAQCAtODUsNyAr
ODUsNyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cihEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibAogICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksICJDcm9zcyBvcmlnaW4gcmVxdWVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgQVNTRVJUKG1fb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCk7CiAKICAgICBPd25Q
dHI8UmVzb3VyY2VSZXF1ZXN0PiBjcm9zc09yaWdpblJlcXVlc3QgPSBhZG9wdFB0cihuZXcgUmVz
b3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKQEAgLTk2LDggKzk2LDkgQEAgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBU
aHJlYWRhYmwKICAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jv
c3NPcmlnaW5SZXF1ZXN0KTsKICAgICBlbHNlIHsKICAgICAgICAgbV9hY3R1YWxSZXF1ZXN0ID0g
Y3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbGVhc2UoKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA/IG9wdGlvbnMuc2VjdXJpdHlP
cmlnaW4uZ2V0KCkgOiBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKIAotICAgICAgICBpZiAo
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdo
dChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0
LT51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0
cE1ldGhvZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAg
IGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJl
ZmxpZ2h0KHNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgp
LCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9k
KCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKICAgICAgICAgICAgIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWFrZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoKm1fYWN0dWFsUmVxdWVzdCk7CkBAIC0xMTYs
NyArMTE3LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2UKIAogICAgIC8vIE1ha2UgYSBjb3B5
IG9mIHRoZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2RpZnkgc29tZSBkZXRhaWxz
LgogICAgIFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3QocmVxdWVzdCk7Ci0gICAg
Y3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKSk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4o
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKICAgICBsb2FkUmVxdWVzdChjcm9zc09y
aWdpblJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CiB9CkBAIC0xMjUsNyArMTI2LDcgQEAgdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RX
aXRoUHJlZmxpZ2h0KGNvbnN0IFIKIHsKICAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVx
dWVzdChyZXF1ZXN0LnVybCgpKTsKICAgICBwcmVmbGlnaHRSZXF1ZXN0LnJlbW92ZUNyZWRlbnRp
YWxzKCk7Ci0gICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRU
UE9yaWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICBwcmVmbGlnaHRSZXF1
ZXN0LnNldEFsbG93Q29va2llcyhtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CiAgICAgcHJl
ZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJT05TIik7CiAgICAgcHJlZmxpZ2h0UmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kIiwg
cmVxdWVzdC5odHRwTWV0aG9kKCkpOwpAQCAtMjA2LDcgKzIwNyw3IEBAIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxv
YWRlciwgY29uCiAKICAgICBTdHJpbmcgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb247CiAg
ICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRy
b2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgeworICAg
ICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFs
bG93Q3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2Ny
aXB0aW9uKSkgewogICAgICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZShyZXNwb25zZS51cmwoKSwg
YWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0yMTksMTAgKzIyMCwxMCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50cnkobV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgcHJlZmxpZ2h0UmVz
dWx0LnJlbGVhc2UoKSk7CisgICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6
OnNoYXJlZCgpLmFwcGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0
dWFsUmVxdWVzdC0+dXJsKCksIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKLSAgICAgICAgICAgIGlm
ICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9y
RGVzY3JpcHRpb24pKSB7CisgICAgICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVj
ayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luKCks
IGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgewogICAgICAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwg
cmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzIzLDcgKzMyNCw3
IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKCkKICAg
ICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OwogICAgIGFjdHVhbFJlcXVl
c3Quc3dhcChtX2FjdHVhbFJlcXVlc3QpOwogCi0gICAgYWN0dWFsUmVxdWVzdC0+c2V0SFRUUE9y
aWdpbihtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICBhY3R1
YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwog
CiAgICAgLy8gSXQgc2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5IGNoZWNrIHNpbmNl
IHdlIGFscmVhZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0LgogICAgIGxvYWRS
ZXF1ZXN0KCphY3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CkBAIC0zNTMsNyArMzU0
LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pZmZDb250ZW50LCBt
X29wdGlvbmFsT3V0Z29pbmdSZWZlcnJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
CisKICAgICAvLyBGSVhNRTogVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMuc25pZmZDb250ZW50IGlz
IG5vdCBzdXBwb3J0ZWQgZm9yIHN5bmNocm9ub3VzIHJlcXVlc3RzLgogICAgIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPyBB
bGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogCkBA
IC0zOTYsNyArMzk3LDEyIEBAIGJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93
ZWRSZWRpcmVjdChjb25zdCBLVVJMJiB1cmwpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1w
bGVtZW50IGFjY2VzcyBjb250cm9sIGZvciBlYWNoIHJlZGlyZWN0LiBUaGlzIHdpbGwgcmVxdWly
ZSBzb21lIHJlZmFjdG9yaW5nIHRob3VnaCwgYmVjYXVzZSB0aGUgY29kZQogICAgIC8vIHRoYXQg
cHJvY2Vzc2VzIHJlZGlyZWN0cyBkb2Vzbid0IGtub3cgYWJvdXQgYWNjZXNzIGNvbnRyb2wgYW5k
IGV4cGVjdHMgYSBzeW5jaHJvbm91cyBhbnN3ZXIgZnJvbSBpdHMgY2xpZW50IGFib3V0IHdoZXRo
ZXIKICAgICAvLyBhIHJlZGlyZWN0IHNob3VsZCBwcm9jZWVkLgotICAgIHJldHVybiBtX3NhbWVP
cmlnaW5SZXF1ZXN0ICYmIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
dXJsKTsKKyAgICByZXR1cm4gbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBzZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHVybCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcHRpb25z
LnNlY3VyaXR5T3JpZ2luID8gbV9vcHRpb25zLnNlY3VyaXR5T3JpZ2luLmdldCgpIDogbV9kb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCmluZGV4
IDUwZjYwY2EwYzRlYzAzZmNhZjliZWNlMjMxYzFkNzEyOTU5MGJkNjAuLjU5NDk2NjcyMWVlMTcx
N2NmYjhhMjRkYTRjMzI2Y2MxMTQ1NWI5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OworICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNz
IFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAKICAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCAgewpA
QCAtOTQsNiArOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbG9hZFJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSk7CiAgICAg
ICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgS1VSTCYpOwogCisgICAgICAgIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworCiAgICAgICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
IG1fY2xpZW50OwogICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCmluZGV4IGY1NzRjOTQ1MTYyMjk0NDRmYTkyMzZiMDlm
ZDYyZjU1YmZhOGE3YjIuLjNiYmYxNzA5YjcxODJmYTFjNDY3ZjMzYWVkNjAyMGU5M2Q2OTg4NmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaApAQCAtMzEsOCArMzEs
MTAgQEAKICNpZm5kZWYgVGhyZWFkYWJsZUxvYWRlcl9oCiAjZGVmaW5lIFRocmVhZGFibGVMb2Fk
ZXJfaAogCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ3LDIzICs0OSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMsCiAgICAgICAgIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscwogICAgIH07
Ci0gICAgCisKICAgICBlbnVtIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSB7CiAgICAgICAgIERl
bnlDcm9zc09yaWdpblJlcXVlc3RzLAogICAgICAgICBVc2VBY2Nlc3NDb250cm9sLAogICAgICAg
ICBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMKICAgICB9OwotICAgIAorCiAgICAgc3RydWN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zIHsKLSAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMo
KSA6IHNlbmRMb2FkQ2FsbGJhY2tzKGZhbHNlKSwgc25pZmZDb250ZW50KGZhbHNlKSwgYWxsb3dD
cmVkZW50aWFscyhmYWxzZSksIGZvcmNlUHJlZmxpZ2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1
ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSB7IH0KKyAgICAgICAgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMoKSA6IHNlbmRMb2FkQ2FsbGJhY2tzKGZhbHNlKSwgc25pZmZDb250ZW50
KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFscyhmYWxzZSksIGZvcmNlUHJlZmxpZ2h0KGZhbHNlKSwg
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSwgc2VjdXJp
dHlPcmlnaW4oMCkgeyB9CiAgICAgICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CiAgICAgICAg
IGJvb2wgc25pZmZDb250ZW50OwogICAgICAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7ICAvLyBX
aGV0aGVyIEhUVFAgY3JlZGVudGlhbHMgYW5kIGNvb2tpZXMgYXJlIHNlbnQgd2l0aCB0aGUgcmVx
dWVzdC4KICAgICAgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgIC8vIElmIEFjY2Vzc0NvbnRyb2wg
aXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4KICAgICAgICAgQ3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeTsKKyAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKICAgICB9OwogCi0gICAgLy8gVXNlZnVs
IGZvciBkb2luZyBsb2FkZXIgb3BlcmF0aW9ucyBmcm9tIGFueSB0aHJlYWQgKG5vdCB0aHJlYWRz
YWZlLCAKKyAgICAvLyBVc2VmdWwgZm9yIGRvaW5nIGxvYWRlciBvcGVyYXRpb25zIGZyb20gYW55
IHRocmVhZCAobm90IHRocmVhZHNhZmUsCiAgICAgLy8ganVzdCBhYmxlIHRvIHJ1biBvbiB0aHJl
YWRzIG90aGVyIHRoYW4gdGhlIG1haW4gdGhyZWFkKS4KICAgICBjbGFzcyBUaHJlYWRhYmxlTG9h
ZGVyIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkYWJsZUxvYWRlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDI0M2YwMmE5Y2E2NGVhNTYw
MTE1NTY4OGZlMTg0YjBkM2FjZDZkNTMuLjY0ODk4YTg4ZWEzNzc4ZWY4MzkyMzg0YTdjOTZmMmI2
OWMyNDg2ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBAIC0zMDks
NyArMzA5LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuUmVjZWl2ZURyYWdEYXRhKGNvbnN0
IFNlY3VyaXR5T3JpZ2luKiBkcmFnSW5pdGlhdG9yKSBjb24KICAgICBpZiAobV9wcm90b2NvbCA9
PSAiZGF0YSIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIGNhbkFjY2Vzcyhk
cmFnSW5pdGlhdG9yKTsgIAorICAgIHJldHVybiBjYW5BY2Nlc3MoZHJhZ0luaXRpYXRvcik7CiB9
CiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVMaXN0ZWQoY29uc3QgU2VjdXJp
dHlPcmlnaW4qIHRhcmdldE9yaWdpbikgY29uc3QKQEAgLTM3Myw3ICszNzMsNyBAQCBib29sIFNl
Y3VyaXR5T3JpZ2luOjppc0xvY2FsKCkgY29uc3QKIH0KIAogYm9vbCBTZWN1cml0eU9yaWdpbjo6
aXNTZWN1cmVUcmFuc2l0aW9uVG8oY29uc3QgS1VSTCYgdXJsKSBjb25zdAoteyAKK3sKICAgICAv
LyBOZXcgd2luZG93IGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCiAgICAgaWYgKGlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00MTgsMzYgKzQxOCwzNiBAQCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIG9yaWdpbgogc3RhdGljIGNvbnN0IGNoYXIgU2VwYXJhdG9yQ2hhcmFjdGVyID0gJ18n
OwogCiBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bURhdGFiYXNlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKLXsg
Cit7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3MgYSBmaXJzdCBzZXBhcmF0b3IKICAgICBzaXpl
X3Qgc2VwYXJhdG9yMSA9IGRhdGFiYXNlSWRlbnRpZmllci5maW5kKFNlcGFyYXRvckNoYXJhY3Rl
cik7CiAgICAgaWYgKHNlcGFyYXRvcjEgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBjcmVh
dGUoS1VSTCgpKTsKLSAgICAgICAgCisKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBhIHNlY29u
ZCBzZXBhcmF0b3IKICAgICBzaXplX3Qgc2VwYXJhdG9yMiA9IGRhdGFiYXNlSWRlbnRpZmllci5y
ZXZlcnNlRmluZChTZXBhcmF0b3JDaGFyYWN0ZXIpOwogICAgIGlmIChzZXBhcmF0b3IyID09IG5v
dEZvdW5kKQogICAgICAgICByZXR1cm4gY3JlYXRlKEtVUkwoKSk7Ci0gICAgICAgIAorCiAgICAg
Ly8gRW5zdXJlIHRoZXJlIHdlcmUgYXQgbGVhc3QgMiBzZXBhcmF0b3IgY2hhcmFjdGVycy4gU29t
ZSBob3N0bmFtZXMgb24gaW50cmFuZXRzIGhhdmUKICAgICAvLyB1bmRlcnNjb3JlcyBpbiB0aGVt
LCBzbyB3ZSdsbCBhc3N1bWUgdGhhdCBhbnkgYWRkaXRpb25hbCB1bmRlcnNjb3JlcyBhcmUgcGFy
dCBvZiB0aGUgaG9zdC4KICAgICBpZiAoc2VwYXJhdG9yMSA9PSBzZXBhcmF0b3IyKQogICAgICAg
ICByZXR1cm4gY3JlYXRlKEtVUkwoKSk7Ci0gICAgICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBwb3J0IHNlY3Rpb24gaXMgYSB2YWxpZCBwb3J0IG51bWJlciBvciBkb2Vzbid0IGV4aXN0CiAg
ICAgYm9vbCBwb3J0T2theTsKICAgICBpbnQgcG9ydCA9IGRhdGFiYXNlSWRlbnRpZmllci5yaWdo
dChkYXRhYmFzZUlkZW50aWZpZXIubGVuZ3RoKCkgLSBzZXBhcmF0b3IyIC0gMSkudG9JbnQoJnBv
cnRPa2F5KTsKICAgICBib29sIHBvcnRBYnNlbnQgPSAoc2VwYXJhdG9yMiA9PSBkYXRhYmFzZUlk
ZW50aWZpZXIubGVuZ3RoKCkgLSAxKTsKICAgICBpZiAoIShwb3J0T2theSB8fCBwb3J0QWJzZW50
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOwotICAgIAorCiAgICAgaWYgKHBvcnQg
PCAwIHx8IHBvcnQgPiBNYXhBbGxvd2VkUG9ydCkKICAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJM
KCkpOwotICAgICAgICAKKwogICAgIC8vIFNwbGl0IG91dCB0aGUgMyBzZWN0aW9ucyBvZiBkYXRh
CiAgICAgU3RyaW5nIHByb3RvY29sID0gZGF0YWJhc2VJZGVudGlmaWVyLnN1YnN0cmluZygwLCBz
ZXBhcmF0b3IxKTsKICAgICBTdHJpbmcgaG9zdCA9IGRhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJp
bmcoc2VwYXJhdG9yMSArIDEsIHNlcGFyYXRvcjIgLSBzZXBhcmF0b3IxIC0gMSk7Ci0gICAgCisK
ICAgICBob3N0ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGhvc3QpOwogICAgIHJldHVybiBj
cmVhdGUoS1VSTChLVVJMKCksIHByb3RvY29sICsgIjovLyIgKyBob3N0ICsgIjoiICsgU3RyaW5n
OjpudW1iZXIocG9ydCkpKTsKIH0KQEAgLTQ2MCwyMSArNDYwLDIxIEBAIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCwgY29uc3QKICAgICByZXR1cm4gY3JlYXRlKEtVUkwoS1VSTCgpLCBwcm90b2NvbCArICI6Ly8i
ICsgaG9zdCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpKSk7CiB9CiAKLVN0cmluZyBTZWN1
cml0eU9yaWdpbjo6ZGF0YWJhc2VJZGVudGlmaWVyKCkgY29uc3QgCitTdHJpbmcgU2VjdXJpdHlP
cmlnaW46OmRhdGFiYXNlSWRlbnRpZmllcigpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHNlcGFyYXRv
clN0cmluZygmU2VwYXJhdG9yQ2hhcmFjdGVyLCAxKTsKIAogICAgIGlmIChtX2VuY29kZWRIb3N0
LmlzRW1wdHkoKSkKICAgICAgICAgbV9lbmNvZGVkSG9zdCA9IGVuY29kZUZvckZpbGVOYW1lKG1f
aG9zdCk7CiAKLSAgICByZXR1cm4gbV9wcm90b2NvbCArIHNlcGFyYXRvclN0cmluZyArIG1fZW5j
b2RlZEhvc3QgKyBzZXBhcmF0b3JTdHJpbmcgKyBTdHJpbmc6Om51bWJlcihtX3BvcnQpOyAKKyAg
ICByZXR1cm4gbV9wcm90b2NvbCArIHNlcGFyYXRvclN0cmluZyArIG1fZW5jb2RlZEhvc3QgKyBz
ZXBhcmF0b3JTdHJpbmcgKyBTdHJpbmc6Om51bWJlcihtX3BvcnQpOwogfQogCi1ib29sIFNlY3Vy
aXR5T3JpZ2luOjplcXVhbChjb25zdCBTZWN1cml0eU9yaWdpbiogb3RoZXIpIGNvbnN0IAorYm9v
bCBTZWN1cml0eU9yaWdpbjo6ZXF1YWwoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG90aGVyKSBjb25z
dAogewogICAgIGlmIChvdGhlciA9PSB0aGlzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
KwogICAgIGlmICghaXNTYW1lU2NoZW1lSG9zdFBvcnQob3RoZXIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjplcXVhbChj
b25zdCBTZWN1cml0eU9yaWdpbiogb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU2VjdXJpdHlPcmlnaW46OmlzU2FtZVNjaGVtZUhvc3RQb3J0KGNvbnN0IFNlY3VyaXR5
T3JpZ2luKiBvdGhlcikgY29uc3QgCitib29sIFNlY3VyaXR5T3JpZ2luOjppc1NhbWVTY2hlbWVI
b3N0UG9ydChjb25zdCBTZWN1cml0eU9yaWdpbiogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKG1f
aG9zdCAhPSBvdGhlci0+bV9ob3N0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01ODYsNCAr
NTg2LDI1IEBAIHZvaWQgU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0
cygpCiAgICAgbWFwLmNsZWFyKCk7CiB9CiAKK1doaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW46Oldo
aXRlbGlzdGVkU2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIHBhcmVudCwgVmVjdG9yPE9y
aWdpbkFjY2Vzc0VudHJ5PiBvcmlnaW5BY2Nlc3NXaGl0ZWxpc3QpCisgICAgOiBTZWN1cml0eU9y
aWdpbihLVVJMKEtVUkwoKSwgcGFyZW50LT50b1N0cmluZygpKSwgU2FuZGJveE5vbmUpCisgICAg
LCBtX29yaWdpbkFjY2Vzc1doaXRlbGlzdChvcmlnaW5BY2Nlc3NXaGl0ZWxpc3QpCit7Cit9CisK
K1Bhc3NSZWZQdHI8V2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbj4gV2hpdGVsaXN0ZWRTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlKFNlY3VyaXR5T3JpZ2luKiBwYXJlbnQsIFZlY3RvcjxPcmlnaW5BY2Nl
c3NFbnRyeT4gb3JpZ2luQWNjZXNzV2hpdGVsaXN0KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbihwYXJlbnQsIG9yaWdpbkFjY2Vzc1doaXRlbGlz
dCkpOworfQorCitib29sIFdoaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVM
aXN0ZWQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbikgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3JpZ2luQWNjZXNzV2hpdGVsaXN0LnNpemUoKTsgICsr
aSkgeworICAgICAgIGlmIChtX29yaWdpbkFjY2Vzc1doaXRlbGlzdC5hdChpKS5tYXRjaGVzT3Jp
Z2luKCp0YXJnZXRPcmlnaW4pKQorICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVMaXN0ZWQodGFyZ2V0T3JpZ2lu
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5oCmluZGV4IGY2ZWY1NzA3Y2U4ZDRmMmQyZWYyOGM2M2Q1MjZkNWZmOGYwNjFhZmUuLjdi
NmMyMjRhMjRmY2M5OTE0NmU2ZGIxZjZiNTU1YTI1ZWE5ZWE4ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NlY3VyaXR5T3JpZ2luLmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2luIGNhbiByZWNlaXZlIGRyYWcgY29udGVudCBm
cm9tIHRoZQogICAgIC8vIGluaXRpYXRvci4gRm9yIGV4YW1wbGUsIGNhbGwgdGhpcyBmdW5jdGlv
biBiZWZvcmUgYWxsb3dpbmcgY29udGVudCB0byBiZQogICAgIC8vIGRyb3BwZWQgb250byBhIHRh
cmdldC4KLSAgICBib29sIGNhblJlY2VpdmVEcmFnRGF0YShjb25zdCBTZWN1cml0eU9yaWdpbiog
ZHJhZ0luaXRpYXRvcikgY29uc3Q7ICAgIAorICAgIGJvb2wgY2FuUmVjZWl2ZURyYWdEYXRhKGNv
bnN0IFNlY3VyaXR5T3JpZ2luKiBkcmFnSW5pdGlhdG9yKSBjb25zdDsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB8ZG9jdW1lbnR8IGNhbiBkaXNwbGF5IGNvbnRlbnQgZnJvbSB0aGUgZ2l2ZW4g
VVJMIChlLmcuLAogICAgIC8vIGluIGFuIGlmcmFtZSBvciBhcyBhbiBpbWFnZSkuIEZvciBleGFt
cGxlLCB3ZWIgc2l0ZXMgZ2VuZXJhbGx5IGNhbm5vdApAQCAtMTkzLDE0ICsxOTMsMTYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNv
bnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGVzdGluYXRp
b25Qcm90b2NvbCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkRvbWFpbnMsIGJvb2wgYWxsb3dE
ZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogICAgIHN0YXRpYyB2b2lkIHJlc2V0T3JpZ2luQWNjZXNz
V2hpdGVsaXN0cygpOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFNlY3VyaXR5T3JpZ2lu
KGNvbnN0IEtVUkwmLCBTYW5kYm94RmxhZ3MpOworICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc1do
aXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CisKK3ByaXZhdGU6CiAgICAg
ZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgIC8v
IEZJWE1FOiBSZW5hbWUgdGhpcyBmdW5jdGlvbiB0byBzb21ldGhpbmcgbW9yZSBzZW1hbnRpYy4K
ICAgICBib29sIHBhc3Nlc0ZpbGVDaGVjayhjb25zdCBTZWN1cml0eU9yaWdpbiopIGNvbnN0Owog
Ci0gICAgYm9vbCBpc0FjY2Vzc1doaXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29u
c3Q7CiAgICAgYm9vbCBpc0FjY2Vzc1RvVVJMV2hpdGVMaXN0ZWQoY29uc3QgS1VSTCYpIGNvbnN0
OwogCiAgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdzOwpAQCAtMjE3LDYgKzIxOSwxOSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uOwogfTsKIAor
Y2xhc3MgT3JpZ2luQWNjZXNzRW50cnk7CisKK2NsYXNzIFdoaXRlbGlzdGVkU2VjdXJpdHlPcmln
aW4gOiBwdWJsaWMgU2VjdXJpdHlPcmlnaW4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdoaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW4+IGNyZWF0ZShTZWN1cml0eU9yaWdpbiosIFZl
Y3RvcjxPcmlnaW5BY2Nlc3NFbnRyeT4pOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29s
IGlzQWNjZXNzV2hpdGVMaXN0ZWQoY29uc3QgU2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKK3ByaXZh
dGU6CisgICAgV2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbiogcGFyZW50
LCBWZWN0b3I8T3JpZ2luQWNjZXNzRW50cnk+IG9yaWdpbkFjY2Vzc1doaXRlbGlzdCk7CisgICAg
VmVjdG9yPE9yaWdpbkFjY2Vzc0VudHJ5PiBtX29yaWdpbkFjY2Vzc1doaXRlbGlzdDsKK307CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNlY3VyaXR5T3JpZ2luX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGVkMWUyMTU3ZDNhYTJkYWE4MTg1
NmE0N2Q0ZDA3NmY5OThhOTBlOGEuLmYzNWUyMmViZTljNjljNTg5MzAzN2RmZTYyMjZiMWE1Yjhk
NzM3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTcwLDcgKzE3
MCwxMiBAQCBzdGF0aWMgY29uc3QgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKiBpbml0aWFsaXpl
WE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCkKICAgICByZXR1cm4gZHVtbXk7CiB9CiAKLVhNTEh0
dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQorUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBz
ZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTEh0dHBSZXF1ZXN0
KGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKK1hNTEh0dHBSZXF1ZXN0OjpYTUxIdHRw
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0
LCB0aGlzKQogICAgICwgbV9hc3luYyh0cnVlKQogICAgICwgbV9pbmNsdWRlQ3JlZGVudGlhbHMo
ZmFsc2UpCkBAIC0xODUsNiArMTkwLDcgQEAgWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgLCBtX2V4Y2VwdGlvbkNvZGUo
MCkKICAgICAsIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlKHRoaXMpCiAgICAgLCBtX3Jlc3BvbnNl
VHlwZUNvZGUoUmVzcG9uc2VUeXBlRGVmYXVsdCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2Vj
dXJpdHlPcmlnaW4pCiB7CiAgICAgaW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSgp
OwogI2lmbmRlZiBOREVCVUcKQEAgLTIwNSw2ICsyMTEsMTEgQEAgRG9jdW1lbnQqIFhNTEh0dHBS
ZXF1ZXN0Ojpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAorU2VjdXJpdHlPcmlnaW4qIFhNTEh0
dHBSZXF1ZXN0OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VjdXJp
dHlPcmlnaW4gPyBtX3NlY3VyaXR5T3JpZ2luLmdldCgpIDogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zZWN1cml0eU9yaWdpbigpOworfQorCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQogYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKSBjb25zdAogewpAQCAtMjQ3LDcgKzI1OCw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2VYTUwoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBtX3Jlc3Bv
bnNlWE1MID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogU2V0IExhc3QtTW9kaWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRDb250
ZW50KG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpOworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0U2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAgICAgICBpZiAoIW1fcmVzcG9uc2VYTUwtPndl
bGxGb3JtZWQoKSkKICAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAg
fQpAQCAtMzgwLDcgKzM5MSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldEFzQmxvYihib29s
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIG1fcmVzcG9uc2VUeXBlQ29k
ZSA9IHZhbHVlID8gUmVzcG9uc2VUeXBlQmxvYiA6IFJlc3BvbnNlVHlwZURlZmF1bHQ7CiB9CiAj
ZW5kaWYKQEAgLTYxNSw3ICs2MjYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1
ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9zYW1lT3Jp
Z2luUmVxdWVzdCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuUmVxdWVzdChtX3VybCk7CisgICAgbV9zYW1lT3JpZ2luUmVxdWVzdCA9IHNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QobV91cmwpOwogCiAgICAgLy8gV2UgYWxzbyByZW1lbWJlciB3aGV0
aGVyIHVwbG9hZCBldmVudHMgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIHRoaXMgcmVxdWVzdCBpbiBj
YXNlIHRoZSB1cGxvYWQgbGlzdGVuZXJzIGFyZQogICAgIC8vIGFkZGVkIGFmdGVyIHRoZSByZXF1
ZXN0IGlzIHN0YXJ0ZWQuCkBAIC02MzksNiArNjUwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
Y3JlYXRlUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKICAgICBvcHRpb25zLmZvcmNlUHJlZmxp
Z2h0ID0gdXBsb2FkRXZlbnRzOwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IG1fc2Ft
ZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHM7CiAgICAgb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPSBVc2VBY2Nlc3NDb250cm9sOworICAgIG9wdGlvbnMuc2Vj
dXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbigpOwogCiAgICAgbV9leGNlcHRpb25Db2RlID0g
MDsKICAgICBtX2Vycm9yID0gZmFsc2U7CkBAIC04MjEsNyArODMzLDcgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmEKICAgICB9CiAKICAgICAvLyBBIHByaXZpbGVnZWQgc2NyaXB0IChlLmcuIGEg
RGFzaGJvYXJkIHdpZGdldCkgY2FuIHNldCBhbnkgaGVhZGVycy4KLSAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2Vz
KCkgJiYgIWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKKyAgICBpZiAoIXNlY3VyaXR5T3Jp
Z2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc1NhZmVSZXF1ZXN0SGVhZGVyKG5h
bWUpKSB7CiAgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgIlJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtODY0LDcgKzg3Niw3IEBAIFN0cmluZyBYTUxIdHRwUmVx
dWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAg
ICAgICAvLyAgICAgMikgVGhlcmUncyBubyBrbm93biBoYXJtIGluIGhpZGluZyBTZXQtQ29va2ll
IGhlYWRlciBmaWVsZHMgZW50aXJlbHk7IHdlIGRvbid0CiAgICAgICAgIC8vICAgICAgICBrbm93
IGFueSB3aWRlbHkgdXNlZCB0ZWNobmlxdWUgdGhhdCByZXF1aXJlcyBhY2Nlc3MgdG8gdGhlbS4K
ICAgICAgICAgLy8gICAgIDMpIEZpcmVmb3ggaGFzIGltcGxlbWVudGVkIHRoaXMgcG9saWN5Lgot
ICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkK
KyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIXNlY3VyaXR5T3Jp
Z2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJl
c3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCkpCkBAIC04ODksNyArOTAxLDcgQEAgU3Ry
aW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUKICAgICB9CiAKICAgICAvLyBTZWUgY29tbWVudCBpbiBnZXRB
bGxSZXNwb25zZUhlYWRlcnMgYWJvdmUuCi0gICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKG5hbWUp
ICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRM
b2NhbFJlc291cmNlcygpKSB7CisgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKG5hbWUpICYmICFz
ZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkgewogICAgICAgICByZXBv
cnRVbnNhZmVVc2FnZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICJSZWZ1c2VkIHRvIGdldCB1
bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiKTsKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5o
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggZGE3NzdlNzc4Yzg4
NWU0ZDY5NDM3MWIwNjhmNjdlMzdmZWUxNmI4Mi4uNzZlYTg5Zjk0MTg2YjA5YzhlNDgxY2QyNzI5
MTY0YjYyYjc2M2VhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKQEAgLTM5LDYg
KzM5LDcgQEAgY2xhc3MgQmxvYjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRE9NRm9ybURhdGE7
CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiBjbGFzcyBUaHJlYWRhYmxl
TG9hZGVyOwpAQCAtNDYsNyArNDcsNyBAQCBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyOwogY2xhc3Mg
WE1MSHR0cFJlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxYTUxIdHRwUmVxdWVzdD4sIHB1Ymxp
YyBFdmVudFRhcmdldCwgcHJpdmF0ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxIdHRwUmVxdWVzdChj
b250ZXh0KSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luID0gMCk7CiAgICAgflhNTEh0dHBSZXF1ZXN0KCk7CiAKICAgICAv
LyBUaGVzZSBleGFjdCBudW1lcmljIHZhbHVlcyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgSlMgZXhw
ZWN0cyB0aGVtLgpAQCAtNTcsMTAgKzU4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgTE9BRElORyA9
IDMsCiAgICAgICAgIERPTkUgPSA0CiAgICAgfTsKLSAgICAKKwogICAgIGVudW0gUmVzcG9uc2VU
eXBlQ29kZSB7CiAgICAgICAgIFJlc3BvbnNlVHlwZURlZmF1bHQsCi0gICAgICAgIFJlc3BvbnNl
VHlwZVRleHQsIAorICAgICAgICBSZXNwb25zZVR5cGVUZXh0LAogICAgICAgICBSZXNwb25zZVR5
cGVEb2N1bWVudCwKICAgICAgICAgUmVzcG9uc2VUeXBlQmxvYiwKICAgICAgICAgUmVzcG9uc2VU
eXBlQXJyYXlCdWZmZXIKQEAgLTExMiw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
ZXNwb25zZVR5cGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBy
ZXNwb25zZVR5cGUoKTsKICAgICBSZXNwb25zZVR5cGVDb2RlIHJlc3BvbnNlVHlwZUNvZGUoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVHlwZUNvZGU7IH0KLSAgICAKKwogICAgIC8vIHJlc3Bv
bnNlIGF0dHJpYnV0ZSBoYXMgY3VzdG9tIGdldHRlci4KICAgICBBcnJheUJ1ZmZlciogcmVzcG9u
c2VBcnJheUJ1ZmZlcihFeGNlcHRpb25Db2RlJik7CiAgICAgQXJyYXlCdWZmZXIqIG9wdGlvbmFs
UmVzcG9uc2VBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VBcnJheUJ1ZmZl
ci5nZXQoKTsgfQpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3Vu
dGVkPFhNTEh0dHBSZXF1ZXN0Pjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgWE1MSHR0cFJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KQEAgLTE0Miw2ICsxNDMsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsK
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworICAgIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQog
ICAgIGJvb2wgdXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdDsK
QEAgLTIwMiw3ICsyMDQsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZ0J1aWxkZXIgbV9yZXNwb25z
ZUJ1aWxkZXI7CiAgICAgbXV0YWJsZSBib29sIG1fY3JlYXRlZERvY3VtZW50OwogICAgIG11dGFi
bGUgUmVmUHRyPERvY3VtZW50PiBtX3Jlc3BvbnNlWE1MOwotICAgIAorCiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9iaW5hcnlSZXNwb25zZUJ1aWxkZXI7CiAgICAgbXV0YWJsZSBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fcmVzcG9uc2VBcnJheUJ1ZmZlcjsKIApAQCAtMjI2LDYgKzIyOCw4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBBbiBlbnVtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsbG93ZWQg
c3RyaW5nIHZhbHVlcyBmb3IgdGhlIHJlc3BvbnNlVHlwZSBhdHRyaWJ1dGUuCiAgICAgUmVzcG9u
c2VUeXBlQ29kZSBtX3Jlc3BvbnNlVHlwZUNvZGU7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG1fc2VjdXJpdHlPcmlnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDMzMmMxNjc4ZTI3NDI1ZWI0YjE2MzFiODMwY2E4OTc4
YzcwNjVhYjIuLmNkZWI5YTliYmViOWRkZmU3NjU3M2NmOGI2OTExYzQwMTNmNzUzNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMjkgIE1paGFp
IFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJl
cXVlc3QgaW4gaXNvbGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01OTg0MworCisgICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6Cisg
ICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZyYW1lQ29u
dGVudEFzUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjphZGRJc29s
YXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5oOgorCiAyMDExLTA0LTI3ICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCA0NjM3NTcwYzVmMDgxN2RiYTQyODViNTA5NzFlZjZl
NWU0YTVhN2ZjLi40N2E1YWY1YWM1NDFjZGE5NDNkOGEzNGRiZmYzMjM2YWY5ODM0MzhmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKQEAgLTI0OCw2ICsyNDgsMTAg
QEAgcHVibGljOgogICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBz
b3VyY2VzLCB1bnNpZ25lZCBudW1Tb3VyY2VzLAogICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXAp
ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoCisgICAgICAgIGludCB3b3JsZElkLCBjb25zdCBXZWJTdHJpbmcmIHByb3Rv
Y29sLCBjb25zdCBXZWJTdHJpbmcmIGhvc3QsCisgICAgICAgIGJvb2wgYWxsb3dTdWJkb21haW5z
KSA9IDA7CisKICAgICAvLyBMb2dzIHRvIHRoZSBjb25zb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGZyYW1lLgogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNv
bnNvbGVNZXNzYWdlJikgPSAwOwogCkBAIC01OTIsNyArNTk2LDcgQEAgcHVibGljOgogICAgIC8v
IGVtcHR5ICgoMCwwKSwgKDAsMCkpLgogICAgIHZpcnR1YWwgV2ViUmVjdCBzZWxlY3Rpb25Cb3Vu
ZHNSZWN0KCkgY29uc3QgPSAwOwogCi0gICAgLy8gT25seSBmb3IgdGVzdGluZyBwdXJwb3NlOiAK
KyAgICAvLyBPbmx5IGZvciB0ZXN0aW5nIHB1cnBvc2U6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHNlbGVjdGlvbi5hbmNob3JOb2RlIGhhcyBhIG1hcmtlciBvbiByYW5nZSBmcm9tIHxmcm9tfCB3
aXRoIHxsZW5ndGh8LgogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5n
TWFya2VyRm9yKGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGQxNjEzYzUxY2Y3MzEwZmU2
MzkyNjAzMTBlYzg5Mzg0MTM2Y2FkYWEuLjExMDM0ZDg4MDdkMzYwZThjYjQ3Y2I4OTAyNmJlMzE2
OTA4MWI0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNw
cApAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIGZyYW1lQ29udGVudEFzUGxhaW5UZXh0
KHNpemVfdCBtYXhDaGFycywgRnJhbWUqIGZyYW1lLAogICAgIGZvciAoRnJhbWUqIGN1ckNoaWxk
ID0gZnJhbWVUcmVlLT5maXJzdENoaWxkKCk7IGN1ckNoaWxkOyBjdXJDaGlsZCA9IGN1ckNoaWxk
LT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgLy8gSWdub3JlIHRoZSB0ZXh0IG9m
IG5vbi12aXNpYmxlIGZyYW1lcy4KICAgICAgICAgUmVuZGVyVmlldyogY29udGVudFJlbmRlcmVy
ID0gY3VyQ2hpbGQtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgICAgICBSZW5kZXJQYXJ0KiBvd25l
clJlbmRlcmVyID0gY3VyQ2hpbGQtPm93bmVyUmVuZGVyZXIoKTsgICAgICAgIAorICAgICAgICBS
ZW5kZXJQYXJ0KiBvd25lclJlbmRlcmVyID0gY3VyQ2hpbGQtPm93bmVyUmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFjb250ZW50UmVuZGVyZXIgfHwgIWNvbnRlbnRSZW5kZXJlci0+d2lkdGgoKSB8
fCAhY29udGVudFJlbmRlcmVyLT5oZWlnaHQoKQogICAgICAgICAgICAgfHwgKGNvbnRlbnRSZW5k
ZXJlci0+eCgpICsgY29udGVudFJlbmRlcmVyLT53aWR0aCgpIDw9IDApIHx8IChjb250ZW50UmVu
ZGVyZXItPnkoKSArIGNvbnRlbnRSZW5kZXJlci0+aGVpZ2h0KCkgPD0gMCkKICAgICAgICAgICAg
IHx8IChvd25lclJlbmRlcmVyICYmIG93bmVyUmVuZGVyZXItPnN0eWxlKCkgJiYgb3duZXJSZW5k
ZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpKSB7CkBAIC03OTcsNiArNzk3
LDEzIEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAog
ICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBz
b3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVJbXBsOjphZGRJc29s
YXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgaW50IHdvcmxkSWQsIGNv
bnN0IFdlYlN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFdlYlN0cmluZyYgaG9zdCwgYm9vbCBhbGxv
d1N1YmRvbWFpbnMpCit7CisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmFkZElzb2xhdGVkV29ybGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKKyAgICAgICAgd29ybGRJZCwgcHJvdG9jb2wsIGhv
c3QsIGFsbG93U3ViZG9tYWlucyk7Cit9CisKIHZvaWQgV2ViRnJhbWVJbXBsOjphZGRNZXNzYWdl
VG9Db25zb2xlKGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIEFTU0VS
VChmcmFtZSgpKTsKQEAgLTE3MTgsNyArMTcyNSw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzY29w
ZVN0cmluZ01hdGNoZXMoaW50IGlkZW50aWZpZXIsCiAgICAgICAgIC8vIFNldCB0aGUgbmV3IHN0
YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCiAg
ICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxl
UG9zaXRpb24gaGVyZSwKICAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBh
IFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCi0gICAgICAgIC8vIHRleHQgbm9k
ZXMuIAorICAgICAgICAvLyB0ZXh0IG5vZGVzLgogICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnQocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcihlYyksIHJlc3VsdFJhbmdlLT5lbmRPZmZzZXQo
ZWMpLCBlYyk7CiAKICAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+
c2hhZG93VHJlZVJvb3ROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCmluZGV4IDRiY2ExNmNkYTBiNDY4ODQyM2JjNmNiZjhlNGI5OThmNjA0ZjYzZjkuLjlm
NmJmMTQxMjY5MDRlNWI4YWEyMTExZjUzYzFjZDRhODEzYmJlNWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xMDQsNiArMTA0LDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAogICAgICAgICBp
bnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzLCB1bnNpZ25lZCBudW1T
b3VyY2VzLAogICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgICAgIGludCB3
b3JsZElkLCBjb25zdCBXZWJTdHJpbmcmIHByb3RvY29sLCBjb25zdCBXZWJTdHJpbmcmIGhvc3Qs
CisgICAgICAgIGJvb2wgYWxsb3dTdWJkb21haW5zKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2FnZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb2xsZWN0R2FyYmFnZSgpOwogI2lmIFdFQktJVF9VU0lOR19WOApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGVmNThhMWIzZTRhMDgxNDEyOGRm
MDYyYmI4NjAxYjQ4NTYxNjVkOWQuLmEzYzVhMjJlODE3MGUxMmU4MzNlZjU1YzA2ZmNjNjM4YWJm
MzdjMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNC0yOSAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTdXBwb3J0IGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBpbiBpc29sYXRlZCB3b3Js
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5ODQz
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xs
ZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZElzb2xhdGVkV29ybGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKwogMjAxMS0wNC0yOCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAppbmRleCBlZThkNWFjNzFiOGVmZTNmNGQ4Y2YzYzZmOTMzZTZlMDc3
MDVlYmY4Li4zNzI3MjA3NTg5M2EwODJkYzU2NmQwYTY4N2ZmZTcyZTk4M2NkZWJmIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC04Miw2ICs4Miw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0
Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQogICAgIC8vIG5hbWVzIHRvIHRoZWlyIG1ldGhv
ZHMgd2lsbCBiZSBkb25lIGJ5IGNhbGxpbmcgYmluZFRvSmF2YVNjcmlwdCgpIChkZWZpbmVkCiAg
ICAgLy8gYnkgQ3BwQm91bmRDbGFzcywgdGhlIHBhcmVudCB0byBMYXlvdXRUZXN0Q29udHJvbGxl
cikuCiAgICAgYmluZE1ldGhvZCgiYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyk7CisgICAgYmluZE1ldGhv
ZCgiYWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjphZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OwogICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CiAgICAgYmlu
ZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdCk7CiAgICAgYmluZE1ldGhvZCgiYWRkVXNlclN0eWxlU2hlZXQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKQEAgLTIwNiw3ICsyMDcsNyBAQCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAg
ICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgi
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk7CiAgICAgYmluZE1ldGhvZCgi
c3luY0xvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFn
ZSk7Ci0gICAgCisKICAgICAvLyBUaGUgZmFsbGJhY2sgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFu
IHVua25vd24gbWV0aG9kIGlzIGludm9rZWQuCiAgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZmFsbGJhY2tNZXRob2QpOwogCkBAIC0xNDQ0LDYgKzE0NDUsMjEg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXMKICAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVh
bigpKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkSXNvbGF0ZWRXb3JsZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAh
YXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmFkZElzb2xhdGVkV29ybGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSgKKyAgICAgICAgYXJndW1lbnRzWzBdLnRvSW50MzIoKSwKKyAg
ICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCisgICAgICAgIGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAorICAgICAgICBhcmd1bWVudHNbM10udG9C
b29sZWFuKCkpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFi
YXNlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggNDRhYzJjZGI5ODAwMTQ4
YWEzNjEzOTRlNDg4NmM3ZWY5OGQ5ODZmYS4uZTgzN2NlYTgwYTY2OTA2YjA0ZWNiZmZmNmVkYmE0
MGUzNGQ5OTI4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0xMDUsMTIgKzEwNSwxMiBAQCBwdWJsaWM6CiAgICAg
Ly8gZHVtcCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQgaWYgdGhlIGR1bXBBc1RleHQgZmxhZyBp
cyBzZXQuCiAgICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhh
dCBtYXkgYmUgcHJlc2VudC4KICAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgCisKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCBhIGRlc2Ny
aXB0aXZlCiAgICAgLy8gbGluZSBmb3IgZWFjaCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrLiBJdCB0
YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzCiAgICAgLy8gYW55IHRoYXQgbWF5IGJlIHBy
ZXNlbnQuCi0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsgICAgCi0gICAgCisgICAgdm9pZCBkdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwogICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0
byBkdW1wIHRoZSBNSU1FIHR5cGUKICAgICAvLyBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IHdhcyBs
b2FkZWQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55CiAgICAgLy8gdGhh
dCBtYXkgYmUgcHJlc2VudC4KQEAgLTI4NSw2ICsyODUsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWxs
b3dzIGxheW91dCB0ZXN0cyB0byBtYW5hZ2Ugb3JpZ2lucycgd2hpdGVsaXN0aW5nLgogICAgIHZv
aWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwogICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYWRkSXNvbGF0
ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAogICAgIC8vIENsZWFycyBhbGwgYXBwbGljYXRpb24gY2FjaGVzLgog
ICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CkBAIC01MTAsOCArNTExLDggQEAgcHJpdmF0ZToKICAgICAvLyBJZiB0
cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIGVh
Y2ggcmVzb3VyY2UKICAgICAvLyBsb2FkIGNhbGxiYWNrLgogICAgIGJvb2wgbV9kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzOwotICAgIAotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdp
bGwgb3V0cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCAKKworICAgIC8v
IElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVh
Y2ggcmVzb3VyY2UgdGhhdAogICAgIC8vIHdhcyBsb2FkZWQuCiAgICAgYm9vbCBtX2R1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92517</attachid>
            <date>2011-05-05 17:58:08 -0700</date>
            <delta_ts>2011-05-25 14:23:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59843-20110505175807.patch</filename>
            <type>text/plain</type>
            <size>41700</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4OTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0MmE0N2NkNWRlNTYyNGU0NmI1YzQ3
NzRhNDBhZDIyZTA4OGQ3OGMxLi43ZTZmNzkxZWExZDMwMGE4ZWQwM2Q0NWQ4MTE1ODdkMzdjOGZm
ODA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMjkgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNv
bGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTg0MworCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxk
L2Nyb3NzLW9yaWdpbi14aHItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sOiBBZGRlZC4K
KwogMjAxMS0wNS0wNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9yaWdpbi14aHItZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9y
aWdpbi14aHItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YjY3ZWFkZmMzZWMzMmE4OTlkZWZj
ZjU0NjkzOGFkYzcxOTRhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyMCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0
IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9pc29sYXRlZFdvcmxk
L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4teGhyLnR4dC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMTogWE1MSHR0cFJlcXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvcmVzb3VyY2VzL2Nyb3NzLW9yaWdp
bi14aHIudHh0LiBPcmlnaW4gaHR0cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5
IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBY
TUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkv
aXNvbGF0ZWRXb3JsZC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLXhoci50eHQuIE9yaWdpbiBodHRw
Oi8vMTI3LjAuMC4xOjgwMDAgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ct
T3JpZ2luLgorVGVzdHMgdGhhdCBpc29sYXRlZCB3b3JsZHMgY2FuIGhhdmUgYWRkaXRpb25hbCBv
cmlnaW5zIHdoaXRlbGlzdGVkIGZvciBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3RzLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworWEhSIGZyb20gbWFpbiB3b3JsZAorWEhSIGNv
bXBsZXRlZCB3aXRoIHN0YXR1cyAwCitYSFIgZnJvbSBpc29sYXRlZCB3b3JsZCB3aXRoIG5vIHdo
aXRlbGlzdAorWEhSIGNvbXBsZXRlZCB3aXRoIHN0YXR1cyAwCitYSFIgZnJvbSBpc29sYXRlZCB3
b3JsZCB3aXRoIHdoaXRlbGlzdAorWEhSIGNvbXBsZXRlZCB3aXRoIHN0YXR1cyAyMDAKK1hIUiBm
cm9tIG1haW4gd29ybGQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSB3aGl0ZWxpc3QKK1hIUiBjb21w
bGV0ZWQgd2l0aCBzdGF0dXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUzZWM5MWRhMTU3YmMwMjIzZDdmNTRmNjY4YTVjODMyMWE1MTBmNWIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQv
Y3Jvc3Mtb3JpZ2luLXhoci5odG1sCkBAIC0wLDAgKzEsOTggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzLXRlc3QtcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy10ZXN0LXJlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bignVGVzdHMgdGhhdCBpc29sYXRlZCB3b3JsZHMgY2FuIGhhdmUgYWRkaXRpb25hbCBvcmlnaW5z
IHdoaXRlbGlzdGVkIGZvciBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3RzLicpOworCitqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKwordmFyIHRlc3RzID0gWworICAgIGZ1bmN0aW9uKCkgeworICAg
ICAgICBkZWJ1ZygnWEhSIGZyb20gbWFpbiB3b3JsZCcpOworICAgICAgICB4aHIoKTsKKyAgICB9
LAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnWEhSIGZyb20gaXNvbGF0ZWQgd29y
bGQgd2l0aCBubyB3aGl0ZWxpc3QnKTsKKyAgICAgICAgcnVuVGVzdEluV29ybGQoMSwgJ3hocicp
OworICAgIH0sCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdYSFIgZnJvbSBpc29s
YXRlZCB3b3JsZCB3aXRoIHdoaXRlbGlzdCcpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5hZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoMSwgJ2h0dHAnLCAn
bG9jYWxob3N0JywgdHJ1ZSk7CisgICAgICAgIHJ1blRlc3RJbldvcmxkKDEsICd4aHInKTsKKyAg
ICB9LAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnWEhSIGZyb20gbWFpbiB3b3Js
ZCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHdoaXRlbGlzdCcpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5hZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoMSwg
J2h0dHAnLCAnbG9jYWxob3N0JywgdHJ1ZSk7CisgICAgICAgIHhocigpOworICAgIH0KK107Cit2
YXIgY3VycmVudFRlc3QgPSAwOworCisvLyBUaGlzIHRlc3QgaXMgbWVhbmluZ2xlc3Mgd2l0aG91
dCBsYXlvdXRUZXN0Q29udHJvbGxlci4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigKKyAgICAgICAgJ21lc3NhZ2UnLAorICAg
ICAgICBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnBh
cnNlKGV2ZW50LmRhdGEpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlICd0ZXN0LWRvbmUnOgorICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50VGVzdCsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRlc3QgPT0gdGVzdHMu
bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW2N1cnJlbnRU
ZXN0XSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
ICdkZWJ1Zyc6CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKG1lc3NhZ2UubWVzc2FnZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1Vua25vd24gbWVzc2FnZTogJyArIGV2ZW50LmRh
dGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgZmFsc2UpOworCisgICAgdGVzdHNbMF0oKTsKK30gZWxzZSB7CisgICAgdGVz
dEZhaWxlZCgnVGVzdCBkZXBlbmRzIG9uIExheW91dFRlc3RDb250cm9sbGVyIGFuZCBtdXN0IGJl
IHJ1biBieSBEUlQnKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdEluV29ybGQod29ybGRJZCwgZnVu
Y05hbWUpCit7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoCisgICAgICAgIHdvcmxkSWQsIFN0cmluZyhldmFsKGZ1bmNOYW1lKSkgKyAiXG4i
ICsgZnVuY05hbWUgKyAiKCk7Iik7Cit9CisKK2Z1bmN0aW9uIHhocigpCit7CisgICAgZnVuY3Rp
b24gZGVidWcobWVzc2FnZSkgeworICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJp
bmdpZnkoeworICAgICAgICAgICAgICAgICd0eXBlJzogJ2RlYnVnJywKKyAgICAgICAgICAgICAg
ICAnbWVzc2FnZSc6IG1lc3NhZ2UKKyAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgJyonKTsK
KyAgICB9CisKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9w
ZW4oJ0dFVCcsICdodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9y
ZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLXhoci50eHQnLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRlYnVnKCdYSFIgY29tcGxldGVkIHdp
dGggc3RhdHVzICcgKyB4aHIuc3RhdHVzKTsKKyAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEpT
T04uc3RyaW5naWZ5KHsndHlwZSc6ICd0ZXN0LWRvbmUnfSksICcqJyk7CisgICAgfTsKKyAgICB4
aHIuc2VuZChudWxsKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTkzNTJlNzZk
ZmNhNjI3YWQxNjk5ZTE4YTMxNmRhMDFlNzE3NDI3NC4uZGNjYjU4NzE3MWU3NzliMzEwZmI4NGMw
MDY2NjQ4MmI1YTBiZWNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDExLTA0LTI5
ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgY3Jvc3Mtb3JpZ2luIFhN
TEh0dHBSZXF1ZXN0IGluIGlzb2xhdGVkIHdvcmxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4NDMKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjphZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6Om9yaWdpbkFjY2Vzc1doaXRlbGlzdCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJhdGNoQ29uZmlndXJl
QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpiYXRjaENvbmZpZ3VyZUNhbGxiYWNrcyk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppc29sYXRlZENvbnRleHRGb3JXb3JsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOFByb3h5OjphZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpw
cmVmbGlnaHRTdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6bG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjppc0FsbG93ZWRSZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJPcHRpb25zOjpUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuUmVjZWl2ZURyYWdEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc1NlY3VyZVRyYW5zaXRpb25Ubyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmll
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6ZGF0YWJhc2VJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjplcXVhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6aXNTYW1lU2NoZW1lSG9zdFBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbjo6V2hpdGVsaXN0ZWRTZWN1cml0eU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXaGl0ZWxpc3RlZFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbjo6aXNBY2Nl
c3NXaGl0ZUxpc3RlZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAg
ICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRw
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRBc0Jsb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
SHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAqIHhtbC9YTUxIdHRw
UmVxdWVzdC5oOgorCiAyMDExLTA1LTA1ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDJiZWRjNDZm
NWYyNjFjZmQ0NjhkYjk2ODU1MDc5Nzc1YzZjMDA2MGMuLmI1MzYwMDZjMGUzMzc5Njk0MTc3NWQ2
MmRhNzhmYzZjMjRmMzRmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yMTYsNiArMjE2LDExIEBAIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjCiAgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291
cmNlcywgZXh0ZW5zaW9uR3JvdXApOwogfQogCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmFkZElz
b2xhdGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSh1bnNpZ25lZCB3b3JsZElELCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYg
aG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpCit7CisgICAgbV9wcm94eS0+YWRkSXNvbGF0ZWRX
b3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwLCBw
cm90b2NvbCwgaG9zdCwgYWxsb3dTdWJkb21haW5zKTsKK30KKwogLy8gRXZhbHVhdGUgYSBzY3Jp
cHQgZmlsZSBpbiB0aGUgZW52aXJvbm1lbnQgb2YgdGhpcyBwcm94eS4KIFNjcmlwdFZhbHVlIFNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgK
aW5kZXggNmI5NzY1YzlmNDg3NzNkNTBiZTY4ZmQ4MjlhMDkwNDNjZjJlMWJiMC4uMzVlNDdhMTRh
YTk3NDViOTU5OTRjM2ExOWEwOGU4YzQzZDAwZGFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtOTksNiArOTksOCBAQCBwdWJsaWM6CiAg
ICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4KICAgICB2b2lkIGV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CiAKKyAgICB2b2lkIGFkZElzb2xh
dGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSh1bnNpZ25lZCB3b3JsZElELCBpbnQg
ZXh0ZW5zaW9uR3JvdXAsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgaG9z
dCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpOworCiAgICAgLy8gTWFzcXVlcmFkZSAndGhpcycgYXMg
dGhlIHdpbmRvd1NoZWxsLgogICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgcHJv
dmlkZXMgcmVhc29uYWJsZSBjb21wYXRpYmlsaXR5CiAgICAgLy8gd2l0aCB3aGF0IEpTQyBkb2Vz
IGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29u
dGV4dC5jcHAKaW5kZXggN2IyMWEzNmRlOTg2NThhZDE2Njc3NjA0NzQzMzlkZGJiMTczZmFjNC4u
ODMwNTQwZWI2ODk0MDMxYzczZDhlNmVhMzU0YzkyY2I2YjFmYjllMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcApAQCAtMzQsNyArMzQs
NyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgotI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJPcmlnaW5BY2Nlc3NFbnRyeS5oIgog
I2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUu
aCIKIApAQCAtODcsNCArODcsMTcgQEAgVjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29u
dGV4dCgpCiAgICAgbV9jb250ZXh0LT5kaXNwb3NlSGFuZGxlKCk7CiB9CiAKK3ZvaWQgVjhJc29s
YXRlZENvbnRleHQ6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wsIGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpCit7Cisg
ICAgbV9vcmlnaW5BY2Nlc3NXaGl0ZWxpc3QuYXBwZW5kKE9yaWdpbkFjY2Vzc0VudHJ5KAorICAg
ICAgICBwcm90b2NvbCwgaG9zdCwgYWxsb3dTdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50cnk6
OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMp
KTsKK30KKworVmVjdG9yPE9yaWdpbkFjY2Vzc0VudHJ5PiBWOElzb2xhdGVkQ29udGV4dDo6b3Jp
Z2luQWNjZXNzV2hpdGVsaXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcmlnaW5BY2Nlc3NX
aGl0ZWxpc3Q7Cit9CisKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAppbmRleCA1Y2Q5YzY1NmY1YTE1
NTgyY2YwY2JjOWRmMmY4OTNkNTRjZDZiYWJjLi4wZjY0ZGJjNTExOGI4YWM4YTMzNDRhYjI4YWY0
M2JhMDBhNGI1YTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElz
b2xhdGVkQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0
ZWRDb250ZXh0LmgKQEAgLTM2LDExICszNiwxMyBAQAogI2luY2x1ZGUgIlY4RE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBWOFByb3h5OworY2xhc3MgT3JpZ2luQWNjZXNzRW50cnk7CiAKIC8vIFY4SXNvbGF0ZWRD
b250ZXh0CiAvLwpAQCAtOTMsNiArOTUsOSBAQCBwdWJsaWM6CiAKICAgICBJc29sYXRlZFdvcmxk
KiB3b3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KIAorICAgIHZvaWQgYWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgY29uc3Qg
U3RyaW5nJiBob3N0LCBib29sIGFsbG93U3ViZG9tYWlucyk7CisgICAgVmVjdG9yPE9yaWdpbkFj
Y2Vzc0VudHJ5PiBvcmlnaW5BY2Nlc3NXaGl0ZWxpc3QoKSBjb25zdDsKKwogcHJpdmF0ZToKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7CkBAIC0xMDgsNiArMTEzLDggQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7
CiAKICAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbV93b3JsZDsKKworICAgIFZlY3RvcjxPcmln
aW5BY2Nlc3NFbnRyeT4gbV9vcmlnaW5BY2Nlc3NXaGl0ZWxpc3Q7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IGY0
Nzk1ZmI5YWM2ZTIxZmMzZTQxMWY4ZDgxYjE1N2UzZjgwYmI5Y2UuLmFlMjg0OThhZDg4ZGM2M2Iz
MTk2YWFlMWRiOGYxZjUzNmE5MGZlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCkBAIC0yNDIsMTIgKzI0Miw4IEBAIGJvb2wgVjhQcm94eTo6aGFuZGxlT3V0T2ZNZW1v
cnkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29s
YXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNv
dXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKK1Y4SXNvbGF0ZWRDb250ZXh0KiBWOFByb3h5Ojpp
c29sYXRlZENvbnRleHRGb3JXb3JsZChpbnQgd29ybGRJRCwgaW50IGV4dGVuc2lvbkdyb3VwKQog
ewotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVlZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3
ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KLSAgICB3aW5kb3dT
aGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IDA7CiAK
ICAgICBpZiAod29ybGRJRCA+IDApIHsKQEAgLTI1OCw3ICsyNTQsNyBAQCB2b2lkIFY4UHJveHk6
OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZQogICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRD
b250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKICAgICAgICAgICAgIGlmIChpc29sYXRlZENv
bnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBkZWxldGUgaXNv
bGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjaGFuZ2UgdGhpcyB0byB1c2luZyB3aW5kb3cgc2hlbGxzIHRvIG1hdGNoIEpTQy4KQEAgLTI2
OCwyNCArMjY0LDQ1IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50
IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlCiAgICAgICAgICAgICBpZiAo
IXNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0
KCkpKSB7CiAgICAgICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy50YWtlKHdvcmxkSUQpOwog
ICAgICAgICAgICAgICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0
ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKICAgICAgICAgaWYgKGlzb2xhdGVkQ29u
dGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVk
Q29udGV4dDsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAgICAgfQogCisgICAgcmV0dXJuIGlzb2xhdGVkQ29udGV4dDsKK30KKwordm9pZCBW
OFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9y
PFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUg
YSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgorICAgIHdpbmRvd1NoZWxsKCkt
PmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKKyAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXNvbGF0ZWRDb250
ZXh0Rm9yV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApOworCiAgICAgdjg6OkxvY2FsPHY4
OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVk
Q29udGV4dC0+Y29udGV4dCgpKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29w
ZShjb250ZXh0KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsKKyAgICAgICAgZXZhbHVhdGUoc291
cmNlc1tpXSwgMCk7CiAKICAgICBpZiAod29ybGRJRCA9PSAwKQotICAgICAgaXNvbGF0ZWRDb250
ZXh0LT5kZXN0cm95KCk7CisgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+ZGVzdHJveSgpOworfQor
Cit2b2lkIFY4UHJveHk6OmFkZElzb2xhdGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSh1bnNpZ25lZCB3b3JsZElELCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wsIGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpCit7CisgICAg
QVNTRVJUKHdvcmxkSUQpOworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBW
OElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0Rm9yV29y
bGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApOworCisgICAgaWYgKGlzb2xhdGVkQ29udGV4dCkK
KyAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5hZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShw
cm90b2NvbCwgaG9zdCwgYWxsb3dTdWJkb21haW5zKTsKIH0KIAogYm9vbCBWOFByb3h5OjpzZXRJ
bmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdl
dENvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKaW5kZXggYzM0NGEyYzI4
NmYwZDZjMjA1MGVjYTA0ZmY1ZTUyNWE4OTk2YjQxYy4uODNiOTFmNzA4NDQ4MTg5ZjE1ZmFkZDI1
ZmRlZWUwM2E1OTY1MTAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAt
MTYwLDYgKzE2MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY29uc3RydWN0
b3JzLgogICAgICAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91
cCk7CiAKKyAgICAgICAgdm9pZCBhZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkodW5zaWduZWQgd29ybGRJRCwgaW50IGV4dGVuc2lvbkdyb3VwLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sLCBjb25zdCBTdHJpbmcmIGhvc3QsIGJvb2wgYWxsb3dTdWJkb21haW5zKTsKKwog
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3h5IGlzIGN1cnJlbnRseSBleGVjdXRp
bmcgYSBzY3JpcHQgaW4gVjguCiAgICAgICAgIGJvb2wgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7
CiAKQEAgLTI4OSw2ICsyOTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJl
dHVybnMgZmFsc2Ugd2hlbiB3ZSdyZSBvdXQgb2YgbWVtb3J5IGluIFY4LgogICAgICAgICBib29s
IHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
dGFyZ2V0Q29udGV4dCk7CiAKKyAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29u
dGV4dEZvcldvcmxkKGludCB3b3JsZElELCBpbnQgZXh0ZW5zaW9uR3JvdXApOworCiAgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiByYW5nZUV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNvZGUp
OwogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogZXZlbnRFeGNlcHRpb25OYW1lKGludCBleGNl
cHRpb25Db2RlKTsKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHhtbEh0dHBSZXF1ZXN0RXhj
ZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3IuY3BwCmluZGV4IDZiNWI2NGYyNDc2N2RkZDhmODgxNzkyODgzN2UxMjAwMGY2NmI5NTEuLjEx
NzQ0YmNkNmI0YWJjOTdjMmI3MjczYTNjN2I0MDQzMmRiMDgwODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IuY3BwCkBAIC0zMiw3ICszMiwxMCBAQAogI2luY2x1ZGUgIlY4WE1MSHR0
cFJlcXVlc3QuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiT3JpZ2luQWNjZXNz
RW50cnkuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5o
IgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpA
QCAtNTIsNyArNTUsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVlc3Q6
OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlhNTEh0dHBSZXF1ZXN0
IGNvbnN0cnVjdG9yJ3MgYXNzb2NpYXRlZCBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUiLCBWOFBy
b3h5OjpSZWZlcmVuY2VFcnJvcik7Ci0gICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiB4bWxIdHRw
UmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCk7CisKKyAgICBSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4
dCogaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewor
ICAgICAgICBzZWN1cml0eU9yaWdpbiA9IFdoaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZSgKKyAgICAgICAgICAgIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGlzb2xhdGVkQ29udGV4
dC0+b3JpZ2luQWNjZXNzV2hpdGVsaXN0KCkpOworICAgIH0KKyAgICBSZWZQdHI8WE1MSHR0cFJl
cXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBz
ZWN1cml0eU9yaWdpbik7CiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9s
ZGVyKCksICZpbmZvLCB4bWxIdHRwUmVxdWVzdC5nZXQoKSk7CiAKICAgICAvLyBBZGQgb2JqZWN0
IHRvIHRoZSB3cmFwcGVyIG1hcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggM2RjZmFiMGYyZjk3MmU4Y2QzM2JhZGMyOTRl
NDNiNjVlZjk1ZTRkMi4uMGM5YWJiMjUzMDY0MzI5ZWQyMWFmNWNiMWQ3MGEyNzZhYWMwMzI1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmwKICAgICAsIG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fb3B0
aW9uYWxPdXRnb2luZ1JlZmVycmVyKG9wdGlvbmFsT3V0Z29pbmdSZWZlcnJlcikKLSAgICAsIG1f
c2FtZU9yaWdpblJlcXVlc3QoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVxdWVzdC51cmwoKSkpCisgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCiAgICAgLCBtX2FzeW5jKGJsb2NraW5nQmVo
YXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQogewogICAgIEFTU0VSVChkb2N1bWVudCk7CkBA
IC05Nyw3ICs5Nyw3IEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsCiAgICAgZWxzZSB7CiAgICAg
ICAgIG1fYWN0dWFsUmVxdWVzdCA9IGNyb3NzT3JpZ2luUmVxdWVzdC5yZWxlYXNlKCk7CiAKLSAg
ICAgICAgaWYgKENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNr
aXBQcmVmbGlnaHQoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0
dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2FjdHVhbFJl
cXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KQorICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCku
Y2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJl
cXVlc3QtPnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9hY3R1YWxSZXF1ZXN0
LT5odHRwTWV0aG9kKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKICAg
ICAgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoKm1fYWN0dWFsUmVxdWVz
dCk7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2UKIAogICAgIC8v
IE1ha2UgYSBjb3B5IG9mIHRoZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2RpZnkg
c29tZSBkZXRhaWxzLgogICAgIFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3QocmVx
dWVzdCk7Ci0gICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNl
dEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKICAgICBsb2FkUmVx
dWVzdChjcm9zc09yaWdpblJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CiB9CkBAIC0xMjUsNyAr
MTI1LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFIKIHsKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cHJlZmxpZ2h0UmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKICAgICBwcmVmbGlnaHRSZXF1ZXN0LnJl
bW92ZUNyZWRlbnRpYWxzKCk7Ci0gICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQT3JpZ2luKG1f
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHByZWZsaWdodFJl
cXVlc3Quc2V0SFRUUE9yaWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICBw
cmVmbGlnaHRSZXF1ZXN0LnNldEFsbG93Q29va2llcyhtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFs
cyk7CiAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJT05TIik7CiAgICAg
cHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVl
c3QtTWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uCiAKICAgICBTdHJpbmcgYWNjZXNzQ29udHJvbEVycm9yRGVz
Y3JpcHRpb247CiAgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nl
c0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMs
IG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0
aW9uKSkgeworICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwg
bV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRy
b2xFcnJvckRlc2NyaXB0aW9uKSkgewogICAgICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZShyZXNw
b25zZS51cmwoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC0yMTksMTAgKzIxOSwxMCBAQCB2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50cnkobV9kb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwg
cHJlZmxpZ2h0UmVzdWx0LnJlbGVhc2UoKSk7CisgICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFwcGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29w
dGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKLSAg
ICAgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlv
bnMuYWxsb3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNz
Q29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CisgICAgICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vz
c0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3Vy
aXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgewogICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJ
bnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRl
c2NyaXB0aW9uKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAt
MzIzLDcgKzMyMyw3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRT
dWNjZXNzKCkKICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OwogICAg
IGFjdHVhbFJlcXVlc3Quc3dhcChtX2FjdHVhbFJlcXVlc3QpOwogCi0gICAgYWN0dWFsUmVxdWVz
dC0+c2V0SFRUUE9yaWdpbihtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
KTsKKyAgICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKHNlY3VyaXR5T3JpZ2luKCktPnRv
U3RyaW5nKCkpOwogCiAgICAgLy8gSXQgc2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5
IGNoZWNrIHNpbmNlIHdlIGFscmVhZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0
LgogICAgIGxvYWRSZXF1ZXN0KCphY3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CkBA
IC0zOTYsNyArMzk2LDEyIEBAIGJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93
ZWRSZWRpcmVjdChjb25zdCBLVVJMJiB1cmwpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1w
bGVtZW50IGFjY2VzcyBjb250cm9sIGZvciBlYWNoIHJlZGlyZWN0LiBUaGlzIHdpbGwgcmVxdWly
ZSBzb21lIHJlZmFjdG9yaW5nIHRob3VnaCwgYmVjYXVzZSB0aGUgY29kZQogICAgIC8vIHRoYXQg
cHJvY2Vzc2VzIHJlZGlyZWN0cyBkb2Vzbid0IGtub3cgYWJvdXQgYWNjZXNzIGNvbnRyb2wgYW5k
IGV4cGVjdHMgYSBzeW5jaHJvbm91cyBhbnN3ZXIgZnJvbSBpdHMgY2xpZW50IGFib3V0IHdoZXRo
ZXIKICAgICAvLyBhIHJlZGlyZWN0IHNob3VsZCBwcm9jZWVkLgotICAgIHJldHVybiBtX3NhbWVP
cmlnaW5SZXF1ZXN0ICYmIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
dXJsKTsKKyAgICByZXR1cm4gbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBzZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHVybCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vcHRpb25z
LnNlY3VyaXR5T3JpZ2luID8gbV9vcHRpb25zLnNlY3VyaXR5T3JpZ2luLmdldCgpIDogbV9kb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCmluZGV4
IDUwZjYwY2EwYzRlYzAzZmNhZjliZWNlMjMxYzFkNzEyOTU5MGJkNjAuLjU5NDk2NjcyMWVlMTcx
N2NmYjhhMjRkYTRjMzI2Y2MxMTQ1NWI5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OworICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNz
IFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAKICAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCAgewpA
QCAtOTQsNiArOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbG9hZFJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSk7CiAgICAg
ICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgS1VSTCYpOwogCisgICAgICAgIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworCiAgICAgICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
IG1fY2xpZW50OwogICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCmluZGV4IGY1NzRjOTQ1MTYyMjk0NDRmYTkyMzZiMDlm
ZDYyZjU1YmZhOGE3YjIuLmM5NmM2NTczMGZkYWY3ZTQ1MzI4MTgxN2I3MWE2MGE1OGJjZDcyMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaApAQCAtMzEsOCArMzEs
MTAgQEAKICNpZm5kZWYgVGhyZWFkYWJsZUxvYWRlcl9oCiAjZGVmaW5lIFRocmVhZGFibGVMb2Fk
ZXJfaAogCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTYxLDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGFsbG93Q3Jl
ZGVudGlhbHM7ICAvLyBXaGV0aGVyIEhUVFAgY3JlZGVudGlhbHMgYW5kIGNvb2tpZXMgYXJlIHNl
bnQgd2l0aCB0aGUgcmVxdWVzdC4KICAgICAgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgIC8vIElm
IEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4KICAg
ICAgICAgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeTsK
KyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKICAgICB9Owog
CiAgICAgLy8gVXNlZnVsIGZvciBkb2luZyBsb2FkZXIgb3BlcmF0aW9ucyBmcm9tIGFueSB0aHJl
YWQgKG5vdCB0aHJlYWRzYWZlLCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2Vj
dXJpdHlPcmlnaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAK
aW5kZXggMjQzZjAyYTljYTY0ZWE1NjAxMTU1Njg4ZmUxODRiMGQzYWNkNmQ1My4uNzVjNmMyOWI3
ZTdiNjgxMzllZDQyZDA2ZGIzNzg4NGE0YWVkZDUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eU9yaWdpbi5jcHAKQEAgLTU4Niw0ICs1ODYsMjUgQEAgdm9pZCBTZWN1cml0eU9yaWdpbjo6
cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCkKICAgICBtYXAuY2xlYXIoKTsKIH0KIAorV2hp
dGVsaXN0ZWRTZWN1cml0eU9yaWdpbjo6V2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbihTZWN1cml0
eU9yaWdpbiogcGFyZW50LCBWZWN0b3I8T3JpZ2luQWNjZXNzRW50cnk+IG9yaWdpbkFjY2Vzc1do
aXRlbGlzdCkKKyAgICA6IFNlY3VyaXR5T3JpZ2luKEtVUkwoS1VSTCgpLCBwYXJlbnQtPnRvU3Ry
aW5nKCkpLCBTYW5kYm94Tm9uZSkKKyAgICAsIG1fb3JpZ2luQWNjZXNzV2hpdGVsaXN0KG9yaWdp
bkFjY2Vzc1doaXRlbGlzdCkKK3sKK30KKworUGFzc1JlZlB0cjxXaGl0ZWxpc3RlZFNlY3VyaXR5
T3JpZ2luPiBXaGl0ZWxpc3RlZFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoU2VjdXJpdHlPcmlnaW4q
IHBhcmVudCwgVmVjdG9yPE9yaWdpbkFjY2Vzc0VudHJ5PiBvcmlnaW5BY2Nlc3NXaGl0ZWxpc3Qp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXaGl0ZWxpc3RlZFNlY3VyaXR5T3JpZ2luKHBh
cmVudCwgb3JpZ2luQWNjZXNzV2hpdGVsaXN0KSk7Cit9CisKK2Jvb2wgV2hpdGVsaXN0ZWRTZWN1
cml0eU9yaWdpbjo6aXNBY2Nlc3NXaGl0ZUxpc3RlZChjb25zdCBTZWN1cml0eU9yaWdpbiogdGFy
Z2V0T3JpZ2luKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3Quc2l6ZSgpOyAgKytpKSB7CisgICAgICAgaWYgKG1fb3JpZ2luQWNjZXNz
V2hpdGVsaXN0LmF0KGkpLm1hdGNoZXNPcmlnaW4oKnRhcmdldE9yaWdpbikpCisgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBTZWN1cml0eU9yaWdpbjo6aXNBY2Nl
c3NXaGl0ZUxpc3RlZCh0YXJnZXRPcmlnaW4pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKaW5kZXggZjZlZjU3MDdjZThkNGYyZDJl
ZjI4YzYzZDUyNmQ1ZmY4ZjA2MWFmZS4uOTU4ODQ2MWUzZmI2NDRkMDhkNDQ0ZDE3ZWRiNWJhZTNj
YWU0NGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaApAQCAtMTkzLDE0ICsx
OTMsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkRvbWFpbnMs
IGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogICAgIHN0YXRpYyB2b2lkIHJlc2V0
T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFNl
Y3VyaXR5T3JpZ2luKGNvbnN0IEtVUkwmLCBTYW5kYm94RmxhZ3MpOworICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2Vzc1doaXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CisKK3By
aXZhdGU6CiAgICAgZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4q
KTsKIAogICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmdW5jdGlvbiB0byBzb21ldGhpbmcgbW9y
ZSBzZW1hbnRpYy4KICAgICBib29sIHBhc3Nlc0ZpbGVDaGVjayhjb25zdCBTZWN1cml0eU9yaWdp
biopIGNvbnN0OwogCi0gICAgYm9vbCBpc0FjY2Vzc1doaXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5
T3JpZ2luKikgY29uc3Q7CiAgICAgYm9vbCBpc0FjY2Vzc1RvVVJMV2hpdGVMaXN0ZWQoY29uc3Qg
S1VSTCYpIGNvbnN0OwogCiAgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdzOwpAQCAtMjE3
LDYgKzIxOSwxOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0
aW9uOwogfTsKIAorY2xhc3MgT3JpZ2luQWNjZXNzRW50cnk7CisKK2NsYXNzIFdoaXRlbGlzdGVk
U2VjdXJpdHlPcmlnaW4gOiBwdWJsaWMgU2VjdXJpdHlPcmlnaW4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdoaXRlbGlzdGVkU2VjdXJpdHlPcmlnaW4+IGNyZWF0ZShTZWN1cml0
eU9yaWdpbiosIFZlY3RvcjxPcmlnaW5BY2Nlc3NFbnRyeT4pOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBib29sIGlzQWNjZXNzV2hpdGVMaXN0ZWQoY29uc3QgU2VjdXJpdHlPcmlnaW4qKSBj
b25zdDsKK3ByaXZhdGU6CisgICAgV2hpdGVsaXN0ZWRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9y
aWdpbiogcGFyZW50LCBWZWN0b3I8T3JpZ2luQWNjZXNzRW50cnk+IG9yaWdpbkFjY2Vzc1doaXRl
bGlzdCk7CisgICAgVmVjdG9yPE9yaWdpbkFjY2Vzc0VudHJ5PiBtX29yaWdpbkFjY2Vzc1doaXRl
bGlzdDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNlY3VyaXR5
T3JpZ2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGVkMWUyMTU3
ZDNhYTJkYWE4MTg1NmE0N2Q0ZDA3NmY5OThhOTBlOGEuLmE3ZDY3NGNkNWNhMDUwYzAyYmYyYzFi
NzdhZjVjOTM4ODgyZWMyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApA
QCAtMTcwLDcgKzE3MCwxMiBAQCBzdGF0aWMgY29uc3QgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRh
KiBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCkKICAgICByZXR1cm4gZHVtbXk7
CiB9CiAKLVhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4gWE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhN
TEh0dHBSZXF1ZXN0KGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKK1hNTEh0dHBSZXF1
ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKICAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9hc3luYyh0cnVlKQogICAgICwgbV9pbmNsdWRl
Q3JlZGVudGlhbHMoZmFsc2UpCkBAIC0xODUsNiArMTkwLDcgQEAgWE1MSHR0cFJlcXVlc3Q6OlhN
TEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgLCBtX2V4
Y2VwdGlvbkNvZGUoMCkKICAgICAsIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlKHRoaXMpCiAgICAg
LCBtX3Jlc3BvbnNlVHlwZUNvZGUoUmVzcG9uc2VUeXBlRGVmYXVsdCkKKyAgICAsIG1fc2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgaW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0
U3RhdGljRGF0YSgpOwogI2lmbmRlZiBOREVCVUcKQEAgLTIwNSw2ICsyMTEsMTEgQEAgRG9jdW1l
bnQqIFhNTEh0dHBSZXF1ZXN0Ojpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAorU2VjdXJpdHlP
cmlnaW4qIFhNTEh0dHBSZXF1ZXN0OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2VjdXJpdHlPcmlnaW4gPyBtX3NlY3VyaXR5T3JpZ2luLmdldCgpIDogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpOworfQorCiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQogYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXNlc0Rhc2hib2FyZEJhY2t3YXJk
Q29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdAogewpAQCAtMjQ3LDcgKzI1OCw3IEBAIERvY3VtZW50
KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
ICAgICBtX3Jlc3BvbnNlWE1MID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNl
WE1MLT5zZXRDb250ZW50KG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFNlY3VyaXR5T3JpZ2luKGRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0
U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAgICAgICBpZiAoIW1fcmVz
cG9uc2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0g
MDsKICAgICAgICAgfQpAQCAtNjE1LDcgKzYyNiw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNy
ZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKTsKKyAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChtX3VybCk7CiAKICAgICAvLyBXZSBhbHNvIHJlbWVt
YmVyIHdoZXRoZXIgdXBsb2FkIGV2ZW50cyBzaG91bGQgYmUgYWxsb3dlZCBmb3IgdGhpcyByZXF1
ZXN0IGluIGNhc2UgdGhlIHVwbG9hZCBsaXN0ZW5lcnMgYXJlCiAgICAgLy8gYWRkZWQgYWZ0ZXIg
dGhlIHJlcXVlc3QgaXMgc3RhcnRlZC4KQEAgLTYzOSw2ICs2NTAsNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG9wdGlvbnMuZm9y
Y2VQcmVmbGlnaHQgPSB1cGxvYWRFdmVudHM7CiAgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
ID0gbV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFsczsKICAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IFVzZUFjY2Vzc0NvbnRyb2w7CisgICAgb3B0
aW9ucy5zZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICBtX2V4Y2VwdGlv
bkNvZGUgPSAwOwogICAgIG1fZXJyb3IgPSBmYWxzZTsKQEAgLTgyMSw3ICs4MzMsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YQogICAgIH0KIAogICAgIC8vIEEgcHJpdmlsZWdlZCBzY3JpcHQg
KGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0KSBjYW4gc2V0IGFueSBoZWFkZXJzLgotICAgIGlmICgh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxS
ZXNvdXJjZXMoKSAmJiAhaXNTYWZlUmVxdWVzdEhlYWRlcihuYW1lKSkgeworICAgIGlmICghc2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlzU2FmZVJlcXVlc3RI
ZWFkZXIobmFtZSkpIHsKICAgICAgICAgcmVwb3J0VW5zYWZlVXNhZ2Uoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCAiUmVmdXNlZCB0byBzZXQgdW5zYWZlIGhlYWRlciBcIiIgKyBuYW1lICsgIlwi
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04NjQsNyArODc2LDcgQEAgU3RyaW5nIFhN
TEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNl
dC1Db29raWUgaGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAg
ICAgIGtub3cgYW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0
byB0aGVtLgogICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBw
b2xpY3kuCi0gICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291
cmNlcygpKQorICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3ND
b250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkKQEAgLTg4OSw3ICs5MDEs
NyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZQogICAgIH0KIAogICAgIC8vIFNlZSBjb21tZW50
IGluIGdldEFsbFJlc3BvbnNlSGVhZGVycyBhYm92ZS4KLSAgICBpZiAoaXNTZXRDb29raWVIZWFk
ZXIobmFtZSkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpIHsKKyAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIobmFt
ZSkgJiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKSB7CiAgICAg
ICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQg
dG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAppbmRleCBkYTc3
N2U3NzhjODg1ZTRkNjk0MzcxYjA2OGY2N2UzN2ZlZTE2YjgyLi5iMDdjYTJiNDA0NWQwMTQ1YzE3
ZjVkOWEwMWY3MWEzZTdlMmUyOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApA
QCAtMzksNiArMzksNyBAQCBjbGFzcyBCbG9iOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBET01G
b3JtRGF0YTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIGNsYXNzIFRo
cmVhZGFibGVMb2FkZXI7CkBAIC00Niw3ICs0Nyw3IEBAIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7
CiBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFhNTEh0dHBSZXF1ZXN0
PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwcml2YXRlIFRocmVhZGFibGVMb2FkZXJDbGllbnQsIHB1
YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFhNTEh0dHBS
ZXF1ZXN0KGNvbnRleHQpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+ID0gMCk7CiAgICAgflhNTEh0dHBSZXF1ZXN0KCk7CiAKICAgICAvLyBUaGVzZSBleGFjdCBu
dW1lcmljIHZhbHVlcyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgSlMgZXhwZWN0cyB0aGVtLgpAQCAt
MTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPFhNTEh0dHBSZXF1
ZXN0Pjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQo
KSB7IGRlcmVmKCk7IH0KQEAgLTE0Miw2ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAogICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0OworICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0OwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIGJvb2wgdXNlc0Rh
c2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdDsKQEAgLTIyNiw2ICsyMjgs
OCBAQCBwcml2YXRlOgogCiAgICAgLy8gQW4gZW51bSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbGxv
d2VkIHN0cmluZyB2YWx1ZXMgZm9yIHRoZSByZXNwb25zZVR5cGUgYXR0cmlidXRlLgogICAgIFJl
c3BvbnNlVHlwZUNvZGUgbV9yZXNwb25zZVR5cGVDb2RlOworCisgICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwZmQ4M2FkNWE3ZWNmZDI0NmVhMTc4NzdlNzFk
ZmRmY2VlODVkZDc1Li5jOWY2M2FkZTA0Y2YwYjlkYTgyNjIyNDdjOTg5NWM1OTg4YjYzNzA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA0LTI5ICBN
aWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgY3Jvc3Mtb3JpZ2luIFhNTEh0
dHBSZXF1ZXN0IGluIGlzb2xhdGVkIHdvcmxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4NDMKKworICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5o
OgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpmcmFt
ZUNvbnRlbnRBc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6YWRk
SXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01hdGNoZXMpOgorICAgICAgICAqIHNyYy9XZWJG
cmFtZUltcGwuaDoKKwogMjAxMS0wNS0wNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJvbGwgQ2hyb21pdW0gREVQUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJGcmFtZS5oCmluZGV4IDQ2Mzc1NzBjNWYwODE3ZGJhNDI4NWI1MDk3MWVmNmU1ZTRh
NWE3ZmMuLjhmZDAwN2YzMTAwZTAyYWQ3NTg0ZjliZWNmNTg3NTFhM2Y0NzYyNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtMjQ4LDYgKzI0OCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIGludCB3b3JsZElkLCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJj
ZXMsIHVuc2lnbmVkIG51bVNvdXJjZXMsCiAgICAgICAgIGludCBleHRlbnNpb25Hcm91cCkgPSAw
OwogCisgICAgdmlydHVhbCB2b2lkIGFkZElzb2xhdGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeSgKKyAgICAgICAgaW50IHdvcmxkSWQsIGludCBleHRlbnNpb25Hcm91cCwgY29uc3Qg
V2ViU3RyaW5nJiBwcm90b2NvbCwgCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgaG9zdCwgYm9v
bCBhbGxvd1N1YmRvbWFpbnMpID0gMDsKKwogICAgIC8vIExvZ3MgdG8gdGhlIGNvbnNvbGUgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0Nv
bnNvbGUoY29uc3QgV2ViQ29uc29sZU1lc3NhZ2UmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDI0NTE1OGQ3NjBmOTQ2Mzc4M2FlZjgx
NTlhYzMyYmUyMDhkNjg1NGEuLmQwMGE4OGM4ZjYxMjJlMDY2ZDU2OWI4YTgzMDUyZjZmMGU3N2Zk
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAt
Nzk3LDYgKzc5NywxMyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCgKICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQo
d29ybGRJZCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXApOwogfQogCit2b2lkIFdlYkZyYW1lSW1w
bDo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAorICAgIGludCB3
b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGNvbnN0IFdlYlN0cmluZyYgcHJvdG9jb2wsIGNv
bnN0IFdlYlN0cmluZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpCit7CisgICAgbV9mcmFt
ZS0+c2NyaXB0KCktPmFkZElzb2xhdGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgK
KyAgICAgICAgd29ybGRJZCwgZXh0ZW5zaW9uR3JvdXAsIHByb3RvY29sLCBob3N0LCBhbGxvd1N1
YmRvbWFpbnMpOworfQorCiB2b2lkIFdlYkZyYW1lSW1wbDo6YWRkTWVzc2FnZVRvQ29uc29sZShj
b25zdCBXZWJDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoZnJhbWUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDIxMWRkMjk4
ZjE5NDIzNGE3Y2ZjYzE3OWVhYTM4M2M0ODBkMjFhZTkuLjdhNjE2M2VlMjRiYThlYzY3MTk3MDJl
Y2FhZGQ2YWM3MTQ2MjI1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCkBAIC0xMDQsNiArMTA0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAogICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2Vi
U2NyaXB0U291cmNlKiBzb3VyY2VzLCB1bnNpZ25lZCBudW1Tb3VyY2VzLAogICAgICAgICBpbnQg
ZXh0ZW5zaW9uR3JvdXApOworICAgIHZpcnR1YWwgdm9pZCBhZGRJc29sYXRlZFdvcmxkT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgICAgIGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9u
R3JvdXAsIGNvbnN0IFdlYlN0cmluZyYgcHJvdG9jb2wsCisgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgaG9zdCwgYm9vbCBhbGxvd1N1YmRvbWFpbnMpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlKGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJik7CiAgICAgdmlydHVhbCB2b2lk
IGNvbGxlY3RHYXJiYWdlKCk7CiAjaWYgV0VCS0lUX1VTSU5HX1Y4CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGQwMGMxMjUzYjVmMzcxZmM5ZjIz
ZmM1MzAzMzRlOGU4YzQyZmNhYS4uN2MzMjM3MTdmYmU1YTg1MmUyNTFkNmMyM2VhNjJmZmI1YmQ2
NGRmMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDExLTA0LTI5ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN1cHBvcnQgY3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0IGluIGlzb2xhdGVkIHdvcmxk
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4NDMK
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxl
cik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorCiAyMDExLTA1LTA1ICBBbmR5IEVzdGVzICA8YWVz
dGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAKaW5kZXggZWU4ZDVhYzcxYjhlZmUzZjRkOGNmM2M2ZjkzM2U2ZTA3NzA1ZWJmOC4uNjc5
NDkwOWE1M2QzNzk0OGM5Y2NiMDIwYTFhMWNlOTk1YzhkYWE5NCAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAt
ODIsNiArODIsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIo
VGVzdFNoZWxsKiBzaGVsbCkKICAgICAvLyBuYW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwgYmUg
ZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFTY3JpcHQoKSAoZGVmaW5lZAogICAgIC8vIGJ5IENw
cEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gTGF5b3V0VGVzdENvbnRyb2xsZXIpLgogICAgIGJp
bmRNZXRob2QoImFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWciLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcpOworICAgIGJpbmRNZXRob2QoImFkZElzb2xh
dGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKICAgICBiaW5k
TWV0aG9kKCJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwogICAgIGJpbmRNZXRob2QoImFk
ZFVzZXJTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOwogICAg
IGJpbmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjph
ZGRVc2VyU3R5bGVTaGVldCk7CkBAIC0xNDQ0LDYgKzE0NDUsMjIgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJn
dW1lbnRMaXMKICAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKIH0KIAordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkSXNvbGF0ZWRXb3JsZE9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNb
M10uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+
Zm9jdXNlZEZyYW1lKCktPmFkZElzb2xhdGVkV29ybGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSgKKyAgICAgICAgYXJndW1lbnRzWzBdLnRvSW50MzIoKSwKKyAgICAgICAgMSwgLy8gZXh0ZW5z
aW9uIGdyb3VwCisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAor
ICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKKyAgICAgICAgYXJn
dW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IDQ0
YWMyY2RiOTgwMDE0OGFhMzYxMzk0ZTQ4ODZjN2VmOThkOTg2ZmEuLmFlYTlhNzIyNzBmYTdmOTA2
ZjE0MDhlZmIyMDc3MjA3N2NhYWZmOGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMjg1LDYgKzI4NSw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvd3MgbGF5b3V0IHRlc3RzIHRvIG1hbmFnZSBvcmlnaW5zJyB3aGl0
ZWxpc3RpbmcuCiAgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBhZGRJc29sYXRlZFdvcmxkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgLy8gQ2xlYXJzIGFsbCBhcHBs
aWNhdGlvbiBjYWNoZXMuCiAgICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94857</attachid>
            <date>2011-05-25 14:23:36 -0700</date>
            <delta_ts>2011-05-26 10:16:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59843-20110525142335.patch</filename>
            <type>text/plain</type>
            <size>37761</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODcyNDMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxM2E3YWIwMzc5YTcyZWJkZjgxYzJj
YjlkYzkwYTE5OGE4MTYzZGFiLi4yNzk2MDBiYzg0MWQ5NzI2MzNjZjVjZDljOWNjYTdjN2U2MTM3
YjQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNv
bGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTg0MworICAgICAgICAKKyAgICAgICAgQWRkIHRlc3QgZm9yIGRvaW5nIGEgY3Jvc3Mt
b3JpZ2luIFhIUiBpbiBhbiBpc29sYXRlZCB3b3JsZCB2aWEgCisgICAgICAgIHNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbiBhbmQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkuCisK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2lu
LXhoci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
aXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLXho
ci50eHQ6IEFkZGVkLgorCiAyMDExLTA1LTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXho
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvY3Jvc3Mtb3JpZ2luLXhoci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdkZjA1YmRj
ZGY4ZGQxMjVlM2E2ODAyY2I3MzdhNzg4ODkyZTZmNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhy
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTog
WE1MSHR0cFJlcXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5
L2lzb2xhdGVkV29ybGQvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi14aHIudHh0LiBPcmlnaW4gaHR0
cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93
LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3Qg
bG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9yZXNvdXJj
ZXMvY3Jvc3Mtb3JpZ2luLXhoci50eHQuIE9yaWdpbiBodHRwOi8vMTI3LjAuMC4xOjgwMDAgaXMg
bm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luLgorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9zcy1vcmlnaW4teGhyLnR4
dC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1PcmlnaW4uCitUZXN0cyB0aGF0IGlzb2xhdGVkIHdvcmxkcyBjYW4gaGF2
ZSBYSFJzIHJ1biBpbiBhIGRpZmZlcmVudCBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitYSFIgZnJvbSBtYWluIHdvcmxkCitYSFIgY29tcGxldGVkIHdpdGggc3RhdHVz
IDAKK1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggdW5jaGFuZ2VkIHNlY3VyaXR5IG9yaWdp
bgorWEhSIGNvbXBsZXRlZCB3aXRoIHN0YXR1cyAwCitYSFIgZnJvbSBpc29sYXRlZCB3b3JsZCB3
aXRoIHNhbWUgc2VjdXJpdHkgb3JpZ2luIGFzIFhIUiB0YXJnZXQKK1hIUiBjb21wbGV0ZWQgd2l0
aCBzdGF0dXMgMjAwCitYSFIgZnJvbSBpc29sYXRlZCB3b3JsZCB3aXRoIHNlY3VyaXR5IG9yaWdp
biB0aGF0IGlzIHdoaXRlbGlzdGVkIGZvciBYSFIgdGFyZ2V0CitYSFIgY29tcGxldGVkIHdpdGgg
c3RhdHVzIDIwMAorWEhSIGZyb20gbWFpbiB3b3JsZCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIGlz
b2xhdGVkIHdvcmxkIG9yaWdpbiBvciB3aGl0ZWxpc3QKK1hIUiBjb21wbGV0ZWQgd2l0aCBzdGF0
dXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMjgyZjY5
NWIwZWU2ZmZjZGI3ZjZjM2JlMDc5ZTY3MmNhMWFhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXho
ci5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoYXQg
aXNvbGF0ZWQgd29ybGRzIGNhbiBoYXZlIFhIUnMgcnVuIGluIGEgZGlmZmVyZW50IG9yaWdpbi4n
KTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK3ZhciB0ZXN0cyA9IFsKKyAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIG1haW4gd29ybGQnKTsKKyAgICAgICAgeGhy
KCk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIGlz
b2xhdGVkIHdvcmxkIHdpdGggdW5jaGFuZ2VkIHNlY3VyaXR5IG9yaWdpbicpOworICAgICAgICBy
dW5UZXN0SW5Xb3JsZCgxLCAneGhyJyk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsKKyAgICAg
ICAgZGVidWcoJ1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggc2FtZSBzZWN1cml0eSBvcmln
aW4gYXMgWEhSIHRhcmdldCcpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oMSwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMCcpOworICAg
ICAgICBydW5UZXN0SW5Xb3JsZCgxLCAneGhyJyk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsK
KyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggc2VjdXJpdHkgb3Jp
Z2luIHRoYXQgaXMgd2hpdGVsaXN0ZWQgZm9yIFhIUiB0YXJnZXQnKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKDIsICdjaHJvbWUt
ZXh0ZW5zaW9uOi8vMTIzJyk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmFkZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KCdjaHJvbWUtZXh0ZW5zaW9uOi8vMTIzJywgJ2h0dHAnLCAn
bG9jYWxob3N0JywgZmFsc2UpOworICAgICAgICBydW5UZXN0SW5Xb3JsZCgyLCAneGhyJyk7Cisg
ICAgfSwKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIG1haW4gd29y
bGQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBpc29sYXRlZCB3b3JsZCBvcmlnaW4gb3Igd2hpdGVs
aXN0Jyk7CisgICAgICAgIHhocigpOworICAgIH0KK107Cit2YXIgY3VycmVudFRlc3QgPSAwOwor
CisvLyBUaGlzIHRlc3QgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCBsYXlvdXRUZXN0Q29udHJvbGxl
ci4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcigKKyAgICAgICAgJ21lc3NhZ2UnLAorICAgICAgICBmdW5jdGlvbihldmVudCkg
eworICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpOworICAg
ICAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICd0
ZXN0LWRvbmUnOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVzdCsrOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFRlc3QgPT0gdGVzdHMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW2N1cnJlbnRUZXN0XSgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdkZWJ1Zyc6CisgICAgICAgICAg
ICAgICAgICAgIGRlYnVnKG1lc3NhZ2UubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRlc3RG
YWlsZWQoJ1Vua25vd24gbWVzc2FnZTogJyArIGV2ZW50LmRhdGEpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZmFsc2UpOwor
CisgICAgdGVzdHNbMF0oKTsKK30gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgnVGVzdCBkZXBlbmRz
IG9uIExheW91dFRlc3RDb250cm9sbGVyIGFuZCBtdXN0IGJlIHJ1biBieSBEUlQnKTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdEluV29ybGQod29ybGRJZCwgZnVuY05hbWUpCit7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCisgICAgICAgIHdv
cmxkSWQsIFN0cmluZyhldmFsKGZ1bmNOYW1lKSkgKyAiXG4iICsgZnVuY05hbWUgKyAiKCk7Iik7
Cit9CisKK2Z1bmN0aW9uIHhocigpCit7CisgICAgZnVuY3Rpb24gZGVidWcobWVzc2FnZSkgewor
ICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoeworICAgICAgICAgICAg
ICAgICd0eXBlJzogJ2RlYnVnJywKKyAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IG1lc3NhZ2UK
KyAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgJyonKTsKKyAgICB9CisKKyAgICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oJ0dFVCcsICdodHRwOi8vbG9j
YWxob3N0OjgwMDAvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2lu
LXhoci50eHQnLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGRlYnVnKCdYSFIgY29tcGxldGVkIHdpdGggc3RhdHVzICcgKyB4aHIuc3Rh
dHVzKTsKKyAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsndHlwZSc6
ICd0ZXN0LWRvbmUnfSksICcqJyk7CisgICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsKK30KKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2lzb2xhdGVkV29ybGQvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi14aHIudHh0IGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9zcy1vcmln
aW4teGhyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWU5YzkyMTJjZjJjNWRkOWVlNjQzODBjY2NmNDNmODE4
NGUxMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9zcy1vcmlnaW4teGhyLnR4dApAQCAtMCwwICsx
IEBACitUZXN0IGZpbGUgZm9yIGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCB0ZXN0cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmMDcwMjg2Nzk4Yjg5NjU5Y2E1MzM0ZDczMjY1YmNkODY2YzA3ZmUzLi4xODkw
Y2IwOGQ1N2I1MmMxYzNiZTA1YTNkNGEyNTJhZDdhYmU3MjcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTYgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vw
cG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNvbGF0ZWQgd29ybGRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0MworICAgICAg
ICAKKyAgICAgICAgQWxsb3dzIGlzb2xhdGVkIHdvcmxkcyB0byBiZSBhc3NvY2lhdGVkIHdpdGgg
YSBkaWZmZXJlbnQgU2VjdXJpdHlPcmlnaW4KKyAgICAgICAgKGV4cG9zZWQgYXMgYSBzZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gZnVuY3Rpb24gaW4KKyAgICAgICAgU2NyaXB0Q29udHJv
bGxlcikuCisgICAgICAgIAorICAgICAgICBUaGUgWE1MSHR0cFJlcXVlc3QgY29uc3RydWN0b3Ig
Y2FuIHRoZW4gY2hlY2sgdGhhdCBpdCdzIGJlaW5nCisgICAgICAgIGluc3RhbnRpYXRlZCBpbiBh
biBpc29sYXRlZCB3b3JsZCBhbmQgdXNlIGl0cyBzZWN1cml0eSBvcmlnaW4uCisgICAgICAgIFhN
TEh0dHBSZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyIGFuZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIgaGFkIHRvIGJlCisgICAgICAgIGNoYW5nZWQgdG8gdXNlIHRoZSBjb3BpZWQgU2VjdXJpdHlP
cmlnaW4gaW5zdGVhZCBvZiBhbHdheXMgZ3JhYmJpbmcgdGhlCisgICAgICAgIERvY3VtZW50J3Mu
CisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3Nz
LW9yaWdpbi14aHIuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlc2V0SXNvbGF0
ZWRXb3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NP
cmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnByZWZsaWdodFN1Y2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRSZWRpcmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnNlY3VyaXR5T3Jp
Z2luKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAg
ICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcik6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0
Lmg6CisKIDIwMTEtMDUtMjQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBiNWM4OWQ4Y2RiMjI5MjgxMjcxZDU0
ZjUzNDkzMDFkNjAxMDZiMGU2Li5iOTY3N2YxNzY1ZjJkNmE4ZWNkOGY2NDY1ODI1MmE0YWM3NDY4
NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTYwogICAgIG1f
cHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lv
bkdyb3VwKTsKIH0KIAordm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luKQoreworICAgIG1fcHJveHktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bih3b3JsZElELCBzZWN1cml0eU9yaWdpbik7Cit9CisKIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZp
bGUgaW4gdGhlIGVudmlyb25tZW50IG9mIHRoaXMgcHJveHkuCiBTY3JpcHRWYWx1ZSBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4
IDZiOTc2NWM5ZjQ4NzczZDUwYmU2OGZkODI5YTA5MDQzY2YyZTFiYjAuLjJhOTJjYmE4NjU1Zjdk
ZmUzNzFiYTg3NmI5MmQzNGY3OGJkMzZmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTk5LDYgKzk5LDggQEAgcHVibGljOgogICAgIC8v
IEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCiAgICAgdm9pZCBldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCisgICAgdm9pZCBzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSWQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
KTsKKwogICAgIC8vIE1hc3F1ZXJhZGUgJ3RoaXMnIGFzIHRoZSB3aW5kb3dTaGVsbC4KICAgICAv
LyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYnV0IHByb3ZpZGVzIHJlYXNvbmFibGUgY29tcGF0
aWJpbGl0eQogICAgIC8vIHdpdGggd2hhdCBKU0MgZG9lcyBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCmluZGV4IDdiMjFhMzZk
ZTk4NjU4YWQxNjY3NzYwNDc0MzM5ZGRiYjE3M2ZhYzQuLjYyMDE1ZDc4MzAyOTE0OWNjYjc3NDUx
OTFkM2QzYzE0OGQyZGNiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OElzb2xhdGVkQ29udGV4dC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJIYXNoTWFwLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAKQEAgLTg3LDQgKzg3LDkgQEAgVjhJ
c29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29udGV4dCgpCiAgICAgbV9jb250ZXh0LT5kaXNw
b3NlSGFuZGxlKCk7CiB9CiAKK3ZvaWQgVjhJc29sYXRlZENvbnRleHQ6OnNldFNlY3VyaXR5T3Jp
Z2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIG1f
c2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgK
aW5kZXggNWNkOWM2NTZmNWExNTU4MmNmMGNiYzlkZjJmODkzZDU0Y2Q2YmFiYy4uNjIyMWRjM2Qw
OTQ1Y2Y1YmFmODZmMGQyN2UyZjExMTJjZDYzYTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBWOFByb3h5Owog
CiAvLyBWOElzb2xhdGVkQ29udGV4dApAQCAtNTgsNyArNTksNyBAQCBjbGFzcyBWOElzb2xhdGVk
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8g
ZGVzdHJveSBpdCwgY2FsbCBkZXN0cm95KCkuCiAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUg
aXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2QuCi0gICAgVjhJ
c29sYXRlZENvbnRleHQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisgICAg
VjhJc29sYXRlZENvbnRleHQoVjhQcm94eSosIGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgflY4
SXNvbGF0ZWRDb250ZXh0KCk7CiAKICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUgaXNv
bGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQpAQCAtOTMsNiArOTQsOSBA
QCBwdWJsaWM6CiAKICAgICBJc29sYXRlZFdvcmxkKiB3b3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
d29ybGQuZ2V0KCk7IH0KIAorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNlY3Vy
aXR5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7CkBAIC0xMDgsNiArMTEyLDggQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CiAK
ICAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbV93b3JsZDsKKworICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggZmE2OTE5NjgwODUxNDI2
NjhmM2I5YTMzOTNlMmQ1YzM0N2E5ZjlmZS4uMzllMDI1NDkxMGIyYjU2M2VhNDY4NDNjNjU2OTMx
ZDcxMTI1ODM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUJy
aWRnZS5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtMjcyLDYgKzI3MywxMCBAQCB2b2lk
IFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKKyAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRl
ciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5kKCkpCisgICAgICAgICAgICBp
c29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vj
b25kKTsKICAgICB9IGVsc2UgewogICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29s
YXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXApOwogICAgICAgICBpZiAoaXNvbGF0ZWRD
b250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yODksNiArMjk0LDE2IEBAIHZvaWQg
VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlCiAgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0K
IAordm9pZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxk
SUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCit7Cisg
ICAgQVNTRVJUKHdvcmxkSUQpOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbkluOworICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2lucy5zZXQod29ybGRJRCwgc2VjdXJpdHlPcmlnaW4pOworICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CisgICAg
aWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKKyAgICAgICAgaXRlci0+c2Vjb25k
LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7Cit9CisKIGJvb2wgVjhQcm94eTo6
c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0
YXJnZXRDb250ZXh0KQogewogICAgIC8vIFNldHVwIGNvbnRleHQgaWQgZm9yIEpTIGRlYnVnZ2Vy
LgpAQCAtNjIxLDYgKzYzNiw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygp
CiAgICAgICAgIGl0ZXItPnNlY29uZC0+ZGVzdHJveSgpOwogICAgIH0KICAgICBtX2lzb2xhdGVk
V29ybGRzLmNsZWFyKCk7CisgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFy
KCk7CiB9CiAKIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JDbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgKaW5kZXggYzM0NGEyYzI4NmYwZDZjMjA1MGVjYTA0ZmY1ZTUyNWE4OTk2
YjQxYy4uMzU0ODAwZGZmZTAzYWZhZWUwYjNjZjhiMWZhYjI3MTVkOWRlZjhlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtNTksNiArNTksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CisgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIFY4SXNvbGF0ZWRDb250ZXh0
OwogICAgIGNsYXNzIFdvcmxkQ29udGV4dEhhbmRsZTsKQEAgLTE1OSw2ICsxNjAsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93
biB3cmFwcGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVj
dG9ycy4KICAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwg
Y29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3Jv
dXApOworICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oaW50IHdvcmxkSWQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3h5IGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBzY3Jp
cHQgaW4gVjguCiAgICAgICAgIGJvb2wgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7CkBAIC0zMzks
NiArMzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyAgICAgICAgSXNvbGF0
ZWRDb250ZXh0IGRpcmVjdGx5LgogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWOElzb2xh
dGVkQ29udGV4dCo+IElzb2xhdGVkV29ybGRNYXA7CiAgICAgICAgIElzb2xhdGVkV29ybGRNYXAg
bV9pc29sYXRlZFdvcmxkczsKKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQs
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA7
CisgICAgICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcCBtX2lzb2xhdGVkV29ybGRT
ZWN1cml0eU9yaWdpbnM7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAppbmRleCA2YjViNjRmMjQ3NjdkZGQ4Zjg4MTc5
Mjg4MzdlMTIwMDBmNjZiOTUxLi5iYTNkMTAzYzZhOTIyZjU4MGM5Yzg5NTgyZWZhMDZiZDAwYmRm
ZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApAQCAtMzIsNyArMzIsMTAg
QEAKICNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTUyLDcgKzU1LDExIEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFhNTEh0dHBSZXF1ZXN0Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJYTUxIdHRwUmVxdWVzdCBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQgY29udGV4dCBp
cyBub3QgYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwotICAgIFJlZlB0cjxY
TUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQpOworCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKKyAg
ICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250
ZXh0OjpnZXRFbnRlcmVkKCkpCisgICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNvbGF0ZWRDb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpOworICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0
cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNlY3VyaXR5T3JpZ2lu
KTsKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8s
IHhtbEh0dHBSZXF1ZXN0LmdldCgpKTsKIAogICAgIC8vIEFkZCBvYmplY3QgdG8gdGhlIHdyYXBw
ZXIgbWFwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmNwcAppbmRleCAyZjQ4ZmJhZjljNzkzMjk3ZmMyNDJiZjAxOTEyZWZkOGI2MmJkN2Jh
Li4yZTRhNDFiODM0YzlhMTE4ZjE2YjQzMmQwZGI1ZjY2NGE3M2Y1ZDAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtNjgs
NyArNjgsNyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcihEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibAogICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9vcHRpb25hbE91dGdvaW5n
UmVmZXJyZXIob3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKQotICAgICwgbV9zYW1lT3JpZ2luUmVx
dWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgp
KSkKKyAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dChyZXF1ZXN0LnVybCgpKSkKICAgICAsIG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2Fk
QXN5bmNocm9ub3VzbHkpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTk2LDcgKzk2LDcg
QEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9j
dW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmwKICAgICBlbHNlIHsKICAgICAgICAgbV9hY3R1YWxS
ZXF1ZXN0ID0gY3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbGVhc2UoKTsKIAotICAgICAgICBpZiAoQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51
cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1l
dGhvZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgIGlm
IChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxp
Z2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCks
IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRob2Qo
KSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAgICAgcHJl
ZmxpZ2h0U3VjY2VzcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtYWtlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCgqbV9hY3R1YWxSZXF1ZXN0KTsKQEAgLTExOSw3
ICsxMTksNyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZVNpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZQogCiB2b2lkIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlc291cmNlUmVxdWVzdCBwcmVm
bGlnaHRSZXF1ZXN0ID0gY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVlc3QocmVxdWVz
dCwgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlh
bHMpOworICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0ID0gY3JlYXRlQWNjZXNz
Q29udHJvbFByZWZsaWdodFJlcXVlc3QocmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMpOwogICAgIGxvYWRSZXF1ZXN0KHByZWZsaWdodFJlcXVlc3Qs
IERvU2VjdXJpdHlDaGVjayk7CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbgogCiAgICAgU3RyaW5nIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uOwog
ICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKLSAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250
cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2RvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKKyAg
ICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5h
bGxvd0NyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNj
cmlwdGlvbikpIHsKICAgICAgICAgICAgIHByZWZsaWdodEZhaWx1cmUocmVzcG9uc2UudXJsKCks
IGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTg5LDEwICsxODksMTAgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb24KICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIENyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFwcGVuZEVudHJ5KG1fZG9jdW1lbnQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIHByZWZsaWdodFJl
c3VsdC5yZWxlYXNlKCkpOworICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
OjpzaGFyZWQoKS5hcHBlbmRFbnRyeShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2Fj
dHVhbFJlcXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgbV9vcHRpb25zLmNyb3Nz
T3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJv
ckRlc2NyaXB0aW9uKSkgeworICAgICAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hl
Y2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigp
LCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKICAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAs
IHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI5Myw3ICsyOTMs
NyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0U3VjY2VzcygpCiAg
ICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKICAgICBhY3R1YWxSZXF1
ZXN0LnN3YXAobV9hY3R1YWxSZXF1ZXN0KTsKIAotICAgIGFjdHVhbFJlcXVlc3QtPnNldEhUVFBP
cmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgYWN0
dWFsUmVxdWVzdC0+c2V0SFRUUE9yaWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsK
IAogICAgIC8vIEl0IHNob3VsZCBiZSBvayB0byBza2lwIHRoZSBzZWN1cml0eSBjaGVjayBzaW5j
ZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0IHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KICAgICBsb2Fk
UmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgU2tpcFNlY3VyaXR5Q2hlY2spOwpAQCAtMzY4LDcgKzM2
OCwxMiBAQCBib29sIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6aXNBbGxvd2VkUmVkaXJlY3Qo
Y29uc3QgS1VSTCYgdXJsKQogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBhY2Nl
c3MgY29udHJvbCBmb3IgZWFjaCByZWRpcmVjdC4gVGhpcyB3aWxsIHJlcXVpcmUgc29tZSByZWZh
Y3RvcmluZyB0aG91Z2gsIGJlY2F1c2UgdGhlIGNvZGUKICAgICAvLyB0aGF0IHByb2Nlc3NlcyBy
ZWRpcmVjdHMgZG9lc24ndCBrbm93IGFib3V0IGFjY2VzcyBjb250cm9sIGFuZCBleHBlY3RzIGEg
c3luY2hyb25vdXMgYW5zd2VyIGZyb20gaXRzIGNsaWVudCBhYm91dCB3aGV0aGVyCiAgICAgLy8g
YSByZWRpcmVjdCBzaG91bGQgcHJvY2VlZC4KLSAgICByZXR1cm4gbV9zYW1lT3JpZ2luUmVxdWVz
dCAmJiBtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAg
cmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3QgJiYgc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dCh1cmwpOworfQorCitTZWN1cml0eU9yaWdpbiogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpz
ZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3B0aW9ucy5zZWN1cml0eU9y
aWdpbiA/IG1fb3B0aW9ucy5zZWN1cml0eU9yaWdpbi5nZXQoKSA6IG1fZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAppbmRleCA1MGY2MGNhMGM0
ZWMwM2ZjYWY5YmVjZTIzMWMxZDcxMjk1OTBiZDYwLi41OTQ5NjY3MjFlZTE3MTdjZmI4YTI0ZGE0
YzMyNmNjMTE0NTViOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKKyAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50OwogCiAgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFi
bGVMb2FkZXIsIHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKQEAgLTk0LDYgKzk1
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGxvYWRSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kpOwogICAgICAgICBib29sIGlz
QWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtVUkwmKTsKIAorICAgICAgICBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2Fk
ZXI+IG1fbG9hZGVyOwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsK
ICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVh
ZGFibGVMb2FkZXIuaAppbmRleCBiMDFmM2VlN2QyZTQzOWY5NTRlMjZiYTlhZDdlNzBjZDNhYTVj
NWVjLi5jMDJiNGE1NDQ3ZDFlZGE5YjdjNDk5NWJhNzBmOTFkMjgxNDM2MjFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKQEAgLTMxLDggKzMxLDEwIEBACiAjaWZu
ZGVmIFRocmVhZGFibGVMb2FkZXJfaAogI2RlZmluZSBUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Miw2ICs2NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgIC8v
IElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4K
ICAgICAgICAgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eTsKICAgICAgICAgYm9vbCBzaG91bGRCdWZmZXJEYXRhOworICAgICAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOwogICAgIH07CiAKICAgICAvLyBVc2VmdWwgZm9yIGRv
aW5nIGxvYWRlciBvcGVyYXRpb25zIGZyb20gYW55IHRocmVhZCAobm90IHRocmVhZHNhZmUsIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNzNiYjZlZTI5YjFkZTBhMDIz
ZjFlYjE2YzU3M2EzZDUzMjM1NzAyYi4uZDczZDExYzJlYzYwZWFiZmI3MDNlOWU5NmFiNTA4Y2Nl
YzUyMjAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xNzIsNyAr
MTcyLDEyIEBAIHN0YXRpYyBjb25zdCBYTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEqIGluaXRpYWxp
emVYTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEoKQogICAgIHJldHVybiBkdW1teTsKIH0KIAotWE1M
SHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCitQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHNlY3VyaXR5T3JpZ2luKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgWE1MSHR0cFJlcXVl
c3QoY29udGV4dCwgc2VjdXJpdHlPcmlnaW4pKTsKK30KKworWE1MSHR0cFJlcXVlc3Q6OlhNTEh0
dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRl
eHQsIHRoaXMpCiAgICAgLCBtX2FzeW5jKHRydWUpCiAgICAgLCBtX2luY2x1ZGVDcmVkZW50aWFs
cyhmYWxzZSkKQEAgLTE4Nyw2ICsxOTIsNyBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICAsIG1fZXhjZXB0aW9uQ29k
ZSgwKQogICAgICwgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUodGhpcykKICAgICAsIG1fcmVzcG9u
c2VUeXBlQ29kZShSZXNwb25zZVR5cGVEZWZhdWx0KQorICAgICwgbV9zZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbikKIHsKICAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRh
KCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjA3LDYgKzIxMywxMSBAQCBEb2N1bWVudCogWE1MSHR0
cFJlcXVlc3Q6OmRvY3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCitTZWN1cml0eU9yaWdpbiogWE1M
SHR0cFJlcXVlc3Q6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWN1
cml0eU9yaWdpbiA/IG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkgOiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCk7Cit9CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCiBib29sIFhNTEh0dHBSZXF1ZXN0Ojp1c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSgpIGNvbnN0CiB7CkBAIC0yNDksNyArMjYwLDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZVhNTChFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgICAgIG1fcmVz
cG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIG1fdXJsKTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldENv
bnRlbnQobV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwotICAg
ICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0U2VjdXJpdHlPcmlnaW4oZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbigpKTsKICAgICAgICAgICAgIGlmICghbV9yZXNwb25zZVhNTC0+
d2VsbEZvcm1lZCgpKQogICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSAwOwogICAgICAg
ICB9CkBAIC02MTcsNyArNjI4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVz
dChFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc2FtZU9yaWdp
blJlcXVlc3QgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QobV91cmwpOworICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBzZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KG1fdXJsKTsKIAogICAgIC8vIFdlIGFsc28gcmVtZW1iZXIgd2hldGhl
ciB1cGxvYWQgZXZlbnRzIHNob3VsZCBiZSBhbGxvd2VkIGZvciB0aGlzIHJlcXVlc3QgaW4gY2Fz
ZSB0aGUgdXBsb2FkIGxpc3RlbmVycyBhcmUKICAgICAvLyBhZGRlZCBhZnRlciB0aGUgcmVxdWVz
dCBpcyBzdGFydGVkLgpAQCAtNjQxLDYgKzY1Miw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNy
ZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgb3B0aW9ucy5mb3JjZVByZWZsaWdo
dCA9IHVwbG9hZEV2ZW50czsKICAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBtX3NhbWVP
cmlnaW5SZXF1ZXN0IHx8IG1faW5jbHVkZUNyZWRlbnRpYWxzOwogICAgIG9wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNjZXNzQ29udHJvbDsKKyAgICBvcHRpb25zLnNlY3Vy
aXR5T3JpZ2luID0gc2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIG1fZXhjZXB0aW9uQ29kZSA9IDA7
CiAgICAgbV9lcnJvciA9IGZhbHNlOwpAQCAtODIzLDcgKzgzNSw3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhCiAgICAgfQogCiAgICAgLy8gQSBwcml2aWxlZ2VkIHNjcmlwdCAoZS5nLiBhIERh
c2hib2FyZCB3aWRnZXQpIGNhbiBzZXQgYW55IGhlYWRlcnMuCi0gICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygp
ICYmICFpc1NhZmVSZXF1ZXN0SGVhZGVyKG5hbWUpKSB7CisgICAgaWYgKCFzZWN1cml0eU9yaWdp
bigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNTYWZlUmVxdWVzdEhlYWRlcihuYW1l
KSkgewogICAgICAgICByZXBvcnRVbnNhZmVVc2FnZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
ICJSZWZ1c2VkIHRvIHNldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTg2Niw3ICs4NzgsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVl
c3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyhFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAg
ICAgLy8gICAgIDIpIFRoZXJlJ3Mgbm8ga25vd24gaGFybSBpbiBoaWRpbmcgU2V0LUNvb2tpZSBo
ZWFkZXIgZmllbGRzIGVudGlyZWx5OyB3ZSBkb24ndAogICAgICAgICAvLyAgICAgICAga25vdyBh
bnkgd2lkZWx5IHVzZWQgdGVjaG5pcXVlIHRoYXQgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZW0uCiAg
ICAgICAgIC8vICAgICAzKSBGaXJlZm94IGhhcyBpbXBsZW1lbnRlZCB0aGlzIHBvbGljeS4KLSAg
ICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCisg
ICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdp
bigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNw
b25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpKQpAQCAtODkxLDcgKzkwMyw3IEBAIFN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlCiAgICAgfQogCiAgICAgLy8gU2VlIGNvbW1lbnQgaW4gZ2V0QWxs
UmVzcG9uc2VIZWFkZXJzIGFib3ZlLgotICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihuYW1lKSAm
JiAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9j
YWxSZXNvdXJjZXMoKSkgeworICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihuYW1lKSAmJiAhc2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpIHsKICAgICAgICAgcmVwb3J0
VW5zYWZlVXNhZ2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiUmVmdXNlZCB0byBnZXQgdW5z
YWZlIGhlYWRlciBcIiIgKyBuYW1lICsgIlwiIik7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCmluZGV4IGRhNzc3ZTc3OGM4ODVl
NGQ2OTQzNzFiMDY4ZjY3ZTM3ZmVlMTZiODIuLmIwN2NhMmI0MDQ1ZDAxNDVjMTdmNWQ5YTAxZjcx
YTNlN2UyZTI5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCkBAIC0zOSw2ICsz
OSw3IEBAIGNsYXNzIEJsb2I7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERPTUZvcm1EYXRhOwog
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xhc3MgVGhyZWFkYWJsZUxv
YWRlcjsKQEAgLTQ2LDcgKzQ3LDcgQEAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlcjsKIGNsYXNzIFhN
TEh0dHBSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50ZWQ8WE1MSHR0cFJlcXVlc3Q+LCBwdWJsaWMg
RXZlbnRUYXJnZXQsIHByaXZhdGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgWE1MSHR0cFJlcXVlc3QoY29u
dGV4dCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gPSAwKTsK
ICAgICB+WE1MSHR0cFJlcXVlc3QoKTsKIAogICAgIC8vIFRoZXNlIGV4YWN0IG51bWVyaWMgdmFs
dWVzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRoZW0uCkBAIC0xMzQsNyArMTM1
LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8WE1MSHR0cFJlcXVlc3Q+OjpkZXJl
ZjsKIAogcHJpdmF0ZToKLSAgICBYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CisgICAgWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYo
KTsgfQpAQCAtMTQyLDYgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
KCkgY29uc3Q7CisgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAK
ICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VzRGFzaGJvYXJkQmFj
a3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpIGNvbnN0OwpAQCAtMjI2LDYgKzIyOCw4IEBAIHByaXZh
dGU6CiAKICAgICAvLyBBbiBlbnVtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsbG93ZWQgc3RyaW5n
IHZhbHVlcyBmb3IgdGhlIHJlc3BvbnNlVHlwZSBhdHRyaWJ1dGUuCiAgICAgUmVzcG9uc2VUeXBl
Q29kZSBtX3Jlc3BvbnNlVHlwZUNvZGU7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1f
c2VjdXJpdHlPcmlnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGMzNGRlMTlmOTk3ZDk5NjVkMDU3ZjU4OTUzNzQ3ZmY0ZWVkNjA5
N2QuLmUzZDQ3MTFhMzJlZTI1OGU4Mzg2NzRkNzI0MWQwZTVhZjBiM2Y5OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBh
cml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3Qg
aW4gaXNvbGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01OTg0MworICAgICAgICAKKyAgICAgICAgRXhwb3NlIHNldElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbiBpbiB0aGUgV2ViRnJhbWUgQVBJLgorCisgICAgICAgICogcHVibGlj
L1dlYkZyYW1lLmg6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAg
ICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisKIDIwMTEtMDUtMjQgIEpheSBDaXZlbGxpICA8
amNpdmVsbGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCA0ZTQ1ZDA2ZDI1
NTlkOTVlMDJjNTc1MWU2MjQ5Y2M4NDhhYjU3NWJmLi44NDQxMjU1NTNiYTY1YzRlZDdmM2ZiNTU1
MTczYmEwMzViNjY0NTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
LmgKQEAgLTI1Myw2ICsyNTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGludCB3b3JsZElkLCBjb25z
dCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXMsIHVuc2lnbmVkIG51bVNvdXJjZXMsCiAgICAgICAg
IGludCBleHRlbnNpb25Hcm91cCkgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJZCwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4m
KSA9IDA7CisKICAgICAvLyBMb2dzIHRvIHRoZSBjb25zb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGZyYW1lLgogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNv
bnNvbGVNZXNzYWdlJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAppbmRleCA0ZWIzYzc4YzA2YzJmMjgyNTNmNWQ0NDVmNmY3MmM1MTc5Njc1OWI1
Li5mYjI4ZTkyZDViMTIxNzg5ZmFkM2RmMjRjZGRkY2QxOTc5OTcyYWIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc4OSw2ICs3ODksMTEgQEAg
dm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCiAgICAgbV9m
cmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSWQsIHNvdXJjZXMs
IGV4dGVuc2lvbkdyb3VwKTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6OnNldElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJZCwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIHNl
Y3VyaXR5T3JpZ2luKQoreworICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5zZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4od29ybGRJZCwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworfQorCiB2b2lk
IFdlYkZyYW1lSW1wbDo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2Fn
ZSYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoZnJhbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDQyMmNkYTg4YThlMGE5NDJiNzUxNWY0NDM2Yzll
MzljMzY1OTQ3YjEuLmIzMjc4NGYyM2Y3ZGE3YTk4MTY0NzUzYmE0N2Q0ZjM2Y2JiNjVlNmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xMDQsNiArMTA0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKAogICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2Vz
LCB1bnNpZ25lZCBudW1Tb3VyY2VzLAogICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSWQs
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJik7CiAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGUoY29uc3QgV2ViQ29uc29sZU1lc3NhZ2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKICNpZiBXRUJLSVRfVVNJTkdfVjgKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MTFkMWUwMTM2Njc0NzNjMGI0ZjM1YTAx
MmUwYWVlYmY4NmUyYmNmLi4zYTAwZjIxNThlMjhmODA3M2U1M2M2ZTA2ZGJjYmY2OTU5NjAxMTMz
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3VwcG9ydCBjcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNvbGF0ZWQgd29ybGRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0MworICAg
ICAgICAKKyAgICAgICAgRXhwb3NlIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiBpbiBM
YXlvdXRUZXN0Q29udHJvbGxlci4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorCiAyMDExLTA1LTI0ICBSb2JlcnQg
SG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtl
IE5pd2EuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMzNhNTU4MGJjN2ExODM3YTVjZjIzOWZkNGVjODcyMTBi
YzNlOTVhNC4uZDRhYmJjN2RmNzdiZTQwNTE0NmRiYTk3NDBhYWE3ZWFiZDAzYjc2NyAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcApAQCAtMTA4LDYgKzEwOCw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRU
ZXN0Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQogICAgIGJpbmRNZXRob2QoImVuc3VyZVNo
YWRvd1Jvb3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QpOwogICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwogICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCk7CisgICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW4pOwogICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZCk7CiAgICAgYmluZE1ldGhvZCgiZ3JhbnREZXNrdG9wTm90aWZp
Y2F0aW9uUGVybWlzc2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90
aWZpY2F0aW9uUGVybWlzc2lvbik7CiAgICAgYmluZE1ldGhvZCgiaGFzU3BlbGxpbmdNYXJrZXIi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKTsKQEAgLTEyODcsNiAr
MTI4OCwxOCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0
cmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3Vz
ZWRGcmFtZSgpLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oCisgICAgICAgIGFyZ3Vt
ZW50c1swXS50b0ludDMyKCksCisgICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
U3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKSk7Cit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7
CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkg
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250
cm9sbGVyLmgKaW5kZXggYzRlOTVhNzA2MWI0OGJlY2UxZjNmOTdjOWQ1NWZkODM2Njg2ZGFmNi4u
MjUyZDRmMTExOTk0ZTI2OWUyZjcyODk5ZGJiYTI2Y2Q1OWQzODk2MCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0y
NjYsMTMgKzI2NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nl
c3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZv
aWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKICAgICB2b2lkIHNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAg
dm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKICAgICB2b2lkIHNoYWRvd1Jvb3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogICAgIHZvaWQgZW5zdXJlU2hhZG93Um9vdChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCByZW1vdmVTaGFkb3dSb290KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94997</attachid>
            <date>2011-05-26 10:16:37 -0700</date>
            <delta_ts>2011-05-26 12:53:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-59843-20110526101635.patch</filename>
            <type>text/plain</type>
            <size>41332</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczOTcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZWMyMmU2ZjgwNjFmYjgwYzFhZWJi
YTU1ZWUyMmIwOTU3NTBkZTVmLi5jNmZkNzQ5NGJmMGExMTAwZDdmYmFmMzk5YmFhZWNmOTA3YjAw
YTk0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
KworICAgICAgICBTdXBwb3J0IGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBpbiBpc29sYXRl
ZCB3b3JsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU5ODQzCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGRvaW5nIGEgY3Jvc3Mtb3JpZ2luIFhIUiBp
biBhbiBpc29sYXRlZCB3b3JsZCB2aWEgCisgICAgICAgIHNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbiBhbmQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkuCisKKyAgICAgICAgU2tp
cHBlZCBvbiBKU0MgcG9ydHMuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xh
dGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9yZXNv
dXJjZXMvY3Jvc3Mtb3JpZ2luLXhoci50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBs
YXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIw
MTEtMDUtMjYgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gVGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlL3JlYmFzZWxpbmUuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3Jp
Z2luLXhoci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lz
b2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdk
ZjA1YmRjZGY4ZGQxMjVlM2E2ODAyY2I3MzdhNzg4ODkyZTZmNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy1vcmln
aW4teGhyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTogWE1MSHR0cFJlcXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L2lzb2xhdGVkV29ybGQvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi14aHIudHh0LiBPcmln
aW4gaHR0cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9s
LUFsbG93LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBj
YW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9y
ZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLXhoci50eHQuIE9yaWdpbiBodHRwOi8vMTI3LjAuMC4xOjgw
MDAgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luLgorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9zcy1vcmlnaW4t
eGhyLnR4dC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBieSBB
Y2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCitUZXN0cyB0aGF0IGlzb2xhdGVkIHdvcmxkcyBj
YW4gaGF2ZSBYSFJzIHJ1biBpbiBhIGRpZmZlcmVudCBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitYSFIgZnJvbSBtYWluIHdvcmxkCitYSFIgY29tcGxldGVkIHdpdGgg
c3RhdHVzIDAKK1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggdW5jaGFuZ2VkIHNlY3VyaXR5
IG9yaWdpbgorWEhSIGNvbXBsZXRlZCB3aXRoIHN0YXR1cyAwCitYSFIgZnJvbSBpc29sYXRlZCB3
b3JsZCB3aXRoIHNhbWUgc2VjdXJpdHkgb3JpZ2luIGFzIFhIUiB0YXJnZXQKK1hIUiBjb21wbGV0
ZWQgd2l0aCBzdGF0dXMgMjAwCitYSFIgZnJvbSBpc29sYXRlZCB3b3JsZCB3aXRoIHNlY3VyaXR5
IG9yaWdpbiB0aGF0IGlzIHdoaXRlbGlzdGVkIGZvciBYSFIgdGFyZ2V0CitYSFIgY29tcGxldGVk
IHdpdGggc3RhdHVzIDIwMAorWEhSIGZyb20gbWFpbiB3b3JsZCBpcyBub3QgYWZmZWN0ZWQgYnkg
dGhlIGlzb2xhdGVkIHdvcmxkIG9yaWdpbiBvciB3aGl0ZWxpc3QKK1hIUiBjb21wbGV0ZWQgd2l0
aCBzdGF0dXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFj
MjgyZjY5NWIwZWU2ZmZjZGI3ZjZjM2JlMDc5ZTY3MmNhMWFhZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mtb3Jp
Z2luLXhoci5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3Rz
IHRoYXQgaXNvbGF0ZWQgd29ybGRzIGNhbiBoYXZlIFhIUnMgcnVuIGluIGEgZGlmZmVyZW50IG9y
aWdpbi4nKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK3ZhciB0ZXN0cyA9IFsKKyAgICBm
dW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIG1haW4gd29ybGQnKTsKKyAgICAg
ICAgeGhyKCk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBm
cm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggdW5jaGFuZ2VkIHNlY3VyaXR5IG9yaWdpbicpOworICAg
ICAgICBydW5UZXN0SW5Xb3JsZCgxLCAneGhyJyk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsK
KyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggc2FtZSBzZWN1cml0
eSBvcmlnaW4gYXMgWEhSIHRhcmdldCcpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oMSwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMCcp
OworICAgICAgICBydW5UZXN0SW5Xb3JsZCgxLCAneGhyJyk7CisgICAgfSwKKyAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIGlzb2xhdGVkIHdvcmxkIHdpdGggc2VjdXJp
dHkgb3JpZ2luIHRoYXQgaXMgd2hpdGVsaXN0ZWQgZm9yIFhIUiB0YXJnZXQnKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKDIsICdj
aHJvbWUtZXh0ZW5zaW9uOi8vMTIzJyk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmFk
ZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCdjaHJvbWUtZXh0ZW5zaW9uOi8vMTIzJywgJ2h0
dHAnLCAnbG9jYWxob3N0JywgZmFsc2UpOworICAgICAgICBydW5UZXN0SW5Xb3JsZCgyLCAneGhy
Jyk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ1hIUiBmcm9tIG1h
aW4gd29ybGQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBpc29sYXRlZCB3b3JsZCBvcmlnaW4gb3Ig
d2hpdGVsaXN0Jyk7CisgICAgICAgIHhocigpOworICAgIH0KK107Cit2YXIgY3VycmVudFRlc3Qg
PSAwOworCisvLyBUaGlzIHRlc3QgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCBsYXlvdXRUZXN0Q29u
dHJvbGxlci4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigKKyAgICAgICAgJ21lc3NhZ2UnLAorICAgICAgICBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEp
OworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlICd0ZXN0LWRvbmUnOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVzdCsrOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRlc3QgPT0gdGVzdHMubGVuZ3RoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW2N1cnJlbnRUZXN0XSgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdkZWJ1Zyc6CisgICAg
ICAgICAgICAgICAgICAgIGRlYnVnKG1lc3NhZ2UubWVzc2FnZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHRlc3RGYWlsZWQoJ1Vua25vd24gbWVzc2FnZTogJyArIGV2ZW50LmRhdGEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZmFs
c2UpOworCisgICAgdGVzdHNbMF0oKTsKK30gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgnVGVzdCBk
ZXBlbmRzIG9uIExheW91dFRlc3RDb250cm9sbGVyIGFuZCBtdXN0IGJlIHJ1biBieSBEUlQnKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdEluV29ybGQod29ybGRJZCwgZnVuY05hbWUpCit7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCisgICAg
ICAgIHdvcmxkSWQsIFN0cmluZyhldmFsKGZ1bmNOYW1lKSkgKyAiXG4iICsgZnVuY05hbWUgKyAi
KCk7Iik7Cit9CisKK2Z1bmN0aW9uIHhocigpCit7CisgICAgZnVuY3Rpb24gZGVidWcobWVzc2Fn
ZSkgeworICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoeworICAgICAg
ICAgICAgICAgICd0eXBlJzogJ2RlYnVnJywKKyAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IG1l
c3NhZ2UKKyAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgJyonKTsKKyAgICB9CisKKyAgICB2
YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oJ0dFVCcsICdodHRw
Oi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9yZXNvdXJjZXMvY3Jvc3Mt
b3JpZ2luLXhoci50eHQnLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGRlYnVnKCdYSFIgY29tcGxldGVkIHdpdGggc3RhdHVzICcgKyB4
aHIuc3RhdHVzKTsKKyAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsn
dHlwZSc6ICd0ZXN0LWRvbmUnfSksICcqJyk7CisgICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsK
K30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L2lzb2xhdGVkV29ybGQvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi14aHIudHh0IGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9z
cy1vcmlnaW4teGhyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWU5YzkyMTJjZjJjNWRkOWVlNjQzODBjY2Nm
NDNmODE4NGUxMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9pc29sYXRlZFdvcmxkL3Jlc291cmNlcy9jcm9zcy1vcmlnaW4teGhyLnR4dApAQCAt
MCwwICsxIEBACitUZXN0IGZpbGUgZm9yIGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCB0ZXN0
cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYmQ1NjMxYjAwNzY0NmQxZmRmMDZjMGJh
MTEzMTUwOWNmNjRjNDY3Ny4uNzVmMmZlNDU4NWU1YWFjMjI5NzFkM2UxM2ZkYzc2ZTI2M2VkNzQy
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTE0NTYsMyArMTQ1Niw2IEBAIGZhc3Qv
ZXZlbnRzL3Njcm9sbC1pbi1zY2FsZWQtcGFnZS13aXRoLW92ZXJmbG93LWhpZGRlbi5odG1sCiAK
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxNTIzCiBodHRwL3Rl
c3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwKKworIyBKU0Mg
ZG9lcyBub3Qgc3VwcG9ydCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gKGh0dHA6Ly93
ZWJraXQub3JnL2IvNjE1NDApCitodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jv
c3Mtb3JpZ2luLXhoci5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDRmODVlNTNk
ZDc0YjZlMmQxZGY5ZTMxOWVjYTA0MTc4ZWM0YzZmZDguLmMzMDYzMjU3ZWI3Yjk5NDlkNDkwMTQ3
NGMyOGYyYjAyOTQ1MjQ0M2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0zNjIsMyAr
MzYyLDYgQEAgaW5zcGVjdG9yL2NvbnNvbGUvY29uc29sZS1sb25nLWV2YWwtY3Jhc2guaHRtbAog
IyBGYWlscyBhZnRlciByODczMjg6CiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MTQ4NwogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1jcm9zcy1zaXRlLmh0bWwKKwor
IyBKU0MgZG9lcyBub3Qgc3VwcG9ydCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gKGh0
dHA6Ly93ZWJraXQub3JnL2IvNjE1NDApCitodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29y
bGQvY3Jvc3Mtb3JpZ2luLXhoci5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCA4N2E2
ZTM2ZDE4NTUwNGM1OWRlZjdmNTg3NjQzMzczODlkM2IxYjM1Li42ZmQxOTZmMGQyYzQwYjBiNWU5
Zjg4MjE4NDkxNTM2MjRlNzVhNGQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTI1MTQs
MyArMjUxNCw2IEBAIGZhc3QvZXZlbnRzL3JlbW92ZS10YXJnZXQtaW4tbW91c2V1cC5odG1sCiAj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTMyMgogZmFzdC9ldmVu
dHMvc2VsZWN0c3RhcnQtYnktZG91YmxlLXRyaXBsZS1jbGlja3MuaHRtbAogZmFzdC9ldmVudHMv
c2VsZWN0c3RhcnQtYnktZHJhZy5odG1sCisKKyMgSlNDIGRvZXMgbm90IHN1cHBvcnQgc2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIChodHRwOi8vd2Via2l0Lm9yZy9iLzYxNTQwKQoraHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Nyb3NzLW9yaWdpbi14aHIuaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA1YWZkZTQ3NTc5NDcxY2Q4OGI5ZjUxMzA3NGRhMGFi
Mzc3MTdlNDk5Li5hNDIzYzQzMjkxYjMyNTYxYTczNzE4MjViMDYyZTNhZDI5NjM4NTViIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTMwNSwzICsxMzA1LDYgQEAgZmFzdC9ldmVudHMv
cGFnZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1sCiAKICMgVW5za2lwIGFmdGVyIGlt
cGxlbWVudGluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyBhbmQgOjpn
b0JhY2suCiBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAorCisj
IEpTQyBkb2VzIG5vdCBzdXBwb3J0IHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiAoaHR0
cDovL3dlYmtpdC5vcmcvYi82MTU0MCkKK2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MmExMDkyMWYwYzUzOTNiNDli
YThlNjZmOTlhZDIxMTdlZDMyYTA1Li44ZDg1Yzk4NDI4OGYyOWE3MDlmODI4NGUzNGU0YTM2ZWVj
NzRjMjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBh
cnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KKworICAgICAgICBTdXBwb3J0IGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBp
biBpc29sYXRlZCB3b3JsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5ODQzCisKKyAgICAgICAgQWxsb3dzIGlzb2xhdGVkIHdvcmxkcyB0byBiZSBh
c3NvY2lhdGVkIHdpdGggYSBkaWZmZXJlbnQgU2VjdXJpdHlPcmlnaW4KKyAgICAgICAgKGV4cG9z
ZWQgYXMgYSBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gZnVuY3Rpb24gaW4KKyAgICAg
ICAgU2NyaXB0Q29udHJvbGxlcikuCisKKyAgICAgICAgVGhlIFhNTEh0dHBSZXF1ZXN0IGNvbnN0
cnVjdG9yIGNhbiB0aGVuIGNoZWNrIHRoYXQgaXQncyBiZWluZworICAgICAgICBpbnN0YW50aWF0
ZWQgaW4gYW4gaXNvbGF0ZWQgd29ybGQgYW5kIHVzZSBpdHMgc2VjdXJpdHkgb3JpZ2luLgorICAg
ICAgICBYTUxIdHRwUmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlciBhbmQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyIGhhZCB0byBiZQorICAgICAgICBjaGFuZ2VkIHRvIHVzZSB0aGUgY29waWVkIFNl
Y3VyaXR5T3JpZ2luIGluc3RlYWQgb2YgYWx3YXlzIGdyYWJiaW5nIHRoZQorICAgICAgICBEb2N1
bWVudCdzLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3Js
ZC9jcm9zcy1vcmlnaW4teGhyLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OnNldFNlY3VyaXR5T3JpZ2lu
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNldElzb2xh
dGVkV29ybGRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpyZXNl
dElzb2xhdGVkV29ybGRzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFhNTEh0dHBSZXF1ZXN0Ojpjb25zdHJ1Y3RvckNhbGxiYWNr
KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFr
ZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6aXNBbGxvd2VkUmVk
aXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZWN1
cml0eU9yaWdpbik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5o
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZWN1cml0eU9yaWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
SHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAqIHhtbC9YTUxIdHRw
UmVxdWVzdC5oOgorCiAyMDExLTA1LTI2ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYjVjODlk
OGNkYjIyOTI4MTI3MWQ1NGY1MzQ5MzAxZDYwMTA2YjBlNi4uYjk2NzdmMTc2NWYyZDZhOGVjZDhm
NjQ2NTgyNTJhNGFjNzQ2ODc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTIxNiw2ICsyMTYsMTEgQEAgdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBW
ZWN0b3I8U2MKICAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBz
b3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0
SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBtX3Byb3h5LT5zZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4od29ybGRJRCwgc2VjdXJpdHlPcmlnaW4pOworfQorCiAvLyBFdmFs
dWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBlbnZpcm9ubWVudCBvZiB0aGlzIHByb3h5LgogU2Ny
aXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYgc291cmNlQ29kZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAppbmRleCA2Yjk3NjVjOWY0ODc3M2Q1MGJlNjhmZDgyOWEwOTA0M2NmMmUxYmIw
Li41YjJmNDgzYjEyZjk4OWMxMDE5M2Y2ZWZmNDhiMDNiZWRkMGM3MDkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC05OSw2ICs5OSwxMSBA
QCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4K
ICAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0
IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CiAKKyAgICAv
LyBBc3NvY2lhdGVzIGFuIGlzb2xhdGVkIHdvcmxkIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9u
KSB3aXRoIGEgc2VjdXJpdHkKKyAgICAvLyBvcmlnaW4uIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNl
cyB1c2VkIGluIHRoYXQgd29ybGQgd2lsbCBiZSBjb25zaWRlcmVkCisgICAgLy8gdG8gY29tZSBm
cm9tIHRoYXQgb3JpZ2luLCBub3QgdGhlIGZyYW1lJ3MuCisgICAgdm9pZCBzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSWQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
KTsKKwogICAgIC8vIE1hc3F1ZXJhZGUgJ3RoaXMnIGFzIHRoZSB3aW5kb3dTaGVsbC4KICAgICAv
LyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYnV0IHByb3ZpZGVzIHJlYXNvbmFibGUgY29tcGF0
aWJpbGl0eQogICAgIC8vIHdpdGggd2hhdCBKU0MgZG9lcyBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCmluZGV4IDdiMjFhMzZk
ZTk4NjU4YWQxNjY3NzYwNDc0MzM5ZGRiYjE3M2ZhYzQuLjYyMDE1ZDc4MzAyOTE0OWNjYjc3NDUx
OTFkM2QzYzE0OGQyZGNiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OElzb2xhdGVkQ29udGV4dC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJIYXNoTWFwLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAKQEAgLTg3LDQgKzg3LDkgQEAgVjhJ
c29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29udGV4dCgpCiAgICAgbV9jb250ZXh0LT5kaXNw
b3NlSGFuZGxlKCk7CiB9CiAKK3ZvaWQgVjhJc29sYXRlZENvbnRleHQ6OnNldFNlY3VyaXR5T3Jp
Z2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIG1f
c2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgK
aW5kZXggNWNkOWM2NTZmNWExNTU4MmNmMGNiYzlkZjJmODkzZDU0Y2Q2YmFiYy4uNjIyMWRjM2Qw
OTQ1Y2Y1YmFmODZmMGQyN2UyZjExMTJjZDYzYTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBWOFByb3h5Owog
CiAvLyBWOElzb2xhdGVkQ29udGV4dApAQCAtNTgsNyArNTksNyBAQCBjbGFzcyBWOElzb2xhdGVk
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8g
ZGVzdHJveSBpdCwgY2FsbCBkZXN0cm95KCkuCiAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUg
aXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2QuCi0gICAgVjhJ
c29sYXRlZENvbnRleHQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisgICAg
VjhJc29sYXRlZENvbnRleHQoVjhQcm94eSosIGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgflY4
SXNvbGF0ZWRDb250ZXh0KCk7CiAKICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUgaXNv
bGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQpAQCAtOTMsNiArOTQsOSBA
QCBwdWJsaWM6CiAKICAgICBJc29sYXRlZFdvcmxkKiB3b3JsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
d29ybGQuZ2V0KCk7IH0KIAorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNlY3Vy
aXR5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7CkBAIC0xMDgsNiArMTEyLDggQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CiAK
ICAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbV93b3JsZDsKKworICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggZmE2OTE5NjgwODUxNDI2
NjhmM2I5YTMzOTNlMmQ1YzM0N2E5ZjlmZS4uMzllMDI1NDkxMGIyYjU2M2VhNDY4NDNjNjU2OTMx
ZDcxMTI1ODM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUJy
aWRnZS5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtMjcyLDYgKzI3MywxMCBAQCB2b2lk
IFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKKyAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRl
ciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5kKCkpCisgICAgICAgICAgICBp
c29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vj
b25kKTsKICAgICB9IGVsc2UgewogICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29s
YXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXApOwogICAgICAgICBpZiAoaXNvbGF0ZWRD
b250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yODksNiArMjk0LDE2IEBAIHZvaWQg
VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlCiAgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0K
IAordm9pZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxk
SUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCit7Cisg
ICAgQVNTRVJUKHdvcmxkSUQpOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbkluOworICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2lucy5zZXQod29ybGRJRCwgc2VjdXJpdHlPcmlnaW4pOworICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CisgICAg
aWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKKyAgICAgICAgaXRlci0+c2Vjb25k
LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7Cit9CisKIGJvb2wgVjhQcm94eTo6
c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0
YXJnZXRDb250ZXh0KQogewogICAgIC8vIFNldHVwIGNvbnRleHQgaWQgZm9yIEpTIGRlYnVnZ2Vy
LgpAQCAtNjIxLDYgKzYzNiw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygp
CiAgICAgICAgIGl0ZXItPnNlY29uZC0+ZGVzdHJveSgpOwogICAgIH0KICAgICBtX2lzb2xhdGVk
V29ybGRzLmNsZWFyKCk7CisgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFy
KCk7CiB9CiAKIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JDbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgKaW5kZXggYzM0NGEyYzI4NmYwZDZjMjA1MGVjYTA0ZmY1ZTUyNWE4OTk2
YjQxYy4uMzU0ODAwZGZmZTAzYWZhZWUwYjNjZjhiMWZhYjI3MTVkOWRlZjhlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtNTksNiArNTksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CisgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIFY4SXNvbGF0ZWRDb250ZXh0
OwogICAgIGNsYXNzIFdvcmxkQ29udGV4dEhhbmRsZTsKQEAgLTE1OSw2ICsxNjAsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93
biB3cmFwcGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVj
dG9ycy4KICAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwg
Y29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3Jv
dXApOworICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oaW50IHdvcmxkSWQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3h5IGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBzY3Jp
cHQgaW4gVjguCiAgICAgICAgIGJvb2wgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7CkBAIC0zMzks
NiArMzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyAgICAgICAgSXNvbGF0
ZWRDb250ZXh0IGRpcmVjdGx5LgogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWOElzb2xh
dGVkQ29udGV4dCo+IElzb2xhdGVkV29ybGRNYXA7CiAgICAgICAgIElzb2xhdGVkV29ybGRNYXAg
bV9pc29sYXRlZFdvcmxkczsKKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQs
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA7
CisgICAgICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcCBtX2lzb2xhdGVkV29ybGRT
ZWN1cml0eU9yaWdpbnM7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAppbmRleCA2YjViNjRmMjQ3NjdkZGQ4Zjg4MTc5
Mjg4MzdlMTIwMDBmNjZiOTUxLi5iYTNkMTAzYzZhOTIyZjU4MGM5Yzg5NTgyZWZhMDZiZDAwYmRm
ZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApAQCAtMzIsNyArMzIsMTAg
QEAKICNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTUyLDcgKzU1LDExIEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFhNTEh0dHBSZXF1ZXN0Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJYTUxIdHRwUmVxdWVzdCBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQgY29udGV4dCBp
cyBub3QgYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwotICAgIFJlZlB0cjxY
TUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQpOworCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKKyAg
ICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250
ZXh0OjpnZXRFbnRlcmVkKCkpCisgICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNvbGF0ZWRDb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpOworICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0
cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNlY3VyaXR5T3JpZ2lu
KTsKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8s
IHhtbEh0dHBSZXF1ZXN0LmdldCgpKTsKIAogICAgIC8vIEFkZCBvYmplY3QgdG8gdGhlIHdyYXBw
ZXIgbWFwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmNwcAppbmRleCAyZjQ4ZmJhZjljNzkzMjk3ZmMyNDJiZjAxOTEyZWZkOGI2MmJkN2Jh
Li44MDRjM2U3NDcyODk0YTE1ZTQ5ZjYwNjdjMzAyYWY4ZjE1ZTQyNTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtNjgs
NyArNjgsNyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcihEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibAogICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9vcHRpb25hbE91dGdvaW5n
UmVmZXJyZXIob3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKQotICAgICwgbV9zYW1lT3JpZ2luUmVx
dWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgp
KSkKKyAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dChyZXF1ZXN0LnVybCgpKSkKICAgICAsIG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2Fk
QXN5bmNocm9ub3VzbHkpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTg5LDE0ICs4OSwx
NCBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihE
b2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibAogICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogCiAgICAgT3duUHRyPFJl
c291cmNlUmVxdWVzdD4gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291cmNl
UmVxdWVzdChyZXF1ZXN0KSk7Ci0gICAgdXBkYXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2woKmNy
b3NzT3JpZ2luUmVxdWVzdCwgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMpOworICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKCpj
cm9zc09yaWdpblJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzKTsKIAogICAgIGlmICghbV9vcHRpb25zLmZvcmNlUHJlZmxpZ2h0ICYmIGlzU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cE1ldGhvZCgp
LCBjcm9zc09yaWdpblJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIG1ha2VT
aW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoKmNyb3NzT3JpZ2luUmVxdWVzdCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIG1fYWN0dWFsUmVxdWVzdCA9IGNyb3NzT3JpZ2luUmVxdWVzdC5yZWxl
YXNlKCk7CiAKLSAgICAgICAgaWYgKENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNo
YXJlZCgpLmNhblNraXBQcmVmbGlnaHQoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
LCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVh
ZGVyRmllbGRzKCkpKQorICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNo
ZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
LCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9h
Y3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZp
ZWxkcygpKSkKICAgICAgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoKm1f
YWN0dWFsUmVxdWVzdCk7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3Vy
Y2UKIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsK
LSAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCA9IGNyZWF0ZUFjY2Vzc0NvbnRy
b2xQcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3QsIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCks
IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxp
Z2h0UmVxdWVzdCA9IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3Qs
IHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKICAgICBsb2Fk
UmVxdWVzdChwcmVmbGlnaHRSZXF1ZXN0LCBEb1NlY3VyaXR5Q2hlY2spOwogfQogCkBAIC0xNzYs
NyArMTc2LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb24KIAogICAgIFN0cmluZyBhY2Nlc3ND
b250cm9sRXJyb3JEZXNjcmlwdGlvbjsKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Ci0gICAg
ICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxs
b3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJv
bEVycm9yRGVzY3JpcHRpb24pKSB7CisgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENo
ZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgc2VjdXJpdHlPcmlnaW4o
KSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAgICBwcmVmbGln
aHRGYWlsdXJlKHJlc3BvbnNlLnVybCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE4OSwxMCArMTg5LDEwIEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5hcHBlbmRF
bnRyeShtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJl
cXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKKyAgICAgICAgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50cnkoc2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgcHJlZmxpZ2h0UmVz
dWx0LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5S
ZXF1ZXN0ICYmIG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNz
Q29udHJvbCkgewotICAgICAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVz
cG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2RvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgIGlm
ICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscywgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24p
KSB7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgYWNjZXNz
Q29udHJvbEVycm9yRGVzY3JpcHRpb24pKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnByZWZsaWdodFN1Y2Nlc3MoKQogICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IGFjdHVh
bFJlcXVlc3Q7CiAgICAgYWN0dWFsUmVxdWVzdC5zd2FwKG1fYWN0dWFsUmVxdWVzdCk7CiAKLSAg
ICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpOworICAgIGFjdHVhbFJlcXVlc3QtPnNldEhUVFBPcmlnaW4oc2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8gc2tp
cCB0aGUgc2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUgcHJl
ZmxpZ2h0IHJlcXVlc3QuCiAgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBTZWN1
cml0eUNoZWNrKTsKQEAgLTM2OCw3ICszNjgsMTIgQEAgYm9vbCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmlzQWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCkKICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2wgZm9yIGVhY2ggcmVkaXJlY3QuIFRo
aXMgd2lsbCByZXF1aXJlIHNvbWUgcmVmYWN0b3JpbmcgdGhvdWdoLCBiZWNhdXNlIHRoZSBjb2Rl
CiAgICAgLy8gdGhhdCBwcm9jZXNzZXMgcmVkaXJlY3RzIGRvZXNuJ3Qga25vdyBhYm91dCBhY2Nl
c3MgY29udHJvbCBhbmQgZXhwZWN0cyBhIHN5bmNocm9ub3VzIGFuc3dlciBmcm9tIGl0cyBjbGll
bnQgYWJvdXQgd2hldGhlcgogICAgIC8vIGEgcmVkaXJlY3Qgc2hvdWxkIHByb2NlZWQuCi0gICAg
cmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3QgJiYgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdCh1cmwpOworICAgIHJldHVybiBtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmIHNl
Y3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAoreworICAgIHJl
dHVybiBtX29wdGlvbnMuc2VjdXJpdHlPcmlnaW4gPyBtX29wdGlvbnMuc2VjdXJpdHlPcmlnaW4u
Z2V0KCkgOiBtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmgKaW5kZXggNTBmNjBjYTBjNGVjMDNmY2FmOWJlY2UyMzFjMWQ3MTI5NTkwYmQ2MC4u
NTk0OTY2NzIxZWUxNzE3Y2ZiOGEyNGRhNGMzMjZjYzExNDU1YjliNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaApAQCAtNDUsNiArNDUs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3Mg
S1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CisgICAgY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVudDsKIAogICAgIGNsYXNzIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50ICB7CkBAIC05NCw2ICs5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNr
UG9saWN5KTsKICAgICAgICAgYm9vbCBpc0FsbG93ZWRSZWRpcmVjdChjb25zdCBLVVJMJik7CiAK
KyAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisKICAgICAg
ICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAgICAgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKaW5kZXggYjAxZjNlZTdkMmU0
MzlmOTU0ZTI2YmE5YWQ3ZTcwY2QzYWE1YzVlYy4uYzAyYjRhNTQ0N2QxZWRhOWI3YzQ5OTViYTcw
ZjkxZDI4MTQzNjIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5o
CkBAIC0zMSw4ICszMSwxMCBAQAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyX2gKICNkZWZpbmUg
VGhyZWFkYWJsZUxvYWRlcl9oCiAKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjIsNiArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgZm9yY2VQcmVmbGlnaHQ7ICAvLyBJZiBBY2Nlc3NDb250cm9sIGlzIHVzZWQsIHdoZXRo
ZXIgdG8gZm9yY2UgYSBwcmVmbGlnaHQuCiAgICAgICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CiAgICAgICAgIGJvb2wgc2hvdWxkQnVmZmVyRGF0
YTsKKyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKICAgICB9
OwogCiAgICAgLy8gVXNlZnVsIGZvciBkb2luZyBsb2FkZXIgb3BlcmF0aW9ucyBmcm9tIGFueSB0
aHJlYWQgKG5vdCB0aHJlYWRzYWZlLCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CmluZGV4IDczYmI2ZWUyOWIxZGUwYTAyM2YxZWIxNmM1NzNhM2Q1MzIzNTcwMmIuLmQ3M2QxMWMy
ZWM2MGVhYmZiNzAzZTllOTZhYjUwOGNjZWM1MjIwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcApAQCAtMTcyLDcgKzE3MiwxMiBAQCBzdGF0aWMgY29uc3QgWE1MSHR0cFJl
cXVlc3RTdGF0aWNEYXRhKiBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCkKICAg
ICByZXR1cm4gZHVtbXk7CiB9CiAKLVhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4g
WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFhNTEh0dHBSZXF1ZXN0KGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKSk7Cit9
CisKK1hNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKICAg
ICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9hc3luYyh0cnVlKQog
ICAgICwgbV9pbmNsdWRlQ3JlZGVudGlhbHMoZmFsc2UpCkBAIC0xODcsNiArMTkyLDcgQEAgWE1M
SHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgLCBtX2V4Y2VwdGlvbkNvZGUoMCkKICAgICAsIG1fcHJvZ3Jlc3NFdmVudFRocm90
dGxlKHRoaXMpCiAgICAgLCBtX3Jlc3BvbnNlVHlwZUNvZGUoUmVzcG9uc2VUeXBlRGVmYXVsdCkK
KyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgaW5pdGlhbGl6
ZVhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSgpOwogI2lmbmRlZiBOREVCVUcKQEAgLTIwNyw2ICsy
MTMsMTEgQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0Ojpkb2N1bWVudCgpIGNvbnN0CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
IH0KIAorU2VjdXJpdHlPcmlnaW4qIFhNTEh0dHBSZXF1ZXN0OjpzZWN1cml0eU9yaWdpbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4gPyBtX3NlY3VyaXR5T3JpZ2luLmdl
dCgpIDogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpOworfQorCiAj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXNlc0Rh
c2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdAogewpAQCAtMjQ5LDcgKzI2
MCw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBt
X3VybCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCiAgICAgICAg
ICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRDb250ZW50KG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpKTsKLSAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFNlY3Vy
aXR5T3JpZ2luKGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICAgICAgbV9y
ZXNwb25zZVhNTC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAg
ICAgICBpZiAoIW1fcmVzcG9uc2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAgICBt
X3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfQpAQCAtNjE3LDcgKzYyOCw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKTsKKyAgICBtX3NhbWVPcmln
aW5SZXF1ZXN0ID0gc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChtX3VybCk7CiAKICAgICAv
LyBXZSBhbHNvIHJlbWVtYmVyIHdoZXRoZXIgdXBsb2FkIGV2ZW50cyBzaG91bGQgYmUgYWxsb3dl
ZCBmb3IgdGhpcyByZXF1ZXN0IGluIGNhc2UgdGhlIHVwbG9hZCBsaXN0ZW5lcnMgYXJlCiAgICAg
Ly8gYWRkZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgc3RhcnRlZC4KQEAgLTY0MSw2ICs2NTIsNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSB1cGxvYWRFdmVudHM7CiAgICAgb3B0aW9ucy5h
bGxvd0NyZWRlbnRpYWxzID0gbV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50
aWFsczsKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IFVzZUFjY2Vzc0Nv
bnRyb2w7CisgICAgb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luKCk7CiAK
ICAgICBtX2V4Y2VwdGlvbkNvZGUgPSAwOwogICAgIG1fZXJyb3IgPSBmYWxzZTsKQEAgLTgyMyw3
ICs4MzUsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YQogICAgIH0KIAogICAgIC8vIEEgcHJp
dmlsZWdlZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0KSBjYW4gc2V0IGFueSBoZWFk
ZXJzLgotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigp
LT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNTYWZlUmVxdWVzdEhlYWRlcihuYW1lKSkg
eworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgJiYg
IWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKICAgICAgICAgcmVwb3J0VW5zYWZlVXNhZ2Uo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiUmVmdXNlZCB0byBzZXQgdW5zYWZlIGhlYWRlciBc
IiIgKyBuYW1lICsgIlwiIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04NjYsNyArODc4
LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhh
cm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QK
ICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJl
cXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1w
bGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+
Zmlyc3QpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
bkxvYWRMb2NhbFJlc291cmNlcygpKQorICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQt
PmZpcnN0KSAmJiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3Qg
JiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkK
QEAgLTg5MSw3ICs5MDMsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVh
ZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZQogICAgIH0KIAogICAg
IC8vIFNlZSBjb21tZW50IGluIGdldEFsbFJlc3BvbnNlSGVhZGVycyBhYm92ZS4KLSAgICBpZiAo
aXNTZXRDb29raWVIZWFkZXIobmFtZSkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpIHsKKyAgICBpZiAoaXNTZXRD
b29raWVIZWFkZXIobmFtZSkgJiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291
cmNlcygpKSB7CiAgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAppbmRleCBkYTc3N2U3NzhjODg1ZTRkNjk0MzcxYjA2OGY2N2UzN2ZlZTE2YjgyLi5iMDdj
YTJiNDA0NWQwMTQ1YzE3ZjVkOWEwMWY3MWEzZTdlMmUyOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBCbG9iOwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFNl
Y3VyaXR5T3JpZ2luOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CkBAIC00Niw3ICs0Nyw3IEBAIGNsYXNzIFRo
cmVhZGFibGVMb2FkZXI7CiBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVk
PFhNTEh0dHBSZXF1ZXN0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwcml2YXRlIFRocmVhZGFibGVM
b2FkZXJDbGllbnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFhNTEh0dHBSZXF1ZXN0KGNvbnRleHQpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFhNTEh0dHBSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+ID0gMCk7CiAgICAgflhNTEh0dHBSZXF1ZXN0KCk7CiAKICAgICAv
LyBUaGVzZSBleGFjdCBudW1lcmljIHZhbHVlcyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgSlMgZXhw
ZWN0cyB0aGVtLgpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3Vu
dGVkPFhNTEh0dHBSZXF1ZXN0Pjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgWE1MSHR0cFJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KQEAgLTE0Miw2ICsxNDMsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsK
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworICAgIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQog
ICAgIGJvb2wgdXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdDsK
QEAgLTIyNiw2ICsyMjgsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gQW4gZW51bSBjb3JyZXNwb25k
aW5nIHRvIHRoZSBhbGxvd2VkIHN0cmluZyB2YWx1ZXMgZm9yIHRoZSByZXNwb25zZVR5cGUgYXR0
cmlidXRlLgogICAgIFJlc3BvbnNlVHlwZUNvZGUgbV9yZXNwb25zZVR5cGVDb2RlOworCisgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjMGYxNDJhMDMzOGE5
MTNjOTBiMWY1ZGU1NDUyYjJkMTc4Y2U1MzMxLi40ZjdhYWFjOWI4ZWZkZjZiNDliMGI4MTliNzg1
NjEzNDQyNTU1NzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDExLTA1LTI1ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgU3VwcG9ydCBjcm9zcy1v
cmlnaW4gWE1MSHR0cFJlcXVlc3QgaW4gaXNvbGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0MworCisgICAgICAgIEV4cG9zZSBz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gaW4gdGhlIFdlYkZyYW1lIEFQSS4KKworICAg
ICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbik6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorCiAyMDExLTA1LTI1ICBT
aGlzaGlyIEFncmF3YWwgIDxzaGlzaGlyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaAppbmRleCA0ZTQ1ZDA2ZDI1NTlkOTVlMDJjNTc1MWU2MjQ5Y2M4NDhhYjU3NWJmLi5iNzdh
ZGQzMTEzMzUzMTUxYTkyY2M0YjkxNmE4N2IxODRiZjA0MDBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZyYW1lLmgKQEAgLTI1Myw2ICsyNTMsMTIgQEAgcHVibGljOgogICAg
ICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzLCB1bnNpZ25l
ZCBudW1Tb3VyY2VzLAogICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApID0gMDsKIAorICAgIC8v
IEFzc29jaWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24p
IHdpdGggYSBzZWN1cml0eQorICAgIC8vIG9yaWdpbi4gWE1MSHR0cFJlcXVlc3QgaW5zdGFuY2Vz
IHVzZWQgaW4gdGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVyZWQKKyAgICAvLyB0byBjb21lIGZy
b20gdGhhdCBvcmlnaW4sIG5vdCB0aGUgZnJhbWUncy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKAorICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mKSA9IDA7CisKICAgICAvLyBMb2dzIHRvIHRoZSBjb25zb2xlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIGZyYW1lLgogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25z
b2xlKGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA0MThkNTAwOWYyNmE3MDEzZGVmNDBiM2Fm
N2FmMDk2ZGFkY2E3NWIzLi43NzI3ZWE1ZWQxMGU0YjM2OWUyM2I5NTZhNTJjM2JiMThkMzIzZTVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc4
OSw2ICs3ODksMTEgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoCiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdv
cmxkSWQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6
OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJZCwgY29uc3QgV2ViU2Vj
dXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQoreworICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5z
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4od29ybGRJZCwgc2VjdXJpdHlPcmlnaW4uZ2V0
KCkpOworfQorCiB2b2lkIFdlYkZyYW1lSW1wbDo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBX
ZWJDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoZnJhbWUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDQyMmNkYTg4YThlMGE5
NDJiNzUxNWY0NDM2YzllMzljMzY1OTQ3YjEuLmIzMjc4NGYyM2Y3ZGE3YTk4MTY0NzUzYmE0N2Q0
ZjM2Y2JiNjVlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
CkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKAogICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0
U291cmNlKiBzb3VyY2VzLCB1bnNpZ25lZCBudW1Tb3VyY2VzLAogICAgICAgICBpbnQgZXh0ZW5z
aW9uR3JvdXApOworICAgIHZpcnR1YWwgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oaW50IHdvcmxkSWQsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJik7CiAgICAgdmlydHVhbCB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgV2ViQ29uc29sZU1lc3NhZ2UmKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKICNpZiBXRUJLSVRfVVNJTkdfVjgKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZjU2MmM1NTIw
OWY2YjMzNTdiNGZjODc5N2EwN2M5ZDY3YmQwNGI5Li40NDY5NDlhNTgxYTljMmYxNzk2YjBlMjIx
NTQzOGVkNmEwZTBkMmE0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMjUgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
KworICAgICAgICBTdXBwb3J0IGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBpbiBpc29sYXRl
ZCB3b3JsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU5ODQzCisKKyAgICAgICAgRXhwb3NlIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiBp
biBMYXlvdXRUZXN0Q29udHJvbGxlci4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorCiAyMDExLTA1LTI1ICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBhc3N1bWUgdGhhdCBi
dWlsZHMgZmluaXNoIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc3RhcnRlZApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDMzYTU1ODBiYzdhMTgzN2E1Y2YyMzlmZDRlYzg3MjEwYmMzZTk1YTQuLmQ0YWJiYzdkZjc3
YmU0MDUxNDZkYmE5NzQwYWFhN2VhYmQwM2I3NjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwOCw2ICsx
MDgsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNo
ZWxsKiBzaGVsbCkKICAgICBiaW5kTWV0aG9kKCJlbnN1cmVTaGFkb3dSb290IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjplbnN1cmVTaGFkb3dSb290KTsKICAgICBiaW5kTWV0aG9kKCJldmFsdWF0
ZUluV2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKTsKICAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOwor
ICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKTsKICAgICBiaW5k
TWV0aG9kKCJleGVjQ29tbWFuZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQp
OwogICAgIGJpbmRNZXRob2QoImdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24p
OwogICAgIGJpbmRNZXRob2QoImhhc1NwZWxsaW5nTWFya2VyIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpoYXNTcGVsbGluZ01hcmtlcik7CkBAIC0xMjg3LDYgKzEyODgsMTggQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50
c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKAorICAgICAgICBhcmd1bWVudHNbMF0udG9JbnQzMigpLAor
ICAgICAgICBXZWJTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzFdKSkpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IGM0ZTk1
YTcwNjFiNDhiZWNlMWYzZjk3YzlkNTVmZDgzNjY4NmRhZjYuLjI1MmQ0ZjExMTk5NGUyNjllMmY3
Mjg5OWRiYmEyNmNkNTlkMzg5NjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMjY2LDEzICsyNjYsMTUgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldFhTU0F1ZGl0b3JFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRB
bGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0QWxsb3dSdW5uaW5n
T2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCiAgICAgdm9pZCBz
aGFkb3dSb290KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lk
IGVuc3VyZVNoYWRvd1Jvb3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
ICAgIHZvaWQgcmVtb3ZlU2hhZG93Um9vdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>