<?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>53925</bug_id>
          
          <creation_ts>2011-02-07 10:23:30 -0800</creation_ts>
          <short_desc>AssociatedURLLoader does not support Cross Origin Requests</short_desc>
          <delta_ts>2011-03-16 17:45:34 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54196</dependson>
    
    <dependson>54287</dependson>
    
    <dependson>54313</dependson>
    
    <dependson>54489</dependson>
    
    <dependson>54688</dependson>
    
    <dependson>55680</dependson>
    
    <dependson>55863</dependson>
    
    <dependson>56432</dependson>
    
    <dependson>56479</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bill Budge">bbudge</reporter>
          <assigned_to name="Bill Budge">bbudge</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346651</commentid>
    <comment_count>0</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-07 10:23:30 -0800</bug_when>
    <thetext>The AssociatedURLLoader (/WebKit/Source/WebKit/Chromium/src/AssociatedURLLoader) doesn&apos;t support Cross Origin Requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348739</commentid>
    <comment_count>1</comment_count>
      <attachid>81901</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-09 17:37:31 -0800</bug_when>
    <thetext>Created attachment 81901
Change AssociatedURLLoader to support CORS, using DocumentThreadableLoader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348743</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 17:39:58 -0800</bug_when>
    <thetext>Attachment 81901 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Last 3072 characters of output:
 so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:88:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:89:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:90:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:91:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:92:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:93:  The parameter name &quot;loader&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:93:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:121:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:174:  web_error is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:202:  webcore_request is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:203:  webcore_document is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:216:  webcore_request is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.cpp:217:  webcore_document is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit/chromium/src/AssociatedURLLoader.h:58:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.h:59:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.h:66:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.h:67:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/AssociatedURLLoader.h:67:  The parameter name &quot;options&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 26 in 13 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>348747</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 17:51:11 -0800</bug_when>
    <thetext>Attachment 81901 did not build on chromium:
Build output: http://queues.webkit.org/results/7869107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348754</commentid>
    <comment_count>4</comment_count>
      <attachid>81901</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-09 18:06:23 -0800</bug_when>
    <thetext>Comment on attachment 81901
Change AssociatedURLLoader to support CORS, using DocumentThreadableLoader

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

I tend to do two passes. In my first pass, I catch surface level things. In my second pass I try to understand the whole patch and make sense of it.

These are the comments from my first pass but there are so many things that it makes it harder for me to go more in depth right now, so I&apos;m r- because I believe that they can be quickly addressed which will get rid of a lot of comment clutter in this review.

Also it appears that this patch is doing several things at once. It may speed the process of landing parts and improve the quality of review to try to keep these items separate if possible (and make my &quot;second pass&quot; easier). For example, it looks like m_downloadFilePath is pushed downward and that could be a patch by itself. (At this point I haven&apos;t yet figured out why that is needed for this change because I haven&apos;t really started my &quot;second pass&quot;.)

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

There either need to be tests or an explanation of why tests aren&apos;t needed (or possible), but regardless this line should disappear.

&gt; Source/WebCore/ChangeLog:11
&gt; +        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):

This is where an explanation of why a change was done should go.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:-301
&gt; -    actualRequest-&gt;setHTTPOrigin(m_document-&gt;securityOrigin()-&gt;toString());

Why is this line being deleted?

&gt; Source/WebCore/loader/DocumentThreadableLoader.h:58
&gt; +        virtual void setDefersLoading(bool value);

value adds no information so it shouldn&apos;t be here.

&gt; Source/WebCore/platform/network/chromium/ResourceRequest.h:124
&gt; +        bool m_downloadToFile;

Good call adding it here, but this structure is used to copy ResourceRequestData and I don&apos;t see that code being modified in this change.

&gt; Source/WebCore/platform/network/chromium/ResourceResponse.h:-100
&gt; -        void setSocketAddress(const String&amp; value) { m_socketAddress = value; }

Why is this being deleted?

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:37
&gt; +

No blank line needed here.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:80
&gt; +// SubresourceLoaderClient, which is close to them WebURLLoaderClient.

typo? &quot;close to them WebURLLoaderClient&quot;

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:85
&gt; +    Loader(AssociatedURLLoader* owner, Document* document, BlockingBehavior blockingBehavior, const ResourceRequest&amp; request, const ThreadableLoaderOptions&amp; options);

This constructor should be private (so that the create method is the only way to construct this).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:87
&gt; +    virtual void AssociatedURLLoader::Loader::willSendRequest(SubresourceLoader* loader, ResourceRequest&amp; request, const ResourceResponse&amp; redirectResponse);

s/AssociatedURLLoader::Loader::willSendRequest/willSendRequest/

The same for other functions declared here.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:96
&gt; +    class DummyClient : public ThreadableLoaderClient

Why not just use ThreadableLoaderClient?

&gt;&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:121
&gt;&gt; +    : DocumentThreadableLoader(document, &amp;m_dummyClient, blockingBehavior, request, options), m_owner(owner) {
&gt; 
&gt; Place brace on its own line for function definitions.  [whitespace/braces] [4]

The initializers should be on separate lines as well.

&gt; Source/WebKit/chromium/src/WebURLResponse.cpp:383
&gt; +  m_private-&gt;m_resourceResponse-&gt;setDownloadFilePath(downloadFilePath.data());

4 space indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348755</commentid>
    <comment_count>5</comment_count>
      <attachid>81907</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-09 18:07:16 -0800</bug_when>
    <thetext>Created attachment 81907
AssociatedURLLoader supports CORS using DocumentThreadableLoader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348760</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 18:19:37 -0800</bug_when>
    <thetext>Attachment 81907 did not build on chromium:
Build output: http://queues.webkit.org/results/7870095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349326</commentid>
    <comment_count>7</comment_count>
      <attachid>81907</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-10 13:32:03 -0800</bug_when>
    <thetext>Comment on attachment 81907
AssociatedURLLoader supports CORS using DocumentThreadableLoader

This particular patch is obsolete. It already has been broken down into at least one other change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353230</commentid>
    <comment_count>8</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-17 16:08:48 -0800</bug_when>
    <thetext>I needed another method on ThreadableLoaderClient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353237</commentid>
    <comment_count>9</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-17 16:17:08 -0800</bug_when>
    <thetext>I needed another method on ThreadableLoaderClient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358218</commentid>
    <comment_count>10</comment_count>
      <attachid>83884</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-02-25 15:02:32 -0800</bug_when>
    <thetext>Created attachment 83884
Proposed Patch

I&apos;m not sure if this needs tests or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358264</commentid>
    <comment_count>11</comment_count>
      <attachid>83884</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-25 16:21:04 -0800</bug_when>
    <thetext>Comment on attachment 83884
Proposed Patch

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

&gt; Source/WebKit/chromium/ChangeLog:11
&gt; +        (WTF::ConvertOptions):

Please fix this. (It isn&apos;t WTF::ConvertOptions. The script that generates this got confused.)

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

Typically in WebKit land, additional years just get tacked on to the end as opposed to replacing the other year. (I know this is different from how chromium does things.)

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:37
&gt; +

No need for a blank line here.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:61
&gt; +    switch (options.crossOriginRequestPolicy) {

You could add compile asserts to verify that these enums have the same values.
Then replace the switch with a static cast.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:177
&gt; +    m_clientAdapter = PassOwnPtr&lt;ClientAdapter&gt;(new ClientAdapter(this, m_client, request.downloadToFile()));

Two things look wrong here:
1. adoptPtr should be used instead of PassOwnPtr.
2. Really, the typical pattern is to make the constructor private and and expose a static create method in ClientAdapter which returns PassOwnPtr&lt;ClientAdapter&gt; and does
return adoptPtr(new ClientAdapter(...));
internally.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:192
&gt; +    m_clientAdapter = PassOwnPtr&lt;ClientAdapter&gt;(new ClientAdapter(this, m_client, request.downloadToFile()));

This code looks the same as loadSynchronously. Can they share more code?

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:199
&gt; +       m_loader-&gt;cancel();

Indentation appears not to be 4 spaces.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

Same thing about the copyright years.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:42
&gt; +class ThreadableLoaderClient;

ThreadableLoaderClient isn&apos;t used in this header (so remove the fwd decl.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:44
&gt; +} // namespace WebCore

No need for the ending comment in WebKit (and in this case I would omit it since the namespace is so small).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:71
&gt; +class AssociatedURLLoader : public WebURLLoader {

I would add a WTF_MAKE_NONCOPYABLE(AssociatedURLLoader); here (from wtf/Noncopyable.h).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:87
&gt; +    class ClientAdapter;

This feels out of place. I would put it after private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360271</commentid>
    <comment_count>12</comment_count>
      <attachid>84301</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-01 15:00:35 -0800</bug_when>
    <thetext>Created attachment 84301
Proposed Patch

2 questions for David:
1) I noticed an AssertMatchingEnums file for syncing enums. It seemed better to me to do this in AssociatedURLLoader.cpp. Is that OK?
2) AssociatedURLLoader::loadSynchronously probably isn&apos;t working after this change, since its response, error, and data objects aren&apos;t passed through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360279</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-01 15:02:58 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=84301) [details]
&gt; Proposed Patch
&gt; 
&gt; 2 questions for David:
&gt; 1) I noticed an AssertMatchingEnums file for syncing enums. It seemed better to me to do this in AssociatedURLLoader.cpp. Is that OK?

Sounds even better (than what I said).

&gt; 2) AssociatedURLLoader::loadSynchronously probably isn&apos;t working after this change, since its response, error, and data objects aren&apos;t passed through.

What&apos;s the question? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360284</commentid>
    <comment_count>14</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-01 15:07:19 -0800</bug_when>
    <thetext>I guess my question was &quot;Do you think it&apos;s important for the synchronous case to work now (or ever) and can it be added later, or should I connect this through WebCore as I did for downloadToFile stuff?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360287</commentid>
    <comment_count>15</comment_count>
      <attachid>84301</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-01 15:12:01 -0800</bug_when>
    <thetext>Comment on attachment 84301
Proposed Patch

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

A few comments.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:71
&gt; +    int m_downloadLength;

Can this overflow?

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:79
&gt; +    , m_downloadingToFile(downloadingToFile) { }

put the {} on different lines.

Would be nice to assert(!client); to make it clear that it should have a value.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:160
&gt; +COMPILE_ASSERT((int)WebKit::DenyCrossOriginRequests == (int)WebCore::DenyCrossOriginRequests, enum_mismatch);

If these casts remain (in another version), use C++ style casts (static_cast).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:176
&gt; +    m_clientAdapter = adoptPtr(new ClientAdapter(this, m_client, request.downloadToFile()));

Have a static create method do this and make the constructor private.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.h:35
&gt;  #include &quot;WebURLLoaderClient.h&quot;

This include isn&apos;t needed anymore (only a fwd declaration).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360289</commentid>
    <comment_count>16</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-01 15:17:04 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I guess my question was &quot;Do you think it&apos;s important for the synchronous case to work now (or ever) and can it be added later, or should I connect this through WebCore as I did for downloadToFile stuff?&quot;

I don&apos;t understand a few things:
1. Why there is any implementation if it doesn&apos;t work? Why not just crash (for example)?
2. Why do we have this method if it will do nothing? How do we know that no one will call it?

btw, there appear to be a lot of methods in the cpp file like AssociatedURLLoader::loadSynchronously which aren&apos;t declared in the .h file. I don&apos;t understand how that compiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360403</commentid>
    <comment_count>17</comment_count>
      <attachid>84328</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-01 17:02:54 -0800</bug_when>
    <thetext>Created attachment 84328
Proposed Patch

Added static create method to ClientAdapter.
Made loadSynchronously method fail to indicate it&apos;s not supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360405</commentid>
    <comment_count>18</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-01 17:05:15 -0800</bug_when>
    <thetext>Just realized I didn&apos;t fully address your questions. The loadSynchronously method is part of the interface. I could implement it but it would require another round of changes to DocumentThreadableLoader and SubresourceLoader, and this method isn&apos;t currently needed in the pepper URL loader which is the client for this. That class doesn&apos;t support synchronous loading either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360443</commentid>
    <comment_count>19</comment_count>
      <attachid>84328</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-01 17:51:05 -0800</bug_when>
    <thetext>Comment on attachment 84328
Proposed Patch

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

r- due to not returning PassRefPtr from constructor (and the question about overflow).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:58
&gt; +    static ClientAdapter* create(WebURLLoader*, WebURLLoaderClient*, bool /*downloadToFile*/);

This should return a PassRefPtr&lt;ClientAdapter&gt;

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:80
&gt; +    return new ClientAdapter(loader, client, downloadToFile);

Use the adoptPtr here (to convert to PassRefPtr).

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:114
&gt; +    m_downloadLength += lengthReceived;

I still wonder about overflow. (Not likely but overflow is where security issues creep in.)

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:161
&gt; +COMPILE_ASSERT_MATCHING_ENUM(UseAccessControl,  UseAccessControl);

two spaces after comma.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:162
&gt; +COMPILE_ASSERT_MATCHING_ENUM(AllowCrossOriginRequests,  AllowCrossOriginRequests);

Ditto.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:186
&gt; +    m_clientAdapter = adoptPtr(ClientAdapter::create(this, m_client, request.downloadToFile()));

adoptPtr shouldn&apos;t be here.

&gt; Source/WebKit/chromium/src/AssociatedURLLoader.cpp:200
&gt; +       m_loader-&gt;setDefersLoading(defersLoading);

Should be indented one more space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360934</commentid>
    <comment_count>20</comment_count>
      <attachid>84442</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-02 11:17:36 -0800</bug_when>
    <thetext>Created attachment 84442
Proposed Patch

I think I can implement the loadSynchronously method in AssociatedURLLoader.cpp, without any other WebKit changes. Can that be another changelist?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361465</commentid>
    <comment_count>21</comment_count>
      <attachid>84442</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-03 02:29:02 -0800</bug_when>
    <thetext>Comment on attachment 84442
Proposed Patch

Clearing flags on attachment: 84442

Committed r80219: &lt;http://trac.webkit.org/changeset/80219&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361466</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-03 02:29:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361664</commentid>
    <comment_count>23</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-03-03 09:10:58 -0800</bug_when>
    <thetext>Reopening since this was rolled out with http://trac.webkit.org/changeset/80244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362848</commentid>
    <comment_count>24</comment_count>
      <attachid>84840</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-04 18:39:07 -0800</bug_when>
    <thetext>Created attachment 84840
Proposed Patch

Default AssociatedURLLoader should allow credentials so as not to break tests.
AssociatedURLLoader::cancel should release DocumentThreadableLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363255</commentid>
    <comment_count>25</comment_count>
      <attachid>84840</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-07 00:46:36 -0800</bug_when>
    <thetext>Comment on attachment 84840
Proposed Patch

Clearing flags on attachment: 84840

Committed r80458: &lt;http://trac.webkit.org/changeset/80458&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363256</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-07 00:46:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363398</commentid>
    <comment_count>27</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-07 10:23:49 -0800</bug_when>
    <thetext>This was rolled out again, see https://bugs.webkit.org/show_bug.cgi?id=53925</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363399</commentid>
    <comment_count>28</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-03-07 10:25:06 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; This was rolled out again, see https://bugs.webkit.org/show_bug.cgi?id=53925

I think you meant https://bugs.webkit.org/show_bug.cgi?id=55863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365290</commentid>
    <comment_count>29</comment_count>
      <attachid>85345</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-10 10:20:20 -0800</bug_when>
    <thetext>Created attachment 85345
Proposed Patch

The tests run identically to  the unpatched version on Mac. Will double check on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365311</commentid>
    <comment_count>30</comment_count>
      <attachid>85345</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-10 10:54:15 -0800</bug_when>
    <thetext>Comment on attachment 85345
Proposed Patch

Hold off on reviewing. It still crashes on 1 test on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365324</commentid>
    <comment_count>31</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-10 11:08:03 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=85345) [details]
&gt; Proposed Patch
&gt; 
&gt; The tests run identically to  the unpatched version on Mac. Will double check on Windows.

Please indicate what changes were done between patches to make it easier to review. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365360</commentid>
    <comment_count>32</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-10 11:36:37 -0800</bug_when>
    <thetext>This patch adds a clearClient method to the AssociatedURLLoader::ClientAdapter class. AssociatedURLLoader calls it to stop callbacks to the actual client after a load is canceled. This matches the previous implementations semantics.

I also fixed a typo that prevented the loadAsynchronously method from ever allowing cross origin requests.

As it stands, AssociatedURLLoader will allow cross origin requests if constructed with the original ctor. This is necessary for the following to pass:

/http/tests/security/local-video-source-from-remote.html

This makes another test pass which is supposed to fail:

/http/tests/security/xss-DENIED-xml-external-entity.xhtml

A future patch should make sure we can provide appropriately set up loaders to the different clients of WebFrame::CreateAssociatedLoader();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365424</commentid>
    <comment_count>33</comment_count>
      <attachid>85345</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-10 12:29:33 -0800</bug_when>
    <thetext>Comment on attachment 85345
Proposed Patch

I reverted to the original and rebuilt DumpRenderTree, and it still crashes on this test, in exactly the same way. That leads me to think it&apos;s my local setup that is wrong. Do you think it&apos;s a bad idea to go ahead and see what the bots do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366142</commentid>
    <comment_count>34</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-11 11:18:01 -0800</bug_when>
    <thetext>Tests pass on Windows. Please take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366155</commentid>
    <comment_count>35</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-11 11:26:24 -0800</bug_when>
    <thetext>I want to make one minor change, which will help my next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366288</commentid>
    <comment_count>36</comment_count>
      <attachid>85523</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-11 13:45:33 -0800</bug_when>
    <thetext>Created attachment 85523
Proposed Patch

I changed AssociatedURLLoaderOptions struct to WebURLLoaderOptions, as this will need to be a parameter for WebFrame::createAssociatedURLLoader, and AssociatedURLLoader isn&apos;t part of the public WebKit interface.

I also made a minor semantic change, so the client will get didFinishLoading callbacks even if they cancel during the didDownloadData callback. This seems more correct, as at this point the load is finished and can&apos;t fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366322</commentid>
    <comment_count>37</comment_count>
      <attachid>85537</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-11 14:36:34 -0800</bug_when>
    <thetext>Created attachment 85537
Proposed Patch

Fixed Copyright on WebURLLoader.h, and change WebURLLoaderCrossOriginRequestPolicy to WebCrossOriginRequestPolicy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367661</commentid>
    <comment_count>38</comment_count>
      <attachid>85537</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-15 07:58:35 -0700</bug_when>
    <thetext>Comment on attachment 85537
Proposed Patch

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

&gt; Source/WebKit/chromium/public/WebURLLoader.h:51
&gt; +    WebURLLoaderOptions() : sniffContent(false), allowCredentials(false), forcePreflight(false), crossOriginRequestPolicy(DenyCrossOriginRequests) {}

Note we typically put a space in this construct &quot;{ }&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367750</commentid>
    <comment_count>39</comment_count>
      <attachid>85537</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-15 10:24:47 -0700</bug_when>
    <thetext>Comment on attachment 85537
Proposed Patch

Clearing flags on attachment: 85537

Committed r81144: &lt;http://trac.webkit.org/changeset/81144&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367751</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-15 10:24:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368086</commentid>
    <comment_count>41</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-15 17:38:54 -0700</bug_when>
    <thetext>So close, but this appears to have broken the ui test NPAPITesterBase.GetURLRedirectNotification, which I saw here: http://build.chromium.org/p/chromium.webkit/builders/Vista%20Tests/

So it is best to roll it out one more time. I have a good feeling about next time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368100</commentid>
    <comment_count>42</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-15 17:50:25 -0700</bug_when>
    <thetext>Rolled out here: http://trac.webkit.org/changeset/81204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368655</commentid>
    <comment_count>43</comment_count>
      <attachid>86002</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-03-16 17:01:32 -0700</bug_when>
    <thetext>Created attachment 86002
Proposed Patch

I forgot to derive the ClientAdapter from the DocumentThreadableLoaderClient class that we went to so much trouble to make. DocumentThreadableLoader wasn&apos;t calling the willSendRequest method of the adapter as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368685</commentid>
    <comment_count>44</comment_count>
      <attachid>86002</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-16 17:45:26 -0700</bug_when>
    <thetext>Comment on attachment 86002
Proposed Patch

Clearing flags on attachment: 86002

Committed r81303: &lt;http://trac.webkit.org/changeset/81303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368686</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-16 17:45:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81901</attachid>
            <date>2011-02-09 17:37:31 -0800</date>
            <delta_ts>2011-02-09 18:07:16 -0800</delta_ts>
            <desc>Change AssociatedURLLoader to support CORS, using DocumentThreadableLoader</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>31431</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMDkgIGJpbGxidWRn
ZSAgPGJidWRnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBBc3NvY2lhdGVkVVJMTG9hZGVyIHN1cHBvcnQgQ09SUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5MjUKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0
U3VjY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc1N1YnJlc291cmNl
TG9hZGVyQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdWJyZXNvdXJjZUxvYWRlcjo6ZmluaXNoVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2U6OnNldERvd25sb2FkRmlsZVBhdGgpOgorCiAyMDExLTAyLTA5ICBCZXRoIERha2luICA8YmRh
a2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgLCBtX29wdGlvbnMob3B0
aW9ucykKICAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3QoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCiAgICAgLCBtX2FzeW5jKGJsb2NraW5nQmVo
YXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQorICAgICwgbV9maW5pc2hUaW1lKDAuMCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChjbGllbnQpOwpAQCAtMTY2LDYgKzE2
NywxMiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKICAgICBtX2Ns
aWVudCA9IDA7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZXREZWZlcnNM
b2FkaW5nKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsKICAgICBBU1NF
UlQobV9jbGllbnQpOwpAQCAtMjMxLDYgKzIzOCwxMiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6ZGlkUmVjZWl2CiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aFJlY2VpdmVkKTsKIH0KIAordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKK30KKwogdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKQEAgLTI5OCw4
ICszMTEsNiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0CiAgICAg
T3duUHRyPFJlc291cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKICAgICBhY3R1YWxSZXF1ZXN0
LnN3YXAobV9hY3R1YWxSZXF1ZXN0KTsKIAotICAgIGFjdHVhbFJlcXVlc3QtPnNldEhUVFBPcmln
aW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0KICAgICAvLyBJ
dCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUgc2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFk
eSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCiAgICAgbG9hZFJlcXVlc3QoKmFj
dHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNoZWNrKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDc3ODMz
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERl
ZmVyc0xvYWRpbmcoYm9vbCB2YWx1ZSk7CisKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyPjo6ZGVyZWY7CiAKQEAgLTYyLDcgKzY0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZUxvYWRlcigp
IHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZUxvYWRlcigp
IHsgZGVyZWYoKTsgfQogCi0gICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBCbG9ja2luZ0JlaGF2
aW9yIHsKICAgICAgICAgICAgIExvYWRTeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgTG9hZEFz
eW5jaHJvbm91c2x5CkBAIC03NSw5ICs3NiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZl
ZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAKKyAgICAgICAgYm9vbCBpc1N1YnJlc291cmNlTG9hZGVyQWN0aXZlKCkgeyBy
ZXR1cm4gbV9sb2FkZXI7IH0KKyAgICAgICAgZG91YmxlIGZpbmlzaFRpbWUoKSB7IHJldHVybiBt
X2ZpbmlzaFRpbWU7IH0KKworICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRT
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxh
dGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CkBAIC05OCw2ICsxMDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9z
YW1lT3JpZ2luUmVxdWVzdDsKICAgICAgICAgYm9vbCBtX2FzeW5jOwogICAgICAgICBPd25QdHI8
UmVzb3VyY2VSZXF1ZXN0PiBtX2FjdHVhbFJlcXVlc3Q7ICAvLyBub24tbnVsbCBkdXJpbmcgQWNj
ZXNzIENvbnRyb2wgcHJlZmxpZ2h0IGNoZWNrcworICAgICAgICBkb3VibGUgbV9maW5pc2hUaW1l
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBzdWJyZXMK
IFN1YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUsIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiAgICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQorICAgICwgbV9maW5pc2hUaW1lKDAuMCkKICAgICAsIG1fbG9hZGluZ011
bHRpcGFydENvbnRlbnQoZmFsc2UpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTc3LDYgKzE3OCw3
IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcKICAgICAvLyBDYWxs
aW5nIHJlbW92ZVN1YnJlc291cmNlTG9hZGVyIHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBhIGNhbGwg
dG8gZGVyZWYsIHNvIHdlIG11c3QgcHJvdGVjdCBvdXJzZWx2ZXMuCiAgICAgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCisgICAgbV9maW5pc2hUaW1lID0gZmluaXNo
VGltZTsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKHRoaXMpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmgJKHJldmlzaW9uIDc3ODMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsg
fQogCisgICAgICAgIGRvdWJsZSBmaW5pc2hUaW1lKCkgeyByZXR1cm4gbV9maW5pc2hUaW1lOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSosIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZik7CiAgICAgICAgIHZpcnR1YWwgflN1YnJlc291cmNlTG9hZGVy
KCk7CkBAIC02MCw2ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAgICAgICAgU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgICAgICBkb3VibGUgbV9maW5pc2hUaW1l
OwogICAgICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVl
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA3NzgzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBt
X3JlcXVlc3RvclByb2Nlc3NJRCgwKQogICAgICAgICAgICAgLCBtX2FwcENhY2hlSG9zdElEKDAp
CiAgICAgICAgICAgICAsIG1faGFzVXNlckdlc3R1cmUoZmFsc2UpCisgICAgICAgICAgICAsIG1f
ZG93bmxvYWRUb0ZpbGUoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC01MSw2ICs1
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9j
ZXNzSUQoMCkKICAgICAgICAgICAgICwgbV9hcHBDYWNoZUhvc3RJRCgwKQogICAgICAgICAgICAg
LCBtX2hhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxl
KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjAsNiArNjIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCiAgICAg
ICAgICAgICAsIG1fYXBwQ2FjaGVIb3N0SUQoMCkKICAgICAgICAgICAgICwgbV9oYXNVc2VyR2Vz
dHVyZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKICAgICAgICAgfQpA
QCAtNzAsNiArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVx
dWVzdG9yUHJvY2Vzc0lEKDApCiAgICAgICAgICAgICAsIG1fYXBwQ2FjaGVIb3N0SUQoMCkKICAg
ICAgICAgICAgICwgbV9oYXNVc2VyR2VzdHVyZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9kb3du
bG9hZFRvRmlsZShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTkyLDYgKzk2LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBoYXNVc2VyR2VzdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVXNlckdlc3R1cmU7IH0KICAgICAgICAgdm9pZCBzZXRIYXNVc2Vy
R2VzdHVyZShib29sIGhhc1VzZXJHZXN0dXJlKSB7IG1faGFzVXNlckdlc3R1cmUgPSBoYXNVc2Vy
R2VzdHVyZTsgfQogCisgICAgICAgIC8vIFRydWUgaWYgcmVxdWVzdCBzaG91bGQgYmUgZG93bmxv
YWRlZCB0byBmaWxlLgorICAgICAgICBib29sIGRvd25sb2FkVG9GaWxlKCkgY29uc3QgeyByZXR1
cm4gbV9kb3dubG9hZFRvRmlsZTsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJv
b2wgZG93bmxvYWRUb0ZpbGUpIHsgbV9kb3dubG9hZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTsKIApAQCAtMTA1LDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50
IG1fcmVxdWVzdG9yUHJvY2Vzc0lEOwogICAgICAgICBpbnQgbV9hcHBDYWNoZUhvc3RJRDsKICAg
ICAgICAgYm9vbCBtX2hhc1VzZXJHZXN0dXJlOworICAgICAgICBib29sIG1fZG93bmxvYWRUb0Zp
bGU7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGEg
OiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7CkBAIC0xMTIsNiAr
MTIxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9yZXF1ZXN0b3JQcm9j
ZXNzSUQ7CiAgICAgICAgIGludCBtX2FwcENhY2hlSG9zdElEOwogICAgICAgICBib29sIG1faGFz
VXNlckdlc3R1cmU7CisgICAgICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkocmV2aXNp
b24gNzc4MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc3BvbnNlVGltZTsgfQogICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGltZShkb3VibGUg
cmVzcG9uc2VUaW1lKSB7IG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9CiAKLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBzb2NrZXRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zb2NrZXRB
ZGRyZXNzOyB9Ci0gICAgICAgIHZvaWQgc2V0U29ja2V0QWRkcmVzcyhjb25zdCBTdHJpbmcmIHZh
bHVlKSB7IG1fc29ja2V0QWRkcmVzcyA9IHZhbHVlOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYg
ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsgfQor
ICAgICAgICB2b2lkIHNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkb3dubG9hZEZp
bGVQYXRoKSB7IG1fZG93bmxvYWRGaWxlUGF0aCA9IGRvd25sb2FkRmlsZVBhdGg7IH0KIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlQmFzZTsKQEAg
LTE0Nyw5ICsxNDcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHJlc3BvbnNl
cywgdGhpcyB0aW1lIGNvdWxkIGJlICJmYXIiIGluIHRoZSBwYXN0LgogICAgICAgICBkb3VibGUg
bV9yZXNwb25zZVRpbWU7CiAKLSAgICAgICAgLy8gUmVtb3RlIGFkZHJlc3Mgb2YgdGhlIHNvY2tl
dCB3aGljaCBmZXRjaGVkIHRoaXMgcmVzb3VyY2UsIGZvciBwcmVzZW50aW5nCi0gICAgICAgIC8v
IHRvIGlucXVpc2l0aXZlIHVzZXJzLiAgQ2FuIGJlICJpcHY0OnBvcnQiLCAiW2lwdjZdOnBvcnQi
LCBvciBlbXB0eS4KLSAgICAgICAgU3RyaW5nIG1fc29ja2V0QWRkcmVzczsKKyAgICAgICAgLy8g
VGhlIHBhdGggdG8gdGhlIGRvd25sb2FkZWQgZmlsZS4KKyAgICAgICAgU3RyaW5nIG1fZG93bmxv
YWRGaWxlUGF0aDsKICAgICB9OwogCiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNw
b25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewpA
QCAtMTYyLDcgKzE2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3dh
c0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgICAgICBib29sIG1fd2FzRmV0Y2hlZFZp
YVByb3h5OwogICAgICAgICBkb3VibGUgbV9yZXNwb25zZVRpbWU7Ci0gICAgICAgIFN0cmluZyBt
X3NvY2tldEFkZHJlc3M7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTY2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MiBAQAorMjAx
MS0wMi0wOSAgYmlsbGJ1ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEFzc29jaWF0ZWRVUkxMb2Fk
ZXIgc3VwcG9ydCBDT1JTCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzkyNQorCisgICAgICAgICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgor
ICAgICAgICAoV1RGOjpDb252ZXJ0T3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0
ZWRVUkxMb2FkZXI6OkxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpMb2FkZXIpOgorICAgICAgICAo
V2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkU2VuZERhdGEp
OgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRl
cjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVy
OjpMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChX
ZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjp+QXNzb2NpYXRlZFVSTExvYWRlcik6Cisg
ICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAg
ICAgICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaDoKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlck9wdGlvbnM6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zKToKKyAgICAg
ICAgKiBzcmMvV2ViVVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVl
c3RQcml2YXRlSW1wbDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVl
c3RQcml2YXRlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJV
UkxSZXF1ZXN0UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQ
cml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZp
bGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmls
ZVBhdGgpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDoKKwogMjAxMS0w
Mi0wOSAgRGF2aWQgSG9sbG93YXkgIDxkaG9sbG93YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9uIDc3ODMzKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTMxLDEwMyArMzEsMjA0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgiCisKICNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVz
cG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RG
OworCituYW1lc3BhY2UgeworCitUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBDb252ZXJ0T3B0aW9u
cyhjb25zdCBXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIGNvbnZlcnRlZE9wdGlvbnM7CisgICAgY29udmVy
dGVkT3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3M7
CisgICAgY29udmVydGVkT3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBvcHRpb25zLnNuaWZmQ29udGVu
dDsKKyAgICBjb252ZXJ0ZWRPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHM7CisgICAgY29udmVydGVkT3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IG9wdGlv
bnMuZm9yY2VQcmVmbGlnaHQ7CisgICAgc3dpdGNoIChvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSkgeworICAgIGNhc2UgV2ViS2l0OjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czoKKyAg
ICAgICAgY29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBXZWJDb3Jl
OjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJL
aXQ6OlVzZUFjY2Vzc0NvbnRyb2w6CisgICAgICAgIGNvbnZlcnRlZE9wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID0gV2ViQ29yZTo6VXNlQWNjZXNzQ29udHJvbDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXZWJLaXQ6OkFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czoKKyAgICAgICAg
Y29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBXZWJDb3JlOjpBbGxv
d0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
Y29udmVydGVkT3B0aW9uczsKK30KKworfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQXNzb2Np
YXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1w
bD4gZnJhbWVJbXBsKQotICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKSwKLSAgICAgIG1fcmVh
bExvYWRlcih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpLAotICAgICAgbV9yZWFs
Q2xpZW50KDApCisvLyBUaGlzIGlubmVyIGNsYXNzIGJyaWRnZXMgdGhlIGludGVyZmFjZSBkaWZm
ZXJlbmNlcyBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdAorLy8gbG9hZGVycyBjbGllbnRzLiBC
ZWNhdXNlIGl0IGRlcml2ZXMgZnJvbSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIsIGl0IGltcGxl
bWVudHMKKy8vIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50LCB3aGljaCBpcyBjbG9zZSB0byB0aGVt
IFdlYlVSTExvYWRlckNsaWVudC4KK2NsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlciA6
IHB1YmxpYyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQXNzb2NpYXRlZFVSTExvYWRlciogb3duZXIs
IERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkZXI+IGNyZWF0ZShBc3NvY2lh
dGVkVVJMTG9hZGVyKiBvd25lciwgRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAgIExvYWRlcihBc3NvY2lhdGVkVVJM
TG9hZGVyKiBvd25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2Nr
aW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpOworCisgICAgdmlydHVhbCB2b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OkxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7CisgICAgdmlydHVhbCB2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OkxvYWRlcjo6ZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQg
bG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2Vu
dCk7CisgICAgdmlydHVhbCB2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpk
aWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBBc3NvY2lhdGVkVVJMTG9h
ZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZpcnR1
YWwgdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3Vi
cmVzb3VyY2VMb2FkZXIqIGxvYWRlcik7CisgICAgdmlydHVhbCB2b2lkIEFzc29jaWF0ZWRVUkxM
b2FkZXI6OkxvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcik7CisKKyAgICAvLyBUaGUgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyIHJlcXVpcmVzIGEgY2xpZW50LCBzbyBkZWZpbmUgb25lIHRoYXQgZG9lcyBub3RoaW5nLgor
ICAgIGNsYXNzIER1bW15Q2xpZW50IDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQKKyAg
ICB7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKiBtX293bmVy
OworICAgIER1bW15Q2xpZW50IG1fZHVtbXlDbGllbnQ7Cit9OworCit2b2lkIEFzc29jaWF0ZWRV
UkxMb2FkZXI6OkxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShBc3NvY2lhdGVkVVJM
TG9hZGVyKiBvd25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogeworICAg
IC8vIFRoZSBsb2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBl
eGl0cy4KKyAgICBSZWZQdHI8TG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgTG9hZGVyKG93
bmVyLCBkb2N1bWVudCwgTG9hZFN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMpKTsKKyAg
ICBBU1NFUlQobG9hZGVyLT5oYXNPbmVSZWYoKSk7CiB9CiAKLUFzc29jaWF0ZWRVUkxMb2FkZXI6
On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkKK1Bhc3NSZWZQdHI8QXNzb2NpYXRlZFVSTExvYWRlcjo6
TG9hZGVyPiBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmNyZWF0ZShBc3NvY2lhdGVkVVJM
TG9hZGVyKiBvd25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogeworICAg
IFJlZlB0cjxMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBMb2FkZXIob3duZXIsIGRvY3Vt
ZW50LCBMb2FkQXN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMpKTsKKyAgICBpZiAoIWxv
YWRlci0+aXNMb2FkaW5nKCkpCisgICAgICAgIGxvYWRlciA9IDA7CisgICAgcmV0dXJuIGxvYWRl
ci5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9u
b3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMUmVzcG9uc2UmIHJlc3Bv
bnNlLCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCi17Ci0gICAgQVNTRVJUKCFt
X3JlYWxDbGllbnQpOworQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpMb2FkZXIoQXNzb2Np
YXRlZFVSTExvYWRlciogb3duZXIsIERvY3VtZW50KiBkb2N1bWVudCwgQmxvY2tpbmdCZWhhdmlv
ciBibG9ja2luZ0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgIDogRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKGRvY3VtZW50LCAmbV9kdW1teUNsaWVudCwgYmxvY2tpbmdCZWhhdmlvciwgcmVx
dWVzdCwgb3B0aW9ucyksIG1fb3duZXIob3duZXIpIHsKK30KIAotICAgIFdlYlVSTFJlcXVlc3Qg
cmVxdWVzdENvcHkocmVxdWVzdCk7Ci0gICAgcHJlcGFyZVJlcXVlc3QocmVxdWVzdENvcHkpOwor
dm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNv
dXJjZUxvYWRlciogc3VicmVzb3VyY2VMb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChzdWJyZXNvdXJjZUxvYWRlciwgcmVx
dWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAKLSAgICBtX3JlYWxMb2FkZXItPmxvYWRTeW5jaHJv
bm91c2x5KHJlcXVlc3RDb3B5LCByZXNwb25zZSwgZXJyb3IsIGRhdGEpOworICAgIFdyYXBwZWRS
ZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgV3JhcHBlZFJlc291
cmNlUmVzcG9uc2Ugd3JhcHBlZFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgIG1fb3du
ZXItPm1fY2xpZW50LT53aWxsU2VuZFJlcXVlc3QobV9vd25lciwgd3JhcHBlZFJlcXVlc3QsIHdy
YXBwZWRSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5j
aHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTExvYWRlckNsaWVu
dCogY2xpZW50KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFNlbmREYXRh
KFN1YnJlc291cmNlTG9hZGVyKiBzdWJyZXNvdXJjZUxvYWRlciwgdW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAg
ICBBU1NFUlQoIW1fcmVhbENsaWVudCk7CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWRTZW5kRGF0YShzdWJyZXNvdXJjZUxvYWRlciwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNl
bnQpOwogCi0gICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKLSAgICBwcmVw
YXJlUmVxdWVzdChyZXF1ZXN0Q29weSk7CisgICAgbV9vd25lci0+bV9jbGllbnQtPmRpZFNlbmRE
YXRhKG1fb3duZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBB
c3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJj
ZUxvYWRlciogc3VicmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KHN1YnJlc291cmNlTG9hZGVyLCByZXNwb25zZSk7CiAKLSAgICBtX3JlYWxDbGllbnQgPSBjbGll
bnQ7Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHRo
aXMpOworICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHdyYXBwZWRSZXNwb25zZShyZXNwb25z
ZSk7CisgICAgbV9vd25lci0+bV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX293bmVyLCB3
cmFwcGVkUmVzcG9uc2UpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNlbCgp
Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVz
b3VyY2VMb2FkZXIqIHN1YnJlc291cmNlTG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoUmVjZWl2ZWQpCiB7Ci0gICAgbV9yZWFsTG9hZGVyLT5jYW5jZWwoKTsKKyAgICBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKHN1YnJlc291cmNlTG9hZGVyLCBkYXRh
LCBsZW5ndGhSZWNlaXZlZCk7CisKKyAgICBtX293bmVyLT5tX2NsaWVudC0+ZGlkUmVjZWl2ZURh
dGEobV9vd25lciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRV
UkxMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQordm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNv
dXJjZUxvYWRlciogc3VicmVzb3VyY2VMb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJz
TG9hZGluZyk7CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEoc3VicmVzb3VyY2VMb2FkZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKKworICAg
IG1fb3duZXItPm1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEobV9vd25lciwgZGF0
YSwgbGVuZ3RoUmVjZWl2ZWQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnByZXBh
cmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciogc3VicmVzb3Vy
Y2VMb2FkZXIpCiB7Ci0gICAgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2Fj
aGVIb3N0ID0gbV9mcmFtZUltcGwtPmRhdGFTb3VyY2UoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KTsKLSAgICBpZiAoYXBwbGljYXRpb25DYWNoZUhvc3QpCi0gICAgICAgIGFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LT53aWxsU3RhcnRTdWJSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgbV9mcmFt
ZUltcGwtPmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QpOworICAgIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhzdWJyZXNvdXJjZUxvYWRlcik7CisKKyAg
ICBkb3VibGUgZmluaXNoVGltZSA9IHN1YnJlc291cmNlTG9hZGVyLT5maW5pc2hUaW1lKCk7Cisg
ICAgbV9vd25lci0+bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9vd25lciwgZmluaXNoVGlt
ZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFdlYlVS
TExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRp
ZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIHN1YnJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKIHsKLSAgICBtX3JlYWxDbGllbnQtPndpbGxTZW5kUmVxdWVzdCh0aGlz
LCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmRpZEZhaWwoc3VicmVzb3VyY2VMb2FkZXIsIGVycm9yKTsKKworICAgIFdlYlVSTEVy
cm9yIHdlYl9lcnJvcihlcnJvcik7CisgICAgbV9vd25lci0+bV9jbGllbnQtPmRpZEZhaWwobV9v
d25lciwgd2ViX2Vycm9yKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRTZW5k
RGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQorQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNz
b2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsKQorICAg
IDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9jbGllbnQoMCkKIHsKLSAgICBtX3Jl
YWxDbGllbnQtPmRpZFNlbmREYXRhKHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50
KTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25z
ZSYgcmVzcG9uc2UpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBh
c3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwsIGNvbnN0IEFzc29jaWF0ZWRVUkxMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwg
bV9vcHRpb25zKG9wdGlvbnMpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFt
ZUltcGwpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZERvd25sb2FkRGF0YShX
ZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3Nv
Y2lhdGVkVVJMTG9hZGVyKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0
aGlzLCBkYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNl
aXZlRGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkK
K3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJM
UmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlLCBXZWJVUkxFcnJvciYg
ZXJyb3IsIFdlYkRhdGEmIGRhdGEpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRSZWNlaXZlRGF0
YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKworICAg
IFdlYlVSTFJlcXVlc3QgcmVxdWVzdENvcHkocmVxdWVzdCk7CisgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiB3ZWJjb3JlX3JlcXVlc3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7Cisg
ICAgRG9jdW1lbnQqIHdlYmNvcmVfZG9jdW1lbnQgPSBtX2ZyYW1lSW1wbC0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zID0gQ29udmVydE9w
dGlvbnMobV9vcHRpb25zKTsKKyAgICBMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
dGhpcywgd2ViY29yZV9kb2N1bWVudCwgd2ViY29yZV9yZXF1ZXN0LCBvcHRpb25zKTsKIH0KIAot
dm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJM
TG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCit2b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1
ZXN0LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NF
UlQoIW1fY2xpZW50KTsKKworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisKKyAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOworICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZV9yZXF1ZXN0ID0gcmVxdWVzdC50b1Jlc291cmNl
UmVxdWVzdCgpOworICAgIERvY3VtZW50KiB3ZWJjb3JlX2RvY3VtZW50ID0gbV9mcmFtZUltcGwt
PmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9u
cyA9IENvbnZlcnRPcHRpb25zKG1fb3B0aW9ucyk7CisgICAgbV9sb2FkZXIgPSBMb2FkZXI6OmNy
ZWF0ZSh0aGlzLCB3ZWJjb3JlX2RvY3VtZW50LCB3ZWJjb3JlX3JlcXVlc3QsIG9wdGlvbnMpOwog
fQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9h
ZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNl
bCgpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMsIGZpbmlzaFRp
bWUpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiB9CiAK
LXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBX
ZWJVUkxFcnJvciYgZXJyb3IpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVyc0xv
YWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmFpbCh0
aGlzLCBlcnJvcik7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgIG1fbG9hZGVyLT5zZXREZWZl
cnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVy
LmgJKHJldmlzaW9uIDc3ODMzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2Np
YXRlZFVSTExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MCwxMiArNDAsMzEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYkZyYW1lSW1wbDsKIAorZW51bSBTdG9yZWRDcmVkZW50aWFs
cyB7CisgICAgQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICBEb05vdEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMKK307CisKK2VudW0gQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55
Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nlc3NDb250cm9sLAorICAgIEFsbG93Q3Jv
c3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25z
IHsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3Mo
ZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9y
Y2VQcmVmbGlnaHQoZmFsc2UpLCBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3koRGVueUNyb3NzT3Jp
Z2luUmVxdWVzdHMpIHsgfQorICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CisgICAgYm9vbCBz
bmlmZkNvbnRlbnQ7CisgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAgLy8gV2hldGhlciB0byBz
ZW5kIEhUVFAgY3JlZGVudGlhbHMgYW5kIGNvb2tpZXMgd2l0aCB0aGUgcmVxdWVzdC4KKyAgICBi
b29sIGZvcmNlUHJlZmxpZ2h0OyAgLy8gSWYgQWNjZXNzQ29udHJvbCBpcyB1c2VkLCB3aGV0aGVy
IHRvIGZvcmNlIGEgcHJlZmxpZ2h0LgorICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9z
c09yaWdpblJlcXVlc3RQb2xpY3k7Cit9OworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1w
bGVtZW50IFdlYkZyYW1lOjpjcmVhdGVBc3NvY2lhdGVkVVJMTG9hZGVyLgotLy8gRklYTUU6IElt
cGxlbWVudCBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlci4KLWNsYXNzIEFz
c29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2ViVVJMTG9hZGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBXZWJVUkxMb2FkZXJDbGllbnQgeworY2xhc3MgQXNzb2NpYXRl
ZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2FkZXIgewogcHVibGljOgotICAgIEFzc29jaWF0
ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+KTsKKyAgICBBc3NvY2lhdGVkVVJM
TG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZSk7CisgICAgQXNzb2NpYXRlZFVS
TExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWUsIGNvbnN0IEFzc29jaWF0ZWRV
UkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKTsKICAgICB+QXNzb2NpYXRlZFVSTExvYWRlcigpOwog
CiAgICAgLy8gV2ViVVJMTG9hZGVyIG1ldGhvZHM6CkBAIC01NCwyMiArNzMsMTMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJz
TG9hZGluZyhib29sKTsKIAotICAgIC8vIFdlYlVSTExvYWRlckNsaWVudCBtZXRob2RzOgotICAg
IHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViVVJMTG9hZGVyKiwgV2ViVVJMUmVxdWVz
dCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0
IFdlYlVSTFJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJV
UkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImKTsKKyAgICBj
bGFzcyBMb2FkZXI7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwcmVwYXJlUmVxdWVzdChXZWJVUkxS
ZXF1ZXN0Jik7Ci0KICAgICBSZWZQdHI8V2ViRnJhbWVJbXBsPiBtX2ZyYW1lSW1wbDsKLSAgICBP
d25QdHI8V2ViVVJMTG9hZGVyPiBtX3JlYWxMb2FkZXI7Ci0gICAgV2ViVVJMTG9hZGVyQ2xpZW50
KiBtX3JlYWxDbGllbnQ7CisgICAgQXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMgbV9vcHRpb25z
OworICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRyPExvYWRlcj4g
bV9sb2FkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCShyZXZpc2lvbiA3NzgzMykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmVzb3VyY2VS
ZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKICAgICAgICAgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgICAgICBt
X2Rvd25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsKICAgICB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTI2OSwxMiArMjY4LDEyIEBA
IHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW4KIAogYm9vbCBXZWJVUkxS
ZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9kb3dubG9hZFRvRmlsZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVz
dC0+ZG93bmxvYWRUb0ZpbGUoKTsKIH0KIAogdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXREb3dubG9h
ZFRvRmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3dubG9h
ZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVl
c3QtPnNldERvd25sb2FkVG9GaWxlKGRvd25sb2FkVG9GaWxlKTsKIH0KIAogUmVzb3VyY2VSZXF1
ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCShy
ZXZpc2lvbiA3NzgzMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVl
c3RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE3ICszOSwxMyBAQCBjbGFzcyBXZWJV
UkxSZXF1ZXN0UHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQog
ICAgICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKHRydWUpCi0gICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9Cisg
ICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2Fs
bGVkIGJ5IFdlYlVSTFJlcXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3Qu
CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QqIG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRl
bnRpYWxzOwotCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25j
ZSB3ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmls
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDYgQEAgcHVibGljOgogICAgICAgICA6IG1fcmVzb3VyY2VSZXNwb25zZUFs
bG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkKICAgICB7CiAgICAgICAgIG1fcmVzb3Vy
Y2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uOwotICAgICAgICBtX2Rv
d25sb2FkRmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgfQogCiAgICAgdmly
dHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0zNzYsMjIgKzM3NSwxMiBA
QCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBheWxvCiAKIFdlYlN0cmluZyBX
ZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXNwb25zZS0+ZG93bmxvYWRGaWxlUGF0aCgpOwogfQogCiB2b2lkIFdlYlVSTFJlc3Bv
bnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWRGaWxlUGF0
aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aCA9IGRvd25sb2FkRmlsZVBh
dGg7Ci19Ci0KLVdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6c29ja2V0QWRkcmVzcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zb2NrZXRBZGRy
ZXNzKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFNvY2tldEFkZHJlc3MoY29uc3Qg
V2ViU3RyaW5nJiBzb2NrZXRBZGRyZXNzKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
c3BvbnNlLT5zZXRTb2NrZXRBZGRyZXNzKHNvY2tldEFkZHJlc3MpOworICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXNwb25zZS0+c2V0RG93bmxvYWRGaWxlUGF0aChkb3dubG9hZEZpbGVQYXRoLmRh
dGEoKSk7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVBy
aXZhdGUqIHApCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25z
ZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJV
UkxSZXNwb25zZVByaXZhdGUuaAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
OSArNDUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9uc2U7Ci0KLSAgICAv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ugb25jZSB3ZSBoYXZlIGFuIGlu
dGVybmFsIGNvbnN1bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="73513"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81907</attachid>
            <date>2011-02-09 18:07:16 -0800</date>
            <delta_ts>2011-02-10 13:32:03 -0800</delta_ts>
            <desc>AssociatedURLLoader supports CORS using DocumentThreadableLoader</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>31134</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMDkgIGJpbGxidWRn
ZSAgPGJidWRnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBBc3NvY2lhdGVkVVJMTG9hZGVyIHN1cHBvcnQgQ09SUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5MjUKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0
U3VjY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc1N1YnJlc291cmNl
TG9hZGVyQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdWJyZXNvdXJjZUxvYWRlcjo6ZmluaXNoVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2U6OnNldERvd25sb2FkRmlsZVBhdGgpOgorCiAyMDExLTAyLTA5ICBCZXRoIERha2luICA8YmRh
a2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgLCBtX29wdGlvbnMob3B0
aW9ucykKICAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3QoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCiAgICAgLCBtX2FzeW5jKGJsb2NraW5nQmVo
YXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQorICAgICwgbV9maW5pc2hUaW1lKDAuMCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChjbGllbnQpOwpAQCAtMTY2LDYgKzE2
NywxMiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKICAgICBtX2Ns
aWVudCA9IDA7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZXREZWZlcnNM
b2FkaW5nKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsKICAgICBBU1NF
UlQobV9jbGllbnQpOwpAQCAtMjMxLDYgKzIzOCwxMiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6ZGlkUmVjZWl2CiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aFJlY2VpdmVkKTsKIH0KIAordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKK30KKwogdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKQEAgLTI5OCw4
ICszMTEsNiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0CiAgICAg
T3duUHRyPFJlc291cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKICAgICBhY3R1YWxSZXF1ZXN0
LnN3YXAobV9hY3R1YWxSZXF1ZXN0KTsKIAotICAgIGFjdHVhbFJlcXVlc3QtPnNldEhUVFBPcmln
aW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0KICAgICAvLyBJ
dCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUgc2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFk
eSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCiAgICAgbG9hZFJlcXVlc3QoKmFj
dHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNoZWNrKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDc3ODMz
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERl
ZmVyc0xvYWRpbmcoYm9vbCB2YWx1ZSk7CisKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyPjo6ZGVyZWY7CiAKQEAgLTYyLDcgKzY0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZUxvYWRlcigp
IHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZUxvYWRlcigp
IHsgZGVyZWYoKTsgfQogCi0gICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBCbG9ja2luZ0JlaGF2
aW9yIHsKICAgICAgICAgICAgIExvYWRTeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgTG9hZEFz
eW5jaHJvbm91c2x5CkBAIC03NSw5ICs3NiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZl
ZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAKKyAgICAgICAgYm9vbCBpc1N1YnJlc291cmNlTG9hZGVyQWN0aXZlKCkgeyBy
ZXR1cm4gbV9sb2FkZXI7IH0KKyAgICAgICAgZG91YmxlIGZpbmlzaFRpbWUoKSB7IHJldHVybiBt
X2ZpbmlzaFRpbWU7IH0KKworICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRT
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxh
dGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CkBAIC05OCw2ICsxMDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9z
YW1lT3JpZ2luUmVxdWVzdDsKICAgICAgICAgYm9vbCBtX2FzeW5jOwogICAgICAgICBPd25QdHI8
UmVzb3VyY2VSZXF1ZXN0PiBtX2FjdHVhbFJlcXVlc3Q7ICAvLyBub24tbnVsbCBkdXJpbmcgQWNj
ZXNzIENvbnRyb2wgcHJlZmxpZ2h0IGNoZWNrcworICAgICAgICBkb3VibGUgbV9maW5pc2hUaW1l
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBzdWJyZXMK
IFN1YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUsIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiAgICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQorICAgICwgbV9maW5pc2hUaW1lKDAuMCkKICAgICAsIG1fbG9hZGluZ011
bHRpcGFydENvbnRlbnQoZmFsc2UpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTc3LDYgKzE3OCw3
IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcKICAgICAvLyBDYWxs
aW5nIHJlbW92ZVN1YnJlc291cmNlTG9hZGVyIHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBhIGNhbGwg
dG8gZGVyZWYsIHNvIHdlIG11c3QgcHJvdGVjdCBvdXJzZWx2ZXMuCiAgICAgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCisgICAgbV9maW5pc2hUaW1lID0gZmluaXNo
VGltZTsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKHRoaXMpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmgJKHJldmlzaW9uIDc3ODMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsg
fQogCisgICAgICAgIGRvdWJsZSBmaW5pc2hUaW1lKCkgeyByZXR1cm4gbV9maW5pc2hUaW1lOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSosIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZik7CiAgICAgICAgIHZpcnR1YWwgflN1YnJlc291cmNlTG9hZGVy
KCk7CkBAIC02MCw2ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAgICAgICAgU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgICAgICBkb3VibGUgbV9maW5pc2hUaW1l
OwogICAgICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVl
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA3NzgzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBt
X3JlcXVlc3RvclByb2Nlc3NJRCgwKQogICAgICAgICAgICAgLCBtX2FwcENhY2hlSG9zdElEKDAp
CiAgICAgICAgICAgICAsIG1faGFzVXNlckdlc3R1cmUoZmFsc2UpCisgICAgICAgICAgICAsIG1f
ZG93bmxvYWRUb0ZpbGUoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC01MSw2ICs1
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9j
ZXNzSUQoMCkKICAgICAgICAgICAgICwgbV9hcHBDYWNoZUhvc3RJRCgwKQogICAgICAgICAgICAg
LCBtX2hhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxl
KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjAsNiArNjIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCiAgICAg
ICAgICAgICAsIG1fYXBwQ2FjaGVIb3N0SUQoMCkKICAgICAgICAgICAgICwgbV9oYXNVc2VyR2Vz
dHVyZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKICAgICAgICAgfQpA
QCAtNzAsNiArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVx
dWVzdG9yUHJvY2Vzc0lEKDApCiAgICAgICAgICAgICAsIG1fYXBwQ2FjaGVIb3N0SUQoMCkKICAg
ICAgICAgICAgICwgbV9oYXNVc2VyR2VzdHVyZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9kb3du
bG9hZFRvRmlsZShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTkyLDYgKzk2LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBoYXNVc2VyR2VzdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVXNlckdlc3R1cmU7IH0KICAgICAgICAgdm9pZCBzZXRIYXNVc2Vy
R2VzdHVyZShib29sIGhhc1VzZXJHZXN0dXJlKSB7IG1faGFzVXNlckdlc3R1cmUgPSBoYXNVc2Vy
R2VzdHVyZTsgfQogCisgICAgICAgIC8vIFRydWUgaWYgcmVxdWVzdCBzaG91bGQgYmUgZG93bmxv
YWRlZCB0byBmaWxlLgorICAgICAgICBib29sIGRvd25sb2FkVG9GaWxlKCkgY29uc3QgeyByZXR1
cm4gbV9kb3dubG9hZFRvRmlsZTsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJv
b2wgZG93bmxvYWRUb0ZpbGUpIHsgbV9kb3dubG9hZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTsKIApAQCAtMTA1LDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50
IG1fcmVxdWVzdG9yUHJvY2Vzc0lEOwogICAgICAgICBpbnQgbV9hcHBDYWNoZUhvc3RJRDsKICAg
ICAgICAgYm9vbCBtX2hhc1VzZXJHZXN0dXJlOworICAgICAgICBib29sIG1fZG93bmxvYWRUb0Zp
bGU7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGEg
OiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7CkBAIC0xMTIsNiAr
MTIxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9yZXF1ZXN0b3JQcm9j
ZXNzSUQ7CiAgICAgICAgIGludCBtX2FwcENhY2hlSG9zdElEOwogICAgICAgICBib29sIG1faGFz
VXNlckdlc3R1cmU7CisgICAgICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkocmV2aXNp
b24gNzc4MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc3BvbnNlVGltZTsgfQogICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGltZShkb3VibGUg
cmVzcG9uc2VUaW1lKSB7IG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9CiAKLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBzb2NrZXRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zb2NrZXRB
ZGRyZXNzOyB9Ci0gICAgICAgIHZvaWQgc2V0U29ja2V0QWRkcmVzcyhjb25zdCBTdHJpbmcmIHZh
bHVlKSB7IG1fc29ja2V0QWRkcmVzcyA9IHZhbHVlOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYg
ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsgfQor
ICAgICAgICB2b2lkIHNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkb3dubG9hZEZp
bGVQYXRoKSB7IG1fZG93bmxvYWRGaWxlUGF0aCA9IGRvd25sb2FkRmlsZVBhdGg7IH0KIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlQmFzZTsKQEAg
LTE0Nyw5ICsxNDcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHJlc3BvbnNl
cywgdGhpcyB0aW1lIGNvdWxkIGJlICJmYXIiIGluIHRoZSBwYXN0LgogICAgICAgICBkb3VibGUg
bV9yZXNwb25zZVRpbWU7CiAKLSAgICAgICAgLy8gUmVtb3RlIGFkZHJlc3Mgb2YgdGhlIHNvY2tl
dCB3aGljaCBmZXRjaGVkIHRoaXMgcmVzb3VyY2UsIGZvciBwcmVzZW50aW5nCi0gICAgICAgIC8v
IHRvIGlucXVpc2l0aXZlIHVzZXJzLiAgQ2FuIGJlICJpcHY0OnBvcnQiLCAiW2lwdjZdOnBvcnQi
LCBvciBlbXB0eS4KLSAgICAgICAgU3RyaW5nIG1fc29ja2V0QWRkcmVzczsKKyAgICAgICAgLy8g
VGhlIHBhdGggdG8gdGhlIGRvd25sb2FkZWQgZmlsZS4KKyAgICAgICAgU3RyaW5nIG1fZG93bmxv
YWRGaWxlUGF0aDsKICAgICB9OwogCiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNw
b25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewpA
QCAtMTYyLDcgKzE2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3dh
c0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgICAgICBib29sIG1fd2FzRmV0Y2hlZFZp
YVByb3h5OwogICAgICAgICBkb3VibGUgbV9yZXNwb25zZVRpbWU7Ci0gICAgICAgIFN0cmluZyBt
X3NvY2tldEFkZHJlc3M7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTY2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MiBAQAorMjAx
MS0wMi0wOSAgYmlsbGJ1ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEFzc29jaWF0ZWRVUkxMb2Fk
ZXIgc3VwcG9ydCBDT1JTCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzkyNQorCisgICAgICAgICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgor
ICAgICAgICAoV1RGOjpDb252ZXJ0T3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0
ZWRVUkxMb2FkZXI6OkxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpMb2FkZXIpOgorICAgICAgICAo
V2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkU2VuZERhdGEp
OgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRl
cjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVy
OjpMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChX
ZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjp+QXNzb2NpYXRlZFVSTExvYWRlcik6Cisg
ICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAg
ICAgICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaDoKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlck9wdGlvbnM6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zKToKKyAgICAg
ICAgKiBzcmMvV2ViVVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVl
c3RQcml2YXRlSW1wbDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVl
c3RQcml2YXRlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJV
UkxSZXF1ZXN0UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQ
cml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZp
bGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmls
ZVBhdGgpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDoKKwogMjAxMS0w
Mi0wOSAgRGF2aWQgSG9sbG93YXkgIDxkaG9sbG93YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9uIDc3ODMzKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTMxLDEwMyArMzEsMjAzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgiCisKICNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVz
cG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RG
OworCituYW1lc3BhY2UgeworCitUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBDb252ZXJ0T3B0aW9u
cyhjb25zdCBXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIGNvbnZlcnRlZE9wdGlvbnM7CisgICAgY29udmVy
dGVkT3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3M7
CisgICAgY29udmVydGVkT3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBvcHRpb25zLnNuaWZmQ29udGVu
dDsKKyAgICBjb252ZXJ0ZWRPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHM7CisgICAgY29udmVydGVkT3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IG9wdGlv
bnMuZm9yY2VQcmVmbGlnaHQ7CisgICAgc3dpdGNoIChvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSkgeworICAgIGNhc2UgV2ViS2l0OjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czoKKyAg
ICAgICAgY29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBXZWJDb3Jl
OjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJL
aXQ6OlVzZUFjY2Vzc0NvbnRyb2w6CisgICAgICAgIGNvbnZlcnRlZE9wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID0gV2ViQ29yZTo6VXNlQWNjZXNzQ29udHJvbDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXZWJLaXQ6OkFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czoKKyAgICAgICAg
Y29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBXZWJDb3JlOjpBbGxv
d0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
Y29udmVydGVkT3B0aW9uczsKK30KKworfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQXNzb2Np
YXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1w
bD4gZnJhbWVJbXBsKQotICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKSwKLSAgICAgIG1fcmVh
bExvYWRlcih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpLAotICAgICAgbV9yZWFs
Q2xpZW50KDApCisvLyBUaGlzIGlubmVyIGNsYXNzIGJyaWRnZXMgdGhlIGludGVyZmFjZSBkaWZm
ZXJlbmNlcyBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdAorLy8gbG9hZGVycyBjbGllbnRzLiBC
ZWNhdXNlIGl0IGRlcml2ZXMgZnJvbSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIsIGl0IGltcGxl
bWVudHMKKy8vIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50LCB3aGljaCBpcyBjbG9zZSB0byB0aGVt
IFdlYlVSTExvYWRlckNsaWVudC4KK2NsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlciA6
IHB1YmxpYyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoQXNzb2NpYXRlZFVSTExvYWRlciosIERvY3Vt
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkZXI+IGNyZWF0ZShBc3NvY2lhdGVkVVJM
TG9hZGVyKiBvd25lciwgRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAgIExvYWRlcihBc3NvY2lhdGVkVVJMTG9hZGVy
KiwgRG9jdW1lbnQqLCBCbG9ja2luZ0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVy
KiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1
YWwgdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFNlbmREYXRhKFN1YnJlc291
cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpOworICAg
IHZpcnR1YWwgdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpkaWRSZWNlaXZlRGF0YShT
dWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBB
c3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpkaWRG
YWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgLy8g
VGhlIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciByZXF1aXJlcyBhIGNsaWVudCwgc28gZGVmaW5l
IG9uZSB0aGF0IGRvZXMgbm90aGluZy4KKyAgICBjbGFzcyBEdW1teUNsaWVudCA6IHB1YmxpYyBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsgfTsKKworcHJpdmF0ZToKKyAgICBBc3NvY2lhdGVkVVJM
TG9hZGVyKiBtX293bmVyOworICAgIER1bW15Q2xpZW50IG1fZHVtbXlDbGllbnQ7Cit9OworCit2
b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShBc3NvY2lhdGVkVVJMTG9hZGVyKiBvd25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQogeworICAgIC8vIFRoZSBsb2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMg
dGhpcyBmdW5jdGlvbiBleGl0cy4KKyAgICBSZWZQdHI8TG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJl
ZihuZXcgTG9hZGVyKG93bmVyLCBkb2N1bWVudCwgTG9hZFN5bmNocm9ub3VzbHksIHJlcXVlc3Qs
IG9wdGlvbnMpKTsKKyAgICBBU1NFUlQobG9hZGVyLT5oYXNPbmVSZWYoKSk7CiB9CiAKLUFzc29j
aWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkKK1Bhc3NSZWZQdHI8QXNzb2Np
YXRlZFVSTExvYWRlcjo6TG9hZGVyPiBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmNyZWF0
ZShBc3NvY2lhdGVkVVJMTG9hZGVyKiBvd25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQogeworICAgIFJlZlB0cjxMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBMb2Fk
ZXIob3duZXIsIGRvY3VtZW50LCBMb2FkQXN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMp
KTsKKyAgICBpZiAoIWxvYWRlci0+aXNMb2FkaW5nKCkpCisgICAgICAgIGxvYWRlciA9IDA7Cisg
ICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6bG9hZFN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJM
UmVzcG9uc2UmIHJlc3BvbnNlLCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCitB
c3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OkxvYWRlcihBc3NvY2lhdGVkVVJMTG9hZGVyKiBv
d25lciwgRG9jdW1lbnQqIGRvY3VtZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZp
b3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoZG9jdW1l
bnQsICZtX2R1bW15Q2xpZW50LCBibG9ja2luZ0JlaGF2aW9yLCByZXF1ZXN0LCBvcHRpb25zKSwg
bV9vd25lcihvd25lcikKIHsKLSAgICBBU1NFUlQoIW1fcmVhbENsaWVudCk7Cit9CiAKLSAgICBX
ZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAgIHByZXBhcmVSZXF1ZXN0KHJl
cXVlc3RDb3B5KTsKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIHN1YnJlc291cmNlTG9hZGVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7
CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qoc3VicmVzb3Vy
Y2VMb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogCi0gICAgbV9yZWFsTG9hZGVy
LT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgcmVzcG9uc2UsIGVycm9yLCBkYXRhKTsK
KyAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWRSZXF1ZXN0KHJlcXVlc3QpOworICAg
IFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHdyYXBwZWRSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNl
KTsKKyAgICBtX293bmVyLT5tX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fb3duZXIsIHdyYXBw
ZWRSZXF1ZXN0LCB3cmFwcGVkUmVzcG9uc2UpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJV
UkxMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVy
OjpkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciogc3VicmVzb3VyY2VMb2FkZXIsIHVuc2ln
bmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9C
ZVNlbnQpCiB7Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOworICAgIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6ZGlkU2VuZERhdGEoc3VicmVzb3VyY2VMb2FkZXIsIGJ5dGVzU2VudCwgdG90
YWxCeXRlc1RvQmVTZW50KTsKIAotICAgIFdlYlVSTFJlcXVlc3QgcmVxdWVzdENvcHkocmVxdWVz
dCk7Ci0gICAgcHJlcGFyZVJlcXVlc3QocmVxdWVzdENvcHkpOworICAgIG1fb3duZXItPm1fY2xp
ZW50LT5kaWRTZW5kRGF0YShtX293bmVyLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7
Cit9CiAKLSAgICBtX3JlYWxDbGllbnQgPSBjbGllbnQ7Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2Fk
QXN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHRoaXMpOwordm9pZCBBc3NvY2lhdGVkVVJMTG9h
ZGVyOjpMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciogc3VicmVz
b3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHN1YnJlc291cmNlTG9h
ZGVyLCByZXNwb25zZSk7CisKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVz
cG9uc2UocmVzcG9uc2UpOworICAgIG1fb3duZXItPm1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9u
c2UobV9vd25lciwgd3JhcHBlZFJlc3BvbnNlKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9h
ZGVyOjpjYW5jZWwoKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZFJlY2Vp
dmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBzdWJyZXNvdXJjZUxvYWRlciwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewotICAgIG1fcmVhbExvYWRlci0+Y2FuY2VsKCk7
CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShzdWJyZXNvdXJj
ZUxvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworCisgICAgbV9vd25lci0+bV9jbGllbnQt
PmRpZFJlY2VpdmVEYXRhKG1fb3duZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIH0KIAotdm9p
ZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGlu
ZykKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6TG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqIHN1YnJlc291cmNlTG9hZGVyLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7Ci0gICAgbV9yZWFsTG9hZGVyLT5zZXREZWZlcnNM
b2FkaW5nKGRlZmVyc0xvYWRpbmcpOworICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKHN1YnJlc291cmNlTG9hZGVyLCBkYXRhLCBsZW5ndGhSZWNl
aXZlZCk7CisKKyAgICBtX293bmVyLT5tX2NsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KG1fb3duZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpwcmVwYXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqIHN1YnJlc291cmNlTG9hZGVyKQogewotICAgIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBh
cHBsaWNhdGlvbkNhY2hlSG9zdCA9IG1fZnJhbWVJbXBsLT5kYXRhU291cmNlKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCk7Ci0gICAgaWYgKGFwcGxpY2F0aW9uQ2FjaGVIb3N0KQotICAgICAgICBh
cHBsaWNhdGlvbkNhY2hlSG9zdC0+d2lsbFN0YXJ0U3ViUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3Qp
OwotICAgIG1fZnJhbWVJbXBsLT5kaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0KTsKKyAg
ICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoc3VicmVzb3VyY2VM
b2FkZXIpOworCisgICAgZG91YmxlIGZpbmlzaFRpbWUgPSBzdWJyZXNvdXJjZUxvYWRlci0+Zmlu
aXNoVGltZSgpOworICAgIG1fb3duZXItPm1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3du
ZXIsIGZpbmlzaFRpbWUpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OndpbGxTZW5k
UmVxdWVzdChXZWJVUkxMb2FkZXIqLCBXZWJVUkxSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBX
ZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6TG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBzdWJyZXNvdXJjZUxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT53aWxsU2Vu
ZFJlcXVlc3QodGhpcywgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKHN1YnJlc291cmNlTG9hZGVyLCBlcnJvcik7CisK
KyAgICBXZWJVUkxFcnJvciB3ZWJFcnJvcihlcnJvcik7CisgICAgbV9vd25lci0+bV9jbGllbnQt
PmRpZEZhaWwobV9vd25lciwgd2ViRXJyb3IpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmRpZFNlbmREYXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitBc3NvY2lhdGVkVVJM
TG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFt
ZUltcGwpCisgICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpCisgICAgLCBtX2NsaWVudCgwKQog
ewotICAgIG1fcmVhbENsaWVudC0+ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5
dGVzVG9CZVNlbnQpOworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2Np
YXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdl
YlVSTFJlc3BvbnNlJiByZXNwb25zZSkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRV
UkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCwgY29uc3QgQXNzb2Np
YXRlZFVSTExvYWRlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBtX2ZyYW1lSW1wbChmcmFtZUlt
cGwpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fY2xpZW50KDApCiB7Ci0gICAg
bV9yZWFsQ2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgIEFT
U0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRG93
bmxvYWREYXRhKFdlYlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKQorQXNzb2NpYXRlZFVSTExv
YWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRG93
bmxvYWREYXRhKHRoaXMsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBk
YXRhTGVuZ3RoKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseShj
b25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UsIFdl
YlVSTEVycm9yJiBlcnJvciwgV2ViRGF0YSYgZGF0YSkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRp
ZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGRhdGFMZW5ndGgpOworICAgIEFTU0VSVCghbV9jbGll
bnQpOworCisgICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKKyAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHdlYmNvcmVSZXF1ZXN0ID0gcmVxdWVzdC50b1Jlc291cmNlUmVx
dWVzdCgpOworICAgIERvY3VtZW50KiB3ZWJjb3JlRG9jdW1lbnQgPSBtX2ZyYW1lSW1wbC0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zID0g
Q29udmVydE9wdGlvbnMobV9vcHRpb25zKTsKKyAgICBMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkodGhpcywgd2ViY29yZURvY3VtZW50LCB3ZWJjb3JlUmVxdWVzdCwgb3B0aW9ucyk7
CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBB
c3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVz
dCYgcmVxdWVzdCwgV2ViVVJMTG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xp
ZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgQVNTRVJUKCFtX2NsaWVudCk7CisKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBBU1NF
UlQobV9jbGllbnQpOworCisgICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsK
KyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHdlYmNvcmVSZXF1ZXN0ID0gcmVxdWVzdC50b1Jl
c291cmNlUmVxdWVzdCgpOworICAgIERvY3VtZW50KiB3ZWJjb3JlRG9jdW1lbnQgPSBtX2ZyYW1l
SW1wbC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBv
cHRpb25zID0gQ29udmVydE9wdGlvbnMobV9vcHRpb25zKTsKKyAgICBtX2xvYWRlciA9IExvYWRl
cjo6Y3JlYXRlKHRoaXMsIHdlYmNvcmVEb2N1bWVudCwgd2ViY29yZVJlcXVlc3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoV2ViVVJM
TG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNh
bmNlbCgpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMsIGZpbmlz
aFRpbWUpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiB9
CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25z
dCBXZWJVUkxFcnJvciYgZXJyb3IpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmFp
bCh0aGlzLCBlcnJvcik7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgIG1fbG9hZGVyLT5zZXRE
ZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyLmgJKHJldmlzaW9uIDc3ODMzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
b2NpYXRlZFVSTExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MCwxMiArNDAsMzEgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkZyYW1lSW1wbDsKIAorZW51bSBTdG9yZWRDcmVkZW50
aWFscyB7CisgICAgQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICBEb05vdEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMKK307CisKK2VudW0gQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAgICBE
ZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nlc3NDb250cm9sLAorICAgIEFsbG93
Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRp
b25zIHsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFj
a3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwg
Zm9yY2VQcmVmbGlnaHQoZmFsc2UpLCBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3koRGVueUNyb3Nz
T3JpZ2luUmVxdWVzdHMpIHsgfQorICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CisgICAgYm9v
bCBzbmlmZkNvbnRlbnQ7CisgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAvLyBXaGV0aGVyIHRv
IHNlbmQgSFRUUCBjcmVkZW50aWFscyBhbmQgY29va2llcyB3aXRoIHRoZSByZXF1ZXN0LgorICAg
IGJvb2wgZm9yY2VQcmVmbGlnaHQ7IC8vIElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhl
ciB0byBmb3JjZSBhIHByZWZsaWdodC4KKyAgICBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5OworfTsKKwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGlt
cGxlbWVudCBXZWJGcmFtZTo6Y3JlYXRlQXNzb2NpYXRlZFVSTExvYWRlci4KLS8vIEZJWE1FOiBJ
bXBsZW1lbnQgaW4gdGVybXMgb2YgV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXIuCi1jbGFzcyBB
c3NvY2lhdGVkVVJMTG9hZGVyIDogcHVibGljIFdlYlVSTExvYWRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgV2ViVVJMTG9hZGVyQ2xpZW50IHsKK2NsYXNzIEFzc29jaWF0
ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2ViVVJMTG9hZGVyIHsKIHB1YmxpYzoKICAgICBBc3NvY2lh
dGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPik7CisgICAgQXNzb2NpYXRlZFVS
TExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4sIGNvbnN0IEFzc29jaWF0ZWRVUkxMb2Fk
ZXJPcHRpb25zJik7CiAgICAgfkFzc29jaWF0ZWRVUkxMb2FkZXIoKTsKIAogICAgIC8vIFdlYlVS
TExvYWRlciBtZXRob2RzOgpAQCAtNTQsMjIgKzczLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7
CiAKLSAgICAvLyBXZWJVUkxMb2FkZXJDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3Qs
IGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoV2ViVVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25z
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50
IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJVUkxMb2Fk
ZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2Vi
VVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9yJik7CisgICAgY2xhc3MgTG9hZGVyOwog
CiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVJlcXVlc3QoV2ViVVJMUmVxdWVzdCYpOwotCiAg
ICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gbV9mcmFtZUltcGw7Ci0gICAgT3duUHRyPFdlYlVSTExv
YWRlcj4gbV9yZWFsTG9hZGVyOwotICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9yZWFsQ2xpZW50
OworICAgIEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBXZWJVUkxM
b2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxMb2FkZXI+IG1fbG9hZGVyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJVUkxSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3Jlc291cmNlUmVxdWVzdCA9ICZtX3Jl
c291cmNlUmVxdWVzdEFsbG9jYXRpb247CiAgICAgICAgIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFs
cyA9IHAtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgbV9kb3dubG9hZFRvRmls
ZSA9IHAtPm1fZG93bmxvYWRUb0ZpbGU7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bv
c2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0yNjksMTIgKzI2OCwxMiBAQCB2b2lkIFdlYlVSTFJl
cXVlc3Q6OnNldEFwcENhY2hlSG9zdElEKGluCiAKIGJvb2wgV2ViVVJMUmVxdWVzdDo6ZG93bmxv
YWRUb0ZpbGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZG93bmxvYWRUb0Zp
bGU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmRvd25sb2FkVG9G
aWxlKCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0ZpbGUoYm9vbCBk
b3dubG9hZFRvRmlsZSkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRUb0ZpbGUgPSBkb3du
bG9hZFRvRmlsZTsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXREb3dubG9h
ZFRvRmlsZShkb3dubG9hZFRvRmlsZSk7CiB9CiAKIFJlc291cmNlUmVxdWVzdCYgV2ViVVJMUmVx
dWVzdDo6dG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24gNzc4MzMp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSwxNyArMzksMTMgQEAgY2xhc3MgV2ViVVJMUmVxdWVzdFByaXZh
dGUgewogcHVibGljOgogICAgIFdlYlVSTFJlcXVlc3RQcml2YXRlKCkKICAgICAgICAgOiBtX3Jl
c291cmNlUmVxdWVzdCgwKQotICAgICAgICAsIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyh0cnVl
KQotICAgICAgICAsIG1fZG93bmxvYWRUb0ZpbGUoZmFsc2UpIHsgfQorICAgICAgICAsIG1fYWxs
b3dTdG9yZWRDcmVkZW50aWFscyh0cnVlKSB7IH0KIAogICAgIC8vIENhbGxlZCBieSBXZWJVUkxS
ZXF1ZXN0IHdoZW4gaXQgbm8gbG9uZ2VyIG5lZWRzIHRoaXMgb2JqZWN0LgogICAgIHZpcnR1YWwg
dm9pZCBkaXNwb3NlKCkgPSAwOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KiBtX3Jl
c291cmNlUmVxdWVzdDsKICAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAg
IC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gUmVzb3VyY2VSZXF1ZXN0IG9uY2Ugd2UgaGF2ZSBhbiBp
bnRlcm5hbCBjb25zdW1lci4KLSAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVS
TFJlc3BvbnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDc3ODMzKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2
IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uKCpwLT5t
X3Jlc291cmNlUmVzcG9uc2UpCiAgICAgewogICAgICAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSAm
bV9yZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbjsKLSAgICAgICAgbV9kb3dubG9hZEZpbGVQYXRo
ID0gcC0+bV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNw
b3NlKCkgeyBkZWxldGUgdGhpczsgfQpAQCAtMzc2LDIyICszNzUsMTIgQEAgdm9pZCBXZWJVUkxS
ZXNwb25zZTo6c2V0SXNNdWx0aXBhcnRQYXlsbwogCiBXZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6
OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZG93
bmxvYWRGaWxlUGF0aDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2Ut
PmRvd25sb2FkRmlsZVBhdGgoKTsKIH0KIAogdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0RG93bmxv
YWRGaWxlUGF0aChjb25zdCBXZWJTdHJpbmcmIGRvd25sb2FkRmlsZVBhdGgpCiB7Ci0gICAgbV9w
cml2YXRlLT5tX2Rvd25sb2FkRmlsZVBhdGggPSBkb3dubG9hZEZpbGVQYXRoOwotfQotCi1XZWJT
dHJpbmcgV2ViVVJMUmVzcG9uc2U6OnNvY2tldEFkZHJlc3MoKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c29ja2V0QWRkcmVzcygpOwotfQotCi12
b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRTb2NrZXRBZGRyZXNzKGNvbnN0IFdlYlN0cmluZyYgc29j
a2V0QWRkcmVzcykKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0U29j
a2V0QWRkcmVzcyhzb2NrZXRBZGRyZXNzKTsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNw
b25zZS0+c2V0RG93bmxvYWRGaWxlUGF0aChkb3dubG9hZEZpbGVQYXRoLmRhdGEoKSk7CiB9CiAK
IHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVByaXZhdGUqIHApCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVBy
aXZhdGUuaAkocmV2aXNpb24gNzc4MzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9uc2U7Ci0KLSAgICAvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ugb25jZSB3ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1
bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83884</attachid>
            <date>2011-02-25 15:02:32 -0800</date>
            <delta_ts>2011-03-01 15:00:35 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>14513</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3OTczMykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMDItMjUgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
