<?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>43157</bug_id>
          
          <creation_ts>2010-07-28 16:24:42 -0700</creation_ts>
          <short_desc>First pass at visited link support for WK2</short_desc>
          <delta_ts>2010-07-28 17:41:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257426</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 16:24:42 -0700</bug_when>
    <thetext>Add ability for WK2 to ask client app to populateVisitedLinks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257429</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 16:27:14 -0700</bug_when>
    <thetext>First pass at visited link support for WK2

-WK2 needs to be able to ask the client app to populate visited links
-The UIProcess needs to be able to tell the WebProcess to track visited links</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257435</commentid>
    <comment_count>2</comment_count>
      <attachid>62891</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 16:32:42 -0700</bug_when>
    <thetext>Created attachment 62891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257438</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-28 16:34:38 -0700</bug_when>
    <thetext>Attachment 62891 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/API/C/WKContext.h:53:  Extra space between int and version  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:55:  Extra space between WKContextDidNavigateWithNavigationDataCallback and didNavigateWithNavigationData  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:56:  Extra space between WKContextDidPerformClientRedirectCallback and didPerformClientRedirect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:57:  Extra space between WKContextDidPerformServerRedirectCallback and didPerformServerRedirect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:58:  Extra space between WKContextDidUpdateHistoryTitleCallback and didUpdateHistoryTitle  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:59:  Extra space between WKContextPopulateVisitedLinksCallback and populateVisitedLinks  [whitespace/declaration] [3]
Total errors found: 6 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257446</commentid>
    <comment_count>4</comment_count>
      <attachid>62891</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-28 16:41:21 -0700</bug_when>
    <thetext>Comment on attachment 62891
Patch

&gt; +
&gt; +void WebHistoryClient::populateVisitedLinks()
&gt; +{
&gt; +    if (!m_contextHistoryClient.populateVisitedLinks)
&gt; +        return;
&gt; +
&gt; +    m_contextHistoryClient.populateVisitedLinks(toRef(&amp;m_context), m_contextHistoryClient.clientInfo);
&gt;  }

Instead of storing the context here, I think it makes more sense to just pass the context the this method as we do everywhere else.
&gt; -            didNavigateWithNavigationData(webFrame(frameID), store);
&gt; +            pageNamespace()-&gt;context()-&gt;didNavigateWithNavigationData(webFrame(frameID), store);

I don&apos;t think there is any reason for these messages to go to the WebPageProxy, they should be able to go right to the WebContext from the WebProcessProxy.


r- to address these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257462</commentid>
    <comment_count>5</comment_count>
      <attachid>62896</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 17:24:19 -0700</bug_when>
    <thetext>Created attachment 62896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257467</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-28 17:29:52 -0700</bug_when>
    <thetext>Attachment 62896 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/API/C/WKContext.h:53:  Extra space between int and version  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:55:  Extra space between WKContextDidNavigateWithNavigationDataCallback and didNavigateWithNavigationData  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:56:  Extra space between WKContextDidPerformClientRedirectCallback and didPerformClientRedirect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:57:  Extra space between WKContextDidPerformServerRedirectCallback and didPerformServerRedirect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:58:  Extra space between WKContextDidUpdateHistoryTitleCallback and didUpdateHistoryTitle  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKContext.h:59:  Extra space between WKContextPopulateVisitedLinksCallback and populateVisitedLinks  [whitespace/declaration] [3]
Total errors found: 6 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257470</commentid>
    <comment_count>7</comment_count>
      <attachid>62896</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-28 17:33:05 -0700</bug_when>
    <thetext>Comment on attachment 62896
Patch

