<?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>28293</bug_id>
          
          <creation_ts>2009-08-13 21:21:57 -0700</creation_ts>
          <short_desc>[Chromium] event.datatransfer.getdata(&quot;text/uri-list&quot;) treated the same as getdata(&quot;URL&quot;)</short_desc>
          <delta_ts>2010-03-09 23:19:37 -0800</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>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>34512</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>abarth</cc>
    
    <cc>arv</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>noel.gordon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>140148</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-13 21:21:57 -0700</bug_when>
    <thetext>In Chromium, getData(&quot;text/uri-list&quot;) uses the same code path as getData(&quot;URL&quot;), so always ever returns a single URL, even if multiple files are dragged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140177</commentid>
    <comment_count>1</comment_count>
      <attachid>34819</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-14 00:31:37 -0700</bug_when>
    <thetext>Created attachment 34819
patch - handle &quot;text/uri-list&quot; (Windows only atm)

I changed the GetData functionality to also handle multiple files
(cf. also WebCore/platform/mac/ClipboardMac.mm)

Conversion of file paths to file URLs is implemented for Windows only at the moment. For other platforms the code will fallback to the current (single URL case) handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141180</commentid>
    <comment_count>2</comment_count>
      <attachid>34819</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-18 13:11:03 -0700</bug_when>
    <thetext>Comment on attachment 34819
patch - handle &quot;text/uri-list&quot; (Windows only atm)

Please either add a Layout test or in the change log {explain why one cannot be added or indicate what tests already cover this}.