dGVzdHMuIEFscmVhZHkgdGVzdGVkIGJ5IHVpX3Rlc3RzLgorCisgICAgICAgICogc3JjL0Fzc29j
aWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoV1RGOjpDb252ZXJ0T3B0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OkNsaWVudEFk
YXB0ZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFw
dGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9h
ZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29j
aWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWwpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVy
KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxM
b2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hy
b25vdXNseSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNl
bCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVyc0xvYWRp
bmcpOgorICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmg6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zOjpBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9u
cyk6CisKIDIwMTEtMDItMjUgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSb2xsIGNocm9taXVtIGRlcHMgdG8gaW5jbHVkZSBSQkdUb0hTTCBmaXggYW5kIElDVSB1
cGRhdGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lh
dGVkVVJMTG9hZGVyLmNwcAkocmV2aXNpb24gNzk3MzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMTAzICsz
MSwxNzggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBc3NvY2lhdGVkVVJMTG9h
ZGVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQu
aCIKKwogI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiV2Vi
RGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktp
dC5oIgogI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTEVycm9yLmgi
CiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldyYXBwZWRSZXNvdXJjZVJl
cXVlc3QuaCIKKyNpbmNsdWRlICJXcmFwcGVkUmVzb3VyY2VSZXNwb25zZS5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgeworCitUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBDb252ZXJ0
T3B0aW9ucyhjb25zdCBXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25z
KQoreworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIGNvbnZlcnRlZE9wdGlvbnM7CisgICAg
Y29udmVydGVkT3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IG9wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3M7CisgICAgY29udmVydGVkT3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBvcHRpb25zLnNuaWZm
Q29udGVudDsKKyAgICBjb252ZXJ0ZWRPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBvcHRpb25z
LmFsbG93Q3JlZGVudGlhbHM7CisgICAgY29udmVydGVkT3B0aW9ucy5mb3JjZVByZWZsaWdodCA9
IG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQ7CisgICAgc3dpdGNoIChvcHRpb25zLmNyb3NzT3JpZ2lu
UmVxdWVzdFBvbGljeSkgeworICAgIGNhc2UgV2ViS2l0OjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0
czoKKyAgICAgICAgY29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBX
ZWJDb3JlOjpEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXZWJLaXQ6OlVzZUFjY2Vzc0NvbnRyb2w6CisgICAgICAgIGNvbnZlcnRlZE9wdGlvbnMuY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gV2ViQ29yZTo6VXNlQWNjZXNzQ29udHJvbDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXQ6OkFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czoKKyAg
ICAgICAgY29udmVydGVkT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBXZWJDb3Jl
OjpBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gY29udmVydGVkT3B0aW9uczsKK30KKworfSAvLyBhbm9ueW1vdXMKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLUFzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIoUGFz
c1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCkKLSAgICA6IG1fZnJhbWVJbXBsKGZyYW1l
SW1wbCksCi0gICAgICBtX3JlYWxMb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRl
cigpKSwKLSAgICAgIG1fcmVhbENsaWVudCgwKQotewotfQorLy8gVGhpcyBjbGFzcyBicmlkZ2Vz
IHRoZSBpbnRlcmZhY2UgZGlmZmVyZW5jZXMgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgbG9h
ZGVyIGNsaWVudHMuCisvLyBJdCBmb3J3YXJkcyBpdHMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCBu
b3RpZmljYXRpb25zIHRvIGEgV2ViVVJMTG9hZGVyQ2xpZW50LgorY2xhc3MgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Q2xpZW50QWRhcHRlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBDbGllbnRBZGFwdGVyKFdlYlVSTExvYWRlciosIFdlYlVSTExvYWRlckNs
aWVudCosIGJvb2wgLypkb3dubG9hZGluZ1RvRmlsZSovKTsKIAotQXNzb2NpYXRlZFVSTExvYWRl
cjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQotewotfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25n
IC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0JiAvKm5ld1JlcXVlc3QqLywgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pOwogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6Omxv
YWRTeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3Bv
bnNlJiByZXNwb25zZSwgV2ViVVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQotewotICAg
IEFTU0VSVCghbV9yZWFsQ2xpZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciosIGludCAvKmRhdGFMZW5ndGgqLyk7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50IC8qZGF0YUxlbmd0aCov
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIC8qaWRl
bnRpZmllciovLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAotICAgIFdlYlVSTFJlcXVlc3QgcmVxdWVzdENv
cHkocmVxdWVzdCk7Ci0gICAgcHJlcGFyZVJlcXVlc3QocmVxdWVzdENvcHkpOworcHJpdmF0ZToK
KyAgICBXZWJVUkxMb2FkZXIqIG1fbG9hZGVyOworICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9j
bGllbnQ7CisgICAgaW50IG1fZG93bmxvYWRMZW5ndGg7CisgICAgYm9vbCBtX2Rvd25sb2FkaW5n
VG9GaWxlOworfTsKIAotICAgIG1fcmVhbExvYWRlci0+bG9hZFN5bmNocm9ub3VzbHkocmVxdWVz
dENvcHksIHJlc3BvbnNlLCBlcnJvciwgZGF0YSk7Ci19CitBc3NvY2lhdGVkVVJMTG9hZGVyOjpD
bGllbnRBZGFwdGVyOjpDbGllbnRBZGFwdGVyKFdlYlVSTExvYWRlciogbG9hZGVyLCBXZWJVUkxM
b2FkZXJDbGllbnQqIGNsaWVudCwgYm9vbCBkb3dubG9hZGluZ1RvRmlsZSkKKyAgICA6IG1fbG9h
ZGVyKGxvYWRlcikKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZG93bmxvYWRMZW5n
dGgoMCkKKyAgICAsIG1fZG93bmxvYWRpbmdUb0ZpbGUoZG93bmxvYWRpbmdUb0ZpbGUpIHsgfQog
Ci12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJV
UkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQXNz
b2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKLSAgICBBU1NFUlQoIW1fcmVhbENsaWVudCk7CisgICAgV3JhcHBlZFJlc291cmNl
UmVxdWVzdCB3cmFwcGVkTmV3UmVxdWVzdChuZXdSZXF1ZXN0KTsKKyAgICBXcmFwcGVkUmVzb3Vy
Y2VSZXNwb25zZSB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKTsKKyAg
ICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fbG9hZGVyLCB3cmFwcGVkTmV3UmVxdWVzdCwg
d3JhcHBlZFJlZGlyZWN0UmVzcG9uc2UpOworfQogCi0gICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0
Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChyZXF1ZXN0Q29weSk7Cit2b2lkIEFz
c29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
Cit7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fbG9hZGVyLCBieXRlc1NlbnQsIHRvdGFs
Qnl0ZXNUb0JlU2VudCk7Cit9CiAKLSAgICBtX3JlYWxDbGllbnQgPSBjbGllbnQ7Ci0gICAgbV9y
ZWFsTG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHRoaXMpOwordm9pZCBB
c3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgV3JhcHBlZFJlc291cmNlUmVz
cG9uc2Ugd3JhcHBlZFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKG1fbG9hZGVyLCB3cmFwcGVkUmVzcG9uc2UpOwogfQogCi12b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OmNhbmNlbCgpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFk
YXB0ZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZl
ZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPmNhbmNlbCgpOworICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlRGF0YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgIG1fZG93bmxvYWRM
ZW5ndGggKz0gbGVuZ3RoUmVjZWl2ZWQ7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCit2b2lkIEFzc29jaWF0ZWRVUkxM
b2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7Ci0gICAgbV9yZWFsTG9hZGVyLT5zZXREZWZl
cnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEobV9sb2FkZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIH0KIAotdm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpwcmVwYXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQor
dm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVIb3N0ID0gbV9mcmFtZUltcGwt
PmRhdGFTb3VyY2UoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsKLSAgICBpZiAoYXBwbGljYXRp
b25DYWNoZUhvc3QpCi0gICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVIb3N0LT53aWxsU3RhcnRTdWJS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgbV9mcmFtZUltcGwtPmRpc3BhdGNoV2lsbFNl
bmRSZXF1ZXN0KHJlcXVlc3QpOworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fbG9h
ZGVyLCBmaW5pc2hUaW1lKTsKKworICAgIGlmIChtX2Rvd25sb2FkaW5nVG9GaWxlKQorICAgICAg
ICBtX2NsaWVudC0+ZGlkRG93bmxvYWREYXRhKG1fbG9hZGVyLCBtX2Rvd25sb2FkTGVuZ3RoKTsK
IH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoV2ViVVJMTG9h
ZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6
OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9yZWFsQ2xpZW50
LT53aWxsU2VuZFJlcXVlc3QodGhpcywgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cisg
ICAgV2ViVVJMRXJyb3Igd2ViRXJyb3IoZXJyb3IpOworICAgIG1fY2xpZW50LT5kaWRGYWlsKG1f
bG9hZGVyLCB3ZWJFcnJvcik7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkU2Vu
ZERhdGEoV2ViVVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkFz
c29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCkKKyAg
ICA6IG1fZnJhbWVJbXBsKGZyYW1lSW1wbCkKKyAgICAsIG1fY2xpZW50KDApCiB7Ci0gICAgbV9y
ZWFsQ2xpZW50LT5kaWRTZW5kRGF0YSh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2Vu
dCk7CisgICAgQVNTRVJUKG1fZnJhbWVJbXBsKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9u
c2UmIHJlc3BvbnNlKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQ
YXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsLCBjb25zdCBBc3NvY2lhdGVkVVJMTG9h
ZGVyT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IG1fZnJhbWVJbXBsKGZyYW1lSW1wbCkKKyAgICAs
IG1fb3B0aW9ucyhvcHRpb25zKQorICAgICwgbV9jbGllbnQoMCkKIHsKLSAgICBtX3JlYWxDbGll
bnQtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7CisgICAgQVNTRVJUKG1fZnJh
bWVJbXBsKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWREb3dubG9hZERhdGEo
V2ViVVJMTG9hZGVyKiwgaW50IGRhdGFMZW5ndGgpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjp+QXNz
b2NpYXRlZFVSTExvYWRlcigpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWREb3dubG9hZERhdGEo
dGhpcywgZGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVj
ZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgp
Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVS
TFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3BvbnNlJiByZXNwb25zZSwgV2ViVVJMRXJyb3Im
IGVycm9yLCBXZWJEYXRhJiBkYXRhKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVjZWl2ZURh
dGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisKKyAg
ICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOworICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgd2ViY29yZVJlcXVlc3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7Cisg
ICAgRG9jdW1lbnQqIHdlYmNvcmVEb2N1bWVudCA9IG1fZnJhbWVJbXBsLT5mcmFtZSgpLT5kb2N1
bWVudCgpOworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDb252ZXJ0T3B0
aW9ucyhtX29wdGlvbnMpOworICAgIG1fY2xpZW50QWRhcHRlciA9IFBhc3NPd25QdHI8Q2xpZW50
QWRhcHRlcj4obmV3IENsaWVudEFkYXB0ZXIodGhpcywgbV9jbGllbnQsIHJlcXVlc3QuZG93bmxv
YWRUb0ZpbGUoKSkpOworICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseSh3ZWJjb3JlRG9jdW1lbnQsIHdlYmNvcmVSZXF1ZXN0LCAqbV9jbGllbnRB
ZGFwdGVyLCBvcHRpb25zKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRh
dGFMZW5ndGgpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShj
b25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCkK
IHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSh0aGlzLCBkYXRh
LCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKworICAgIG1fY2xpZW50ID0g
Y2xpZW50OworICAgIEFTU0VSVChtX2NsaWVudCk7CisKKyAgICBXZWJVUkxSZXF1ZXN0IHJlcXVl
c3RDb3B5KHJlcXVlc3QpOworICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZVJlcXVl
c3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgRG9jdW1lbnQqIHdlYmNvcmVE
b2N1bWVudCA9IG1fZnJhbWVJbXBsLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIFRocmVhZGFi
bGVMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDb252ZXJ0T3B0aW9ucyhtX29wdGlvbnMpOworICAg
IG1fY2xpZW50QWRhcHRlciA9IFBhc3NPd25QdHI8Q2xpZW50QWRhcHRlcj4obmV3IENsaWVudEFk
YXB0ZXIodGhpcywgbV9jbGllbnQsIHJlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSkpOworICAgIG1f
bG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUod2ViY29yZURvY3VtZW50
LCBtX2NsaWVudEFkYXB0ZXIuZ2V0KCksIHdlYmNvcmVSZXF1ZXN0LCBvcHRpb25zKTsKIH0KIAot
dm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExvYWRlcios
IGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpjYW5jZWwoKQog
ewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzLCBmaW5pc2hUaW1lKTsK
KyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogfQogCi12b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJM
RXJyb3ImIGVycm9yKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZhaWwodGhpcywg
ZXJyb3IpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyhkZWZlcnNMb2FkaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCShy
ZXZpc2lvbiA3OTczMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRV
UkxMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsMTYgKzM2LDQyIEBACiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI7CitjbGFzcyBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKK2VudW0gU3RvcmVkQ3JlZGVudGlhbHMgeworICAg
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCisgICAgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxz
Cit9OworCitlbnVtIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSB7CisgICAgRGVueUNyb3NzT3Jp
Z2luUmVxdWVzdHMsCisgICAgVXNlQWNjZXNzQ29udHJvbCwKKyAgICBBbGxvd0Nyb3NzT3JpZ2lu
UmVxdWVzdHMKK307CisKK3N0cnVjdCBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucyB7CisgICAg
QXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMoKSA6IHNlbmRMb2FkQ2FsbGJhY2tzKGZhbHNlKSwg
c25pZmZDb250ZW50KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFscyhmYWxzZSksIGZvcmNlUHJlZmxp
Z2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVl
c3RzKSB7IH0KKyAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOworICAgIGJvb2wgc25pZmZDb250
ZW50OworICAgIGJvb2wgYWxsb3dDcmVkZW50aWFsczsgLy8gV2hldGhlciB0byBzZW5kIEhUVFAg
Y3JlZGVudGlhbHMgYW5kIGNvb2tpZXMgd2l0aCB0aGUgcmVxdWVzdC4KKyAgICBib29sIGZvcmNl
UHJlZmxpZ2h0OyAvLyBJZiBBY2Nlc3NDb250cm9sIGlzIHVzZWQsIHdoZXRoZXIgdG8gZm9yY2Ug
YSBwcmVmbGlnaHQuCisgICAgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeTsKK307CisKIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQgV2Vi
RnJhbWU6OmNyZWF0ZUFzc29jaWF0ZWRVUkxMb2FkZXIuCi0vLyBGSVhNRTogSW1wbGVtZW50IGlu
IHRlcm1zIG9mIFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyLgotY2xhc3MgQXNzb2NpYXRlZFVS
TExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFdlYlVSTExvYWRlckNsaWVudCB7CitjbGFzcyBBc3NvY2lhdGVkVVJMTG9hZGVy
IDogcHVibGljIFdlYlVSTExvYWRlciB7CiBwdWJsaWM6CiAgICAgQXNzb2NpYXRlZFVSTExvYWRl
cihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4pOworICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIoUGFz
c1JlZlB0cjxXZWJGcmFtZUltcGw+LCBjb25zdCBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucyYp
OwogICAgIH5Bc3NvY2lhdGVkVVJMTG9hZGVyKCk7CiAKICAgICAvLyBXZWJVUkxMb2FkZXIgbWV0
aG9kczoKQEAgLTU0LDIyICs4MCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbmNl
bCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCi0gICAgLy8g
V2ViVVJMTG9hZGVyQ2xpZW50IG1ldGhvZHM6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVx
dWVzdChXZWJVUkxMb2FkZXIqLCBXZWJVUkxSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBXZWJV
UkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNlbmRE
YXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2UmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFdlYlVSTExvYWRlciosIGludCBkYXRhTGVuZ3Ro
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
Q2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFM
ZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExvYWRlcios
IGRvdWJsZSBmaW5pc2hUaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJVUkxMb2Fk
ZXIqLCBjb25zdCBXZWJVUkxFcnJvciYpOwotCiBwcml2YXRlOgotICAgIHZvaWQgcHJlcGFyZVJl
cXVlc3QoV2ViVVJMUmVxdWVzdCYpOwotCiAgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gbV9mcmFt
ZUltcGw7Ci0gICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbV9yZWFsTG9hZGVyOwotICAgIFdlYlVS
TExvYWRlckNsaWVudCogbV9yZWFsQ2xpZW50OworICAgIEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRp
b25zIG1fb3B0aW9uczsKKyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIGNs
YXNzIENsaWVudEFkYXB0ZXI7CisgICAgT3duUHRyPENsaWVudEFkYXB0ZXI+IG1fY2xpZW50QWRh
cHRlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBtX2xv
YWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="75778"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="75779"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84301</attachid>
            <date>2011-03-01 15:00:35 -0800</date>
            <delta_ts>2011-03-01 17:02:54 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>14204</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDA0NCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMDMtMDEgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
dGVzdHMuIEV4cG9zZXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBzcmMvQXNz
b2NpYXRlZFVSTExvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkNsaWVudEFkYXB0ZXI6OkNsaWVudEFkYXB0ZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRTZW5kRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNz
b2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6
ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6
OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJM
TG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRl
ZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJLaXQ6
OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmRvTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0
ZWRVUkxMb2FkZXI6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJMTG9hZGVy
Lmg6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zOjpBc3NvY2lh
dGVkVVJMTG9hZGVyT3B0aW9ucyk6CisKIDIwMTEtMDItMjggIENoYW5nIFNodSAgPGNzaHVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAko
cmV2aXNpb24gNzk3ODEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVk
VVJMTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMTAzICszMSwxNjYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBc3NvY2lhdGVkVVJMTG9hZGVyLmgiCiAKKyNp
bmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJj
ZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRl
ICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldl
YlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiV3JhcHBlZFJlc291cmNlUmVzcG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLUFzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCkKLSAgICA6IG1fZnJhbWVJbXBs
KGZyYW1lSW1wbCksCi0gICAgICBtX3JlYWxMb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVS
TExvYWRlcigpKSwKLSAgICAgIG1fcmVhbENsaWVudCgwKQorLy8gVGhpcyBjbGFzcyBicmlkZ2Vz
IHRoZSBpbnRlcmZhY2UgZGlmZmVyZW5jZXMgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgbG9h
ZGVyIGNsaWVudHMuCisvLyBJdCBmb3J3YXJkcyBpdHMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCBu
b3RpZmljYXRpb25zIHRvIGEgV2ViVVJMTG9hZGVyQ2xpZW50LgorY2xhc3MgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Q2xpZW50QWRhcHRlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBDbGllbnRBZGFwdGVyKFdlYlVSTExvYWRlciosIFdlYlVSTExvYWRlckNs
aWVudCosIGJvb2wgLypkb3dubG9hZGluZ1RvRmlsZSovKTsKKworICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9u
ZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2Vu
ZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiAvKm5ld1JlcXVlc3QqLywgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypkYXRhTGVuZ3RoKi8pOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCAvKmRh
dGFMZW5ndGgqLyk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQg
bG9uZyAvKmlkZW50aWZpZXIqLywgZG91YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgV2Vi
VVJMTG9hZGVyKiBtX2xvYWRlcjsKKyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1fY2xpZW50Owor
ICAgIGludCBtX2Rvd25sb2FkTGVuZ3RoOworICAgIGJvb2wgbV9kb3dubG9hZGluZ1RvRmlsZTsK
K307CisKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OkNsaWVudEFkYXB0ZXIo
V2ViVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50LCBib29sIGRv
d25sb2FkaW5nVG9GaWxlKQorICAgIDogbV9sb2FkZXIobG9hZGVyKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQorICAgICwgbV9kb3dubG9hZExlbmd0aCgwKQorICAgICwgbV9kb3dubG9hZGluZ1Rv
RmlsZShkb3dubG9hZGluZ1RvRmlsZSkgeyB9CisKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKKyAgICBXcmFw
cGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWROZXdSZXF1ZXN0KG5ld1JlcXVlc3QpOworICAgIFdy
YXBwZWRSZXNvdXJjZVJlc3BvbnNlIHdyYXBwZWRSZWRpcmVjdFJlc3BvbnNlKHJlZGlyZWN0UmVz
cG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsU2VuZFJlcXVlc3QobV9sb2FkZXIsIHdyYXBwZWRO
ZXdSZXF1ZXN0LCB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKLUFzc29jaWF0ZWRVUkxM
b2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKKyAgICBtX2NsaWVudC0+
ZGlkU2VuZERhdGEobV9sb2FkZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKIH0K
IAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseShjb25zdCBXZWJV
UkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UsIFdlYlVSTEVycm9y
JiBlcnJvciwgV2ViRGF0YSYgZGF0YSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50
QWRhcHRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQogewotICAgIEFTU0VSVCghbV9yZWFsQ2xpZW50KTsKLQotICAgIFdlYlVSTFJlcXVlc3Qg
cmVxdWVzdENvcHkocmVxdWVzdCk7Ci0gICAgcHJlcGFyZVJlcXVlc3QocmVxdWVzdENvcHkpOwot
Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgcmVzcG9u
c2UsIGVycm9yLCBkYXRhKTsKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVz
cG9uc2UocmVzcG9uc2UpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9sb2Fk
ZXIsIHdyYXBwZWRSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9h
ZEFzeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTExvYWRl
ckNsaWVudCogY2xpZW50KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVy
OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7
Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOwotCi0gICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0
Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChyZXF1ZXN0Q29weSk7Ci0KLSAgICBt
X3JlYWxDbGllbnQgPSBjbGllbnQ7Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2FkQXN5bmNocm9ub3Vz
bHkocmVxdWVzdENvcHksIHRoaXMpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShtX2xv
YWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgIG1fZG93bmxvYWRMZW5ndGggKz0gbGVu
Z3RoUmVjZWl2ZWQ7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKCkKK3Zv
aWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBtX3Jl
YWxMb2FkZXItPmNhbmNlbCgpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEobV9sb2FkZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVk
VVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKK3ZvaWQgQXNz
b2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIG1fcmVhbExvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKKyAgICBtX2NsaWVudC0+ZGlkRmlu
aXNoTG9hZGluZyhtX2xvYWRlciwgZmluaXNoVGltZSk7CisKKyAgICBpZiAobV9kb3dubG9hZGlu
Z1RvRmlsZSkKKyAgICAgICAgbV9jbGllbnQtPmRpZERvd25sb2FkRGF0YShtX2xvYWRlciwgbV9k
b3dubG9hZExlbmd0aCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6cHJlcGFyZVJl
cXVlc3QoV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAg
ICBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogYXBwbGljYXRpb25DYWNoZUhvc3QgPSBtX2ZyYW1l
SW1wbC0+ZGF0YVNvdXJjZSgpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwotICAgIGlmIChhcHBs
aWNhdGlvbkNhY2hlSG9zdCkKLSAgICAgICAgYXBwbGljYXRpb25DYWNoZUhvc3QtPndpbGxTdGFy
dFN1YlJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICBtX2ZyYW1lSW1wbC0+ZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QocmVxdWVzdCk7CisgICAgV2ViVVJMRXJyb3Igd2ViRXJyb3IoZXJyb3Ip
OworICAgIG1fY2xpZW50LT5kaWRGYWlsKG1fbG9hZGVyLCB3ZWJFcnJvcik7CiB9CiAKLXZvaWQg
QXNzb2NpYXRlZFVSTExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVS
TFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRy
PFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsKQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQor
ICAgICwgbV9jbGllbnQoMCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPndpbGxTZW5kUmVxdWVzdCh0
aGlzLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFtZUlt
cGwpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFNlbmREYXRhKFdlYlVSTExv
YWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzVG9CZVNlbnQpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9h
ZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwsIGNvbnN0IEFzc29jaWF0ZWRV
UkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQor
ICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVh
bENsaWVudC0+ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQp
OworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNl
JiByZXNwb25zZSkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkK
IHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7
CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRG93bmxvYWREYXRhKFdlYlVSTExv
YWRlciosIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3lu
Y2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSYg
cmVzcG9uc2UsIFdlYlVSTEVycm9yJiBlcnJvciwgV2ViRGF0YSYgZGF0YSkKIHsKLSAgICBtX3Jl
YWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0aGlzLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQo
IW1fY2xpZW50KTsKKworICAgIGRvTG9hZChyZXF1ZXN0LCAmcmVzcG9uc2UsICZlcnJvciwgJmRh
dGEpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFdlYlVS
TExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3NvY2lh
dGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVx
dWVzdCwgV2ViVVJMTG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5k
aWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQoIW1fY2xp
ZW50KTsKKworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIEFTU0VSVChtX2NsaWVudCk7CisK
KyAgICBkb0xvYWQocmVxdWVzdCwgMCwgMCwgMCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExv
YWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBkYXRhTGVuZ3RoKQorQ09NUElMRV9BU1NFUlQoKGludClXZWJLaXQ6OkRlbnlD
cm9zc09yaWdpblJlcXVlc3RzID09IChpbnQpV2ViQ29yZTo6RGVueUNyb3NzT3JpZ2luUmVxdWVz
dHMsIGVudW1fbWlzbWF0Y2gpOworQ09NUElMRV9BU1NFUlQoKGludClXZWJLaXQ6OlVzZUFjY2Vz
c0NvbnRyb2wgPT0gKGludClXZWJDb3JlOjpVc2VBY2Nlc3NDb250cm9sLCBlbnVtX21pc21hdGNo
KTsKK0NPTVBJTEVfQVNTRVJUKChpbnQpV2ViS2l0OjpBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMg
PT0gKGludClXZWJDb3JlOjpBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMsIGVudW1fbWlzbWF0Y2gp
OworCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRvTG9hZChjb25zdCBXZWJVUkxSZXF1ZXN0
JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSogcmVzcG9uc2UsIFdlYlVSTEVycm9yKiBlcnJvciwg
V2ViRGF0YSogZGF0YSkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSBtX29wdGlvbnMuc2Vu
ZExvYWRDYWxsYmFja3M7CisgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBtX29wdGlvbnMuc25p
ZmZDb250ZW50OworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzOworICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBtX29wdGlvbnMuZm9y
Y2VQcmVmbGlnaHQ7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpDcm9zc09yaWdpblJlcXVlc3RQb2xpY3k+KG9wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5KTsKKworICAgIFdlYlVSTFJlcXVlc3QgcmVxdWVzdENvcHkocmVx
dWVzdCk7CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiB3ZWJjb3JlUmVxdWVzdCA9IHJlcXVl
c3QudG9SZXNvdXJjZVJlcXVlc3QoKTsKKyAgICBEb2N1bWVudCogd2ViY29yZURvY3VtZW50ID0g
bV9mcmFtZUltcGwtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgbV9jbGllbnRBZGFwdGVyID0g
YWRvcHRQdHIobmV3IENsaWVudEFkYXB0ZXIodGhpcywgbV9jbGllbnQsIHJlcXVlc3QuZG93bmxv
YWRUb0ZpbGUoKSkpOworCisgICAgaWYgKG1fY2xpZW50KSAvLyBBIG5vbi1udWxsIGNsaWVudCBz
aWduYWxzIHRoYXQgdGhlIHJlcXVlc3QgaXMgYXN5bmNocm9ub3VzLgorICAgICAgICBtX2xvYWRl
ciA9IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdlYmNvcmVEb2N1bWVudCwgbV9j
bGllbnRBZGFwdGVyLmdldCgpLCB3ZWJjb3JlUmVxdWVzdCwgb3B0aW9ucyk7CisgICAgZWxzZQor
ICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkod2ViY29yZURvY3VtZW50LCB3ZWJjb3JlUmVxdWVzdCwgKm1fY2xpZW50QWRhcHRlciwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhX
ZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6Y2FuY2VsKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZpbmlzaExvYWRpbmcodGhpcywg
ZmluaXNoVGltZSk7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgIG1fbG9hZGVyLT5jYW5jZWwo
KTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGYWlsKFdlYlVSTExvYWRlcios
IGNvbnN0IFdlYlVSTEVycm9yJiBlcnJvcikKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5k
aWRGYWlsKHRoaXMsIGVycm9yKTsKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRV
UkxMb2FkZXIuaAkocmV2aXNpb24gNzk3ODEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDE5ICszMywz
NyBAQAogCiAjaW5jbHVkZSAiV2ViVVJMTG9hZGVyLmgiCiAjaW5jbHVkZSAiV2ViVVJMTG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeyBj
bGFzcyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFdlYkZyYW1lSW1wbDsKIAorZW51bSBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgewor
ICAgIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLAorICAgIFVzZUFjY2Vzc0NvbnRyb2wsCisgICAg
QWxsb3dDcm9zc09yaWdpblJlcXVlc3RzCit9OworCitzdHJ1Y3QgQXNzb2NpYXRlZFVSTExvYWRl
ck9wdGlvbnMgeworICAgIEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zKCkgOiBzZW5kTG9hZENh
bGxiYWNrcyhmYWxzZSksIHNuaWZmQ29udGVudChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMoZmFs
c2UpLCBmb3JjZVByZWZsaWdodChmYWxzZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShEZW55
Q3Jvc3NPcmlnaW5SZXF1ZXN0cykgeyB9CisgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrczsKKyAg
ICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7IC8vIFdoZXRo
ZXIgdG8gc2VuZCBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIHdpdGggdGhlIHJlcXVlc3Qu
CisgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgLy8gSWYgQWNjZXNzQ29udHJvbCBpcyB1c2VkLCB3
aGV0aGVyIHRvIGZvcmNlIGEgcHJlZmxpZ2h0LgorICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7Cit9OworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gaW1wbGVtZW50IFdlYkZyYW1lOjpjcmVhdGVBc3NvY2lhdGVkVVJMTG9hZGVyLgotLy8gRklY
TUU6IEltcGxlbWVudCBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlci4KLWNs
YXNzIEFzc29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2ViVVJMTG9hZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJVUkxMb2FkZXJDbGllbnQgeworY2xhc3MgQXNz
b2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2FkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFzc29jaWF0ZWRVUkxMb2FkZXIpOwogcHVibGljOgogICAgIEFzc29jaWF0ZWRV
UkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+KTsKKyAgICBBc3NvY2lhdGVkVVJMTG9h
ZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiwgY29uc3QgQXNzb2NpYXRlZFVSTExvYWRlck9w
dGlvbnMmKTsKICAgICB+QXNzb2NpYXRlZFVSTExvYWRlcigpOwogCiAgICAgLy8gV2ViVVJMTG9h
ZGVyIG1ldGhvZHM6CkBAIC01NCwyMiArNzIsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAot
ICAgIC8vIFdlYlVSTExvYWRlckNsaWVudCBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCB3aWxs
U2VuZFJlcXVlc3QoV2ViVVJMTG9hZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29u
c3QgV2ViVVJMUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0
YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlcios
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJVUkxM
b2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2Vi
VVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImKTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIHBy
ZXBhcmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmKTsKKyAgICBjbGFzcyBDbGllbnRBZGFwdGVyOwor
CisgICAgdm9pZCBkb0xvYWQoY29uc3QgV2ViVVJMUmVxdWVzdCYsIFdlYlVSTFJlc3BvbnNlKiwg
V2ViVVJMRXJyb3IqLCBXZWJEYXRhKik7CiAKICAgICBSZWZQdHI8V2ViRnJhbWVJbXBsPiBtX2Zy
YW1lSW1wbDsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBtX3JlYWxMb2FkZXI7Ci0gICAgV2Vi
VVJMTG9hZGVyQ2xpZW50KiBtX3JlYWxDbGllbnQ7CisgICAgQXNzb2NpYXRlZFVSTExvYWRlck9w
dGlvbnMgbV9vcHRpb25zOworICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAg
T3duUHRyPENsaWVudEFkYXB0ZXI+IG1fY2xpZW50QWRhcHRlcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="76270"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84328</attachid>
            <date>2011-03-01 17:02:54 -0800</date>
            <delta_ts>2011-03-02 11:17:36 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>14377</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDA2NykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMDMtMDEgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