&gt;  void WebContext::ensureWebProcess()
&gt;  {
&gt;      if (m_process &amp;&amp; m_process-&gt;isValid())
&gt;          return;

Why not use hasValidProcess() here, since you added it?

&gt; +    m_historyClient.didNavigateWithNavigationData(this, frame-&gt;page(), store, frame);

Can page() be 0? What should we do in that case?

&gt; +    inline bool hasValidProcess() const { return m_process &amp;&amp; m_process-&gt;isValid(); }

No need for the &quot;inline&quot; here. Functions defined inside the class definition are automatically treated as if &quot;inline&quot; was specified.

&gt;      WebContextInjectedBundleClient m_injectedBundleClient;
&gt;  
&gt; +    WebHistoryClient m_historyClient;
&gt; +
&gt;      PluginInfoStore m_pluginInfoStore;

Are there some other clients this can be paragraphed with so it doesn&apos;t need its own?

&gt; +    if (wkClient &amp;&amp; !wkClient-&gt;version)
&gt; +        toWK(contextRef)-&gt;initializeHistoryClient(wkClient);

I&apos;m a little mystified by the version checks. It seems that if someone passes in version 1 or greater of the structure we&apos;ll ignore it completely. That does not seem to be what version is for. This is probably not new to your patch -- maybe we&apos;re doing this throughout.

&gt; +                PageGroup::setShouldTrackVisitedLinks(shouldTrackVisitedLinks);

Perhaps setting this to false should clear the existing visited links?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257478</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 17:40:27 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 62896 [details])
&gt; &gt;  void WebContext::ensureWebProcess()
&gt; &gt;  {
&gt; &gt;      if (m_process &amp;&amp; m_process-&gt;isValid())
&gt; &gt;          return;
&gt; 
&gt; Why not use hasValidProcess() here, since you added it?

Indeed!

&gt; 
&gt; &gt; +    m_historyClient.didNavigateWithNavigationData(this, frame-&gt;page(), store, frame);
&gt; 
&gt; Can page() be 0? What should we do in that case?

It can&apos;t be - We actually translated a frameID to a WebFrame by asking a WebPage before calling this method.

But I&apos;m adding assertions to this effect.

&gt; 
&gt; &gt;      WebContextInjectedBundleClient m_injectedBundleClient;
&gt; &gt;  
&gt; &gt; +    WebHistoryClient m_historyClient;
&gt; &gt; +
&gt; &gt;      PluginInfoStore m_pluginInfoStore;
&gt; 
&gt; Are there some other clients this can be paragraphed with so it doesn&apos;t need its own?

The injectedbundleclient is the only other client, but I felt it made slightly more sense to paragraph it with its companion m_injectedBundlePath

&gt; 
&gt; &gt; +    if (wkClient &amp;&amp; !wkClient-&gt;version)
&gt; &gt; +        toWK(contextRef)-&gt;initializeHistoryClient(wkClient);
&gt; 
&gt; I&apos;m a little mystified by the version checks. It seems that if someone passes in version 1 or greater of the structure we&apos;ll ignore it completely. That does not seem to be what version is for. This is probably not new to your patch -- maybe we&apos;re doing this throughout.

Not new to my patch, we do it throughout - I&apos;m equally mystified.

&gt; 
&gt; &gt; +                PageGroup::setShouldTrackVisitedLinks(shouldTrackVisitedLinks);
&gt; 
&gt; Perhaps setting this to false should clear the existing visited links?

WebCore does this already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257480</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-28 17:41:26 -0700</bug_when>
    <thetext>Committed r64247: &lt;http://trac.webkit.org/changeset/64247&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62891</attachid>
            <date>2010-07-28 16:32:42 -0700</date>
            <delta_ts>2010-07-28 17:24:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43157-20100728163241.patch</filename>
            <type>text/plain</type>
            <size>36236</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI0MikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMTAtMDctMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
cnN0IHBhc3MgYXQgdmlzaXRlZCBsaW5rIHN1cHBvcnQgZm9yIFdLMgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxNTcKKworICAgICAgICAqIFNoYXJl
ZC9Db3JlSVBDU3VwcG9ydC9XZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmg6CisgICAgICAgIChXZWJQ
cm9jZXNzTWVzc2FnZTo6KTogQWRkICJzaG91bGQgdHJhY2sgdmlzaXRlZCBsaW5rcyIgbWVzc2Fn
ZQorICAgICAgICAKKyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUHJvY2Vzc1By
b3h5TWVzc2FnZUtpbmRzLmg6CisgICAgICAgIChXZWJQcm9jZXNzUHJveHlNZXNzYWdlOjopOiBB
ZGQgInBvcHVsYXRlIHZpc2l0ZWQgbGlua3MiIG1lc3NhZ2UuCisKKyAgICAgICAgTW92ZSBIaXN0
b3J5Q2xpZW50IHN1cHBvcnQgZnJvbSB0aGUgcGFnZS4uLjoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6Cisg
ICAgICAgIAorICAgICAgICAuLi50byB0aGUgQ29udGV4dAorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oOgorICAgICAgICAKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojppbml0aWFsaXpl
SGlzdG9yeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmVuc3VyZVdlYlBy
b2Nlc3MpOiBXaGVuIGEgbmV3IFdlYlByb2Nlc3MgaXMgY3JlYXRlZCwgc2V0IGl0cyAic2hvdWxk
IHRyYWNrIHZpc2l0ZWQgbGlua3MiIG1vZGUuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6
OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dDo6cG9wdWxhdGVWaXNpdGVkTGlua3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6Omhhc1ZhbGlkUHJvY2Vzcyk6CisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJIaXN0b3J5Q2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViSGlzdG9yeUNsaWVudDo6V2ViSGlzdG9yeUNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIaXN0b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFVwZGF0ZUhpc3RvcnlU
aXRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OnBvcHVsYXRlVmlzaXRl
ZExpbmtzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJIaXN0b3J5Q2xpZW50OjpzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk6Cisg
ICAgICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlU3luY01lc3NhZ2UpOgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MpOiBJUEMgdG8gdGhlIFVJUHJvY2VzcyB0byBhc2sg
Zm9yIGxpbmsgcG9wdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UpOgorCiAyMDEwLTA3LTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvU2hhcmVk
L0NvcmVJUENTdXBwb3J0L1dlYlByb2Nlc3NNZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmgJKHJl
dmlzaW9uIDY0MjM4KQorKysgV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUHJvY2Vz
c01lc3NhZ2VLaW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFj
ZSBXZWJQcm9jZXNzTWVzc2FnZSB7CiBlbnVtIEtpbmQgewogICAgIExvYWRJbmplY3RlZEJ1bmRs
ZSwKICAgICBTZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LAorICAgIFNldFNob3VsZFRyYWNr
VmlzaXRlZExpbmtzLAogICAgIENyZWF0ZSwKICAgICBQb3N0TWVzc2FnZSwKICAgICBSZWdpc3Rl
clVSTFNjaGVtZUFzRW1wdHlEb2N1bWVudCwKSW5kZXg6IFdlYktpdDIvU2hhcmVkL0NvcmVJUENT
dXBwb3J0L1dlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oCShy
ZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlByb2Nl
c3NQcm94eU1lc3NhZ2VLaW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIGVu
dW0gS2luZCB7CiAgICAgQWRkQmFja0ZvcndhcmRJdGVtLAogICAgIEdldFBsdWdpbkhvc3RDb25u
ZWN0aW9uLAogICAgIEdldFBsdWdpbnMsCisgICAgUG9wdWxhdGVWaXNpdGVkTGlua3MsCiAgICAg
UG9zdE1lc3NhZ2UsCiB9OwogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNp
b24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsNyBAQCBXZWJDb250ZXh0KiBXZWJDb250ZXh0OjpzaGFyZWRUaHJl
YWRDb250CiBXZWJDb250ZXh0OjpXZWJDb250ZXh0KFByb2Nlc3NNb2RlbCBwcm9jZXNzTW9kZWws
IGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKQogICAgIDogbV9wcm9j
ZXNzTW9kZWwocHJvY2Vzc01vZGVsKQogICAgICwgbV9pbmplY3RlZEJ1bmRsZVBhdGgoaW5qZWN0
ZWRCdW5kbGVQYXRoKQorICAgICwgbV9oaXN0b3J5Q2xpZW50KCp0aGlzKQogewogICAgIFJ1bkxv
b3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwogCkBAIC04OCwxMiArODksMjQgQEAgdm9pZCBX
ZWJDb250ZXh0Ojppbml0aWFsaXplSW5qZWN0ZWRCdW5kbAogICAgIG1faW5qZWN0ZWRCdW5kbGVD
bGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCit2b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxp
emVIaXN0b3J5Q2xpZW50KFdLQ29udGV4dEhpc3RvcnlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBt
X2hpc3RvcnlDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOworICAgIAorICAgIGlmICghaGFzVmFs
aWRQcm9jZXNzKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9wcm9jZXNzLT5z
ZW5kKFdlYlByb2Nlc3NNZXNzYWdlOjpTZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcywgMCwgQ29y
ZUlQQzo6SW4obV9oaXN0b3J5Q2xpZW50LnNob3VsZFRyYWNrVmlzaXRlZExpbmtzKCkpKTsKK30K
Kwogdm9pZCBXZWJDb250ZXh0OjplbnN1cmVXZWJQcm9jZXNzKCkKIHsKICAgICBpZiAobV9wcm9j
ZXNzICYmIG1fcHJvY2Vzcy0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3By
b2Nlc3MgPSBXZWJQcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkuZ2V0V2ViUHJvY2Vzcyh0aGlzKTsK
KworICAgIG1fcHJvY2Vzcy0+c2VuZChXZWJQcm9jZXNzTWVzc2FnZTo6U2V0U2hvdWxkVHJhY2tW
aXNpdGVkTGlua3MsIDAsIENvcmVJUEM6OkluKG1faGlzdG9yeUNsaWVudC5zaG91bGRUcmFja1Zp
c2l0ZWRMaW5rcygpKSk7CiB9CiAKIFdlYlBhZ2VQcm94eSogV2ViQ29udGV4dDo6Y3JlYXRlV2Vi
UGFnZShXZWJQYWdlTmFtZXNwYWNlKiBwYWdlTmFtZXNwYWNlKQpAQCAtMTY1LDYgKzE3OCwzMyBA
QCB2b2lkIFdlYkNvbnRleHQ6OnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1CiAgICAgbV9wcm9jZXNz
LT5zZW5kKFdlYlByb2Nlc3NNZXNzYWdlOjpQb3N0TWVzc2FnZSwgMCwgQ29yZUlQQzo6SW4obWVz
c2FnZSkpOwogfQogCisvLyBIaXN0b3J5Q2xpZW50CisKK3ZvaWQgV2ViQ29udGV4dDo6ZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYk5h
dmlnYXRpb25EYXRhU3RvcmUmIHN0b3JlKSAKK3sKKyAgICBtX2hpc3RvcnlDbGllbnQuZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoZnJhbWUtPnBhZ2UoKSwgc3RvcmUsIGZyYW1lKTsKK30K
Kwordm9pZCBXZWJDb250ZXh0OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWVQcm94
eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uVVJMU3RyaW5nKQoreworICAgIG1faGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xp
ZW50UmVkaXJlY3QoZnJhbWUtPnBhZ2UoKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVS
TFN0cmluZywgZnJhbWUpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdChXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJpbmcpCit7CisgICAgbV9oaXN0b3J5
Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChmcmFtZS0+cGFnZSgpLCBzb3VyY2VVUkxT
dHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBmcmFtZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4
dDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2hpc3RvcnlDbGllbnQuZGlk
VXBkYXRlSGlzdG9yeVRpdGxlKGZyYW1lLT5wYWdlKCksIHRpdGxlLCB1cmwsIGZyYW1lKTsKK30K
Kwordm9pZCBXZWJDb250ZXh0Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCit7CisgICAgbV9oaXN0
b3J5Q2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzKCk7Cit9CisKIHZvaWQgV2ViQ29udGV4dDo6
Z2V0U3RhdGlzdGljcyhXS0NvbnRleHRTdGF0aXN0aWNzKiBzdGF0aXN0aWNzKQogewogICAgIG1l
bXNldChzdGF0aXN0aWNzLCAwLCBzaXplb2YoV0tDb250ZXh0U3RhdGlzdGljcykpOwpJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuaAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRl
ICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzTW9kZWwuaCIKICNpbmNsdWRl
ICJXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTQzLDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBXZWJQYWdlTmFtZXNwYWNlOwogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJlZmVy
ZW5jZXM7Ci1jbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAKIGNsYXNzIFdlYkNvbnRleHQgOiBwdWJs
aWMgQVBJT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTU4LDYgKzU5LDcgQEAgcHVibGljOgogICAgIH5X
ZWJDb250ZXh0KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNsaWVudChX
S0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCopOworICAgIHZvaWQgaW5pdGlhbGl6ZUhpc3Rv
cnlDbGllbnQoV0tDb250ZXh0SGlzdG9yeUNsaWVudCopOwogCiAgICAgUHJvY2Vzc01vZGVsIHBy
b2Nlc3NNb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc01vZGVsOyB9CiAgICAgV2ViUHJv
Y2Vzc1Byb3h5KiBwcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzLmdldCgpOyB9CkBA
IC03Nyw5ICs3OSwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbmplY3RlZEJ1bmRsZSBjbGllbnQK
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYpOwotCiAgICAgdm9pZCBwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKKyAgICAvLyBIaXN0b3J5IGNsaWVudAorICAgIHZvaWQg
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYk5h
dmlnYXRpb25EYXRhU3RvcmUmKTsgCisgICAgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qo
V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsKKyAgICB2b2lkIGRp
ZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGVzdGluYXRpb25V
UkxTdHJpbmcpOworICAgIHZvaWQgZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYkZyYW1lUHJveHkq
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVy
bCk7CisgICAgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOworICAgIAogICAgIHZvaWQgZ2V0
U3RhdGlzdGljcyhXS0NvbnRleHRTdGF0aXN0aWNzKiBzdGF0aXN0aWNzKTsKICAgICB2b2lkIHNl
dEFkZGl0aW9uYWxQbHVnaW5QYXRoKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogCkBAIC05Miw2
ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvbnRleHQoUHJvY2Vzc01vZGVsLCBjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIGluamVjdGVkQnVuZGxlUGF0aCk7CiAKICAgICB2b2lkIGVuc3VyZVdl
YlByb2Nlc3MoKTsKKyAgICBpbmxpbmUgYm9vbCBoYXNWYWxpZFByb2Nlc3MoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2Nlc3MgJiYgbV9wcm9jZXNzLT5pc1ZhbGlkKCk7IH0KIAogICAgIFByb2Nlc3NN
b2RlbCBtX3Byb2Nlc3NNb2RlbDsKICAgICAKQEAgLTEwNCw2ICsxMTMsOCBAQCBwcml2YXRlOgog
ICAgIFdlYkNvcmU6OlN0cmluZyBtX2luamVjdGVkQnVuZGxlUGF0aDsKICAgICBXZWJDb250ZXh0
SW5qZWN0ZWRCdW5kbGVDbGllbnQgbV9pbmplY3RlZEJ1bmRsZUNsaWVudDsKIAorICAgIFdlYkhp
c3RvcnlDbGllbnQgbV9oaXN0b3J5Q2xpZW50OworCiAgICAgUGx1Z2luSW5mb1N0b3JlIG1fcGx1
Z2luSW5mb1N0b3JlOwogfTsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVu
dC5jcHAJKHJldmlzaW9uIDY0MjM4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDUwICszMyw1OSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkhpc3RvcnlDbGllbnQ6Oldl
Ykhpc3RvcnlDbGllbnQoKQorV2ViSGlzdG9yeUNsaWVudDo6V2ViSGlzdG9yeUNsaWVudChXZWJD
b250ZXh0JiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiAgICAgaW5pdGlh
bGl6ZSgwKTsKIH0KIAotdm9pZCBXZWJIaXN0b3J5Q2xpZW50Ojppbml0aWFsaXplKFdLUGFnZUhp
c3RvcnlDbGllbnQqIGNsaWVudCkKK3ZvaWQgV2ViSGlzdG9yeUNsaWVudDo6aW5pdGlhbGl6ZShX
S0NvbnRleHRIaXN0b3J5Q2xpZW50KiBjbGllbnQpCiB7CiAgICAgaWYgKGNsaWVudCAmJiAhY2xp
ZW50LT52ZXJzaW9uKQotICAgICAgICBtX3BhZ2VIaXN0b3J5Q2xpZW50ID0gKmNsaWVudDsKKyAg
ICAgICAgbV9jb250ZXh0SGlzdG9yeUNsaWVudCA9ICpjbGllbnQ7CiAgICAgZWxzZSAKLSAgICAg
ICAgbWVtc2V0KCZtX3BhZ2VIaXN0b3J5Q2xpZW50LCAwLCBzaXplb2YobV9wYWdlSGlzdG9yeUNs
aWVudCkpOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dEhpc3RvcnlDbGllbnQsIDAsIHNpemVv
ZihtX2NvbnRleHRIaXN0b3J5Q2xpZW50KSk7CiB9CiAKIHZvaWQgV2ViSGlzdG9yeUNsaWVudDo6
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBuYXZpZ2F0aW9uRGF0YVN0b3JlLCBXZWJGcmFtZVByb3h5
KiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFnZUhpc3RvcnlDbGllbnQuZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEpCisgICAgaWYgKCFtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZE5hdmln
YXRlV2l0aE5hdmlnYXRpb25EYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8V2Vi
TmF2aWdhdGlvbkRhdGE+IG5hdmlnYXRpb25EYXRhID0gV2ViTmF2aWdhdGlvbkRhdGE6OmNyZWF0
ZShuYXZpZ2F0aW9uRGF0YVN0b3JlKTsgCi0gICAgbV9wYWdlSGlzdG9yeUNsaWVudC5kaWROYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSh0b1JlZihwYWdlKSwgdG9SZWYobmF2aWdhdGlvbkRhdGEu
Z2V0KCkpLCB0b1JlZihmcmFtZSksIG1fcGFnZUhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7Cisg
ICAgbV9jb250ZXh0SGlzdG9yeUNsaWVudC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSh0
b1JlZihwYWdlKSwgdG9SZWYobmF2aWdhdGlvbkRhdGEuZ2V0KCkpLCB0b1JlZihmcmFtZSksIG1f
Y29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKIHZvaWQgV2ViSGlzdG9yeUNs
aWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkwsIFdlYkZyYW1l
UHJveHkqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5kaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QpCisgICAgaWYgKCFtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlSGlzdG9yeUNs
aWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QodG9SZWYocGFnZSksIHRvVVJMUmVmKHNvdXJj
ZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0b1JlZihmcmFt
ZSksIG1fcGFnZUhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CisgICAgbV9jb250ZXh0SGlzdG9y
eUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QodG9SZWYocGFnZSksIHRvVVJMUmVmKHNv
dXJjZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0b1JlZihm
cmFtZSksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKIHZvaWQgV2Vi
SGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYlBhZ2VQcm94eSogcGFn
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkws
IFdlYkZyYW1lUHJveHkqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5k
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpCisgICAgaWYgKCFtX2NvbnRleHRIaXN0b3J5Q2xpZW50
LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdl
SGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QodG9SZWYocGFnZSksIHRvVVJM
UmVmKHNvdXJjZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0
b1JlZihmcmFtZSksIG1fcGFnZUhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CisgICAgbV9jb250
ZXh0SGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QodG9SZWYocGFnZSksIHRv
VVJMUmVmKHNvdXJjZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkp
LCB0b1JlZihmcmFtZSksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAK
IHZvaWQgV2ViSGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94
eSogcGFnZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIFdlYkZyYW1l
UHJveHkqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5kaWRVcGRhdGVI
aXN0b3J5VGl0bGUpCisgICAgaWYgKCFtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhp
c3RvcnlUaXRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlSGlzdG9yeUNsaWVudC5k
aWRVcGRhdGVIaXN0b3J5VGl0bGUodG9SZWYocGFnZSksIHRvUmVmKHRpdGxlLmltcGwoKSksIHRv
VVJMUmVmKHVybC5pbXBsKCkpLCB0b1JlZihmcmFtZSksIG1fcGFnZUhpc3RvcnlDbGllbnQuY2xp
ZW50SW5mbyk7CisgICAgbV9jb250ZXh0SGlzdG9yeUNsaWVudC5kaWRVcGRhdGVIaXN0b3J5VGl0
bGUodG9SZWYocGFnZSksIHRvUmVmKHRpdGxlLmltcGwoKSksIHRvVVJMUmVmKHVybC5pbXBsKCkp
LCB0b1JlZihmcmFtZSksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7Cit9CisK
K3ZvaWQgV2ViSGlzdG9yeUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQoreworICAgIGlm
ICghbV9jb250ZXh0SGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRMaW5rcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jb250ZXh0SGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRMaW5r
cyh0b1JlZigmbV9jb250ZXh0KSwgbV9jb250ZXh0SGlzdG9yeUNsaWVudC5jbGllbnRJbmZvKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJI
aXN0b3J5Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9y
eUNsaWVudC5oCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3Rv
cnlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJI
aXN0b3J5Q2xpZW50X2gKICNkZWZpbmUgV2ViSGlzdG9yeUNsaWVudF9oCiAKLSNpbmNsdWRlICJX
S1BhZ2UuaCIKKyNpbmNsdWRlICJXS0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFN0cmluZzsKQEAgLTM0LDIyICszNCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViRnJh
bWVQcm94eTsKIHN0cnVjdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlOwogY2xhc3MgV2ViUGFnZVBy
b3h5OwogCiBjbGFzcyBXZWJIaXN0b3J5Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBXZWJIaXN0b3J5
Q2xpZW50KCk7Ci0gICAgdm9pZCBpbml0aWFsaXplKFdLUGFnZUhpc3RvcnlDbGllbnQqKTsKKyAg
ICBXZWJIaXN0b3J5Q2xpZW50KFdlYkNvbnRleHQmKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0tD
b250ZXh0SGlzdG9yeUNsaWVudCopOwogCiAgICAgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0
aW9uRGF0YShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiwgV2Vi
RnJhbWVQcm94eSopOwogICAgIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYlBhZ2VQ
cm94eSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc291cmNlVVJMLCBjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGRlc3RpbmF0aW9uVVJMLCBXZWJGcmFtZVByb3h5Kik7CiAgICAgdm9pZCBkaWRQZXJm
b3JtU2VydmVyUmVkaXJlY3QoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBz
b3VyY2VVUkwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGVzdGluYXRpb25VUkwsIFdlYkZyYW1l
UHJveHkqKTsKICAgICB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXZWJQYWdlUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVybCwg
V2ViRnJhbWVQcm94eSopOworICAgIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKIAorICAg
IGJvb2wgc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRI
aXN0b3J5Q2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzOyB9CisgICAgCiBwcml2YXRlOgotICAg
IFdLUGFnZUhpc3RvcnlDbGllbnQgbV9wYWdlSGlzdG9yeUNsaWVudDsKKyAgICBXZWJDb250ZXh0
JiBtX2NvbnRleHQ7CisgICAgV0tDb250ZXh0SGlzdG9yeUNsaWVudCBtX2NvbnRleHRIaXN0b3J5
Q2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY0MjM4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsNiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVVJQ2xpZW50KFdLCiAgICAgbV91aUNsaWVudC5pbml0aWFs
aXplKGNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplSGlzdG9yeUNs
aWVudChXS1BhZ2VIaXN0b3J5Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9oaXN0b3J5Q2xpZW50
LmluaXRpYWxpemUoY2xpZW50KTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OnJldml2ZSgpCiB7
CiAgICAgbV92YWxpZCA9IHRydWU7CkBAIC01NzIsNyArNTY3LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcgogICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsK
ICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmRlY29kZShDb3JlSVBDOjpPdXQoc3RvcmUsIGZy
YW1lSUQpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWROYXZpZ2F0
ZVdpdGhOYXZpZ2F0aW9uRGF0YSh3ZWJGcmFtZShmcmFtZUlEKSwgc3RvcmUpOworICAgICAgICAg
ICAgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCktPmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25E
YXRhKHdlYkZyYW1lKGZyYW1lSUQpLCBzdG9yZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFBlcmZvcm1DbGllbnRS
ZWRpcmVjdDogewpAQCAtNTgxLDcgKzU3Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZShDb3IKICAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7CiAgICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQQzo6T3V0KHNvdXJjZVVSTFN0cmluZywgZGVz
dGluYXRpb25VUkxTdHJpbmcsIGZyYW1lSUQpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qod2ViRnJhbWUoZnJhbWVJRCksIHNv
dXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcpOworICAgICAgICAgICAgcGFnZU5h
bWVzcGFjZSgpLT5jb250ZXh0KCktPmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh3ZWJGcmFtZShm
cmFtZUlEKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdDogewpAQCAtNTkwLDcgKzU4NSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAgICAgIHVpbnQ2NF90IGZy
YW1lSUQ7CiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQQzo6T3V0KHNv
dXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1lSUQpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Qod2Vi
RnJhbWUoZnJhbWVJRCksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcpOwor
ICAgICAgICAgICAgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCktPmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdCh3ZWJGcmFtZShmcmFtZUlEKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVS
TFN0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFVwZGF0ZUhpc3RvcnlUaXRsZTogewpAQCAtNTk5LDcgKzU5
NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAg
ICAgIHVpbnQ2NF90IGZyYW1lSUQ7CiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUo
Q29yZUlQQzo6T3V0KHRpdGxlLCB1cmwsIGZyYW1lSUQpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBkaWRVcGRhdGVIaXN0b3J5VGl0bGUod2ViRnJhbWUoZnJhbWVJRCks
IHRpdGxlLCB1cmwpOworICAgICAgICAgICAgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCktPmRp
ZFVwZGF0ZUhpc3RvcnlUaXRsZSh3ZWJGcmFtZShmcmFtZUlEKSwgdGl0bGUsIHVybCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkJhY2tGb3J3YXJkQWRkSXRlbTogewpAQCAtODY1LDI4ICs4NjAsNiBAQCBTdHJpbmcgV2Vi
UGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0CiAgICAgcmV0dXJuIG1fdWlDbGllbnQucnVu
SmF2YVNjcmlwdFByb21wdCh0aGlzLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIGZyYW1lKTsKIH0K
IAotLy8gSGlzdG9yeUNsaWVudAotCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYk5hdmlnYXRpb25E
YXRhU3RvcmUmIHN0b3JlKSAKLXsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEodGhpcywgc3RvcmUsIGZyYW1lKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJp
bmcpCi17Ci0gICAgbV9oaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh0aGlz
LCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBmcmFtZSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViRnJhbWVQcm94eSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uVVJMU3RyaW5nKQotewotICAgIG1faGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QodGhpcywgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgZnJh
bWUpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCkK
LXsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxlKHRoaXMsIHRpdGxl
LCB1cmwsIGZyYW1lKTsKLX0KLQogLy8gQmFja0ZvcndhcmRMaXN0CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjphZGRJdGVtVG9CYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRl
bSkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2NDIzOCkKKysrIFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5
Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVMb2FkZXJDbGllbnQoV0tQYWdlTG9h
ZGVyQ2xpZW50Kik7CiAgICAgdm9pZCBpbml0aWFsaXplUG9saWN5Q2xpZW50KFdLUGFnZVBvbGlj
eUNsaWVudCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZVVJQ2xpZW50KFdLUGFnZVVJQ2xpZW50Kik7
Ci0gICAgdm9pZCBpbml0aWFsaXplSGlzdG9yeUNsaWVudChXS1BhZ2VIaXN0b3J5Q2xpZW50Kik7
CiAKICAgICB2b2lkIHJldml2ZSgpOwogCkBAIC0xOTAsMTEgKzE4OSw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJik7CiAgICAgV2ViQ29yZTo6U3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9t
cHQoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOwogCi0gICAgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YShXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYpOyAKLSAgICB2
b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGVzdGlu
YXRpb25VUkxTdHJpbmcpOwotICAgIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYkZy
YW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBkZXN0aW5hdGlvblVSTFN0cmluZyk7Ci0gICAgdm9pZCBkaWRVcGRh
dGVIaXN0b3J5VGl0bGUoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdGl0
bGUsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdXJsKTsKLQogICAgIHZvaWQgYWRkSXRlbVRvQmFj
a0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKICAgICB2b2lkIGdvVG9JdGVt
SW5CYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOwogCkBAIC0yMTQsNyAr
MjA4LDYgQEAgcHJpdmF0ZToKICAgICBXZWJMb2FkZXJDbGllbnQgbV9sb2FkZXJDbGllbnQ7CiAg
ICAgV2ViUG9saWN5Q2xpZW50IG1fcG9saWN5Q2xpZW50OwogICAgIFdlYlVJQ2xpZW50IG1fdWlD
bGllbnQ7Ci0gICAgV2ViSGlzdG9yeUNsaWVudCBtX2hpc3RvcnlDbGllbnQ7CiAKICAgICBPd25Q
dHI8RHJhd2luZ0FyZWFQcm94eT4gbV9kcmF3aW5nQXJlYTsKICAgICBSZWZQdHI8V2ViUGFnZU5h
bWVzcGFjZT4gbV9wYWdlTmFtZXNwYWNlOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsMTAgQEAgdm9pZCBXZWJQ
cm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKAogICAgICAgICAgICAgICAgIGFkZE9yVXBk
YXRlQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtSUQsIG9yaWdpbmFsVVJMLCB1cmwsIHRpdGxlKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFdlYlByb2Nlc3NQcm94eU1lc3NhZ2U6OlBvcHVsYXRlVmlzaXRlZExpbmtzOiB7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5wb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgc3lu
Y2hyb25vdXMgbWVzc2FnZXMgYW5kIHNob3VsZCBuZXZlciBiZSBoYW5kbGVkIGhlcmUuCiAgICAg
ICAgICAgICBjYXNlIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2U6OkdldFBsdWdpbnM6CkBAIC0yOTUs
NiArMjk5LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzcwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgYXN5bmNocm9ub3VzIG1lc3Nh
Z2VzIGFuZCBzaG91bGQgbmV2ZXIgYmUgaGFuZGxlZCBoZXJlLgorICAgICAgICAgICAgY2FzZSBX
ZWJQcm9jZXNzUHJveHlNZXNzYWdlOjpQb3B1bGF0ZVZpc2l0ZWRMaW5rczoKICAgICAgICAgICAg
IGNhc2UgV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZTo6UG9zdE1lc3NhZ2U6CiAgICAgICAgICAgICBj
YXNlIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2U6OkFkZEJhY2tGb3J3YXJkSXRlbToKICAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0LmNwcAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMiBAQCB2b2lkIFdL
Q29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KFdLCiAgICAgICAgIHRvV0soY29udGV4dFJl
ZiktPmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNsaWVudCh3a0NsaWVudCk7CiB9CiAKK3ZvaWQg
V0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tDb250
ZXh0SGlzdG9yeUNsaWVudCAqIHdrQ2xpZW50KQoreworICAgIGlmICh3a0NsaWVudCAmJiAhd2tD
bGllbnQtPnZlcnNpb24pCisgICAgICAgIHRvV0soY29udGV4dFJlZiktPmluaXRpYWxpemVIaXN0
b3J5Q2xpZW50KHdrQ2xpZW50KTsKK30KKwogdm9pZCBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VS
ZWYpCiB7CiAgICAgdG9XSyhjb250ZXh0UmVmKS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KHRvV0sobWVzc2FnZVJlZiktPnN0cmluZygpKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwyNCBAQCBzdHJ1Y3QgV0tDb250
ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgewogfTsKIHR5cGVkZWYgc3RydWN0IFdLQ29udGV4dElu
amVjdGVkQnVuZGxlQ2xpZW50IFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50OwogCisvLyBI
aXN0b3J5IENsaWVudAordHlwZWRlZiB2b2lkICgqV0tDb250ZXh0RGlkTmF2aWdhdGVXaXRoTmF2
aWdhdGlvbkRhdGFDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvbkRhdGFSZWYg
bmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwordHlwZWRlZiB2b2lkICgqV0tDb250ZXh0RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0Q2FsbGJh
Y2spKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0
aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVk
ZWYgdm9pZCAoKldLQ29udGV4dERpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrKShXS1Bh
Z2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwg
V0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQg
KCpXS0NvbnRleHREaWRVcGRhdGVIaXN0b3J5VGl0bGVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tDb250ZXh0UG9wdWxhdGVWaXNp
dGVkTGlua3NDYWxsYmFjaykoV0tDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOworCitzdHJ1Y3QgV0tDb250ZXh0SGlzdG9yeUNsaWVudCB7CisgICAgaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJzaW9uOworICAgIGNvbnN0IHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SW5mbzsKKyAgICBXS0NvbnRleHREaWRO
YXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YUNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgIGRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOworICAgIFdLQ29udGV4dERpZFBlcmZvcm1DbGll
bnRSZWRpcmVjdENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0OworICAgIFdLQ29udGV4dERpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdENhbGxi
YWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Owor
ICAgIFdLQ29udGV4dERpZFVwZGF0ZUhpc3RvcnlUaXRsZUNhbGxiYWNrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworICAgIFdLQ29udGV4dFBvcHVs
YXRlVmlzaXRlZExpbmtzQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9w
dWxhdGVWaXNpdGVkTGlua3M7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tDb250ZXh0SGlzdG9yeUNs
aWVudCBXS0NvbnRleHRIaXN0b3J5Q2xpZW50OworCiBXS19FWFBPUlQgV0tDb250ZXh0UmVmIFdL
Q29udGV4dENyZWF0ZSgpOwogV0tfRVhQT1JUIFdLQ29udGV4dFJlZiBXS0NvbnRleHRDcmVhdGVX
aXRoSW5qZWN0ZWRCdW5kbGVQYXRoKFdLU3RyaW5nUmVmIHBhdGgpOwogV0tfRVhQT1JUIFdLQ29u
dGV4dFJlZiBXS0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOwpAQCAtNDksNiArNjcs
NyBAQCBXS19FWFBPUlQgV0tDb250ZXh0UmVmIFdLQ29udGV4dEdldFNoYXJlCiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRQcmVmZXJlbmNlcyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiBXS19FWFBPUlQgV0tQcmVmZXJlbmNlc1JlZiBXS0Nv
bnRleHRHZXRQcmVmZXJlbmNlcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKK1dLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldEhpc3RvcnlDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29u
dGV4dEhpc3RvcnlDbGllbnQgKiBjbGllbnQpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0
SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dEluamVj
dGVkQnVuZGxlQ2xpZW50ICogY2xpZW50KTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0UG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1Jl
ZiBtZXNzYWdlKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24g
NjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsMTIgKzE0NCw2IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFn
ZVJlZiBwYWcKICAgICAgICAgdG9XSyhwYWdlUmVmKS0+aW5pdGlhbGl6ZVVJQ2xpZW50KHdrQ2xp
ZW50KTsKIH0KIAotdm9pZCBXS1BhZ2VTZXRQYWdlSGlzdG9yeUNsaWVudChXS1BhZ2VSZWYgcGFn
ZVJlZiwgV0tQYWdlSGlzdG9yeUNsaWVudCAqIHdrQ2xpZW50KQotewotICAgIGlmICh3a0NsaWVu
dCAmJiAhd2tDbGllbnQtPnZlcnNpb24pCi0gICAgICAgIHRvV0socGFnZVJlZiktPmluaXRpYWxp
emVIaXN0b3J5Q2xpZW50KHdrQ2xpZW50KTsKLX0KLQogdm9pZCBXS1BhZ2VSdW5KYXZhU2NyaXB0
SW5NYWluRnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHNjcmlwdFJlZiwgdm9p
ZCogY29udGV4dCwgV0tQYWdlUnVuSmF2YVNjcmlwdEZ1bmN0aW9uIGNhbGxiYWNrLCBXS1BhZ2VS
dW5KYXZhU2NyaXB0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2VGdW5jdGlvbikKIHsKICAgICB0b1dL
KHBhZ2VSZWYpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUodG9XSyhzY3JpcHRSZWYpLT5zdHJp
bmcoKSwgU2NyaXB0UmV0dXJuVmFsdWVDYWxsYmFjazo6Y3JlYXRlKGNvbnRleHQsIGNhbGxiYWNr
LCBkaXNwb3NlRnVuY3Rpb24pKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShyZXZp
c2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsMjMgKzEzMyw2IEBAIHN0cnVjdCBXS1BhZ2VVSUNsaWVudCB7CiB9Owog
dHlwZWRlZiBzdHJ1Y3QgV0tQYWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7CiAKLS8vIEhpc3Rv
cnkgQ2xpZW50Ci10eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0
aW9uRGF0YSwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBl
ZGVmIHZvaWQgKCpXS1BhZ2VEaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RDYWxsYmFjaykoV0tQYWdl
UmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdL
RnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgq
V0tQYWdlRGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBX
S1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZy
YW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLUGFnZURpZFVw
ZGF0ZUhpc3RvcnlUaXRsZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0
bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5m
byk7Ci0KLXN0cnVjdCBXS1BhZ2VIaXN0b3J5Q2xpZW50IHsKLSAgICBpbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNp
b247Ci0gICAgY29uc3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotICAgIFdLUGFnZURpZE5hdmlnYXRlV2l0
aE5hdmlnYXRpb25EYXRhQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgZGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGE7Ci0gICAgV0tQYWdlRGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0
Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVk
aXJlY3Q7Ci0gICAgV0tQYWdlRGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Q2FsbGJhY2sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q7Ci0gICAgV0tQ
YWdlRGlkVXBkYXRlSGlzdG9yeVRpdGxlQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWRVcGRhdGVIaXN0b3J5VGl0bGU7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgV0tQYWdl
SGlzdG9yeUNsaWVudCBXS1BhZ2VIaXN0b3J5Q2xpZW50OwotCi0KIFdLX0VYUE9SVCBXS1BhZ2VO
YW1lc3BhY2VSZWYgV0tQYWdlR2V0UGFnZU5hbWVzcGFjZShXS1BhZ2VSZWYgcGFnZSk7CiAKIFdL
X0VYUE9SVCB2b2lkIFdLUGFnZUxvYWRVUkwoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHVybCk7
CkBAIC0xNzgsNyArMTYxLDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlVGVybWluYXRlKFdLUGFn
ZVJlZgogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYg
cGFnZSwgV0tQYWdlTG9hZGVyQ2xpZW50ICogY2xpZW50KTsKIFdLX0VYUE9SVCB2b2lkIFdLUGFn
ZVNldFBhZ2VQb2xpY3lDbGllbnQoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZVBvbGljeUNsaWVudCAq
IGNsaWVudCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVm
IHBhZ2UsIFdLUGFnZVVJQ2xpZW50ICogY2xpZW50KTsKLVdLX0VYUE9SVCB2b2lkIFdLUGFnZVNl
dFBhZ2VIaXN0b3J5Q2xpZW50KFdLUGFnZVJlZiBwYWdlLCBXS1BhZ2VIaXN0b3J5Q2xpZW50ICog
Y2xpZW50KTsKIAogdHlwZWRlZiB2b2lkICgqV0tQYWdlUnVuSmF2YVNjcmlwdEZ1bmN0aW9uKShX
S1N0cmluZ1JlZiwgdm9pZCopOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlUnVuSmF2YVNjcmlwdERp
c3Bvc2VGdW5jdGlvbikodm9pZCopOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAko
cmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0
b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0xOTcsNiArMTk4LDE1IEBAIHZvaWQgV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUkKICAgICAgICAgICAgICAgICBzZXRBcHBsaWNhdGlvbkNh
Y2hlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBXZWJQcm9jZXNzTWVzc2FnZTo6U2V0U2hvdWxkVHJh
Y2tWaXNpdGVkTGlua3M6IHsKKyAgICAgICAgICAgICAgICBib29sIHNob3VsZFRyYWNrVmlzaXRl
ZExpbmtzOworICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6
T3V0KHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQYWdlR3JvdXA6OnNldFNob3Vs
ZFRyYWNrVmlzaXRlZExpbmtzKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgV2ViUHJvY2Vzc01lc3NhZ2U6OkNyZWF0ZTogewogICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHBhZ2VJRCA9IGFyZ3VtZW50cy0+ZGVzdGluYXRpb25JRCgpOwogICAgICAgICAgICAgICAgIElu
dFNpemUgdmlld1NpemU7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VL
aW5kcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC0zODUsNyArMzg2LDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaAogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlByb2Nlc3NQcm94
eU1lc3NhZ2U6OlBvcHVsYXRlVmlzaXRlZExpbmtzLCAwLCBDb3JlSVBDOjpJbigpKTsKIH0KIAog
RmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0KQpJbmRleDog
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjQyNDIpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmlyc3QgcGFzcyBhdCB2aXNpdGVkIGxpbmsgc3VwcG9ydCBmb3IgV0syCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE1NworCisgICAgICAgICog
TWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm06CisgICAgICAgIChkaWROYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAg
ICAgICAoZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKGRpZFVwZGF0ZUhpc3Rv
cnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGZvciB0aGUg
bmV3IHZlcnNpb24gb2YgdGhlIEhpc3RvcnlDbGllbnQuCisgICAgICAgICgtW0Jyb3dzZXJBcHBE
ZWxlZ2F0ZSBpbml0XSk6IFNldCB0aGUgSGlzdG9yeUNsaWVudCByaWdodCBhZnRlciBjcmVhdGlu
ZyB0aGUgY29udGV4dChzKQorICAgICAgICAKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMvQnJv
d3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAgICAgKC1bQnJvd3NlcldpbmRvd0NvbnRyb2xs
ZXIgYXdha2VGcm9tTmliXSk6CisKIDIwMTAtMDctMjggIFJvYmluIER1bm4gIDxyb2JpbkBhbGxk
dW5uLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZXZpbiBPbGxpdmllci4KSW5kZXg6IFdl
YktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCShyZXZpc2lvbiA2NDIzOCkK
KysrIFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw4ICsyOCw5IEBACiAjaW1wb3J0ICJCcm93c2VyV2luZG93Q29udHJvbGxlci5o
IgogI2ltcG9ydCAiQnJvd3NlclN0YXRpc3RpY3NXaW5kb3dDb250cm9sbGVyLmgiCiAKLSNpbXBv
cnQgPFdlYktpdDIvV0tTdHJpbmdDRi5oPgogI2ltcG9ydCA8V2ViS2l0Mi9XS0NvbnRleHRQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLU3RyaW5nQ0YuaD4KKyNpbXBvcnQgPFdlYktpdDIv
V0tVUkxDRi5oPgogCiBzdGF0aWMgTlNTdHJpbmcgKmRlZmF1bHRVUkwgPSBAImh0dHA6Ly93d3cu
d2Via2l0Lm9yZy8iOwogCkBAIC00Niw2ICs0Nyw1NSBAQCB2b2lkIF9kaWRSZWNpZXZlTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsCiAgICAgV0tTdHJpbmdSZWxlYXNlKG5ld01lc3NhZ2UpOwogfQog
CisjcHJhZ21hIG1hcmsgSGlzdG9yeSBDbGllbnQgQ2FsbGJhY2tzCisKK3N0YXRpYyB2b2lkIGRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25E
YXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQoreworICAgIFdLU3RyaW5nUmVmIHdrVGl0bGUgPSBXS05hdmlnYXRpb25EYXRhQ29w
eVRpdGxlKG5hdmlnYXRpb25EYXRhKTsKKyAgICBDRlN0cmluZ1JlZiB0aXRsZSA9IFdLU3RyaW5n
Q29weUNGU3RyaW5nKDAsIHdrVGl0bGUpOworICAgIFdLU3RyaW5nUmVsZWFzZSh3a1RpdGxlKTsK
KworICAgIFdLVVJMUmVmIHdrVVJMID0gV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlv
bkRhdGEpOworICAgIENGVVJMUmVmIHVybCA9IFdLVVJMQ29weUNGVVJMKDAsIHdrVVJMKTsKKyAg
ICBXS1VSTFJlbGVhc2Uod2tVUkwpOworCisgICAgTE9HKEAiSGlzdG9yeUNsaWVudCAtIGRpZE5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhIC0gdGl0bGU6ICVAIC0gdXJsOiAlQCIsIHRpdGxlLCB1
cmwpOworICAgIENGUmVsZWFzZSh0aXRsZSk7CisgICAgQ0ZSZWxlYXNlKHVybCk7Cit9CisKK3N0
YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS1BhZ2VSZWYgcGFnZSwgV0tVUkxS
ZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiBmcmFtZSwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBDRlVSTFJlZiBjZlNvdXJjZVVSTCA9IFdL
VVJMQ29weUNGVVJMKDAsIHNvdXJjZVVSTCk7CisgICAgQ0ZVUkxSZWYgY2ZEZXN0aW5hdGlvblVS
TCA9IFdLVVJMQ29weUNGVVJMKDAsIGRlc3RpbmF0aW9uVVJMKTsKKyAgICBMT0coQCJIaXN0b3J5
Q2xpZW50IC0gZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0IC0gc291cmNlVVJMOiAlQCAtIGRlc3Rp
bmF0aW9uVVJMOiAlQCIsIGNmU291cmNlVVJMLCBjZkRlc3RpbmF0aW9uVVJMKTsKKyAgICBDRlJl
bGVhc2UoY2ZTb3VyY2VVUkwpOworICAgIENGUmVsZWFzZShjZkRlc3RpbmF0aW9uVVJMKTsKK30K
Kworc3RhdGljIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLUGFnZVJlZiBwYWdlLCBX
S1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZy
YW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIENGVVJMUmVmIGNmU291cmNlVVJM
ID0gV0tVUkxDb3B5Q0ZVUkwoMCwgc291cmNlVVJMKTsKKyAgICBDRlVSTFJlZiBjZkRlc3RpbmF0
aW9uVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgZGVzdGluYXRpb25VUkwpOworICAgIExPRyhAIkhp
c3RvcnlDbGllbnQgLSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QgLSBzb3VyY2VVUkw6ICVAIC0g
ZGVzdGluYXRpb25VUkw6ICVAIiwgY2ZTb3VyY2VVUkwsIGNmRGVzdGluYXRpb25VUkwpOworICAg
IENGUmVsZWFzZShjZlNvdXJjZVVSTCk7CisgICAgQ0ZSZWxlYXNlKGNmRGVzdGluYXRpb25VUkwp
OworfQorCitzdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgQ0ZTdHJpbmdSZWYgY2ZUaXRsZSA9IFdLU3RyaW5n
Q29weUNGU3RyaW5nKDAsIHRpdGxlKTsKKyAgICBDRlVSTFJlZiBjZlVSTCA9IFdLVVJMQ29weUNG
VVJMKDAsIFVSTCk7CisgICAgTE9HKEAiSGlzdG9yeUNsaWVudCAtIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZSAtIHRpdGxlOiAlQCAtIFVSTDogJUAiLCBjZlRpdGxlLCBjZlVSTCk7CisgICAgQ0ZSZWxl
YXNlKGNmVGl0bGUpOworICAgIENGUmVsZWFzZShjZlVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIHBv
cHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQoreworICAgIExPRyhAIkhpc3RvcnlDbGllbnQgLSBwb3B1bGF0ZVZpc2l0ZWRMaW5r
cyIpOworfQorCiAtIChpZClpbml0CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKQEAgLTU2
LDYgKzEwNiwxNyBAQCAtIChpZClpbml0CiAgICAgICAgICAgICBjdXJyZW50UHJvY2Vzc01vZGVs
ID0ga1Byb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7CiAKICAgICAgICAgV0tDb250
ZXh0UmVmIHRocmVhZENvbnRleHQgPSBXS0NvbnRleHRHZXRTaGFyZWRUaHJlYWRDb250ZXh0KCk7
CisgICAgICAgIFdLQ29udGV4dEhpc3RvcnlDbGllbnQgaGlzdG9yeUNsaWVudCA9IHsKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEsCisgICAgICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QsCisg
ICAgICAgICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QsCisgICAgICAgICAgICBkaWRVcGRh
dGVIaXN0b3J5VGl0bGUsCisgICAgICAgICAgICBwb3B1bGF0ZVZpc2l0ZWRMaW5rcworICAgICAg
ICB9OworICAgICAgICBXS0NvbnRleHRTZXRIaXN0b3J5Q2xpZW50KHRocmVhZENvbnRleHQsICZo
aXN0b3J5Q2xpZW50KTsKKyAgICAKICAgICAgICAgdGhyZWFkUGFnZU5hbWVzcGFjZSA9IFdLUGFn
ZU5hbWVzcGFjZUNyZWF0ZSh0aHJlYWRDb250ZXh0KTsKICAgICAgICAgV0tDb250ZXh0UmVsZWFz
ZSh0aHJlYWRDb250ZXh0KTsKIApAQCAtNzAsNiArMTMxLDcgQEAgLSAoaWQpaW5pdAogICAgICAg
ICAgICAgX2RpZFJlY2lldmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlCiAgICAgICAgIH07CiAg
ICAgICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KHByb2Nlc3NDb250ZXh0LCAm
YnVuZGxlQ2xpZW50KTsKKyAgICAgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChwcm9jZXNz
Q29udGV4dCwgJmhpc3RvcnlDbGllbnQpOwogICAgICAgICAKICAgICAgICAgcHJvY2Vzc1BhZ2VO
YW1lc3BhY2UgPSBXS1BhZ2VOYW1lc3BhY2VDcmVhdGUocHJvY2Vzc0NvbnRleHQpOwogICAgICAg
ICBXS0NvbnRleHRSZWxlYXNlKHByb2Nlc3NDb250ZXh0KTsKSW5kZXg6IFdlYktpdFRvb2xzL01p
bmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCShyZXZp
c2lvbiA2NDIzOCkKKysrIFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93
Q29udHJvbGxlci5tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNTAgKzM2Myw2IEBAIHN0YXRpYyBX
S1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFcKICAgICByZXR1cm4gV0tTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXJlc3VsdCk7CiB9CiAKLSNwcmFnbWEgbWFyayBI
aXN0b3J5IENsaWVudCBDYWxsYmFja3MKLQotc3RhdGljIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2
aWdhdGlvbkRhdGEoV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlv
bkRhdGEsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCi17Ci0gICAg
V0tTdHJpbmdSZWYgd2tUaXRsZSA9IFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUobmF2aWdhdGlv
bkRhdGEpOwotICAgIENGU3RyaW5nUmVmIHRpdGxlID0gV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwg
d2tUaXRsZSk7Ci0gICAgV0tTdHJpbmdSZWxlYXNlKHdrVGl0bGUpOwotCi0gICAgV0tVUkxSZWYg
d2tVUkwgPSBXS05hdmlnYXRpb25EYXRhQ29weVVSTChuYXZpZ2F0aW9uRGF0YSk7Ci0gICAgQ0ZV
UkxSZWYgdXJsID0gV0tVUkxDb3B5Q0ZVUkwoMCwgd2tVUkwpOwotICAgIFdLVVJMUmVsZWFzZSh3
a1VSTCk7Ci0KLSAgICBMT0coQCJIaXN0b3J5Q2xpZW50IC0gZGlkTmF2aWdhdGVXaXRoTmF2aWdh
dGlvbkRhdGEgLSB0aXRsZTogJUAgLSB1cmw6ICVAIiwgdGl0bGUsIHVybCk7Ci0gICAgQ0ZSZWxl
YXNlKHRpdGxlKTsKLSAgICBDRlJlbGVhc2UodXJsKTsKLX0KLQotc3RhdGljIHZvaWQgZGlkUGVy
Zm9ybUNsaWVudFJlZGlyZWN0KFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdL
VVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQotewotICAgIENGVVJMUmVmIGNmU291cmNlVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwg
c291cmNlVVJMKTsKLSAgICBDRlVSTFJlZiBjZkRlc3RpbmF0aW9uVVJMID0gV0tVUkxDb3B5Q0ZV
UkwoMCwgZGVzdGluYXRpb25VUkwpOwotICAgIExPRyhAIkhpc3RvcnlDbGllbnQgLSBkaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3QgLSBzb3VyY2VVUkw6ICVAIC0gZGVzdGluYXRpb25VUkw6ICVAIiwg
Y2ZTb3VyY2VVUkwsIGNmRGVzdGluYXRpb25VUkwpOwotICAgIENGUmVsZWFzZShjZlNvdXJjZVVS
TCk7Ci0gICAgQ0ZSZWxlYXNlKGNmRGVzdGluYXRpb25VUkwpOwotfQotCi1zdGF0aWMgdm9pZCBk
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVS
TCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pCi17Ci0gICAgQ0ZVUkxSZWYgY2ZTb3VyY2VVUkwgPSBXS1VSTENvcHlDRlVS
TCgwLCBzb3VyY2VVUkwpOwotICAgIENGVVJMUmVmIGNmRGVzdGluYXRpb25VUkwgPSBXS1VSTENv
cHlDRlVSTCgwLCBkZXN0aW5hdGlvblVSTCk7Ci0gICAgTE9HKEAiSGlzdG9yeUNsaWVudCAtIGRp
ZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCAtIHNvdXJjZVVSTDogJUAgLSBkZXN0aW5hdGlvblVSTDog
JUAiLCBjZlNvdXJjZVVSTCwgY2ZEZXN0aW5hdGlvblVSTCk7Ci0gICAgQ0ZSZWxlYXNlKGNmU291
cmNlVVJMKTsKLSAgICBDRlJlbGVhc2UoY2ZEZXN0aW5hdGlvblVSTCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0
bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5m
bykKLXsKLSAgICBDRlN0cmluZ1JlZiBjZlRpdGxlID0gV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwg
dGl0bGUpOwotICAgIENGVVJMUmVmIGNmVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgVVJMKTsKLSAg
ICBMT0coQCJIaXN0b3J5Q2xpZW50IC0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlIC0gdGl0bGU6ICVA
IC0gVVJMOiAlQCIsIGNmVGl0bGUsIGNmVVJMKTsKLSAgICBDRlJlbGVhc2UoY2ZUaXRsZSk7Ci0g
ICAgQ0ZSZWxlYXNlKGNmVVJMKTsKLX0KLQogLSAodm9pZClhd2FrZUZyb21OaWIKIHsKICAgICBf
d2ViVmlldyA9IFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltjb250YWluZXJWaWV3IGZy
YW1lXSBwYWdlTmFtZXNwYWNlUmVmOl9wYWdlTmFtZXNwYWNlXTsKQEAgLTQ1OCwxNyArNDE0LDYg
QEAgLSAodm9pZClhd2FrZUZyb21OaWIKICAgICAgICAgcnVuSmF2YVNjcmlwdFByb21wdAogICAg
IH07CiAgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KF93ZWJWaWV3LnBhZ2VSZWYsICZ1aUNsaWVu
dCk7Ci0KLSAgICBXS1BhZ2VIaXN0b3J5Q2xpZW50IGhpc3RvcnlDbGllbnQgPSB7Ci0gICAgICAg
IDAsCi0gICAgICAgIHNlbGYsCi0gICAgICAgIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
LAotICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QsCi0gICAgICAgIGRpZFBlcmZvcm1T
ZXJ2ZXJSZWRpcmVjdCwKLSAgICAgICAgZGlkVXBkYXRlSGlzdG9yeVRpdGxlLAotICAgIH07Ci0K
LSAgICBXS1BhZ2VTZXRQYWdlSGlzdG9yeUNsaWVudChfd2ViVmlldy5wYWdlUmVmLCAmaGlzdG9y
eUNsaWVudCk7CiB9CiAKIC0gKHZvaWQpZGlkU3RhcnRQcm9ncmVzcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62896</attachid>
            <date>2010-07-28 17:24:19 -0700</date>
            <delta_ts>2010-07-28 17:33:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43157-20100728172418.patch</filename>
            <type>text/plain</type>
            <size>44631</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI0NikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMTAtMDctMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
cnN0IHBhc3MgYXQgdmlzaXRlZCBsaW5rIHN1cHBvcnQgZm9yIFdLMgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxNTcKKworICAgICAgICAqIFNoYXJl
ZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaDoKKyAgICAgICAgKFdl
YlBhZ2VQcm94eU1lc3NhZ2U6Oik6CisgICAgICAgICogU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dl
YlByb2Nlc3NNZXNzYWdlS2luZHMuaDoKKyAgICAgICAgKFdlYlByb2Nlc3NNZXNzYWdlOjopOgor
ICAgICAgICAqIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQcm9jZXNzUHJveHlNZXNzYWdlS2lu
ZHMuaDoKKyAgICAgICAgKFdlYlByb2Nlc3NQcm94eU1lc3NhZ2U6Oik6CisKKyAgICAgICAgTW92
ZSBIaXN0b3J5Q2xpZW50IHN1cHBvcnQgZnJvbSB0aGUgcGFnZS4uLjoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdl
Lmg6CisgICAgICAgIAorICAgICAgICAuLi50byB0aGUgQ29udGV4dAorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0SGlzdG9yeUNs
aWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oOgorCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
Ojppbml0aWFsaXplSGlzdG9yeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6
OmVuc3VyZVdlYlByb2Nlc3MpOiBXaGVuIGEgbmV3IFdlYlByb2Nlc3MgaXMgY3JlYXRlZCwgc2V0
IGl0cyAic2hvdWxkIHRyYWNrIHZpc2l0ZWQgbGlua3MiIG1vZGUuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRleHQ6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dDo6cG9wdWxhdGVWaXNpdGVkTGlua3MpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb250ZXh0Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6Omhhc1ZhbGlkUHJv
Y2Vzcyk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJIaXN0b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OmRpZFVwZGF0ZUhp
c3RvcnlUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlDbGllbnQ6OnBvcHVsYXRl
VmlzaXRlZExpbmtzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5Q2xpZW50OjpzaG91bGRUcmFja1Zpc2l0ZWRMaW5r
cyk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNp
dGVkTGlua3MpOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50
Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKToKKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2Vp
dmVNZXNzYWdlKToKKwogMjAxMC0wNy0yOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQy
L1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdl
S2luZHMuaAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9y
dC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQs
NiBAQCBlbnVtIEtpbmQgewogICAgIERpZEZpcnN0TGF5b3V0Rm9yRnJhbWUsCiAgICAgRGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUsCiAgICAgRGlkR2V0UmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24sCi0gICAgRGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEs
Ci0gICAgRGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0LAotICAgIERpZFBlcmZvcm1TZXJ2ZXJSZWRp
cmVjdCwKICAgICBEaWRSZWNlaXZlRXZlbnQsCiAgICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCiAgICAgRGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUs
CkBAIC02NCw3ICs2MSw2IEBAIGVudW0gS2luZCB7CiAgICAgRGlkU2V0RnJhbWUsCiAgICAgRGlk
U3RhcnRQcm9ncmVzcywKICAgICBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLAotICAg
IERpZFVwZGF0ZUhpc3RvcnlUaXRsZSwKICAgICBTZXRDdXJzb3IsCiAgICAgU2V0VG9vbFRpcCwK
ICAgICBUYWtlRm9jdXMsCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQ
cm9jZXNzTWVzc2FnZUtpbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQ29yZUlQ
Q1N1cHBvcnQvV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oCShyZXZpc2lvbiA2NDIzOCkKKysrIFdl
YktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlByb2Nlc3NNZXNzYWdlS2luZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViUHJvY2Vzc01lc3NhZ2Ug
ewogZW51bSBLaW5kIHsKICAgICBMb2FkSW5qZWN0ZWRCdW5kbGUsCiAgICAgU2V0QXBwbGljYXRp
b25DYWNoZURpcmVjdG9yeSwKKyAgICBTZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcywKICAgICBD
cmVhdGUsCiAgICAgUG9zdE1lc3NhZ2UsCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9j
dW1lbnQsCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQcm9jZXNzUHJv
eHlNZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3Vw
cG9ydC9XZWJQcm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaAkocmV2aXNpb24gNjQyMzgpCisrKyBX
ZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQcm9jZXNzUHJveHlNZXNzYWdlS2luZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYlByb2Nlc3NQ
cm94eU1lc3NhZ2UgewogCiBlbnVtIEtpbmQgewogICAgIEFkZEJhY2tGb3J3YXJkSXRlbSwKKyAg
ICBEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSwKKyAgICBEaWRQZXJmb3JtQ2xpZW50UmVk
aXJlY3QsCisgICAgRGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0LAorICAgIERpZFVwZGF0ZUhpc3Rv
cnlUaXRsZSwKICAgICBHZXRQbHVnaW5Ib3N0Q29ubmVjdGlvbiwKICAgICBHZXRQbHVnaW5zLAor
ICAgIFBvcHVsYXRlVmlzaXRlZExpbmtzLAogICAgIFBvc3RNZXNzYWdlLAogfTsKIApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9uIDY0MjM4KQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCwyNCBAQCB2
b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsCiAgICAgbV9pbmplY3RlZEJ1
bmRsZUNsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKK3ZvaWQgV2ViQ29udGV4dDo6aW5p
dGlhbGl6ZUhpc3RvcnlDbGllbnQoV0tDb250ZXh0SGlzdG9yeUNsaWVudCogY2xpZW50KQorewor
ICAgIG1faGlzdG9yeUNsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CisgICAgCisgICAgaWYgKCFo
YXNWYWxpZFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3Byb2Nl
c3MtPnNlbmQoV2ViUHJvY2Vzc01lc3NhZ2U6OlNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzLCAw
LCBDb3JlSVBDOjpJbihtX2hpc3RvcnlDbGllbnQuc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MoKSkp
OworfQorCiB2b2lkIFdlYkNvbnRleHQ6OmVuc3VyZVdlYlByb2Nlc3MoKQogewogICAgIGlmICht
X3Byb2Nlc3MgJiYgbV9wcm9jZXNzLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fcHJvY2VzcyA9IFdlYlByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5nZXRXZWJQcm9jZXNzKHRo
aXMpOworCisgICAgbV9wcm9jZXNzLT5zZW5kKFdlYlByb2Nlc3NNZXNzYWdlOjpTZXRTaG91bGRU
cmFja1Zpc2l0ZWRMaW5rcywgMCwgQ29yZUlQQzo6SW4obV9oaXN0b3J5Q2xpZW50LnNob3VsZFRy
YWNrVmlzaXRlZExpbmtzKCkpKTsKIH0KIAogV2ViUGFnZVByb3h5KiBXZWJDb250ZXh0OjpjcmVh
dGVXZWJQYWdlKFdlYlBhZ2VOYW1lc3BhY2UqIHBhZ2VOYW1lc3BhY2UpCkBAIC0xNjUsNiArMTc3
LDMzIEBAIHZvaWQgV2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VUb0luamVjdGVkQnUKICAgICBtX3By
b2Nlc3MtPnNlbmQoV2ViUHJvY2Vzc01lc3NhZ2U6OlBvc3RNZXNzYWdlLCAwLCBDb3JlSVBDOjpJ
bihtZXNzYWdlKSk7CiB9CiAKKy8vIEhpc3RvcnlDbGllbnQKKwordm9pZCBXZWJDb250ZXh0Ojpk
aWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
V2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYgc3RvcmUpIAoreworICAgIG1faGlzdG9yeUNsaWVudC5k
aWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSh0aGlzLCBmcmFtZS0+cGFnZSgpLCBzdG9yZSwg
ZnJhbWUpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChX
ZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0
IFN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJpbmcpCit7CisgICAgbV9oaXN0b3J5Q2xpZW50LmRp
ZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh0aGlzLCBmcmFtZS0+cGFnZSgpLCBzb3VyY2VVUkxTdHJp
bmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBmcmFtZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6
ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVSTFN0cmluZykK
K3sKKyAgICBtX2hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KHRoaXMsIGZy
YW1lLT5wYWdlKCksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1l
KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIG1faGlzdG9yeUNsaWVudC5kaWRVcGRhdGVIaXN0b3J5VGl0bGUodGhpcywgZnJhbWUtPnBh
Z2UoKSwgdGl0bGUsIHVybCwgZnJhbWUpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnBvcHVsYXRl
VmlzaXRlZExpbmtzKCkKK3sKKyAgICBtX2hpc3RvcnlDbGllbnQucG9wdWxhdGVWaXNpdGVkTGlu
a3ModGhpcyk7Cit9CisKIHZvaWQgV2ViQ29udGV4dDo6Z2V0U3RhdGlzdGljcyhXS0NvbnRleHRT
dGF0aXN0aWNzKiBzdGF0aXN0aWNzKQogewogICAgIG1lbXNldChzdGF0aXN0aWNzLCAwLCBzaXpl
b2YoV0tDb250ZXh0U3RhdGlzdGljcykpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2
aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJQcm9jZXNzTW9kZWwuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0SW5qZWN0ZWRCdW5k
bGVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJIaXN0b3J5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQzLDcg
KzQ1LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOwogY2xh
c3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViUHJlZmVyZW5jZXM7Ci1jbGFzcyBXZWJQcm9jZXNz
UHJveHk7CiAKIGNsYXNzIFdlYkNvbnRleHQgOiBwdWJsaWMgQVBJT2JqZWN0IHsKIHB1YmxpYzoK
QEAgLTU4LDYgKzU5LDcgQEAgcHVibGljOgogICAgIH5XZWJDb250ZXh0KCk7CiAKICAgICB2b2lk
IGluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNsaWVudChXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNs
aWVudCopOworICAgIHZvaWQgaW5pdGlhbGl6ZUhpc3RvcnlDbGllbnQoV0tDb250ZXh0SGlzdG9y
eUNsaWVudCopOwogCiAgICAgUHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvY2Vzc01vZGVsOyB9CiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jZXNzLmdldCgpOyB9CkBAIC03Nyw5ICs3OSwxNSBAQCBwdWJsaWM6
CiAKICAgICAvLyBJbmplY3RlZEJ1bmRsZSBjbGllbnQKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwotCiAgICAgdm9p
ZCBwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAK
KyAgICAvLyBIaXN0b3J5IGNsaWVudAorICAgIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlv
bkRhdGEoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmKTsgCisg
ICAgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRl
c3RpbmF0aW9uVVJMU3RyaW5nKTsKKyAgICB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChX
ZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJpbmcpOworICAgIHZvaWQgZGlk
VXBkYXRlSGlzdG9yeVRpdGxlKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IHRpdGxlLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVybCk7CisgICAgdm9pZCBwb3B1bGF0ZVZp
c2l0ZWRMaW5rcygpOworICAgIAogICAgIHZvaWQgZ2V0U3RhdGlzdGljcyhXS0NvbnRleHRTdGF0
aXN0aWNzKiBzdGF0aXN0aWNzKTsKICAgICB2b2lkIHNldEFkZGl0aW9uYWxQbHVnaW5QYXRoKGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOwogCkBAIC05Miw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAg
IFdlYkNvbnRleHQoUHJvY2Vzc01vZGVsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGluamVjdGVk
QnVuZGxlUGF0aCk7CiAKICAgICB2b2lkIGVuc3VyZVdlYlByb2Nlc3MoKTsKKyAgICBpbmxpbmUg
Ym9vbCBoYXNWYWxpZFByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3MgJiYgbV9wcm9j
ZXNzLT5pc1ZhbGlkKCk7IH0KIAogICAgIFByb2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbDsKICAg
ICAKQEAgLTEwNCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlN0cmluZyBtX2lu
amVjdGVkQnVuZGxlUGF0aDsKICAgICBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgbV9p
bmplY3RlZEJ1bmRsZUNsaWVudDsKIAorICAgIFdlYkhpc3RvcnlDbGllbnQgbV9oaXN0b3J5Q2xp
ZW50OworCiAgICAgUGx1Z2luSW5mb1N0b3JlIG1fcGx1Z2luSW5mb1N0b3JlOwogfTsKIApJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHAJKHJldmlzaW9uIDY0MjM4KQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDQ1ICszOCw1MyBAQCBXZWJIaXN0b3J5Q2xpZW50OjpXZWJIaXN0b3J5Q2xpZW50KCkK
ICAgICBpbml0aWFsaXplKDApOwogfQogCi12b2lkIFdlYkhpc3RvcnlDbGllbnQ6OmluaXRpYWxp
emUoV0tQYWdlSGlzdG9yeUNsaWVudCogY2xpZW50KQordm9pZCBXZWJIaXN0b3J5Q2xpZW50Ojpp
bml0aWFsaXplKFdLQ29udGV4dEhpc3RvcnlDbGllbnQqIGNsaWVudCkKIHsKICAgICBpZiAoY2xp
ZW50ICYmICFjbGllbnQtPnZlcnNpb24pCi0gICAgICAgIG1fcGFnZUhpc3RvcnlDbGllbnQgPSAq
Y2xpZW50OworICAgICAgICBtX2NvbnRleHRIaXN0b3J5Q2xpZW50ID0gKmNsaWVudDsKICAgICBl
bHNlIAotICAgICAgICBtZW1zZXQoJm1fcGFnZUhpc3RvcnlDbGllbnQsIDAsIHNpemVvZihtX3Bh
Z2VIaXN0b3J5Q2xpZW50KSk7CisgICAgICAgIG1lbXNldCgmbV9jb250ZXh0SGlzdG9yeUNsaWVu
dCwgMCwgc2l6ZW9mKG1fY29udGV4dEhpc3RvcnlDbGllbnQpKTsKIH0KIAotdm9pZCBXZWJIaXN0
b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXZWJQYWdlUHJveHkqIHBh
Z2UsIGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmIG5hdmlnYXRpb25EYXRhU3RvcmUsIFdl
YkZyYW1lUHJveHkqIGZyYW1lKQordm9pZCBXZWJIaXN0b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdp
dGhOYXZpZ2F0aW9uRGF0YShXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlUHJveHkqIHBhZ2Us
IGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmIG5hdmlnYXRpb25EYXRhU3RvcmUsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5kaWROYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSkKKyAgICBpZiAoIW1fY29udGV4dEhpc3RvcnlDbGllbnQu
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxXZWJOYXZpZ2F0aW9uRGF0YT4gbmF2aWdhdGlvbkRhdGEgPSBXZWJOYXZpZ2F0aW9uRGF0
YTo6Y3JlYXRlKG5hdmlnYXRpb25EYXRhU3RvcmUpOyAKLSAgICBtX3BhZ2VIaXN0b3J5Q2xpZW50
LmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKHRvUmVmKHBhZ2UpLCB0b1JlZihuYXZpZ2F0
aW9uRGF0YS5nZXQoKSksIHRvUmVmKGZyYW1lKSwgbV9wYWdlSGlzdG9yeUNsaWVudC5jbGllbnRJ
bmZvKTsKKyAgICBtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhKHRvUmVmKGNvbnRleHQpLCB0b1JlZihwYWdlKSwgdG9SZWYobmF2aWdhdGlvbkRhdGEu
Z2V0KCkpLCB0b1JlZihmcmFtZSksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7
CiB9CiAKLXZvaWQgV2ViSGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdl
YlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYg
ZGVzdGluYXRpb25VUkwsIFdlYkZyYW1lUHJveHkqIGZyYW1lKQordm9pZCBXZWJIaXN0b3J5Q2xp
ZW50OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFn
ZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2VIaXN0
b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCkKKyAgICBpZiAoIW1fY29udGV4dEhp
c3RvcnlDbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3BhZ2VIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh0b1JlZihw
YWdlKSwgdG9VUkxSZWYoc291cmNlVVJMLmltcGwoKSksIHRvVVJMUmVmKGRlc3RpbmF0aW9uVVJM
LmltcGwoKSksIHRvUmVmKGZyYW1lKSwgbV9wYWdlSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvKTsK
KyAgICBtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh0b1Jl
Zihjb250ZXh0KSwgdG9SZWYocGFnZSksIHRvVVJMUmVmKHNvdXJjZVVSTC5pbXBsKCkpLCB0b1VS
TFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0b1JlZihmcmFtZSksIG1fY29udGV4dEhpc3Rv
cnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2ViSGlzdG9yeUNsaWVudDo6ZGlkUGVy
Zm9ybVNlcnZlclJlZGlyZWN0KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkwsIFdlYkZyYW1lUHJveHkqIGZyYW1l
KQordm9pZCBXZWJIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViQ29u
dGV4dCogY29udGV4dCwgV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSogZnJhbWUpCiB7
Ci0gICAgaWYgKCFtX3BhZ2VIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCkK
KyAgICBpZiAoIW1fY29udGV4dEhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2VIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1T
ZXJ2ZXJSZWRpcmVjdCh0b1JlZihwYWdlKSwgdG9VUkxSZWYoc291cmNlVVJMLmltcGwoKSksIHRv
VVJMUmVmKGRlc3RpbmF0aW9uVVJMLmltcGwoKSksIHRvUmVmKGZyYW1lKSwgbV9wYWdlSGlzdG9y
eUNsaWVudC5jbGllbnRJbmZvKTsKKyAgICBtX2NvbnRleHRIaXN0b3J5Q2xpZW50LmRpZFBlcmZv
cm1TZXJ2ZXJSZWRpcmVjdCh0b1JlZihjb250ZXh0KSwgdG9SZWYocGFnZSksIHRvVVJMUmVmKHNv
dXJjZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0b1JlZihm
cmFtZSksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2Vi
SGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSogcGFnZSwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIFdlYkZyYW1lUHJveHkqIGZy
YW1lKQordm9pZCBXZWJIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2ViQ29u
dGV4dCogY29udGV4dCwgV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBj
b25zdCBTdHJpbmcmIHVybCwgV2ViRnJhbWVQcm94eSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3Bh
Z2VIaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSkKKyAgICBpZiAoIW1fY29udGV4
dEhpc3RvcnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3BhZ2VIaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSh0b1JlZihwYWdl
KSwgdG9SZWYodGl0bGUuaW1wbCgpKSwgdG9VUkxSZWYodXJsLmltcGwoKSksIHRvUmVmKGZyYW1l
KSwgbV9wYWdlSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvKTsKKyAgICBtX2NvbnRleHRIaXN0b3J5
Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSh0b1JlZihjb250ZXh0KSwgdG9SZWYocGFnZSks
IHRvUmVmKHRpdGxlLmltcGwoKSksIHRvVVJMUmVmKHVybC5pbXBsKCkpLCB0b1JlZihmcmFtZSks
IG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViSGlzdG9y
eUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoV2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAoIW1fY29udGV4dEhpc3RvcnlDbGllbnQucG9wdWxhdGVWaXNpdGVkTGlua3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fY29udGV4dEhpc3RvcnlDbGllbnQucG9wdWxhdGVWaXNpdGVk
TGlua3ModG9SZWYoY29udGV4dCksIG1fY29udGV4dEhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
SGlzdG9yeUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3Rv
cnlDbGllbnQuaAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJIaXN0
b3J5Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2Vi
SGlzdG9yeUNsaWVudF9oCiAjZGVmaW5lIFdlYkhpc3RvcnlDbGllbnRfaAogCi0jaW5jbHVkZSAi
V0tQYWdlLmgiCisjaW5jbHVkZSAiV0tDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBTdHJpbmc7CkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFt
ZVByb3h5Owogc3RydWN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmU7CiBjbGFzcyBXZWJQYWdlUHJv
eHk7CkBAIC00MSwxNSArNDIsMTggQEAgY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViSGlz
dG9yeUNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViSGlzdG9yeUNsaWVudCgpOwotICAgIHZvaWQg
aW5pdGlhbGl6ZShXS1BhZ2VIaXN0b3J5Q2xpZW50Kik7CisgICAgdm9pZCBpbml0aWFsaXplKFdL
Q29udGV4dEhpc3RvcnlDbGllbnQqKTsKIAotICAgIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdh
dGlvbkRhdGEoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYsIFdl
YkZyYW1lUHJveHkqKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdl
UHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSopOwotICAgIHZvaWQgZGlkUGVy
Zm9ybVNlcnZlclJlZGlyZWN0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
c291cmNlVVJMLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCBXZWJGcmFt
ZVByb3h5Kik7Ci0gICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0aXRsZSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB1cmws
IFdlYkZyYW1lUHJveHkqKTsKKyAgICB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
KFdlYkNvbnRleHQqLCBXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3Jl
JiwgV2ViRnJhbWVQcm94eSopOworICAgIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdl
YkNvbnRleHQqLCBXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVS
TCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSop
OworICAgIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYkNvbnRleHQqLCBXZWJQYWdl
UHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSopOworICAgIHZvaWQgZGlkVXBk
YXRlSGlzdG9yeVRpdGxlKFdlYkNvbnRleHQqLCBXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVybCwgV2ViRnJhbWVQcm94
eSopOworICAgIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoV2ViQ29udGV4dCopOwogCisgICAg
Ym9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEhp
c3RvcnlDbGllbnQucG9wdWxhdGVWaXNpdGVkTGlua3M7IH0KKyAgICAKIHByaXZhdGU6Ci0gICAg
V0tQYWdlSGlzdG9yeUNsaWVudCBtX3BhZ2VIaXN0b3J5Q2xpZW50OworICAgIFdLQ29udGV4dEhp
c3RvcnlDbGllbnQgbV9jb250ZXh0SGlzdG9yeUNsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA2NDIz
OCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlICJX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VLaW5kcy5o
IgogI2luY2x1ZGUgIldlYlBhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlS2luZHMuaCIKQEAgLTEyMywxMSArMTIyLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlu
aXRpYWxpemVVSUNsaWVudChXSwogICAgIG1fdWlDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZUhpc3RvcnlDbGllbnQoV0tQYWdlSGlz
dG9yeUNsaWVudCogY2xpZW50KQotewotICAgIG1faGlzdG9yeUNsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpyZXZpdmUoKQogewogICAgIG1fdmFsaWQg
PSB0cnVlOwpAQCAtNTY3LDQxICs1NjEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoQ29yCiAgICAgICAgICAgICBjbG9zZVBhZ2UoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGE6IHsKLSAgICAgICAgICAgIFdlYk5hdmlnYXRpb25EYXRhU3Rv
cmUgc3RvcmU7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMuZGVjb2RlKENvcmVJUEM6Ok91dChzdG9yZSwgZnJhbWVJRCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25E
YXRhKHdlYkZyYW1lKGZyYW1lSUQpLCBzdG9yZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFBlcmZvcm1DbGllbnRS
ZWRpcmVjdDogewotICAgICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTFN0cmluZzsKLSAgICAgICAg
ICAgIFN0cmluZyBkZXN0aW5hdGlvblVSTFN0cmluZzsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZy
YW1lSUQ7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQQzo6T3V0KHNv
dXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1lSUQpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qod2Vi
RnJhbWUoZnJhbWVJRCksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlN
ZXNzYWdlOjpEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q6IHsKLSAgICAgICAgICAgIFN0cmluZyBz
b3VyY2VVUkxTdHJpbmc7Ci0gICAgICAgICAgICBTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmc7
Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dHMuZGVjb2RlKENvcmVJUEM6Ok91dChzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3Ry
aW5nLCBmcmFtZUlEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlk
UGVyZm9ybVNlcnZlclJlZGlyZWN0KHdlYkZyYW1lKGZyYW1lSUQpLCBzb3VyY2VVUkxTdHJpbmcs
IGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkVXBkYXRlSGlzdG9yeVRpdGxlOiB7
Ci0gICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAg
ICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmRl
Y29kZShDb3JlSVBDOjpPdXQodGl0bGUsIHVybCwgZnJhbWVJRCkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZSh3ZWJGcmFtZShmcmFt
ZUlEKSwgdGl0bGUsIHVybCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAg
ICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkQWRkSXRlbTogewogICAgICAg
ICAgICAgdWludDY0X3QgaXRlbUlEOwogICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMuZGVjb2Rl
KENvcmVJUEM6Ok91dChpdGVtSUQpKSkKQEAgLTg2NSwyOCArODI0LDYgQEAgU3RyaW5nIFdlYlBh
Z2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdAogICAgIHJldHVybiBtX3VpQ2xpZW50LnJ1bkph
dmFTY3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSk7CiB9CiAK
LS8vIEhpc3RvcnlDbGllbnQKLQotdm9pZCBXZWJQYWdlUHJveHk6OmRpZE5hdmlnYXRlV2l0aE5h
dmlnYXRpb25EYXRhKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0
YVN0b3JlJiBzdG9yZSkgCi17Ci0gICAgbV9oaXN0b3J5Q2xpZW50LmRpZE5hdmlnYXRlV2l0aE5h
dmlnYXRpb25EYXRhKHRoaXMsIHN0b3JlLCBmcmFtZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5
OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5n
KQotewotICAgIG1faGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QodGhpcywg
c291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgZnJhbWUpOwotfQotCi12b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBkZXN0aW5h
dGlvblVSTFN0cmluZykKLXsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJl
ZGlyZWN0KHRoaXMsIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1l
KTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwpCi17
Ci0gICAgbV9oaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSh0aGlzLCB0aXRsZSwg
dXJsLCBmcmFtZSk7Ci19Ci0KIC8vIEJhY2tGb3J3YXJkTGlzdAogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6YWRkSXRlbVRvQmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0p
CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplTG9hZGVyQ2xpZW50KFdLUGFnZUxvYWRl
ckNsaWVudCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZVBvbGljeUNsaWVudChXS1BhZ2VQb2xpY3lD
bGllbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVVSUNsaWVudChXS1BhZ2VVSUNsaWVudCopOwot
ICAgIHZvaWQgaW5pdGlhbGl6ZUhpc3RvcnlDbGllbnQoV0tQYWdlSGlzdG9yeUNsaWVudCopOwog
CiAgICAgdm9pZCByZXZpdmUoKTsKIApAQCAtMTkwLDExICsxODksNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOwogICAgIFdlYkNvcmU6OlN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0
KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKTsKIAotICAgIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmKTsgCi0gICAgdm9p
ZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRlc3RpbmF0
aW9uVVJMU3RyaW5nKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJGcmFt
ZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJpbmcpOwotICAgIHZvaWQgZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHRpdGxl
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVybCk7Ci0KICAgICB2b2lkIGFkZEl0ZW1Ub0JhY2tG
b3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7CiAgICAgdm9pZCBnb1RvSXRlbUlu
QmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKIApAQCAtMjE0LDcgKzIw
OCw2IEBAIHByaXZhdGU6CiAgICAgV2ViTG9hZGVyQ2xpZW50IG1fbG9hZGVyQ2xpZW50OwogICAg
IFdlYlBvbGljeUNsaWVudCBtX3BvbGljeUNsaWVudDsKICAgICBXZWJVSUNsaWVudCBtX3VpQ2xp
ZW50OwotICAgIFdlYkhpc3RvcnlDbGllbnQgbV9oaXN0b3J5Q2xpZW50OwogCiAgICAgT3duUHRy
PERyYXdpbmdBcmVhUHJveHk+IG1fZHJhd2luZ0FyZWE7CiAgICAgUmVmUHRyPFdlYlBhZ2VOYW1l
c3BhY2U+IG1fcGFnZU5hbWVzcGFjZTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NNYW5hZ2VyLmgiCkBAIC0yNDMsNiArMjQ0LDcwIEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSgKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZTo6RGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE6IHsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgICAgICAgICAgV2ViTmF2aWdhdGlvbkRhdGFTdG9y
ZSBzdG9yZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOworICAgICAgICAgICAg
ICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KHBhZ2VJRCwgc3RvcmUsIGZy
YW1lSUQpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAg
V2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZShwYWdlSUQpOworICAgICAgICAgICAgICAgIGlm
ICghcGFnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
cGFnZS0+d2ViRnJhbWUoZnJhbWVJRCksIHN0b3JlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZTo6
RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0OiB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFn
ZUlEOworICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkxTdHJpbmc7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nOworICAgICAgICAgICAgICAgIHVpbnQ2
NF90IGZyYW1lSUQ7CisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3Jl
SVBDOjpPdXQocGFnZUlELCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBm
cmFtZUlEKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2UocGFnZUlEKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KHBhZ2UtPndlYkZyYW1lKGZyYW1l
SUQpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1By
b3h5TWVzc2FnZTo6RGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0OiB7CisgICAgICAgICAgICAgICAg
dWludDY0X3QgcGFnZUlEOworICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkxTdHJpbmc7
CisgICAgICAgICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nOworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7CisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMt
PmRlY29kZShDb3JlSVBDOjpPdXQocGFnZUlELCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9u
VVJMU3RyaW5nLCBmcmFtZUlEKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2UocGFnZUlEKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KHBhZ2UtPndl
YkZyYW1lKGZyYW1lSUQpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZTo6RGlkVXBkYXRlSGlzdG9yeVRpdGxlOiB7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgcGFnZUlEOworICAgICAgICAgICAgICAgIFN0cmluZyB0aXRsZTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZy
YW1lSUQ7CisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpP
dXQocGFnZUlELCB0aXRsZSwgdXJsLCBmcmFtZUlEKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2UocGFn
ZUlEKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+ZGlkVXBkYXRlSGlzdG9yeVRpdGxl
KHBhZ2UtPndlYkZyYW1lKGZyYW1lSUQpLCB0aXRsZSwgdXJsKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1Byb3h5TWVz
c2FnZTo6UG9wdWxhdGVWaXNpdGVkTGlua3M6IHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PnBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzeW5jaHJvbm91cyBtZXNzYWdlcyBh
bmQgc2hvdWxkIG5ldmVyIGJlIGhhbmRsZWQgaGVyZS4KICAgICAgICAgICAgIGNhc2UgV2ViUHJv
Y2Vzc1Byb3h5TWVzc2FnZTo6R2V0UGx1Z2luczoKICAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZTo6R2V0UGx1Z2luSG9zdENvbm5lY3Rpb246CkBAIC0yOTUsNiArMzYwLDEx
IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3MKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGFzeW5jaHJvbm91cyBtZXNzYWdlcyBhbmQg
c2hvdWxkIG5ldmVyIGJlIGhhbmRsZWQgaGVyZS4KKyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZTo6RGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE6CisgICAgICAgICAg
ICBjYXNlIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2U6OkRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdDoK
KyAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZTo6RGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0OgorICAgICAgICAgICAgY2FzZSBXZWJQcm9jZXNzUHJveHlNZXNzYWdlOjpEaWRV
cGRhdGVIaXN0b3J5VGl0bGU6CisgICAgICAgICAgICBjYXNlIFdlYlByb2Nlc3NQcm94eU1lc3Nh
Z2U6OlBvcHVsYXRlVmlzaXRlZExpbmtzOgogICAgICAgICAgICAgY2FzZSBXZWJQcm9jZXNzUHJv
eHlNZXNzYWdlOjpQb3N0TWVzc2FnZToKICAgICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZTo6QWRkQmFja0ZvcndhcmRJdGVtOgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZp
c2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDYgKzczLDEyIEBAIHZvaWQgV0tDb250ZXh0U2V0SW5qZWN0ZWRC
dW5kbGVDbGllbnQoV0sKICAgICAgICAgdG9XSyhjb250ZXh0UmVmKS0+aW5pdGlhbGl6ZUluamVj
dGVkQnVuZGxlQ2xpZW50KHdrQ2xpZW50KTsKIH0KIAordm9pZCBXS0NvbnRleHRTZXRIaXN0b3J5
Q2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0NvbnRleHRIaXN0b3J5Q2xpZW50ICog
d2tDbGllbnQpCit7CisgICAgaWYgKHdrQ2xpZW50ICYmICF3a0NsaWVudC0+dmVyc2lvbikKKyAg
ICAgICAgdG9XSyhjb250ZXh0UmVmKS0+aW5pdGlhbGl6ZUhpc3RvcnlDbGllbnQod2tDbGllbnQp
OworfQorCiB2b2lkIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZVJlZikKIHsKICAgICB0b1dLKGNv
bnRleHRSZWYpLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUodG9XSyhtZXNzYWdlUmVmKS0+
c3RyaW5nKCkpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHJldmlzaW9u
IDY0MjM4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDI0IEBAIHN0cnVjdCBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNs
aWVudCB7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQg
V0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQ7CiAKKy8vIEhpc3RvcnkgQ2xpZW50Cit0eXBl
ZGVmIHZvaWQgKCpXS0NvbnRleHREaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YUNhbGxiYWNr
KShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvbkRhdGFS
ZWYgbmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwordHlwZWRlZiB2b2lkICgqV0tDb250ZXh0RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0Q2Fs
bGJhY2spKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291
cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS0NvbnRleHREaWRQZXJmb3JtU2Vy
dmVyUmVkaXJlY3RDYWxsYmFjaykoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZVJlZiBwYWdl
LCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVm
IGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLQ29udGV4
dERpZFVwZGF0ZUhpc3RvcnlUaXRsZUNhbGxiYWNrKShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYg
ZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tDb250ZXh0
UG9wdWxhdGVWaXNpdGVkTGlua3NDYWxsYmFjaykoV0tDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pOworCitzdHJ1Y3QgV0tDb250ZXh0SGlzdG9yeUNsaWVudCB7Cisg
ICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJzaW9uOworICAgIGNvbnN0IHZvaWQgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SW5mbzsKKyAgICBX
S0NvbnRleHREaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YUNhbGxiYWNrICAgICAgICAgICAg
ICAgICAgICAgIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOworICAgIFdLQ29udGV4dERp
ZFBlcmZvcm1DbGllbnRSZWRpcmVjdENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0OworICAgIFdLQ29udGV4dERpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0OworICAgIFdLQ29udGV4dERpZFVwZGF0ZUhpc3RvcnlUaXRsZUNhbGxiYWNrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworICAgIFdL
Q29udGV4dFBvcHVsYXRlVmlzaXRlZExpbmtzQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9wdWxhdGVWaXNpdGVkTGlua3M7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tDb250
ZXh0SGlzdG9yeUNsaWVudCBXS0NvbnRleHRIaXN0b3J5Q2xpZW50OworCiBXS19FWFBPUlQgV0tD
b250ZXh0UmVmIFdLQ29udGV4dENyZWF0ZSgpOwogV0tfRVhQT1JUIFdLQ29udGV4dFJlZiBXS0Nv
bnRleHRDcmVhdGVXaXRoSW5qZWN0ZWRCdW5kbGVQYXRoKFdLU3RyaW5nUmVmIHBhdGgpOwogV0tf
RVhQT1JUIFdLQ29udGV4dFJlZiBXS0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOwpA
QCAtNDksNiArNjcsNyBAQCBXS19FWFBPUlQgV0tDb250ZXh0UmVmIFdLQ29udGV4dEdldFNoYXJl
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRQcmVmZXJlbmNlcyhXS0NvbnRleHRSZWYgY29u
dGV4dCwgV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiBXS19FWFBPUlQgV0tQcmVmZXJl
bmNlc1JlZiBXS0NvbnRleHRHZXRQcmVmZXJlbmNlcyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAK
K1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEhpc3RvcnlDbGllbnQoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLQ29udGV4dEhpc3RvcnlDbGllbnQgKiBjbGllbnQpOwogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
Q29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50ICogY2xpZW50KTsKIAogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1N0cmluZ1JlZiBtZXNzYWdlKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTIgKzE0NCw2IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJ
Q2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgdG9XSyhwYWdlUmVmKS0+aW5pdGlhbGl6ZVVJ
Q2xpZW50KHdrQ2xpZW50KTsKIH0KIAotdm9pZCBXS1BhZ2VTZXRQYWdlSGlzdG9yeUNsaWVudChX
S1BhZ2VSZWYgcGFnZVJlZiwgV0tQYWdlSGlzdG9yeUNsaWVudCAqIHdrQ2xpZW50KQotewotICAg
IGlmICh3a0NsaWVudCAmJiAhd2tDbGllbnQtPnZlcnNpb24pCi0gICAgICAgIHRvV0socGFnZVJl
ZiktPmluaXRpYWxpemVIaXN0b3J5Q2xpZW50KHdrQ2xpZW50KTsKLX0KLQogdm9pZCBXS1BhZ2VS
dW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHNj
cmlwdFJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlUnVuSmF2YVNjcmlwdEZ1bmN0aW9uIGNhbGxi
YWNrLCBXS1BhZ2VSdW5KYXZhU2NyaXB0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2VGdW5jdGlvbikK
IHsKICAgICB0b1dLKHBhZ2VSZWYpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUodG9XSyhzY3Jp
cHRSZWYpLT5zdHJpbmcoKSwgU2NyaXB0UmV0dXJuVmFsdWVDYWxsYmFjazo6Y3JlYXRlKGNvbnRl
eHQsIGNhbGxiYWNrLCBkaXNwb3NlRnVuY3Rpb24pKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5oCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMjMgKzEzMyw2IEBAIHN0cnVjdCBXS1BhZ2VVSUNs
aWVudCB7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgV0tQYWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7
CiAKLS8vIEhpc3RvcnkgQ2xpZW50Ci10eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWROYXZpZ2F0ZVdp
dGhOYXZpZ2F0aW9uRGF0YUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uRGF0
YVJlZiBuYXZpZ2F0aW9uRGF0YSwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RDYWxs
YmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGlu
YXRpb25VUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlw
ZWRlZiB2b2lkICgqV0tQYWdlRGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Q2FsbGJhY2spKFdLUGFn
ZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBX
S0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAo
KldLUGFnZURpZFVwZGF0ZUhpc3RvcnlUaXRsZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbyk7Ci0KLXN0cnVjdCBXS1BhZ2VIaXN0b3J5Q2xpZW50IHsKLSAgICBpbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb247Ci0gICAgY29uc3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotICAgIFdLUGFnZURp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE7Ci0gICAgV0tQYWdlRGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3Q7Ci0gICAgV0tQYWdlRGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Q2Fs
bGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJl
Y3Q7Ci0gICAgV0tQYWdlRGlkVXBkYXRlSGlzdG9yeVRpdGxlQ2FsbGJhY2sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRVcGRhdGVIaXN0b3J5VGl0bGU7Ci19OwotdHlwZWRlZiBz
dHJ1Y3QgV0tQYWdlSGlzdG9yeUNsaWVudCBXS1BhZ2VIaXN0b3J5Q2xpZW50OwotCi0KIFdLX0VY
UE9SVCBXS1BhZ2VOYW1lc3BhY2VSZWYgV0tQYWdlR2V0UGFnZU5hbWVzcGFjZShXS1BhZ2VSZWYg
cGFnZSk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZUxvYWRVUkwoV0tQYWdlUmVmIHBhZ2UsIFdL
VVJMUmVmIHVybCk7CkBAIC0xNzgsNyArMTYxLDYgQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlVGVy
bWluYXRlKFdLUGFnZVJlZgogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVu
dChXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlTG9hZGVyQ2xpZW50ICogY2xpZW50KTsKIFdLX0VYUE9S
VCB2b2lkIFdLUGFnZVNldFBhZ2VQb2xpY3lDbGllbnQoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZVBv
bGljeUNsaWVudCAqIGNsaWVudCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGll
bnQoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZVVJQ2xpZW50ICogY2xpZW50KTsKLVdLX0VYUE9SVCB2
b2lkIFdLUGFnZVNldFBhZ2VIaXN0b3J5Q2xpZW50KFdLUGFnZVJlZiBwYWdlLCBXS1BhZ2VIaXN0
b3J5Q2xpZW50ICogY2xpZW50KTsKIAogdHlwZWRlZiB2b2lkICgqV0tQYWdlUnVuSmF2YVNjcmlw
dEZ1bmN0aW9uKShXS1N0cmluZ1JlZiwgdm9pZCopOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlUnVu
SmF2YVNjcmlwdERpc3Bvc2VGdW5jdGlvbikodm9pZCopOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0xOTcsNiArMTk4LDE1IEBAIHZvaWQg
V2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUkKICAgICAgICAgICAgICAgICBzZXRB
cHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXZWJQcm9jZXNzTWVzc2FnZTo6
U2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3M6IHsKKyAgICAgICAgICAgICAgICBib29sIHNob3Vs
ZFRyYWNrVmlzaXRlZExpbmtzOworICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQYWdlR3Jv
dXA6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgV2ViUHJvY2Vzc01lc3NhZ2U6OkNyZWF0ZTogewogICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGFyZ3VtZW50cy0+ZGVzdGluYXRpb25JRCgpOwogICAgICAg
ICAgICAgICAgIEludFNpemUgdmlld1NpemU7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjQy
MzgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtp
bmRzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC0zODUsNyAr
Mzg2LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaAogCiB2b2lk
IFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdl
YlByb2Nlc3NQcm94eU1lc3NhZ2U6OlBvcHVsYXRlVmlzaXRlZExpbmtzLCAwLCBDb3JlSVBDOjpJ
bigpKTsKIH0KIAogRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0UmVj
dChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVS
ZWN0KQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0Niw5ICs1NDYsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Ojp1cGRhdGVHbG9iYWxICiAgICAgZGF0YS51cmwgPSBsb2FkZXItPnVybEZvckhpc3RvcnkoKS5z
dHJpbmcoKTsKICAgICBkYXRhLnRpdGxlID0gbG9hZGVyLT50aXRsZSgpOwogCi0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4oZGF0YSwgbV9mcmFtZS0+ZnJhbWVJ
RCgpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBy
b2Nlc3NQcm94eU1lc3NhZ2U6OkRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3ZWJQYWdlLT5wYWdlSUQo
KSwgZGF0YSwgbV9mcmFtZS0+ZnJhbWVJRCgpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkKQEAgLTU2MiwxOCArNTYy
LDIwIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEgKIAogICAgIC8v
IENsaWVudCByZWRpcmVjdAogICAgIGlmICghbG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZv
ckhpc3RvcnkoKS5pc051bGwoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUGVyZm9ybUNsaWVudFJlZGly
ZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vi
UGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb3JlSVBDOjpJbihsb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9y
eSgpLCAKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdl
YlByb2Nlc3NQcm94eU1lc3NhZ2U6OkRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3ZWJQYWdlLT5w
YWdlSUQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCksIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9hZGVyLT5jbGllbnRSZWRpcmVjdERlc3RpbmF0aW9uRm9ySGlzdG9yeSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9m
cmFtZS0+ZnJhbWVJRCgpKSk7CiAgICAgfQogCiAgICAgLy8gU2VydmVyIHJlZGlyZWN0CiAgICAg
aWYgKCFsb2FkZXItPnNlcnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLmlzTnVsbCgpKSB7
Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdl
UHJveHlNZXNzYWdlOjpEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKGxv
YWRlci0+c2VydmVyUmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCksCisgICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQcm9jZXNzUHJveHlNZXNzYWdlOjpE
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViUGFnZS0+cGFnZUlEKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPnNl
cnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5zZXJ2ZXJSZWRpcmVj
dERlc3RpbmF0aW9uRm9ySGlzdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZnJhbWVJRCgpKSk7CiAgICAg
fQpAQCAtNzE5LDcgKzcyMSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxl
KGNvbnMKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRV
cGRhdGVIaXN0b3J5VGl0bGUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbih0aXRsZSwg
dXJsLnN0cmluZygpLCBtX2ZyYW1lLT5mcmFtZUlEKCkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZTo6RGlkVXBkYXRl
SGlzdG9yeVRpdGxlLCAwLCBDb3JlSVBDOjpJbih3ZWJQYWdlLT5wYWdlSUQoKSwgdGl0bGUsIHVy
bC5zdHJpbmcoKSwgbV9mcmFtZS0+ZnJhbWVJRCgpKSk7CiB9CiAKIFN0cmluZyBXZWJGcmFtZUxv
YWRlckNsaWVudDo6dXNlckFnZW50KGNvbnN0IEtVUkwmKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQy
NDIpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MSBAQAorMjAxMC0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgcGFzcyBh
dCB2aXNpdGVkIGxpbmsgc3VwcG9ydCBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE1NworCisgICAgICAgICogTWluaUJyb3dzZXIvbWFj
L0FwcERlbGVnYXRlLm06CisgICAgICAgIChkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6
CisgICAgICAgIChkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoZGlkUGVyZm9y
bVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKGRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAg
ICAgIChwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6IEFkZGVkIGZvciB0aGUgbmV3IHZlcnNpb24gb2Yg
dGhlIEhpc3RvcnlDbGllbnQuCisgICAgICAgICgtW0Jyb3dzZXJBcHBEZWxlZ2F0ZSBpbml0XSk6
IFNldCB0aGUgSGlzdG9yeUNsaWVudCByaWdodCBhZnRlciBjcmVhdGluZyB0aGUgY29udGV4dChz
KQorICAgICAgICAKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRy
b2xsZXIubToKKyAgICAgICAgKC1bQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIgYXdha2VGcm9tTmli
XSk6CisKIDIwMTAtMDctMjggIFJvYmluIER1bm4gIDxyb2JpbkBhbGxkdW5uLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZXZpbiBPbGxpdmllci4KSW5kZXg6IFdlYktpdFRvb2xzL01pbmlC
cm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL01pbmlC
cm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCShyZXZpc2lvbiA2NDIzOCkKKysrIFdlYktpdFRvb2xz
L01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsy
OCw5IEBACiAjaW1wb3J0ICJCcm93c2VyV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiQnJv
d3NlclN0YXRpc3RpY3NXaW5kb3dDb250cm9sbGVyLmgiCiAKLSNpbXBvcnQgPFdlYktpdDIvV0tT
dHJpbmdDRi5oPgogI2ltcG9ydCA8V2ViS2l0Mi9XS0NvbnRleHRQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQyL1dLU3RyaW5nQ0YuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tVUkxDRi5oPgogCiBz
dGF0aWMgTlNTdHJpbmcgKmRlZmF1bHRVUkwgPSBAImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iOwog
CkBAIC00Niw2ICs0Nyw1NSBAQCB2b2lkIF9kaWRSZWNpZXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsCiAgICAgV0tTdHJpbmdSZWxlYXNlKG5ld01lc3NhZ2UpOwogfQogCisjcHJhZ21hIG1hcmsg
SGlzdG9yeSBDbGllbnQgQ2FsbGJhY2tzCisKK3N0YXRpYyB2b2lkIGRpZE5hdmlnYXRlV2l0aE5h
dmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VSZWYgcGFnZSwgV0tOYXZp
Z2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YSwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbykKK3sKKyAgICBXS1N0cmluZ1JlZiB3a1RpdGxlID0gV0tOYXZpZ2F0aW9u
RGF0YUNvcHlUaXRsZShuYXZpZ2F0aW9uRGF0YSk7CisgICAgQ0ZTdHJpbmdSZWYgdGl0bGUgPSBX
S1N0cmluZ0NvcHlDRlN0cmluZygwLCB3a1RpdGxlKTsKKyAgICBXS1N0cmluZ1JlbGVhc2Uod2tU
aXRsZSk7CisKKyAgICBXS1VSTFJlZiB3a1VSTCA9IFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJMKG5h
dmlnYXRpb25EYXRhKTsKKyAgICBDRlVSTFJlZiB1cmwgPSBXS1VSTENvcHlDRlVSTCgwLCB3a1VS
TCk7CisgICAgV0tVUkxSZWxlYXNlKHdrVVJMKTsKKworICAgIExPRyhAIkhpc3RvcnlDbGllbnQg
LSBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSAtIHRpdGxlOiAlQCAtIHVybDogJUAiLCB0
aXRsZSwgdXJsKTsKKyAgICBDRlJlbGVhc2UodGl0bGUpOworICAgIENGUmVsZWFzZSh1cmwpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3Rp
bmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorewor
ICAgIENGVVJMUmVmIGNmU291cmNlVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgc291cmNlVVJMKTsK
KyAgICBDRlVSTFJlZiBjZkRlc3RpbmF0aW9uVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgZGVzdGlu
YXRpb25VUkwpOworICAgIExPRyhAIkhpc3RvcnlDbGllbnQgLSBkaWRQZXJmb3JtQ2xpZW50UmVk
aXJlY3QgLSBzb3VyY2VVUkw6ICVAIC0gZGVzdGluYXRpb25VUkw6ICVAIiwgY2ZTb3VyY2VVUkws
IGNmRGVzdGluYXRpb25VUkwpOworICAgIENGUmVsZWFzZShjZlNvdXJjZVVSTCk7CisgICAgQ0ZS
ZWxlYXNlKGNmRGVzdGluYXRpb25VUkwpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtU2Vy
dmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJl
ZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBj
b25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIENGVVJMUmVmIGNmU291cmNlVVJMID0gV0tV
UkxDb3B5Q0ZVUkwoMCwgc291cmNlVVJMKTsKKyAgICBDRlVSTFJlZiBjZkRlc3RpbmF0aW9uVVJM
ID0gV0tVUkxDb3B5Q0ZVUkwoMCwgZGVzdGluYXRpb25VUkwpOworICAgIExPRyhAIkhpc3RvcnlD
bGllbnQgLSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QgLSBzb3VyY2VVUkw6ICVAIC0gZGVzdGlu
YXRpb25VUkw6ICVAIiwgY2ZTb3VyY2VVUkwsIGNmRGVzdGluYXRpb25VUkwpOworICAgIENGUmVs
ZWFzZShjZlNvdXJjZVVSTCk7CisgICAgQ0ZSZWxlYXNlKGNmRGVzdGluYXRpb25VUkwpOworfQor
CitzdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmIGNvbnRleHQs
IFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1l
UmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIENGU3RyaW5nUmVmIGNm
VGl0bGUgPSBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCB0aXRsZSk7CisgICAgQ0ZVUkxSZWYgY2ZV
UkwgPSBXS1VSTENvcHlDRlVSTCgwLCBVUkwpOworICAgIExPRyhAIkhpc3RvcnlDbGllbnQgLSBk
aWRVcGRhdGVIaXN0b3J5VGl0bGUgLSB0aXRsZTogJUAgLSBVUkw6ICVAIiwgY2ZUaXRsZSwgY2ZV
UkwpOworICAgIENGUmVsZWFzZShjZlRpdGxlKTsKKyAgICBDRlJlbGVhc2UoY2ZVUkwpOworfQor
CitzdGF0aWMgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyhXS0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBMT0coQCJIaXN0b3J5Q2xpZW50IC0gcG9w
dWxhdGVWaXNpdGVkTGlua3MiKTsKK30KKwogLSAoaWQpaW5pdAogewogICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CkBAIC01Niw2ICsxMDYsMTcgQEAgLSAoaWQpaW5pdAogICAgICAgICAgICAgY3Vy
cmVudFByb2Nlc3NNb2RlbCA9IGtQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOwog
CiAgICAgICAgIFdLQ29udGV4dFJlZiB0aHJlYWRDb250ZXh0ID0gV0tDb250ZXh0R2V0U2hhcmVk
VGhyZWFkQ29udGV4dCgpOworICAgICAgICBXS0NvbnRleHRIaXN0b3J5Q2xpZW50IGhpc3RvcnlD
bGllbnQgPSB7CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAg
IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhLAorICAgICAgICAgICAgZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0LAorICAgICAgICAgICAgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0LAorICAg
ICAgICAgICAgZGlkVXBkYXRlSGlzdG9yeVRpdGxlLAorICAgICAgICAgICAgcG9wdWxhdGVWaXNp
dGVkTGlua3MKKyAgICAgICAgfTsKKyAgICAgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudCh0
aHJlYWRDb250ZXh0LCAmaGlzdG9yeUNsaWVudCk7CisgICAgCiAgICAgICAgIHRocmVhZFBhZ2VO
YW1lc3BhY2UgPSBXS1BhZ2VOYW1lc3BhY2VDcmVhdGUodGhyZWFkQ29udGV4dCk7CiAgICAgICAg
IFdLQ29udGV4dFJlbGVhc2UodGhyZWFkQ29udGV4dCk7CiAKQEAgLTcwLDYgKzEzMSw3IEBAIC0g
KGlkKWluaXQKICAgICAgICAgICAgIF9kaWRSZWNpZXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZQogICAgICAgICB9OwogICAgICAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChw
cm9jZXNzQ29udGV4dCwgJmJ1bmRsZUNsaWVudCk7CisgICAgICAgIFdLQ29udGV4dFNldEhpc3Rv
cnlDbGllbnQocHJvY2Vzc0NvbnRleHQsICZoaXN0b3J5Q2xpZW50KTsKICAgICAgICAgCiAgICAg
ICAgIHByb2Nlc3NQYWdlTmFtZXNwYWNlID0gV0tQYWdlTmFtZXNwYWNlQ3JlYXRlKHByb2Nlc3ND
b250ZXh0KTsKICAgICAgICAgV0tDb250ZXh0UmVsZWFzZShwcm9jZXNzQ29udGV4dCk7CkluZGV4
OiBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0Nv
bnRyb2xsZXIubQkocmV2aXNpb24gNjQyMzgpCisrKyBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9t
YWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpAQCAtMzYzLDUwICsz
NjMsNiBAQCBzdGF0aWMgV0tTdHJpbmdSZWYgcnVuSmF2YVNjcmlwdFByb21wdChXCiAgICAgcmV0
dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilyZXN1bHQpOwogfQog
Ci0jcHJhZ21hIG1hcmsgSGlzdG9yeSBDbGllbnQgQ2FsbGJhY2tzCi0KLXN0YXRpYyB2b2lkIGRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25E
YXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQotewotICAgIFdLU3RyaW5nUmVmIHdrVGl0bGUgPSBXS05hdmlnYXRpb25EYXRhQ29w
eVRpdGxlKG5hdmlnYXRpb25EYXRhKTsKLSAgICBDRlN0cmluZ1JlZiB0aXRsZSA9IFdLU3RyaW5n
Q29weUNGU3RyaW5nKDAsIHdrVGl0bGUpOwotICAgIFdLU3RyaW5nUmVsZWFzZSh3a1RpdGxlKTsK
LQotICAgIFdLVVJMUmVmIHdrVVJMID0gV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlv
bkRhdGEpOwotICAgIENGVVJMUmVmIHVybCA9IFdLVVJMQ29weUNGVVJMKDAsIHdrVVJMKTsKLSAg
ICBXS1VSTFJlbGVhc2Uod2tVUkwpOwotCi0gICAgTE9HKEAiSGlzdG9yeUNsaWVudCAtIGRpZE5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhIC0gdGl0bGU6ICVAIC0gdXJsOiAlQCIsIHRpdGxlLCB1
cmwpOwotICAgIENGUmVsZWFzZSh0aXRsZSk7Ci0gICAgQ0ZSZWxlYXNlKHVybCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS1BhZ2VSZWYgcGFnZSwgV0tVUkxS
ZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiBmcmFtZSwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBDRlVSTFJlZiBjZlNvdXJjZVVSTCA9IFdL
VVJMQ29weUNGVVJMKDAsIHNvdXJjZVVSTCk7Ci0gICAgQ0ZVUkxSZWYgY2ZEZXN0aW5hdGlvblVS
TCA9IFdLVVJMQ29weUNGVVJMKDAsIGRlc3RpbmF0aW9uVVJMKTsKLSAgICBMT0coQCJIaXN0b3J5
Q2xpZW50IC0gZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0IC0gc291cmNlVVJMOiAlQCAtIGRlc3Rp
bmF0aW9uVVJMOiAlQCIsIGNmU291cmNlVVJMLCBjZkRlc3RpbmF0aW9uVVJMKTsKLSAgICBDRlJl
bGVhc2UoY2ZTb3VyY2VVUkwpOwotICAgIENGUmVsZWFzZShjZkRlc3RpbmF0aW9uVVJMKTsKLX0K
LQotc3RhdGljIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLUGFnZVJlZiBwYWdlLCBX
S1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZy
YW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQotewotICAgIENGVVJMUmVmIGNmU291cmNlVVJM
ID0gV0tVUkxDb3B5Q0ZVUkwoMCwgc291cmNlVVJMKTsKLSAgICBDRlVSTFJlZiBjZkRlc3RpbmF0
aW9uVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgZGVzdGluYXRpb25VUkwpOwotICAgIExPRyhAIkhp
c3RvcnlDbGllbnQgLSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QgLSBzb3VyY2VVUkw6ICVAIC0g
ZGVzdGluYXRpb25VUkw6ICVAIiwgY2ZTb3VyY2VVUkwsIGNmRGVzdGluYXRpb25VUkwpOwotICAg
IENGUmVsZWFzZShjZlNvdXJjZVVSTCk7Ci0gICAgQ0ZSZWxlYXNlKGNmRGVzdGluYXRpb25VUkwp
OwotfQotCi1zdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCi17Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZUaXRsZSA9IFdLU3RyaW5n
Q29weUNGU3RyaW5nKDAsIHRpdGxlKTsKLSAgICBDRlVSTFJlZiBjZlVSTCA9IFdLVVJMQ29weUNG
VVJMKDAsIFVSTCk7Ci0gICAgTE9HKEAiSGlzdG9yeUNsaWVudCAtIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZSAtIHRpdGxlOiAlQCAtIFVSTDogJUAiLCBjZlRpdGxlLCBjZlVSTCk7Ci0gICAgQ0ZSZWxl
YXNlKGNmVGl0bGUpOwotICAgIENGUmVsZWFzZShjZlVSTCk7Ci19Ci0KIC0gKHZvaWQpYXdha2VG
cm9tTmliCiB7CiAgICAgX3dlYlZpZXcgPSBbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpb
Y29udGFpbmVyVmlldyBmcmFtZV0gcGFnZU5hbWVzcGFjZVJlZjpfcGFnZU5hbWVzcGFjZV07CkBA
IC00NTgsMTcgKzQxNCw2IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAgICAgIHJ1bkphdmFT
Y3JpcHRQcm9tcHQKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudChfd2ViVmlldy5w
YWdlUmVmLCAmdWlDbGllbnQpOwotCi0gICAgV0tQYWdlSGlzdG9yeUNsaWVudCBoaXN0b3J5Q2xp
ZW50ID0gewotICAgICAgICAwLAotICAgICAgICBzZWxmLAotICAgICAgICBkaWROYXZpZ2F0ZVdp
dGhOYXZpZ2F0aW9uRGF0YSwKLSAgICAgICAgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0LAotICAg
ICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QsCi0gICAgICAgIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZSwKLSAgICB9OwotCi0gICAgV0tQYWdlU2V0UGFnZUhpc3RvcnlDbGllbnQoX3dlYlZpZXcu
cGFnZVJlZiwgJmhpc3RvcnlDbGllbnQpOwogfQogCiAtICh2b2lkKWRpZFN0YXJ0UHJvZ3Jlc3MK
</data>
<flag name="review"
          id="51152"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>