&gt; Index: WebCore/platform/chromium/ClipboardChromium.cpp
&gt; @@ -125,10 +125,27 @@
&gt;      } else if (dataType == ClipboardDataTypeURL) {
&gt;          // FIXME: Handle the cut/paste event.  This requires adding a new IPC
&gt;          // message to get the URL from the clipboard directly.
&gt; +        
&gt; +        bool multipleURLs = (type.lower() == &quot;text/uri-list&quot;)
&gt; +                         &amp;&amp; !m_dataObject-&gt;filenames.isEmpty();

Should only be a 4 four space indent beyond bool.

&gt; +        // Multiple URL case
&gt; +        if (multipleURLs) {
&gt; +            size_t count = m_dataObject-&gt;filenames.size();
&gt; +            for (size_t i = 0; i &lt; count; ++i) {
&gt; +                String url = filenameAsURL(m_dataObject-&gt;filenames[i]);
&gt; +                if (!url.isEmpty()) {

if (url.isEmpty())
    continue;
Prefer &quot;fail fast&quot;

&gt; Index: WebCore/platform/chromium/ClipboardChromium.h
&gt; +        // This returns a String rather than a KURL as for the use in Clipboard
&gt; +        // operations this is sufficient and easier (at least for the time being).

...&quot;because&quot; this is sufficent....

&gt; Index: WebCore/platform/chromium/ClipboardChromiumWin.cpp
&gt;  #include &lt;shlwapi.h&gt;
&gt; +#include &lt;WinInet.h&gt;

sort case sensitive. so &apos;W&apos; &lt; &apos;s&apos;

&gt; +    wchar_t buf[INTERNET_MAX_URL_LENGTH];

s/buf/buffer/
Use whole words.

&gt; +    DWORD len = INTERNET_MAX_URL_LENGTH;

DWORD len = sizeof(buf )/ sizeof(buf[0]);

s/len/length/

&gt; +    const wchar_t* chars = filename.charactersWithNullTermination();
&gt; +    if (SUCCEEDED(::UrlCreateFromPathW(chars, buf, &amp;len, 0))) {

No {} for single line block after if.

&gt; +        return String(buf, len);
&gt; +    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142281</commentid>
    <comment_count>3</comment_count>
      <attachid>38469</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-23 23:00:23 -0700</bug_when>
    <thetext>Created attachment 38469
patch: handle &quot;text/uri-list&quot; (Windows only atm), updated

Changed patch according to review notes. Also removed a superfluous #include.

Note on layout tests: I actually wrote a test for the functionality that works fine on Safari Mac, but haven&apos;t included it here since Chromium doesn&apos;t (yet) support the necessary interfaces (and it felt strange to include a layout test and immediately disable it for the platform for which one submits the patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142529</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-24 23:47:11 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; Note on layout tests: I actually wrote a test for the functionality that works
&gt; fine on Safari Mac, but haven&apos;t included it here since Chromium doesn&apos;t (yet)
&gt; support the necessary interfaces 
Please include your layout test.  At least it will test webkit for this condition.

Also, I think the support for the interface is being added to chromium:

   http://code.google.com/p/chromium/issues/detail?id=19884

and if this doesn&apos;t cover it, then please consider adding support for the necessary interfaces to Chromium to test this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142559</commentid>
    <comment_count>5</comment_count>
      <attachid>38541</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-25 04:35:52 -0700</bug_when>
    <thetext>Created attachment 38541
patch: layout test for getData(&quot;text/uri-list&quot;)

Added patch containing layout test as requested (separate file since it&apos;s not yet actually working in the platform targeted by the functionality patch).

Added the test to the &quot;Skipped&quot; list of all platforms except Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142824</commentid>
    <comment_count>6</comment_count>
      <attachid>38603</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-26 04:22:52 -0700</bug_when>
    <thetext>Created attachment 38603
patch - handle &quot;text/uri-list&quot; (getData: Windows only atm)

Largely the same functionality as the previous patch, but cleaned up the code for better readability.

Also added corresponding handling of &quot;text/uri-list&quot; to clearData() and setData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143228</commentid>
    <comment_count>7</comment_count>
      <attachid>38541</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:15:30 -0700</bug_when>
    <thetext>Comment on attachment 38541
patch: layout test for getData(&quot;text/uri-list&quot;)

http/tests/security seems like a strange place for these.  Unless you need something about this being a http tests, I&apos;ve been putting other clipboard tests in edting/pasteboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143230</commentid>
    <comment_count>8</comment_count>
      <attachid>38603</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 16:18:17 -0700</bug_when>
    <thetext>Comment on attachment 38603
patch - handle &quot;text/uri-list&quot; (getData: Windows only atm)

I bet we could pretty easily guess at the implementations for linux and mac.

For mac:
        NSURL *url = [NSURL fileURLWithPath:string];
Except that that&apos;s a .cpp file, so we might have to use CF instead.  I guess the chromium mac people would know better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143585</commentid>
    <comment_count>9</comment_count>
      <attachid>38804</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-31 00:41:27 -0700</bug_when>
    <thetext>Created attachment 38804
patch: layout test for getData(&quot;text/uri-list&quot;)

(cf. comment #7)

You&apos;re right - the reason why I put it into http/tests/security/clipboard was that I adapted the other layout test there and wanted to re-use the same resource files. However, those same file are present in editing/pasteboard as well, so I moved the test there as suggested.

In doing this I also had to adapt the test, since for reasons unknown to me the file URL returned in the new location was suddenly absolute rather than relative. However, relying on one or the other probably isn&apos;t a good idea (and won&apos;t work iwth absolute URLs anyway), so I changed the test to just check for &quot;file://&quot; at the beginning and the correct file name at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143916</commentid>
    <comment_count>10</comment_count>
      <attachid>38804</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-09-01 09:32:39 -0700</bug_when>
    <thetext>Comment on attachment 38804
patch: layout test for getData(&quot;text/uri-list&quot;)

r- for this: The skipped files still refer to the old test location.

Personally I would still prefer this layout tests to be with the patch for the bug.  Even though it currently doesn&apos;t test chromium due to the layout test controller support that needs to be added, it will test the patch when that support is added shortly.

Lastly, I would clean up the changelog some (e.g. &quot;var&quot; isn&apos;t a function).


As a note to other readers, the name of the test doesn&apos;t seem to fit the pattern of other test names, but with layout tests non-uniformity of this sort is good to actually test WebKit better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143923</commentid>
    <comment_count>11</comment_count>
      <attachid>38603</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-09-01 09:54:33 -0700</bug_when>
    <thetext>Comment on attachment 38603
patch - handle &quot;text/uri-list&quot; (getData: Windows only atm)

Sorry for taking so long to get back to this. Just a few last things to address.


&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; +        This patch does not include a layout test, since Chromium does not yet support the
&gt; +        necessary interfaces.
&gt; +        (cf. LayoutTests/http/tests/security/clipboard/clipboard-file-access.html)

Just include it. :)

&gt; Index: WebCore/platform/chromium/ClipboardChromium.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/chromium/ClipboardChromium.cpp	(revision 47748)
&gt; +++ WebCore/platform/chromium/ClipboardChromium.cpp	(working copy)
&gt; @@ -52,17 +52,24 @@
&gt;  // We provide the IE clipboard types (URL and Text), and the clipboard types specified in the WHATWG Web Applications 1.0 draft
&gt;  // see http://www.whatwg.org/specs/web-apps/current-work/ Section 6.3.5.3

It isn&apos;t part of your patch but I looked at this to validate this addition and the section reference is incorrect.  Perhaps instead of referring to a numerical section it could just give the spec url and a section title or something less mutable?

&gt;  

&gt; +enum ClipboardDataType { ClipboardDataTypeNone, 
&gt; +                         ClipboardDataTypeURL, 
&gt; +                         ClipboardDataTypeURIList, 
&gt; +                         ClipboardDataTypeText };

This is formatted in an odd way. I would expect something like this:
enum ClipboardDataType {
    ClipboardDataTypeNone, 
    ClipboardDataTypeURL, 
    ClipboardDataTypeURIList, 
    ClipboardDataTypeText
};


&gt; +    if (cleanType == &quot;url&quot;)
&gt; +        return ClipboardDataTypeURL;
&gt; +    if (cleanType == &quot;text/uri-list&quot;)
&gt; +        return ClipboardDataTypeURIList;
&gt; +    // includes two special cases for IE compatibility

Format comments like sentences (start with capital, end with period).
   // Includes two special cases for IE compatibility.

&gt; +    switch (clipboardTypeFromMIMEType(type)) {
&gt; +    case ClipboardDataTypeURL:
&gt;          m_dataObject-&gt;url = KURL();
&gt;          m_dataObject-&gt;urlTitle = &quot;&quot;;
&gt; +        break;
&gt; +
&gt; +    case ClipboardDataTypeURIList:
&gt; +        m_dataObject-&gt;filenames.clear();
&gt; +        break;

Why doesn&apos;t this fall through to ClipboardDataTypeURL since the handling of this type does?

&gt; +
&gt; +    case ClipboardDataTypeText:
&gt; +        m_dataObject-&gt;plainText = &quot;&quot;;
&gt; +        break;

Add a 
       case ClipboardDataTypeNone:
           break;
to allow for turning on warnings that all enum values are handled.

Also, I would change all &quot;break;&quot; to &quot;return;&quot; and add a ASSERT_NOT_REACHED(); at the end of this function.



&gt; +    case ClipboardDataTypeURL:
&gt;          // FIXME: Handle the cut/paste event.  This requires adding a new IPC
&gt;          // message to get the URL from the clipboard directly.
&gt;          if (!m_dataObject-&gt;url.isEmpty()) {
&gt;              success = true;
&gt;              text = m_dataObject-&gt;url.string();
&gt;          }
&gt; +        break;

Add a 
       case ClipboardDataTypeNone:
           break;
to allow for turning on warnings that all enum values are handled.
&gt;      }


&gt; +    switch (clipboardTypeFromMIMEType(type)) {
&gt; +    case ClipboardDataTypeURL:
&gt;          m_dataObject-&gt;url = KURL(data);
&gt;          return m_dataObject-&gt;url.isValid();

&gt; +    case ClipboardDataTypeURIList:
&gt; +        data.split(filenamesSeparator, m_dataObject-&gt;filenames);
&gt; +        return true;
&gt; +
&gt; +    case ClipboardDataTypeText:
&gt;          m_dataObject-&gt;plainText = data;
&gt;          return true;

Add a 
       case ClipboardDataTypeNone:
           return false;
to allow for turning on warnings that all enum values are handled.

Also, I would add a ASSERT_NOT_REACHED(); at the end of this function.


&gt; Index: WebCore/platform/chromium/ClipboardChromiumWin.cpp
&gt; ===================================================================
&gt; +String ClipboardChromium::filenameAsURL(String filename)
&gt; +{
&gt; +    if (filename.isEmpty())
&gt; +        return String();
&gt; +
&gt; +    wchar_t buffer[INTERNET_MAX_URL_LENGTH];
&gt; +    DWORD length = sizeof(buffer)/sizeof(buffer[0]);

Add spaces around /</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174609</commentid>
    <comment_count>12</comment_count>
      <attachid>38804</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-12-23 10:58:11 -0800</bug_when>
    <thetext>Comment on attachment 38804
patch: layout test for getData(&quot;text/uri-list&quot;)

&gt; Index: LayoutTests/editing/pasteboard/resources/dataTransfer-getData.js

&gt; +dragTarget.addEventListener(&quot;dragentered&quot;, function() {
&gt; +    event.dataTransfer.dropEffect = &quot;copy&quot;;
&gt; +    event.preventDefault();
&gt; +}, false);

The event name is dragenter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174613</commentid>
    <comment_count>13</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-12-23 11:08:24 -0800</bug_when>
    <thetext>This does not seem to handle comments in the uri-list correctly.

See http://www.rfc-editor.org/rfc/rfc2483.txt for more info on the text/uri-list format.

The following should work:

var CRLF = &apos;\r\n&apos;;
var SAMPLE_URI_LIST = [
  &apos;# This is a comment&apos;,
  &apos;http://webkit.org&apos;,
  &apos;http://chromium.org&apos;
].join(CRLF);

function handleDragStart(e) {
  e.dataTransfer.setData(&apos;text/uri-list&apos;, SAMPLE_URI_LIST);
}

function handleDrop(e) {
  var uris = e.dataTransfer.getData(&apos;text/uri-list&apos;).split(CRLF);
  // remove potential comments
  uris = uris.filter(function(uri) {
    return uri[0] !== &apos;#&apos;;
  });

  assertEquals(2, uris.length);
  assertEquals(&apos;http://webkit.org&apos;, uris[0]);
  assertEquals(&apos;http://chromium.org&apos;, uris[1]);
}

I don&apos;t think we need to preserve the comments but I think it would be acceptable if we did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187308</commentid>
    <comment_count>14</comment_count>
      <attachid>48010</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-02-03 03:11:09 -0800</bug_when>
    <thetext>Created attachment 48010
patch - correct handling of &quot;URL&quot; vs. &quot;text/uri-list&quot; for Chromium, incl. new layout test

New-and-improved version of the patch, including an all-new layout test.

This now also should handle comments in the URI list correctly.

The patch also tries to correctly handle clearData() in that file data is not deleted on a call to clearData() without arguments, as specified in the HTML5 spec.

Also added is a new layout test to verify the handling of getData &amp; setData for &quot;URL&quot; vs. &quot;text/uri-list&quot;. The test is skipped on all other platforms, since this functionality is not fully implemented there either. (The previous layout test is contained in the patch for the new issue 34512).

Nevertheless, I would also consider this Chromium patch just an interim patch, since it still doesn&apos;t support the HTML5 spec fully. Esp. it doesn&apos;t yet handle arbitrary MIME types in getData and setData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191471</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-18 00:49:43 -0800</bug_when>
    <thetext>@levin: Any chance you could finish reviewing this patch?  I was going to dig into it, but you seem to have been thought it a couple times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193033</commentid>
    <comment_count>16</comment_count>
      <attachid>48010</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-23 11:32:40 -0800</bug_when>
    <thetext>Comment on attachment 48010
patch - correct handling of &quot;URL&quot; vs. &quot;text/uri-list&quot; for Chromium, incl. new layout test

Please consider a few small adjustments before landing as mentioned below.

There were a few places where whitespace was just changed for no reason. It would be nice to remove these changes.
  line 85 of WebCore/platform/chromium/ClipboardChromium.cpp
  line 311 of WebCore/platform/chromium/ClipboardChromium.cpp

&gt; Index: WebCore/ChangeLog
&gt; +2010-02-03  Roland Steiner  &lt;rolandsteiner@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 28293 -  [Chromium] event.datatransfer.getdata(&quot;text/uri-list&quot;) treated the same as getdata(&quot;URL&quot;)

I can&apos;t parse this easily. Do you mean &quot;should be treated&quot; instead of &quot;treated&quot;?

&gt; +        (https://bugs.webkit.org/show_bug.cgi?id=28293)

No need for parenthesis here.


&gt; Index: WebCore/platform/chromium/ChromiumDataObject.h
&gt;      private:
&gt; +        // URL and uri-list are linked -&gt; should not be accessed individually.
Consider:
  URL and uri-list are linked, so they should not be accessed individually.

&gt; Index: WebCore/platform/chromium/ClipboardChromium.cpp

&gt; +// Per RFC 2483, line separator for &quot;text/...&quot; MIME types is CR-LF.

s/line/the line/

&gt; +static char const * const textMIMETypeLineSeparator = &quot;\r\n&quot;;

static char const* const textMIMETypeLineSeparator = &quot;\r\n&quot;;

No space between the const and the *.


&gt; +    case ClipboardDataTypeOther:
&gt; +        // not yet implement, see https://bugs.webkit.org/show_bug.cgi?id=34410

Consider
// Not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410.



&gt; +    case ClipboardDataTypeURL:
&gt; +        // In case of a previous setData(&apos;text/uri-list&apos;), setData() has already
&gt; +        // prepared the &apos;url&apos; member, so we can just retrieve it here.
&gt; +        if (!m_dataObject-&gt;url.isEmpty()) {
&gt; +            success = true;
&gt; +            return m_dataObject-&gt;url.string();
&gt; +        }
&gt; +        // Otherwse check if we have a file that we could convert to a file:// URL.

s/Otherwse/Otherwise/



&gt; +    case ClipboardDataTypeOther:
&gt; +        // not yet implement, see https://bugs.webkit.org/show_bug.cgi?id=34410

Consider
// Not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410.

&gt; +        // Copy the first valid URL into the &apos;url&apos; member as well.
&gt; +        // In case noe entry is a valid URL (i.e., remarks and URNs only), then we leave &apos;url&apos; empty.

s/noe/no/


&gt; +    case ClipboardDataTypeOther:
&gt; +        // not yet implement, see https://bugs.webkit.org/show_bug.cgi?id=34410

As before...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195409</commentid>
    <comment_count>17</comment_count>
      <attachid>49884</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-03-03 00:07:55 -0800</bug_when>
    <thetext>Created attachment 49884
patch - fixed after mid-air collision, improved robustness, new test case

The previous r+&apos;d patch had a mid-air collision with another patch that modified the same code and renamed member variables.

The new patch corrects the resulting conflicts. I also took the opportunity to apply the result of some discussions on the topic and changed the code so that it will accept \r\n as line separators in setData (as per the RFC) as well as just \n (e.g., FireFox also is fine with just \n), in order to add some robustness.

When creating uri-lists, however, this code will still adhere to the RFC and use \r\n as line separators.

Consequently I also added a new test case that checks for the case where just \n is used as line separator.

All in all, with above changes I felt that the new patch should undergo another review before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196640</commentid>
    <comment_count>18</comment_count>
      <attachid>48010</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-05 14:03:28 -0800</bug_when>
    <thetext>Comment on attachment 48010
patch - correct handling of &quot;URL&quot; vs. &quot;text/uri-list&quot; for Chromium, incl. new layout test

Cleared David Levin&apos;s review+ from obsolete attachment 48010 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197779</commentid>
    <comment_count>19</comment_count>
      <attachid>49884</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-09 14:37:27 -0800</bug_when>
    <thetext>Comment on attachment 49884
patch - fixed after mid-air collision, improved robustness, new test case

Please address the comments below and submit it. (Please save any refinements for another patch.)


&gt; Index: WebCore/ChangeLog
&gt; +2010-03-01  Roland Steiner  &lt;rolandsteiner@chromium.org&gt;
&gt; +
&gt; +        Reviewed by David Levin.

This is slightly premature. It should remain as NOBODY (OOPS!). until right before it is submitted basically but I guess it is correct now.



&gt; Index: WebCore/platform/chromium/ClipboardChromium.cpp

&gt; -    if (dataType == ClipboardDataTypeText)
&gt; +    case ClipboardDataTypeDownloadURL:
&gt; +        m_dataObject-&gt;downloadMetadata = &quot;&quot;;
&gt; +        return;
&gt; +        
&gt; +    case ClipboardDataTypePlainText:
&gt;          m_dataObject-&gt;plainText = &quot;&quot;;
&gt; +        return;
&gt; +
&gt; +    case ClipboardDataTypeOther:
&gt; +        // Not yet implement, see https://bugs.webkit.org/show_bug.cgi?id=34410

Add &quot;ed&quot; like this:
  // Not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410


&gt;  bool ClipboardChromium::setData(const String&amp; type, const String&amp; data)
...
&gt; +    case ClipboardDataTypeURIList:
&gt; +        m_dataObject-&gt;url = KURL();
&gt; +        // Line separator is \r\n per RFC 2483 - however, for compatibility reasons
&gt; +        // we also allow just \n here. 
&gt; +        data.split(&apos;\n&apos;, m_dataObject-&gt;uriList);
&gt; +        // Strip white space on all lines, including trailing \r from above split.
&gt; +        // If this leaves a line empty, remove it completely.
&gt; +        //
&gt; +        // Also, copy the first valid URL into the &apos;url&apos; member as well.
&gt; +        // In case no entry is a valid URL (i.e., remarks only), then we leave &apos;url&apos; empty.
&gt; +        // I.e., in that case subsequent calls to getData(&quot;URL&quot;) will get an empty string.
&gt; +        // This is in line with the HTML5 spec (see &quot;The DragEvent and DataTransfer interfaces&quot;).
&gt; +        for (size_t n = 0; n &lt; m_dataObject-&gt;uriList.size(); /**/ ) {

/**/ is odd. Why not put &quot;++n&quot; here and then do n-- below if an item is removed from the uriList.
Also, n is an odd loop variable. Why not just use i?


&gt; Index: LayoutTests/editing/pasteboard/dataTransfer-setData-getData-expected.txt

&gt; ___________________________________________________________________
&gt; Added: svn:executable

This should not be &quot;svn:executable&quot;.Please remove this property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197898</commentid>
    <comment_count>20</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-03-09 23:19:22 -0800</bug_when>
    <thetext>Landed as rev. 55766 (build fix in 55767)

&gt; &gt; +        for (size_t n = 0; n &lt; m_dataObject-&gt;uriList.size(); /**/ ) {
&gt; 
&gt; /**/ is odd. Why not put &quot;++n&quot; here and then do n-- below if an item is removed
&gt; from the uriList.

Perhaps I&apos;m too much of a stickler here, but since size_t is unsigned, n-- could cause a value underflow, that&apos;s why I preferred to avoid it here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34819</attachid>
            <date>2009-08-14 00:31:37 -0700</date>
            <delta_ts>2009-08-23 23:00:23 -0700</delta_ts>
            <desc>patch - handle &quot;text/uri-list&quot; (Windows only atm)</desc>
            <filename>clip.patch</filename>
            <type>text/plain</type>
            <size>5973</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzI3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMDgtMTQgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFuc2Zlci5nZXRkYXRh
KCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRhKCJVUkwiKQorICAg
ICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjkzKQorCisg
ICAgICAgIEFkZGVkIGNvZGUgcGF0aCBmb3IgaGFuZGxpbmcgbXVsdGlwbGUgZmlsZXMgaW4gQ2hy
b21pdW0uCisgICAgICAgIChjdXJyZW50bHkgb25seSBmdWxseSBpbXBsZW1lbnRlZCBpbiBXaW5k
b3dzIC0gZmFsbGJhY2sgdG8gb2xkIGJlaGF2aW9yIG9uIG90aGVyIHBsYXRmb3JtcykuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1
bTo6ZmlsZW5hbWVBc1VSTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW1NYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZp
bGVuYW1lQXNVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxlbmFt
ZUFzVVJMKToKKwogMjAwOS0wOC0xMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDQ3MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDI3IEBACiAgICAgfSBlbHNlIGlmIChk
YXRhVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkgewogICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRoZSBjdXQvcGFzdGUgZXZlbnQuICBUaGlzIHJlcXVpcmVzIGFkZGluZyBhIG5ldyBJUEMK
ICAgICAgICAgLy8gbWVzc2FnZSB0byBnZXQgdGhlIFVSTCBmcm9tIHRoZSBjbGlwYm9hcmQgZGly
ZWN0bHkuCi0gICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKSB7CisgICAg
ICAgIAorICAgICAgICBib29sIG11bHRpcGxlVVJMcyA9ICh0eXBlLmxvd2VyKCkgPT0gInRleHQv
dXJpLWxpc3QiKQorICAgICAgICAgICAgICAgICAgICAgICAgICYmICFtX2RhdGFPYmplY3QtPmZp
bGVuYW1lcy5pc0VtcHR5KCk7CisgICAgICAgIC8vIE11bHRpcGxlIFVSTCBjYXNlCisgICAgICAg
IGlmIChtdWx0aXBsZVVSTHMpIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fZGF0YU9i
amVjdC0+ZmlsZW5hbWVzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBmaWxlbmFtZUFz
VVJMKG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKCdcbicpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0LmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gU2luZ2xlIFVSTCBjYXNlLCBvciBmYWxsYmFjayB3aGVuIG11bHRpcGxlIFVSTCBj
YXNlIGZhaWxlZAorICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICB0ZXh0
ID0gbV9kYXRhT2JqZWN0LT51cmwuc3RyaW5nKCk7Ci0gICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAogICAgIHJldHVybiB0ZXh0OwpAQCAtMTYzLDcgKzE4MCw3IEBACiAgICAgaWYgKCFtX2Rh
dGFPYmplY3QpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAgaWYgKG1fZGF0YU9iamVj
dC0+dXJsLmlzVmFsaWQoKSkgeworICAgIGlmIChtX2RhdGFPYmplY3QtPnVybC5pc1ZhbGlkKCkg
fHwgIW1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkgewogICAgICAgICByZXN1bHRz
LmFkZCgiVVJMIik7CiAgICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAg
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0u
aAkocmV2aXNpb24gNDcwNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDE2IEBACiAgICAgICAgIC8v
IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJlIHRo
ZQogICAgICAgICAvLyBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdnZXIgdGhhbiBhbGxvd2Vk
IGJ5IHRoZSBmaWxlIHN5c3RlbS4KICAgICAgICAgLy8gVGhpcyBtYXkgY2hhbmdlIHRoZSBmaWxl
IGV4dGVuc2lvbiBpbiBkYXRhT2JqZWN0LgorICAgICAgICAvLyBJbXBsZW1lbnRlZCBpbiB0aGUg
cGxhdGZvcm0tc3BlY2lmaWMgQ2xpcGJvYXJkQ2hyb21pdW1YWFguY3BwIHNvdXJjZSBmaWxlcy4K
ICAgICAgICAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0
bGUsIENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCk7CiAKKyAgICAgICAgLy8gQ29udmVy
dHMgdGhlIHBhc3NlZC1pbiBmaWxlIG5hbWUgdG8gYSBmaWxlOi8vIFVSTC4KKyAgICAgICAgLy8g
UmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkIGZvciBhbnkg
cmVhc29uLgorICAgICAgICAvLyBJbXBsZW1lbnRlZCBpbiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMg
Q2xpcGJvYXJkQ2hyb21pdW1YWFguY3BwIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgLy8gVGhpcyBy
ZXR1cm5zIGEgU3RyaW5nIHJhdGhlciB0aGFuIGEgS1VSTCBhcyBmb3IgdGhlIHVzZSBpbiBDbGlw
Ym9hcmQKKyAgICAgICAgLy8gb3BlcmF0aW9ucyB0aGlzIGlzIHN1ZmZpY2llbnQgYW5kIGVhc2ll
ciAoYXQgbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nKS4KKyAgICAgICAgc3RhdGljIFN0cmluZyBm
aWxlbmFtZUFzVVJMKFN0cmluZyBmaWxlbmFtZSk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgp
OwogICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nl
c3MpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtTGludXguY3BwCShyZXZpc2lvbiA0NzA0MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDQgKzM4LDEwIEBACiAgICAgcmV0dXJuIHRpdGxlOwogfQogCitTdHJpbmcgQ2xpcGJv
YXJkQ2hyb21pdW06OmZpbGVuYW1lQXNVUkwoU3RyaW5nIGZpbGVuYW1lKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCiB9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDQ3MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDQg
KzM4LDEwIEBACiAgICAgcmV0dXJuIHRpdGxlOwogfQogCitTdHJpbmcgQ2xpcGJvYXJkQ2hyb21p
dW06OmZpbGVuYW1lQXNVUkwoU3RyaW5nIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bVdpbi5jcHAJKHJldmlzaW9uIDQ3MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAK
ICNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRh
T2JqZWN0LmgiCiAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CisjaW5jbHVkZSA8V2luSW5ldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDQgKzU1LDE5IEBACiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpmaWxlbmFtZUFzVVJMKFN0cmlu
ZyBmaWxlbmFtZSkKK3sKKyAgICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICB3Y2hhcl90IGJ1ZltJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSF07
CisgICAgRFdPUkQgbGVuID0gSU5URVJORVRfTUFYX1VSTF9MRU5HVEg7CisgICAgY29uc3Qgd2No
YXJfdCogY2hhcnMgPSBmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOwor
ICAgIGlmIChTVUNDRUVERUQoOjpVcmxDcmVhdGVGcm9tUGF0aFcoY2hhcnMsIGJ1ZiwgJmxlbiwg
MCkpKSB7CisgICAgICAgIHJldHVybiBTdHJpbmcoYnVmLCBsZW4pOworICAgIH0KKworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="19018"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38469</attachid>
            <date>2009-08-23 23:00:23 -0700</date>
            <delta_ts>2009-08-26 04:22:52 -0700</delta_ts>
            <desc>patch: handle &quot;text/uri-list&quot; (Windows only atm), updated</desc>
            <filename>dragndrop.patch</filename>
            <type>text/plain</type>
            <size>6129</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3NjQ2KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDI4IEBADQorMjAwOS0wOC0xNCAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGdvb2dsZS5jb20+DQorDQorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4NCisNCisgICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFuc2Zl
ci5nZXRkYXRhKCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRhKCJV
UkwiKQ0KKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODI5MykNCisNCisgICAgICAgIEFkZGVkIGNvZGUgcGF0aCBmb3IgaGFuZGxpbmcgbXVsdGlwbGUg
ZmlsZXMgaW4gQ2hyb21pdW0uDQorICAgICAgICAoY3VycmVudGx5IG9ubHkgZnVsbHkgaW1wbGVt
ZW50ZWQgaW4gV2luZG93cyAtIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvciBvbiBvdGhlciBwbGF0
Zm9ybXMpLg0KKw0KKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIGEgbGF5b3V0
IHRlc3QsIHNpbmNlIENocm9taXVtIGRvZXMgbm90IHlldCBzdXBwb3J0IHRoZQ0KKyAgICAgICAg
bmVjZXNzYXJ5IGludGVyZmFjZXMuDQorICAgICAgICAoY2YuIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvY2xpcGJvYXJkL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5odG1sKQ0KKw0KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6DQorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOg0KKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6DQorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmg6DQorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtTGludXguY3BwOg0KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpmaWxlbmFtZUFzVVJMKToNCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW1NYWMuY3BwOg0KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjpmaWxlbmFtZUFzVVJMKToNCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1XaW4uY3BwOg0KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVt
OjpmaWxlbmFtZUFzVVJMKToNCisNCiAyMDA5LTA4LTIxICBDaHJpcyBNYXJyaW4gIDxjbWFycmlu
QGFwcGxlLmNvbT4NCiANCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSBPbGl2ZXIgSHVudC4N
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmNwcAkocmV2aXNpb24gNDc2NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSwyNCBAQAogICAg
IH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKICAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSB0aGUgY3V0L3Bhc3RlIGV2ZW50LiAgVGhpcyByZXF1aXJlcyBhZGRp
bmcgYSBuZXcgSVBDCiAgICAgICAgIC8vIG1lc3NhZ2UgdG8gZ2V0IHRoZSBVUkwgZnJvbSB0aGUg
Y2xpcGJvYXJkIGRpcmVjdGx5LgotICAgICAgICBpZiAoIW1fZGF0YU9iamVjdC0+dXJsLmlzRW1w
dHkoKSkgeworICAgICAgICAKKyAgICAgICAgYm9vbCBtdWx0aXBsZVVSTHMgPSAodHlwZS5sb3dl
cigpID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgICAgICYmICFtX2RhdGFPYmplY3QtPmZp
bGVuYW1lcy5pc0VtcHR5KCk7CisgICAgICAgIC8vIE11bHRpcGxlIFVSTCBjYXNlCisgICAgICAg
IGlmIChtdWx0aXBsZVVSTHMpIHsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fZGF0YU9i
amVjdC0+ZmlsZW5hbWVzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBmaWxlbmFtZUFz
VVJMKG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAodXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQo
J1xuJyk7CisgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU2luZ2xlIFVSTCBjYXNlLCBvciBmYWxsYmFjayB3aGVuIG11bHRpcGxlIFVSTCBjYXNl
IGZhaWxlZAorICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICB0ZXh0ID0g
bV9kYXRhT2JqZWN0LT51cmwuc3RyaW5nKCk7CiAgICAgICAgIH0KQEAgLTE2Myw3ICsxODAsNyBA
QAogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAg
IGlmIChtX2RhdGFPYmplY3QtPnVybC5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobV9kYXRhT2JqZWN0
LT51cmwuaXNWYWxpZCgpIHx8ICFtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgcmVzdWx0cy5hZGQoIlVSTCIpOwogICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91
cmktbGlzdCIpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA0NzY0NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKIAor
I2luY2x1ZGUgPFdpbkluZXQuaD4KICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUzLDQgKzU0LDE4IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorU3Ry
aW5nIENsaXBib2FyZENocm9taXVtOjpmaWxlbmFtZUFzVVJMKFN0cmluZyBmaWxlbmFtZSkKK3sK
KyAgICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
KyAgICB3Y2hhcl90IGJ1ZmZlcltJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSF07CisgICAgRFdPUkQg
bGVuZ3RoID0gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSk7CisgICAgY29uc3Qgd2No
YXJfdCogY2hhcnMgPSBmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOwor
ICAgIGlmIChTVUNDRUVERUQoOjpVcmxDcmVhdGVGcm9tUGF0aFcoY2hhcnMsIGJ1ZmZlciwgJmxl
bmd0aCwgMCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4
LmNwcAkocmV2aXNpb24gNDc2NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw0ICszOCwxMCBAQAog
ICAgIHJldHVybiB0aXRsZTsKIH0KIAorU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpmaWxlbmFt
ZUFzVVJMKFN0cmluZyBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgJKHJldmlzaW9uIDQ3
NjQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxNiBAQAogICAgICAgICAvLyBpbnZhbGlkIGZpbGUg
c3lzdGVtIGNoYXJhY3RlcnMgYXMgd2VsbCBhcyBtYWtpbmcgc3VyZSB0aGUKICAgICAgICAgLy8g
cGF0aCArIGV4dGVuc2lvbiBpcyBub3QgYmlnZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgZmlsZSBz
eXN0ZW0uCiAgICAgICAgIC8vIFRoaXMgbWF5IGNoYW5nZSB0aGUgZmlsZSBleHRlbnNpb24gaW4g
ZGF0YU9iamVjdC4KKyAgICAgICAgLy8gSW1wbGVtZW50ZWQgaW4gdGhlIHBsYXRmb3JtLXNwZWNp
ZmljIENsaXBib2FyZENocm9taXVtWFhYLmNwcCBzb3VyY2UgZmlsZXMuCiAgICAgICAgIHN0YXRp
YyBTdHJpbmcgdmFsaWRhdGVGaWxlTmFtZShjb25zdCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURh
dGFPYmplY3QqIGRhdGFPYmplY3QpOwogCisgICAgICAgIC8vIENvbnZlcnRzIHRoZSBwYXNzZWQt
aW4gZmlsZSBuYW1lIHRvIGEgZmlsZTovLyBVUkwuCisgICAgICAgIC8vIFJldHVybnMgYW4gZW1w
dHkgc3RyaW5nIGlmIHRoZSBjb252ZXJzaW9uIGZhaWxlZCBmb3IgYW55IHJlYXNvbi4KKyAgICAg
ICAgLy8gSW1wbGVtZW50ZWQgaW4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIENsaXBib2FyZENocm9t
aXVtWFhYLmNwcCBzb3VyY2UgZmlsZXMuCisgICAgICAgIC8vIFRoaXMgcmV0dXJucyBhIFN0cmlu
ZyByYXRoZXIgdGhhbiBhIEtVUkwsIGJlY2F1c2UgZm9yIHRoZSB1c2UgaW4gQ2xpcGJvYXJkCisg
ICAgICAgIC8vIG9wZXJhdGlvbnMgdGhpcyBpcyBzdWZmaWNpZW50IGFuZCBtb3JlIGNvbnZlbmll
bnQuCisgICAgICAgIHN0YXRpYyBTdHJpbmcgZmlsZW5hbWVBc1VSTChTdHJpbmcgZmlsZW5hbWUp
OworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsK
ICAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKICAgICAgICAgU3RyaW5nIGdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwCShyZXZpc2lv
biA0NzY0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1N
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw0ICszOCwxMCBAQAogICAgIHJldHVybiB0aXRs
ZTsKIH0KIAorU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpmaWxlbmFtZUFzVVJMKFN0cmluZyBm
aWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38541</attachid>
            <date>2009-08-25 04:35:52 -0700</date>
            <delta_ts>2009-08-31 00:41:27 -0700</delta_ts>
            <desc>patch: layout test for getData(&quot;text/uri-list&quot;)</desc>
            <filename>getData-LayoutTest.patch</filename>
            <type>text/plain</type>
            <size>10142</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDktMDgtMjUgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICBCdWcgMjgyOTMgLSAgW0Nocm9taXVtXSBldmVudC5kYXRhdHJh
bnNmZXIuZ2V0ZGF0YSgidGV4dC91cmktbGlzdCIpIHRyZWF0ZWQgdGhlIHNhbWUgYXMgZ2V0ZGF0
YSgiVVJMIikgCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgyOTMpCisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIGV2ZW50LmRhdGF0cmFuc2Zlci5n
ZXRkYXRhKCJ0ZXh0L3VyaS1saXN0IikuCisgICAgICAgIFRoaXMgc2hvdWxkIHJldHVybiBhIGxp
c3Qgb2YgVVJJcyAoY29uY2F0ZW5hdGVkIGludG8gYSBzaW5nbGUgc3RyaW5nLCBqb2luZWQgYnkg
bmV3bGluZXMpCisgICAgICAgIHJhdGhlciB0aGFuIGEgc2luZ2xlIFVSTC4KKworICAgICAgICBB
cyBpdCBjdXJyZW50bHkgb25seSB3b3JrcyBvbiBNYWMsIGFkZGVkIHRvICJTa2lwcGVkIiBsaXN0
IG9uIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2NsaXBib2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRh
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3Jl
c291cmNlcy9kYXRhVHJhbnNmZXItZ2V0RGF0YS5qczogQWRkZWQuCisgICAgICAgICh2YXIpOgor
ICAgICAgICAobW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQpOgorICAgICAgICAoZHJhZ0ZpbGVz
T250b0RyYWdUYXJnZXQpOgorICAgICAgICAoZ2V0RGF0YVVSTFNob3VsZEJlKToKKyAgICAgICAg
KGdldERhdGFVUklMaXN0U2hvdWxkQmUpOgorICAgICAgICAoZHJhZ2dpbmdQYXRoc1Nob3VsZFJl
c3VsdEluRmlsZXMpOgorICAgICAgICAodGVzdERyYWdnaW5nRmlsZXMudmFyKToKKyAgICAgICAg
KHJ1blRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBuZWNlc3NhcnkgaW50
ZXJmYWNlIG1pc3NpbmcuIAorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6IHVudGVzdGVk
LgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOiBuZWNlc3NhcnkgaW50ZXJmYWNlIG1p
c3NpbmcuCisKIDIwMDktMDgtMjQgIEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBi
b2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9kYXRhVHJhbnNmZXItZ2V0
RGF0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKK1Rlc3RzIGFj
Y2VzcyB0byBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YQorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworRHJhZ2dpbmcgYSByZWFsIGZpbGUgb250byBhbiBlbGVtZW50OgorT24gZHJh
Z292ZXI6CitPbiBkcm9wOgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnVVJMJykg
aXMgImZpbGU6Ly9sb2NhbGhvc3Qvc2VjdXJpdHkvY2xpcGJvYXJkL3Jlc291cmNlcy9hcHBsZS5n
aWYiCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0Jykuc3Bs
aXQoJ1xuJykubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3Rl
eHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVswXSBpcyAiZmlsZTovL2xvY2FsaG9zdC9zZWN1cml0
eS9jbGlwYm9hcmQvcmVzb3VyY2VzL2FwcGxlLmdpZiIKK0RyYWdnaW5nIHR3byBmaWxlcyBvbnRv
IGFuIGVsZW1lbnQ6CitPbiBkcmFnb3ZlcjoKK09uIGRyYWdvdmVyOgorT24gZHJvcDoKK1BBU1Mg
ZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ1VSTCcpIGlzICJmaWxlOi8vbG9jYWxob3N0L3Nl
Y3VyaXR5L2NsaXBib2FyZC9yZXNvdXJjZXMvYXBwbGUuZ2lmIgorUEFTUyBldmVudC5kYXRhVHJh
bnNmZXIuZ2V0RGF0YSgndGV4dC91cmktbGlzdCcpLnNwbGl0KCdcbicpLmxlbmd0aCBpcyAyCitQ
QVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQoJ1xu
JylbMF0gaXMgImZpbGU6Ly9sb2NhbGhvc3Qvc2VjdXJpdHkvY2xpcGJvYXJkL3Jlc291cmNlcy9h
cHBsZS5naWYiCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0
Jykuc3BsaXQoJ1xuJylbMV0gaXMgImZpbGU6Ly9sb2NhbGhvc3Qvc2VjdXJpdHkvY2xpcGJvYXJk
L3Jlc291cmNlcy9tb3ppbGxhLmdpZiIKK0RyYWdnaW5nIHR3byBmaWxlcyBpbiByZXZlcnNlIGFs
cGhhYmV0aWNhbCBvcmRlciBvbnRvIGFuIGVsZW1lbnQ6CitPbiBkcmFnb3ZlcjoKK09uIGRyYWdv
dmVyOgorT24gZHJvcDoKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ1VSTCcpIGlz
ICJmaWxlOi8vbG9jYWxob3N0L3NlY3VyaXR5L2NsaXBib2FyZC9yZXNvdXJjZXMvbW96aWxsYS5n
aWYiCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0Jykuc3Bs
aXQoJ1xuJykubGVuZ3RoIGlzIDIKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3Rl
eHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVswXSBpcyAiZmlsZTovL2xvY2FsaG9zdC9zZWN1cml0
eS9jbGlwYm9hcmQvcmVzb3VyY2VzL21vemlsbGEuZ2lmIgorUEFTUyBldmVudC5kYXRhVHJhbnNm
ZXIuZ2V0RGF0YSgndGV4dC91cmktbGlzdCcpLnNwbGl0KCdcbicpWzFdIGlzICJmaWxlOi8vbG9j
YWxob3N0L3NlY3VyaXR5L2NsaXBib2FyZC9yZXNvdXJjZXMvYXBwbGUuZ2lmIgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9h
cmQvZGF0YVRyYW5zZmVyLWdldERhdGEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFUcmFuc2Zlci1nZXRE
YXRhLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvcmVzb3VyY2VzL2RhdGFUcmFuc2Zl
ci1nZXREYXRhLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvY2xpcGJvYXJkL3Jlc291cmNlcy9kYXRhVHJhbnNmZXItZ2V0RGF0YS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3Jlc291cmNl
cy9kYXRhVHJhbnNmZXItZ2V0RGF0YS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAK
K2Rlc2NyaXB0aW9uKCJUZXN0cyBhY2Nlc3MgdG8gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEi
KTsKKwordmFyIGRyYWdUYXJnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2Ry
YWdUYXJnZXQuaW5uZXJIVE1MID0gIkRyYWcgaGVyZSIKK2RyYWdUYXJnZXQuc3R5bGUuYmFja2dy
b3VuZENvbG9yID0gImJsdWUiOworZHJhZ1RhcmdldC5zdHlsZS53aWR0aCA9ICIxMDBweCI7Citk
cmFnVGFyZ2V0LnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CisvLyBJbXBvcnRhbnQgdGhhdCB3ZSBw
dXQgdGhpcyBhdCB0aGUgdG9wIG9mIHRoZSBkb2Mgc28gdGhhdCBsb2dnaW5nIGRvZXMgbm90IGNh
dXNlIGl0IHRvIGdvIG91dCBvZiB2aWV3IChhbmQgYmUgdW5kcmFnYWJsZSkKK2RvY3VtZW50LmJv
ZHkuaW5zZXJ0QmVmb3JlKGRyYWdUYXJnZXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisK
K2RyYWdUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyZWQiLCBmdW5jdGlvbigpIHsK
KyAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJjb3B5IjsKKyAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworfSwgZmFsc2UpOworCitkcmFnVGFyZ2V0LmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7CisgICAgZGVidWcoIk9uIGRyYWdvdmVyOiIpOwor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK3ZhciBleHBlY3RlZFVS
TE9uRHJvcDsKK3ZhciBleHBlY3RlZEZpbGVMaXN0T25Ecm9wOworCitkcmFnVGFyZ2V0LmFkZEV2
ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBkZWJ1ZygiT24gZHJvcDoiKTsK
KyAgICBnZXREYXRhVVJMU2hvdWxkQmUoZXhwZWN0ZWRVUkxPbkRyb3ApOworICAgIGdldERhdGFV
UklMaXN0U2hvdWxkQmUoZXhwZWN0ZWRGaWxlTGlzdE9uRHJvcCk7CisgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKK30sIGZhbHNlKTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZWxlbWVudCkKK3sKKyAgICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCAr
IGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdGaWxlc09udG9EcmFn
VGFyZ2V0KGZpbGVzKSB7CisgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKGZpbGVz
KTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChkcmFnVGFyZ2V0KTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGdldERhdGFVUkxTaG91bGRCZSh1cmwp
Cit7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0
YSgnVVJMJykiLCB1cmwpOworfQorCitmdW5jdGlvbiBnZXREYXRhVVJJTGlzdFNob3VsZEJlKGxp
c3QpCit7CisgICAgc2hvdWxkQmUoImV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3Vy
aS1saXN0Jykuc3BsaXQoJ1xcbicpLmxlbmd0aCIsICIiICsgbGlzdC5sZW5ndGgpOworLy8gICAg
dmFyIHVyaUxpc3QgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC91cmktbGlzdCcp
LnNwbGl0KCdcbicpOworICAgIGZvciAodmFyIHggPSAwOyB4IDwgbGlzdC5sZW5ndGg7IHgrKykg
eworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LmRhdGFUcmFuc2Zlci5nZXRE
YXRhKCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQoJ1xcbicpWyIgKyB4ICsgIl0iLCBsaXN0W3hdKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGRyYWdnaW5nUGF0aHNTaG91bGRSZXN1bHRJbkZpbGVzKHBh
dGhzQXJyYXksIHVyaUFycmF5KQoreworICAgIGV4cGVjdGVkVVJMT25Ecm9wID0gdXJpQXJyYXlb
MF07CisgICAgZXhwZWN0ZWRGaWxlTGlzdE9uRHJvcCA9IHVyaUFycmF5OworICAgIGRyYWdGaWxl
c09udG9EcmFnVGFyZ2V0KHBhdGhzQXJyYXkpOworfQorCitmdW5jdGlvbiB0ZXN0RHJhZ2dpbmdG
aWxlcyhmaWxlc0FycmF5KQoreworICAgIC8vIFdlIGNvdWxkIG1ha2UgYSB3YXkgdG8gcGFyc2Ug
dGhlIGZpbGVuYW1lIGZyb20gdGhlIHBhdGgsIGFuZCB0aGVuIG9ubHkgbmVlZCB0byBwYXNzCisg
ICAgLy8gdGhlIHBhdGggaW4gdGhlIGZpbGVzQXJyYXkuCisgICAgdmFyIHBhdGhzT25seSA9IGZp
bGVzQXJyYXkubWFwKGZ1bmN0aW9uKGZpbGVTcGVjKSB7IHJldHVybiBmaWxlU3BlY1sncGF0aCdd
OyB9KTsKKyAgICB2YXIgdXJpc09ubHkgPSBmaWxlc0FycmF5Lm1hcChmdW5jdGlvbihmaWxlU3Bl
YykgeyByZXR1cm4gZmlsZVNwZWNbJ3VyaSddOyB9KTsKKyAgICBkcmFnZ2luZ1BhdGhzU2hvdWxk
UmVzdWx0SW5GaWxlcyhwYXRoc09ubHksIHVyaXNPbmx5KTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpCit7CisKKyAgICBkZWJ1ZygiRHJhZ2dpbmcgYSByZWFsIGZpbGUgb250byBhbiBlbGVtZW50
OiIpOworICAgIHRlc3REcmFnZ2luZ0ZpbGVzKFsKKyAgICAgICAgeyAncGF0aCc6ICdyZXNvdXJj
ZXMvYXBwbGUuZ2lmJywgJ25hbWUnIDogJ2FwcGxlLmdpZicsICdzaXplJyA6IDE0NzYsICd1cmkn
OiAnZmlsZTovL2xvY2FsaG9zdC9zZWN1cml0eS9jbGlwYm9hcmQvcmVzb3VyY2VzL2FwcGxlLmdp
ZicgfQorICAgIF0pOworCisgICAgZGVidWcoIkRyYWdnaW5nIHR3byBmaWxlcyBvbnRvIGFuIGVs
ZW1lbnQ6Iik7CisgICAgdGVzdERyYWdnaW5nRmlsZXMoWworICAgICAgICB7ICdwYXRoJzogJ3Jl
c291cmNlcy9hcHBsZS5naWYnLCAnbmFtZScgOiAnYXBwbGUuZ2lmJywgJ3NpemUnIDogMTQ3Niwg
J3VyaSc6ICdmaWxlOi8vbG9jYWxob3N0L3NlY3VyaXR5L2NsaXBib2FyZC9yZXNvdXJjZXMvYXBw
bGUuZ2lmJyB9LAorICAgICAgICB7ICdwYXRoJzogJ3Jlc291cmNlcy9tb3ppbGxhLmdpZicsICdu
YW1lJyA6ICdtb3ppbGxhLmdpZicsICdzaXplJyA6IDI1OTMsICd1cmknOiAnZmlsZTovL2xvY2Fs
aG9zdC9zZWN1cml0eS9jbGlwYm9hcmQvcmVzb3VyY2VzL21vemlsbGEuZ2lmJyB9CisgICAgXSk7
CisKKyAgICBkZWJ1ZygiRHJhZ2dpbmcgdHdvIGZpbGVzIGluIHJldmVyc2UgYWxwaGFiZXRpY2Fs
IG9yZGVyIG9udG8gYW4gZWxlbWVudDoiKTsKKyAgICB0ZXN0RHJhZ2dpbmdGaWxlcyhbCisgICAg
ICAgIHsgJ3BhdGgnOiAncmVzb3VyY2VzL21vemlsbGEuZ2lmJywgJ25hbWUnIDogJ21vemlsbGEu
Z2lmJywgJ3NpemUnIDogMjU5MywgJ3VyaSc6ICdmaWxlOi8vbG9jYWxob3N0L3NlY3VyaXR5L2Ns
aXBib2FyZC9yZXNvdXJjZXMvbW96aWxsYS5naWYnIH0sCisgICAgICAgIHsgJ3BhdGgnOiAncmVz
b3VyY2VzL2FwcGxlLmdpZicsICduYW1lJyA6ICdhcHBsZS5naWYnLCAnc2l6ZScgOiAxNDc2LCAn
dXJpJzogJ2ZpbGU6Ly9sb2NhbGhvc3Qvc2VjdXJpdHkvY2xpcGJvYXJkL3Jlc291cmNlcy9hcHBs
ZS5naWYnIH0KKyAgICBdKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1
blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICBkcmFnVGFyZ2V0
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZHJhZ1RhcmdldCk7Cit9IGVsc2UgeworICAgIHRlc3RG
YWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVt
cFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNDc3NDIpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTg0MSw2ICs1ODQxLDcg
QEAgZmFzdC9mb3Jtcy9zbGlkZXItZGVsZXRlLXdoaWxlLWRyYWdnaW5nLQogaHR0cC90ZXN0cy9s
b2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9k
cmFnLW92ZXItcmVtb3RlLWNvbnRlbnQtaWZyYW1lLmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y2xpcGJvYXJkL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5odG1sCitodHRwL3Rlc3RzL3NlY3VyaXR5
L2NsaXBib2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS5odG1sCiBtZWRpYS9hdWRpby1kZWxldGUt
d2hpbGUtc2xpZGVyLXRodW1iLWNsaWNrZWQuaHRtbAogbWVkaWEvYXVkaW8tZGVsZXRlLXdoaWxl
LXN0ZXAtYnV0dG9uLWNsaWNrZWQuaHRtbAogbWVkaWEvY29udHJvbHMtcmlnaHQtY2xpY2stb24t
dGltZWJhci5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDQ3NzQy
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAt
NTA0NiwzICs1MDQ2LDcgQEAgZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1zdHls
ZQogCiAjIE1pc3NpbmcgRFJUIGFiaWxpdHkgdG8gdHJhY2sgd29ya2VyIHRocmVhZCBjb3VudHMK
IGZhc3Qvd29ya2Vycy93b3JrZXItbGlmZWN5Y2xlLmh0bWwKKworIyBldmVudC5kYXRhVHJhbnNm
ZXIuZ2V0RGF0YSgidGV4dC91cmktbGlzdCIpIC0gcGF0Y2ggdW50ZXN0ZWQgb24gUXQKKyMgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI5MykKK2h0dHAvdGVzdHMv
c2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0bWwKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA0Nzc0MikKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgZmFzdC9l
dmVudHMvZHJhZy10by1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8t
bmF2aWdhdGUuaHRtbAogZmFzdC9mb3Jtcy9nZXQtZmlsZS11cGxvYWQuaHRtbAogaHR0cC90ZXN0
cy9zZWN1cml0eS9jbGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKK2h0dHAvdGVz
dHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0bWwKIAogIyBOZWVk
IHRvIGFkZCBmdW5jdGlvbmFsaXR5IHRvIER1bXBSZW5kZXJUcmVlIHRvIHRlc3QgSUROIDxyZGFy
Oi8vcHJvYmxlbS81MzAxOTU0PgogZmFzdC9lbmNvZGluZy9pZG4tc2VjdXJpdHkuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38603</attachid>
            <date>2009-08-26 04:22:52 -0700</date>
            <delta_ts>2010-02-03 03:11:09 -0800</delta_ts>
            <desc>patch - handle &quot;text/uri-list&quot; (getData: Windows only atm)</desc>
            <filename>dragndrop.patch</filename>
            <type>text/plain</type>
            <size>9509</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzY0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDgtMTQgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFuc2Zlci5nZXRkYXRh
KCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRhKCJVUkwiKQorICAg
ICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjkzKQorCisg
ICAgICAgIEFkZGVkIGNvZGUgcGF0aCBmb3IgaGFuZGxpbmcgbXVsdGlwbGUgZmlsZXMgaW4gQ2hy
b21pdW0uCisgICAgICAgIChjdXJyZW50bHkgb25seSBmdWxseSBpbXBsZW1lbnRlZCBpbiBXaW5k
b3dzIC0gZmFsbGJhY2sgdG8gb2xkIGJlaGF2aW9yIG9uIG90aGVyIHBsYXRmb3JtcykuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIGEgbGF5b3V0IHRlc3QsIHNpbmNlIENo
cm9taXVtIGRvZXMgbm90IHlldCBzdXBwb3J0IHRoZQorICAgICAgICBuZWNlc3NhcnkgaW50ZXJm
YWNlcy4KKyAgICAgICAgKGNmLiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBi
b2FyZC9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuaHRtbCkKKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVuYW1l
c1NlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xpcGJv
YXJkVHlwZUZyb21NSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1
bTo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpmaWxlbmFtZUFzVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRDaHJvbWl1bTo6ZmlsZW5hbWVBc1VSTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OmZpbGVuYW1lQXNVUkwpOgorCiAyMDA5LTA4LTIxICBDaHJpcyBNYXJyaW4gIDxjbWFy
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgT2xpdmVyIEh1bnQu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmNwcAkocmV2aXNpb24gNDc3NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTcgKzUyLDI0IEBACiAvLyBX
ZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUg
Y2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMg
MS4wIGRyYWZ0CiAvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1
cnJlbnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCiAKLWVudW0gQ2xpcGJvYXJkRGF0YVR5cGUgeyBD
bGlwYm9hcmREYXRhVHlwZU5vbmUsIENsaXBib2FyZERhdGFUeXBlVVJMLCBDbGlwYm9hcmREYXRh
VHlwZVRleHQgfTsKK2VudW0gQ2xpcGJvYXJkRGF0YVR5cGUgeyBDbGlwYm9hcmREYXRhVHlwZU5v
bmUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZERhdGFUeXBlVVJMLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgIENsaXBib2FyZERhdGFUeXBlVGV4dCB9OwogCitzdGF0aWMgY29u
c3QgVUNoYXIgZmlsZW5hbWVzU2VwYXJhdG9yID0gTCdcbic7CisKIHN0YXRpYyBDbGlwYm9hcmRE
YXRhVHlwZSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsK
ICAgICBTdHJpbmcgY2xlYW5UeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwog
Ci0gICAgLy8gdHdvIHNwZWNpYWwgY2FzZXMgZm9yIElFIGNvbXBhdGliaWxpdHkKKyAgICBpZiAo
Y2xlYW5UeXBlID09ICJ1cmwiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7
CisgICAgaWYgKGNsZWFuVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIHJldHVybiBD
bGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q7CisgICAgLy8gaW5jbHVkZXMgdHdvIHNwZWNpYWwgY2Fz
ZXMgZm9yIElFIGNvbXBhdGliaWxpdHkKICAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBj
bGVhblR5cGUgPT0gInRleHQvcGxhaW4iIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3Bs
YWluOyIpKQogICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OwotICAgIGlmIChj
bGVhblR5cGUgPT0gInVybCIgfHwgY2xlYW5UeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKLSAgICAg
ICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwogCiAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlTm9uZTsKIH0KQEAgLTg2LDE0ICs5MywyMCBAQAogICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUo
dHlwZSk7Ci0KLSAgICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKKyAg
ICBzd2l0Y2ggKGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSkpIHsKKyAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlVVJMOgogICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtVUkwoKTsK
ICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmxUaXRsZSA9ICIiOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgorICAgICAgICBtX2RhdGFPYmplY3Qt
PmZpbGVuYW1lcy5jbGVhcigpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVUZXh0OgorICAgICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9ICIiOworICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgaWYgKGRhdGFUeXBlID09IENsaXBib2FyZERhdGFUeXBl
VGV4dCkKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSAiIjsKIH0KIAogdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKQEAgLTExMCw5ICsxMjMsMTAgQEAKICAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUg
PSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOwogICAgIFN0cmluZyB0ZXh0OwotICAg
IGlmIChkYXRhVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpIHsKKworICAgIHN3aXRjaCAo
Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVUZXh0OgogICAgICAgICBpZiAoIWlzRm9yRHJhZ2dpbmcoKSkgewogICAgICAgICAgICAg
Ly8gSWYgdGhpcyBpc24ndCBmb3IgYSBkcmFnLCBpdCdzIGZvciBhIGN1dC9wYXN0ZSBldmVudCBo
YW5kbGVyLgogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRo
ZSBjbGlwYm9hcmQuCkBAIC0xMjIsMTMgKzEzNiwzNCBAQAogICAgICAgICAgICAgc3VjY2VzcyA9
IHRydWU7CiAgICAgICAgICAgICB0ZXh0ID0gbV9kYXRhT2JqZWN0LT5wbGFpblRleHQ7CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKSB7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6Cisg
ICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBzaXplX3QgY291bnQgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5zaXplKCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBTdHJpbmcgdXJsID0gZmlsZW5hbWVBc1VSTChtX2RhdGFPYmplY3QtPmZpbGVuYW1lc1tp
XSk7CisgICAgICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKGZpbGVuYW1lc1NlcGFyYXRvcik7CisgICAgICAg
ICAgICAgICAgdGV4dC5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghdGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAv
LyBmYWlsZWQgLT4gZmFsbCB0aHJvdWdoIGFuZCB0cnkgcmV0cmlldmluZyBzaW5nbGUgVVJMCisK
KyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgogICAgICAgICAvLyBGSVhNRTogSGFuZGxl
IHRoZSBjdXQvcGFzdGUgZXZlbnQuICBUaGlzIHJlcXVpcmVzIGFkZGluZyBhIG5ldyBJUEMKICAg
ICAgICAgLy8gbWVzc2FnZSB0byBnZXQgdGhlIFVSTCBmcm9tIHRoZSBjbGlwYm9hcmQgZGlyZWN0
bHkuCiAgICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIHRleHQgPSBtX2RhdGFPYmplY3QtPnVy
bC5zdHJpbmcoKTsKICAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1
cm4gdGV4dDsKQEAgLTEzOSwxNyArMTc0LDIwIEBACiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBi
b2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDbGlwYm9hcmREYXRh
VHlwZSB3aW5UeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKLQotICAgIGlm
ICh3aW5UeXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKSB7CisgICAgc3dpdGNoIChjbGlwYm9h
cmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpKSB7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
TDoKICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBLVVJMKGRhdGEpOwogICAgICAgICByZXR1
cm4gbV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpOwotICAgIH0KIAotICAgIGlmICh3aW5UeXBl
ID09IENsaXBib2FyZERhdGFUeXBlVGV4dCkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVV
UklMaXN0OgorICAgICAgICBkYXRhLnNwbGl0KGZpbGVuYW1lc1NlcGFyYXRvciwgbV9kYXRhT2Jq
ZWN0LT5maWxlbmFtZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVUZXh0OgogICAgICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IGRhdGE7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTYzLDcgKzIwMSw3IEBACiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVy
biByZXN1bHRzOwogCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQoKSkgeworICAg
IGlmIChtX2RhdGFPYmplY3QtPnVybC5pc1ZhbGlkKCkgfHwgIW1fZGF0YU9iamVjdC0+ZmlsZW5h
bWVzLmlzRW1wdHkoKSkgewogICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7CiAgICAgICAgIHJl
c3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDQ3
NjQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNocm9taXVt
RGF0YU9iamVjdC5oIgogCisjaW5jbHVkZSA8V2luSW5ldC5oPgogI2luY2x1ZGUgPHNobHdhcGku
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNCArNTQsMTggQEAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVuYW1lQXNVUkwoU3Ry
aW5nIGZpbGVuYW1lKQoreworICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIHdjaGFyX3QgYnVmZmVyW0lOVEVSTkVUX01BWF9VUkxfTEVO
R1RIXTsKKyAgICBEV09SRCBsZW5ndGggPSBzaXplb2YoYnVmZmVyKS9zaXplb2YoYnVmZmVyWzBd
KTsKKyAgICBjb25zdCB3Y2hhcl90KiBjaGFycyA9IGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCk7CisgICAgaWYgKFNVQ0NFRURFRCg6OlVybENyZWF0ZUZyb21QYXRoVyhj
aGFycywgYnVmZmVyLCAmbGVuZ3RoLCAwKSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoYnVmZmVy
LCBsZW5ndGgpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCiB9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtTGludXguY3BwCShyZXZpc2lvbiA0NzY0NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDQgKzM4LDEwIEBACiAgICAgcmV0dXJuIHRpdGxlOwogfQogCitTdHJpbmcgQ2xpcGJvYXJk
Q2hyb21pdW06OmZpbGVuYW1lQXNVUkwoU3RyaW5nIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uaAkocmV2aXNpb24gNDc2NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDE2IEBACiAgICAgICAg
IC8vIGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJl
IHRoZQogICAgICAgICAvLyBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdnZXIgdGhhbiBhbGxv
d2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KICAgICAgICAgLy8gVGhpcyBtYXkgY2hhbmdlIHRoZSBm
aWxlIGV4dGVuc2lvbiBpbiBkYXRhT2JqZWN0LgorICAgICAgICAvLyBJbXBsZW1lbnRlZCBpbiB0
aGUgcGxhdGZvcm0tc3BlY2lmaWMgQ2xpcGJvYXJkQ2hyb21pdW1YWFguY3BwIHNvdXJjZSBmaWxl
cy4KICAgICAgICAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYg
dGl0bGUsIENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCk7CiAKKyAgICAgICAgLy8gQ29u
dmVydHMgdGhlIHBhc3NlZC1pbiBmaWxlIG5hbWUgdG8gYSBmaWxlOi8vIFVSTC4KKyAgICAgICAg
Ly8gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkIGZvciBh
bnkgcmVhc29uLgorICAgICAgICAvLyBJbXBsZW1lbnRlZCBpbiB0aGUgcGxhdGZvcm0tc3BlY2lm
aWMgQ2xpcGJvYXJkQ2hyb21pdW1YWFguY3BwIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgLy8gVGhp
cyByZXR1cm5zIGEgU3RyaW5nIHJhdGhlciB0aGFuIGEgS1VSTCwgYmVjYXVzZSBmb3IgdGhlIHVz
ZSBpbiBDbGlwYm9hcmQKKyAgICAgICAgLy8gb3BlcmF0aW9ucyB0aGlzIGlzIHN1ZmZpY2llbnQg
YW5kIG1vcmUgY29udmVuaWVudC4KKyAgICAgICAgc3RhdGljIFN0cmluZyBmaWxlbmFtZUFzVVJM
KFN0cmluZyBmaWxlbmFtZSk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmIHR5cGUpOwogICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgpOwogICAgICAgICBT
dHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bU1hYy5jcHAJKHJldmlzaW9uIDQ3NjQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDQgKzM4LDEwIEBA
CiAgICAgcmV0dXJuIHRpdGxlOwogfQogCitTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVu
YW1lQXNVUkwoU3RyaW5nIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="19608"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38804</attachid>
            <date>2009-08-31 00:41:27 -0700</date>
            <delta_ts>2010-02-03 03:11:09 -0800</delta_ts>
            <desc>patch: layout test for getData(&quot;text/uri-list&quot;)</desc>
            <filename>getData-LayoutTest.patch</filename>
            <type>text/plain</type>
            <size>10139</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ3ODgzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDktMDgtMjUgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFu
c2Zlci5nZXRkYXRhKCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRh
KCJVUkwiKSAKKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yODI5MykKKworICAgICAgICBMYXlvdXQgdGVzdCBmb3IgZXZlbnQuZGF0YXRyYW5zZmVyLmdl
dGRhdGEoInRleHQvdXJpLWxpc3QiKS4KKyAgICAgICAgVGhpcyBzaG91bGQgcmV0dXJuIGEgbGlz
dCBvZiBVUklzIChjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSBzdHJpbmcsIGpvaW5lZCBieSBu
ZXdsaW5lcykKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBzaW5nbGUgVVJMLgorCisgICAgICAgIEFz
IGl0IGN1cnJlbnRseSBvbmx5IHdvcmtzIG9uIE1hYywgYWRkZWQgdG8gIlNraXBwZWQiIGxpc3Qg
b24gYWxsIG90aGVyIHBsYXRmb3Jtcy4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9k
YXRhVHJhbnNmZXItZ2V0RGF0YS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2RhdGFUcmFuc2Zlci1nZXREYXRhLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHZhcik6CisgICAgICAgIChtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVu
dCk6CisgICAgICAgIChkcmFnRmlsZXNPbnRvRHJhZ1RhcmdldCk6CisgICAgICAgIChnZXREYXRh
VVJMU2hvdWxkQmUpOgorICAgICAgICAoZ2V0RGF0YVVSSUxpc3RTaG91bGRCZSk6CisgICAgICAg
IChkcmFnZ2luZ1BhdGhzU2hvdWxkUmVzdWx0SW5GaWxlcyk6CisgICAgICAgICh0ZXN0RHJhZ2dp
bmdGaWxlcy52YXIpOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAwOS0wOC0yOSAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFU
cmFuc2Zlci1nZXREYXRhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItZ2V0RGF0YS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3RzIGFjY2VzcyB0byBldmVudC5kYXRhVHJh
bnNmZXIuZ2V0RGF0YQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRHJhZ2dpbmcg
YSByZWFsIGZpbGUgb250byBhbiBlbGVtZW50OgorT24gZHJhZ292ZXI6CitPbiBkcm9wOgorUEFT
UyB1cmxUb0NvbXBhcmUuc3Vic3RyKDAsIDcpIGlzICJmaWxlOi8vIgorUEFTUyB1cmxUb0NvbXBh
cmUuc3Vic3RyKC0xMCkgaXMgIi9hcHBsZS5naWYiCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5n
ZXREYXRhKCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQoJ1xuJykubGVuZ3RoIGlzIDEKK1BBU1MgZXZl
bnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVswXS5z
dWJzdHIoMCwgNykgaXMgImZpbGU6Ly8iCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRh
KCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQoJ1xuJylbMF0uc3Vic3RyKC0xMCkgaXMgIi9hcHBsZS5n
aWYiCitEcmFnZ2luZyB0d28gZmlsZXMgb250byBhbiBlbGVtZW50OgorT24gZHJhZ292ZXI6CitP
biBkcmFnb3ZlcjoKK09uIGRyb3A6CitQQVNTIHVybFRvQ29tcGFyZS5zdWJzdHIoMCwgNykgaXMg
ImZpbGU6Ly8iCitQQVNTIHVybFRvQ29tcGFyZS5zdWJzdHIoLTEwKSBpcyAiL2FwcGxlLmdpZiIK
K1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgn
XG4nKS5sZW5ndGggaXMgMgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC91
cmktbGlzdCcpLnNwbGl0KCdcbicpWzBdLnN1YnN0cigwLCA3KSBpcyAiZmlsZTovLyIKK1BBU1Mg
ZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVsw
XS5zdWJzdHIoLTEwKSBpcyAiL2FwcGxlLmdpZiIKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyLmdl
dERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVsxXS5zdWJzdHIoMCwgNykgaXMgImZp
bGU6Ly8iCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0Jyku
c3BsaXQoJ1xuJylbMV0uc3Vic3RyKC0xMikgaXMgIi9tb3ppbGxhLmdpZiIKK0RyYWdnaW5nIHR3
byBmaWxlcyBpbiByZXZlcnNlIGFscGhhYmV0aWNhbCBvcmRlciBvbnRvIGFuIGVsZW1lbnQ6CitP
biBkcmFnb3ZlcjoKK09uIGRyYWdvdmVyOgorT24gZHJvcDoKK1BBU1MgdXJsVG9Db21wYXJlLnN1
YnN0cigwLCA3KSBpcyAiZmlsZTovLyIKK1BBU1MgdXJsVG9Db21wYXJlLnN1YnN0cigtMTIpIGlz
ICIvbW96aWxsYS5naWYiCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3Vy
aS1saXN0Jykuc3BsaXQoJ1xuJykubGVuZ3RoIGlzIDIKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVy
LmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVswXS5zdWJzdHIoMCwgNykgaXMg
ImZpbGU6Ly8iCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0
Jykuc3BsaXQoJ1xuJylbMF0uc3Vic3RyKC0xMikgaXMgIi9tb3ppbGxhLmdpZiIKK1BBU1MgZXZl
bnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXG4nKVsxXS5z
dWJzdHIoMCwgNykgaXMgImZpbGU6Ly8iCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRh
KCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQoJ1xuJylbMV0uc3Vic3RyKC0xMCkgaXMgIi9hcHBsZS5n
aWYiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRh
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFU
cmFuc2Zlci1nZXREYXRhLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLWdldERhdGEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YVRyYW5zZmVyLWdldERhdGEuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvcmVzb3VyY2VzL2RhdGFUcmFuc2Zlci1nZXREYXRhLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9yZXNvdXJjZXMvZGF0YVRyYW5zZmVyLWdldERh
dGEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVz
b3VyY2VzL2RhdGFUcmFuc2Zlci1nZXREYXRhLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
NSBAQAorZGVzY3JpcHRpb24oIlRlc3RzIGFjY2VzcyB0byBldmVudC5kYXRhVHJhbnNmZXIuZ2V0
RGF0YSIpOworCit2YXIgZHJhZ1RhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworZHJhZ1RhcmdldC5pbm5lckhUTUwgPSAiRHJhZyBoZXJlIgorZHJhZ1RhcmdldC5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAiYmx1ZSI7CitkcmFnVGFyZ2V0LnN0eWxlLndpZHRoID0gIjEwMHB4
IjsKK2RyYWdUYXJnZXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKKy8vIEltcG9ydGFudCB0aGF0
IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBu
b3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKGFuZCBiZSB1bmRyYWdhYmxlKQorZG9jdW1l
bnQuYm9keS5pbnNlcnRCZWZvcmUoZHJhZ1RhcmdldCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxk
KTsKKworZHJhZ1RhcmdldC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXJlZCIsIGZ1bmN0aW9u
KCkgeworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2RyYWdUYXJnZXQuYWRkRXZlbnRM
aXN0ZW5lcigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKKyAgICBkZWJ1ZygiT24gZHJhZ292ZXI6
Iik7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30sIGZhbHNlKTsKKwordmFyIGV4cGVj
dGVkRmlsZU9uRHJvcDsKK3ZhciBleHBlY3RlZEZpbGVMaXN0T25Ecm9wOworCitkcmFnVGFyZ2V0
LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBkZWJ1ZygiT24gZHJv
cDoiKTsKKyAgICBnZXREYXRhVVJMU2hvdWxkQmUoZXhwZWN0ZWRGaWxlT25Ecm9wKTsKKyAgICBn
ZXREYXRhVVJJTGlzdFNob3VsZEJlKGV4cGVjdGVkRmlsZUxpc3RPbkRyb3ApOworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNl
dExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1l
bnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiBkcmFnRmlsZXNP
bnRvRHJhZ1RhcmdldChmaWxlcykgeworICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cyhmaWxlcyk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZHJhZ1RhcmdldCk7Cisg
ICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCitmdW5jdGlvbiBnZXREYXRhVVJMU2hvdWxk
QmUoZmlsZSkKK3sKKyAgICB1cmxUb0NvbXBhcmUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0
YSgnVVJMJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ1cmxUb0NvbXBhcmUuc3Vic3Ry
KDAsIDcpIiwgImZpbGU6Ly8iKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInVybFRvQ29t
cGFyZS5zdWJzdHIoLSIgKyAoZmlsZS5sZW5ndGggKyAxKSArICIpIiwgIi8iICsgZmlsZSk7Cit9
CisKK2Z1bmN0aW9uIGdldERhdGFVUklMaXN0U2hvdWxkQmUobGlzdCkKK3sKKyAgICBzaG91bGRC
ZSgiZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXFxu
JykubGVuZ3RoIiwgIiIgKyBsaXN0Lmxlbmd0aCk7CisgICAgZm9yICh2YXIgeCA9IDA7IHggPCBs
aXN0Lmxlbmd0aDsgeCsrKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQu
ZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKS5zcGxpdCgnXFxuJylbIiArIHgg
KyAiXS5zdWJzdHIoMCwgNykiLCAiZmlsZTovLyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3VyaS1saXN0Jykuc3BsaXQo
J1xcbicpWyIgKyB4ICsgIl0uc3Vic3RyKC0iICsgKGxpc3RbeF0ubGVuZ3RoICsgMSkgKyAiKSIs
ICIvIiArIGxpc3RbeF0pOworICAgIH0KK30KKworZnVuY3Rpb24gZHJhZ2dpbmdQYXRoc1Nob3Vs
ZFJlc3VsdEluRmlsZXMocGF0aHNBcnJheSwgZmlsZUFycmF5KQoreworICAgIGV4cGVjdGVkRmls
ZU9uRHJvcCA9IGZpbGVBcnJheVswXTsKKyAgICBleHBlY3RlZEZpbGVMaXN0T25Ecm9wID0gZmls
ZUFycmF5OworICAgIGRyYWdGaWxlc09udG9EcmFnVGFyZ2V0KHBhdGhzQXJyYXkpOworfQorCitm
dW5jdGlvbiB0ZXN0RHJhZ2dpbmdGaWxlcyhmaWxlc0FycmF5KQoreworICAgIC8vIFdlIGNvdWxk
IG1ha2UgYSB3YXkgdG8gcGFyc2UgdGhlIGZpbGVuYW1lIGZyb20gdGhlIHBhdGgsIGFuZCB0aGVu
IG9ubHkgbmVlZCB0byBwYXNzCisgICAgLy8gdGhlIHBhdGggaW4gdGhlIGZpbGVzQXJyYXkuCisg
ICAgdmFyIHBhdGhzT25seSA9IGZpbGVzQXJyYXkubWFwKGZ1bmN0aW9uKGZpbGVTcGVjKSB7IHJl
dHVybiBmaWxlU3BlY1sncGF0aCddOyB9KTsKKyAgICB2YXIgZmlsZXNPbmx5ID0gZmlsZXNBcnJh
eS5tYXAoZnVuY3Rpb24oZmlsZVNwZWMpIHsgcmV0dXJuIGZpbGVTcGVjWyduYW1lJ107IH0pOwor
ICAgIGRyYWdnaW5nUGF0aHNTaG91bGRSZXN1bHRJbkZpbGVzKHBhdGhzT25seSwgZmlsZXNPbmx5
KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisKKyAgICBkZWJ1ZygiRHJhZ2dpbmcgYSBy
ZWFsIGZpbGUgb250byBhbiBlbGVtZW50OiIpOworICAgIHRlc3REcmFnZ2luZ0ZpbGVzKFsKKyAg
ICAgICAgeyAncGF0aCc6ICdyZXNvdXJjZXMvYXBwbGUuZ2lmJywgJ25hbWUnIDogJ2FwcGxlLmdp
ZicsICdzaXplJyA6IDE0NzYgfQorICAgIF0pOworCisgICAgZGVidWcoIkRyYWdnaW5nIHR3byBm
aWxlcyBvbnRvIGFuIGVsZW1lbnQ6Iik7CisgICAgdGVzdERyYWdnaW5nRmlsZXMoWworICAgICAg
ICB7ICdwYXRoJzogJ3Jlc291cmNlcy9hcHBsZS5naWYnLCAnbmFtZScgOiAnYXBwbGUuZ2lmJywg
J3NpemUnIDogMTQ3NiB9LAorICAgICAgICB7ICdwYXRoJzogJ3Jlc291cmNlcy9tb3ppbGxhLmdp
ZicsICduYW1lJyA6ICdtb3ppbGxhLmdpZicsICdzaXplJyA6IDI1OTMgfQorICAgIF0pOworCisg
ICAgZGVidWcoIkRyYWdnaW5nIHR3byBmaWxlcyBpbiByZXZlcnNlIGFscGhhYmV0aWNhbCBvcmRl
ciBvbnRvIGFuIGVsZW1lbnQ6Iik7CisgICAgdGVzdERyYWdnaW5nRmlsZXMoWworICAgICAgICB7
ICdwYXRoJzogJ3Jlc291cmNlcy9tb3ppbGxhLmdpZicsICduYW1lJyA6ICdtb3ppbGxhLmdpZics
ICdzaXplJyA6IDI1OTMgfSwKKyAgICAgICAgeyAncGF0aCc6ICdyZXNvdXJjZXMvYXBwbGUuZ2lm
JywgJ25hbWUnIDogJ2FwcGxlLmdpZicsICdzaXplJyA6IDE0NzYgfQorICAgIF0pOworfQorCitp
ZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgcnVuVGVzdCgpOworICAgIC8vIENsZWFuIHVw
IGFmdGVyIG91cnNlbHZlcworICAgIGRyYWdUYXJnZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChk
cmFnVGFyZ2V0KTsKK30gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBp
bnRlcmFjdGl2ZSwgcGxlYXNlIHJ1biB1c2luZyBEdW1wUmVuZGVyVHJlZSIpOworfQorCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CShyZXZpc2lvbiA0Nzg1MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3
b3JraW5nIGNvcHkpCkBAIC01ODQzLDYgKzU4NDMsNyBAQCBmYXN0L2Zvcm1zL3NsaWRlci1kZWxl
dGUtd2hpbGUtZHJhZ2dpbmctCiBodHRwL3Rlc3RzL2xvY2FsL2RyYWctb3Zlci1yZW1vdGUtY29u
dGVudC5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2RyYWctb3Zlci1yZW1vdGUtY29udGVudC1p
ZnJhbWUuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUt
YWNjZXNzLmh0bWwKK2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1n
ZXREYXRhLmh0bWwKIG1lZGlhL2F1ZGlvLWRlbGV0ZS13aGlsZS1zbGlkZXItdGh1bWItY2xpY2tl
ZC5odG1sCiBtZWRpYS9hdWRpby1kZWxldGUtd2hpbGUtc3RlcC1idXR0b24tY2xpY2tlZC5odG1s
CiBtZWRpYS9jb250cm9scy1yaWdodC1jbGljay1vbi10aW1lYmFyLmh0bWwKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNDc4NTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01MDIwLDMgKzUwMjAsNyBAQCBmYXN0L3dv
cmtlcnMvZGVkaWNhdGVkLXdvcmtlci1saWZlY3ljbGUuCiAKICMgTWlzc2luZyBEUlQgYWJpbGl0
eSB0byBzZXQgYWNjZXB0IGNvb2tpZSBwb2xpY3kKIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
Y3Jvc3Mtb3JpZ2luLWNvb2tpZS1zdG9yYWdlLmh0bWwKKworIyBldmVudC5kYXRhVHJhbnNmZXIu
Z2V0RGF0YSgidGV4dC91cmktbGlzdCIpIC0gcGF0Y2ggdW50ZXN0ZWQgb24gUXQKKyMgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI5MykKK2h0dHAvdGVzdHMvc2Vj
dXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0bWwKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA0Nzg1MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgZmFzdC9ldmVu
dHMvZHJhZy10by1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2
aWdhdGUuaHRtbAogZmFzdC9mb3Jtcy9nZXQtZmlsZS11cGxvYWQuaHRtbAogaHR0cC90ZXN0cy9z
ZWN1cml0eS9jbGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKK2h0dHAvdGVzdHMv
c2VjdXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1nZXREYXRhLmh0bWwKIAogIyBOZWVkIHRv
IGFkZCBmdW5jdGlvbmFsaXR5IHRvIER1bXBSZW5kZXJUcmVlIHRvIHRlc3QgSUROIDxyZGFyOi8v
cHJvYmxlbS81MzAxOTU0PgogZmFzdC9lbmNvZGluZy9pZG4tc2VjdXJpdHkuaHRtbAo=
</data>
<flag name="review"
          id="19789"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48010</attachid>
            <date>2010-02-03 03:11:09 -0800</date>
            <delta_ts>2010-03-05 14:03:28 -0800</delta_ts>
            <desc>patch - correct handling of &quot;URL&quot; vs. &quot;text/uri-list&quot; for Chromium, incl. new layout test</desc>
            <filename>setgetData.patch</filename>
            <type>text/plain</type>
            <size>27864</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDItMDMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQnVnIDI4MjkzIC0gIFtDaHJvbWl1bV0gZXZlbnQuZGF0YXRyYW5zZmVyLmdldGRh
dGEoInRleHQvdXJpLWxpc3QiKSB0cmVhdGVkIHRoZSBzYW1lIGFzIGdldGRhdGEoIlVSTCIpCisg
ICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyOTMpCisg
ICAgICAgIAorICAgICAgICBDaGFuZ2UgQ2hyb21pdW1EYXRhT2JqZWN0IHN1Y2ggdGhhdCBpdCB0
cmVhdHMgdHlwZXMgIlVSTCIgYW5kICJ0ZXh0L3VyaS1saXN0IgorICAgICAgICBjb3JyZWN0bHkg
Zm9yIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhL3NldERhdGEuCisKKyAgICAgICAgVGVzdHM6
IGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmh0bWwKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6Omhhc1ZhbGlkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0
VVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkVHlwZUZy
b21NSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6
YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisK
IDIwMTAtMDItMDIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAkocmV2aXNpb24gNTQyNzMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ2hyb21p
dW1EYXRhT2JqZWN0OjpjbGVhcigpCiB7CisgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAg
IGZpbGVuYW1lcy5jbGVhcigpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJB
bGxFeGNlcHRGaWxlcygpCit7CiAgICAgdXJsID0gS1VSTCgpOwogICAgIHVybFRpdGxlID0gIiI7
CisgICAgdXJpTGlzdC5jbGVhcigpOwogICAgIGRvd25sb2FkVVJMID0gS1VSTCgpOwogICAgIGZp
bGVFeHRlbnNpb24gPSAiIjsKLSAgICBmaWxlbmFtZXMuY2xlYXIoKTsKICAgICBwbGFpblRleHQg
PSAiIjsKICAgICB0ZXh0SHRtbCA9ICIiOwogICAgIGh0bWxCYXNlVXJsID0gS1VSTCgpOwpAQCAt
NTIsNiArNTgsNyBAQCBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCiAgICAgICAgIHx8ICFkb3dubG9hZFVSTC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIXVyaUxpc3QuaXNFbXB0eSgpCiAgICAgICAgIHx8ICFmaWxlRXh0
ZW5zaW9uLmlzRW1wdHkoKQogICAgICAgICB8fCAhZmlsZW5hbWVzLmlzRW1wdHkoKQogICAgICAg
ICB8fCAhcGxhaW5UZXh0LmlzRW1wdHkoKQpAQCAtNjIsNiArNjksNyBAQCBib29sIENocm9taXVt
RGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiBDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVt
RGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVyKQogICAgIDogdXJsKG90
aGVyLnVybCkKICAgICAsIHVybFRpdGxlKG90aGVyLnVybFRpdGxlKQorICAgICwgdXJpTGlzdChv
dGhlci51cmlMaXN0KQogICAgICwgZG93bmxvYWRVUkwob3RoZXIuZG93bmxvYWRVUkwpCiAgICAg
LCBmaWxlRXh0ZW5zaW9uKG90aGVyLmZpbGVFeHRlbnNpb24pCiAgICAgLCBmaWxlbmFtZXMob3Ro
ZXIuZmlsZW5hbWVzKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5oCShyZXZpc2lvbiA1NDI3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE1ICs1NCwz
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFy
KCk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwogICAgICAgICBib29sIGhh
c0RhdGEoKSBjb25zdDsKIAotICAgICAgICBLVVJMIHVybDsKLSAgICAgICAgU3RyaW5nIHVybFRp
dGxlOworICAgICAgICB2b2lkIGNsZWFyVVJMKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXJs
ID0gS1VSTCgpOworICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigpOworICAgICAgICAgICAgdXJs
VGl0bGUgPSAiIjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzVmFsaWRVUkwoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdXJsLmlzVmFsaWQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIEtVUkwgZ2V0VVJMKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHVybDsKKyAgICAgICAgfQogCisgICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwm
IG5ld1VSTCkKKyAgICAgICAgeworICAgICAgICAgICAgdXJsID0gbmV3VVJMOworICAgICAgICAg
ICAgdXJpTGlzdC5jbGVhcigpOworICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0
cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB1cmxUaXRsZTsKKyAgICAgICAg
CiAgICAgICAgIEtVUkwgZG93bmxvYWRVUkw7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNp
b247CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKKyAgICAgICAgU3RyaW5nIGZp
bGVFeHRlbnNpb247CiAKICAgICAgICAgU3RyaW5nIHBsYWluVGV4dDsKIApAQCAtNzMsOCArOTcs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBm
aWxlQ29udGVudDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIFVSTCBhbmQgdXJpLWxpc3Qg
YXJlIGxpbmtlZCAtPiBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGluZGl2aWR1YWxseS4KKyAgICAg
ICAgS1VSTCB1cmw7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7CisKICAgICAgICAg
Q2hyb21pdW1EYXRhT2JqZWN0KCkge30KICAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdCYpOworCisgICAgICAgIGZyaWVuZCBjbGFzcyBDbGlwYm9hcmRD
aHJvbWl1bTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24g
NTQyNzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjEgKzUzLDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAvLyBXZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4
dCksIGFuZCB0aGUgY2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBB
cHBsaWNhdGlvbnMgMS4wIGRyYWZ0CiAvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCiAKLWVudW0gQ2xpcGJvYXJk
RGF0YVR5cGUgeyBDbGlwYm9hcmREYXRhVHlwZU5vbmUsIENsaXBib2FyZERhdGFUeXBlVVJMLCBD
bGlwYm9hcmREYXRhVHlwZVRleHQsIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkwgfTsKK2Vu
dW0gQ2xpcGJvYXJkRGF0YVR5cGUgeworICAgIENsaXBib2FyZERhdGFUeXBlTm9uZSwKKworICAg
IENsaXBib2FyZERhdGFUeXBlVVJMLAorICAgIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCwKKyAg
ICBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZURvd25s
b2FkVVJMLAorCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlciwKK307CisKKy8vIFBlciBSRkMg
MjQ4MywgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4K
K3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNlcGFyYXRvciA9ICJc
clxuIjsKIAogc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIFN0cmluZyBjbGVhblR5cGUgPSB0eXBlLnN0
cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgaWYgKGNsZWFuVHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU5vbmU7CiAKLSAgICAvLyB0d28gc3BlY2lh
bCBjYXNlcyBmb3IgSUUgY29tcGF0aWJpbGl0eQorICAgIC8vIEluY2x1ZGVzIHR3byBzcGVjaWFs
IGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5LgogICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQi
IHx8IGNsZWFuVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgY2xlYW5UeXBlLnN0YXJ0c1dpdGgoInRl
eHQvcGxhaW47IikpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHQ7Ci0gICAg
aWYgKGNsZWFuVHlwZSA9PSAidXJsIiB8fCBjbGVhblR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQor
ICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ7CisgICAgaWYgKGNsZWFu
VHlwZSA9PSAidXJsIikKICAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOworICAg
IGlmIChjbGVhblR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQorICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVVUklMaXN0OwogICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJsIikK
ICAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0KLSAgICByZXR1
cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOworICAgICAgICAKKyAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVPdGhlcjsKIH0KIAogQ2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVt
KGJvb2wgaXNGb3JEcmFnZ2luZywKQEAgLTkwLDE0ICsxMDYsMzIgQEAgdm9pZCBDbGlwYm9hcmRD
aHJvbWl1bTo6Y2xlYXJEYXRhKGNvbnN0IAogICAgICAgICByZXR1cm47CiAKICAgICBDbGlwYm9h
cmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7Cisg
ICAgc3dpdGNoIChkYXRhVHlwZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgor
ICAgICAgICAvLyBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgZXhjZXB0
IHRoZSBmaWxlIGxpc3QgbXVzdCBiZSBjbGVhcmVkLgorICAgICAgICAvLyAoU2VlIEhUTUw1IHNw
ZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCisgICAgICAg
IG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKLSAgICAgICAgbV9k
YXRhT2JqZWN0LT51cmwgPSBLVVJMKCk7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dXJsVGl0bGUg
PSAiIjsKLSAgICB9CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlVVJJTGlzdDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSTCgp
OworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5
cGVUZXh0KQorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6CiAgICAgICAgIG1f
ZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgorICAgICAgICBtX2RhdGFPYmpl
Y3QtPmRvd25sb2FkVVJMID0gS1VSTCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlT3RoZXI6CisgICAgICAgIC8vIG5vdCB5ZXQgaW1wbGVtZW50LCBzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKQEAgLTExNSw4ICsxNDksNDggQEAgU3RyaW5n
IENsaXBib2FyZENocm9taXVtOjpnZXREYXRhKGNvbnN0IAogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKICAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9t
TUlNRVR5cGUodHlwZSk7Ci0gICAgU3RyaW5nIHRleHQ7Ci0gICAgaWYgKGRhdGFUeXBlID09IENs
aXBib2FyZERhdGFUeXBlVGV4dCkgeworICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKKyAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlTm9uZToKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0
cmluZyB0ZXh0OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmpl
Y3QtPnVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHVyaSA9IG1fZGF0YU9iamVjdC0+dXJpTGlzdFtpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IXVyaS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3Ip
OworICAgICAgICAgICAgICAgIC8vIFVSSXMgaGF2ZSBhbHJlYWR5IGJlZW4gY2Fub25pY2FsaXpl
ZCwgc28gY29weSBldmVyeXRoaW5nIHZlcmJhdGltLgorICAgICAgICAgICAgICAgIHRleHQuYXBw
ZW5kKHVyaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBbHNvIGNyZWF0ZSBmaWxl
Oi8vIFVSTHMgb3V0IG9mIHRoZSBlbnRyaWVzIGluIHRoZSBmaWxlIGxpc3QuCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVVUkwgPSBDaHJvbWl1bUJyaWRnZTo6
ZmlsZVBhdGhUb1VSTChtX2RhdGFPYmplY3QtPmZpbGVuYW1lc1tpXSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFmaWxlVVJMLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQodGV4dE1JTUVUeXBl
TGluZVNlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQoZmlsZVVSTCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOworICAg
ICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVVUkw6CisgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBwcmV2aW91cyBzZXREYXRhKCd0ZXh0
L3VyaS1saXN0JyksIHNldERhdGEoKSBoYXMgYWxyZWFkeQorICAgICAgICAvLyBwcmVwYXJlZCB0
aGUgJ3VybCcgbWVtYmVyLCBzbyB3ZSBjYW4ganVzdCByZXRyaWV2ZSBpdCBoZXJlLgorICAgICAg
ICBpZiAoIW1fZGF0YU9iamVjdC0+dXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwuc3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gT3RoZXJ3c2UgY2hlY2sgaWYgd2UgaGF2ZSBhIGZpbGUg
dGhhdCB3ZSBjb3VsZCBjb252ZXJ0IHRvIGEgZmlsZTovLyBVUkwuCisgICAgICAgIGlmICghbV9k
YXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTCht
X2RhdGFPYmplY3QtPmZpbGVuYW1lc1swXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIAorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6CiAgICAg
ICAgIGlmICghaXNGb3JEcmFnZ2luZygpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0
IGZvciBhIGRyYWcsIGl0J3MgZm9yIGEgY3V0L3Bhc3RlIGV2ZW50IGhhbmRsZXIuCiAgICAgICAg
ICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNsaXBib2FyZC4KQEAg
LTEyNCwyMiArMTk4LDI4IEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25z
dCAKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1Nl
bGVjdGlvbk1vZGUoKSA/CiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVj
dGlvbkJ1ZmZlciA6IAogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFy
ZEJ1ZmZlcjsKLSAgICAgICAgICAgIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwogICAgICAgICAgICAgc3VjY2Vz
cyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9kYXRhT2JqZWN0LT5w
bGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHRleHQgPSBtX2RhdGFPYmplY3QtPnBsYWluVGV4dDsKKyAgICAgICAgICAgIHJldHVy
biB0ZXh0OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSBDbGlwYm9hcmRE
YXRhVHlwZVVSTCkgewotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBjdXQvcGFzdGUgZXZl
bnQuICBUaGlzIHJlcXVpcmVzIGFkZGluZyBhIG5ldyBJUEMKLSAgICAgICAgLy8gbWVzc2FnZSB0
byBnZXQgdGhlIFVSTCBmcm9tIHRoZSBjbGlwYm9hcmQgZGlyZWN0bHkuCi0gICAgICAgIGlmICgh
bV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE90aGVyd2lzZSByZXR1
cm4gd2hhdGV2ZXIgaXMgc3RvcmVkIGluIHBsYWluVGV4dC4KKyAgICAgICAgc3VjY2VzcyA9ICFt
X2RhdGFPYmplY3QtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX2RhdGFP
YmplY3QtPnBsYWluVGV4dDsKKyAgICAgICAgCisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURv
d25sb2FkVVJMOgorICAgICAgICBpZiAoIW1fZGF0YU9iamVjdC0+ZG93bmxvYWRVUkwuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIHRleHQgPSBt
X2RhdGFPYmplY3QtPnVybC5zdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGFPYmpl
Y3QtPmRvd25sb2FkVVJMLnN0cmluZygpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6CisgICAgICAgIC8v
IG5vdCB5ZXQgaW1wbGVtZW50LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0NDEwCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gdGV4dDsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0xNDcsMjYgKzIyNyw1NCBAQCBib29sIENsaXBib2Fy
ZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZSB3aW5UeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKKyAgICBDbGlwYm9h
cmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7Cisg
ICAgc3dpdGNoIChkYXRhVHlwZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAod2luVHlwZSA9PSBDbGlwYm9hcmREYXRh
VHlwZVVSTCkgewotICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQoKTsK
LSAgICB9CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICAgICAgLy8gRm9yIHNl
dERhdGEoKSwgIlVSTCIgbXVzdCBiZSB0cmVhdGVkIGFzICJ0ZXh0L3VyaS1saXN0Ii4KKyAgICAg
ICAgLy8gKFNlZSBIVE1MNSBzcGVjLCAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGlu
dGVyZmFjZXMiKQorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgorICAgICAgICBt
X2RhdGFPYmplY3QtPnVybCA9IEtVUkwoKTsKKyAgICAgICAgZGF0YS5zcGxpdCh0ZXh0TUlNRVR5
cGVMaW5lU2VwYXJhdG9yLCBtX2RhdGFPYmplY3QtPnVyaUxpc3QpOworICAgICAgICBpZiAobV9k
YXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmlz
RW1wdHkoKTsKKyAgICAgICAgLy8gQ29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1
cmwnIG1lbWJlciBhcyB3ZWxsLgorICAgICAgICAvLyBJbiBjYXNlIG5vZSBlbnRyeSBpcyBhIHZh
bGlkIFVSTCAoaS5lLiwgcmVtYXJrcyBhbmQgVVJOcyBvbmx5KSwgdGhlbiB3ZSBsZWF2ZSAndXJs
JyBlbXB0eS4KKyAgICAgICAgLy8gSS5lLiwgaW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgY2FsbHMg
dG8gZ2V0RGF0YSgiVVJMIikgd2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAvLyBU
aGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlICJUaGUgRHJhZ0V2ZW50IGFu
ZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiB1cmkgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3RbaV07CisgICAgICAgICAgICBB
U1NFUlQoIXVyaS5pc0VtcHR5KCkpOyAvLyBTdHJpbmc6OnNwbGl0KCkgc2hvdWxkIG5vdCBjcmVh
dGUgZW1wdHkgZW50cmllcyEKKyAgICAgICAgICAgIC8vIFNraXAgcmVtYXJrcy4KKyAgICAgICAg
ICAgIGlmICh1cmlbMF0gPT0gJyMnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJpKTsKKyAgICAgICAgICAg
IGlmICh1cmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwg
PSB1cmw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAod2luVHlwZSA9PSBDbGlwYm9hcmREYXRh
VHlwZVRleHQpIHsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgogICAgICAg
ICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IGRhdGE7CiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBpZiAod2luVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2Fk
VVJMKSB7Ci0gICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGRhdGEpOwot
ICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9kYXRhT2JqZWN0LT5k
b3dubG9hZFVSTCA9IHVybDsKKworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVS
TDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3dubG9hZFVSTCA9IEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBkYXRhKTsKKyAgICAgICAgaWYgKG1fZGF0YU9iamVjdC0+ZG93bmxvYWRVUkwuaXNWYWxp
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgbV9kYXRh
T2JqZWN0LT5kb3dubG9hZFVSTCA9IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKKyAgICAgICAgLy8gbm90IHlldCBp
bXBsZW1lbnQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0
MTAKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTgwLDExICsyODgsMTkgQEAgSGFzaFNl
dDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcwogICAgIGlmICghbV9kYXRhT2JqZWN0
KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAgIGlmICghbV9kYXRhT2JqZWN0LT5maWxl
bmFtZXMuaXNFbXB0eSgpKQorICAgIGlmICghbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgICAgIHJl
c3VsdHMuYWRkKCJGaWxlcyIpOworICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3QtPnVybC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0
eSgpKTsKICAgICAgICAgcmVzdWx0cy5hZGQoIlVSTCIpOworICAgIH0KKworICAgIGlmICghbV9k
YXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOb3RlIHRoYXQgZXZl
biBpZiB0aGUgVVJJIGxpc3QgaXMgbm90IGVtcHR5LCBpciBtYXkgbm90IGFjdHVhbGx5CisgICAg
ICAgIC8vIGNvbnRhaW4gYSB2YWxpZCBVUkwsIHNvIHdlIGNhbid0IHJldHVybiAiVVJMIiBoZXJl
LgogICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOwogICAgIH0KIApAQCAtMTky
LDcgKzMwOCw3IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMKICAg
ICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKICAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvcGxh
aW4iKTsKICAgICB9Ci0KKyAgICAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA1NDI3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNVUkwoKSBjb25zdAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChTdHJpbmcqIHRpdGxlKSBjb25z
dAogewogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsLmlz
VmFsaWQoKSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmwuc3RyaW5nKCk7
CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKSkKKyAgICAgICAgdXJs
ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmcoKTsKICAgICBlbHNlIGlmICht
X3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewogICAgICAgICBTdHJp
bmcgZmlsZU5hbWUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lc1swXTsKICAgICAgICAg
ZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGZpbGVOYW1lKTsKQEAg
LTExMyw3ICsxMTMsNyBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAog
ICAgIC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUs
IGRyYWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVp
bmcgYWRkZWQuCiAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0Vt
cHR5KCkKLSAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsLmlzVmFsaWQoKTsKKyAg
ICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsKIH0KIAogYm9vbCBE
cmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU0Mjc2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTAyLTAzICBSb2xhbmQgU3RlaW5lciAgPHJv
bGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFu
c2Zlci5nZXRkYXRhKCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRh
KCJVUkwiKQorICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjkzKQorICAgICAgICAKKyAgICAgICAgQ2hhbmdlIENocm9taXVtRGF0YU9iamVjdCBzdWNo
IHRoYXQgaXQgdHJlYXRzIHR5cGVzICJVUkwiIGFuZCAidGV4dC91cmktbGlzdCIKKyAgICAgICAg
Y29ycmVjdGx5IGZvciBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YS9zZXREYXRhLgorCisgICAg
ICAgIFRlc3RzOiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0
YS5odG1sCisKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnRGF0YTo6dXJsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFVS
TCk6CisKIDIwMTAtMDItMDIgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRyYWdEYXRhLmNwcAkocmV2aXNpb24gNTQyNzMpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRyYWdEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDEzIEBA
IHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihjb25zdCBXZWJEcmFnRGEKIFdlYlVSTCBXZWJEcmFn
RGF0YTo6dXJsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT51cmw7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VVJMKCk7CiB9CiAKIHZv
aWQgV2ViRHJhZ0RhdGE6OnNldFVSTChjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBlbnN1cmVN
dXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT51cmwgPSB1cmw7CisgICAgbV9wcml2YXRlLT5zZXRV
UkwodXJsKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmxUaXRsZSgpIGNvbnN0Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA1NDI3NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEwLTAyLTAzICBSb2xhbmQgU3RlaW5lciAgPHJv
bGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJ1ZyAyODI5MyAtICBbQ2hyb21pdW1dIGV2ZW50LmRhdGF0cmFu
c2Zlci5nZXRkYXRhKCJ0ZXh0L3VyaS1saXN0IikgdHJlYXRlZCB0aGUgc2FtZSBhcyBnZXRkYXRh
KCJVUkwiKQorICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjkzKQorICAgICAgICAKKyAgICAgICAgQ2hhbmdlIENocm9taXVtRGF0YU9iamVjdCBzdWNo
IHRoYXQgaXQgdHJlYXRzIHR5cGVzICJVUkwiIGFuZCAidGV4dC91cmktbGlzdCIKKyAgICAgICAg
Y29ycmVjdGx5IGZvciBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YS9zZXREYXRhLgorICAgICAg
ICAKKyAgICAgICAgTGF5b3V0IHRlc3QgY2hlY2tzIHZhcmlvdXMgY29tYmluYXRpb25zIGluIGEg
ZHJhZy1uLWRyb3Agb3BlcmF0aW9uLgorICAgICAgICBTa2lwcGluZyBvbiBhbGwgb3RoZXIgcGxh
dGZvcm1zIHNpbmNlIHRoZXkgZG9uJ3QgaW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LCBlaXRoZXIu
CisKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0
RGF0YS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRl
c3RzL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuanM6IEFkZGVkLgorICAgICAgICAoZHJh
Z1RhcmdldCk6CisgICAgICAgIChtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudCk6CisgICAgICAg
IChkcmFnT250b0RyYWdUYXJnZXQpOgorICAgICAgICAoZG9Ecm9wKToKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tp
cHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMC0wMi0wMyAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1YmJlci1zdGFt
cGVkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5z
ZmVyLXNldERhdGEtZ2V0RGF0YS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJv
YXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1n
ZXREYXRhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorVGVzdHMgY29ycmVjdCBiZWhhdmlvciBvZiBldmVu
dC5kYXRhVHJhbnNmZXIuc2V0RGF0YS9nZXREYXRhIGZvciAnVVJMJywgJ3RleHQvdXJpLWxpc3Qn
IGFuZCAndGV4dC9wbGFpbicKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKy0tLSBU
ZXN0IHNldC9nZXQgJ1VSTCc6CitPbiBkcmFnc3RhcnQ6CitPbiBkcmFnZW50ZXI6CitPbiBkcmFn
b3ZlcjoKK09uIGRyb3A6CitQQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCitQQVNT
IGdldERhdGFMaW5lcy5sZW5ndGggaXMgMQorUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgv
XC8kLywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCistLS0gVGVzdCBzZXQvZ2V0ICd0ZXh0L3Vy
aS1saXN0JzoKK09uIGRyYWdzdGFydDoKK09uIGRyYWdlbnRlcjoKK09uIGRyYWdvdmVyOgorT24g
ZHJvcDoKK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKK1BBU1MgZ2V0RGF0YUxp
bmVzLmxlbmd0aCBpcyAyCitQQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAnJykg
aXMgImh0dHA6Ly90ZXN0LmNvbSIKK1BBU1MgZ2V0RGF0YUxpbmVzWzFdLnJlcGxhY2UoL1wvJC8s
ICcnKSBpcyAiaHR0cDovL2NoZWNrLmNvbSIKKy0tLSBUZXN0IHNldCAndGV4dC91cmktbGlzdCcs
IGdldCAnVVJMJzoKK09uIGRyYWdzdGFydDoKK09uIGRyYWdlbnRlcjoKK09uIGRyYWdvdmVyOgor
T24gZHJvcDoKK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKK1BBU1MgZ2V0RGF0
YUxpbmVzLmxlbmd0aCBpcyAxCitQQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAn
JykgaXMgImh0dHA6Ly90ZXN0LmNvbSIKKy0tLSBUZXN0IHNldC9nZXQgJ3RleHQvdXJpLWxpc3Qn
IHdpdGggY29tbWVudHM6CitPbiBkcmFnc3RhcnQ6CitPbiBkcmFnZW50ZXI6CitPbiBkcmFnb3Zl
cjoKK09uIGRyb3A6CitQQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCitQQVNTIGdl
dERhdGFMaW5lcy5sZW5ndGggaXMgMgorUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgvXC8k
LywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCitQQVNTIGdldERhdGFMaW5lc1sxXS5yZXBsYWNl
KC9cLyQvLCAnJykgaXMgImh0dHA6Ly9jaGVjay5jb20iCistLS0gVGVzdCBzZXQvZ2V0ICd0ZXh0
L3BsYWluJzoKK09uIGRyYWdzdGFydDoKK09uIGRyYWdlbnRlcjoKK09uIGRyYWdvdmVyOgorT24g
ZHJvcDoKK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKK1BBU1MgZ2V0RGF0YUxp
bmVzLmxlbmd0aCBpcyAxCitQQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAnJykg
aXMgIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0
ZWJvYXJkL3NjcmlwdC10ZXN0cy9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0
YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0
RGF0YS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjIgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0
cyBjb3JyZWN0IGJlaGF2aW9yIG9mIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhL2dldERhdGEg
Zm9yICdVUkwnLCAndGV4dC91cmktbGlzdCcgYW5kICd0ZXh0L3BsYWluJyIpOworCisvLyBJbXBv
cnRhbnQgdGhhdCB3ZSBwdXQgdGhlc2UgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9n
Z2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAoYW5kIGJlIHVuZHJhZ2Fi
bGUpCit2YXIgZHJhZ01lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkcmFnTWUu
aW5uZXJIVE1MID0gIjxzcGFuIGlkPSdkcmFnbWUnPkRyYWcgbWU8L3NwYW4+IjsKK2RvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGRyYWdNZSwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKK3Zh
ciBkcmFnVGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkcmFnVGFyZ2V0
LmlubmVySFRNTCA9ICJEcmFnIGhlcmUiCitkcmFnVGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xv
ciA9ICJibHVlIjsKK2RyYWdUYXJnZXQuc3R5bGUud2lkdGggPSAiMTAwcHgiOworZHJhZ1Rhcmdl
dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoZHJh
Z1RhcmdldCwgZHJhZ01lKTsKKwordmFyIHNldERhdGFUeXBlOwordmFyIHNldERhdGFWYWx1ZXM7
Cit2YXIgZ2V0RGF0YVR5cGU7Cit2YXIgZ2V0RGF0YVZhbHVlczsKK3ZhciBnZXREYXRhUmVzdWx0
OwordmFyIGdldERhdGFSZXN1bHRUeXBlOwordmFyIGdldERhdGFMaW5lczsKKwordmFyIENSTEYg
PSAiXHJcbiI7CisKK2RyYWdNZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLCBmdW5jdGlv
bigpIHsKKyAgICBkZWJ1ZygiT24gZHJhZ3N0YXJ0OiIpOworICAgIGV2ZW50LmRhdGFUcmFuc2Zl
ci5zZXREYXRhKHNldERhdGFUeXBlLCBzZXREYXRhVmFsdWVzLmpvaW4oQ1JMRikpOworfSwgZmFs
c2UpOworCitkcmFnVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9u
KCkgeworICAgIGRlYnVnKCJPbiBkcmFnZW50ZXI6Iik7CisgICAgZXZlbnQuZGF0YVRyYW5zZmVy
LmRyb3BFZmZlY3QgPSAiY29weSI7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30sIGZh
bHNlKTsKKworZHJhZ1RhcmdldC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9u
KCkgeworICAgIGRlYnVnKCJPbiBkcmFnb3ZlcjoiKTsKKyAgICBldmVudC5kYXRhVHJhbnNmZXIu
ZHJvcEVmZmVjdCA9ICJjb3B5IjsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfSwgZmFs
c2UpOworCitkcmFnVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsK
KyAgICBkb0Ryb3AoKTsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfSwgZmFsc2UpOwor
CitmdW5jdGlvbiBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChlbGVtZW50KQoreworICAgIHZh
ciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7
CisgICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVp
Z2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsK
K30KKworZnVuY3Rpb24gZHJhZ09udG9EcmFnVGFyZ2V0KCkgeworICAgIHZhciBlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImRyYWdtZSIpOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5z
ZXRCYXNlQW5kRXh0ZW50KGUsIDAsIGUsIDQpOyAKKyAgICB4ID0gZS5vZmZzZXRMZWZ0ICsgMTA7
CisgICAgeSA9IGUub2Zmc2V0VG9wICsgZS5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAg
IGV2ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDQwMCk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZHJhZ1RhcmdldCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCitmdW5j
dGlvbiBkb0Ryb3AoKSB7CisgICAgZGVidWcoIk9uIGRyb3A6Iik7CisgICAgZ2V0RGF0YVJlc3Vs
dCA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKGdldERhdGFUeXBlKTsKKyAgICBnZXREYXRh
UmVzdWx0VHlwZSA9IHR5cGVvZiBnZXREYXRhUmVzdWx0OworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygiZ2V0RGF0YVJlc3VsdFR5cGUiLCAic3RyaW5nIik7CisgICAgZ2V0RGF0YUxpbmVzID0g
Z2V0RGF0YVJlc3VsdC5zcGxpdChDUkxGKTsgICAgCisgICAgLy8gcmVtb3ZlIHBvdGVudGlhbCBj
b21tZW50cworICAgIGdldERhdGFMaW5lcyA9IGdldERhdGFMaW5lcy5maWx0ZXIoZnVuY3Rpb24o
bGluZSkgeworICAgICAgcmV0dXJuIGxpbmVbMF0gIT09ICcjJzsKKyAgICB9KTsKKyAgICBzaG91
bGRFdmFsdWF0ZVRvKCJnZXREYXRhTGluZXMubGVuZ3RoIiwgZ2V0RGF0YVZhbHVlcy5sZW5ndGgp
OworICAgIGZvciAoaSA9IDA7IGkgPCBnZXREYXRhTGluZXMubGVuZ3RoICYmIGkgPCBnZXREYXRh
VmFsdWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0
RGF0YUxpbmVzWyIgKyBpICsgIl0ucmVwbGFjZSgvXFwvJC8sICcnKSIsIGdldERhdGFWYWx1ZXNb
aV0pOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChzZXRUeXBlLCBzZXRWYWx1ZXMsIGdldFR5
cGUsIGdldFZhbHVlcykgeworICAgIHNldERhdGFUeXBlID0gc2V0VHlwZTsKKyAgICBzZXREYXRh
VmFsdWVzID0gc2V0VmFsdWVzOworICAgIGdldERhdGFUeXBlID0gZ2V0VHlwZTsKKyAgICBnZXRE
YXRhVmFsdWVzID0gZ2V0VmFsdWVzOworICAgIGRyYWdPbnRvRHJhZ1RhcmdldCgpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dldCAnVVJMJzoi
KTsKKyAgICB0ZXN0KCJVUkwiLCBbImh0dHA6Ly90ZXN0LmNvbSJdLCAKKyAgICAgICAgICJVUkwi
LCBbImh0dHA6Ly90ZXN0LmNvbSJdKTsKKworICAgIGRlYnVnKCItLS0gVGVzdCBzZXQvZ2V0ICd0
ZXh0L3VyaS1saXN0JzoiKTsKKyAgICB0ZXN0KCJ0ZXh0L3VyaS1saXN0IiwgWyJodHRwOi8vdGVz
dC5jb20iLCAiaHR0cDovL2NoZWNrLmNvbSJdLCAKKyAgICAgICAgICJ0ZXh0L3VyaS1saXN0Iiwg
WyJodHRwOi8vdGVzdC5jb20iLCAiaHR0cDovL2NoZWNrLmNvbSJdKTsKKworICAgIGRlYnVnKCIt
LS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCc6Iik7CisgICAgdGVzdCgidGV4
dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSwgCisg
ICAgICAgICAiVVJMIiwgWyJodHRwOi8vdGVzdC5jb20iXSk7CisKKyAgICBkZWJ1ZygiLS0tIFRl
c3Qgc2V0L2dldCAndGV4dC91cmktbGlzdCcgd2l0aCBjb21tZW50czoiKTsKKyAgICB0ZXN0KCJ0
ZXh0L3VyaS1saXN0IiwgWyIjIGNvbW1lbnQiLCAiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9j
aGVjay5jb20iXSwgCisgICAgICAgICAidGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29t
IiwgImh0dHA6Ly9jaGVjay5jb20iXSk7CisKKyAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dldCAn
dGV4dC9wbGFpbic6Iik7CisgICAgdGVzdCgidGV4dC9wbGFpbiIsIFsiTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQuIl0sIAorICAgICAgICAgInRleHQvcGxhaW4iLCBbIkxvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LiJdKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1
blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICBkcmFnTWUucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChkcmFnTWUpOworICAgIGRyYWdUYXJnZXQucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChkcmFnVGFyZ2V0KTsKK30gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgiVGhpcyB0
ZXN0IGlzIG5vdCBpbnRlcmFjdGl2ZSwgcGxlYXNlIHJ1biB1c2luZyBEdW1wUmVuZGVyVHJlZSIp
OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDU0MjczKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTUzOTUsNiArNTM5NSw3IEBAIGZhc3QvZXZl
bnRzL3RhYi1mb2N1cy1hbmNob3IuaHRtbAogaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVt
b3RlLWNvbnRlbnQuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9kcmFnLW92ZXItcmVtb3RlLWNv
bnRlbnQtaWZyYW1lLmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2NsaXBib2Fy
ZC1maWxlLWFjY2Vzcy5odG1sCitodHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9kYXRhVHJh
bnNmZXItc2V0RGF0YS1nZXREYXRhLmh0bWwKIAogIyBUZXN0cyB0aGF0IHJlcXVpcmUgZWRpdGlu
ZyBjYWxsYmFja3MgKGFuZCBwb3NzaWJseSBHbGliIERPTSBiaW5kaW5ncykKIGVkaXRpbmcvZXhl
Y0NvbW1hbmQvaW5kZW50LXdpdGgtc3R5bGUuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Nr
aXBwZWQJKHJldmlzaW9uIDU0MjczKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQJKHdvcmtpbmcgY29weSkKQEAgLTExMSwzICsxMTEsNyBAQCBodHRwL3Rlc3RzL21lZGlhL3Zp
ZGVvLWNvb2tpZS5odG1sCiAjIEZhaWxzIG9uIE1hYwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzQzMzEKIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcmVmZXJlci5o
dG1sCisKKyMgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvdXJpLWxpc3QnKSBub3Qg
Y29ycmVjdGx5IGltcGxlbWVudGVkIG9uIE1hYworaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9h
cmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5odG1sCisKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAkocmV2aXNpb24gNTQyNzMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDcgQEAgZmFzdC9mb3Jtcy9nZXQt
ZmlsZS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLXJlLXJlbmRlci5odG1sCiBm
YXN0L2V2ZW50cy9kcmFnLWZpbGUtY3Jhc2guaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlw
Ym9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKK2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xp
cGJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAogCiAjIE1pc3NpbmcgZHJh
ZyAmIGRyb3AgZnVuY3Rpb25hbGl0eSBpbiBEUlQKIGZhc3QvaW1hZ2VzL2RyYWctc3ZnLWFzLWlt
YWdlLmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA1NDI3MykK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODcsNiArMTg3LDcgQEAgZmFzdC9ldmVudHMvcHJldmVudC1kcmFnLXRvLW5hdmlnYXRlLmh0bQog
ZmFzdC9mb3Jtcy9nZXQtZmlsZS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLXJl
LXJlbmRlci5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9jbGlwYm9hcmQtZmls
ZS1hY2Nlc3MuaHRtbAoraHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvZGF0YVRyYW5zZmVy
LXNldERhdGEtZ2V0RGF0YS5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWZpbGUtY3Jhc2guaHRtbAog
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49884</attachid>
            <date>2010-03-03 00:07:55 -0800</date>
            <delta_ts>2010-03-09 14:37:27 -0800</delta_ts>
            <desc>patch - fixed after mid-air collision, improved robustness, new test case</desc>
            <filename>clip.patch</filename>
            <type>text/plain</type>
            <size>29089</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTM2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDMtMDEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCisKKyAg
ICAgICAgQnVnIDI4MjkzIC0gIFtDaHJvbWl1bV0gZXZlbnQuZGF0YXRyYW5zZmVyLmdldGRhdGEo
InRleHQvdXJpLWxpc3QiKSBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIGdldGRhdGEoIlVSTCIpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI5MworICAg
ICAgICAKKyAgICAgICAgQ2hhbmdlIENocm9taXVtRGF0YU9iamVjdCBzdWNoIHRoYXQgaXQgdHJl
YXRzIHR5cGVzICJVUkwiIGFuZCAidGV4dC91cmktbGlzdCIKKyAgICAgICAgY29ycmVjdGx5IGZv
ciBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YS9zZXREYXRhLiBDdXJyZW50bHkgYm90aCBhcmUg
dHJlYXRlZAorICAgICAgICBhcyBzeW5vbnltcywgYnV0IGZvciAiVVJMIiwgZ2V0RGF0YSBpcyBz
dXBwb3NlZCB0byBvbmx5IHJldHVybiB0aGUgZmlyc3QgdmFsaWQgVVJMCisgICAgICAgIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIGRhdGEgZm9yICJ0ZXh0L3VyaS1saXN0IiAoc2VlIEhUTUw1IHNwZWMp
LgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERh
dGEtZ2V0RGF0YS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0
RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNWYWxpZFVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNv
cmU6OmNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkQ2hyb21pdW06OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJv
bWl1bTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpj
YW5TbWFydFJlcGxhY2UpOgorCiAyMDEwLTAyLTI4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCShy
ZXZpc2lvbiA1NTM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyKCkKIHsKKyAgICBjbGVh
ckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgZmlsZW5hbWVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKK3sKICAgICB1cmwgPSBLVVJM
KCk7CiAgICAgdXJsVGl0bGUgPSAiIjsKKyAgICB1cmlMaXN0LmNsZWFyKCk7CiAgICAgZG93bmxv
YWRNZXRhZGF0YSA9ICIiOwogICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBmaWxlbmFtZXMu
Y2xlYXIoKTsKICAgICBwbGFpblRleHQgPSAiIjsKICAgICB0ZXh0SHRtbCA9ICIiOwogICAgIGh0
bWxCYXNlVXJsID0gS1VSTCgpOwpAQCAtNTEsNiArNTcsNyBAQCB2b2lkIENocm9taXVtRGF0YU9i
amVjdDo6Y2xlYXIoKQogYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAog
ewogICAgIHJldHVybiAhdXJsLmlzRW1wdHkoKQorICAgICAgICB8fCAhdXJpTGlzdC5pc0VtcHR5
KCkKICAgICAgICAgfHwgIWRvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpCiAgICAgICAgIHx8ICFm
aWxlRXh0ZW5zaW9uLmlzRW1wdHkoKQogICAgICAgICB8fCAhZmlsZW5hbWVzLmlzRW1wdHkoKQpA
QCAtNjAsOCArNjcsNyBAQCBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
CiB9CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9t
aXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiB1cmwob3RoZXIudXJsKQotICAgICwgdXJsVGl0
bGUob3RoZXIudXJsVGl0bGUpCisgICAgOiB1cmxUaXRsZShvdGhlci51cmxUaXRsZSkKICAgICAs
IGRvd25sb2FkTWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0YSkKICAgICAsIGZpbGVFeHRl
bnNpb24ob3RoZXIuZmlsZUV4dGVuc2lvbikKICAgICAsIGZpbGVuYW1lcyhvdGhlci5maWxlbmFt
ZXMpCkBAIC02OSw2ICs3NSw4IEBAIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2Jq
ZWN0KGMKICAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1sKQogICAgICwgaHRtbEJhc2VVcmwo
b3RoZXIuaHRtbEJhc2VVcmwpCiAgICAgLCBmaWxlQ29udGVudEZpbGVuYW1lKG90aGVyLmZpbGVD
b250ZW50RmlsZW5hbWUpCisgICAgLCB1cmwob3RoZXIudXJsKQorICAgICwgdXJpTGlzdChvdGhl
ci51cmlMaXN0KQogewogICAgIGlmIChvdGhlci5maWxlQ29udGVudC5nZXQoKSkKICAgICAgICAg
ZmlsZUNvbnRlbnQgPSBvdGhlci5maWxlQ29udGVudC0+Y29weSgpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCShyZXZpc2lvbiA1NTM2
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2Vw
dEZpbGVzKCk7CiAgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OwogCi0gICAgICAgIEtVUkwg
dXJsOworICAgICAgICB2b2lkIGNsZWFyVVJMKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXJs
ID0gS1VSTCgpOworICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigpOworICAgICAgICAgICAgdXJs
VGl0bGUgPSAiIjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzVmFsaWRVUkwoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdXJsLmlzVmFsaWQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIEtVUkwgZ2V0VVJMKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHVybDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwm
IG5ld1VSTCkKKyAgICAgICAgeworICAgICAgICAgICAgdXJsID0gbmV3VVJMOworICAgICAgICAg
ICAgdXJpTGlzdC5jbGVhcigpOworICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0
cmluZygpKTsKKyAgICAgICAgfQorCiAgICAgICAgIFN0cmluZyB1cmxUaXRsZTsKIAogICAgICAg
ICBTdHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKQEAgLTczLDggKzk3LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQ7CiAKICAg
ICBwcml2YXRlOgorICAgICAgICAvLyBVUkwgYW5kIHVyaS1saXN0IGFyZSBsaW5rZWQsIHNvIHRo
ZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRpdmlkdWFsbHkuCisgICAgICAgIEtVUkwgdXJs
OworICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OworCiAgICAgICAgIENocm9taXVtRGF0
YU9iamVjdCgpIHt9CiAgICAgICAgIENocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURh
dGFPYmplY3QmKTsKKworICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU1MzYwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDIxICs1MywzNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogLy8g
V2UgcHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVzIChVUkwgYW5kIFRleHQpLCBhbmQgdGhl
IGNsaXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhlIFdIQVRXRyBXZWIgQXBwbGljYXRpb25z
IDEuMCBkcmFmdAogLy8gc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9j
dXJyZW50LXdvcmsvIFNlY3Rpb24gNi4zLjUuMwogCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsg
Q2xpcGJvYXJkRGF0YVR5cGVOb25lLCBDbGlwYm9hcmREYXRhVHlwZVVSTCwgQ2xpcGJvYXJkRGF0
YVR5cGVUZXh0LCBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMIH07CitlbnVtIENsaXBib2Fy
ZERhdGFUeXBlIHsKKyAgICBDbGlwYm9hcmREYXRhVHlwZU5vbmUsCisKKyAgICBDbGlwYm9hcmRE
YXRhVHlwZVVSTCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCisgICAgQ2xpcGJvYXJk
RGF0YVR5cGVEb3dubG9hZFVSTCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dCwKKwor
ICAgIENsaXBib2FyZERhdGFUeXBlT3RoZXIsCit9OworCisvLyBQZXIgUkZDIDI0ODMsIHRoZSBs
aW5lIHNlcGFyYXRvciBmb3IgInRleHQvLi4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgorc3RhdGlj
IGNoYXIgY29uc3QqIGNvbnN0IHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CiAK
IHN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKIHsKICAgICBTdHJpbmcgY2xlYW5UeXBlID0gdHlwZS5zdHJpcFdoaXRl
U3BhY2UoKS5sb3dlcigpOworICAgIGlmIChjbGVhblR5cGUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOwogCi0gICAgLy8gdHdvIHNwZWNpYWwgY2FzZXMg
Zm9yIElFIGNvbXBhdGliaWxpdHkKKyAgICAvLyBJbmNsdWRlcyB0d28gc3BlY2lhbCBjYXNlcyBm
b3IgSUUgY29tcGF0aWJpbGl0eS4KICAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBjbGVh
blR5cGUgPT0gInRleHQvcGxhaW4iIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWlu
OyIpKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OwotICAgIGlmIChjbGVh
blR5cGUgPT0gInVybCIgfHwgY2xlYW5UeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAg
cmV0dXJuIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OworICAgIGlmIChjbGVhblR5cGUgPT0g
InVybCIpCiAgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVSTDsKKyAgICBpZiAoY2xl
YW5UeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlVVJJTGlzdDsKICAgICBpZiAoY2xlYW5UeXBlID09ICJkb3dubG9hZHVybCIpCiAgICAgICAg
IHJldHVybiBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOwogCi0gICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlTm9uZTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjsKIH0K
IAogQ2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKGJvb2wgaXNGb3JEcmFnZ2lu
ZywKQEAgLTkwLDE0ICsxMDYsMzIgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRh
KGNvbnN0IAogICAgICAgICByZXR1cm47CiAKICAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlw
ZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CisgICAgc3dpdGNoIChkYXRhVHlw
ZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgorICAgICAgICAvLyBJZiBjYWxs
ZWQgd2l0aCBubyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBmaWxlIGxpc3QgbXVz
dCBiZSBjbGVhcmVkLgorICAgICAgICAvLyAoU2VlIEhUTUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50
IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xl
YXJBbGxFeGNlcHRGaWxlcygpOworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZGF0YVR5cGUg
PT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBL
VVJMKCk7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dXJsVGl0bGUgPSAiIjsKLSAgICB9CisgICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJ
TGlzdDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSTCgpOworICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KQorICAgIGNhc2Ug
Q2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3du
bG9hZE1ldGFkYXRhID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDoKICAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRl
eHQgPSAiIjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90
aGVyOgorICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudCwgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQxMAorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNs
ZWFyQWxsRGF0YSgpCkBAIC0xMTUsOCArMTQ5LDUyIEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1
bTo6Z2V0RGF0YShjb25zdCAKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgQ2xpcGJv
YXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOwot
ICAgIFN0cmluZyB0ZXh0OwotICAgIGlmIChkYXRhVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRl
eHQpIHsKKyAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZU5vbmU6CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVVUklMaXN0OgorICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmkgPSBtX2RhdGFPYmpl
Y3QtPnVyaUxpc3RbaV07CisgICAgICAgICAgICAgICAgQVNTRVJUKCF1cmkuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICB0ZXh0LmFwcGVuZCh0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKKyAgICAgICAgICAgICAg
ICAvLyBVUklzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbm9uaWNhbGl6ZWQsIHNvIGNvcHkgZXZlcnl0
aGluZyB2ZXJiYXRpbS4KKyAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh1cmkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gQWxzbyBjcmVhdGUgZmlsZTovLyBVUkxzIG91dCBvZiB0
aGUgZW50cmllcyBpbiB0aGUgZmlsZSBsaXN0LgorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIFN0cmluZyBmaWxlVVJMID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwobV9k
YXRhT2JqZWN0LT5maWxlbmFtZXNbaV0pOworICAgICAgICAgICAgICAgIEFTU0VSVCghZmlsZVVS
TC5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IpOwor
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKGZpbGVVUkwpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiB0
ZXh0OworICAgICAgICB9CisKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgorICAgICAg
ICAvLyBJbiBjYXNlIG9mIGEgcHJldmlvdXMgc2V0RGF0YSgndGV4dC91cmktbGlzdCcpLCBzZXRE
YXRhKCkgaGFzIGFscmVhZHkKKyAgICAgICAgLy8gcHJlcGFyZWQgdGhlICd1cmwnIG1lbWJlciwg
c28gd2UgY2FuIGp1c3QgcmV0cmlldmUgaXQgaGVyZS4KKyAgICAgICAgaWYgKCFtX2RhdGFPYmpl
Y3QtPnVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsLnN0cmluZygpOworICAgICAgICB9CisgICAg
ICAgIC8vIE90aGVyd2lzZSBjaGVjayBpZiB3ZSBoYXZlIGEgZmlsZSB0aGF0IHdlIGNvdWxkIGNv
bnZlcnQgdG8gYSBmaWxlOi8vIFVSTC4KKyAgICAgICAgaWYgKCFtX2RhdGFPYmplY3QtPmZpbGVu
YW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKG1fZGF0YU9iamVjdC0+Zmls
ZW5hbWVzWzBdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9k
YXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0YTsKKyAgICAKKyAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlUGxhaW5UZXh0OgogICAgICAgICBpZiAoIWlzRm9yRHJhZ2dpbmcoKSkgewogICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpc24ndCBmb3IgYSBkcmFnLCBpdCdzIGZvciBhIGN1dC9wYXN0ZSBl
dmVudCBoYW5kbGVyLgogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNo
ZWNrIHRoZSBjbGlwYm9hcmQuCkBAIC0xMjQsMjIgKzIwMiwyMSBAQCBTdHJpbmcgQ2xpcGJvYXJk
Q2hyb21pdW06OmdldERhdGEoY29uc3QgCiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2Vu
ZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwogICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKICAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICB0ZXh0ID0gQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIFN0
cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVy
KTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIW1fZGF0YU9iamVjdC0+cGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICB0ZXh0ID0gbV9kYXRhT2JqZWN0LT5wbGFpblRl
eHQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IENsaXBib2FyZERhdGFU
eXBlVVJMKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGN1dC9wYXN0ZSBldmVudC4g
IFRoaXMgcmVxdWlyZXMgYWRkaW5nIGEgbmV3IElQQwotICAgICAgICAvLyBtZXNzYWdlIHRvIGdl
dCB0aGUgVVJMIGZyb20gdGhlIGNsaXBib2FyZCBkaXJlY3RseS4KLSAgICAgICAgaWYgKCFtX2Rh
dGFPYmplY3QtPnVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgdGV4dCA9IG1fZGF0YU9iamVjdC0+dXJsLnN0cmluZygpOworICAgICAgICAg
ICAgcmV0dXJuIHRleHQ7CiAgICAgICAgIH0KKyAgICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB3
aGF0ZXZlciBpcyBzdG9yZWQgaW4gcGxhaW5UZXh0LgorICAgICAgICBzdWNjZXNzID0gIW1fZGF0
YU9iamVjdC0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVj
dC0+cGxhaW5UZXh0OworICAgICAgICAKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6
CisgICAgICAgIC8vIG5vdCB5ZXQgaW1wbGVtZW50LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gdGV4dDsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0xNDcsMjMgKzIyNCw2NCBAQCBi
b29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiAgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDbGlw
Ym9hcmREYXRhVHlwZSB3aW5UeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsK
KyAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5
cGUodHlwZSk7CisgICAgc3dpdGNoIChkYXRhVHlwZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAod2luVHlwZSA9PSBD
bGlwYm9hcmREYXRhVHlwZVVSTCkgewotICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJs
LmlzVmFsaWQoKTsKLSAgICB9CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICAg
ICAgLy8gRm9yIHNldERhdGEoKSwgIlVSTCIgbXVzdCBiZSB0cmVhdGVkIGFzICJ0ZXh0L3VyaS1s
aXN0Ii4KKyAgICAgICAgLy8gKFNlZSBIVE1MNSBzcGVjLCAiVGhlIERyYWdFdmVudCBhbmQgRGF0
YVRyYW5zZmVyIGludGVyZmFjZXMiKQorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0
OgorICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtVUkwoKTsKKyAgICAgICAgLy8gTGluZSBz
ZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0
eSByZWFzb25zCisgICAgICAgIC8vIHdlIGFsc28gYWxsb3cganVzdCBcbiBoZXJlLiAKKyAgICAg
ICAgZGF0YS5zcGxpdCgnXG4nLCBtX2RhdGFPYmplY3QtPnVyaUxpc3QpOworICAgICAgICAvLyBT
dHJpcCB3aGl0ZSBzcGFjZSBvbiBhbGwgbGluZXMsIGluY2x1ZGluZyB0cmFpbGluZyBcciBmcm9t
IGFib3ZlIHNwbGl0LgorICAgICAgICAvLyBJZiB0aGlzIGxlYXZlcyBhIGxpbmUgZW1wdHksIHJl
bW92ZSBpdCBjb21wbGV0ZWx5LgorICAgICAgICAvLworICAgICAgICAvLyBBbHNvLCBjb3B5IHRo
ZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgJ3VybCcgbWVtYmVyIGFzIHdlbGwuCisgICAgICAg
IC8vIEluIGNhc2Ugbm8gZW50cnkgaXMgYSB2YWxpZCBVUkwgKGkuZS4sIHJlbWFya3Mgb25seSks
IHRoZW4gd2UgbGVhdmUgJ3VybCcgZW1wdHkuCisgICAgICAgIC8vIEkuZS4sIGluIHRoYXQgY2Fz
ZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVSTCIpIHdpbGwgZ2V0IGFuIGVtcHR5IHN0
cmluZy4KKyAgICAgICAgLy8gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNl
ZSAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4KKyAgICAgICAg
Zm9yIChzaXplX3QgbiA9IDA7IG4gPCBtX2RhdGFPYmplY3QtPnVyaUxpc3Quc2l6ZSgpOyAvKiov
ICkgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0W25d
OworICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAg
ICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX2RhdGFPYmplY3QtPnVy
aUxpc3QucmVtb3ZlKG4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgKytuOworICAgICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2
YWxpZCBVUkwuCisgICAgICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gU2tpcCByZW1hcmtzLgor
ICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7Cisg
ICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBtX2RhdGFPYmpl
Y3QtPnVybCA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmlM
aXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fZGF0YU9iamVjdC0+dXJsLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAod2luVHlwZSA9PSBDbGlwYm9hcmREYXRh
VHlwZVRleHQpIHsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6CisgICAg
ICAgIG1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDoKICAgICAgICAg
bV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBkYXRhOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKKyAgICAgICAgLy8gTm90IHlldCBpbXBs
ZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQx
MAorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmICh3aW5UeXBlID09
IENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5k
b3dubG9hZE1ldGFkYXRhID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzcs
MTEgKzI5NSwxOSBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzCiAg
ICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAgaWYg
KCFtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2RhdGFPYmpl
Y3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvdXJp
LWxpc3QiKTsKICAgICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7CisgICAgfQogCiAgICAgaWYg
KG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YU9i
amVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpOwogICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIE5vdGUgdGhhdCBldmVuIGlmIHRoZSBVUkkgbGlzdCBpcyBub3QgZW1wdHksIGl0IG1h
eSBub3QgYWN0dWFsbHkKKyAgICAgICAgLy8gY29udGFpbiBhIHZhbGlkIFVSTCwgc28gd2UgY2Fu
J3QgcmV0dXJuICJVUkwiIGhlcmUuCiAgICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0
Iik7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0Rh
dGFDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU1MzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsOCBA
QCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTCgpIGNvbnN0CiBTdHJpbmcgRHJhZ0RhdGE6OmFz
VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAobV9w
bGF0Zm9ybURyYWdEYXRhLT51cmwuaXNWYWxpZCgpKQotICAgICAgICB1cmwgPSBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPnVybC5zdHJpbmcoKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNW
YWxpZFVSTCgpKQorICAgICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldFVSTCgpLnN0
cmluZygpOwogICAgIGVsc2UgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLnNpemUo
KSA9PSAxKSB7CiAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+
ZmlsZW5hbWVzWzBdOwogICAgICAgICBmaWxlTmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNv
bHV0ZVBhdGgoZmlsZU5hbWUpOwpAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wgRHJhZ0RhdGE6OmNh
blNtYXJ0UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlIGlz
IGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hvdWxkIG5v
dCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KICAgICByZXR1cm4gIW1fcGxhdGZvcm1E
cmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdE
YXRhLT51cmwuaXNWYWxpZCgpOworICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNW
YWxpZFVSTCgpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50
KCkgY29uc3QKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTUzNjApCisrKyBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDMt
MDEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCisKKyAgICAgICAgQnVnIDI4MjkzIC0gIFtDaHJv
bWl1bV0gZXZlbnQuZGF0YXRyYW5zZmVyLmdldGRhdGEoInRleHQvdXJpLWxpc3QiKSBpcyB0cmVh
dGVkIHRoZSBzYW1lIGFzIGdldGRhdGEoIlVSTCIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI5MworICAgICAgICAKKyAgICAgICAgQ2hhbmdlIENo
cm9taXVtRGF0YU9iamVjdCBzdWNoIHRoYXQgaXQgdHJlYXRzIHR5cGVzICJVUkwiIGFuZCAidGV4
dC91cmktbGlzdCIKKyAgICAgICAgY29ycmVjdGx5IGZvciBldmVudC5kYXRhVHJhbnNmZXIuZ2V0
RGF0YS9zZXREYXRhLiBDdXJyZW50bHkgYm90aCBhcmUgdHJlYXRlZAorICAgICAgICBhcyBzeW5v
bnltcywgYnV0IGZvciAiVVJMIiwgZ2V0RGF0YSBpcyBzdXBwb3NlZCB0byBvbmx5IHJldHVybiB0
aGUgZmlyc3QgdmFsaWQgVVJMCisgICAgICAgIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGRhdGEgZm9y
ICJ0ZXh0L3VyaS1saXN0IiAoc2VlIEhUTUw1IHNwZWMpLgorCisgICAgICAgIFRlc3RzOiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5odG1sCisKKyAgICAg
ICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
dXJsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFVSTCk6CisKIDIwMTAtMDIt
MjYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
cmFnRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0
YS5jcHAJKHJldmlzaW9uIDU1MzYwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEzICs2NywxMyBAQCB2b2lkIFdlYkRyYWdEYXRh
Ojphc3NpZ24oY29uc3QgV2ViRHJhZ0RhCiBXZWJVUkwgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dXJsOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVSTCgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpz
ZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1f
cHJpdmF0ZS0+dXJsID0gdXJsOworICAgIG1fcHJpdmF0ZS0+c2V0VVJMKHVybCk7CiB9CiAKIFdl
YlN0cmluZyBXZWJEcmFnRGF0YTo6dXJsVGl0bGUoKSBjb25zdApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NTUzNjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzMSBAQAorMjAxMC0wMy0wMSAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICBC
dWcgMjgyOTMgLSAgW0Nocm9taXVtXSBldmVudC5kYXRhdHJhbnNmZXIuZ2V0ZGF0YSgidGV4dC91
cmktbGlzdCIpIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgZ2V0ZGF0YSgiVVJMIikKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjkzCisgICAgICAgIAor
ICAgICAgICBDaGFuZ2UgQ2hyb21pdW1EYXRhT2JqZWN0IHN1Y2ggdGhhdCBpdCB0cmVhdHMgdHlw
ZXMgIlVSTCIgYW5kICJ0ZXh0L3VyaS1saXN0IgorICAgICAgICBjb3JyZWN0bHkgZm9yIGV2ZW50
LmRhdGFUcmFuc2Zlci5nZXREYXRhL3NldERhdGEuIEN1cnJlbnRseSBib3RoIGFyZSB0cmVhdGVk
CisgICAgICAgIGFzIHN5bm9ueW1zLCBidXQgZm9yICJVUkwiLCBnZXREYXRhIGlzIHN1cHBvc2Vk
IHRvIG9ubHkgcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCBVUkwKKyAgICAgICAgY29udGFpbmVkIHdp
dGhpbiB0aGUgZGF0YSBmb3IgInRleHQvdXJpLWxpc3QiIChzZWUgSFRNTDUgc3BlYykuCisgICAg
ICAgIAorICAgICAgICBMYXlvdXQgdGVzdCBjaGVja3MgdmFyaW91cyBjb21iaW5hdGlvbnMgaW4g
YSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uCisgICAgICAgIFNraXBwaW5nIG9uIGFsbCBvdGhlciBw
bGF0Zm9ybXMgc2luY2UgdGhleSBkb24ndCBpbXBsZW1lbnQgdGhpcyBjb3JyZWN0bHksIGVpdGhl
ci4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1n
ZXREYXRhLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQt
dGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qczogQWRkZWQuCisgICAgICAgIChk
cmFnVGFyZ2V0KToKKyAgICAgICAgKG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KToKKyAgICAg
ICAgKGRyYWdPbnRvRHJhZ1RhcmdldCk6CisgICAgICAgIChkb0Ryb3ApOgorICAgICAgICAodGVz
dCk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTAyLTI4ICBS
b2JlcnQgSG9nYW4gIDxyb2JlcnRAcm9iZXJ0aG9nYW4ubmV0PgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXRE
YXRhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNCBAQAorVGVzdHMgY29ycmVjdCBiZWhhdmlvciBvZiBldmVudC5k
YXRhVHJhbnNmZXIuc2V0RGF0YS9nZXREYXRhIGZvciAnVVJMJywgJ3RleHQvdXJpLWxpc3QnIGFu
ZCAndGV4dC9wbGFpbicKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKy0tLSBUZXN0
IHNldC9nZXQgJ1VSTCc6CitQQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCitQQVNT
IGdldERhdGFMaW5lcy5sZW5ndGggaXMgMQorUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgv
XC8kLywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCistLS0gVGVzdCBzZXQvZ2V0ICd0ZXh0L3Vy
aS1saXN0JzoKK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKK1BBU1MgZ2V0RGF0
YUxpbmVzLmxlbmd0aCBpcyAyCitQQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAn
JykgaXMgImh0dHA6Ly90ZXN0LmNvbSIKK1BBU1MgZ2V0RGF0YUxpbmVzWzFdLnJlcGxhY2UoL1wv
JC8sICcnKSBpcyAiaHR0cDovL2NoZWNrLmNvbSIKKy0tLSBUZXN0IHNldCAndGV4dC91cmktbGlz
dCcsIGdldCAnVVJMJzoKK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKK1BBU1Mg
Z2V0RGF0YUxpbmVzLmxlbmd0aCBpcyAxCitQQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9c
LyQvLCAnJykgaXMgImh0dHA6Ly90ZXN0LmNvbSIKKy0tLSBUZXN0IHNldCAndGV4dC91cmktbGlz
dCcsIGdldCAnVVJMJywgdXNpbmcgb25seSAnXG4nOgorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBp
cyAic3RyaW5nIgorUEFTUyBnZXREYXRhTGluZXMubGVuZ3RoIGlzIDEKK1BBU1MgZ2V0RGF0YUxp
bmVzWzBdLnJlcGxhY2UoL1wvJC8sICcnKSBpcyAiaHR0cDovL3Rlc3QuY29tIgorLS0tIFRlc3Qg
c2V0L2dldCAndGV4dC91cmktbGlzdCcgd2l0aCBjb21tZW50czoKK1BBU1MgZ2V0RGF0YVJlc3Vs
dFR5cGUgaXMgInN0cmluZyIKK1BBU1MgZ2V0RGF0YUxpbmVzLmxlbmd0aCBpcyAyCitQQVNTIGdl
dERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgImh0dHA6Ly90ZXN0LmNvbSIKK1BB
U1MgZ2V0RGF0YUxpbmVzWzFdLnJlcGxhY2UoL1wvJC8sICcnKSBpcyAiaHR0cDovL2NoZWNrLmNv
bSIKKy0tLSBUZXN0IHNldC9nZXQgJ3RleHQvcGxhaW4nOgorUEFTUyBnZXREYXRhUmVzdWx0VHlw
ZSBpcyAic3RyaW5nIgorUEFTUyBnZXREYXRhTGluZXMubGVuZ3RoIGlzIDEKK1BBU1MgZ2V0RGF0
YUxpbmVzWzBdLnJlcGxhY2UoL1wvJC8sICcnKSBpcyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQuIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRy
YW5zZmVyLXNldERhdGEtZ2V0RGF0YS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFu
c2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL2RhdGFU
cmFuc2Zlci1zZXREYXRhLWdldERhdGEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERh
dGEuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACitkZXNjcmlwdGlvbigiVGVzdHMg
Y29ycmVjdCBiZWhhdmlvciBvZiBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YS9nZXREYXRhIGZv
ciAnVVJMJywgJ3RleHQvdXJpLWxpc3QnIGFuZCAndGV4dC9wbGFpbiciKTsKKworLy8gSW1wb3J0
YW50IHRoYXQgd2UgcHV0IHRoZXNlIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dp
bmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKGFuZCBiZSB1bmRyYWdhYmxl
KQordmFyIGRyYWdNZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZHJhZ01lLmlu
bmVySFRNTCA9ICI8c3BhbiBpZD0nZHJhZ21lJz5EcmFnIG1lPC9zcGFuPiI7Citkb2N1bWVudC5i
b2R5Lmluc2VydEJlZm9yZShkcmFnTWUsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7Cit2YXIg
ZHJhZ1RhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZHJhZ1RhcmdldC5p
bm5lckhUTUwgPSAiRHJhZyBoZXJlIgorZHJhZ1RhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3Ig
PSAiYmx1ZSI7CitkcmFnVGFyZ2V0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2RyYWdUYXJnZXQu
c3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGRyYWdU
YXJnZXQsIGRyYWdNZSk7CisKK3ZhciBzZXREYXRhVHlwZTsKK3ZhciBzZXREYXRhVmFsdWVzOwor
dmFyIGdldERhdGFUeXBlOwordmFyIGdldERhdGFWYWx1ZXM7Cit2YXIgZ2V0RGF0YVJlc3VsdDsK
K3ZhciBnZXREYXRhUmVzdWx0VHlwZTsKK3ZhciBnZXREYXRhTGluZXM7CisKK3ZhciBDUkxGID0g
IlxyXG4iOworCitkcmFnTWUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24o
KSB7CisgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoc2V0RGF0YVR5cGUsIHNldERhdGFW
YWx1ZXMuam9pbihDUkxGKSk7Cit9LCBmYWxzZSk7CisKK2RyYWdUYXJnZXQuYWRkRXZlbnRMaXN0
ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7CisgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRy
b3BFZmZlY3QgPSAiY29weSI7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30sIGZhbHNl
KTsKKworZHJhZ1RhcmdldC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkg
eworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2RyYWdUYXJnZXQuYWRkRXZlbnRMaXN0
ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgeworICAgIGRvRHJvcCgpOworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZF
bGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQg
KyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zm
c2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNl
TW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiBkcmFnT250b0RyYWdUYXJn
ZXQoKSB7CisgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHJhZ21lIik7Cisg
ICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZSwgMCwgZSwgNCk7IAor
ICAgIHggPSBlLm9mZnNldExlZnQgKyAxMDsKKyAgICB5ID0gZS5vZmZzZXRUb3AgKyBlLm9mZnNl
dEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZl
bnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubGVhcEZvcndhcmQoNDAwKTsK
KyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChkcmFnVGFyZ2V0KTsKKyAgICBldmVudFNl
bmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGRvRHJvcCgpIHsKKyAgICBnZXREYXRhUmVz
dWx0ID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoZ2V0RGF0YVR5cGUpOworICAgIGdldERh
dGFSZXN1bHRUeXBlID0gdHlwZW9mIGdldERhdGFSZXN1bHQ7CisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJnZXREYXRhUmVzdWx0VHlwZSIsICJzdHJpbmciKTsKKyAgICBnZXREYXRhTGluZXMg
PSBnZXREYXRhUmVzdWx0LnNwbGl0KENSTEYpOyAgICAKKyAgICAvLyByZW1vdmUgcG90ZW50aWFs
IGNvbW1lbnRzCisgICAgZ2V0RGF0YUxpbmVzID0gZ2V0RGF0YUxpbmVzLmZpbHRlcihmdW5jdGlv
bihsaW5lKSB7CisgICAgICByZXR1cm4gbGluZVswXSAhPT0gJyMnOworICAgIH0pOworICAgIHNo
b3VsZEV2YWx1YXRlVG8oImdldERhdGFMaW5lcy5sZW5ndGgiLCBnZXREYXRhVmFsdWVzLmxlbmd0
aCk7CisgICAgZm9yIChpID0gMDsgaSA8IGdldERhdGFMaW5lcy5sZW5ndGggJiYgaSA8IGdldERh
dGFWYWx1ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJn
ZXREYXRhTGluZXNbIiArIGkgKyAiXS5yZXBsYWNlKC9cXC8kLywgJycpIiwgZ2V0RGF0YVZhbHVl
c1tpXSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KHNldFR5cGUsIHNldFZhbHVlcywgZ2V0
VHlwZSwgZ2V0VmFsdWVzKSB7CisgICAgc2V0RGF0YVR5cGUgPSBzZXRUeXBlOworICAgIHNldERh
dGFWYWx1ZXMgPSBzZXRWYWx1ZXM7CisgICAgZ2V0RGF0YVR5cGUgPSBnZXRUeXBlOworICAgIGdl
dERhdGFWYWx1ZXMgPSBnZXRWYWx1ZXM7CisgICAgZHJhZ09udG9EcmFnVGFyZ2V0KCk7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCItLS0gVGVzdCBzZXQvZ2V0ICdVUkwn
OiIpOworICAgIHRlc3QoIlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0sIAorICAgICAgICAgIlVS
TCIsIFsiaHR0cDovL3Rlc3QuY29tIl0pOworCisgICAgZGVidWcoIi0tLSBUZXN0IHNldC9nZXQg
J3RleHQvdXJpLWxpc3QnOiIpOworICAgIHRlc3QoInRleHQvdXJpLWxpc3QiLCBbImh0dHA6Ly90
ZXN0LmNvbSIsICJodHRwOi8vY2hlY2suY29tIl0sIAorICAgICAgICAgInRleHQvdXJpLWxpc3Qi
LCBbImh0dHA6Ly90ZXN0LmNvbSIsICJodHRwOi8vY2hlY2suY29tIl0pOworCisgICAgZGVidWco
Ii0tLSBUZXN0IHNldCAndGV4dC91cmktbGlzdCcsIGdldCAnVVJMJzoiKTsKKyAgICB0ZXN0KCJ0
ZXh0L3VyaS1saXN0IiwgWyJodHRwOi8vdGVzdC5jb20iLCAiaHR0cDovL2NoZWNrLmNvbSJdLCAK
KyAgICAgICAgICJVUkwiLCBbImh0dHA6Ly90ZXN0LmNvbSJdKTsKKworICAgIGRlYnVnKCItLS0g
VGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCcsIHVzaW5nIG9ubHkgJ1xcbic6Iik7
CisgICAgdGVzdCgidGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tXG5odHRwOi8vY2hl
Y2suY29tIl0sIAorICAgICAgICAgIlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0pOworCisgICAg
ZGVidWcoIi0tLSBUZXN0IHNldC9nZXQgJ3RleHQvdXJpLWxpc3QnIHdpdGggY29tbWVudHM6Iik7
CisgICAgdGVzdCgidGV4dC91cmktbGlzdCIsIFsiIyBjb21tZW50IiwgImh0dHA6Ly90ZXN0LmNv
bSIsICJodHRwOi8vY2hlY2suY29tIl0sIAorICAgICAgICAgInRleHQvdXJpLWxpc3QiLCBbImh0
dHA6Ly90ZXN0LmNvbSIsICJodHRwOi8vY2hlY2suY29tIl0pOworCisgICAgZGVidWcoIi0tLSBU
ZXN0IHNldC9nZXQgJ3RleHQvcGxhaW4nOiIpOworICAgIHRlc3QoInRleHQvcGxhaW4iLCBbIkxv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiJdLCAKKyAgICAgICAgICJ0ZXh0L3BsYWluIiwgWyJM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4iXSk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKKyAgICBydW5UZXN0KCk7CisgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCisg
ICAgZHJhZ01lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZHJhZ01lKTsKKyAgICBkcmFnVGFyZ2V0
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZHJhZ1RhcmdldCk7Cit9IGVsc2UgeworICAgIHRlc3RG
YWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVt
cFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA1NTM2MCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01MzM3LDkgKzUzMzcs
MTAgQEAgZmFzdC9ldmVudHMvcHJldmVudC1kcmFnLXRvLW5hdmlnYXRlLmh0bQogZmFzdC9mb3Jt
cy9zbGlkZXItZGVsZXRlLXdoaWxlLWRyYWdnaW5nLXRodW1iLmh0bWwKIGZhc3QvZXZlbnRzL3Rh
Yi1mb2N1cy1hbmNob3IuaHRtbAogaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNv
bnRlbnQuaHRtbAoraHR0cC90ZXN0cy9taXNjL3Nsb3ctbG9hZGluZy1tYXNrLmh0bWwKIGh0dHAv
dGVzdHMvc2VjdXJpdHkvZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50LWlmcmFtZS5odG1sCiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuaHRtbAotaHR0
cC90ZXN0cy9taXNjL3Nsb3ctbG9hZGluZy1tYXNrLmh0bWwKK2h0dHAvdGVzdHMvc2VjdXJpdHkv
Y2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAogCiAjIFRlc3RzIHRo
YXQgcmVxdWlyZSBlZGl0aW5nIGNhbGxiYWNrcyAoYW5kIHBvc3NpYmx5IEdsaWIgRE9NIGJpbmRp
bmdzKQogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtd2l0aC1zdHlsZS5odG1sCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNTUzNjApCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDMgKzExOCw2IEBAIHN0
b3JhZ2UvZGF0YWJhc2UtbG9jay1hZnRlci1yZWxvYWQuaHRtbAogCiAjIEFjY2VwdCBoZWFkZXIg
aXMgaGFuZGxlZCBieSB0aGUgYnJvd3NlcgogaHR0cC90ZXN0cy9taXNjL2ltYWdlLWNoZWNrcy1m
b3ItYWNjZXB0Lmh0bWwKKworIyBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC91cmkt
bGlzdCcpIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgb24gTWFjCitodHRwL3Rlc3RzL3NlY3Vy
aXR5L2NsaXBib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmh0bWwKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNTUzNjApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDcgQEAgZmFzdC9m
b3Jtcy9nZXQtZmlsZS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLXJlLXJlbmRl
ci5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWZpbGUtY3Jhc2guaHRtbAogaHR0cC90ZXN0cy9zZWN1
cml0eS9jbGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKK2h0dHAvdGVzdHMvc2Vj
dXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAogCiAjIE1p
c3NpbmcgZHJhZyAmIGRyb3AgZnVuY3Rpb25hbGl0eSBpbiBEUlQKIGVkaXRpbmcvcGFzdGVib2Fy
ZC9kcm9wLWlucHV0dGV4dC1hY3F1aXJlcy1zdHlsZS5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vU2tpcHBlZAkocmV2aXNpb24gNTUzNjApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
U2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIGZhc3QvZXZlbnRzL3By
ZXZlbnQtZHJhZy10by1uYXZpZ2F0ZS5odG0KIGZhc3QvZm9ybXMvZ2V0LWZpbGUtdXBsb2FkLmh0
bWwKIGZhc3QvZm9ybXMvaW5wdXQtZmlsZS1yZS1yZW5kZXIuaHRtbAogaHR0cC90ZXN0cy9zZWN1
cml0eS9jbGlwYm9hcmQvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmh0bWwKK2h0dHAvdGVzdHMvc2Vj
dXJpdHkvY2xpcGJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAogZmFzdC9l
dmVudHMvZHJhZy1maWxlLWNyYXNoLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1l
c3NhZ2UtY2xvbmUuaHRtbAogCg==
</data>
<flag name="review"
          id="32871"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="33471"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>