dGVzdHMuIFRlc3RlZCBieSB1aV90ZXN0cy4KKworICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJM
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcik6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0
ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFNlbmREYXRhKToK
KyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lh
dGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRG
aW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xp
ZW50QWRhcHRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJM
TG9hZGVyOjp+QXNzb2NpYXRlZFVSTExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0
ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6QXNz
b2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVS
TExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgICogc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuaDoKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnM6OkFz
c29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zKToKKwogMjAxMS0wMy0wMSAgSmVyZW15IE9ybG93ICA8
am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNv
bi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRV
UkxMb2FkZXIuY3BwCShyZXZpc2lvbiA3OTc4MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMSwxMDMg
KzMxLDE3MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFzc29jaWF0ZWRVUkxM
b2FkZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1
ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiV2Vi
RGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktp
dC5oIgogI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTEVycm9yLmgi
CisjaW5jbHVkZSAiV2ViVVJMTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVz
dC5oIgorI2luY2x1ZGUgIldyYXBwZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJXcmFw
cGVkUmVzb3VyY2VSZXNwb25zZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVm
UHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsKQotICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBs
KSwKLSAgICAgIG1fcmVhbExvYWRlcih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkp
LAotICAgICAgbV9yZWFsQ2xpZW50KDApCisvLyBUaGlzIGNsYXNzIGJyaWRnZXMgdGhlIGludGVy
ZmFjZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdCBsb2FkZXIgY2xpZW50
cy4KKy8vIEl0IGZvcndhcmRzIGl0cyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IG5vdGlmaWNhdGlv
bnMgdG8gYSBXZWJVUkxMb2FkZXJDbGllbnQuCitjbGFzcyBBc3NvY2lhdGVkVVJMTG9hZGVyOjpD
bGllbnRBZGFwdGVyIDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBDbGllbnRBZGFwdGVyKiBjcmVhdGUoV2ViVVJMTG9hZGVyKiwgV2ViVVJMTG9h
ZGVyQ2xpZW50KiwgYm9vbCAvKmRvd25sb2FkVG9GaWxlKi8pOworCisgICAgdmlydHVhbCB2b2lk
IGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBs
b25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIC8qbmV3UmVxdWVzdCovLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmRhdGFMZW5ndGgqLyk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50IC8q
ZGF0YUxlbmd0aCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIC8qaWRlbnRpZmllciovLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICBD
bGllbnRBZGFwdGVyKFdlYlVSTExvYWRlciosIFdlYlVSTExvYWRlckNsaWVudCosIGJvb2wgLypk
b3dubG9hZGluZ1RvRmlsZSovKTsKKworICAgIFdlYlVSTExvYWRlciogbV9sb2FkZXI7CisgICAg
V2ViVVJMTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICB1bnNpZ25lZCBsb25nIG1fZG93bmxv
YWRMZW5ndGg7CisgICAgYm9vbCBtX2Rvd25sb2FkaW5nVG9GaWxlOworfTsKKworQXNzb2NpYXRl
ZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlciogQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcjo6Y3JlYXRlKFdlYlVSTExvYWRlciogbG9hZGVyLCBXZWJVUkxMb2FkZXJDbGllbnQqIGNs
aWVudCwgYm9vbCBkb3dubG9hZFRvRmlsZSkKIHsKKyAgICByZXR1cm4gbmV3IENsaWVudEFkYXB0
ZXIobG9hZGVyLCBjbGllbnQsIGRvd25sb2FkVG9GaWxlKTsKIH0KIAotQXNzb2NpYXRlZFVSTExv
YWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50
QWRhcHRlcjo6Q2xpZW50QWRhcHRlcihXZWJVUkxMb2FkZXIqIGxvYWRlciwgV2ViVVJMTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGJvb2wgZG93bmxvYWRpbmdUb0ZpbGUpCisgICAgOiBtX2xvYWRlcihs
b2FkZXIpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2Rvd25sb2FkTGVuZ3RoKDAp
CisgICAgLCBtX2Rvd25sb2FkaW5nVG9GaWxlKGRvd25sb2FkaW5nVG9GaWxlKQogeworICAgIEFT
U0VSVChtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKIH0KIAotdm9pZCBBc3NvY2lh
dGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1
ZXN0LCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UsIFdlYlVSTEVycm9yJiBlcnJvciwgV2ViRGF0
YSYgZGF0YSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6d2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBBU1NFUlQoIW1fcmVhbENsaWVudCk7Ci0K
LSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAgIHByZXBhcmVSZXF1
ZXN0KHJlcXVlc3RDb3B5KTsKLQotICAgIG1fcmVhbExvYWRlci0+bG9hZFN5bmNocm9ub3VzbHko
cmVxdWVzdENvcHksIHJlc3BvbnNlLCBlcnJvciwgZGF0YSk7CisgICAgV3JhcHBlZFJlc291cmNl
UmVxdWVzdCB3cmFwcGVkTmV3UmVxdWVzdChuZXdSZXF1ZXN0KTsKKyAgICBXcmFwcGVkUmVzb3Vy
Y2VSZXNwb25zZSB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKTsKKyAg
ICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fbG9hZGVyLCB3cmFwcGVkTmV3UmVxdWVzdCwg
d3JhcHBlZFJlZGlyZWN0UmVzcG9uc2UpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxM
b2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBBU1NFUlQoIW1fcmVhbENsaWVu
dCk7Ci0KLSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAgIHByZXBh
cmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsKKyAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEobV9sb2Fk
ZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KIAotICAgIG1fcmVhbENsaWVu
dCA9IGNsaWVudDsKLSAgICBtX3JlYWxMb2FkZXItPmxvYWRBc3luY2hyb25vdXNseShyZXF1ZXN0
Q29weSwgdGhpcyk7Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVzcG9uc2UocmVzcG9uc2UpOworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9sb2FkZXIsIHdyYXBwZWRSZXNwb25zZSk7
CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKCkKK3ZvaWQgQXNzb2NpYXRl
ZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewotICAgIG1fcmVhbExvYWRlci0+Y2FuY2VsKCk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fbG9hZGVyLCBkYXRhLCBsZW5ndGhSZWNlaXZl
ZCk7CisgICAgbV9kb3dubG9hZExlbmd0aCArPSBsZW5ndGhSZWNlaXZlZDsKIH0KIAotdm9pZCBB
c3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykK
K3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBt
X3JlYWxMb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CisgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2
ZWQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnByZXBhcmVSZXF1ZXN0KFdlYlVS
TFJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0
ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogYXBwbGljYXRpb25DYWNo
ZUhvc3QgPSBtX2ZyYW1lSW1wbC0+ZGF0YVNvdXJjZSgpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgp
OwotICAgIGlmIChhcHBsaWNhdGlvbkNhY2hlSG9zdCkKLSAgICAgICAgYXBwbGljYXRpb25DYWNo
ZUhvc3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICBtX2ZyYW1l
SW1wbC0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QocmVxdWVzdCk7CisgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcobV9sb2FkZXIsIGZpbmlzaFRpbWUpOworCisgICAgaWYgKG1fZG93bmxv
YWRpbmdUb0ZpbGUpIHsKKyAgICAgICAgaW50IGRvd25sb2FkTGVuZ3RoID0gbV9kb3dubG9hZExl
bmd0aCA8PSBJTlRfTUFYID8gbV9kb3dubG9hZExlbmd0aCA6IElOVF9NQVg7CisgICAgICAgIG1f
Y2xpZW50LT5kaWREb3dubG9hZERhdGEobV9sb2FkZXIsIGRvd25sb2FkTGVuZ3RoKTsKKyAgICB9
CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFdlYlVSTExv
YWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiBy
ZWRpcmVjdFJlc3BvbnNlKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVy
OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG1fcmVhbENsaWVu
dC0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwor
ICAgIFdlYlVSTEVycm9yIHdlYkVycm9yKGVycm9yKTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbCht
X2xvYWRlciwgd2ViRXJyb3IpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFNl
bmREYXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2ln
bmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjpB
c3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwpCisg
ICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1f
cmVhbENsaWVudC0+ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNl
bnQpOworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3Bv
bnNlJiByZXNwb25zZSkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIo
UGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCwgY29uc3QgQXNzb2NpYXRlZFVSTExv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpCisgICAg
LCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fY2xpZW50KDApCiB7Ci0gICAgbV9yZWFsQ2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgIEFTU0VSVChtX2Zy
YW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRG93bmxvYWREYXRh
KFdlYlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6fkFz
c29jaWF0ZWRVUkxMb2FkZXIoKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRG93bmxvYWREYXRh
KHRoaXMsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3Ro
KQorI2RlZmluZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKHdlYmtpdF9uYW1lLCB3ZWJj
b3JlX25hbWUpIFwKKyAgICBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6
d2Via2l0X25hbWUpID09IHN0YXRpY19jYXN0PGludD4oV2ViQ29yZTo6d2ViY29yZV9uYW1lKSwg
bWlzbWF0Y2hpbmdfZW51bXMpCisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRGVueUNy
b3NzT3JpZ2luUmVxdWVzdHMsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oVXNlQWNjZXNzQ29udHJvbCwgIFVzZUFjY2Vzc0NvbnRyb2wpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMsICBB
bGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMpOworCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6Omxv
YWRTeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3Bv
bnNlJiByZXNwb25zZSwgV2ViVVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQogewotICAg
IG1fcmVhbENsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7Cisg
ICAgQVNTRVJUKDApOyAvLyBTeW5jaHJvbm91cyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiB9
CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdl
YlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYg
cmVxdWVzdCwgV2ViVVJMTG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xpZW50
LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAg
QVNTRVJUKCFtX2NsaWVudCk7CisKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBBU1NFUlQo
bV9jbGllbnQpOworCisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBv
cHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzOwor
ICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudDsKKyAgICBv
cHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFsczsKKyAg
ICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0ID0gbV9vcHRpb25zLmZvcmNlUHJlZmxpZ2h0OworICAg
IG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Q3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5PihvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSk7CisKKyAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOworICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZVJlcXVlc3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1
ZXN0KCk7CisgICAgRG9jdW1lbnQqIHdlYmNvcmVEb2N1bWVudCA9IG1fZnJhbWVJbXBsLT5mcmFt
ZSgpLT5kb2N1bWVudCgpOworICAgIG1fY2xpZW50QWRhcHRlciA9IGFkb3B0UHRyKENsaWVudEFk
YXB0ZXI6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudCwgcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKSk7
CisKKyAgICBtX2xvYWRlciA9IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdlYmNv
cmVEb2N1bWVudCwgbV9jbGllbnRBZGFwdGVyLmdldCgpLCB3ZWJjb3JlUmVxdWVzdCwgb3B0aW9u
cyk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhXZWJV
UkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Y2FuY2VsKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZpbmlzaExvYWRpbmcodGhpcywgZmlu
aXNoVGltZSk7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsK
IH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGYWlsKFdlYlVSTExvYWRlciosIGNv
bnN0IFdlYlVSTEVycm9yJiBlcnJvcikKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0RGVm
ZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRG
YWlsKHRoaXMsIGVycm9yKTsKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuaAkocmV2aXNpb24gNzk3ODEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3NvY2lhdGVkVVJMTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMyLDIwICszMiwzNyBA
QAogI2RlZmluZSBBc3NvY2lhdGVkVVJMTG9hZGVyX2gKIAogI2luY2x1ZGUgIldlYlVSTExvYWRl
ci5oIgotI2luY2x1ZGUgIldlYlVSTExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OyB9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKK2VudW0g
Q3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywK
KyAgICBVc2VBY2Nlc3NDb250cm9sLAorICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsK
Kworc3RydWN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zIHsKKyAgICBBc3NvY2lhdGVkVVJM
TG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQo
ZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9yY2VQcmVmbGlnaHQoZmFsc2UpLCBj
cm9zc09yaWdpblJlcXVlc3RQb2xpY3koRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpIHsgfQorICAg
IGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CisgICAgYm9vbCBzbmlmZkNvbnRlbnQ7CisgICAgYm9v
bCBhbGxvd0NyZWRlbnRpYWxzOyAvLyBXaGV0aGVyIHRvIHNlbmQgSFRUUCBjcmVkZW50aWFscyBh
bmQgY29va2llcyB3aXRoIHRoZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7IC8v
IElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4K
KyAgICBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5Owor
fTsKKwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCBXZWJGcmFtZTo6Y3JlYXRl
QXNzb2NpYXRlZFVSTExvYWRlci4KLS8vIEZJWE1FOiBJbXBsZW1lbnQgaW4gdGVybXMgb2YgV2Vi
Q29yZTo6U3VicmVzb3VyY2VMb2FkZXIuCi1jbGFzcyBBc3NvY2lhdGVkVVJMTG9hZGVyIDogcHVi
bGljIFdlYlVSTExvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2Vi
VVJMTG9hZGVyQ2xpZW50IHsKK2NsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2Vi
VVJMTG9hZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBc3NvY2lhdGVkVVJMTG9hZGVy
KTsKIHB1YmxpYzoKICAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJ
bXBsPik7CisgICAgQXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4s
IGNvbnN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zJik7CiAgICAgfkFzc29jaWF0ZWRVUkxM
b2FkZXIoKTsKIAogICAgIC8vIFdlYlVSTExvYWRlciBtZXRob2RzOgpAQCAtNTQsMjIgKzcxLDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAKLSAgICAvLyBXZWJVUkxMb2FkZXJDbGllbnQgbWV0
aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdl
YlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoV2ViVVJMTG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJVUkxMb2Fk
ZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9h
ZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxl
bmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShXZWJVUkxM
b2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9y
Jik7Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCBwcmVwYXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0Jik7
CisgICAgY2xhc3MgQ2xpZW50QWRhcHRlcjsKIAogICAgIFJlZlB0cjxXZWJGcmFtZUltcGw+IG1f
ZnJhbWVJbXBsOwotICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IG1fcmVhbExvYWRlcjsKLSAgICBX
ZWJVUkxMb2FkZXJDbGllbnQqIG1fcmVhbENsaWVudDsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVy
T3B0aW9ucyBtX29wdGlvbnM7CisgICAgV2ViVVJMTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAg
ICBPd25QdHI8Q2xpZW50QWRhcHRlcj4gbV9jbGllbnRBZGFwdGVyOworICAgIFJlZlB0cjxXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="76296"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84442</attachid>
            <date>2011-03-02 11:17:36 -0800</date>
            <delta_ts>2011-03-04 18:39:07 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>14445</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDE1MCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMDMtMDIgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
dGVzdHMgbmVlZGVkLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
c3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVk
VVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpDbGllbnRBZGFwdGVyKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6d2lsbFNlbmRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
cjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpD
bGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNs
aWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lh
dGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6
QXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcik6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpjYW5jZWwpOgorICAgICAgICAoV2Vi
S2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKiBz
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJM
TG9hZGVyT3B0aW9uczo6QXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMpOgorCiAyMDExLTAxLTI2
ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERl
dGFjaCBHZW9sb2NhdGlvbiBmcm9tIEZyYW1lIHdoZW4gUGFnZSBkZXN0cm95ZWQuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNw
cAkocmV2aXNpb24gNzk3ODEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lh
dGVkVVJMTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMTAzICszMSwxNzMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBc3NvY2lhdGVkVVJMTG9hZGVyLmgiCiAK
KyNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2Uu
aCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNs
dWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgorI2luY2x1ZGUg
IldlYlVSTExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNl
UmVzcG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUFz
c29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFt
ZUltcGw+IGZyYW1lSW1wbCkKLSAgICA6IG1fZnJhbWVJbXBsKGZyYW1lSW1wbCksCi0gICAgICBt
X3JlYWxMb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKSwKLSAgICAgIG1f
cmVhbENsaWVudCgwKQorLy8gVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBpbnRlcmZhY2UgZGlmZmVy
ZW5jZXMgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgbG9hZGVyIGNsaWVudHMuCisvLyBJdCBm
b3J3YXJkcyBpdHMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCBub3RpZmljYXRpb25zIHRvIGEgV2Vi
VVJMTG9hZGVyQ2xpZW50LgorY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
ciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDbGllbnRBZGFwdGVyPiBjcmVhdGUoV2ViVVJMTG9hZGVyKiwgV2ViVVJMTG9h
ZGVyQ2xpZW50KiwgYm9vbCAvKmRvd25sb2FkVG9GaWxlKi8pOworCisgICAgdmlydHVhbCB2b2lk
IGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBs
b25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIC8qbmV3UmVxdWVzdCovLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmRhdGFMZW5ndGgqLyk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50IC8q
ZGF0YUxlbmd0aCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIC8qaWRlbnRpZmllciovLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICBD
bGllbnRBZGFwdGVyKFdlYlVSTExvYWRlciosIFdlYlVSTExvYWRlckNsaWVudCosIGJvb2wgLypk
b3dubG9hZGluZ1RvRmlsZSovKTsKKworICAgIFdlYlVSTExvYWRlciogbV9sb2FkZXI7CisgICAg
V2ViVVJMTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICB1bnNpZ25lZCBsb25nIG1fZG93bmxv
YWRMZW5ndGg7CisgICAgYm9vbCBtX2Rvd25sb2FkaW5nVG9GaWxlOworfTsKKworUGFzc093blB0
cjxBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyPiBBc3NvY2lhdGVkVVJMTG9hZGVy
OjpDbGllbnRBZGFwdGVyOjpjcmVhdGUoV2ViVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRl
ckNsaWVudCogY2xpZW50LCBib29sIGRvd25sb2FkVG9GaWxlKQogeworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ2xpZW50QWRhcHRlcihsb2FkZXIsIGNsaWVudCwgZG93bmxvYWRUb0ZpbGUpKTsK
IH0KIAotQXNzb2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQorQXNzb2Np
YXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcihXZWJVUkxMb2FkZXIq
IGxvYWRlciwgV2ViVVJMTG9hZGVyQ2xpZW50KiBjbGllbnQsIGJvb2wgZG93bmxvYWRpbmdUb0Zp
bGUpCisgICAgOiBtX2xvYWRlcihsb2FkZXIpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAg
LCBtX2Rvd25sb2FkTGVuZ3RoKDApCisgICAgLCBtX2Rvd25sb2FkaW5nVG9GaWxlKGRvd25sb2Fk
aW5nVG9GaWxlKQogeworICAgIEFTU0VSVChtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50
KTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseShjb25z
dCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UsIFdlYlVS
TEVycm9yJiBlcnJvciwgV2ViRGF0YSYgZGF0YSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBBU1NF
UlQoIW1fcmVhbENsaWVudCk7Ci0KLSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVl
c3QpOwotICAgIHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsKLQotICAgIG1fcmVhbExvYWRl
ci0+bG9hZFN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHJlc3BvbnNlLCBlcnJvciwgZGF0YSk7
CisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3cmFwcGVkTmV3UmVxdWVzdChuZXdSZXF1ZXN0
KTsKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZShy
ZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fbG9hZGVy
LCB3cmFwcGVkTmV3UmVxdWVzdCwgd3JhcHBlZFJlZGlyZWN0UmVzcG9uc2UpOwogfQogCi12b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1
ZXN0JiByZXF1ZXN0LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQXNzb2NpYXRl
ZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAg
ICBBU1NFUlQoIW1fcmVhbENsaWVudCk7Ci0KLSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5
KHJlcXVlc3QpOwotICAgIHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsKKyAgICBtX2NsaWVu
dC0+ZGlkU2VuZERhdGEobV9sb2FkZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsK
K30KIAotICAgIG1fcmVhbENsaWVudCA9IGNsaWVudDsKLSAgICBtX3JlYWxMb2FkZXItPmxvYWRB
c3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgdGhpcyk7Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVz
cG9uc2UocmVzcG9uc2UpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9sb2Fk
ZXIsIHdyYXBwZWRSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Y2Fu
Y2VsKCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewotICAgIG1fcmVh
bExvYWRlci0+Y2FuY2VsKCk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fbG9hZGVy
LCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7CisgICAgbV9kb3dubG9hZExlbmd0aCArPSBsZW5ndGhS
ZWNlaXZlZDsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzTG9hZGluZykKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJz
TG9hZGluZyk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShtX2xvYWRl
ciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OnByZXBhcmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEFzc29jaWF0ZWRV
UkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdCogYXBwbGljYXRpb25DYWNoZUhvc3QgPSBtX2ZyYW1lSW1wbC0+ZGF0YVNvdXJjZSgpLT5h
cHBsaWNhdGlvbkNhY2hlSG9zdCgpOwotICAgIGlmIChhcHBsaWNhdGlvbkNhY2hlSG9zdCkKLSAg
ICAgICAgYXBwbGljYXRpb25DYWNoZUhvc3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdChy
ZXF1ZXN0KTsKLSAgICBtX2ZyYW1lSW1wbC0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QocmVxdWVz
dCk7CisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9sb2FkZXIsIGZpbmlzaFRpbWUp
OworCisgICAgaWYgKG1fZG93bmxvYWRpbmdUb0ZpbGUpIHsKKyAgICAgICAgaW50IGRvd25sb2Fk
TGVuZ3RoID0gbV9kb3dubG9hZExlbmd0aCA8PSBJTlRfTUFYID8gbV9kb3dubG9hZExlbmd0aCA6
IElOVF9NQVg7CisgICAgICAgIG1fY2xpZW50LT5kaWREb3dubG9hZERhdGEobV9sb2FkZXIsIGRv
d25sb2FkTGVuZ3RoKTsKKyAgICB9CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6d2ls
bFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNv
bnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIG1fcmVhbENsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOworICAgIFdlYlVSTEVycm9yIHdlYkVycm9yKGVycm9yKTsKKyAg
ICBtX2NsaWVudC0+ZGlkRmFpbChtX2xvYWRlciwgd2ViRXJyb3IpOwogfQogCi12b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OmRpZFNlbmREYXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitB
c3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJh
bWVJbXBsPiBmcmFtZUltcGwpCisgICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpCisgICAgLCBt
X2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNT
ZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAK
LXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRl
ciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZXNwb25zZSkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6
OkFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCwg
Y29uc3QgQXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBtX2ZyYW1l
SW1wbChmcmFtZUltcGwpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fY2xpZW50
KDApCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9u
c2UpOworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExv
YWRlcjo6ZGlkRG93bmxvYWREYXRhKFdlYlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKQorQXNz
b2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQogewotICAgIG1fcmVhbENs
aWVudC0+ZGlkRG93bmxvYWREYXRhKHRoaXMsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBkYXRhTGVuZ3RoKQorI2RlZmluZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKHdlYmtpdF9uYW1lLCB3ZWJjb3JlX25hbWUpIFwKKyAgICBDT01QSUxFX0FTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KFdlYktpdDo6d2Via2l0X25hbWUpID09IHN0YXRpY19jYXN0PGludD4oV2Vi
Q29yZTo6d2ViY29yZV9uYW1lKSwgbWlzbWF0Y2hpbmdfZW51bXMpCisKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMsIERlbnlDcm9zc09yaWdpblJl
cXVlc3RzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oVXNlQWNjZXNzQ29udHJvbCwg
VXNlQWNjZXNzQ29udHJvbCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEFsbG93Q3Jv
c3NPcmlnaW5SZXF1ZXN0cywgQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKTsKKwordm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiBy
ZXF1ZXN0LCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UsIFdlYlVSTEVycm9yJiBlcnJvciwgV2Vi
RGF0YSYgZGF0YSkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRh
dGEsIGRhdGFMZW5ndGgpOworICAgIEFTU0VSVCgwKTsgLy8gU3luY2hyb25vdXMgbG9hZGluZyBp
cyBub3Qgc3VwcG9ydGVkLgogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0
YUxlbmd0aCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KGNv
bnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50KQog
ewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKHRoaXMsIGRhdGEs
IGRhdGFMZW5ndGgpOworICAgIEFTU0VSVCghbV9jbGllbnQpOworCisgICAgbV9jbGllbnQgPSBj
bGllbnQ7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IG1fb3B0aW9ucy5z
ZW5kTG9hZENhbGxiYWNrczsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IG1fb3B0aW9ucy5z
bmlmZkNvbnRlbnQ7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gbV9vcHRpb25zLmFs
bG93Q3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IG1fb3B0aW9ucy5m
b3JjZVByZWZsaWdodDsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeT4ob3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kpOworCisgICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShy
ZXF1ZXN0KTsKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHdlYmNvcmVSZXF1ZXN0ID0gcmVx
dWVzdC50b1Jlc291cmNlUmVxdWVzdCgpOworICAgIERvY3VtZW50KiB3ZWJjb3JlRG9jdW1lbnQg
PSBtX2ZyYW1lSW1wbC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBtX2NsaWVudEFkYXB0ZXIg
PSBDbGllbnRBZGFwdGVyOjpjcmVhdGUodGhpcywgbV9jbGllbnQsIHJlcXVlc3QuZG93bmxvYWRU
b0ZpbGUoKSk7CisKKyAgICBtX2xvYWRlciA9IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3Jl
YXRlKHdlYmNvcmVEb2N1bWVudCwgbV9jbGllbnRBZGFwdGVyLmdldCgpLCB3ZWJjb3JlUmVxdWVz
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmluaXNoTG9h
ZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Y2FuY2VsKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
dGhpcywgZmluaXNoVGltZSk7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+
Y2FuY2VsKCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmFpbChXZWJVUkxM
b2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYgZXJyb3IpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogewotICAgIG1fcmVhbENs
aWVudC0+ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBt
X2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVk
VVJMTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
b2NpYXRlZFVSTExvYWRlci5oCShyZXZpc2lvbiA3OTc4MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzIs
MjAgKzMyLDM3IEBACiAjZGVmaW5lIEFzc29jaWF0ZWRVUkxMb2FkZXJfaAogCiAjaW5jbHVkZSAi
V2ViVVJMTG9hZGVyLmgiCi0jaW5jbHVkZSAiV2ViVVJMTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI7IH0KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkZyYW1lSW1w
bDsKIAorZW51bSBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgeworICAgIERlbnlDcm9zc09yaWdp
blJlcXVlc3RzLAorICAgIFVzZUFjY2Vzc0NvbnRyb2wsCisgICAgQWxsb3dDcm9zc09yaWdpblJl
cXVlc3RzCit9OworCitzdHJ1Y3QgQXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMgeworICAgIEFz
c29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zKCkgOiBzZW5kTG9hZENhbGxiYWNrcyhmYWxzZSksIHNu
aWZmQ29udGVudChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMoZmFsc2UpLCBmb3JjZVByZWZsaWdo
dChmYWxzZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0
cykgeyB9CisgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrczsKKyAgICBib29sIHNuaWZmQ29udGVu
dDsKKyAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7IC8vIFdoZXRoZXIgdG8gc2VuZCBIVFRQIGNy
ZWRlbnRpYWxzIGFuZCBjb29raWVzIHdpdGggdGhlIHJlcXVlc3QuCisgICAgYm9vbCBmb3JjZVBy
ZWZsaWdodDsgLy8gSWYgQWNjZXNzQ29udHJvbCBpcyB1c2VkLCB3aGV0aGVyIHRvIGZvcmNlIGEg
cHJlZmxpZ2h0LgorICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVl
c3RQb2xpY3k7Cit9OworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IFdlYkZy
YW1lOjpjcmVhdGVBc3NvY2lhdGVkVVJMTG9hZGVyLgotLy8gRklYTUU6IEltcGxlbWVudCBpbiB0
ZXJtcyBvZiBXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlci4KLWNsYXNzIEFzc29jaWF0ZWRVUkxM
b2FkZXIgOiBwdWJsaWMgV2ViVVJMTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBXZWJVUkxMb2FkZXJDbGllbnQgeworY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlciA6
IHB1YmxpYyBXZWJVUkxMb2FkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc29jaWF0
ZWRVUkxMb2FkZXIpOwogcHVibGljOgogICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0
cjxXZWJGcmFtZUltcGw+KTsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2Vi
RnJhbWVJbXBsPiwgY29uc3QgQXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMmKTsKICAgICB+QXNz
b2NpYXRlZFVSTExvYWRlcigpOwogCiAgICAgLy8gV2ViVVJMTG9hZGVyIG1ldGhvZHM6CkBAIC01
NCwyMiArNzEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAotICAgIC8vIFdlYlVSTExvYWRl
ckNsaWVudCBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViVVJM
TG9hZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJVUkxM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcg
dG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFk
YXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUgZmlu
aXNoVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3Qg
V2ViVVJMRXJyb3ImKTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVSZXF1ZXN0KFdlYlVS
TFJlcXVlc3QmKTsKKyAgICBjbGFzcyBDbGllbnRBZGFwdGVyOwogCiAgICAgUmVmUHRyPFdlYkZy
YW1lSW1wbD4gbV9mcmFtZUltcGw7Ci0gICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbV9yZWFsTG9h
ZGVyOwotICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9yZWFsQ2xpZW50OworICAgIEFzc29jaWF0
ZWRVUkxMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1f
Y2xpZW50OworICAgIE93blB0cjxDbGllbnRBZGFwdGVyPiBtX2NsaWVudEFkYXB0ZXI7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84840</attachid>
            <date>2011-03-04 18:39:07 -0800</date>
            <delta_ts>2011-03-10 10:20:20 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>14463</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDQwMSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTEtMDMtMDQgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
dGVzdHMgbmVlZGVkLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
c3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVk
VVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpDbGllbnRBZGFwdGVyKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6d2lsbFNlbmRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
cjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpD
bGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNs
aWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lh
dGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6
QXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcik6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKToKKyAgICAgICAg
KFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpjYW5jZWwpOgorICAgICAgICAoV2Vi
S2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKiBz
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJM
TG9hZGVyT3B0aW9uczo6QXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMpOgorCiAyMDExLTAzLTA0
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2Np
YXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9uIDgwMzQ3KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTMxLDEwMyArMzEsMTc2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXNzb2NpYXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZUhvc3QuaCIK
ICNpbmNsdWRlICJXZWJEYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViVVJMRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJVUkxMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oIgor
I2luY2x1ZGUgIldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1Bc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJM
TG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwpCi0gICAgOiBtX2ZyYW1l
SW1wbChmcmFtZUltcGwpLAotICAgICAgbV9yZWFsTG9hZGVyKHdlYktpdENsaWVudCgpLT5jcmVh
dGVVUkxMb2FkZXIoKSksCi0gICAgICBtX3JlYWxDbGllbnQoMCkKKy8vIFRoaXMgY2xhc3MgYnJp
ZGdlcyB0aGUgaW50ZXJmYWNlIGRpZmZlcmVuY2VzIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0
IGxvYWRlciBjbGllbnRzLgorLy8gSXQgZm9yd2FyZHMgaXRzIFRocmVhZGFibGVMb2FkZXJDbGll
bnQgbm90aWZpY2F0aW9ucyB0byBhIFdlYlVSTExvYWRlckNsaWVudC4KK2NsYXNzIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xpZW50QWRhcHRlcj4gY3JlYXRl
KFdlYlVSTExvYWRlciosIFdlYlVSTExvYWRlckNsaWVudCosIGJvb2wgLypkb3dubG9hZFRvRmls
ZSovKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcg
LypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8p
OworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiAvKm5l
d1JlcXVlc3QqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8p
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBp
bnQgLypkYXRhTGVuZ3RoKi8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoY29uc3QgY2hhciosIGludCAvKmRhdGFMZW5ndGgqLyk7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgZG91YmxlIC8q
ZmluaXNoVGltZSovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJik7CisKK3ByaXZhdGU6CisgICAgQ2xpZW50QWRhcHRlcihXZWJVUkxMb2FkZXIqLCBXZWJV
UkxMb2FkZXJDbGllbnQqLCBib29sIC8qZG93bmxvYWRpbmdUb0ZpbGUqLyk7CisKKyAgICBXZWJV
UkxMb2FkZXIqIG1fbG9hZGVyOworICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9jbGllbnQ7Cisg
ICAgdW5zaWduZWQgbG9uZyBtX2Rvd25sb2FkTGVuZ3RoOworICAgIGJvb2wgbV9kb3dubG9hZGlu
Z1RvRmlsZTsKK307CisKK1Bhc3NPd25QdHI8QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcj4gQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6Y3JlYXRlKFdlYlVSTExv
YWRlciogbG9hZGVyLCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCwgYm9vbCBkb3dubG9hZFRv
RmlsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsaWVudEFkYXB0ZXIobG9hZGVyLCBj
bGllbnQsIGRvd25sb2FkVG9GaWxlKSk7CiB9CiAKLUFzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3Nv
Y2lhdGVkVVJMTG9hZGVyKCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OkNs
aWVudEFkYXB0ZXIoV2ViVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNsaWVudCogY2xp
ZW50LCBib29sIGRvd25sb2FkaW5nVG9GaWxlKQorICAgIDogbV9sb2FkZXIobG9hZGVyKQorICAg
ICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9kb3dubG9hZExlbmd0aCgwKQorICAgICwgbV9k
b3dubG9hZGluZ1RvRmlsZShkb3dubG9hZGluZ1RvRmlsZSkKIHsKKyAgICBBU1NFUlQobV9sb2Fk
ZXIpOworICAgIEFTU0VSVChtX2NsaWVudCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6bG9hZFN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJM
UmVzcG9uc2UmIHJlc3BvbnNlLCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCit2
b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOwotCi0gICAgV2ViVVJM
UmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChyZXF1ZXN0
Q29weSk7Ci0KLSAgICBtX3JlYWxMb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RDb3B5
LCByZXNwb25zZSwgZXJyb3IsIGRhdGEpOworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3Jh
cHBlZE5ld1JlcXVlc3QobmV3UmVxdWVzdCk7CisgICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2Ug
d3JhcHBlZFJlZGlyZWN0UmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSk7CisgICAgbV9jbGllbnQt
PndpbGxTZW5kUmVxdWVzdChtX2xvYWRlciwgd3JhcHBlZE5ld1JlcXVlc3QsIHdyYXBwZWRSZWRp
cmVjdFJlc3BvbnNlKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNo
cm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMTG9hZGVyQ2xpZW50
KiBjbGllbnQpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFNl
bmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzVG9CZVNlbnQpCiB7Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOwotCi0gICAg
V2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChy
ZXF1ZXN0Q29weSk7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fbG9hZGVyLCBieXRlc1Nl
bnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CiAKLSAgICBtX3JlYWxDbGllbnQgPSBjbGllbnQ7
Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHRoaXMp
Owordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgV3JhcHBlZFJl
c291cmNlUmVzcG9uc2Ugd3JhcHBlZFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fbG9hZGVyLCB3cmFwcGVkUmVzcG9uc2UpOwogfQogCi12b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNlbCgpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPmNhbmNlbCgpOworICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlRGF0YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgIG1f
ZG93bmxvYWRMZW5ndGggKz0gbGVuZ3RoUmVjZWl2ZWQ7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCit2b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7Ci0gICAgbV9yZWFsTG9hZGVy
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOworICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEobV9sb2FkZXIsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIH0KIAot
dm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpwcmVwYXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0JiBy
ZXF1ZXN0KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGaW5p
c2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7
Ci0gICAgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVIb3N0ID0gbV9m
cmFtZUltcGwtPmRhdGFTb3VyY2UoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsKLSAgICBpZiAo
YXBwbGljYXRpb25DYWNoZUhvc3QpCi0gICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVIb3N0LT53aWxs
U3RhcnRTdWJSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgbV9mcmFtZUltcGwtPmRpc3Bh
dGNoV2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QpOworICAgIGlmIChtX2Rvd25sb2FkaW5nVG9GaWxl
KSB7CisgICAgICAgIGludCBkb3dubG9hZExlbmd0aCA9IG1fZG93bmxvYWRMZW5ndGggPD0gSU5U
X01BWCA/IG1fZG93bmxvYWRMZW5ndGggOiBJTlRfTUFYOworICAgICAgICBtX2NsaWVudC0+ZGlk
RG93bmxvYWREYXRhKG1fbG9hZGVyLCBkb3dubG9hZExlbmd0aCk7CisgICAgfQorCisgICAgbV9j
bGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9sb2FkZXIsIGZpbmlzaFRpbWUpOwogfQogCi12b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChXZWJVUkxMb2FkZXIqLCBXZWJV
UkxSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBXZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBtX3JlYWxDbGllbnQtPndpbGxTZW5k
UmVxdWVzdCh0aGlzLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBXZWJVUkxF
cnJvciB3ZWJFcnJvcihlcnJvcik7CisgICAgbV9jbGllbnQtPmRpZEZhaWwobV9sb2FkZXIsIHdl
YkVycm9yKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRTZW5kRGF0YShXZWJV
UkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWxCeXRlc1RvQmVTZW50KQorQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVS
TExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsKQorICAgIDogbV9mcmFt
ZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9jbGllbnQoMCkKIHsKLSAgICBtX3JlYWxDbGllbnQt
PmRpZFNlbmREYXRhKHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAgICBB
U1NFUlQobV9mcmFtZUltcGwpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYgcmVzcG9u
c2UpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8
V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwsIGNvbnN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9vcHRpb25z
KG9wdGlvbnMpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOwog
fQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2Fk
ZXIqLCBpbnQgZGF0YUxlbmd0aCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJM
TG9hZGVyKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0aGlzLCBkYXRh
TGVuZ3RoKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShX
ZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKKyNkZWZpbmUg
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTSh3ZWJraXRfbmFtZSwgd2ViY29yZV9uYW1lKSBc
CisgICAgQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OndlYmtpdF9uYW1l
KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYkNvcmU6OndlYmNvcmVfbmFtZSksIG1pc21hdGNoaW5n
X2VudW1zKQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERlbnlDcm9zc09yaWdpblJl
cXVlc3RzLCBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFVzZUFjY2Vzc0NvbnRyb2wsIFVzZUFjY2Vzc0NvbnRyb2wpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMsIEFsbG93Q3Jvc3NPcmln
aW5SZXF1ZXN0cyk7CisKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9ub3Vz
bHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNl
LCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCiB7Ci0gICAgbV9yZWFsQ2xpZW50
LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQoMCk7
IC8vIFN5bmNocm9ub3VzIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZC4KIH0KIAotdm9pZCBBc3Nv
Y2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwg
Y29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJV
UkxMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YSh0aGlzLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQoIW1fY2xp
ZW50KTsKKworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIEFTU0VSVChtX2NsaWVudCk7CisK
KyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExv
YWRDYWxsYmFja3MgPSBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3M7CisgICAgb3B0aW9ucy5z
bmlmZkNvbnRlbnQgPSBtX29wdGlvbnMuc25pZmZDb250ZW50OworICAgIG9wdGlvbnMuYWxsb3dD
cmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzOworICAgIG9wdGlvbnMuZm9y
Y2VQcmVmbGlnaHQgPSBtX29wdGlvbnMuZm9yY2VQcmVmbGlnaHQ7CisgICAgb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDcm9zc09yaWdpblJl
cXVlc3RQb2xpY3k+KG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KTsKKworICAgIFdl
YlVSTFJlcXVlc3QgcmVxdWVzdENvcHkocmVxdWVzdCk7CisgICAgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiB3ZWJjb3JlUmVxdWVzdCA9IHJlcXVlc3QudG9SZXNvdXJjZVJlcXVlc3QoKTsKKyAgICBE
b2N1bWVudCogd2ViY29yZURvY3VtZW50ID0gbV9mcmFtZUltcGwtPmZyYW1lKCktPmRvY3VtZW50
KCk7CisgICAgbV9jbGllbnRBZGFwdGVyID0gQ2xpZW50QWRhcHRlcjo6Y3JlYXRlKHRoaXMsIG1f
Y2xpZW50LCByZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpOworCisgICAgbV9sb2FkZXIgPSBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSh3ZWJjb3JlRG9jdW1lbnQsIG1fY2xpZW50QWRh
cHRlci5nZXQoKSwgd2ViY29yZVJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlz
aFRpbWUpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNlbCgpCiB7Ci0gICAgbV9yZWFs
Q2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMsIGZpbmlzaFRpbWUpOworICAgIGlmIChtX2xv
YWRlcikgeworICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0g
MDsKKyAgICB9CisgICAgbV9jbGllbnQgPSAwOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImIGVycm9yKQordm9p
ZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGlu
ZykKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworICAgIGlmICht
X2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGlu
Zyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAkocmV2aXNpb24gODAzNDcpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTMyLDIwICszMiwzNyBAQAogI2RlZmluZSBBc3NvY2lhdGVkVVJMTG9h
ZGVyX2gKIAogI2luY2x1ZGUgIldlYlVSTExvYWRlci5oIgotI2luY2x1ZGUgIldlYlVSTExvYWRl
ckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsg
Y2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOyB9CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKK2VudW0gQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsK
KyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nlc3NDb250cm9sLAorICAg
IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IEFzc29jaWF0ZWRVUkxMb2Fk
ZXJPcHRpb25zIHsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRD
YWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKHRy
dWUpLCBmb3JjZVByZWZsaWdodChmYWxzZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShEZW55
Q3Jvc3NPcmlnaW5SZXF1ZXN0cykgeyB9CisgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrczsKKyAg
ICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7IC8vIFdoZXRo
ZXIgdG8gc2VuZCBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIHdpdGggdGhlIHJlcXVlc3Qu
CisgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgLy8gSWYgQWNjZXNzQ29udHJvbCBpcyB1c2VkLCB3
aGV0aGVyIHRvIGZvcmNlIGEgcHJlZmxpZ2h0LgorICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7Cit9OworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gaW1wbGVtZW50IFdlYkZyYW1lOjpjcmVhdGVBc3NvY2lhdGVkVVJMTG9hZGVyLgotLy8gRklY
TUU6IEltcGxlbWVudCBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlci4KLWNs
YXNzIEFzc29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2ViVVJMTG9hZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJVUkxMb2FkZXJDbGllbnQgeworY2xhc3MgQXNz
b2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2FkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFzc29jaWF0ZWRVUkxMb2FkZXIpOwogcHVibGljOgogICAgIEFzc29jaWF0ZWRV
UkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+KTsKKyAgICBBc3NvY2lhdGVkVVJMTG9h
ZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiwgY29uc3QgQXNzb2NpYXRlZFVSTExvYWRlck9w
dGlvbnMmKTsKICAgICB+QXNzb2NpYXRlZFVSTExvYWRlcigpOwogCiAgICAgLy8gV2ViVVJMTG9h
ZGVyIG1ldGhvZHM6CkBAIC01NCwyMiArNzEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAot
ICAgIC8vIFdlYlVSTExvYWRlckNsaWVudCBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCB3aWxs
U2VuZFJlcXVlc3QoV2ViVVJMTG9hZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29u
c3QgV2ViVVJMUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0
YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlcios
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJVUkxM
b2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2Vi
VVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImKTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIHBy
ZXBhcmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmKTsKKyAgICBjbGFzcyBDbGllbnRBZGFwdGVyOwog
CiAgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gbV9mcmFtZUltcGw7Ci0gICAgT3duUHRyPFdlYlVS
TExvYWRlcj4gbV9yZWFsTG9hZGVyOwotICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9yZWFsQ2xp
ZW50OworICAgIEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBXZWJV
UkxMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIE93blB0cjxDbGllbnRBZGFwdGVyPiBtX2Ns
aWVudEFkYXB0ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cj4gbV9sb2FkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85345</attachid>
            <date>2011-03-10 10:20:20 -0800</date>
            <delta_ts>2011-03-11 13:45:33 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>15227</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDczMykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMDMtMTAgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogc3Jj
L0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJM
TG9hZGVyOjpDbGllbnRBZGFwdGVyOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OkNsaWVudEFkYXB0ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjp3aWxs
U2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGll
bnRBZGFwdGVyOjpkaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxM
b2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6
OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWwpOgorICAgICAgICAo
V2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkU3luY2hyb25vdXNseSk6
CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNs
eSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNlbCk6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAg
ICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6OkFzc29j
aWF0ZWRVUkxMb2FkZXJPcHRpb25zOjpBc3NvY2lhdGVkVVJMTG9hZGVyT3B0aW9ucyk6CisKIDIw
MTEtMDMtMTAgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9uIDgwNzI1
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDEwMyArMzEsMjA1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAiRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViQXBwbGljYXRp
b25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViVVJMRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJVUkxMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1Bc3NvY2lhdGVkVVJMTG9hZGVy
OjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwp
Ci0gICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpLAotICAgICAgbV9yZWFsTG9hZGVyKHdlYktp
dENsaWVudCgpLT5jcmVhdGVVUkxMb2FkZXIoKSksCi0gICAgICBtX3JlYWxDbGllbnQoMCkKKy8v
IFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgaW50ZXJmYWNlIGRpZmZlcmVuY2VzIGJldHdlZW4gV2Vi
Q29yZSBhbmQgV2ViS2l0IGxvYWRlciBjbGllbnRzLgorLy8gSXQgZm9yd2FyZHMgaXRzIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQgbm90aWZpY2F0aW9ucyB0byBhIFdlYlVSTExvYWRlckNsaWVudC4K
K2NsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXIgOiBwdWJsaWMgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xpZW50
QWRhcHRlcj4gY3JlYXRlKEFzc29jaWF0ZWRVUkxMb2FkZXIqLCBXZWJVUkxMb2FkZXJDbGllbnQq
LCBib29sIC8qZG93bmxvYWRUb0ZpbGUqLyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERh
dGEodW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAv
KnRvdGFsQnl0ZXNUb0JlU2VudCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYgLypuZXdSZXF1ZXN0Ki8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IC8qcmVkaXJlY3RSZXNwb25zZSovKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8qZGF0YUxlbmd0aCovKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypkYXRhTGVuZ3Ro
Ki8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgLypp
ZGVudGlmaWVyKi8sIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgLy8gVGhpcyBtZXRob2Qgc3RvcHMg
bG9hZGluZyBhbmQgcmVsZWFzZXMgdGhlIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhcyBlYXJs
eSBhcyBwb3NzaWJsZS4KKyAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0K
KworcHJpdmF0ZToKKyAgICBDbGllbnRBZGFwdGVyKEFzc29jaWF0ZWRVUkxMb2FkZXIqLCBXZWJV
UkxMb2FkZXJDbGllbnQqLCBib29sIC8qZG93bmxvYWRUb0ZpbGUqLyk7CisKKyAgICBBc3NvY2lh
dGVkVVJMTG9hZGVyKiBtX2xvYWRlcjsKKyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1fY2xpZW50
OworICAgIHVuc2lnbmVkIGxvbmcgbV9kb3dubG9hZExlbmd0aDsKKyAgICBib29sIG1fZG93bmxv
YWRUb0ZpbGU7Cit9OworCitQYXNzT3duUHRyPEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFk
YXB0ZXI+IEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmNyZWF0ZShBc3NvY2lh
dGVkVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50LCBib29sIGRv
d25sb2FkVG9GaWxlKQogeworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xpZW50QWRhcHRlcihs
b2FkZXIsIGNsaWVudCwgZG93bmxvYWRUb0ZpbGUpKTsKIH0KIAotQXNzb2NpYXRlZFVSTExvYWRl
cjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRh
cHRlcjo6Q2xpZW50QWRhcHRlcihBc3NvY2lhdGVkVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExv
YWRlckNsaWVudCogY2xpZW50LCBib29sIGRvd25sb2FkVG9GaWxlKQorICAgIDogbV9sb2FkZXIo
bG9hZGVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9kb3dubG9hZExlbmd0aCgw
KQorICAgICwgbV9kb3dubG9hZFRvRmlsZShkb3dubG9hZFRvRmlsZSkKIHsKKyAgICBBU1NFUlQo
bV9sb2FkZXIpOworICAgIEFTU0VSVChtX2NsaWVudCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwg
V2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlLCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRh
dGEpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOwotCi0gICAg
V2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChy
ZXF1ZXN0Q29weSk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9yZWFsTG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgcmVzcG9uc2UsIGVy
cm9yLCBkYXRhKTsKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWROZXdSZXF1ZXN0
KG5ld1JlcXVlc3QpOworICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHdyYXBwZWRSZWRpcmVj
dFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsU2VuZFJlcXVl
c3QobV9sb2FkZXIsIHdyYXBwZWROZXdSZXF1ZXN0LCB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZSk7
CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KGNvbnN0
IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50KQordm9p
ZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KQogewotICAgIEFTU0VSVCghbV9yZWFsQ2xpZW50KTsKKyAgICBpZiAoIW1fY2xpZW50KQor
ICAgICAgICByZXR1cm47CiAKLSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3Qp
OwotICAgIHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsKKyAgICBtX2NsaWVudC0+ZGlkU2Vu
ZERhdGEobV9sb2FkZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KIAotICAg
IG1fcmVhbENsaWVudCA9IGNsaWVudDsKLSAgICBtX3JlYWxMb2FkZXItPmxvYWRBc3luY2hyb25v
dXNseShyZXF1ZXN0Q29weSwgdGhpcyk7Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVu
dEFkYXB0ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVzcG9uc2UocmVz
cG9uc2UpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9sb2FkZXIsIHdyYXBw
ZWRSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKCkKK3Zv
aWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewotICAgIG1fcmVhbExvYWRlci0+
Y2FuY2VsKCk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
bGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fbG9hZGVyLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Cisg
ICAgbV9kb3dubG9hZExlbmd0aCArPSBsZW5ndGhSZWNlaXZlZDsKIH0KIAotdm9pZCBBc3NvY2lh
dGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKK3ZvaWQg
QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFk
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxM
b2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CisgICAgaWYgKCFtX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogfQogCi12b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OnByZXBhcmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit2b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdCogYXBwbGljYXRpb25DYWNoZUhvc3QgPSBtX2ZyYW1lSW1wbC0+ZGF0
YVNvdXJjZSgpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwotICAgIGlmIChhcHBsaWNhdGlvbkNh
Y2hlSG9zdCkKLSAgICAgICAgYXBwbGljYXRpb25DYWNoZUhvc3QtPndpbGxTdGFydFN1YlJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICBtX2ZyYW1lSW1wbC0+ZGlzcGF0Y2hXaWxsU2VuZFJl
cXVlc3QocmVxdWVzdCk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fZG93bmxvYWRUb0ZpbGUpIHsKKyAgICAgICAgaW50IGRvd25sb2FkTGVuZ3RoID0g
bV9kb3dubG9hZExlbmd0aCA8PSBJTlRfTUFYID8gbV9kb3dubG9hZExlbmd0aCA6IElOVF9NQVg7
CisgICAgICAgIG1fY2xpZW50LT5kaWREb3dubG9hZERhdGEobV9sb2FkZXIsIGRvd25sb2FkTGVu
Z3RoKTsKKworICAgICAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fbG9hZGVyLCBmaW5pc2hUaW1l
KTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoV2ViVVJM
TG9hZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0
ZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9yZWFsQ2xp
ZW50LT53aWxsU2VuZFJlcXVlc3QodGhpcywgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViVVJMRXJyb3Ig
d2ViRXJyb3IoZXJyb3IpOworICAgIG1fY2xpZW50LT5kaWRGYWlsKG1fbG9hZGVyLCB3ZWJFcnJv
cik7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkU2VuZERhdGEoV2ViVVJMTG9h
ZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCkKKyAgICA6IG1fZnJhbWVJbXBs
KGZyYW1lSW1wbCkKKyAgICAsIG1fY2xpZW50KDApCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRT
ZW5kRGF0YSh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgQVNTRVJU
KG1fZnJhbWVJbXBsKTsKKworICAgIG1fb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAg
ICBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CisgICAgbV9vcHRpb25zLmZvcmNl
UHJlZmxpZ2h0ID0gZmFsc2U7CisgICAgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czsgLy8gVE9ETyhiYnVkZ2UpIERlZmF1bHQgc2hv
dWxkIGJlIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCBidXQgdGhpcyB3b3VsZCBicmVhayBzb21l
IHRlc3RzLgogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UpCitBc3NvY2lh
dGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBs
PiBmcmFtZUltcGwsIGNvbnN0IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQor
ICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisg
ICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KHRoaXMsIHJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOwogfQogCi12b2lkIEFz
c29jaWF0ZWRVUkxMb2FkZXI6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0
YUxlbmd0aCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkKIHsK
LSAgICBtX3JlYWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0aGlzLCBkYXRhTGVuZ3RoKTsKKyAg
ICBpZiAobV9jbGllbnRBZGFwdGVyKQorICAgICAgICBtX2NsaWVudEFkYXB0ZXItPmNsZWFyQ2xp
ZW50KCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoV2Vi
VVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCisjZGVmaW5lIENP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0X25hbWUsIHdlYmNvcmVfbmFtZSkgXAor
ICAgIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV2ViS2l0Ojp3ZWJraXRfbmFtZSkg
PT0gc3RhdGljX2Nhc3Q8aW50PihXZWJDb3JlOjp3ZWJjb3JlX25hbWUpLCBtaXNtYXRjaGluZ19l
bnVtcykKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEZW55Q3Jvc3NPcmlnaW5SZXF1
ZXN0cywgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShVc2VBY2Nlc3NDb250cm9sLCBVc2VBY2Nlc3NDb250cm9sKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzLCBBbGxvd0Nyb3NzT3JpZ2lu
UmVxdWVzdHMpOworCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5
KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3BvbnNlJiByZXNwb25zZSwg
V2ViVVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQogewotICAgIG1fcmVhbENsaWVudC0+
ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKDApOyAv
LyBTeW5jaHJvbm91cyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiB9CiAKLXZvaWQgQXNzb2Np
YXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVy
Ojpsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJM
TG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRSZWNlaXZlQ2Fj
aGVkTWV0YWRhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKCFtX2NsaWVu
dCk7CisKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBBU1NFUlQobV9jbGllbnQpOworCisg
ICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2Fk
Q2FsbGJhY2tzID0gdHJ1ZTsgLy8gQWx3YXlzIHNlbmQgY2FsbGJhY2tzLgorICAgIG9wdGlvbnMu
c25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudDsKKyAgICBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFsczsKKyAgICBvcHRpb25zLmZv
cmNlUHJlZmxpZ2h0ID0gbV9vcHRpb25zLmZvcmNlUHJlZmxpZ2h0OworICAgIG9wdGlvbnMuY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5PihtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KTsKKworICAg
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZVJlcXVlc3QgPSByZXF1ZXN0LnRvUmVzb3Vy
Y2VSZXF1ZXN0KCk7CisgICAgRG9jdW1lbnQqIHdlYmNvcmVEb2N1bWVudCA9IG1fZnJhbWVJbXBs
LT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIG1fY2xpZW50QWRhcHRlciA9IENsaWVudEFkYXB0
ZXI6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudCwgcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsKKwor
ICAgIG1fbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUod2ViY29yZURv
Y3VtZW50LCBtX2NsaWVudEFkYXB0ZXIuZ2V0KCksIHdlYmNvcmVSZXF1ZXN0LCBvcHRpb25zKTsK
IH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExv
YWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpjYW5j
ZWwoKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzLCBmaW5pc2hU
aW1lKTsKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9jbGllbnRBZGFwdGVyLT5jbGVh
ckNsaWVudCgpOworICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgfQogfQogCi12b2lk
IEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJM
RXJyb3ImIGVycm9yKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZhaWwodGhpcywg
ZXJyb3IpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xv
YWRpbmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAko
cmV2aXNpb24gODA3MjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVk
VVJMTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMyLDIwICszMiwzNiBAQAogI2RlZmlu
ZSBBc3NvY2lhdGVkVVJMTG9hZGVyX2gKIAogI2luY2x1ZGUgIldlYlVSTExvYWRlci5oIgotI2lu
Y2x1ZGUgIldlYlVSTExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK25h
bWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOyB9CisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKK2VudW0gQ3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VB
Y2Nlc3NDb250cm9sLAorICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0
IEFzc29jaWF0ZWRVUkxMb2FkZXJPcHRpb25zIHsKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyT3B0
aW9ucygpIDogc25pZmZDb250ZW50KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFscyhmYWxzZSksIGZv
cmNlUHJlZmxpZ2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9zc09y
aWdpblJlcXVlc3RzKSB7IH0KKyAgICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFsbG93
Q3JlZGVudGlhbHM7IC8vIFdoZXRoZXIgdG8gc2VuZCBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29r
aWVzIHdpdGggdGhlIHJlcXVlc3QuCisgICAgYm9vbCBmb3JjZVByZWZsaWdodDsgLy8gSWYgQWNj
ZXNzQ29udHJvbCBpcyB1c2VkLCB3aGV0aGVyIHRvIGZvcmNlIGEgcHJlZmxpZ2h0LgorICAgIENy
b3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7Cit9OworCiAv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IFdlYkZyYW1lOjpjcmVhdGVBc3NvY2lh
dGVkVVJMTG9hZGVyLgotLy8gRklYTUU6IEltcGxlbWVudCBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlci4KLWNsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2Vi
VVJMTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJVUkxMb2Fk
ZXJDbGllbnQgeworY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2Fk
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc29jaWF0ZWRVUkxMb2FkZXIpOwogcHVi
bGljOgogICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+KTsK
KyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiwgY29uc3Qg
QXNzb2NpYXRlZFVSTExvYWRlck9wdGlvbnMmKTsKICAgICB+QXNzb2NpYXRlZFVSTExvYWRlcigp
OwogCiAgICAgLy8gV2ViVVJMTG9hZGVyIG1ldGhvZHM6CkBAIC01NCwyMiArNzAsMTUgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
ZXJzTG9hZGluZyhib29sKTsKIAotICAgIC8vIFdlYlVSTExvYWRlckNsaWVudCBtZXRob2RzOgot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViVVJMTG9hZGVyKiwgV2ViVVJMUmVx
dWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNv
bnN0IFdlYlVSTFJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShX
ZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlcios
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImKTsKLQog
cHJpdmF0ZToKLSAgICB2b2lkIHByZXBhcmVSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmKTsKKworICAg
IGNsYXNzIENsaWVudEFkYXB0ZXI7CiAKICAgICBSZWZQdHI8V2ViRnJhbWVJbXBsPiBtX2ZyYW1l
SW1wbDsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBtX3JlYWxMb2FkZXI7Ci0gICAgV2ViVVJM
TG9hZGVyQ2xpZW50KiBtX3JlYWxDbGllbnQ7CisgICAgQXNzb2NpYXRlZFVSTExvYWRlck9wdGlv
bnMgbV9vcHRpb25zOworICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAgT3du
UHRyPENsaWVudEFkYXB0ZXI+IG1fY2xpZW50QWRhcHRlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85523</attachid>
            <date>2011-03-11 13:45:33 -0800</date>
            <delta_ts>2011-03-11 14:36:34 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>15725</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDg2NikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDMtMTEgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBObyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkLgorCisgICAgICAgICogcHVi
