<?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>78648</bug_id>
          
          <creation_ts>2012-02-14 16:14:16 -0800</creation_ts>
          <short_desc>FileReader is dysfunctional in documents with &quot;null&quot; origin string</short_desc>
          <delta_ts>2012-06-15 02:57:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89156</dependson>
    
    <dependson>89157</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>jianli</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mihaip</cc>
    
    <cc>morrita</cc>
    
    <cc>sadrul</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556739</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-14 16:14:16 -0800</bug_when>
    <thetext>FileReader doesn&apos;t work in documents with unique security origin, or in file documents when file path separation is enforced. The reason is that:
1. Origin string for such is null.
2. FileReaderLoader::start tries to create a blob URL.
3. BlobURL::createBlobURL bails out when it sees a &quot;null&quot; origin string.

As an example of configuration where this is broken, try opening any FileReader regression test from fast/files in Google Chrome.

Why does FileReader need a blob URL to read a file, in the first place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556767</commentid>
    <comment_count>1</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-14 16:44:21 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; FileReader doesn&apos;t work in documents with unique security origin, or in file documents when file path separation is enforced. The reason is that:
&gt; 1. Origin string for such is null.
&gt; 2. FileReaderLoader::start tries to create a blob URL.
&gt; 3. BlobURL::createBlobURL bails out when it sees a &quot;null&quot; origin string.
&gt; 
&gt; As an example of configuration where this is broken, try opening any FileReader regression test from fast/files in Google Chrome.
&gt; 
&gt; Why does FileReader need a blob URL to read a file, in the first place?

This is because we want to share the same code for both file/blob reading and blob URL request fetching in multi-process environment. When a file/blob is created for the first time, it is identified by an internal used blob URL, that can allow it to be read by either FileReader or blob URL request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556901</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-14 21:08:41 -0800</bug_when>
    <thetext>Why do you want to share file and blob reading code, but not http and blob, for example? This is still not making any sense to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558324</commentid>
    <comment_count>3</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-16 10:52:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Why do you want to share file and blob reading code, but not http and blob, for example? This is still not making any sense to me.

Not sure I understand what you mean. Which http do you mean? We want to share the common code between blob reading and blob: request handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558333</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-16 11:02:28 -0800</bug_when>
    <thetext>Let me put it in a different way. Do you have a suggestion for how to fix this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558360</commentid>
    <comment_count>5</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-16 11:19:33 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Let me put it in a different way. Do you have a suggestion for how to fix this bug?

FileReader used to work in file: documents. But due to the tightening of security origin, it did not work any more. I would prefer a security expert, like Adam Barth, to confirm if we do want to make FileReader work in file: or unique security origin context.

If you launch Google Chrome with the command line option &quot;--allow-file-access-from-files&quot;, you can run those blob/file regression tests from fast/files. I am not sure if Safari/WebKit has such option to set.

If we decide to support this case, I can work on a fix on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558378</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-16 11:36:39 -0800</bug_when>
    <thetext>&gt; FileReader used to work in file: documents. But due to the tightening of security origin, it did not work any more. I would prefer a security expert, like Adam Barth, to confirm if we do want to make FileReader work in file: or unique security origin context.

FileReader should work regardless of the security origin.  As far as I can tell, our current behavior violates the specs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558386</commentid>
    <comment_count>7</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-16 11:41:07 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; FileReader used to work in file: documents. But due to the tightening of security origin, it did not work any more. I would prefer a security expert, like Adam Barth, to confirm if we do want to make FileReader work in file: or unique security origin context.
&gt; 
&gt; FileReader should work regardless of the security origin.  As far as I can tell, our current behavior violates the specs.

Sounds good. I am going to work on a patch for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642985</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-06 17:16:08 -0700</bug_when>
    <thetext>Jian, did you have a chance to look into this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643020</commentid>
    <comment_count>9</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-06 17:49:02 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Jian, did you have a chance to look into this?

Sorry for late response. I will pick up this one to see if I can do sth about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645154</commentid>
    <comment_count>10</comment_count>
      <attachid>146668</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-08 17:39:15 -0700</bug_when>
    <thetext>Created attachment 146668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645259</commentid>
    <comment_count>11</comment_count>
      <attachid>146668</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-08 23:58:10 -0700</bug_when>
    <thetext>Comment on attachment 146668
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        We only fix the problem with using FileReader from a file document. The

What approach would you take to fix this in general case? File URLs are of course most important in this scenario, but this does not look like a step in the direction of a general fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645359</commentid>
    <comment_count>12</comment_count>
      <attachid>146668</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-09 10:42:10 -0700</bug_when>
    <thetext>Comment on attachment 146668
Patch

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

This patch looks like the wrong approach.  Rather than trying to hack together a blob URL that works for file URLs, it seems like a better approach is to teach FileReader to work with Blobs directly without needing to use URLs at all.

&gt; Source/WebCore/fileapi/BlobURL.cpp:52
&gt; -    return createBlobURL(securityOrigin-&gt;toString());
&gt; +    String originString;
&gt; +    if (securityOrigin-&gt;protocol() == &quot;file&quot;)
&gt; +        originString = &quot;file://&quot; + securityOrigin-&gt;filePath();
&gt; +    else
&gt; +        originString = securityOrigin-&gt;toString();
&gt; +    return createBlobURL(originString);

This isn&apos;t right.  We shouldn&apos;t be special-casing protocol() == &quot;file&quot;.  It also won&apos;t work right depending on various bools in Settings.

&gt; Source/WebCore/fileapi/BlobURL.cpp:67
&gt; +KURL BlobURL::extractInnerURL(const KURL&amp; url)
&gt; +{
&gt; +    String unescapedUrl = decodeURLEscapeSequences(url.path());
&gt; +    size_t lastSlashPos = unescapedUrl.reverseFind(&apos;/&apos;);
&gt; +    if (lastSlashPos != notFound)
&gt; +        unescapedUrl = unescapedUrl.substring(0, lastSlashPos);
&gt; +    return KURL(ParsedURLString, unescapedUrl);
&gt; +}

This is wrong.  KURL has a function for doing this correctly these days.

&gt; Source/WebCore/page/SecurityOrigin.cpp:92
&gt; +#if ENABLE(BLOB)
&gt; +    if (url.protocolIs(&quot;blob&quot;))
&gt; +        return BlobURL::extractInnerURL(url);
&gt; +#endif

Why isn&apos;t KURL able to extract this inner URL properly?

&gt; Source/WebCore/page/SecurityOrigin.h:68
&gt; +    String filePath() const { return m_filePath; }

Please don&apos;t add an accessor for this information.  It&apos;s private data for SecurityOrigin that no code outside this class should need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647534</commentid>
    <comment_count>13</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-12 17:48:00 -0700</bug_when>
    <thetext>The reason for using Blob URL to read the blob data is to share the code in both FileReader and blob URL fetching scenarios for all supported platforms, including both single-process and multi-process platforms.

For single-process platform, we could try to make FileReader interact with the blob directly. However, for multi-process platform, the blob data is supposed to live in the browser process and we do not want to invent another protocol to fetch the data from the browser process.

If you want the direct hook with the blob data for single-process platform, I could make the change now. But if we want to also support multi-process platform, I am afraid that making FileReader read via blob URL is the simplest solution. If we want to support more than file URL, we can create a special URL for FileReader and twist SecurityOrigin check to work for it. How do you think? If you know about better solution, please let me know.