bGljL1dlYlVSTExvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxMb2FkZXJPcHRpb25z
OjpXZWJVUkxMb2FkZXJPcHRpb25zKToKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0
ZXI6OmNsZWFyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcik6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFNlbmRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpB
c3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVy
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRl
cjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRV
UkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lh
dGVkVVJMTG9hZGVyOjp+QXNzb2NpYXRlZFVSTExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6
QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktp
dDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgICogc3JjL0Fzc29jaWF0
ZWRVUkxMb2FkZXIuaDoKKwogMjAxMS0wMy0xMSAgQXZpIERyaXNzbWFuICA8YXZpQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCShyZXZpc2lvbiA4MDg2NikKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSwyMSBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0OwogY2xhc3MgV2ViVVJM
UmVzcG9uc2U7CiBzdHJ1Y3QgV2ViVVJMRXJyb3I7CiAKK2VudW0gV2ViVVJMTG9hZGVyQ3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBV
c2VBY2Nlc3NDb250cm9sLAorICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3Ry
dWN0IFdlYlVSTExvYWRlck9wdGlvbnMgeworICAgIFdlYlVSTExvYWRlck9wdGlvbnMoKSA6IHNu
aWZmQ29udGVudChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMoZmFsc2UpLCBmb3JjZVByZWZsaWdo
dChmYWxzZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0
cykge30KKworICAgIGJvb2wgc25pZmZDb250ZW50OyAvLyBXaGV0aGVyIHRvIHNuaWZmIGNvbnRl
bnQuCisgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAvLyBXaGV0aGVyIHRvIHNlbmQgSFRUUCBj
cmVkZW50aWFscyBhbmQgY29va2llcyB3aXRoIHRoZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQ
cmVmbGlnaHQ7IC8vIElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBh
IHByZWZsaWdodC4KKyAgICBXZWJVUkxMb2FkZXJDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5OworfTsKKwogY2xhc3MgV2ViVVJMTG9hZGVyIHsKIHB1Ymxp
YzoKICAgICAvLyBUaGUgV2ViVVJMTG9hZGVyIG1heSBiZSBkZWxldGVkIGluIGEgY2FsbCB0byBp
dHMgY2xpZW50LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVS
TExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
b2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9uIDgwODY2KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAg
LTMxLDEwMyArMzEsMjAzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXNzb2Np
YXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgi
CisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNs
dWRlICJXZWJEYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVVJM
RXJyb3IuaCIKKyNpbmNsdWRlICJXZWJVUkxMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJV
UkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgIldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1Bc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVy
KFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwpCi0gICAgOiBtX2ZyYW1lSW1wbChm
cmFtZUltcGwpLAotICAgICAgbV9yZWFsTG9hZGVyKHdlYktpdENsaWVudCgpLT5jcmVhdGVVUkxM
b2FkZXIoKSksCi0gICAgICBtX3JlYWxDbGllbnQoMCkKKy8vIFRoaXMgY2xhc3MgYnJpZGdlcyB0
aGUgaW50ZXJmYWNlIGRpZmZlcmVuY2VzIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0IGxvYWRl
ciBjbGllbnRzLgorLy8gSXQgZm9yd2FyZHMgaXRzIFRocmVhZGFibGVMb2FkZXJDbGllbnQgbm90
aWZpY2F0aW9ucyB0byBhIFdlYlVSTExvYWRlckNsaWVudC4KK2NsYXNzIEFzc29jaWF0ZWRVUkxM
b2FkZXI6OkNsaWVudEFkYXB0ZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xpZW50QWRhcHRlcj4gY3JlYXRlKEFzc29j
aWF0ZWRVUkxMb2FkZXIqLCBXZWJVUkxMb2FkZXJDbGllbnQqLCBib29sIC8qZG93bmxvYWRUb0Zp
bGUqLyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25n
IC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCov
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgLypu
ZXdSZXF1ZXN0Ki8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSov
KTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwg
aW50IC8qZGF0YUxlbmd0aCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypkYXRhTGVuZ3RoKi8pOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGRvdWJsZSAv
KmZpbmlzaFRpbWUqLyk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOworCisgICAgLy8gVGhpcyBtZXRob2Qgc3RvcHMgbG9hZGluZyBhbmQgcmVsZWFzZXMg
dGhlIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKyAgICB2
b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KKworcHJpdmF0ZToKKyAgICBDbGll
bnRBZGFwdGVyKEFzc29jaWF0ZWRVUkxMb2FkZXIqLCBXZWJVUkxMb2FkZXJDbGllbnQqLCBib29s
IC8qZG93bmxvYWRUb0ZpbGUqLyk7CisKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKiBtX2xvYWRl
cjsKKyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIHVuc2lnbmVkIGxvbmcg
bV9kb3dubG9hZExlbmd0aDsKKyAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7Cit9OworCitQYXNz
T3duUHRyPEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI+IEFzc29jaWF0ZWRVUkxM
b2FkZXI6OkNsaWVudEFkYXB0ZXI6OmNyZWF0ZShBc3NvY2lhdGVkVVJMTG9hZGVyKiBsb2FkZXIs
IFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50LCBib29sIGRvd25sb2FkVG9GaWxlKQogeworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ2xpZW50QWRhcHRlcihsb2FkZXIsIGNsaWVudCwgZG93bmxv
YWRUb0ZpbGUpKTsKIH0KIAotQXNzb2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2Fk
ZXIoKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcihB
c3NvY2lhdGVkVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50LCBi
b29sIGRvd25sb2FkVG9GaWxlKQorICAgIDogbV9sb2FkZXIobG9hZGVyKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9kb3dubG9hZExlbmd0aCgwKQorICAgICwgbV9kb3dubG9hZFRv
RmlsZShkb3dubG9hZFRvRmlsZSkKIHsKKyAgICBBU1NFUlQobV9sb2FkZXIpOworICAgIEFTU0VS
VChtX2NsaWVudCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9u
b3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMUmVzcG9uc2UmIHJlc3Bv
bnNlLCBXZWJVUkxFcnJvciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCit2b2lkIEFzc29jaWF0ZWRV
UkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7
Ci0gICAgQVNTRVJUKCFtX3JlYWxDbGllbnQpOwotCi0gICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0
Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVzdChyZXF1ZXN0Q29weSk7CisgICAgaWYg
KCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9yZWFsTG9hZGVyLT5sb2FkU3lu
Y2hyb25vdXNseShyZXF1ZXN0Q29weSwgcmVzcG9uc2UsIGVycm9yLCBkYXRhKTsKKyAgICBXcmFw
cGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWROZXdSZXF1ZXN0KG5ld1JlcXVlc3QpOworICAgIFdy
YXBwZWRSZXNvdXJjZVJlc3BvbnNlIHdyYXBwZWRSZWRpcmVjdFJlc3BvbnNlKHJlZGlyZWN0UmVz
cG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsU2VuZFJlcXVlc3QobV9sb2FkZXIsIHdyYXBwZWRO
ZXdSZXF1ZXN0LCB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRl
ZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVl
c3QsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVy
OjpDbGllbnRBZGFwdGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIEFTU0VSVCgh
bV9yZWFsQ2xpZW50KTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CiAKLSAg
ICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAgIHByZXBhcmVSZXF1ZXN0
KHJlcXVlc3RDb3B5KTsKKyAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEobV9sb2FkZXIsIGJ5dGVz
U2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KIAotICAgIG1fcmVhbENsaWVudCA9IGNsaWVu
dDsKLSAgICBtX3JlYWxMb2FkZXItPmxvYWRBc3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgdGhp
cyk7Cit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBXcmFwcGVk
UmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9sb2FkZXIsIHdyYXBwZWRSZXNwb25zZSk7CiB9CiAKLXZv
aWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aFJlY2VpdmVkKQogewotICAgIG1fcmVhbExvYWRlci0+Y2FuY2VsKCk7CisgICAgaWYgKCFt
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KG1fbG9hZGVyLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7CisgICAgbV9kb3dubG9hZExlbmd0aCAr
PSBsZW5ndGhSZWNlaXZlZDsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZGVmZXJzTG9hZGluZyk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShtX2xvYWRlciwgZGF0YSwg
bGVuZ3RoUmVjZWl2ZWQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnByZXBhcmVS
ZXF1ZXN0KFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OkNsaWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogYXBw
bGljYXRpb25DYWNoZUhvc3QgPSBtX2ZyYW1lSW1wbC0+ZGF0YVNvdXJjZSgpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpOwotICAgIGlmIChhcHBsaWNhdGlvbkNhY2hlSG9zdCkKLSAgICAgICAgYXBw
bGljYXRpb25DYWNoZUhvc3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsK
LSAgICBtX2ZyYW1lSW1wbC0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QocmVxdWVzdCk7CisgICAg
aWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZG93bmxvYWRUb0Zp
bGUpIHsKKyAgICAgICAgaW50IGRvd25sb2FkTGVuZ3RoID0gbV9kb3dubG9hZExlbmd0aCA8PSBJ
TlRfTUFYID8gbV9kb3dubG9hZExlbmd0aCA6IElOVF9NQVg7CisgICAgICAgIG1fY2xpZW50LT5k
aWREb3dubG9hZERhdGEobV9sb2FkZXIsIGRvd25sb2FkTGVuZ3RoKTsKKyAgICAgICAgLy8gV2hp
bGUgdGhlIGNsaWVudCBjb3VsZCBoYXZlIGNhbmNlbGxlZCwgY29udGludWUsIHNpbmNlIHRoZSBs
b2FkIGZpbmlzaGVkLiAKKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyht
X2xvYWRlciwgZmluaXNoVGltZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6d2ls
bFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNv
bnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIG1fcmVhbENsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYlVSTEVycm9yIHdlYkVycm9yKGVycm9yKTsKKyAgICBtX2NsaWVudC0+ZGlkRmFp
bChtX2xvYWRlciwgd2ViRXJyb3IpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRp
ZFNlbmREYXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVu
c2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitBc3NvY2lhdGVkVVJMTG9hZGVy
OjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwp
CisgICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpCisgICAgLCBtX2NsaWVudCgwKQogewotICAg
IG1fcmVhbENsaWVudC0+ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9C
ZVNlbnQpOworICAgIEFTU0VSVChtX2ZyYW1lSW1wbCk7CisKKyAgICBtX29wdGlvbnMuc25pZmZD
b250ZW50ID0gZmFsc2U7CisgICAgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOwor
ICAgIG1fb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG1fb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7IC8vIFRPRE8o
YmJ1ZGdlKSBEZWZhdWx0IHNob3VsZCBiZSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgYnV0IHRo
aXMgd291bGQgYnJlYWsgc29tZSB0ZXN0cy4KIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
IHJlc3BvbnNlKQorQXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNz
UmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBsLCBjb25zdCBXZWJVUkxMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9vcHRpb25z
KG9wdGlvbnMpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOwog
fQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2Fk
ZXIqLCBpbnQgZGF0YUxlbmd0aCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJM
TG9hZGVyKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0aGlzLCBkYXRh
TGVuZ3RoKTsKKyAgICBpZiAobV9jbGllbnRBZGFwdGVyKQorICAgICAgICBtX2NsaWVudEFkYXB0
ZXItPmNsZWFyQ2xpZW50KCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVj
ZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgp
CisjZGVmaW5lIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0X25hbWUsIHdlYmNv
cmVfbmFtZSkgXAorICAgIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV2ViS2l0Ojp3
ZWJraXRfbmFtZSkgPT0gc3RhdGljX2Nhc3Q8aW50PihXZWJDb3JlOjp3ZWJjb3JlX25hbWUpLCBt
aXNtYXRjaGluZ19lbnVtcykKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEZW55Q3Jv
c3NPcmlnaW5SZXF1ZXN0cywgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShVc2VBY2Nlc3NDb250cm9sLCBVc2VBY2Nlc3NDb250cm9sKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzLCBBbGxv
d0Nyb3NzT3JpZ2luUmVxdWVzdHMpOworCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRT
eW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3BvbnNl
JiByZXNwb25zZSwgV2ViVVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQogewotICAgIG1f
cmVhbENsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAg
QVNTRVJUKDApOyAvLyBTeW5jaHJvbm91cyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiB9CiAK
LXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVS
TExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3NvY2lh
dGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVx
dWVzdCwgV2ViVVJMTG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5k
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNT
RVJUKCFtX2NsaWVudCk7CisKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBBU1NFUlQobV9j
bGllbnQpOworCisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRp
b25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsgLy8gQWx3YXlzIHNlbmQgY2FsbGJhY2tzLgor
ICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudDsKKyAgICBv
cHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFsczsKKyAg
ICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0ID0gbV9vcHRpb25zLmZvcmNlUHJlZmxpZ2h0OworICAg
IG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Q3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5PihtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9s
aWN5KTsKKworICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZVJlcXVlc3QgPSByZXF1
ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgRG9jdW1lbnQqIHdlYmNvcmVEb2N1bWVudCA9
IG1fZnJhbWVJbXBsLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIG1fY2xpZW50QWRhcHRlciA9
IENsaWVudEFkYXB0ZXI6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudCwgcmVxdWVzdC5kb3dubG9hZFRv
RmlsZSgpKTsKKworICAgIG1fbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUod2ViY29yZURvY3VtZW50LCBtX2NsaWVudEFkYXB0ZXIuZ2V0KCksIHdlYmNvcmVSZXF1ZXN0
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKFdlYlVSTExvYWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpjYW5jZWwoKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0
aGlzLCBmaW5pc2hUaW1lKTsKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9jbGllbnRB
ZGFwdGVyLT5jbGVhckNsaWVudCgpOworICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAg
fQogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwg
Y29uc3QgV2ViVVJMRXJyb3ImIGVycm9yKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRp
ZEZhaWwodGhpcywgZXJyb3IpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRV
UkxMb2FkZXIuaAkocmV2aXNpb24gODA4NjYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMyLDIwICszMiwy
MiBAQAogI2RlZmluZSBBc3NvY2lhdGVkVVJMTG9hZGVyX2gKIAogI2luY2x1ZGUgIldlYlVSTExv
YWRlci5oIgotI2luY2x1ZGUgIldlYlVSTExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOyB9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKIC8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQgV2ViRnJhbWU6OmNyZWF0ZUFzc29jaWF0
ZWRVUkxMb2FkZXIuCi0vLyBGSVhNRTogSW1wbGVtZW50IGluIHRlcm1zIG9mIFdlYkNvcmU6OlN1
YnJlc291cmNlTG9hZGVyLgotY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJV
UkxMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYlVSTExvYWRl
ckNsaWVudCB7CitjbGFzcyBBc3NvY2lhdGVkVVJMTG9hZGVyIDogcHVibGljIFdlYlVSTExvYWRl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXNzb2NpYXRlZFVSTExvYWRlcik7CiBwdWJs
aWM6CiAgICAgQXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4pOwor
ICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+LCBjb25zdCBX
ZWJVUkxMb2FkZXJPcHRpb25zJik7CiAgICAgfkFzc29jaWF0ZWRVUkxMb2FkZXIoKTsKIAogICAg
IC8vIFdlYlVSTExvYWRlciBtZXRob2RzOgpAQCAtNTQsMjIgKzU2LDE1IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRp
bmcoYm9vbCk7CiAKLSAgICAvLyBXZWJVUkxMb2FkZXJDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoV2ViVVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJV
UkxSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9h
ZGVyKiwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShX
ZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9yJik7Ci0KIHByaXZhdGU6
Ci0gICAgdm9pZCBwcmVwYXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0Jik7CisKKyAgICBjbGFzcyBD
bGllbnRBZGFwdGVyOwogCiAgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gbV9mcmFtZUltcGw7Ci0g
ICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbV9yZWFsTG9hZGVyOwotICAgIFdlYlVSTExvYWRlckNs
aWVudCogbV9yZWFsQ2xpZW50OworICAgIFdlYlVSTExvYWRlck9wdGlvbnMgbV9vcHRpb25zOwor
ICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAgT3duUHRyPENsaWVudEFkYXB0
ZXI+IG1fY2xpZW50QWRhcHRlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBtX2xvYWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85537</attachid>
            <date>2011-03-11 14:36:34 -0800</date>
            <delta_ts>2011-03-16 17:01:32 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>15995</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDg3NykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDMtMTEgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBObyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkLgorCisgICAgICAgICogcHVi
bGljL1dlYlVSTExvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxMb2FkZXJPcHRpb25z
OjpXZWJVUkxMb2FkZXJPcHRpb25zKToKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0
ZXI6OmNsZWFyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcik6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFNlbmRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpB
c3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVy
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRl
cjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRV
UkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lh
dGVkVVJMTG9hZGVyOjp+QXNzb2NpYXRlZFVSTExvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6
QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYktp
dDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2Np
YXRlZFVSTExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgICogc3JjL0Fzc29jaWF0
ZWRVUkxMb2FkZXIuaDoKKwogMjAxMS0wMy0xMSAgQXZpIERyaXNzbWFuICA8YXZpQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCShyZXZpc2lvbiA4MDg3NykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC00MSw2ICs0MSwyMSBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0OwogY2xhc3MgV2Vi
VVJMUmVzcG9uc2U7CiBzdHJ1Y3QgV2ViVVJMRXJyb3I7CiAKK2VudW0gV2ViQ3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nl
c3NDb250cm9sLAorICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IFdl
YlVSTExvYWRlck9wdGlvbnMgeworICAgIFdlYlVSTExvYWRlck9wdGlvbnMoKSA6IHNuaWZmQ29u
dGVudChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMoZmFsc2UpLCBmb3JjZVByZWZsaWdodChmYWxz
ZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cykge30K
KworICAgIGJvb2wgc25pZmZDb250ZW50OyAvLyBXaGV0aGVyIHRvIHNuaWZmIGNvbnRlbnQuCisg
ICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAvLyBXaGV0aGVyIHRvIHNlbmQgSFRUUCBjcmVkZW50
aWFscyBhbmQgY29va2llcyB3aXRoIHRoZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQcmVmbGln
aHQ7IC8vIElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZs
aWdodC4KKyAgICBXZWJDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5OworfTsKKwogY2xhc3MgV2ViVVJMTG9hZGVyIHsKIHB1YmxpYzoKICAgICAvLyBUaGUg
V2ViVVJMTG9hZGVyIG1heSBiZSBkZWxldGVkIGluIGEgY2FsbCB0byBpdHMgY2xpZW50LgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHAJKHJldmlzaW9uIDgwODc3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
b2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDEwMyArMzEsMjAz
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5o
IgogCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJXZWJEYXRhU291
cmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAj
aW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVVJMRXJyb3IuaCIKKyNpbmNs
dWRlICJXZWJVUkxMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldyYXBwZWRSZXNv
dXJjZVJlc3BvbnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1Bc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2Vi
RnJhbWVJbXBsPiBmcmFtZUltcGwpCi0gICAgOiBtX2ZyYW1lSW1wbChmcmFtZUltcGwpLAotICAg
ICAgbV9yZWFsTG9hZGVyKHdlYktpdENsaWVudCgpLT5jcmVhdGVVUkxMb2FkZXIoKSksCi0gICAg
ICBtX3JlYWxDbGllbnQoMCkKKy8vIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgaW50ZXJmYWNlIGRp
ZmZlcmVuY2VzIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0IGxvYWRlciBjbGllbnRzLgorLy8g
SXQgZm9yd2FyZHMgaXRzIFRocmVhZGFibGVMb2FkZXJDbGllbnQgbm90aWZpY2F0aW9ucyB0byBh
IFdlYlVSTExvYWRlckNsaWVudC4KK2NsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFk
YXB0ZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q2xpZW50QWRhcHRlcj4gY3JlYXRlKEFzc29jaWF0ZWRVUkxMb2FkZXIq
LCBXZWJVUkxMb2FkZXJDbGllbnQqLCBib29sIC8qZG93bmxvYWRUb0ZpbGUqLyk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8s
IHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgLypuZXdSZXF1ZXN0Ki8sIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKTsKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8qZGF0YUxlbmd0
aCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNo
YXIqLCBpbnQgLypkYXRhTGVuZ3RoKi8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7
CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAg
Ly8gVGhpcyBtZXRob2Qgc3RvcHMgbG9hZGluZyBhbmQgcmVsZWFzZXMgdGhlIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlciBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKyAgICB2b2lkIGNsZWFyQ2xpZW50
KCkgeyBtX2NsaWVudCA9IDA7IH0KKworcHJpdmF0ZToKKyAgICBDbGllbnRBZGFwdGVyKEFzc29j
aWF0ZWRVUkxMb2FkZXIqLCBXZWJVUkxMb2FkZXJDbGllbnQqLCBib29sIC8qZG93bmxvYWRUb0Zp
bGUqLyk7CisKKyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKiBtX2xvYWRlcjsKKyAgICBXZWJVUkxM
b2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIHVuc2lnbmVkIGxvbmcgbV9kb3dubG9hZExlbmd0
aDsKKyAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7Cit9OworCitQYXNzT3duUHRyPEFzc29jaWF0
ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI+IEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFk
YXB0ZXI6OmNyZWF0ZShBc3NvY2lhdGVkVVJMTG9hZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNs
aWVudCogY2xpZW50LCBib29sIGRvd25sb2FkVG9GaWxlKQogeworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ2xpZW50QWRhcHRlcihsb2FkZXIsIGNsaWVudCwgZG93bmxvYWRUb0ZpbGUpKTsKIH0K
IAotQXNzb2NpYXRlZFVSTExvYWRlcjo6fkFzc29jaWF0ZWRVUkxMb2FkZXIoKQorQXNzb2NpYXRl
ZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6Q2xpZW50QWRhcHRlcihBc3NvY2lhdGVkVVJMTG9h
ZGVyKiBsb2FkZXIsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50LCBib29sIGRvd25sb2FkVG9G
aWxlKQorICAgIDogbV9sb2FkZXIobG9hZGVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9kb3dubG9hZExlbmd0aCgwKQorICAgICwgbV9kb3dubG9hZFRvRmlsZShkb3dubG9hZFRv
RmlsZSkKIHsKKyAgICBBU1NFUlQobV9sb2FkZXIpOworICAgIEFTU0VSVChtX2NsaWVudCk7CiB9
CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoY29uc3QgV2Vi
VVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlLCBXZWJVUkxFcnJv
ciYgZXJyb3IsIFdlYkRhdGEmIGRhdGEpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVu
dEFkYXB0ZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKCFt
X3JlYWxDbGllbnQpOwotCi0gICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsK
LSAgICBwcmVwYXJlUmVxdWVzdChyZXF1ZXN0Q29weSk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9yZWFsTG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1
ZXN0Q29weSwgcmVzcG9uc2UsIGVycm9yLCBkYXRhKTsKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXF1
ZXN0IHdyYXBwZWROZXdSZXF1ZXN0KG5ld1JlcXVlc3QpOworICAgIFdyYXBwZWRSZXNvdXJjZVJl
c3BvbnNlIHdyYXBwZWRSZWRpcmVjdFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgIG1f
Y2xpZW50LT53aWxsU2VuZFJlcXVlc3QobV9sb2FkZXIsIHdyYXBwZWROZXdSZXF1ZXN0LCB3cmFw
cGVkUmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6bG9h
ZEFzeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTExvYWRl
ckNsaWVudCogY2xpZW50KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVy
OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIEFTU0VSVCghbV9yZWFsQ2xpZW50KTsK
KyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBXZWJVUkxSZXF1ZXN0
IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAgIHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsK
KyAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEobV9sb2FkZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRl
c1RvQmVTZW50KTsKK30KIAotICAgIG1fcmVhbENsaWVudCA9IGNsaWVudDsKLSAgICBtX3JlYWxM
b2FkZXItPmxvYWRBc3luY2hyb25vdXNseShyZXF1ZXN0Q29weSwgdGhpcyk7Cit2b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25z
ZSB3cmFwcGVkUmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVz
cG9uc2UobV9sb2FkZXIsIHdyYXBwZWRSZXNwb25zZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Y2FuY2VsKCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRl
cjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQog
ewotICAgIG1fcmVhbExvYWRlci0+Y2FuY2VsKCk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fbG9hZGVyLCBkYXRh
LCBsZW5ndGhSZWNlaXZlZCk7CisgICAgbV9kb3dubG9hZExlbmd0aCArPSBsZW5ndGhSZWNlaXZl
ZDsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzTG9hZGluZykKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6
ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNl
aXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGlu
Zyk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQp
OwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OnByZXBhcmVSZXF1ZXN0KFdlYlVSTFJl
cXVlc3QmIHJlcXVlc3QpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6
OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNo
VGltZSkKIHsKLSAgICBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogYXBwbGljYXRpb25DYWNoZUhv
c3QgPSBtX2ZyYW1lSW1wbC0+ZGF0YVNvdXJjZSgpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwot
ICAgIGlmIChhcHBsaWNhdGlvbkNhY2hlSG9zdCkKLSAgICAgICAgYXBwbGljYXRpb25DYWNoZUhv
c3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICBtX2ZyYW1lSW1w
bC0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QocmVxdWVzdCk7CisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZG93bmxvYWRUb0ZpbGUpIHsKKyAgICAgICAg
aW50IGRvd25sb2FkTGVuZ3RoID0gbV9kb3dubG9hZExlbmd0aCA8PSBJTlRfTUFYID8gbV9kb3du
bG9hZExlbmd0aCA6IElOVF9NQVg7CisgICAgICAgIG1fY2xpZW50LT5kaWREb3dubG9hZERhdGEo
bV9sb2FkZXIsIGRvd25sb2FkTGVuZ3RoKTsKKyAgICAgICAgLy8gV2hpbGUgdGhlIGNsaWVudCBj
b3VsZCBoYXZlIGNhbmNlbGxlZCwgY29udGludWUsIHNpbmNlIHRoZSBsb2FkIGZpbmlzaGVkLiAK
KyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX2xvYWRlciwgZmluaXNo
VGltZSk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFdl
YlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdlYlVSTFJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRB
ZGFwdGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG1fcmVh
bENsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UpOworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlVSTEVy
cm9yIHdlYkVycm9yKGVycm9yKTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbChtX2xvYWRlciwgd2Vi
RXJyb3IpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFNlbmREYXRhKFdlYlVS
TExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjpBc3NvY2lhdGVkVVJM
TG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBmcmFtZUltcGwpCisgICAgOiBtX2ZyYW1l
SW1wbChmcmFtZUltcGwpCisgICAgLCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+
ZGlkU2VuZERhdGEodGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgIEFT
U0VSVChtX2ZyYW1lSW1wbCk7CisKKyAgICBtX29wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7
CisgICAgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOworICAgIG1fb3B0aW9ucy5m
b3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQ
b2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7IC8vIFRPRE8oYmJ1ZGdlKSBEZWZhdWx0
IHNob3VsZCBiZSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgYnV0IHRoaXMgd291bGQgYnJlYWsg
c29tZSB0ZXN0cy4KIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlKQorQXNz
b2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1l
SW1wbD4gZnJhbWVJbXBsLCBjb25zdCBXZWJVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAg
IDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisgICAg
LCBtX2NsaWVudCgwKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRo
aXMsIHJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOwogfQogCi12b2lkIEFzc29j
aWF0ZWRVUkxMb2FkZXI6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxl
bmd0aCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9hZGVyKCkKIHsKLSAg
ICBtX3JlYWxDbGllbnQtPmRpZERvd25sb2FkRGF0YSh0aGlzLCBkYXRhTGVuZ3RoKTsKKyAgICBp
ZiAobV9jbGllbnRBZGFwdGVyKQorICAgICAgICBtX2NsaWVudEFkYXB0ZXItPmNsZWFyQ2xpZW50
KCk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoV2ViVVJM
TG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCisjZGVmaW5lIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0X25hbWUsIHdlYmNvcmVfbmFtZSkgXAorICAg
IENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oV2ViS2l0Ojp3ZWJraXRfbmFtZSkgPT0g
c3RhdGljX2Nhc3Q8aW50PihXZWJDb3JlOjp3ZWJjb3JlX25hbWUpLCBtaXNtYXRjaGluZ19lbnVt
cykKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0
cywgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShVc2VBY2Nlc3NDb250cm9sLCBVc2VBY2Nlc3NDb250cm9sKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzLCBBbGxvd0Nyb3NzT3JpZ2luUmVx
dWVzdHMpOworCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KGNv
bnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3BvbnNlJiByZXNwb25zZSwgV2Vi
VVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQogewotICAgIG1fcmVhbENsaWVudC0+ZGlk
UmVjZWl2ZURhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKDApOyAvLyBT
eW5jaHJvbm91cyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiB9CiAKLXZvaWQgQXNzb2NpYXRl
ZFVSTExvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjps
b2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViVVJMTG9h
ZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEodGhpcywgZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7
CisKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBBU1NFUlQobV9jbGllbnQpOworCisgICAg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2Fs
bGJhY2tzID0gdHJ1ZTsgLy8gQWx3YXlzIHNlbmQgY2FsbGJhY2tzLgorICAgIG9wdGlvbnMuc25p
ZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudDsKKyAgICBvcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFsczsKKyAgICBvcHRpb25zLmZvcmNl
UHJlZmxpZ2h0ID0gbV9vcHRpb25zLmZvcmNlUHJlZmxpZ2h0OworICAgIG9wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q3Jvc3NPcmlnaW5SZXF1
ZXN0UG9saWN5PihtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KTsKKworICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgd2ViY29yZVJlcXVlc3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VS
ZXF1ZXN0KCk7CisgICAgRG9jdW1lbnQqIHdlYmNvcmVEb2N1bWVudCA9IG1fZnJhbWVJbXBsLT5m
cmFtZSgpLT5kb2N1bWVudCgpOworICAgIG1fY2xpZW50QWRhcHRlciA9IENsaWVudEFkYXB0ZXI6
OmNyZWF0ZSh0aGlzLCBtX2NsaWVudCwgcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsKKworICAg
IG1fbG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUod2ViY29yZURvY3Vt
ZW50LCBtX2NsaWVudEFkYXB0ZXIuZ2V0KCksIHdlYmNvcmVSZXF1ZXN0LCBvcHRpb25zKTsKIH0K
IAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExvYWRl
ciosIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpjYW5jZWwo
KQogewotICAgIG1fcmVhbENsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzLCBmaW5pc2hUaW1l
KTsKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9jbGllbnRBZGFwdGVyLT5jbGVhckNs
aWVudCgpOworICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgfQogfQogCi12b2lkIEFz
c29jaWF0ZWRVUkxMb2FkZXI6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJy
b3ImIGVycm9yKQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJv
b2wgZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZhaWwodGhpcywgZXJy
b3IpOworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAkocmV2
aXNpb24gODA4NzcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJM
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMyLDIwICszMiwyMiBAQAogI2RlZmluZSBB
c3NvY2lhdGVkVVJMTG9hZGVyX2gKIAogI2luY2x1ZGUgIldlYlVSTExvYWRlci5oIgotI2luY2x1
ZGUgIldlYlVSTExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOyB9CisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZUltcGw7CiAKIC8vIFRoaXMgY2xhc3MgaXMg
dXNlZCB0byBpbXBsZW1lbnQgV2ViRnJhbWU6OmNyZWF0ZUFzc29jaWF0ZWRVUkxMb2FkZXIuCi0v
LyBGSVhNRTogSW1wbGVtZW50IGluIHRlcm1zIG9mIFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVy
LgotY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2FkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYlVSTExvYWRlckNsaWVudCB7CitjbGFz
cyBBc3NvY2lhdGVkVVJMTG9hZGVyIDogcHVibGljIFdlYlVSTExvYWRlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQXNzb2NpYXRlZFVSTExvYWRlcik7CiBwdWJsaWM6CiAgICAgQXNzb2Np
YXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4pOworICAgIEFzc29jaWF0ZWRV
UkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+LCBjb25zdCBXZWJVUkxMb2FkZXJPcHRp
b25zJik7CiAgICAgfkFzc29jaWF0ZWRVUkxMb2FkZXIoKTsKIAogICAgIC8vIFdlYlVSTExvYWRl
ciBtZXRob2RzOgpAQCAtNTQsMjIgKzU2LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAKLSAg
ICAvLyBXZWJVUkxMb2FkZXJDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFdlYlVSTExvYWRlciosIFdlYlVSTFJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFdlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
U2VuZERhdGEoV2ViVVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5z
aWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50IGRhdGFM
ZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJVUkxMb2FkZXIqLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDYWNoZWRNZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
ZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9h
ZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYlVS
TExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9yJik7Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCBwcmVw
YXJlUmVxdWVzdChXZWJVUkxSZXF1ZXN0Jik7CisKKyAgICBjbGFzcyBDbGllbnRBZGFwdGVyOwog
CiAgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gbV9mcmFtZUltcGw7Ci0gICAgT3duUHRyPFdlYlVS
TExvYWRlcj4gbV9yZWFsTG9hZGVyOwotICAgIFdlYlVSTExvYWRlckNsaWVudCogbV9yZWFsQ2xp
ZW50OworICAgIFdlYlVSTExvYWRlck9wdGlvbnMgbV9vcHRpb25zOworICAgIFdlYlVSTExvYWRl
ckNsaWVudCogbV9jbGllbnQ7CisgICAgT3duUHRyPENsaWVudEFkYXB0ZXI+IG1fY2xpZW50QWRh
cHRlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBtX2xv
YWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86002</attachid>
            <date>2011-03-16 17:01:32 -0700</date>
            <delta_ts>2011-03-16 17:45:25 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>cors.txt</filename>
            <type>text/plain</type>
            <size>16182</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTI3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTEtMDMtMTYgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxM
b2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBDcm9zcyBPcmlnaW4gUmVxdWVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTI1CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcHVi
bGljL1dlYlVSTExvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxMb2FkZXJPcHRpb25z
OjpXZWJVUkxMb2FkZXJPcHRpb25zKToKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0
ZXI6OmlzRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6Y2xlYXJDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpDbGll
bnRBZGFwdGVyKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50
QWRhcHRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVS
TExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpB
c3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRS
ZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVu
dEFkYXB0ZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkFz
c29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRGYWls
KToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6QXNzb2NpYXRlZFVSTExv
YWRlcik6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVk
VVJMTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6bG9hZFN5
bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2Fk
QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpj
YW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZlcnNM
b2FkaW5nKToKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oOgorCiAyMDExLTAz
LTE1ICBJbHlhIFNoZXJtYW4gIDxpc2hlcm1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVVJMTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVVJMTG9hZGVyLmgJKHJldmlzaW9uIDgxMjY3KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVVJMTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQxLDYg
KzQxLDIxIEBAIGNsYXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJVUkxSZXNwb25zZTsKIHN0
cnVjdCBXZWJVUkxFcnJvcjsKIAorZW51bSBXZWJDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgewor
ICAgIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLAorICAgIFVzZUFjY2Vzc0NvbnRyb2wsCisgICAg
QWxsb3dDcm9zc09yaWdpblJlcXVlc3RzCit9OworCitzdHJ1Y3QgV2ViVVJMTG9hZGVyT3B0aW9u
cyB7CisgICAgV2ViVVJMTG9hZGVyT3B0aW9ucygpIDogc25pZmZDb250ZW50KGZhbHNlKSwgYWxs
b3dDcmVkZW50aWFscyhmYWxzZSksIGZvcmNlUHJlZmxpZ2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSB7IH0KKworICAgIGJvb2wgc25p
ZmZDb250ZW50OyAvLyBXaGV0aGVyIHRvIHNuaWZmIGNvbnRlbnQuCisgICAgYm9vbCBhbGxvd0Ny
ZWRlbnRpYWxzOyAvLyBXaGV0aGVyIHRvIHNlbmQgSFRUUCBjcmVkZW50aWFscyBhbmQgY29va2ll
cyB3aXRoIHRoZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7IC8vIElmIEFjY2Vz
c0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4KKyAgICBXZWJD
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5OworfTsKKwog
Y2xhc3MgV2ViVVJMTG9hZGVyIHsKIHB1YmxpYzoKICAgICAvLyBUaGUgV2ViVVJMTG9hZGVyIG1h
eSBiZSBkZWxldGVkIGluIGEgY2FsbCB0byBpdHMgY2xpZW50LgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9u
IDgxMjY3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDEwMyArMzEsMjA1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogCisjaW5jbHVkZSAi
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRl
ICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRl
ICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgorI2luY2x1ZGUgIldl
YlVSTExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVz
cG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUFzc29j
aWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUlt
cGw+IGZyYW1lSW1wbCkKLSAgICA6IG1fZnJhbWVJbXBsKGZyYW1lSW1wbCksCi0gICAgICBtX3Jl
YWxMb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKSwKLSAgICAgIG1fcmVh
bENsaWVudCgwKQorLy8gVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBpbnRlcmZhY2UgZGlmZmVyZW5j
ZXMgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgbG9hZGVyIGNsaWVudHMuCisvLyBJdCBmb3J3
YXJkcyBpdHMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCBub3RpZmljYXRpb25zIHRvIGEgV2ViVVJM
TG9hZGVyQ2xpZW50LgorY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlciA6
IHB1YmxpYyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENsaWVudEFkYXB0ZXI+IGNyZWF0ZShBc3NvY2lhdGVkVVJMTG9hZGVy
KiwgV2ViVVJMTG9hZGVyQ2xpZW50KiwgYm9vbCAvKmRvd25sb2FkVG9GaWxlKi8pOworCisgICAg
dmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCov
LCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIC8qbmV3UmVxdWVzdCovLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLyk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmRhdGFMZW5n
dGgqLyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBj
aGFyKiwgaW50IC8qZGF0YUxlbmd0aCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZyh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBkb3VibGUgLypmaW5pc2hUaW1lKi8p
OworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIC8vIFRoaXMgbWV0aG9kIHN0b3BzIGxvYWRpbmcgYW5kIHJlbGVhc2Vz
IHRoZSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgYXMgZWFybHkgYXMgcG9zc2libGUuCisgICAg
dm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CisKK3ByaXZhdGU6CisgICAgQ2xp
ZW50QWRhcHRlcihBc3NvY2lhdGVkVVJMTG9hZGVyKiwgV2ViVVJMTG9hZGVyQ2xpZW50KiwgYm9v
bCAvKmRvd25sb2FkVG9GaWxlKi8pOworCisgICAgQXNzb2NpYXRlZFVSTExvYWRlciogbV9sb2Fk
ZXI7CisgICAgV2ViVVJMTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICB1bnNpZ25lZCBsb25n
IG1fZG93bmxvYWRMZW5ndGg7CisgICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOworfTsKKworUGFz
c093blB0cjxBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyPiBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpDbGllbnRBZGFwdGVyOjpjcmVhdGUoQXNzb2NpYXRlZFVSTExvYWRlciogbG9hZGVy
LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCwgYm9vbCBkb3dubG9hZFRvRmlsZSkKIHsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENsaWVudEFkYXB0ZXIobG9hZGVyLCBjbGllbnQsIGRvd25s
b2FkVG9GaWxlKSk7CiB9CiAKLUFzc29jaWF0ZWRVUkxMb2FkZXI6On5Bc3NvY2lhdGVkVVJMTG9h
ZGVyKCkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OkNsaWVudEFkYXB0ZXIo
QXNzb2NpYXRlZFVSTExvYWRlciogbG9hZGVyLCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCwg
Ym9vbCBkb3dubG9hZFRvRmlsZSkKKyAgICA6IG1fbG9hZGVyKGxvYWRlcikKKyAgICAsIG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fZG93bmxvYWRMZW5ndGgoMCkKKyAgICAsIG1fZG93bmxvYWRU
b0ZpbGUoZG93bmxvYWRUb0ZpbGUpCiB7CisgICAgQVNTRVJUKG1fbG9hZGVyKTsKKyAgICBBU1NF
UlQobV9jbGllbnQpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmxvYWRTeW5jaHJv
bm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYlVSTFJlc3BvbnNlJiByZXNw
b25zZSwgV2ViVVJMRXJyb3ImIGVycm9yLCBXZWJEYXRhJiBkYXRhKQordm9pZCBBc3NvY2lhdGVk
VVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQog
ewotICAgIEFTU0VSVCghbV9yZWFsQ2xpZW50KTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CiAKLSAgICBXZWJVUkxSZXF1ZXN0IHJlcXVlc3RDb3B5KHJlcXVlc3QpOwotICAg
IHByZXBhcmVSZXF1ZXN0KHJlcXVlc3RDb3B5KTsKLQotICAgIG1fcmVhbExvYWRlci0+bG9hZFN5
bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHJlc3BvbnNlLCBlcnJvciwgZGF0YSk7CisgICAgV3Jh
cHBlZFJlc291cmNlUmVxdWVzdCB3cmFwcGVkTmV3UmVxdWVzdChuZXdSZXF1ZXN0KTsKKyAgICBX
cmFwcGVkUmVzb3VyY2VSZXNwb25zZSB3cmFwcGVkUmVkaXJlY3RSZXNwb25zZShyZWRpcmVjdFJl
c3BvbnNlKTsKKyAgICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fbG9hZGVyLCB3cmFwcGVk
TmV3UmVxdWVzdCwgd3JhcHBlZFJlZGlyZWN0UmVzcG9uc2UpOwogfQogCi12b2lkIEFzc29jaWF0
ZWRVUkxMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1
ZXN0LCBXZWJVUkxMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6Q2xpZW50QWRhcHRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBBU1NFUlQo
IW1fcmVhbENsaWVudCk7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgV2ViVVJMUmVxdWVzdCByZXF1ZXN0Q29weShyZXF1ZXN0KTsKLSAgICBwcmVwYXJlUmVxdWVz
dChyZXF1ZXN0Q29weSk7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fbG9hZGVyLCBieXRl
c1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CiAKLSAgICBtX3JlYWxDbGllbnQgPSBjbGll
bnQ7Ci0gICAgbV9yZWFsTG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkocmVxdWVzdENvcHksIHRo
aXMpOwordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgV3JhcHBl
ZFJlc291cmNlUmVzcG9uc2Ugd3JhcHBlZFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fbG9hZGVyLCB3cmFwcGVkUmVzcG9uc2UpOwogfQogCi12
b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmNhbmNlbCgpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBtX3JlYWxMb2FkZXItPmNhbmNlbCgpOworICAgIGlmICgh
bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0
YShtX2xvYWRlciwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgIG1fZG93bmxvYWRMZW5ndGgg
Kz0gbGVuZ3RoUmVjZWl2ZWQ7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0RGVm
ZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCit2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6
OkNsaWVudEFkYXB0ZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7Ci0gICAgbV9yZWFsTG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVyc0xvYWRpbmcpOworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEobV9sb2FkZXIsIGRhdGEs
IGxlbmd0aFJlY2VpdmVkKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpwcmVwYXJl
UmVxdWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVy
OjpDbGllbnRBZGFwdGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGFw
cGxpY2F0aW9uQ2FjaGVIb3N0ID0gbV9mcmFtZUltcGwtPmRhdGFTb3VyY2UoKS0+YXBwbGljYXRp
b25DYWNoZUhvc3QoKTsKLSAgICBpZiAoYXBwbGljYXRpb25DYWNoZUhvc3QpCi0gICAgICAgIGFw
cGxpY2F0aW9uQ2FjaGVIb3N0LT53aWxsU3RhcnRTdWJSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7
Ci0gICAgbV9mcmFtZUltcGwtPmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QpOworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rvd25sb2FkVG9G
aWxlKSB7CisgICAgICAgIGludCBkb3dubG9hZExlbmd0aCA9IG1fZG93bmxvYWRMZW5ndGggPD0g
SU5UX01BWCA/IG1fZG93bmxvYWRMZW5ndGggOiBJTlRfTUFYOworICAgICAgICBtX2NsaWVudC0+
ZGlkRG93bmxvYWREYXRhKG1fbG9hZGVyLCBkb3dubG9hZExlbmd0aCk7CisgICAgICAgIC8vIFdo
aWxlIHRoZSBjbGllbnQgY291bGQgaGF2ZSBjYW5jZWxsZWQsIGNvbnRpbnVlLCBzaW5jZSB0aGUg
bG9hZCBmaW5pc2hlZC4gCisgICAgfQorCisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
bV9sb2FkZXIsIGZpbmlzaFRpbWUpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6Ondp
bGxTZW5kUmVxdWVzdChXZWJVUkxMb2FkZXIqLCBXZWJVUkxSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBj
b25zdCBXZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKLSAgICBtX3JlYWxDbGllbnQtPndpbGxTZW5kUmVxdWVzdCh0aGlzLCBuZXdSZXF1ZXN0
LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJVUkxFcnJvciB3ZWJFcnJvcihlcnJvcik7CisgICAgbV9jbGllbnQtPmRpZEZh
aWwobV9sb2FkZXIsIHdlYkVycm9yKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpk
aWRTZW5kRGF0YShXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQorQXNzb2NpYXRlZFVSTExvYWRl
cjo6QXNzb2NpYXRlZFVSTExvYWRlcihQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWVJbXBs
KQorICAgIDogbV9mcmFtZUltcGwoZnJhbWVJbXBsKQorICAgICwgbV9jbGllbnQoMCkKIHsKLSAg
ICBtX3JlYWxDbGllbnQtPmRpZFNlbmREYXRhKHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1Rv
QmVTZW50KTsKKyAgICBBU1NFUlQobV9mcmFtZUltcGwpOworCisgICAgbV9vcHRpb25zLnNuaWZm
Q29udGVudCA9IGZhbHNlOworICAgIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsK
KyAgICBtX29wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBtX29wdGlvbnMuY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzOyAvLyBUT0RP
KGJidWRnZSkgRGVmYXVsdCBzaG91bGQgYmUgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMsIGJ1dCB0
aGlzIHdvdWxkIGJyZWFrIHNvbWUgdGVzdHMuCiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNl
JiByZXNwb25zZSkKK0Fzc29jaWF0ZWRVUkxMb2FkZXI6OkFzc29jaWF0ZWRVUkxMb2FkZXIoUGFz
c1JlZlB0cjxXZWJGcmFtZUltcGw+IGZyYW1lSW1wbCwgY29uc3QgV2ViVVJMTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucykKKyAgICA6IG1fZnJhbWVJbXBsKGZyYW1lSW1wbCkKKyAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQorICAgICwgbV9jbGllbnQoMCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZFJl
Y2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7CisgICAgQVNTRVJUKG1fZnJhbWVJbXBsKTsK
IH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWREb3dubG9hZERhdGEoV2ViVVJMTG9h
ZGVyKiwgaW50IGRhdGFMZW5ndGgpCitBc3NvY2lhdGVkVVJMTG9hZGVyOjp+QXNzb2NpYXRlZFVS
TExvYWRlcigpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5kaWREb3dubG9hZERhdGEodGhpcywgZGF0
YUxlbmd0aCk7CisgICAgaWYgKG1fY2xpZW50QWRhcHRlcikKKyAgICAgICAgbV9jbGllbnRBZGFw
dGVyLT5jbGVhckNsaWVudCgpOwogfQogCi12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3Ro
KQorI2RlZmluZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKHdlYmtpdF9uYW1lLCB3ZWJj
b3JlX25hbWUpIFwKKyAgICBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6
d2Via2l0X25hbWUpID09IHN0YXRpY19jYXN0PGludD4oV2ViQ29yZTo6d2ViY29yZV9uYW1lKSwg
bWlzbWF0Y2hpbmdfZW51bXMpCisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRGVueUNy
b3NzT3JpZ2luUmVxdWVzdHMsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oVXNlQWNjZXNzQ29udHJvbCwgVXNlQWNjZXNzQ29udHJvbCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgQWxs
b3dDcm9zc09yaWdpblJlcXVlc3RzKTsKKwordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2Fk
U3luY2hyb25vdXNseShjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJVUkxSZXNwb25z
ZSYgcmVzcG9uc2UsIFdlYlVSTEVycm9yJiBlcnJvciwgV2ViRGF0YSYgZGF0YSkKIHsKLSAgICBt
X3JlYWxDbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGRhdGFMZW5ndGgpOworICAg
IEFTU0VSVCgwKTsgLy8gU3luY2hyb25vdXMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgogfQog
Ci12b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShXZWJV
UkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgQXNzb2Np
YXRlZFVSTExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJl
cXVlc3QsIFdlYlVSTExvYWRlckNsaWVudCogY2xpZW50KQogewotICAgIG1fcmVhbENsaWVudC0+
ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKHRoaXMsIGRhdGEsIGRhdGFMZW5ndGgpOworICAgIEFT
U0VSVCghbV9jbGllbnQpOworCisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0
aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7IC8vIEFsd2F5cyBzZW5kIGNhbGxiYWNrcy4K
KyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IG1fb3B0aW9ucy5zbmlmZkNvbnRlbnQ7CisgICAg
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHM7Cisg
ICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IG1fb3B0aW9ucy5mb3JjZVByZWZsaWdodDsKKyAg
ICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeT4obV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBv
bGljeSk7CisKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHdlYmNvcmVSZXF1ZXN0ID0gcmVx
dWVzdC50b1Jlc291cmNlUmVxdWVzdCgpOworICAgIERvY3VtZW50KiB3ZWJjb3JlRG9jdW1lbnQg
PSBtX2ZyYW1lSW1wbC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBtX2NsaWVudEFkYXB0ZXIg
PSBDbGllbnRBZGFwdGVyOjpjcmVhdGUodGhpcywgbV9jbGllbnQsIHJlcXVlc3QuZG93bmxvYWRU
b0ZpbGUoKSk7CisKKyAgICBtX2xvYWRlciA9IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3Jl
YXRlKHdlYmNvcmVEb2N1bWVudCwgbV9jbGllbnRBZGFwdGVyLmdldCgpLCB3ZWJjb3JlUmVxdWVz
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6ZGlkRmluaXNoTG9h
ZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Y2FuY2VsKCkKIHsKLSAgICBtX3JlYWxDbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
dGhpcywgZmluaXNoVGltZSk7CisgICAgaWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fY2xpZW50
QWRhcHRlci0+Y2xlYXJDbGllbnQoKTsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAg
IH0KIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpkaWRGYWlsKFdlYlVSTExvYWRlcios
IGNvbnN0IFdlYlVSTEVycm9yJiBlcnJvcikKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiB7Ci0gICAgbV9yZWFsQ2xpZW50LT5k
aWRGYWlsKHRoaXMsIGVycm9yKTsKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVy
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVk
VVJMTG9hZGVyLmgJKHJldmlzaW9uIDgxMjY3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMiwyMCArMzIs
MjIgQEAKICNkZWZpbmUgQXNzb2NpYXRlZFVSTExvYWRlcl9oCiAKICNpbmNsdWRlICJXZWJVUkxM
b2FkZXIuaCIKLSNpbmNsdWRlICJXZWJVUkxMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjsgfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRnJhbWVJbXBsOwogCiAv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IFdlYkZyYW1lOjpjcmVhdGVBc3NvY2lh
dGVkVVJMTG9hZGVyLgotLy8gRklYTUU6IEltcGxlbWVudCBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlci4KLWNsYXNzIEFzc29jaWF0ZWRVUkxMb2FkZXIgOiBwdWJsaWMgV2Vi
VVJMTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJVUkxMb2Fk
ZXJDbGllbnQgeworY2xhc3MgQXNzb2NpYXRlZFVSTExvYWRlciA6IHB1YmxpYyBXZWJVUkxMb2Fk
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzc29jaWF0ZWRVUkxMb2FkZXIpOwogcHVi
bGljOgogICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIoUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+KTsK
KyAgICBBc3NvY2lhdGVkVVJMTG9hZGVyKFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiwgY29uc3Qg
V2ViVVJMTG9hZGVyT3B0aW9ucyYpOwogICAgIH5Bc3NvY2lhdGVkVVJMTG9hZGVyKCk7CiAKICAg
ICAvLyBXZWJVUkxMb2FkZXIgbWV0aG9kczoKQEAgLTU0LDIyICs1NiwxNSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2Fk
aW5nKGJvb2wpOwogCi0gICAgLy8gV2ViVVJMTG9hZGVyQ2xpZW50IG1ldGhvZHM6Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJVUkxMb2FkZXIqLCBXZWJVUkxSZXF1ZXN0JiBu
ZXdSZXF1ZXN0LCBjb25zdCBXZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2Vi
VVJMUmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFdlYlVSTExv
YWRlciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
V2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFdlYlVSTExvYWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYpOwotCiBwcml2YXRl
OgotICAgIHZvaWQgcHJlcGFyZVJlcXVlc3QoV2ViVVJMUmVxdWVzdCYpOworCisgICAgY2xhc3Mg
Q2xpZW50QWRhcHRlcjsKIAogICAgIFJlZlB0cjxXZWJGcmFtZUltcGw+IG1fZnJhbWVJbXBsOwot
ICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IG1fcmVhbExvYWRlcjsKLSAgICBXZWJVUkxMb2FkZXJD
bGllbnQqIG1fcmVhbENsaWVudDsKKyAgICBXZWJVUkxMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsK
KyAgICBXZWJVUkxMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgIE93blB0cjxDbGllbnRBZGFw
dGVyPiBtX2NsaWVudEFkYXB0ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcj4gbV9sb2FkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>