(In reply to comment #12)
&gt; (From update of attachment 146668 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146668&amp;action=review
&gt; 
&gt; This patch looks like the wrong approach.  Rather than trying to hack together a blob URL that works for file URLs, it seems like a better approach is to teach FileReader to work with Blobs directly without needing to use URLs at all.
&gt; 
&gt; &gt; Source/WebCore/fileapi/BlobURL.cpp:52
&gt; &gt; -    return createBlobURL(securityOrigin-&gt;toString());
&gt; &gt; +    String originString;
&gt; &gt; +    if (securityOrigin-&gt;protocol() == &quot;file&quot;)
&gt; &gt; +        originString = &quot;file://&quot; + securityOrigin-&gt;filePath();
&gt; &gt; +    else
&gt; &gt; +        originString = securityOrigin-&gt;toString();
&gt; &gt; +    return createBlobURL(originString);
&gt; 
&gt; This isn&apos;t right.  We shouldn&apos;t be special-casing protocol() == &quot;file&quot;.  It also won&apos;t work right depending on various bools in Settings.
&gt; 
&gt; &gt; Source/WebCore/fileapi/BlobURL.cpp:67
&gt; &gt; +KURL BlobURL::extractInnerURL(const KURL&amp; url)
&gt; &gt; +{
&gt; &gt; +    String unescapedUrl = decodeURLEscapeSequences(url.path());
&gt; &gt; +    size_t lastSlashPos = unescapedUrl.reverseFind(&apos;/&apos;);
&gt; &gt; +    if (lastSlashPos != notFound)
&gt; &gt; +        unescapedUrl = unescapedUrl.substring(0, lastSlashPos);
&gt; &gt; +    return KURL(ParsedURLString, unescapedUrl);
&gt; &gt; +}
&gt; 
&gt; This is wrong.  KURL has a function for doing this correctly these days.
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.cpp:92
&gt; &gt; +#if ENABLE(BLOB)
&gt; &gt; +    if (url.protocolIs(&quot;blob&quot;))
&gt; &gt; +        return BlobURL::extractInnerURL(url);
&gt; &gt; +#endif
&gt; 
&gt; Why isn&apos;t KURL able to extract this inner URL properly?
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.h:68
&gt; &gt; +    String filePath() const { return m_filePath; }
&gt; 
&gt; Please don&apos;t add an accessor for this information.  It&apos;s private data for SecurityOrigin that no code outside this class should need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647620</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 19:56:18 -0700</bug_when>
    <thetext>Running a simple experiment, it looks like we&apos;re using blob URLs of the following form:

blob:https%3A//bugs.webkit.org/2e92ba1a-89b9-45b0-90a5-1cba0d901540

Would it be possible to use blob URLs of one of the following forms:

blob:2e92ba1a-89b9-45b0-90a5-1cba0d901540
blob:null/2e92ba1a-89b9-45b0-90a5-1cba0d901540
blob:about%3Ablank/2e92ba1a-89b9-45b0-90a5-1cba0d901540

If we did that, we could avoid serializing the origin into the blob URL.

There&apos;s a larger problem of the syntax of blob URLs not interoperating between browsers, which is a problem in the long run but not something we need to solve in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648289</commentid>
    <comment_count>15</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-13 11:34:17 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Running a simple experiment, it looks like we&apos;re using blob URLs of the following form:
&gt; 
&gt; blob:https%3A//bugs.webkit.org/2e92ba1a-89b9-45b0-90a5-1cba0d901540
&gt; 
&gt; Would it be possible to use blob URLs of one of the following forms:
&gt; 
&gt; blob:2e92ba1a-89b9-45b0-90a5-1cba0d901540
&gt; blob:null/2e92ba1a-89b9-45b0-90a5-1cba0d901540
&gt; blob:about%3Ablank/2e92ba1a-89b9-45b0-90a5-1cba0d901540
&gt; 
&gt; If we did that, we could avoid serializing the origin into the blob URL.
&gt; 
&gt; There&apos;s a larger problem of the syntax of blob URLs not interoperating between browsers, which is a problem in the long run but not something we need to solve in this bug.

I think the blob URL should only be used in the 2nd form. That is, SecurityOrigin::toString returns null when the document has unique security origin or the file url. This is the reason I tried to fix the most common case: file URL. I am not sure what kind of user case we want to support for the document with unique security origin.

We have to embed the origin in the blob URL because we need to perform security origin check when fetching an URL. If we do not embed the origin, we will have to get the origin of the page when the blob is spawned. For single-process platform, this should not be a problem. For multi-process platform, this means that an expensive and time-consuming IPC needs to be invoked to get the origin information from the browser process before the origin check could be performed.

This security origin check is only needed for using blob URL. Currently reading blob via FileReader is routed through blob URL. I think we can skip origin check for FileReader since we create a one-time used blob URL internally. How do you think about this? Another idea is to let FileReader read from blob data directly but this approach will only work single-process platform. If you think the latter is better, I can start to produce a patch for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648622</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-13 17:41:09 -0700</bug_when>
    <thetext>&gt; I am not sure what kind of user case we want to support for the document with unique security origin.

The main use case I&apos;m interested in is reading an object out of a FileSystem and then postMessaging the Blob into an sandboxed iframe.  However, an easier case is probably something like the following:

var b = new Blob([&quot;....&quot;], { type=&quot;image/png&quot; });
var u = webkitURL.createObjectURL(b);
var i = document.createElement(&quot;img&quot;);
i.src = u;
document.appendChild(i);

&gt; We have to embed the origin in the blob URL because we need to perform security origin check when fetching an URL. If we do not embed the origin, we will have to get the origin of the page when the blob is spawned. For single-process platform, this should not be a problem. For multi-process platform, this means that an expensive and time-consuming IPC needs to be invoked to get the origin information from the browser process before the origin check could be performed.

In the case of a unique origin, the URL is only usable in one process anyway because it&apos;s not possible for a document in another process to have the same origin.  Perhaps we should just keep a map from blob URLs to SecurityOrigins in memory for the unique origin case?

&gt; This security origin check is only needed for using blob URL. Currently reading blob via FileReader is routed through blob URL. I think we can skip origin check for FileReader since we create a one-time used blob URL internally. How do you think about this? Another idea is to let FileReader read from blob data directly but this approach will only work single-process platform. If you think the latter is better, I can start to produce a patch for this.

I&apos;d rather solve the general problem if we can.  What do you think about keeping an in-memory map as described above?  If the blob URL isn&apos;t in the map and has a &quot;null&quot; origin, we can conclude that the access check has failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648629</commentid>
    <comment_count>17</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-13 17:50:40 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; I am not sure what kind of user case we want to support for the document with unique security origin.
&gt; 
&gt; The main use case I&apos;m interested in is reading an object out of a FileSystem and then postMessaging the Blob into an sandboxed iframe.  However, an easier case is probably something like the following:
&gt; 
&gt; var b = new Blob([&quot;....&quot;], { type=&quot;image/png&quot; });
&gt; var u = webkitURL.createObjectURL(b);
&gt; var i = document.createElement(&quot;img&quot;);
&gt; i.src = u;
&gt; document.appendChild(i);
&gt; 
&gt; &gt; We have to embed the origin in the blob URL because we need to perform security origin check when fetching an URL. If we do not embed the origin, we will have to get the origin of the page when the blob is spawned. For single-process platform, this should not be a problem. For multi-process platform, this means that an expensive and time-consuming IPC needs to be invoked to get the origin information from the browser process before the origin check could be performed.
&gt; 
&gt; In the case of a unique origin, the URL is only usable in one process anyway because it&apos;s not possible for a document in another process to have the same origin.  Perhaps we should just keep a map from blob URLs to SecurityOrigins in memory for the unique origin case?
&gt; 
&gt; &gt; This security origin check is only needed for using blob URL. Currently reading blob via FileReader is routed through blob URL. I think we can skip origin check for FileReader since we create a one-time used blob URL internally. How do you think about this? Another idea is to let FileReader read from blob data directly but this approach will only work single-process platform. If you think the latter is better, I can start to produce a patch for this.
&gt; 
&gt; I&apos;d rather solve the general problem if we can.  What do you think about keeping an in-memory map as described above?  If the blob URL isn&apos;t in the map and has a &quot;null&quot; origin, we can conclude that the access check has failed.

Using in-memory map for unique origin case sounds like a good idea. I will proceed with this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648645</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-13 18:04:47 -0700</bug_when>
    <thetext>Thanks.  I appreciate your talking though the design with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649574</commentid>
    <comment_count>19</comment_count>
      <attachid>147669</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-14 15:59:16 -0700</bug_when>
    <thetext>Created attachment 147669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649580</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 16:00:58 -0700</bug_when>
    <thetext>Attachment 147669 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/page/SecurityOrigin.cpp:99:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:106:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:112:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649584</commentid>
    <comment_count>21</comment_count>
      <attachid>147671</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-14 16:06:07 -0700</bug_when>
    <thetext>Created attachment 147671
Fix styles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649587</commentid>
    <comment_count>22</comment_count>
      <attachid>147669</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-14 16:08:21 -0700</bug_when>
    <thetext>Comment on attachment 147669
Patch

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

&gt; LayoutTests/fast/files/file-reader-file-url.html:13
&gt; +&lt;iframe src=&quot;resources/file-reader-file-url-iframe.html&quot;&gt;&lt;/iframe&gt;

Can you add a test in an iframe with the sandbox attribute?  See the tests in http://trac.webkit.org/browser/trunk/LayoutTests/http/tests/security/ with *sandbox* for examples.

&gt;&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:106
&gt;&gt; +    // If the blob URL contains NULL origin, as in the context with unique security origin or file URL, save the mapping between url and origin so that the origin can be retrived when doing security origin check.
&gt; 
&gt; Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]

NULL -&gt; &quot;null&quot; should make the style checker happy.

&gt;&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:112
&gt;&gt; +    } else {
&gt; 
&gt; One line control clauses should not use braces.  [whitespace/braces] [4]

The style checker is right here.

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.h:51
&gt; +    static PassRefPtr&lt;SecurityOrigin&gt; getCachedOrigin(const KURL&amp;);

getCachedOrigin -&gt; cachedOrigin

We usually skip the &quot;get&quot; prefix because get is such a weak verb.

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:99
&gt;&gt; +    return NULL;
&gt; 
&gt; Use 0 instead of NULL.  [readability/null] [5]

The style checker is right here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649591</commentid>
    <comment_count>23</comment_count>
      <attachid>147671</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-14 16:09:37 -0700</bug_when>
    <thetext>Comment on attachment 147671
Fix styles

My only real substantial comment is to add a test for the sandboxed case.  If you&apos;re feeling up to it, you might also want to add a test for postMessaging a Blob into a sandboxed origin.  I suspect that will work fine too after this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649592</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-14 16:09:55 -0700</bug_when>
    <thetext>Thanks for fixing this bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649628</commentid>
    <comment_count>25</comment_count>
      <attachid>147671</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-14 16:36:58 -0700</bug_when>
    <thetext>Comment on attachment 147671
Fix styles

Attachment 147671 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12954535</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649694</commentid>
    <comment_count>26</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-06-14 17:59:27 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/120384.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649765</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 19:24:43 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 89156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649995</commentid>
    <comment_count>28</comment_count>
      <attachid>147768</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-06-15 01:02:08 -0700</bug_when>
    <thetext>Created attachment 147768
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649997</commentid>
    <comment_count>29</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-06-15 01:03:09 -0700</bug_when>
    <thetext>My rollout was wrong. Let me land it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650050</commentid>
    <comment_count>30</comment_count>
      <attachid>147768</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 02:57:31 -0700</bug_when>
    <thetext>Comment on attachment 147768
Patch for landing

Clearing flags on attachment: 147768

Committed r120433: &lt;http://trac.webkit.org/changeset/120433&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650051</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 02:57:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146668</attachid>
            <date>2012-06-08 17:39:15 -0700</date>
            <delta_ts>2012-06-14 15:59:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>78648.diff</filename>
            <type>text/plain</type>
            <size>4094</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOGU1ZmRlLi4xODdiMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDYtMDggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEZpbGVSZWFkZXIgaXMgZHlzZnVuY3Rpb25hbCBpbiBkb2N1bWVudHMgd2l0aCAibnVsbCIgb3Jp
Z2luIHN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZSBvbmx5IGZpeCB0aGUgcHJvYmxlbSB3aXRoIHVzaW5nIEZpbGVSZWFkZXIgZnJvbSBhIGZp
bGUgZG9jdW1lbnQuIFRoZQorICAgICAgICBmaXggaXMgdG8gZW1iZWQgdGhlIGZpbGVwYXRoIGlu
IHRoZSBvcmlnaW4gcGFydCBvZiB0aGUgYmxvYiBVUkwgYW5kIG1ha2UKKyAgICAgICAgU2VjdXJp
dHlPcmlnaW4gZXh0cmFjdCB0aGUgY29ycmVjdCBpbm5lciB1cmwuCisKKyAgICAgICAgKiBmaWxl
YXBpL0Jsb2JVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlUHVibGlj
VVJMKTogUHV0IGZpbGVwYXRoIGluIHRoZSBlbWJlZGRlZCBvcmlnaW4gb2YgYmxvYiB1cmwuCisg
ICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpleHRyYWN0SW5uZXJVUkwpOiBSZXR1cm4gdGhlIGVt
YmVkZGVkIG9yaWdpbiBhcyBpbm5lciB1cmwuIAorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChCbG9iVVJMKToKKyAgICAgICAgKiBwYWdl
L1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RJbm5lclVSTCk6
IENhbGwgQmxvYlVSTDo6ZXh0cmFjdElubmVyVVJMIHRvIGV4dHJhY3QgZm9yIGJsb2Igc2NoZW1l
LgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luOjpmaWxlUGF0aCk6CisKIDIwMTItMDYtMDggIFZzZXZvbG9kIFZsYXNvdiAg
PHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRml4IHNldmVy
YWwgY29tcGlsZXIgd2FybmluZ3MgYW5kIGVycm9ycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwu
Y3BwCmluZGV4IDVkNzkxNDEuLjlkYzI5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYlVSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNw
cApAQCAtNDQsNyArNDQsMTIgQEAgY29uc3QgY2hhciBCbG9iVVJMOjprQmxvYlByb3RvY29sW10g
PSAiYmxvYiI7CiBLVVJMIEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2luKTsKLSAgICByZXR1
cm4gY3JlYXRlQmxvYlVSTChzZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7CisgICAgU3RyaW5n
IG9yaWdpblN0cmluZzsKKyAgICBpZiAoc2VjdXJpdHlPcmlnaW4tPnByb3RvY29sKCkgPT0gImZp
bGUiKQorICAgICAgICBvcmlnaW5TdHJpbmcgPSAiZmlsZTovLyIgKyBzZWN1cml0eU9yaWdpbi0+
ZmlsZVBhdGgoKTsKKyAgICBlbHNlCisgICAgICAgIG9yaWdpblN0cmluZyA9IHNlY3VyaXR5T3Jp
Z2luLT50b1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVCbG9iVVJMKG9yaWdpblN0cmluZyk7
CiB9CiAKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKQpAQCAtNTIsNiArNTcsMTUg
QEAgS1VSTCBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpCiAgICAgcmV0dXJuIGNyZWF0ZUJs
b2JVUkwoImJsb2JpbnRlcm5hbDovLyIpOwogfQogCitLVVJMIEJsb2JVUkw6OmV4dHJhY3RJbm5l
clVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgU3RyaW5nIHVuZXNjYXBlZFVybCA9IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKTsKKyAgICBzaXplX3QgbGFzdFNsYXNoUG9z
ID0gdW5lc2NhcGVkVXJsLnJldmVyc2VGaW5kKCcvJyk7CisgICAgaWYgKGxhc3RTbGFzaFBvcyAh
PSBub3RGb3VuZCkKKyAgICAgICAgdW5lc2NhcGVkVXJsID0gdW5lc2NhcGVkVXJsLnN1YnN0cmlu
ZygwLCBsYXN0U2xhc2hQb3MpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgdW5l
c2NhcGVkVXJsKTsKK30KKwogU3RyaW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIoY29uc3QgS1VS
TCYgdXJsKQogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcyhrQmxvYlByb3RvY29sKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaCBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYlVSTC5oCmluZGV4IDRlYTU5ZmUuLjNiOTUyOGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYlVSTC5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEJsb2JVUkwgewogcHVibGlj
OgogICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdpbiopOwogICAg
IHN0YXRpYyBLVVJMIGNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgc3RhdGljIEtVUkwgZXh0cmFj
dElubmVyVVJMKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZpZXIo
Y29uc3QgS1VSTCYpOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9jb2woKSB7IHJl
dHVybiBrQmxvYlByb3RvY29sOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2VjdXJpdHlPcmlnaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAKaW5kZXggZjVhOGY5Mi4uY2NhMWNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHAKQEAgLTg2LDYgKzg2LDEwIEBAIHN0YXRpYyBLVVJMIGV4dHJhY3RJbm5lclVSTChj
b25zdCBLVVJMJiB1cmwpCiAgICAgICAgIHJldHVybiAqdXJsLmlubmVyVVJMKCk7CiAgICAgLy8g
RklYTUU6IFVwZGF0ZSB0aGlzIGNhbGxzaXRlIHRvIHVzZSB0aGUgaW5uZXJVUkwgbWVtYmVyIGZ1
bmN0aW9uIHdoZW4KICAgICAvLyB3ZSBmaW5pc2ggaW1wbGVtZW50aW5nIGl0LgorI2lmIEVOQUJM
RShCTE9CKQorICAgIGlmICh1cmwucHJvdG9jb2xJcygiYmxvYiIpKQorICAgICAgICByZXR1cm4g
QmxvYlVSTDo6ZXh0cmFjdElubmVyVVJMKHVybCk7CisjZW5kaWYKICAgICByZXR1cm4gS1VSTChQ
YXJzZWRVUkxTdHJpbmcsIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAppbmRleCBkN2I5YWE0Li5iODQ2NmUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCkBAIC02NSw2ICs2NSw3IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sOyB9
CiAgICAgU3RyaW5nIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2hvc3Q7IH0KICAgICBTdHJpbmcg
ZG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9kb21haW47IH0KKyAgICBTdHJpbmcgZmlsZVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVQYXRoOyB9CiAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
U2VjdXJpdHlPcmlnaW4gY2FuIHNjcmlwdCBvYmplY3RzIGluIHRoZSBnaXZlbgo=
</data>
<flag name="review"
          id="153997"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="153998"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147669</attachid>
            <date>2012-06-14 15:59:16 -0700</date>
            <delta_ts>2012-06-14 16:08:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>78648_2.diff</filename>
            <type>text/plain</type>
            <size>13519</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MTIzZmRmLi5mNmZkZTkwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDYt
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpbGVSZWFkZXIg
aXMgZHlzZnVuY3Rpb25hbCBpbiBkb2N1bWVudHMgd2l0aCAibnVsbCIgb3JpZ2luIHN0cmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmls
ZXMvZmlsZS1yZWFkZXItZmlsZS11cmwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZmlsZXMvcmVzb3VyY2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sOiBBZGRl
ZC4KKwogMjAxMi0wNi0xNCAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJr
IHRleHQgd2l0aCB0ZXh0IGFsdGVybmF0aXZlIHdpdGggYmx1ZSB1bmRlcmxpbmUuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmlsZS11cmwtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNmZiM2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJs
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA5OiBS
ZWNlaXZlZCBkYXRhOiAwMTIzNDU2Nzg5CisKK1Rlc3QgdGhhdCBGaWxlUmVhZGVyIHdvcmtzIHVu
ZGVyIHRoZSBmaWxlIFVSTCB3aXRoIGZpbGUgcGF0aCBzZXBhcmF0aW9uIGVuZm9yY2VkLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1maWxlLXVybC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1maWxlLXVybC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjA1OGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLmh0bWwKQEAgLTAs
MCArMSwxNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHMoZmFsc2UpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhmYWxzZSk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0icmVzb3Vy
Y2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxkaXYgaWQ9
InJlc3VsdHMiPjwvZGl2PgorVGVzdCB0aGF0IEZpbGVSZWFkZXIgd29ya3MgdW5kZXIgdGhlIGZp
bGUgVVJMIHdpdGggZmlsZSBwYXRoIHNlcGFyYXRpb24gZW5mb3JjZWQuCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9maWxlLXJl
YWRlci1maWxlLXVybC1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3Vy
Y2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUxZmNjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3Jlc291cmNlcy9maWxlLXJlYWRlci1maWxlLXVybC1pZnJhbWUuaHRtbApAQCAt
MCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHJ1blRlc3Qo
KQoreworICAgIHZhciBibG9iID0gbmV3IEJsb2IoWyIwMTIzNDU2Nzg5Il0pOworICAgIHZhciBy
ZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBjb25zb2xlLmxvZygiUmVjZWl2ZWQgZGF0YTogIiArIGV2ZW50LnRh
cmdldC5yZXN1bHQpOworICAgIH0KKyAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorICAgIHJlYWRlci5vbmVy
cm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlJlY2VpdmVkIGVy
cm9yIGV2ZW50OiAiICsgZXZlbnQudGFyZ2V0LmVycm9yLmNvZGUpOworICAgIH07CisgICAgcmVh
ZGVyLnJlYWRBc1RleHQoYmxvYik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0KCkiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdmY2Y4Mzgu
LjVhZGU0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wNi0xNCAgSmlhbiBM
aSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlsZVJlYWRlciBpcyBkeXNmdW5j
dGlvbmFsIGluIGRvY3VtZW50cyB3aXRoICJudWxsIiBvcmlnaW4gc3RyaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmaXggaXMgdG8ga2VlcCBp
bi1tZW1vcnkgbWFwIGZyb20gYmxvYiBVUkwgdG8gU2VjdXJpdHlPcmlnaW4gZm9yIHRoZQorICAg
ICAgICB1bmlxdWUgb3JpZ2luIGNhc2UuCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlcy9maWxl
LXJlYWRlci1maWxlLXVybC5odG1sCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6OmdldE9yaWdpbik6IFJldHVybiB0aGUgb3Jp
Z2luIHN0cmluZyBlbWJlZGVkIGluIHRoZSBibG9iIFVSTC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVSTCk6IFJlbW92ZSB0aGUgY2hl
Y2sgZm9yIG51bGwgb3JpZ2luIHN0cmluZyBzaW5jZSBpdCBpcyBoYW5kbGVkIG5vdy4KKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2JVUkwuaDoKKyAgICAgICAgKEJsb2JVUkwpOgorICAgICAgICAqIGZp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVy
TG9hZGVyOjpzdGFydCk6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6b3JpZ2luTWFwKTog
VGhyZWFkLXNwZWNpZmljIGluLW1lbW9yeSBtYXAgZnJvbSB0aGUgYmxvYiBVUkwgdG8gdGhlIG9y
aWdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVy
QmxvYlVSTCk6IEFkZCB0aGUgbWFwIGZyb20gdGhlIGJsb2IgVVJMIHRvIHRoZSBvcmlnaW4uCisg
ICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVS
TCk6IFJlbW92ZSB0aGUgbWFwIGZvciB0aGUgdW5yZWdpc3RlcmVkIGJsb2IgVVJMLgorICAgICAg
ICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2FjaGVkT3JpZ2luKTogUmV0
cmlldmUgdGhlIG9yaWdpbiBhc3NvY2lhdGVkIHdpdGggdGhlIGJsb2IgVVJMLgorICAgICAgICAq
IGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKiBodG1sL0RPTVVSTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01VUkw6OmNyZWF0ZU9iamVjdFVSTCk6CisgICAgICAg
ICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRP
cmlnaW4pOiBSZXR1cm4gdGhlIGNhY2hlZCBvcmlnaW4gZm9yIHRoZSBibG9iIFVSTCBpZiBpdCBl
eGlzdHMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUpOiBDYWxsIGdldENhY2hlZE9yaWdpbiB0byBnZXQgdGhlIGNhY2hlZCBvcmln
aW4gZmlyc3QuCisKIDIwMTItMDYtMTQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDZXJ0YWluIHNldHRpbmdzIGluIENDU2V0dGluZ3Mg
Y291bGQgYmUgZ2xvYmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCA1YzI3ZTNiLi5kMWRj
YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQmxvYjo6Qmxv
Yihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUp
CiB7CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0
aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCiAgICAgbV9pbnRlcm5hbFVS
TCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKDAsIG1faW50ZXJuYWxVUkwsIHNyY1VS
TCk7CiB9CiAKIEJsb2I6On5CbG9iKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQmxvYlVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCmluZGV4
IDVkNzkxNDEuLmY3NDc4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
YlVSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcApAQCAtNTIs
NiArNTIsMTUgQEAgS1VSTCBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpCiAgICAgcmV0dXJu
IGNyZWF0ZUJsb2JVUkwoImJsb2JpbnRlcm5hbDovLyIpOwogfQogCitTdHJpbmcgQmxvYlVSTDo6
Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMo
a0Jsb2JQcm90b2NvbCkpOworCisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IHVybC5wYXRoU3Rh
cnQoKTsKKyAgICB1bnNpZ25lZCBlbmRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsK
KyAgICByZXR1cm4gdXJsLnN0cmluZygpLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCAt
IHN0YXJ0SW5kZXggLSAxKTsKK30KKwogU3RyaW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIoY29u
c3QgS1VSTCYgdXJsKQogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcyhrQmxvYlByb3RvY29s
KSk7CkBAIC02Myw4ICs3Miw2IEBAIFN0cmluZyBCbG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0
IEtVUkwmIHVybCkKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9y
aWdpblN0cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwotICAg
IGlmIChvcmlnaW5TdHJpbmcgPT0gIm51bGwiKQotICAgICAgICByZXR1cm4gS1VSTCgpOwogICAg
IFN0cmluZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sOwogICAgIHVybFN0cmluZyArPSAiOiI7
CiAgICAgdXJsU3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3Ry
aW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5oIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKaW5kZXggNGVhNTlmZS4uMmNhZWMyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgQmxvYlVSTCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIEtVUkwgY3JlYXRlUHVibGljVVJMKFNlY3VyaXR5T3JpZ2lu
Kik7CiAgICAgc3RhdGljIEtVUkwgY3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIGdldE9yaWdpbihjb25zdCBLVVJMJik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRJZGVudGlm
aWVyKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0aWMgY29uc3QgY2hhciogYmxvYlByb3RvY29sKCkg
eyByZXR1cm4ga0Jsb2JQcm90b2NvbDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyTG9hZGVyLmNwcAppbmRleCBlNTUxNDlhLi5lZWM4ZmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBG
aWxlUmVhZGVyTG9hZGVyOjpzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBCbG8KICAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJS
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsRm9yUmVhZGluZywgYmxvYi0+dXJsKCkpOwogCiAgICAg
Ly8gQ29uc3RydWN0IGFuZCBsb2FkIHRoZSByZXF1ZXN0LgogICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAppbmRleCAyZWM0MjFiLi40MjllOGYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKQEAg
LTM0LDcgKzM0LDE1IEBACiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmlj
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCit1c2luZyBXVEY6OlRocmVh
ZFNwZWNpZmljOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDYgKzcyLDEzIEBAIHN0
cnVjdCBCbG9iUmVnaXN0cnlDb250ZXh0IHsKIAogI2lmIEVOQUJMRShCTE9CKQogCit0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gQmxvYlVybE9yaWdpbk1h
cDsKK3N0YXRpYyBUaHJlYWRTcGVjaWZpYzxCbG9iVXJsT3JpZ2luTWFwPiYgb3JpZ2luTWFwKCkK
K3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVGhyZWFkU3BlY2lmaWM8QmxvYlVy
bE9yaWdpbk1hcD4qLCBtYXAgPSBuZXcgVGhyZWFkU3BlY2lmaWM8QmxvYlVybE9yaWdpbk1hcD4p
OworICAgIHJldHVybiAqbWFwOworfQorCiBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkxUYXNr
KHZvaWQqIGNvbnRleHQpCiB7CiAgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JS
ZWdpc3RyeUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0
Kj4oY29udGV4dCkpOwpAQCAtODYsMTEgKzEwMSwxNSBAQCBzdGF0aWMgdm9pZCByZWdpc3RlckJs
b2JVUkxGcm9tVGFzayh2b2lkKiBjb250ZXh0KQogICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVy
QmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIGJsb2JSZWdpc3RyeUNvbnRleHQtPnNy
Y1VSTCk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQordm9pZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgp
KQorICAgIC8vIElmIHRoZSBibG9iIFVSTCBjb250YWlucyBOVUxMIG9yaWdpbiwgYXMgaW4gdGhl
IGNvbnRleHQgd2l0aCB1bmlxdWUgc2VjdXJpdHkgb3JpZ2luIG9yIGZpbGUgVVJMLCBzYXZlIHRo
ZSBtYXBwaW5nIGJldHdlZW4gdXJsIGFuZCBvcmlnaW4gc28gdGhhdCB0aGUgb3JpZ2luIGNhbiBi
ZSByZXRyaXZlZCB3aGVuIGRvaW5nIHNlY3VyaXR5IG9yaWdpbiBjaGVjay4KKyAgICBpZiAob3Jp
Z2luICYmIEJsb2JVUkw6OmdldE9yaWdpbih1cmwpID09ICJudWxsIikKKyAgICAgICAgb3JpZ2lu
TWFwKCktPmFkZCh1cmwuc3RyaW5nKCksIG9yaWdpbik7CisKKyAgICBpZiAoaXNNYWluVGhyZWFk
KCkpIHsKICAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3JjVVJM
KTsKLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICBPd25QdHI8QmxvYlJlZ2lzdHJ5
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCwg
c3JjVVJMKSk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoJnJlZ2lzdGVyQmxvYlVSTEZyb21U
YXNrLCBjb250ZXh0LmxlYWtQdHIoKSk7CiAgICAgfQpAQCAtMTA0LDE0ICsxMjMsMjAgQEAgc3Rh
dGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQqIGNvbnRleHQpCiAKIHZvaWQgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQog
ewotICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAg
ICAgICAgb3JpZ2luTWFwKCktPnJlbW92ZSh1cmwuc3RyaW5nKCkpOwogICAgICAgICBibG9iUmVn
aXN0cnkoKS51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOwotICAgIGVsc2UgeworICAgIH0gZWxzZSB7
CiAgICAgICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsKSk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
JnVucmVnaXN0ZXJCbG9iVVJMVGFzaywgY29udGV4dC5sZWFrUHRyKCkpOwogICAgIH0KIH0KIAor
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2Fj
aGVkT3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gb3JpZ2luTWFwKCktPmdl
dCh1cmwuc3RyaW5nKCkpOworfQorCiAjZWxzZQogCiB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pCkBA
IC0xMjUsNiArMTUwLDEyIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJikKIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpCiB7CiB9CisKK1Bhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmdldENhY2hlZE9yaWdpbihj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvLyBFTkFCTChC
TE9CKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCmluZGV4IGZlN2RmN2YuLmY2NmJkMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCkBAIC0z
MiwxNyArMzIsMjMgQEAKICNkZWZpbmUgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeV9oCiAKICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBLVVJMOworY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0cnkgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0
cjxCbG9iRGF0YT4pOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwo
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKICAgICBz
dGF0aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBvcmlnaW4gZm9yIHRoZSBnaXZlbiBibG9iIFVSTC4gVGhpcyBpcyBiZWNhdXNlIHdl
IGFyZSBub3QgYWJsZSB0byBlbWJlZCB0aGUgdW5pcXVlIHNlY3VyaXR5IG9yaWdpbiBvciB0aGUg
b3JpZ2luIG9mIGZpbGUgVVJMCisgICAgLy8gaW4gdGhlIGJsb2IgVVJMLgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmlnaW4oY29uc3QgS1VSTCYpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9ET01VUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuY3BwCmluZGV4IDM3
YzY1MjAuLjRmOTc4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5jcHAKQEAgLTc4LDcgKzc4LDcgQEAg
U3RyaW5nIERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIEIKICAgICBpZiAocHVibGljVVJMLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVn
aXN0ZXJCbG9iVVJMKHB1YmxpY1VSTCwgYmxvYi0+dXJsKCkpOworICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCBwdWJsaWNVUkwsIGJsb2ItPnVybCgpKTsKICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5wdWJsaWNVUkxNYW5hZ2VyKCkuYmxvYlVSTHMoKS5hZGQocHVibGljVVJMLnN0cmlu
ZygpKTsKIAogICAgIHJldHVybiBwdWJsaWNVUkwuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDI1YmFlMDIuLmY2NDUwM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xp
Y3kuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtODksNiArOTAsMTUgQEAgc3RhdGljIEtVUkwg
ZXh0cmFjdElubmVyVVJMKGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4gS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSk7CiB9CiAKK3N0
YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmlnaW4oY29uc3QgS1VS
TCYgdXJsKQoreworI2lmIEVOQUJMRShCTE9CKQorICAgIGlmICh1cmwucHJvdG9jb2xJcygiYmxv
YiIpKQorICAgICAgICByZXR1cm4gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2FjaGVkT3Jp
Z2luKHVybCk7CisjZW5kaWYKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGJvb2wgc2hv
dWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKCF1cmwu
aXNWYWxpZCgpKQpAQCAtMTcxLDYgKzE4MSwxMCBAQCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlP
cmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG90aGVyKQogCiBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKIHsKKyAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IGNhY2hlZE9yaWdpbiA9IGdldENhY2hlZE9yaWdpbih1cmwp
OworICAgIGlmIChjYWNoZWRPcmlnaW4uZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRPcmln
aW47CisKICAgICBpZiAoc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbih1cmwpKSB7CiAgICAgICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3Jp
Z2luKCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147671</attachid>
            <date>2012-06-14 16:06:07 -0700</date>
            <delta_ts>2012-06-15 01:02:00 -0700</delta_ts>
            <desc>Fix styles</desc>
            <filename>78648_3.diff</filename>
            <type>text/plain</type>
            <size>13300</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MTIzZmRmLi5mNmZkZTkwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDYt
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpbGVSZWFkZXIg
aXMgZHlzZnVuY3Rpb25hbCBpbiBkb2N1bWVudHMgd2l0aCAibnVsbCIgb3JpZ2luIHN0cmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmls
ZXMvZmlsZS1yZWFkZXItZmlsZS11cmwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZmlsZXMvcmVzb3VyY2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sOiBBZGRl
ZC4KKwogMjAxMi0wNi0xNCAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJr
IHRleHQgd2l0aCB0ZXh0IGFsdGVybmF0aXZlIHdpdGggYmx1ZSB1bmRlcmxpbmUuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmlsZS11cmwtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNmZiM2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJs
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA5OiBS
ZWNlaXZlZCBkYXRhOiAwMTIzNDU2Nzg5CisKK1Rlc3QgdGhhdCBGaWxlUmVhZGVyIHdvcmtzIHVu
ZGVyIHRoZSBmaWxlIFVSTCB3aXRoIGZpbGUgcGF0aCBzZXBhcmF0aW9uIGVuZm9yY2VkLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1maWxlLXVybC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1maWxlLXVybC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjA1OGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLmh0bWwKQEAgLTAs
MCArMSwxNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHMoZmFsc2UpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhmYWxzZSk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0icmVzb3Vy
Y2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxkaXYgaWQ9
InJlc3VsdHMiPjwvZGl2PgorVGVzdCB0aGF0IEZpbGVSZWFkZXIgd29ya3MgdW5kZXIgdGhlIGZp
bGUgVVJMIHdpdGggZmlsZSBwYXRoIHNlcGFyYXRpb24gZW5mb3JjZWQuCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9maWxlLXJl
YWRlci1maWxlLXVybC1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3Vy
Y2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUxZmNjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3Jlc291cmNlcy9maWxlLXJlYWRlci1maWxlLXVybC1pZnJhbWUuaHRtbApAQCAt
MCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHJ1blRlc3Qo
KQoreworICAgIHZhciBibG9iID0gbmV3IEJsb2IoWyIwMTIzNDU2Nzg5Il0pOworICAgIHZhciBy
ZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBjb25zb2xlLmxvZygiUmVjZWl2ZWQgZGF0YTogIiArIGV2ZW50LnRh
cmdldC5yZXN1bHQpOworICAgIH0KKyAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorICAgIHJlYWRlci5vbmVy
cm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlJlY2VpdmVkIGVy
cm9yIGV2ZW50OiAiICsgZXZlbnQudGFyZ2V0LmVycm9yLmNvZGUpOworICAgIH07CisgICAgcmVh
ZGVyLnJlYWRBc1RleHQoYmxvYik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0KCkiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdmY2Y4Mzgu
LjVhZGU0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wNi0xNCAgSmlhbiBM
aSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlsZVJlYWRlciBpcyBkeXNmdW5j
dGlvbmFsIGluIGRvY3VtZW50cyB3aXRoICJudWxsIiBvcmlnaW4gc3RyaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmaXggaXMgdG8ga2VlcCBp
bi1tZW1vcnkgbWFwIGZyb20gYmxvYiBVUkwgdG8gU2VjdXJpdHlPcmlnaW4gZm9yIHRoZQorICAg
ICAgICB1bmlxdWUgb3JpZ2luIGNhc2UuCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlcy9maWxl
LXJlYWRlci1maWxlLXVybC5odG1sCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6OmdldE9yaWdpbik6IFJldHVybiB0aGUgb3Jp
Z2luIHN0cmluZyBlbWJlZGVkIGluIHRoZSBibG9iIFVSTC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVSTCk6IFJlbW92ZSB0aGUgY2hl
Y2sgZm9yIG51bGwgb3JpZ2luIHN0cmluZyBzaW5jZSBpdCBpcyBoYW5kbGVkIG5vdy4KKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2JVUkwuaDoKKyAgICAgICAgKEJsb2JVUkwpOgorICAgICAgICAqIGZp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVy
TG9hZGVyOjpzdGFydCk6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6b3JpZ2luTWFwKTog
VGhyZWFkLXNwZWNpZmljIGluLW1lbW9yeSBtYXAgZnJvbSB0aGUgYmxvYiBVUkwgdG8gdGhlIG9y
aWdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVy
QmxvYlVSTCk6IEFkZCB0aGUgbWFwIGZyb20gdGhlIGJsb2IgVVJMIHRvIHRoZSBvcmlnaW4uCisg
ICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVS
TCk6IFJlbW92ZSB0aGUgbWFwIGZvciB0aGUgdW5yZWdpc3RlcmVkIGJsb2IgVVJMLgorICAgICAg
ICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2FjaGVkT3JpZ2luKTogUmV0
cmlldmUgdGhlIG9yaWdpbiBhc3NvY2lhdGVkIHdpdGggdGhlIGJsb2IgVVJMLgorICAgICAgICAq
IGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKiBodG1sL0RPTVVSTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01VUkw6OmNyZWF0ZU9iamVjdFVSTCk6CisgICAgICAg
ICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRP
cmlnaW4pOiBSZXR1cm4gdGhlIGNhY2hlZCBvcmlnaW4gZm9yIHRoZSBibG9iIFVSTCBpZiBpdCBl
eGlzdHMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUpOiBDYWxsIGdldENhY2hlZE9yaWdpbiB0byBnZXQgdGhlIGNhY2hlZCBvcmln
aW4gZmlyc3QuCisKIDIwMTItMDYtMTQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDZXJ0YWluIHNldHRpbmdzIGluIENDU2V0dGluZ3Mg
Y291bGQgYmUgZ2xvYmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCA1YzI3ZTNiLi5kMWRj
YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQmxvYjo6Qmxv
Yihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUp
CiB7CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0
aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCiAgICAgbV9pbnRlcm5hbFVS
TCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKDAsIG1faW50ZXJuYWxVUkwsIHNyY1VS
TCk7CiB9CiAKIEJsb2I6On5CbG9iKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQmxvYlVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCmluZGV4
IDVkNzkxNDEuLmY3NDc4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
YlVSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcApAQCAtNTIs
NiArNTIsMTUgQEAgS1VSTCBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpCiAgICAgcmV0dXJu
IGNyZWF0ZUJsb2JVUkwoImJsb2JpbnRlcm5hbDovLyIpOwogfQogCitTdHJpbmcgQmxvYlVSTDo6
Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMo
a0Jsb2JQcm90b2NvbCkpOworCisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IHVybC5wYXRoU3Rh
cnQoKTsKKyAgICB1bnNpZ25lZCBlbmRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsK
KyAgICByZXR1cm4gdXJsLnN0cmluZygpLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCAt
IHN0YXJ0SW5kZXggLSAxKTsKK30KKwogU3RyaW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIoY29u
c3QgS1VSTCYgdXJsKQogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcyhrQmxvYlByb3RvY29s
KSk7CkBAIC02Myw4ICs3Miw2IEBAIFN0cmluZyBCbG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0
IEtVUkwmIHVybCkKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9y
aWdpblN0cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0cmluZy5pc0VtcHR5KCkpOwotICAg
IGlmIChvcmlnaW5TdHJpbmcgPT0gIm51bGwiKQotICAgICAgICByZXR1cm4gS1VSTCgpOwogICAg
IFN0cmluZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sOwogICAgIHVybFN0cmluZyArPSAiOiI7
CiAgICAgdXJsU3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3Ry
aW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5oIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKaW5kZXggNGVhNTlmZS4uMmNhZWMyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgQmxvYlVSTCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIEtVUkwgY3JlYXRlUHVibGljVVJMKFNlY3VyaXR5T3JpZ2lu
Kik7CiAgICAgc3RhdGljIEtVUkwgY3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIGdldE9yaWdpbihjb25zdCBLVVJMJik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRJZGVudGlm
aWVyKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0aWMgY29uc3QgY2hhciogYmxvYlByb3RvY29sKCkg
eyByZXR1cm4ga0Jsb2JQcm90b2NvbDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyTG9hZGVyLmNwcAppbmRleCBlNTUxNDlhLi5lZWM4ZmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBG
aWxlUmVhZGVyTG9hZGVyOjpzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBCbG8KICAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJS
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsRm9yUmVhZGluZywgYmxvYi0+dXJsKCkpOwogCiAgICAg
Ly8gQ29uc3RydWN0IGFuZCBsb2FkIHRoZSByZXF1ZXN0LgogICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAppbmRleCAyZWM0MjFiLi41NGMyZGMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKQEAg
LTM0LDcgKzM0LDE1IEBACiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmlj
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCit1c2luZyBXVEY6OlRocmVh
ZFNwZWNpZmljOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDYgKzcyLDEzIEBAIHN0
cnVjdCBCbG9iUmVnaXN0cnlDb250ZXh0IHsKIAogI2lmIEVOQUJMRShCTE9CKQogCit0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gQmxvYlVybE9yaWdpbk1h
cDsKK3N0YXRpYyBUaHJlYWRTcGVjaWZpYzxCbG9iVXJsT3JpZ2luTWFwPiYgb3JpZ2luTWFwKCkK
K3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVGhyZWFkU3BlY2lmaWM8QmxvYlVy
bE9yaWdpbk1hcD4qLCBtYXAgPSBuZXcgVGhyZWFkU3BlY2lmaWM8QmxvYlVybE9yaWdpbk1hcD4p
OworICAgIHJldHVybiAqbWFwOworfQorCiBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkxUYXNr
KHZvaWQqIGNvbnRleHQpCiB7CiAgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JS
ZWdpc3RyeUNvbnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0
Kj4oY29udGV4dCkpOwpAQCAtODYsOCArMTAxLDEyIEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxv
YlVSTEZyb21UYXNrKHZvaWQqIGNvbnRleHQpCiAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJC
bG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+c3Jj
VVJMKTsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit2b2lkIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKIHsKKyAgICAvLyBJZiB0aGUgYmxvYiBVUkwg
Y29udGFpbnMgbnVsbCBvcmlnaW4sIGFzIGluIHRoZSBjb250ZXh0IHdpdGggdW5pcXVlIHNlY3Vy
aXR5IG9yaWdpbiBvciBmaWxlIFVSTCwgc2F2ZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHVybCBhbmQg
b3JpZ2luIHNvIHRoYXQgdGhlIG9yaWdpbiBjYW4gYmUgcmV0cml2ZWQgd2hlbiBkb2luZyBzZWN1
cml0eSBvcmlnaW4gY2hlY2suCisgICAgaWYgKG9yaWdpbiAmJiBCbG9iVVJMOjpnZXRPcmlnaW4o
dXJsKSA9PSAibnVsbCIpCisgICAgICAgIG9yaWdpbk1hcCgpLT5hZGQodXJsLnN0cmluZygpLCBv
cmlnaW4pOworCiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQogICAgICAgICBibG9iUmVnaXN0cnko
KS5yZWdpc3RlckJsb2JVUkwodXJsLCBzcmNVUkwpOwogICAgIGVsc2UgewpAQCAtMTA0LDE0ICsx
MjMsMjAgQEAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQqIGNvbnRleHQp
CiAKIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3Qg
S1VSTCYgdXJsKQogewotICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICBpZiAoaXNNYWluVGhy
ZWFkKCkpIHsKKyAgICAgICAgb3JpZ2luTWFwKCktPnJlbW92ZSh1cmwuc3RyaW5nKCkpOwogICAg
ICAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOwotICAgIGVsc2Ugewor
ICAgIH0gZWxzZSB7CiAgICAgICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRQdHIobmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsKSk7CiAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoJnVucmVnaXN0ZXJCbG9iVVJMVGFzaywgY29udGV4dC5sZWFrUHRyKCkpOwog
ICAgIH0KIH0KIAorUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6Z2V0Q2FjaGVkT3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gb3Jp
Z2luTWFwKCktPmdldCh1cmwuc3RyaW5nKCkpOworfQorCiAjZWxzZQogCiB2b2lkIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxC
bG9iRGF0YT4pCkBAIC0xMjUsNiArMTUwLDEyIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJikKIHZvaWQgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpCiB7CiB9CisK
K1Bhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmdldENh
Y2hlZE9yaWdpbihjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIDA7Cit9CisKICNlbmRp
ZiAvLyBFTkFCTChCTE9CKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCmluZGV4IGZlN2RmN2YuLmY2
NmJkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oCkBAIC0zMiwxNyArMzIsMjMgQEAKICNkZWZpbmUgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eV9oCiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBL
VVJMOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0
cnkgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiwgUGFzc093blB0cjxCbG9iRGF0YT4pOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3Jj
VVJMKTsKICAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisK
KyAgICAvLyBSZXR1cm5zIHRoZSBvcmlnaW4gZm9yIHRoZSBnaXZlbiBibG9iIFVSTC4gVGhpcyBp
cyBiZWNhdXNlIHdlIGFyZSBub3QgYWJsZSB0byBlbWJlZCB0aGUgdW5pcXVlIHNlY3VyaXR5IG9y
aWdpbiBvciB0aGUgb3JpZ2luIG9mIGZpbGUgVVJMCisgICAgLy8gaW4gdGhlIGJsb2IgVVJMLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmlnaW4oY29u
c3QgS1VSTCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwu
Y3BwCmluZGV4IDM3YzY1MjAuLjRmOTc4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRE9NVVJMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5jcHAKQEAgLTc4
LDcgKzc4LDcgQEAgU3RyaW5nIERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEIKICAgICBpZiAocHVibGljVVJMLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHB1YmxpY1VSTCwgYmxvYi0+dXJsKCkpOworICAgIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBwdWJsaWNVUkwsIGJsb2ItPnVybCgpKTsKICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wdWJsaWNVUkxNYW5hZ2VyKCkuYmxvYlVSTHMoKS5hZGQocHVi
bGljVVJMLnN0cmluZygpKTsKIAogICAgIHJldHVybiBwdWJsaWNVUkwuc3RyaW5nKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDI1YmFlMDIuLjhjNzMzOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtODksNiArOTAsMTUgQEAg
c3RhdGljIEtVUkwgZXh0cmFjdElubmVyVVJMKGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgp
KSk7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmln
aW4oY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShCTE9CKQorICAgIGlmICh1cmwucHJv
dG9jb2xJcygiYmxvYiIpKQorICAgICAgICByZXR1cm4gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
Z2V0Q2FjaGVkT3JpZ2luKHVybCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGlj
IGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAg
aWYgKCF1cmwuaXNWYWxpZCgpKQpAQCAtMTcxLDYgKzE4MSwxMCBAQCBTZWN1cml0eU9yaWdpbjo6
U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG90aGVyKQogCiBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCkK
IHsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IGNhY2hlZE9yaWdpbiA9IGdldENhY2hlZE9y
aWdpbih1cmwpOworICAgIGlmIChjYWNoZWRPcmlnaW4uZ2V0KCkpCisgICAgICAgIHJldHVybiBj
YWNoZWRPcmlnaW47CisKICAgICBpZiAoc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbih1cmwpKSB7
CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gYWRvcHRSZWYobmV3IFNl
Y3VyaXR5T3JpZ2luKCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147768</attachid>
            <date>2012-06-15 01:02:08 -0700</date>
            <delta_ts>2012-06-15 02:57:31 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78648-20120615170207.patch</filename>
            <type>text/plain</type>
            <size>14204</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZmMDMyYjdjNjBlOWUy
NGUwYjE2MDhhNjNmYmJlMTMwYmFkNTMyNi4uMjNjNTNjNTEwOTFlODQ0YTFhNDk2MGFiNzNiOTU5
YjNlNWFmYWJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA2LTE1ICBKaWFu
IExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaWxlUmVhZGVyIGlzIGR5c2Z1
bmN0aW9uYWwgaW4gZG9jdW1lbnRzIHdpdGggIm51bGwiIG9yaWdpbiBzdHJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBUaGUgZml4IGlzIHRvIGtlZXAgaW4t
bWVtb3J5IG1hcCBmcm9tIGJsb2IgVVJMIHRvIFNlY3VyaXR5T3JpZ2luIGZvciB0aGUKKyAgICAg
ICAgdW5pcXVlIG9yaWdpbiBjYXNlLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZmlsZXMvZmlsZS1y
ZWFkZXItZmlsZS11cmwuaHRtbAorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYlVSTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpnZXRPcmlnaW4pOiBSZXR1cm4gdGhlIG9yaWdp
biBzdHJpbmcgZW1iZWRlZCBpbiB0aGUgYmxvYiBVUkwuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6OmNyZWF0ZUJsb2JVUkwpOiBSZW1vdmUgdGhlIGNoZWNr
IGZvciBudWxsIG9yaWdpbiBzdHJpbmcgc2luY2UgaXQgaXMgaGFuZGxlZCBub3cuCisgICAgICAg
ICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChCbG9iVVJMKToKKyAgICAgICAgKiBmaWxl
YXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxv
YWRlcjo6c3RhcnQpOgorICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9yaWdpbk1hcCk6IFRo
cmVhZC1zcGVjaWZpYyBpbi1tZW1vcnkgbWFwIGZyb20gdGhlIGJsb2IgVVJMIHRvIHRoZSBvcmln
aW4uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJs
b2JVUkwpOiBBZGQgdGhlIG1hcCBmcm9tIHRoZSBibG9iIFVSTCB0byB0aGUgb3JpZ2luLgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwp
OiBSZW1vdmUgdGhlIG1hcCBmb3IgdGhlIHVucmVnaXN0ZXJlZCBibG9iIFVSTC4KKyAgICAgICAg
KFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmdldENhY2hlZE9yaWdpbik6IFJldHJp
ZXZlIHRoZSBvcmlnaW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBibG9iIFVSTC4KKyAgICAgICAgKiBm
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoVGhyZWFkYWJsZUJsb2JSZWdpc3RyeSk6CisgICAgICAgICogaHRtbC9ET01VUkwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NVVJMOjpjcmVhdGVPYmplY3RVUkwpOgorICAgICAgICAq
IHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkT3Jp
Z2luKTogUmV0dXJuIHRoZSBjYWNoZWQgb3JpZ2luIGZvciB0aGUgYmxvYiBVUkwgaWYgaXQgZXhp
c3RzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKTogQ2FsbCBnZXRDYWNoZWRPcmlnaW4gdG8gZ2V0IHRoZSBjYWNoZWQgb3JpZ2lu
IGZpcnN0LgorCiAyMDEyLTA2LTE1ICBTaWx2aWEgUGZlaWZmZXIgIDxzaWx2aWFwZkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQWRkIGZ1bGxzY3JlZW4gYnV0dG9uIHRvIENocm9tZSB2aWRlbyBj
b250cm9scyBmb3IgdmlkZW8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2IuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCA1YzI3ZTNiNWJk
ZjllZTQ5Yzc5NDFlN2NjZmZiYWZkY2E1ZjFlMWM2Li5kMWRjYjUxYWIwMTU2Y2U4ZmE4OTBkZjM3
MGM1N2YwMzUyYzQ0MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTc3LDcgKzc3LDcg
QEAgQmxvYjo6QmxvYihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9u
ZyBsb25nIHNpemUpCiB7CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVn
aXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCiAgICAg
bV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7
CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKDAsIG1faW50ZXJu
YWxVUkwsIHNyY1VSTCk7CiB9CiAKIEJsb2I6On5CbG9iKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JV
UkwuY3BwCmluZGV4IDVkNzkxNDFhNTQ1NGUyYjIwZGUxNTEwYWM4NWY1OGIyOWI5NDdkNmMuLmY3
NDc4NTM0Yzc3NWE4YTk0Yzc1OGRmZTNlODVlMGQ3ZWQxOTg1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iVVJMLmNwcApAQCAtNTIsNiArNTIsMTUgQEAgS1VSTCBCbG9iVVJMOjpjcmVhdGVJbnRl
cm5hbFVSTCgpCiAgICAgcmV0dXJuIGNyZWF0ZUJsb2JVUkwoImJsb2JpbnRlcm5hbDovLyIpOwog
fQogCitTdHJpbmcgQmxvYlVSTDo6Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBB
U1NFUlQodXJsLnByb3RvY29sSXMoa0Jsb2JQcm90b2NvbCkpOworCisgICAgdW5zaWduZWQgc3Rh
cnRJbmRleCA9IHVybC5wYXRoU3RhcnQoKTsKKyAgICB1bnNpZ25lZCBlbmRJbmRleCA9IHVybC5w
YXRoQWZ0ZXJMYXN0U2xhc2goKTsKKyAgICByZXR1cm4gdXJsLnN0cmluZygpLnN1YnN0cmluZyhz
dGFydEluZGV4LCBlbmRJbmRleCAtIHN0YXJ0SW5kZXggLSAxKTsKK30KKwogU3RyaW5nIEJsb2JV
Ukw6OmdldElkZW50aWZpZXIoY29uc3QgS1VSTCYgdXJsKQogewogICAgIEFTU0VSVCh1cmwucHJv
dG9jb2xJcyhrQmxvYlByb3RvY29sKSk7CkBAIC02Myw4ICs3Miw2IEBAIFN0cmluZyBCbG9iVVJM
OjpnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVybCkKIEtVUkwgQmxvYlVSTDo6Y3JlYXRlQmxv
YlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZykKIHsKICAgICBBU1NFUlQoIW9yaWdpblN0
cmluZy5pc0VtcHR5KCkpOwotICAgIGlmIChvcmlnaW5TdHJpbmcgPT0gIm51bGwiKQotICAgICAg
ICByZXR1cm4gS1VSTCgpOwogICAgIFN0cmluZyB1cmxTdHJpbmcgPSBrQmxvYlByb3RvY29sOwog
ICAgIHVybFN0cmluZyArPSAiOiI7CiAgICAgdXJsU3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2Nh
cGVTZXF1ZW5jZXMob3JpZ2luU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYlVSTC5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKaW5kZXgg
NGVhNTlmZWZlMGYzYTFlOGVhYzc4ZGEyOTMxZmFhMTA2M2YxYWQ0Zi4uMmNhZWMyOTU3ZjZiOWZi
YWE0MTZjY2YyZTdhNTFkMmJmNWFmZjlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKQEAg
LTUwLDYgKzUwLDcgQEAgY2xhc3MgQmxvYlVSTCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEtVUkwg
Y3JlYXRlUHVibGljVVJMKFNlY3VyaXR5T3JpZ2luKik7CiAgICAgc3RhdGljIEtVUkwgY3JlYXRl
SW50ZXJuYWxVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldE9yaWdpbihjb25zdCBLVVJMJik7
CiAgICAgc3RhdGljIFN0cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0
aWMgY29uc3QgY2hhciogYmxvYlByb3RvY29sKCkgeyByZXR1cm4ga0Jsb2JQcm90b2NvbDsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAppbmRleCBlNTUx
NDlhMzFkNjEwMzExZjFhYWNhODIxNjU2OWRkMDQwNGJlNzc3Li5lZWM4ZmY2YTgwYjBjZGNiY2Fh
NTkxYWJiNDhkMjdlMmRkOGRkNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlckxvYWRlci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpz
dGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG8K
ICAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV91
cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCks
IG1fdXJsRm9yUmVhZGluZywgYmxvYi0+dXJsKCkpOwogCiAgICAgLy8gQ29uc3RydWN0IGFuZCBs
b2FkIHRoZSByZXF1ZXN0LgogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsRm9yUmVh
ZGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9i
UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmNwcAppbmRleCAyZWM0MjFiYWM4OWE1MDBlMGVjNjgxN2UxMGQzNDJmYTk5N2Q3MGEwLi41
NGMyZGMzNGJiZjkxYzczODI5MGQ4M2UyODRhYTkyYjU4NmQ5MDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKQEAgLTM0LDcgKzM0
LDE1IEBACiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5o
IgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCit1c2luZyBXVEY6OlRocmVhZFNwZWNpZmlj
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDYgKzcyLDEzIEBAIHN0cnVjdCBCbG9i
UmVnaXN0cnlDb250ZXh0IHsKIAogI2lmIEVOQUJMRShCTE9CKQogCit0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gQmxvYlVybE9yaWdpbk1hcDsKK3N0YXRp
YyBUaHJlYWRTcGVjaWZpYzxCbG9iVXJsT3JpZ2luTWFwPiYgb3JpZ2luTWFwKCkKK3sKKyAgICBB
dG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVGhyZWFkU3BlY2lmaWM8QmxvYlVybE9yaWdpbk1h
cD4qLCBtYXAgPSBuZXcgVGhyZWFkU3BlY2lmaWM8QmxvYlVybE9yaWdpbk1hcD4pOworICAgIHJl
dHVybiAqbWFwOworfQorCiBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQqIGNv
bnRleHQpCiB7CiAgICAgT3duUHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNv
bnRleHQgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29udGV4
dCkpOwpAQCAtODYsOCArMTAxLDEyIEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZyb21U
YXNrKHZvaWQqIGNvbnRleHQpCiAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKGJs
b2JSZWdpc3RyeUNvbnRleHQtPnVybCwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+c3JjVVJMKTsKIH0K
IAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6
OnJlZ2lzdGVyQmxvYlVSTChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IEtVUkwmIHNyY1VSTCkKIHsKKyAgICAvLyBJZiB0aGUgYmxvYiBVUkwgY29udGFpbnMg
bnVsbCBvcmlnaW4sIGFzIGluIHRoZSBjb250ZXh0IHdpdGggdW5pcXVlIHNlY3VyaXR5IG9yaWdp
biBvciBmaWxlIFVSTCwgc2F2ZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHVybCBhbmQgb3JpZ2luIHNv
IHRoYXQgdGhlIG9yaWdpbiBjYW4gYmUgcmV0cml2ZWQgd2hlbiBkb2luZyBzZWN1cml0eSBvcmln
aW4gY2hlY2suCisgICAgaWYgKG9yaWdpbiAmJiBCbG9iVVJMOjpnZXRPcmlnaW4odXJsKSA9PSAi
bnVsbCIpCisgICAgICAgIG9yaWdpbk1hcCgpLT5hZGQodXJsLnN0cmluZygpLCBvcmlnaW4pOwor
CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQogICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3Rl
ckJsb2JVUkwodXJsLCBzcmNVUkwpOwogICAgIGVsc2UgewpAQCAtMTA0LDE0ICsxMjMsMjAgQEAg
c3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQqIGNvbnRleHQpCiAKIHZvaWQg
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJs
KQogewotICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsK
KyAgICAgICAgb3JpZ2luTWFwKCktPnJlbW92ZSh1cmwuc3RyaW5nKCkpOwogICAgICAgICBibG9i
UmVnaXN0cnkoKS51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOwotICAgIGVsc2UgeworICAgIH0gZWxz
ZSB7CiAgICAgICAgIE93blB0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRQ
dHIobmV3IEJsb2JSZWdpc3RyeUNvbnRleHQodXJsKSk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoJnVucmVnaXN0ZXJCbG9iVVJMVGFzaywgY29udGV4dC5sZWFrUHRyKCkpOwogICAgIH0KIH0K
IAorUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6Z2V0
Q2FjaGVkT3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gb3JpZ2luTWFwKCkt
PmdldCh1cmwuc3RyaW5nKCkpOworfQorCiAjZWxzZQogCiB2b2lkIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4p
CkBAIC0xMjUsNiArMTUwLDEyIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJikKIHZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpCiB7CiB9CisKK1Bhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OmdldENhY2hlZE9yaWdp
bihjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvLyBFTkFC
TChCTE9CKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCmluZGV4IGZlN2RmN2Y0ZmE0MTM1ZDg1MzFi
ZmNiNTg5ZjkxYWQ1NmRkNmFhZGMuLmY2NmJkMTBjNGViN2IzNTYxYWMzZDUzMDdhZmEwMjY0YmZi
OTU1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oCkBAIC0zMiwxNyArMzIsMjMgQEAKICNkZWZpbmUgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eV9oCiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBL
VVJMOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVnaXN0
cnkgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiwgUGFzc093blB0cjxCbG9iRGF0YT4pOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3Jj
VVJMKTsKICAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisK
KyAgICAvLyBSZXR1cm5zIHRoZSBvcmlnaW4gZm9yIHRoZSBnaXZlbiBibG9iIFVSTC4gVGhpcyBp
cyBiZWNhdXNlIHdlIGFyZSBub3QgYWJsZSB0byBlbWJlZCB0aGUgdW5pcXVlIHNlY3VyaXR5IG9y
aWdpbiBvciB0aGUgb3JpZ2luIG9mIGZpbGUgVVJMCisgICAgLy8gaW4gdGhlIGJsb2IgVVJMLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNoZWRPcmlnaW4oY29u
c3QgS1VSTCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwu
Y3BwCmluZGV4IDM3YzY1MjBlNjMxYjExNGJjYWYyMDYyN2FmMzZkNjMzZmI3ZThkMTIuLjRmOTc4
MGRjZDZiMzM0NzYzOThiYjRjNjhiNDk4ZTVjYjA5OTE5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5j
cHAKQEAgLTc4LDcgKzc4LDcgQEAgU3RyaW5nIERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEIKICAgICBpZiAocHVi
bGljVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHB1YmxpY1VSTCwgYmxvYi0+dXJsKCkp
OworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBwdWJsaWNVUkwsIGJsb2ItPnVybCgpKTsK
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wdWJsaWNVUkxNYW5hZ2VyKCkuYmxvYlVSTHMo
KS5hZGQocHVibGljVVJMLnN0cmluZygpKTsKIAogICAgIHJldHVybiBwdWJsaWNVUkwuc3RyaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDI1YmFlMDI4NDlh
MWJiYTE4NTc4YmZiMDIyM2FjMmQ0NDNlMmY0YTkuLjhjNzMzOTNiZjVlNTZlZTM1NmQwNGM5ZmQ2
NDM0YThlOWUxOGIzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpA
QCAtODksNiArOTAsMTUgQEAgc3RhdGljIEtVUkwgZXh0cmFjdElubmVyVVJMKGNvbnN0IEtVUkwm
IHVybCkKICAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlcyh1cmwucGF0aCgpKSk7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBnZXRDYWNoZWRPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShCTE9C
KQorICAgIGlmICh1cmwucHJvdG9jb2xJcygiYmxvYiIpKQorICAgICAgICByZXR1cm4gVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6Z2V0Q2FjaGVkT3JpZ2luKHVybCk7CisjZW5kaWYKKyAgICByZXR1
cm4gMDsKK30KKwogc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjb25zdCBL
VVJMJiB1cmwpCiB7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQpAQCAtMTcxLDYgKzE4MSwxMCBA
QCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG90
aGVyKQogCiBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KGNvbnN0IEtVUkwmIHVybCkKIHsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IGNhY2hlZE9y
aWdpbiA9IGdldENhY2hlZE9yaWdpbih1cmwpOworICAgIGlmIChjYWNoZWRPcmlnaW4uZ2V0KCkp
CisgICAgICAgIHJldHVybiBjYWNoZWRPcmlnaW47CisKICAgICBpZiAoc2hvdWxkVHJlYXRBc1Vu
aXF1ZU9yaWdpbih1cmwpKSB7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2lu
ID0gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKCkpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODg4OGM1MDZjNDBj
NTkyMjU0OTBlZTQ4NWI4NDRhZTI3ZmRjNmQwOS4uYmM1MzgzZWY3OTc0ODFkYjE4MDE1MzViM2Yw
Mzc1YjQ2NGRiNGI5MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA2LTE1ICBKaWFuIExp
ICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaWxlUmVhZGVyIGlzIGR5c2Z1bmN0
aW9uYWwgaW4gZG9jdW1lbnRzIHdpdGggIm51bGwiIG9yaWdpbiBzdHJpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICAqIGZhc3QvZmlsZXMvZmlsZS1yZWFkZXIt
ZmlsZS11cmwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUt
cmVhZGVyLWZpbGUtdXJsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXMvcmVzb3Vy
Y2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNi0x
NSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgR1RLIGdhcmRlbmluZywgdXBkYXRpbmcgYmFzZWxpbmVzIGFmdGVyIHIxMjA0MTEuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmlsZS11cmwt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxNmZiM2MxZDI3ZDVmMTQ1NDllY2M4NTY5MzdhYjQ0
NWRmODcwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUt
cmVhZGVyLWZpbGUtdXJsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA5OiBSZWNlaXZlZCBkYXRhOiAwMTIzNDU2Nzg5CisKK1Rlc3QgdGhhdCBGaWxl
UmVhZGVyIHdvcmtzIHVuZGVyIHRoZSBmaWxlIFVSTCB3aXRoIGZpbGUgcGF0aCBzZXBhcmF0aW9u
IGVuZm9yY2VkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRl
ci1maWxlLXVybC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1maWxl
LXVybC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NjA1OGMwZWYzYzc0MzAwNzkzNjAxN2M4ZTUxMWMxZjZj
NmI5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVh
ZGVyLWZpbGUtdXJsLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoZmFsc2UpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhmYWxz
ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5o
dG1sIj48L2lmcmFtZT4KKzxkaXYgaWQ9InJlc3VsdHMiPjwvZGl2PgorVGVzdCB0aGF0IEZpbGVS
ZWFkZXIgd29ya3MgdW5kZXIgdGhlIGZpbGUgVVJMIHdpdGggZmlsZSBwYXRoIHNlcGFyYXRpb24g
ZW5mb3JjZWQuCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3Jlc291cmNlcy9maWxlLXJlYWRlci1maWxlLXVybC1pZnJhbWUuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL2ZpbGUtcmVhZGVyLWZpbGUtdXJsLWlmcmFtZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUxZmNjNjljMzM1OWRlNmFlZTc4NmQwODRlY2M2ZjYzZTllODA1NzUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9maWxl
LXJlYWRlci1maWxlLXVybC1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBibG9iID0gbmV3
IEJsb2IoWyIwMTIzNDU2Nzg5Il0pOworICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigp
OworICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBjb25zb2xl
LmxvZygiUmVjZWl2ZWQgZGF0YTogIiArIGV2ZW50LnRhcmdldC5yZXN1bHQpOworICAgIH0KKyAg
ICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgfQorICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgY29uc29sZS5sb2coIlJlY2VpdmVkIGVycm9yIGV2ZW50OiAiICsgZXZlbnQudGFy
Z2V0LmVycm9yLmNvZGUpOworICAgIH07CisgICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7Cit9
CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>