<?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>62112</bug_id>
          
          <creation_ts>2011-06-05 22:38:06 -0700</creation_ts>
          <short_desc>Context-aware HTML paste for Chromium</short_desc>
          <delta_ts>2011-10-15 00:14:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>60620</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Daniel Cheng">dcheng</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jberlin</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>415708</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-06-05 22:38:06 -0700</bug_when>
    <thetext>We need this so we can support pastes of table cells without the surrounding table; otherwise, the HTML5 parser will normally strip them out. We plan to support this by passing the entire context with the fragment range--that way, we can recreate the entire document and then extract just the markup we care about. If we pass the fragment directly to the HTML5 parser, elements that are &apos;impossible&apos; in the current context just get removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415709</commentid>
    <comment_count>1</comment_count>
      <attachid>96064</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-06-05 22:43:19 -0700</bug_when>
    <thetext>Created attachment 96064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475748</commentid>
    <comment_count>2</comment_count>
      <attachid>109219</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-09-29 16:34:50 -0700</bug_when>
    <thetext>Created attachment 109219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475750</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-09-29 16:39:58 -0700</bug_when>
    <thetext>This patch isn&apos;t quite in final condition yet, but it does work. I have a few questions that I&apos;m looking for answers to, in addition to comments on the code itself:

1) Is markup.cpp the appropriate place for this new functionality?
2) How should I handle LayoutTest diffs? Because the parsing algorithm is different, layout tests that do pasting could have different results now as well.
3) Should we just use the comment markers that CF_HTML provides (&lt;!--StartFragment--&gt; and &lt;!--EndFragment--&gt;) or is there a possibility we&apos;ll want to use this on non-Windows platforms? For example, I think it might be useful to support HTML paste as described in the Clipboards Events working draft.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475793</commentid>
    <comment_count>4</comment_count>
      <attachid>109219</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 18:11:44 -0700</bug_when>
    <thetext>Comment on attachment 109219
Patch

Attachment 109219 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9899262

New failing tests:
editing/inserting/insert-3907422-fix.html
editing/pasteboard/5065605.html
editing/pasteboard/4922709.html
editing/pasteboard/4944770-2.html
editing/inserting/insert-paste-bidi-control.html
editing/pasteboard/5247341.html
editing/inserting/insert-3786362-fix.html
editing/pasteboard/19644-1.html
editing/pasteboard/4242293.html
editing/execCommand/4128080-2.html
editing/pasteboard/4944770-1.html
editing/pasteboard/4989774.html
editing/pasteboard/5478250.html
editing/pasteboard/4242293-1.html
editing/pasteboard/5071074.html
editing/pasteboard/5028447.html
http/tests/misc/copy-resolves-urls.html
editing/pasteboard/5075944.html
editing/pasteboard/19644-2.html
editing/pasteboard/4641033.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477094</commentid>
    <comment_count>5</comment_count>
      <attachid>109219</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 11:24:35 -0700</bug_when>
    <thetext>Comment on attachment 109219
Patch

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

I&apos;m sad that there&apos;s no way for us to test this.

&gt; Source/WebCore/editing/markup.cpp:50
&gt; +#include &quot;FileChooser.h&quot;
&gt; +#include &quot;FormState.h&quot;

Why are these headers required here?

&gt; Source/WebCore/editing/markup.cpp:54
&gt; +#include &quot;HTMLDocument.h&quot;

Ditto.

&gt; Source/WebCore/editing/markup.cpp:56
&gt; +#include &quot;HTMLFormElement.h&quot;

Ditto.

&gt; Source/WebCore/editing/markup.cpp:77
&gt; +namespace {

Why do we need an anonymous namespace? We don&apos;t normally do this in WebCore.

&gt; Source/WebCore/editing/markup.cpp:80
&gt; +Page* pageForParsing = 0;
&gt; +
&gt; +bool ensurePageForParsingInitialized()

I&apos;d prefer this function returned a page so rename it to something like &quot;Page* pageForPaste()&quot;.

&gt; Source/WebCore/editing/markup.cpp:85
&gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;

You need to use DEFINE_STATIC_LOCAL. And please use OwnPtr.

&gt; Source/WebCore/editing/markup.cpp:763
&gt; +    // We use comment tags to help us extract the appropriate DocumentFragment.
&gt; +    const char beginTag[] = &quot;3f81c6fb-e92e-417d-a05e-fd6f7a6c883c&quot;;
&gt; +    const char endTag[] = &quot;3879efc4-7f0a-4352-ba73-61158bbecd70&quot;;

I&apos;d prefer using webkit prefix e.g. &lt;!--webkit-fragment-marker--&gt; or&lt;?-webkit-fragment-marker?&gt;  Also we should make sure that this string doesn&apos;t exist inside the markup and if it does, we need to append appropriate text to distinguish ours from them.

&gt; Source/WebCore/editing/markup.cpp:783
&gt; +    // TODO: We need to do some cleanup before loading the new doc... figure out what.

We don&apos;t use TODO in WebKit. It should be FIXME.

&gt; Source/WebCore/editing/markup.cpp:795
&gt; +            if (static_cast&lt;CharacterData*&gt;(n)-&gt;data() == endTag)
&gt; +                fragmentEndNode = n;
&gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; +                break;

So there&apos;s a case where fragmentStartNode appears after fragmentStartNode?

&gt; Source/WebCore/editing/markup.cpp:801
&gt; +                                        Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; +                                        Position(fragmentEndNode, Position::PositionIsBeforeAnchor));

Nit: indentation. Position should be indented by exactly 8 spaces and should NOT be assigned with pageForParsing or RefPtr&lt;Range&gt;.

&gt; Source/WebKit/chromium/public/WebClipboard.h:69
&gt; +    virtual WebString readHTML(
&gt; +        Buffer buffer, WebURL* pageURL, int* fragmentStart,
&gt; +        int* fragmentEnd) { return WebString(); }

It seems like we should put all of the them in one line. As I understand it, Source/WebKit/chromium follows WebKit coding guideline so there&apos;s no 80-column restriction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477348</commentid>
    <comment_count>6</comment_count>
      <attachid>109219</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 16:57:15 -0700</bug_when>
    <thetext>Comment on attachment 109219
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Context-aware HTML paste

Why is the bug title here doesn&apos;t match the one on Bugzilla?

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

You should explain why we can&apos;t have a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477349</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 16:58:06 -0700</bug_when>
    <thetext>Since this code can be used by Apple&apos;s Windows port as well, it&apos;s more appropriate to label it with [Win].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478941</commentid>
    <comment_count>8</comment_count>
      <attachid>109914</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 22:16:17 -0700</bug_when>
    <thetext>Created attachment 109914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478942</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 22:18:42 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478945</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 22:22:46 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 109219 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109219&amp;action=review
&gt; 
&gt; I&apos;m sad that there&apos;s no way for us to test this.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:50
&gt; &gt; +#include &quot;FileChooser.h&quot;
&gt; &gt; +#include &quot;FormState.h&quot;
&gt; 
&gt; Why are these headers required here?
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:54
&gt; &gt; +#include &quot;HTMLDocument.h&quot;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:56
&gt; &gt; +#include &quot;HTMLFormElement.h&quot;
&gt; 
&gt; Ditto.
&gt; 

Removed. They were leftover from some other approaches I had tried.

&gt; &gt; Source/WebCore/editing/markup.cpp:77
&gt; &gt; +namespace {
&gt; 
&gt; Why do we need an anonymous namespace? We don&apos;t normally do this in WebCore.
&gt; 

Done. Made it a static function.

&gt; &gt; Source/WebCore/editing/markup.cpp:80
&gt; &gt; +Page* pageForParsing = 0;
&gt; &gt; +
&gt; &gt; +bool ensurePageForParsingInitialized()
&gt; 
&gt; I&apos;d prefer this function returned a page so rename it to something like &quot;Page* pageForPaste()&quot;.
&gt; 

Done. I&apos;m looking for naming suggestions. pageForPaste() doesn&apos;t seem entirely appropriate here, as there&apos;s no other references to pasting in this file.

&gt; &gt; Source/WebCore/editing/markup.cpp:85
&gt; &gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; 
&gt; You need to use DEFINE_STATIC_LOCAL. And please use OwnPtr.
&gt; 

This code was copied from SVGImage.cpp. How would I use OwnPtr with DEFINE_STATIC_LOCAL though?

&gt; &gt; Source/WebCore/editing/markup.cpp:763
&gt; &gt; +    // We use comment tags to help us extract the appropriate DocumentFragment.
&gt; &gt; +    const char beginTag[] = &quot;3f81c6fb-e92e-417d-a05e-fd6f7a6c883c&quot;;
&gt; &gt; +    const char endTag[] = &quot;3879efc4-7f0a-4352-ba73-61158bbecd70&quot;;
&gt; 
&gt; I&apos;d prefer using webkit prefix e.g. &lt;!--webkit-fragment-marker--&gt; or&lt;?-webkit-fragment-marker?&gt;  Also we should make sure that this string doesn&apos;t exist inside the markup and if it does, we need to append appropriate text to distinguish ours from them.
&gt; 

Done, though I haven&apos;t figured out the proper approach to prevent duplicates.

&gt; &gt; Source/WebCore/editing/markup.cpp:783
&gt; &gt; +    // TODO: We need to do some cleanup before loading the new doc... figure out what.
&gt; 
&gt; We don&apos;t use TODO in WebKit. It should be FIXME.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:795
&gt; &gt; +            if (static_cast&lt;CharacterData*&gt;(n)-&gt;data() == endTag)
&gt; &gt; +                fragmentEndNode = n;
&gt; &gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; &gt; +                break;
&gt; 
&gt; So there&apos;s a case where fragmentStartNode appears after fragmentStartNode?
&gt; 

It would be an abnormality. I&apos;ve changed it so we use the same tag to mark the start and the end though.

&gt; &gt; Source/WebCore/editing/markup.cpp:801
&gt; &gt; +                                        Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; &gt; +                                        Position(fragmentEndNode, Position::PositionIsBeforeAnchor));
&gt; 
&gt; Nit: indentation. Position should be indented by exactly 8 spaces and should NOT be assigned with pageForParsing or RefPtr&lt;Range&gt;.
&gt; 

Done.

&gt; &gt; Source/WebKit/chromium/public/WebClipboard.h:69
&gt; &gt; +    virtual WebString readHTML(
&gt; &gt; +        Buffer buffer, WebURL* pageURL, int* fragmentStart,
&gt; &gt; +        int* fragmentEnd) { return WebString(); }
&gt; 
&gt; It seems like we should put all of the them in one line. As I understand it, Source/WebKit/chromium follows WebKit coding guideline so there&apos;s no 80-column restriction.

I didn&apos;t change this for consistency with the other lines in this file.

(In reply to comment #6)
&gt; (From update of attachment 109219 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109219&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Context-aware HTML paste
&gt; 
&gt; Why is the bug title here doesn&apos;t match the one on Bugzilla?
&gt; 

Done. I tagged it as [chromium] for now since it will be enabled on all Chromium ports. I&apos;m happy to create another bug for the Safari win port.

&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; You should explain why we can&apos;t have a test.

I updated it. It&apos;s covered by layout tests. As expected, enabling the new parsing mode results in ~20 layout test diffs that I will have to go through and resolve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478946</commentid>
    <comment_count>11</comment_count>
      <attachid>109916</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 22:25:04 -0700</bug_when>
    <thetext>Created attachment 109916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478947</commentid>
    <comment_count>12</comment_count>
      <attachid>109914</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 22:25:34 -0700</bug_when>
    <thetext>Comment on attachment 109914
Patch

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

&gt; Source/WebCore/editing/markup.cpp:74
&gt; +static bool pageForParsing()

The return type is wrong.

&gt; Source/WebCore/editing/markup.cpp:76
&gt; +    static Page* page = 0;

Please use DEFINE_STATIC_LOCAL.

&gt; Source/WebCore/editing/markup.cpp:99
&gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; +    Page::PageClients pageClients;
&gt; +    static ChromeClient* dummyChromeClient = new EmptyChromeClient;
&gt; +    pageClients.chromeClient = dummyChromeClient;
&gt; +#if ENABLE(CONTEXT_MENUS)
&gt; +    static ContextMenuClient* dummyContextMenuClient = new EmptyContextMenuClient;
&gt; +    pageClients.contextMenuClient = dummyContextMenuClient;
&gt; +#endif
&gt; +    static EditorClient* dummyEditorClient = new EmptyEditorClient;
&gt; +    pageClients.editorClient = dummyEditorClient;
&gt; +#if ENABLE(DRAG_SUPPORT)
&gt; +    static DragClient* dummyDragClient = new EmptyDragClient;
&gt; +    pageClients.dragClient = dummyDragClient;
&gt; +#endif
&gt; +    static InspectorClient* dummyInspectorClient = new EmptyInspectorClient;
&gt; +    pageClients.inspectorClient = dummyInspectorClient;
&gt; +#if ENABLE(DEVICE_ORIENTATION)
&gt; +    static DeviceMotionClient* dummyDeviceMotionClient = new EmptyDeviceMotionClient;
&gt; +    pageClients.deviceMotionClient = dummyDeviceMotionClient;
&gt; +    static DeviceOrientationClient* dummyDeviceOrientationClient = new EmptyDeviceOrientationClient;

They all ought to use DEFINE_STATIC_LOCAL also please use OwnPtr, adopt, and leakPtr.

&gt; Source/WebCore/editing/markup.cpp:751
&gt; +    // This method isn&apos;t really meant to be called directly by web apps so it&apos;s assumed we&apos;re passing in something sane.

I don&apos;t think this comment adds any useful information here. Please remove.

&gt; Source/WebCore/editing/markup.cpp:755
&gt; +    // We use comment tags to help us extract the appropriate DocumentFragment.

I think this is pretty self-evident from the code. Please remove the comment.

&gt; Source/WebCore/editing/markup.cpp:779
&gt; +    RefPtr&lt;Node&gt; fragmentStartNode = 0;
&gt; +    RefPtr&lt;Node&gt; fragmentEndNode = 0;

Why are they not Node*? I don&apos;t think they need to be RefPtr.

&gt; Source/WebCore/editing/markup.cpp:780
&gt; +    for (Node* n = pageForParsing-&gt;mainFrame()-&gt;document()-&gt;firstChild(); n; n = n-&gt;traverseNextNode()) {

Nit: please don&apos;t use abbreviations such as n.

&gt; Source/WebCore/editing/markup.cpp:786
&gt; +                else
&gt; +                    fragmentEndNode = n;

It seems like you can just break here.

&gt; Source/WebCore/editing/markup.cpp:789
&gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; +                break;

instead of having a separate if-statement here.

&gt; Source/WebCore/editing/markup.cpp:795
&gt; +            Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; +            Position(fragmentEndNode, Position::PositionIsBeforeAnchor));

Nit: wrong indentation. It needs to look like:
    RefPtr&lt;Range&gt; range = Range::create(pageForParsing-&gt;mainFrame()-&gt;document(),
        Position(fragmentStartNode, Position::PositionIsAfterAnchor),
        Position(fragmentEndNode, Position::PositionIsBeforeAnchor));

&gt; Source/WebCore/editing/markup.cpp:798
&gt; +    const String&amp; fragmentMarkup = createMarkup(range.get(), 0, AnnotateForInterchange);
&gt; +
&gt; +    return createFragmentFromMarkup(document, fragmentMarkup, baseURL, scriptingPermission);

It seems like this can be done in one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478949</commentid>
    <comment_count>13</comment_count>
      <attachid>109914</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 22:29:52 -0700</bug_when>
    <thetext>Comment on attachment 109914
Patch

Attachment 109914 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9981104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478950</commentid>
    <comment_count>14</comment_count>
      <attachid>109914</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 22:30:49 -0700</bug_when>
    <thetext>Comment on attachment 109914
Patch

Attachment 109914 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9968129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478952</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 22:33:31 -0700</bug_when>
    <thetext>Renaming the bug summary since this patch modifies Source/WebCore/editing/markup.cpp.

(In reply to comment #10)
&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:80
&gt; &gt; &gt; +Page* pageForParsing = 0;
&gt; &gt; &gt; +
&gt; &gt; &gt; +bool ensurePageForParsingInitialized()
&gt; &gt; 
&gt; &gt; I&apos;d prefer this function returned a page so rename it to something like &quot;Page* pageForPaste()&quot;.
&gt; &gt; 
&gt; 
&gt; Done. I&apos;m looking for naming suggestions. pageForPaste() doesn&apos;t seem entirely appropriate here, as there&apos;s no other references to pasting in this file.

pateForPaste sounds okay to me but darin (@apple) or enrica might know a better name.

&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:85
&gt; &gt; &gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; &gt; 
&gt; &gt; You need to use DEFINE_STATIC_LOCAL. And please use OwnPtr.
&gt; &gt; 
&gt; 
&gt; This code was copied from SVGImage.cpp. How would I use OwnPtr with DEFINE_STATIC_LOCAL though?

e.g. http://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp#L641 and http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/WebDataSourceImpl.cpp#L45

&gt; &gt; I&apos;d prefer using webkit prefix e.g. &lt;!--webkit-fragment-marker--&gt; or&lt;?-webkit-fragment-marker?&gt;  Also we should make sure that this string doesn&apos;t exist inside the markup and if it does, we need to append appropriate text to distinguish ours from them.
&gt; &gt; 
&gt; 
&gt; Done, though I haven&apos;t figured out the proper approach to prevent duplicates.

I think we can be done as a follow up.

&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:795
&gt; &gt; &gt; +            if (static_cast&lt;CharacterData*&gt;(n)-&gt;data() == endTag)
&gt; &gt; &gt; +                fragmentEndNode = n;
&gt; &gt; &gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; &gt; &gt; +                break;
&gt; &gt; 
&gt; &gt; So there&apos;s a case where fragmentStartNode appears after fragmentStartNode?
&gt; &gt; 
&gt; 
&gt; It would be an abnormality. I&apos;ve changed it so we use the same tag to mark the start and the end though.

Great. Looks much better.

&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 109219 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109219&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; &gt; +        Context-aware HTML paste
&gt; &gt; 
&gt; &gt; Why is the bug title here doesn&apos;t match the one on Bugzilla?
&gt; &gt; 
&gt; 
&gt; Done. I tagged it as [chromium] for now since it will be enabled on all Chromium ports. I&apos;m happy to create another bug for the Safari win port.

Per discussion on webkit-dev, I don&apos;t think we should be tagging with [chromium] given that this patch adds code to markup.cpp

&gt; &gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; &gt; +        No new tests. (OOPS!)
&gt; &gt; 
&gt; &gt; You should explain why we can&apos;t have a test.
&gt; 
&gt; I updated it. It&apos;s covered by layout tests. As expected, enabling the new parsing mode results in ~20 layout test diffs that I will have to go through and resolve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478953</commentid>
    <comment_count>16</comment_count>
      <attachid>109916</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-05 22:35:07 -0700</bug_when>
    <thetext>Comment on attachment 109916
Patch

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

&gt; Source/WebKit/chromium/public/WebClipboard.h:68
&gt; +        Buffer buffer, WebURL* pageURL, unsigned* fragmentStart,

it would be helpful to define what fragmentStart and fragmentEnd mean.  they
look like offsets into some buffer.  what buffer?  do they refer to the
string that readHTML returns?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478956</commentid>
    <comment_count>17</comment_count>
      <attachid>109916</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 22:43:12 -0700</bug_when>
    <thetext>Comment on attachment 109916
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebClipboard.h:68
&gt;&gt; +        Buffer buffer, WebURL* pageURL, unsigned* fragmentStart,
&gt; 
&gt; it would be helpful to define what fragmentStart and fragmentEnd mean.  they
&gt; look like offsets into some buffer.  what buffer?  do they refer to the
&gt; string that readHTML returns?

fragment start and fragment end are terms used in CF_HTML format: http://msdn.microsoft.com/en-us/library/aa767917(v=vs.85).aspx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478960</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-05 22:51:14 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; fragment start and fragment end are terms used in CF_HTML format: http://msdn.microsoft.com/en-us/library/aa767917(v=vs.85).aspx

Ah, that&apos;s very helpful to know.  The API docs should probably reference that URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478971</commentid>
    <comment_count>19</comment_count>
      <attachid>109919</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 23:18:13 -0700</bug_when>
    <thetext>Created attachment 109919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478972</commentid>
    <comment_count>20</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 23:18:33 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 109914 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109914&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:74
&gt; &gt; +static bool pageForParsing()
&gt; 
&gt; The return type is wrong.

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:76
&gt; &gt; +    static Page* page = 0;
&gt; 
&gt; Please use DEFINE_STATIC_LOCAL.
&gt; 

DEFINE_STATIC_LOCAL doesn&apos;t fit the pattern here well, since it expects to construct the object at the site of the call. We can&apos;t do that, since we don&apos;t have a pageClients yet here. I could move it down below the pageClients initialization, but then we&apos;ll always needlessly reinitialize the pageClients struct.

&gt; &gt; Source/WebCore/editing/markup.cpp:99
&gt; &gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; &gt; +    Page::PageClients pageClients;
&gt; &gt; +    static ChromeClient* dummyChromeClient = new EmptyChromeClient;
&gt; &gt; +    pageClients.chromeClient = dummyChromeClient;
&gt; &gt; +#if ENABLE(CONTEXT_MENUS)
&gt; &gt; +    static ContextMenuClient* dummyContextMenuClient = new EmptyContextMenuClient;
&gt; &gt; +    pageClients.contextMenuClient = dummyContextMenuClient;
&gt; &gt; +#endif
&gt; &gt; +    static EditorClient* dummyEditorClient = new EmptyEditorClient;
&gt; &gt; +    pageClients.editorClient = dummyEditorClient;
&gt; &gt; +#if ENABLE(DRAG_SUPPORT)
&gt; &gt; +    static DragClient* dummyDragClient = new EmptyDragClient;
&gt; &gt; +    pageClients.dragClient = dummyDragClient;
&gt; &gt; +#endif
&gt; &gt; +    static InspectorClient* dummyInspectorClient = new EmptyInspectorClient;
&gt; &gt; +    pageClients.inspectorClient = dummyInspectorClient;
&gt; &gt; +#if ENABLE(DEVICE_ORIENTATION)
&gt; &gt; +    static DeviceMotionClient* dummyDeviceMotionClient = new EmptyDeviceMotionClient;
&gt; &gt; +    pageClients.deviceMotionClient = dummyDeviceMotionClient;
&gt; &gt; +    static DeviceOrientationClient* dummyDeviceOrientationClient = new EmptyDeviceOrientationClient;
&gt; 
&gt; They all ought to use DEFINE_STATIC_LOCAL also please use OwnPtr, adopt, and leakPtr.
&gt; 

I took a look at the examples you listed. I can understand using DEFINE_STATIC_LOCAL here, but using DEFINE_STATIC_LOCAL with OwnPtr essentially creates two layers of checks that we have to go through each time instead of one--the compiler check that the static is initialized, and then a second check we have to add to allocate the object if the OwnPtr is still null. Why do we need this complexity for something we are statically allocating? What does using OwnPtr here give us that a raw pointer does not?

&gt; &gt; Source/WebCore/editing/markup.cpp:751
&gt; &gt; +    // This method isn&apos;t really meant to be called directly by web apps so it&apos;s assumed we&apos;re passing in something sane.
&gt; 
&gt; I don&apos;t think this comment adds any useful information here. Please remove.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:755
&gt; &gt; +    // We use comment tags to help us extract the appropriate DocumentFragment.
&gt; 
&gt; I think this is pretty self-evident from the code. Please remove the comment.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:779
&gt; &gt; +    RefPtr&lt;Node&gt; fragmentStartNode = 0;
&gt; &gt; +    RefPtr&lt;Node&gt; fragmentEndNode = 0;
&gt; 
&gt; Why are they not Node*? I don&apos;t think they need to be RefPtr.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:780
&gt; &gt; +    for (Node* n = pageForParsing-&gt;mainFrame()-&gt;document()-&gt;firstChild(); n; n = n-&gt;traverseNextNode()) {
&gt; 
&gt; Nit: please don&apos;t use abbreviations such as n.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:786
&gt; &gt; +                else
&gt; &gt; +                    fragmentEndNode = n;
&gt; 
&gt; It seems like you can just break here.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:789
&gt; &gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; &gt; +                break;
&gt; 
&gt; instead of having a separate if-statement here.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:795
&gt; &gt; +            Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; &gt; +            Position(fragmentEndNode, Position::PositionIsBeforeAnchor));
&gt; 
&gt; Nit: wrong indentation. It needs to look like:
&gt;     RefPtr&lt;Range&gt; range = Range::create(pageForParsing-&gt;mainFrame()-&gt;document(),
&gt;         Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt;         Position(fragmentEndNode, Position::PositionIsBeforeAnchor));
&gt; 

Done. Sorry I thought you meant it should be indented 8 spaces.

&gt; &gt; Source/WebCore/editing/markup.cpp:798
&gt; &gt; +    const String&amp; fragmentMarkup = createMarkup(range.get(), 0, AnnotateForInterchange);
&gt; &gt; +
&gt; &gt; +    return createFragmentFromMarkup(document, fragmentMarkup, baseURL, scriptingPermission);
&gt; 
&gt; It seems like this can be done in one line.

Done.

(In reply to comment #16)
&gt; (From update of attachment 109916 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109916&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebClipboard.h:68
&gt; &gt; +        Buffer buffer, WebURL* pageURL, unsigned* fragmentStart,
&gt; 
&gt; it would be helpful to define what fragmentStart and fragmentEnd mean.  they
&gt; look like offsets into some buffer.  what buffer?  do they refer to the
&gt; string that readHTML returns?

Done. Is the link to CF_HTML appropriate here even though it&apos;s Windows specific? At this point, there is no knowledge of the original CF_HTML format (on Windows).(In reply to comment #15)
&gt; Renaming the bug summary since this patch modifies Source/WebCore/editing/markup.cpp.
&gt; 
&gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; Source/WebCore/editing/markup.cpp:80
&gt; &gt; &gt; &gt; +Page* pageForParsing = 0;
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +bool ensurePageForParsingInitialized()
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;d prefer this function returned a page so rename it to something like &quot;Page* pageForPaste()&quot;.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Done. I&apos;m looking for naming suggestions. pageForPaste() doesn&apos;t seem entirely appropriate here, as there&apos;s no other references to pasting in this file.
&gt; 
&gt; pateForPaste sounds okay to me but darin (@apple) or enrica might know a better name.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/editing/markup.cpp:85
&gt; &gt; &gt; &gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; &gt; &gt; 
&gt; &gt; &gt; You need to use DEFINE_STATIC_LOCAL. And please use OwnPtr.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; This code was copied from SVGImage.cpp. How would I use OwnPtr with DEFINE_STATIC_LOCAL though?
&gt; 
&gt; e.g. http://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp#L641 and http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/WebDataSourceImpl.cpp#L45
&gt; 
&gt; &gt; &gt; I&apos;d prefer using webkit prefix e.g. &lt;!--webkit-fragment-marker--&gt; or&lt;?-webkit-fragment-marker?&gt;  Also we should make sure that this string doesn&apos;t exist inside the markup and if it does, we need to append appropriate text to distinguish ours from them.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Done, though I haven&apos;t figured out the proper approach to prevent duplicates.
&gt; 
&gt; I think we can be done as a follow up.
&gt; 

Done. Added a FIXME.

&gt; &gt; &gt; &gt; Source/WebCore/editing/markup.cpp:795
&gt; &gt; &gt; &gt; +            if (static_cast&lt;CharacterData*&gt;(n)-&gt;data() == endTag)
&gt; &gt; &gt; &gt; +                fragmentEndNode = n;
&gt; &gt; &gt; &gt; +            if (fragmentStartNode &amp;&amp; fragmentEndNode)
&gt; &gt; &gt; &gt; +                break;
&gt; &gt; &gt; 
&gt; &gt; &gt; So there&apos;s a case where fragmentStartNode appears after fragmentStartNode?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; It would be an abnormality. I&apos;ve changed it so we use the same tag to mark the start and the end though.
&gt; 
&gt; Great. Looks much better.
&gt; 
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (From update of attachment 109219 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109219&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; &gt; &gt; +        Context-aware HTML paste
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is the bug title here doesn&apos;t match the one on Bugzilla?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Done. I tagged it as [chromium] for now since it will be enabled on all Chromium ports. I&apos;m happy to create another bug for the Safari win port.
&gt; 
&gt; Per discussion on webkit-dev, I don&apos;t think we should be tagging with [chromium] given that this patch adds code to markup.cpp
&gt; 

Done, though I changed the title to remove &quot;win&quot; since it&apos;s going to be enabled on all platforms unless there&apos;s a reason we shouldn&apos;t.

&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; &gt; &gt; +        No new tests. (OOPS!)
&gt; &gt; &gt; 
&gt; &gt; &gt; You should explain why we can&apos;t have a test.
&gt; &gt; 
&gt; &gt; I updated it. It&apos;s covered by layout tests. As expected, enabling the new parsing mode results in ~20 layout test diffs that I will have to go through and resolve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478974</commentid>
    <comment_count>21</comment_count>
      <attachid>109914</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 23:24:53 -0700</bug_when>
    <thetext>Comment on attachment 109914
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/markup.cpp:99
&gt;&gt;&gt; +    static DeviceOrientationClient* dummyDeviceOrientationClient = new EmptyDeviceOrientationClient;
&gt;&gt; 
&gt;&gt; They all ought to use DEFINE_STATIC_LOCAL also please use OwnPtr, adopt, and leakPtr.
&gt; 
&gt; I took a look at the examples you listed. I can understand using DEFINE_STATIC_LOCAL here, but using DEFINE_STATIC_LOCAL with OwnPtr essentially creates two layers of checks that we have to go through each time instead of one--the compiler check that the static is initialized, and then a second check we have to add to allocate the object if the OwnPtr is still null. Why do we need this complexity for something we are statically allocating? What does using OwnPtr here give us that a raw pointer does not?

You should do
static DeviceMotionClient* dummyDeviceMotionClient = OwnPtr::adopt(new EmptyDeviceMotionClient).leakPtr();
for example. See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/ColorChooser.cpp#L49 for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478980</commentid>
    <comment_count>22</comment_count>
      <attachid>109919</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 23:32:45 -0700</bug_when>
    <thetext>Comment on attachment 109919
Patch

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

&gt; Source/WebCore/editing/markup.cpp:80
&gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;

new needs to be wrapped by adoptPtr(~).leakPtr(). r- because of this.

&gt; Source/WebCore/editing/markup.cpp:116
&gt; +    loader-&gt;activeDocumentLoader()-&gt;writer()-&gt;setMIMEType(&quot;text/html&quot;);

Are you sure we can always assume the content is text/html? no application/xml?

&gt; Source/WebCore/editing/markup.cpp:763
&gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; +    taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentStart));
&gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; +    taggedMarkup.append(markup.substring(fragmentEnd));

It&apos;ll be really nice if we could share code with MarkupAccumulator::appendComment.
http://trac.webkit.org/browser/trunk/Source/WebCore/editing/MarkupAccumulator.cpp#L301

&gt; Source/WebCore/editing/markup.cpp:778
&gt; +        if (node-&gt;nodeType() == Node::COMMENT_NODE) {
&gt; +            if (static_cast&lt;CharacterData*&gt;(node)-&gt;data() == fragmentMarkerTag) {

It seems like these conditions can be checked in one if-statement.

&gt; Source/WebCore/editing/markup.cpp:791
&gt; +        Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; +        Position(fragmentEndNode, Position::PositionIsBeforeAnchor));

Oops, these lines are actually wrong. These positions aren&apos;t range-compliant. Furthermore, you should make use of positionBeforeNode and positionAfterNode so do:
positionAfterNode(fragmentStartNode).parentAnchoredEquivalent(), positionBeforeNode(fragmentEndNode).parentAnchoredEquivalent(),</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478989</commentid>
    <comment_count>23</comment_count>
      <attachid>109926</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 23:47:07 -0700</bug_when>
    <thetext>Created attachment 109926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478991</commentid>
    <comment_count>24</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-05 23:53:07 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #22)
&gt; (From update of attachment 109919 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109919&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:80
&gt; &gt; +    static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient;
&gt; 
&gt; new needs to be wrapped by adoptPtr(~).leakPtr(). r- because of this.
&gt; 

Done. I ended up finding some context for this, if this issue comes up, maybe just ask the developer to search for &quot;naked new considered harmful&quot; on webkit-dev. Sorry about the confusion though.

&gt; &gt; Source/WebCore/editing/markup.cpp:116
&gt; &gt; +    loader-&gt;activeDocumentLoader()-&gt;writer()-&gt;setMIMEType(&quot;text/html&quot;);
&gt; 
&gt; Are you sure we can always assume the content is text/html? no application/xml?
&gt; 

Yes, that&apos;s all this is currently designed for. If we want to extend it in the future, this would need to be updated of course.

&gt; &gt; Source/WebCore/editing/markup.cpp:763
&gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; +    taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentStart));
&gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; +    taggedMarkup.append(markup.substring(fragmentEnd));
&gt; 
&gt; It&apos;ll be really nice if we could share code with MarkupAccumulator::appendComment.
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/editing/MarkupAccumulator.cpp#L301
&gt; 

It&apos;d be nice but I don&apos;t see a good way =/

&gt; &gt; Source/WebCore/editing/markup.cpp:778
&gt; &gt; +        if (node-&gt;nodeType() == Node::COMMENT_NODE) {
&gt; &gt; +            if (static_cast&lt;CharacterData*&gt;(node)-&gt;data() == fragmentMarkerTag) {
&gt; 
&gt; It seems like these conditions can be checked in one if-statement.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:791
&gt; &gt; +        Position(fragmentStartNode, Position::PositionIsAfterAnchor),
&gt; &gt; +        Position(fragmentEndNode, Position::PositionIsBeforeAnchor));
&gt; 
&gt; Oops, these lines are actually wrong. These positions aren&apos;t range-compliant. Furthermore, you should make use of positionBeforeNode and positionAfterNode so do:
&gt; positionAfterNode(fragmentStartNode).parentAnchoredEquivalent(), positionBeforeNode(fragmentEndNode).parentAnchoredEquivalent(),

Done. What does it mean for something to be range-compliant though?

Finally, I think I might have an idea of what&apos;s causing the layout test diffs, but I&apos;ll have to wait till I&apos;m in the office tomorrow to try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478992</commentid>
    <comment_count>25</comment_count>
      <attachid>109926</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 23:53:43 -0700</bug_when>
    <thetext>Comment on attachment 109926
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This change allows us to create an HTML fragment taking into account the context around the
&gt; +        markup. This preserves &lt;style&gt; declarations and other HTML elements that are

Nit: please move &quot;the&quot; to the second line to avoid the awkward wrapping.

&gt; Source/WebCore/ChangeLog:12
&gt; +        Covered by existing tests.

So this patch doesn&apos;t require any rebaselines?

&gt; Source/WebCore/editing/markup.cpp:111
&gt; +    // Disable scrolling. This prevents a crash... though we should really figure out why it crashes.
&gt; +    frame-&gt;view()-&gt;setCanHaveScrollbars(false);

Do you have a stack trace for the crash when you enabled scrolling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478997</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-05 23:58:14 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:763
&gt; &gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; &gt; +    taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentStart));
&gt; &gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; &gt; +    taggedMarkup.append(markup.substring(fragmentEnd));
&gt; &gt; 
&gt; &gt; It&apos;ll be really nice if we could share code with MarkupAccumulator::appendComment.
&gt; &gt; http://trac.webkit.org/browser/trunk/Source/WebCore/editing/MarkupAccumulator.cpp#L301
&gt; &gt; 
&gt; 
&gt; It&apos;d be nice but I don&apos;t see a good way =/

I guess we can make MarkupAccumulator::appendComment static &amp; public since it doesn&apos;t do anything with member variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479015</commentid>
    <comment_count>27</comment_count>
      <attachid>109926</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 01:05:06 -0700</bug_when>
    <thetext>Comment on attachment 109926
Patch

Attachment 109926 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9978122

New failing tests:
editing/inserting/insert-3907422-fix.html
editing/pasteboard/5065605.html
editing/pasteboard/4922709.html
editing/pasteboard/4944770-2.html
editing/inserting/insert-paste-bidi-control.html
editing/pasteboard/5247341.html
editing/inserting/insert-3786362-fix.html
editing/pasteboard/19644-1.html
editing/pasteboard/4242293.html
editing/execCommand/4128080-2.html
editing/pasteboard/4944770-1.html
editing/pasteboard/4989774.html
editing/pasteboard/5478250.html
editing/pasteboard/4242293-1.html
editing/pasteboard/5071074.html
editing/pasteboard/5028447.html
http/tests/misc/copy-resolves-urls.html
editing/pasteboard/5075944.html
editing/pasteboard/19644-2.html
editing/pasteboard/4641033.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479250</commentid>
    <comment_count>28</comment_count>
      <attachid>109926</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-10-06 10:17:03 -0700</bug_when>
    <thetext>Comment on attachment 109926
Patch

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

LGTM, but I would be interested in any test changes.

&gt; Source/WebCore/editing/markup.cpp:752
&gt; +    // FIXME: Need to handle the case where the markup already contains these markers.
&gt; +    const char fragmentMarkerTag[] = &quot;webkit-fragment-marker&quot;;

Seems like we can just strip them in the markup.  A follow up patch for this seems fine.

&gt; Source/WebCore/editing/markup.cpp:773
&gt; +    // Now spelunk through the DOM and extract the beginning and the end of the range using the setinels.

Nit: typo sentinels

&gt; Source/WebCore/editing/markup.h:48
&gt; +    PassRefPtr&lt;DocumentFragment&gt; createFragmentFromMarkupWithContext(Document*, const String&amp; markup, unsigned fragmentStart, unsigned fragmentEnd, const String&amp; baseURL, FragmentScriptingPermission = FragmentScriptingAllowed);

Does FragmentScriptingPermission need to be optional?  Seems like the one caller of this function sets it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479251</commentid>
    <comment_count>29</comment_count>
      <attachid>109926</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-10-06 10:17:44 -0700</bug_when>
    <thetext>Comment on attachment 109926
Patch

r- due to the missing test changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480287</commentid>
    <comment_count>30</comment_count>
      <attachid>110209</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-07 13:41:50 -0700</bug_when>
    <thetext>Created attachment 110209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480291</commentid>
    <comment_count>31</comment_count>
      <attachid>110209</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-07 13:45:36 -0700</bug_when>
    <thetext>Comment on attachment 110209
Patch

CQ- since I&apos;m still working through a few layout test issues. The major change is using DoNotAnnotateForInterchange.

(In reply to comment #25)
&gt; (From update of attachment 109926 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109926&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        This change allows us to create an HTML fragment taking into account the context around the
&gt; &gt; +        markup. This preserves &lt;style&gt; declarations and other HTML elements that are
&gt; 
&gt; Nit: please move &quot;the&quot; to the second line to avoid the awkward wrapping.

Done.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        Covered by existing tests.
&gt; 
&gt; So this patch doesn&apos;t require any rebaselines?
&gt; 

There are 11 tests which fail on Linux, 1 which fails on Mac, and 1 test case that crashes (not the scrollbar crash) if it&apos;s run in a certain order. I&apos;m still investigating them.

&gt; &gt; Source/WebCore/editing/markup.cpp:111
&gt; &gt; +    // Disable scrolling. This prevents a crash... though we should really figure out why it crashes.
&gt; &gt; +    frame-&gt;view()-&gt;setCanHaveScrollbars(false);
&gt; 
&gt; Do you have a stack trace for the crash when you enabled scrolling?

(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; &gt; &gt; Source/WebCore/editing/markup.cpp:763
&gt; &gt; &gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(markup.substring(fragmentStart, fragmentEnd - fragmentStart));
&gt; &gt; &gt; &gt; +    taggedMarkup.append(&quot;&lt;!--&quot;);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(fragmentMarkerTag);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(&quot;--&gt;&quot;);
&gt; &gt; &gt; &gt; +    taggedMarkup.append(markup.substring(fragmentEnd));
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;ll be really nice if we could share code with MarkupAccumulator::appendComment.
&gt; &gt; &gt; http://trac.webkit.org/browser/trunk/Source/WebCore/editing/MarkupAccumulator.cpp#L301
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; It&apos;d be nice but I don&apos;t see a good way =/
&gt; 
&gt; I guess we can make MarkupAccumulator::appendComment static &amp; public since it doesn&apos;t do anything with member variables.

Done.

(In reply to comment #28)
&gt; (From update of attachment 109926 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109926&amp;action=review
&gt; 
&gt; LGTM, but I would be interested in any test changes.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:752
&gt; &gt; +    // FIXME: Need to handle the case where the markup already contains these markers.
&gt; &gt; +    const char fragmentMarkerTag[] = &quot;webkit-fragment-marker&quot;;
&gt; 
&gt; Seems like we can just strip them in the markup.  A follow up patch for this seems fine.
&gt; 

Without parsing, we won&apos;t know if they are part of a comment-node or not, so it might not be safe to strip them.

&gt; &gt; Source/WebCore/editing/markup.cpp:773
&gt; &gt; +    // Now spelunk through the DOM and extract the beginning and the end of the range using the setinels.
&gt; 
&gt; Nit: typo sentinels
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.h:48
&gt; &gt; +    PassRefPtr&lt;DocumentFragment&gt; createFragmentFromMarkupWithContext(Document*, const String&amp; markup, unsigned fragmentStart, unsigned fragmentEnd, const String&amp; baseURL, FragmentScriptingPermission = FragmentScriptingAllowed);
&gt; 
&gt; Does FragmentScriptingPermission need to be optional?  Seems like the one caller of this function sets it.

Done. Removed the default argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480311</commentid>
    <comment_count>32</comment_count>
      <attachid>109926</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-07 14:22:18 -0700</bug_when>
    <thetext>Comment on attachment 109926
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt; +        Covered by existing tests.
&gt;&gt; 
&gt;&gt; So this patch doesn&apos;t require any rebaselines?
&gt; 
&gt; There are 11 tests which fail on Linux, 1 which fails on Mac, and 1 test case that crashes (not the scrollbar crash) if it&apos;s run in a certain order. I&apos;m still investigating them.

You should include rebaselines if there are any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480313</commentid>
    <comment_count>33</comment_count>
      <attachid>110209</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-07 14:26:09 -0700</bug_when>
    <thetext>Comment on attachment 110209
Patch

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

r- due to the comment that we have failing tests.

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        Covered by existing tests.
&gt; 
&gt; There are 11 tests which fail on Linux, 1 which fails on Mac, and 1 test case that crashes (not the scrollbar crash) if it&apos;s run in a certain order. I&apos;m still investigating them.

I can&apos;t r+ this patch until I see those failures.

&gt; Source/WebCore/editing/markup.cpp:786
&gt; +    RefPtr&lt;Range&gt; range = Range::create(pageForPaste()-&gt;mainFrame()-&gt;document(),
&gt; +        positionAfterNode(fragmentStartNode).parentAnchoredEquivalent(),
&gt; +        positionBeforeNode(fragmentEndNode).parentAnchoredEquivalent());

Knowing there was some crash, is it possible that fragmentStart and fragmentEnd are never found? Also is it possible that fragment start and fragment ends are before and after html element respectively? In those cases, these lines might blow up so you may want to have some nullity check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480331</commentid>
    <comment_count>34</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-07 15:01:31 -0700</bug_when>
    <thetext>The crash that I get on the second paste if I don&apos;t disable scrollbars:
ASSERTION FAILED: documentWrapper == m_document || m_document.IsEmpty()
third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp(485) : void WebCore::V8DOMWindowShell::updateDocumentWrapperCache()
#0  0x00007ffff38dfd1e in WebCore::V8DOMWindowShell::updateDocumentWrapperCache (
    this=0x7fffd74d7a20) at third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:485
#1  0x00007ffff38e0180 in WebCore::V8DOMWindowShell::updateDocument (this=0x7fffd74d7a20)
    at third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:561
#2  0x00007ffff38c2d42 in WebCore::ScriptController::updateDocument (this=0x7fffdeb7d5c0)
    at third_party/WebKit/Source/WebCore/bindings/v8/ScriptController.cpp:422
#3  0x00007ffff3b9a090 in WebCore::Frame::setDocument (this=0x7fffdeb7d000, newDoc=...)
    at third_party/WebKit/Source/WebCore/page/Frame.cpp:308
#4  0x00007ffff3af53f6 in WebCore::DocumentWriter::begin (this=0x7fffdeb7dd20, urlReference=...,
    dispatch=true, originSource=WebCore::DocumentWriter::CreateNewSecurityOrigin)
    at third_party/WebKit/Source/WebCore/loader/DocumentWriter.cpp:136#5  0x00007ffff3a53f50 in WebCore::createFragmentFromMarkupWithContext (document=0x7fffd6fd3800,
    markup=..., fragmentStart=0, fragmentEnd=145995, baseURL=...,
    scriptingPermission=WebCore::FragmentScriptingNotAllowed)
    at third_party/WebKit/Source/WebCore/editing/markup.cpp:765
#6  0x00007ffff377e6c7 in WebCore::Pasteboard::documentFragment (this=0x7fffd7425fb0,
    frame=0x7fffd6fcf000, context=..., allowPlainText=true, chosePlainText=@0x7fffdb7f4a5f)
    at third_party/WebKit/Source/WebCore/platform/chromium/PasteboardChromium.cpp:181
#7  0x00007ffff39fc9e4 in WebCore::Editor::pasteWithPasteboard (this=0x7fffd6fcf630,
    pasteboard=0x7fffd7425fb0, allowPlainText=true)
    at third_party/WebKit/Source/WebCore/editing/Editor.cpp:375
#8  0x00007ffff3a0107e in WebCore::Editor::paste (this=0x7fffd6fcf630)
    at third_party/WebKit/Source/WebCore/editing/Editor.cpp:1198
#9  0x00007ffff3a0face in WebCore::executePaste (frame=0x7fffd6fcf000,
    source=WebCore::CommandFromMenuOrKeyBinding)

(In reply to comment #33)
&gt; (From update of attachment 110209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110209&amp;action=review
&gt; 
&gt; r- due to the comment that we have failing tests.
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:12
&gt; &gt;&gt; +        Covered by existing tests.
&gt; &gt; 
&gt; &gt; There are 11 tests which fail on Linux, 1 which fails on Mac, and 1 test case that crashes (not the scrollbar crash) if it&apos;s run in a certain order. I&apos;m still investigating them.
&gt; 
&gt; I can&apos;t r+ this patch until I see those failures.

They look like whitespace diffs in Apple-converted-space blocks, but I do not understand why I&apos;m not getting the same results on Chrome Mac and Chrome Linux, so I haven&apos;t included the rebaseline here because I&apos;m still investigating.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:786
&gt; &gt; +    RefPtr&lt;Range&gt; range = Range::create(pageForPaste()-&gt;mainFrame()-&gt;document(),
&gt; &gt; +        positionAfterNode(fragmentStartNode).parentAnchoredEquivalent(),
&gt; &gt; +        positionBeforeNode(fragmentEndNode).parentAnchoredEquivalent());
&gt; 
&gt; Knowing there was some crash, is it possible that fragmentStart and fragmentEnd are never found? Also is it possible that fragment start and fragment ends are before and after html element respectively? In those cases, these lines might blow up so you may want to have some nullity check here.

The crash is much before this, inside DocumentWriter::begin():

ASSERTION FAILED: documentWrapper == m_document || m_document.IsEmpty()
third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp(485) : void WebCore::V8DOMWindowShell::updateDocumentWrapperCache()
[23152:23152:599754171953:ERROR:process_util_posix.cc(134)] Received signal 11
        base::debug::StackTrace::StackTrace() [0x6fa3e6]
        base::(anonymous namespace)::StackDumpSignalHandler() [0x6b7805]
        0x7ff819b82af0
        WebCore::V8DOMWindowShell::updateDocumentWrapperCache() [0xf96456]
        WebCore::V8DOMWindowShell::updateDocument() [0xf968b8]
        WebCore::ScriptController::updateDocument() [0xf79976]
        WebCore::Frame::setDocument() [0x124a85c]
        WebCore::DocumentWriter::begin() [0x11a6372]
        WebCore::createFragmentFromMarkupWithContext() [0x1107c32]
        WebCore::Pasteboard::documentFragment() [0xe2f16b]
        WebCore::Editor::pasteWithPasteboard() [0x10b0698]
        WebCore::Editor::paste() [0x10b4d32]
        WebCore::executePaste() [0x10c37a4]

The crashing test is editing/pasteboard/4922709.html. I don&apos;t understand why it crashes, but it only appears to happen if I run 4922709.html after 4641033.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480372</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-07 16:26:34 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; ASSERTION FAILED: documentWrapper == m_document || m_document.IsEmpty()
&gt; third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp(485) : void WebCore::V8DOMWindowShell::updateDocumentWrapperCache()
&gt; [23152:23152:599754171953:ERROR:process_util_posix.cc(134)] Received signal 11
&gt;         base::debug::StackTrace::StackTrace() [0x6fa3e6]
&gt;         base::(anonymous namespace)::StackDumpSignalHandler() [0x6b7805]
&gt;         0x7ff819b82af0
&gt;         WebCore::V8DOMWindowShell::updateDocumentWrapperCache() [0xf96456]
&gt;         WebCore::V8DOMWindowShell::updateDocument() [0xf968b8]
&gt;         WebCore::ScriptController::updateDocument() [0xf79976]
&gt;         WebCore::Frame::setDocument() [0x124a85c]
&gt;         WebCore::DocumentWriter::begin() [0x11a6372]
&gt;         WebCore::createFragmentFromMarkupWithContext() [0x1107c32]
&gt;         WebCore::Pasteboard::documentFragment() [0xe2f16b]
&gt;         WebCore::Editor::pasteWithPasteboard() [0x10b0698]
&gt;         WebCore::Editor::paste() [0x10b4d32]
&gt;         WebCore::executePaste() [0x10c37a4]
&gt; 
&gt; The crashing test is editing/pasteboard/4922709.html. I don&apos;t understand why it crashes, but it only appears to happen if I run 4922709.html after 4641033.html.

Thanks for the stack trace. This looks like a real bug. Maybe fishd or dglazkov would know what&apos;s going wrong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480384</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-07 16:43:13 -0700</bug_when>
    <thetext>Creating another use of EmptyClient is a very bad idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480417</commentid>
    <comment_count>37</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-07 17:42:48 -0700</bug_when>
    <thetext>Per IRC discussion, we&apos;ve concluded that the right approach is to let the embedder supply the shared page (real page instead of one created by empty clients) and pass it to createFragmentFromMarkupWithContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481740</commentid>
    <comment_count>38</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-11 11:01:22 -0700</bug_when>
    <thetext>More followup. The following approaches to solving this problem have been considered:

Parsing using a fake page using empty clients:
It works but is considered a giant hack. Also it encountered assertions on the second paste (assertion when updating the document wrapper and when updating the scroll bar).

Parsing using a real page from the WebKit layer:
It works but encounters the same problems as above. jamers also pointed out that we need to make sure to block external resource loads. abarth suspected that the assertions are due to using DocumentWriter directly instead of using FrameLoader; unfortunately FrameLoader does not offer a suitable sync API for loading for us to use. If we ever consider this approach again, there are several other things we must remember:
- Scripting should not execute
- Media should not play
- Plugins should not be loaded
Basically, all &apos;active&apos; content needs to be disabled.

Using the HTML5 tree builder:
abarth suggested this approach. Basically, feed the parser the content from the beginning of the doc to the start of the fragment. Figure out what context node the tree is in, and create a fragment parser using the correct context node. Unfortunately this does not work in the case of an unbalanced selection, such as:
&lt;table&gt;&lt;tr&gt;&lt;!--StartFragment--&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div&gt;Hello&lt;/div&gt;&lt;!--EndFragment--&gt;, as the fragment will not have the TABLE or TR elements inserted.

This leads to the new approach being tried:
Parse the fragment with tags using the fragment parser instead of a fake page. Locate the fragment markers, then use some magic to build a copy of that document fragment with the appropriate context nodes. For example, if the fragment includes TD, we must make it a child of TABLE &gt; TR. I hope to be able to share some code with createMarkup() which also needs to do that.

Implications:
We will still fail to inline styles correctly on pastes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482835</commentid>
    <comment_count>39</comment_count>
      <attachid>110767</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-12 16:16:29 -0700</bug_when>
    <thetext>Created attachment 110767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482838</commentid>
    <comment_count>40</comment_count>
      <attachid>110767</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-12 16:26:57 -0700</bug_when>
    <thetext>Comment on attachment 110767
Patch

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

&gt; Source/WebCore/editing/markup.cpp:474
&gt; +static Node* ancestorToRetainStructureAndAppearanceHACK(Node* commonAncestor)
&gt; +{
&gt; +    if (commonAncestor-&gt;isTextNode())
&gt; +        return 0;

Instead of this, we probably need some helper function that finds a block element without access to renderer.

&gt; Source/WebCore/editing/markup.cpp:760
&gt; +    // This loop is structured similarly to traverseNodesForSerialization().
&gt; +    for (Node* n = startNode; n != pastEnd; n = next) {

If we&apos;re doing this, then we should probably templatize traverseNodesForSerialization and share code. But I think you can just use Range::commonAncestor instead.

&gt; Source/WebCore/editing/markup.cpp:793
&gt; +            RefPtr&lt;Node&gt; clone = ancestor-&gt;cloneNode(false);

You shouldn&apos;t clone. You should be removing this node from the fragment instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482849</commentid>
    <comment_count>41</comment_count>
      <attachid>110767</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-12 16:43:41 -0700</bug_when>
    <thetext>Comment on attachment 110767
Patch

Attachment 110767 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10041072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482895</commentid>
    <comment_count>42</comment_count>
      <attachid>110767</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 17:33:18 -0700</bug_when>
    <thetext>Comment on attachment 110767
Patch

Attachment 110767 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10046083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483525</commentid>
    <comment_count>43</comment_count>
      <attachid>110914</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 14:54:06 -0700</bug_when>
    <thetext>Created attachment 110914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483527</commentid>
    <comment_count>44</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 14:57:05 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 110767 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110767&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:474
&gt; &gt; +static Node* ancestorToRetainStructureAndAppearanceHACK(Node* commonAncestor)
&gt; &gt; +{
&gt; &gt; +    if (commonAncestor-&gt;isTextNode())
&gt; &gt; +        return 0;
&gt; 
&gt; Instead of this, we probably need some helper function that finds a block element without access to renderer.
&gt; 

I agree. But for a first iteration, this might be good enough I think. I could add some other &quot;obvious&quot; things like spans I guess. Is there somewhere in WebKit source to derive a list of elements are considered block?

&gt; &gt; Source/WebCore/editing/markup.cpp:760
&gt; &gt; +    // This loop is structured similarly to traverseNodesForSerialization().
&gt; &gt; +    for (Node* n = startNode; n != pastEnd; n = next) {
&gt; 
&gt; If we&apos;re doing this, then we should probably templatize traverseNodesForSerialization and share code. But I think you can just use Range::commonAncestor instead.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:793
&gt; &gt; +            RefPtr&lt;Node&gt; clone = ancestor-&gt;cloneNode(false);
&gt; 
&gt; You shouldn&apos;t clone. You should be removing this node from the fragment instead.

I&apos;m using an alternate approach now where we move the entire block we think we&apos;re interested in and then trim elements we don&apos;t care about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483548</commentid>
    <comment_count>45</comment_count>
      <attachid>110914</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-13 15:15:39 -0700</bug_when>
    <thetext>Comment on attachment 110914
Patch

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

The patch looks much nicer!

&gt; Source/WebCore/editing/markup.cpp:460
&gt; +static Node* ancestorToRetainStructureAndAppearance(Node* commonAncestor)

Please add inline keyword here.

&gt; Source/WebCore/editing/markup.cpp:465
&gt; +static Node* ancestorToRetainStructureAndAppearanceHACK(Node* commonAncestor)

We definitely don&apos;t want the name HACK here. r- because of this.

&gt; Source/WebCore/editing/markup.cpp:474
&gt; +    if (commonAncestor-&gt;isTextNode())
&gt; +        return 0;
&gt; +
&gt; +    // FIXME: Do we want to handle mail quotes correctly? It might be useful...
&gt; +    // We cheat here since we don&apos;t have a render tree.
&gt; +    if (commonAncestor-&gt;hasTagName(tdTag)
&gt; +        || commonAncestor-&gt;hasTagName(liTag))
&gt; +        commonAncestor = commonAncestor-&gt;parentNode();

My suggestion is to extract a function out of ancestorToRetainStructureAndAppearanceForBlock (lines 444-454) and add td, tr, table, blockquote to the list.
And call enclosingNodeOfType with that.

&gt; Source/WebCore/editing/markup.cpp:736
&gt; +    if (!startNode || !endNode)

You should also check that startNode and endNode have parents.

&gt; Source/WebCore/editing/markup.cpp:757
&gt; +    for (Node* n = fragment-&gt;firstChild(); n; n = next) {

Please don&apos;t use one letter abbreviation like n.

&gt; Source/WebCore/editing/markup.cpp:759
&gt; +            next = n-&gt;traverseNextNode();

You probably want to call traverseNextSibling here.

&gt; Source/WebCore/editing/markup.cpp:764
&gt; +        next = n-&gt;traverseNextNode();

Ditto.

&gt; Source/WebCore/editing/markup.cpp:766
&gt; +        // FIXME: We&apos;re comparing a deleted pointer. It works, but it seems a little dangerous.

You should make n ref-counted.

&gt; Source/WebCore/editing/markup.cpp:770
&gt; +    for (Node* n = endNode; n; n = next) {

Ditto about one letter variable.

&gt; Source/WebCore/editing/markup.cpp:773
&gt; +        if (n-&gt;childNodeCount())
&gt; +            static_cast&lt;ContainerNode*&gt;(n)-&gt;removeAllChildren();
&gt; +        next = n-&gt;traverseNextNode();

No need to remove all children if you just call traverseNextSibling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483586</commentid>
    <comment_count>46</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 15:52:18 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 110914 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110914&amp;action=review
&gt; 
&gt; The patch looks much nicer!
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:460
&gt; &gt; +static Node* ancestorToRetainStructureAndAppearance(Node* commonAncestor)
&gt; 
&gt; Please add inline keyword here.
&gt; 

Why not just leave it up to the compiler?

&gt; &gt; Source/WebCore/editing/markup.cpp:465
&gt; &gt; +static Node* ancestorToRetainStructureAndAppearanceHACK(Node* commonAncestor)
&gt; 
&gt; We definitely don&apos;t want the name HACK here. r- because of this.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:474
&gt; &gt; +    if (commonAncestor-&gt;isTextNode())
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; &gt; +    // FIXME: Do we want to handle mail quotes correctly? It might be useful...
&gt; &gt; +    // We cheat here since we don&apos;t have a render tree.
&gt; &gt; +    if (commonAncestor-&gt;hasTagName(tdTag)
&gt; &gt; +        || commonAncestor-&gt;hasTagName(liTag))
&gt; &gt; +        commonAncestor = commonAncestor-&gt;parentNode();
&gt; 
&gt; My suggestion is to extract a function out of ancestorToRetainStructureAndAppearanceForBlock (lines 444-454) and add td, tr, table, blockquote to the list.
&gt; And call enclosingNodeOfType with that.
&gt; 

I don&apos;t think that will work, because it might go too far up the tree. For example, if we had:
TABLE
&gt;TR
&gt;&gt;TD
&gt;&gt;&gt;DIV

If commonAncestor is the DIV, then I don&apos;t think we want to go up any higher, since we don&apos;t want the table in this case (I think).

&gt; &gt; Source/WebCore/editing/markup.cpp:736
&gt; &gt; +    if (!startNode || !endNode)
&gt; 
&gt; You should also check that startNode and endNode have parents.

Is it possible for them to be parentless at this point. At minimum, we know they are rooted somewhere under the Document.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:757
&gt; &gt; +    for (Node* n = fragment-&gt;firstChild(); n; n = next) {
&gt; 
&gt; Please don&apos;t use one letter abbreviation like n.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:759
&gt; &gt; +            next = n-&gt;traverseNextNode();
&gt; 
&gt; You probably want to call traverseNextSibling here.
&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:764
&gt; &gt; +        next = n-&gt;traverseNextNode();
&gt; 
&gt; Ditto.
&gt; 

We&apos;re not necessarily deleting siblings though. We also need to traverse down into its children potentially, or possibly traverse to one of its ancestor&apos;s children.

&gt; &gt; Source/WebCore/editing/markup.cpp:766
&gt; &gt; +        // FIXME: We&apos;re comparing a deleted pointer. It works, but it seems a little dangerous.
&gt; 
&gt; You should make n ref-counted.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:770
&gt; &gt; +    for (Node* n = endNode; n; n = next) {
&gt; 
&gt; Ditto about one letter variable.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:773
&gt; &gt; +        if (n-&gt;childNodeCount())
&gt; &gt; +            static_cast&lt;ContainerNode*&gt;(n)-&gt;removeAllChildren();
&gt; &gt; +        next = n-&gt;traverseNextNode();
&gt; 
&gt; No need to remove all children if you just call traverseNextSibling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483588</commentid>
    <comment_count>47</comment_count>
      <attachid>110919</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 15:53:14 -0700</bug_when>
    <thetext>Created attachment 110919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483614</commentid>
    <comment_count>48</comment_count>
      <attachid>110925</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 16:20:48 -0700</bug_when>
    <thetext>Created attachment 110925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483617</commentid>
    <comment_count>49</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-13 16:22:03 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:460
&gt; &gt; &gt; +static Node* ancestorToRetainStructureAndAppearance(Node* commonAncestor)
&gt; &gt; 
&gt; &gt; Please add inline keyword here.
&gt; 
&gt; Why not just leave it up to the compiler?

I think adding inline is a good way to document that this function should be short and static.

&gt; &gt; My suggestion is to extract a function out of ancestorToRetainStructureAndAppearanceForBlock (lines 444-454) and add td, tr, table, blockquote to the list.
&gt; &gt; And call enclosingNodeOfType with that.
&gt; &gt; 
&gt; 
&gt; I don&apos;t think that will work, because it might go too far up the tree. For example, if we had:
&gt; TABLE
&gt; &gt;TR
&gt; &gt;&gt;TD
&gt; &gt;&gt;&gt;DIV
&gt; 
&gt; If commonAncestor is the DIV, then I don&apos;t think we want to go up any higher, since we don&apos;t want the table in this case (I think).

And enclosingNodeOfType stops at td. I don&apos;t know what problem/concern you have.

&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:736
&gt; &gt; &gt; +    if (!startNode || !endNode)
&gt; &gt; 
&gt; &gt; You should also check that startNode and endNode have parents.
&gt; 
&gt; Is it possible for them to be parentless at this point. At minimum, we know they are rooted somewhere under the Document.

That&apos;s a good point.

&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:759
&gt; &gt; &gt; +            next = n-&gt;traverseNextNode();
&gt; &gt; 
&gt; &gt; You probably want to call traverseNextSibling here.
&gt; &gt; 
&gt; We&apos;re not necessarily deleting siblings though. We also need to traverse down into its children potentially, or possibly traverse to one of its ancestor&apos;s children.

&gt; &gt; &gt; Source/WebCore/editing/markup.cpp:764
&gt; &gt; &gt; +        next = n-&gt;traverseNextNode();
&gt; &gt; 
&gt; &gt; Ditto.

This should still be traverseNextSibling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483619</commentid>
    <comment_count>50</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-13 16:22:28 -0700</bug_when>
    <thetext>This version adds better support for finding an enclosing block without a render tree. It uses what the HTML5 spec considers block-level elements, but I&apos;m working on making sure the list is canonical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483622</commentid>
    <comment_count>51</comment_count>
      <attachid>110925</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-13 16:25:55 -0700</bug_when>
    <thetext>Comment on attachment 110925
Patch

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

&gt; Source/WebCore/ChangeLog:-975
&gt; -

Please revert this.

&gt; Source/WebCore/editing/markup.cpp:496
&gt; +    return node-&gt;hasTagName(addressTag)
&gt; +        || node-&gt;hasTagName(articleTag)
&gt; +        || node-&gt;hasTagName(asideTag)
&gt; +        || node-&gt;hasTagName(audioTag)
&gt; +        || node-&gt;hasTagName(blockquoteTag)
&gt; +        || node-&gt;hasTagName(canvasTag)
&gt; +        || node-&gt;hasTagName(ddTag)
&gt; +        || node-&gt;hasTagName(divTag)
&gt; +        || node-&gt;hasTagName(dlTag)
&gt; +        || node-&gt;hasTagName(fieldsetTag)
&gt; +        || node-&gt;hasTagName(figcaptionTag)
&gt; +        || node-&gt;hasTagName(figureTag)
&gt; +        || node-&gt;hasTagName(footerTag)
&gt; +        || node-&gt;hasTagName(formTag)
&gt; +        || node-&gt;hasTagName(headerTag)
&gt; +        || node-&gt;hasTagName(hgroupTag)
&gt; +        || node-&gt;hasTagName(hrTag)
&gt; +        || node-&gt;hasTagName(noscriptTag)
&gt; +        || node-&gt;hasTagName(olTag)
&gt; +        || node-&gt;hasTagName(outputTag)
&gt; +        || node-&gt;hasTagName(pTag)
&gt; +        || node-&gt;hasTagName(preTag)
&gt; +        || node-&gt;hasTagName(sectionTag)
&gt; +        || node-&gt;hasTagName(tableTag)
&gt; +        || node-&gt;hasTagName(tfootTag)
&gt; +        || node-&gt;hasTagName(ulTag)
&gt; +        || node-&gt;hasTagName(videoTag);

Where did you get this list? We should use the same list of nodes as ancestorToRetainStructureAndAppearanceForBlock. e.g. this list is missing h1 and including random elements like video and audio. r- because of this code duplication.

&gt; Source/WebCore/editing/markup.cpp:502
&gt; +    Node* commonAncestorBlock = enclosingNodeOfType(
&gt; +        firstPositionInOrBeforeNode(commonAncestor), isHtmlBlockLevelElement);

Nit: It seems like this can fit in one line.

&gt; Source/WebCore/editing/markup.cpp:749
&gt; +    RefPtr&lt;Node&gt; startNode;
&gt; +    RefPtr&lt;Node&gt; endNode;

Come to think of it, these noes should probably be renamed to nodeBeforePastedContent and nodeAfterPastedContent.

&gt; Source/WebCore/editing/markup.cpp:789
&gt; +        if (node-&gt;childNodeCount())
&gt; +            static_cast&lt;ContainerNode*&gt;(node.get())-&gt;removeAllChildren();
&gt; +        next = node-&gt;traverseNextNode();

Again, next = node-&gt;traverseNextSibling(); since you&apos;ve deleted all children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483810</commentid>
    <comment_count>52</comment_count>
      <attachid>110971</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 00:05:23 -0700</bug_when>
    <thetext>Created attachment 110971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483812</commentid>
    <comment_count>53</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 00:07:52 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 110925 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110925&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:-975
&gt; &gt; -
&gt; 
&gt; Please revert this.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:496
&gt; &gt; +    return node-&gt;hasTagName(addressTag)
&gt; &gt; +        || node-&gt;hasTagName(articleTag)
&gt; &gt; +        || node-&gt;hasTagName(asideTag)
&gt; &gt; +        || node-&gt;hasTagName(audioTag)
&gt; &gt; +        || node-&gt;hasTagName(blockquoteTag)
&gt; &gt; +        || node-&gt;hasTagName(canvasTag)
&gt; &gt; +        || node-&gt;hasTagName(ddTag)
&gt; &gt; +        || node-&gt;hasTagName(divTag)
&gt; &gt; +        || node-&gt;hasTagName(dlTag)
&gt; &gt; +        || node-&gt;hasTagName(fieldsetTag)
&gt; &gt; +        || node-&gt;hasTagName(figcaptionTag)
&gt; &gt; +        || node-&gt;hasTagName(figureTag)
&gt; &gt; +        || node-&gt;hasTagName(footerTag)
&gt; &gt; +        || node-&gt;hasTagName(formTag)
&gt; &gt; +        || node-&gt;hasTagName(headerTag)
&gt; &gt; +        || node-&gt;hasTagName(hgroupTag)
&gt; &gt; +        || node-&gt;hasTagName(hrTag)
&gt; &gt; +        || node-&gt;hasTagName(noscriptTag)
&gt; &gt; +        || node-&gt;hasTagName(olTag)
&gt; &gt; +        || node-&gt;hasTagName(outputTag)
&gt; &gt; +        || node-&gt;hasTagName(pTag)
&gt; &gt; +        || node-&gt;hasTagName(preTag)
&gt; &gt; +        || node-&gt;hasTagName(sectionTag)
&gt; &gt; +        || node-&gt;hasTagName(tableTag)
&gt; &gt; +        || node-&gt;hasTagName(tfootTag)
&gt; &gt; +        || node-&gt;hasTagName(ulTag)
&gt; &gt; +        || node-&gt;hasTagName(videoTag);
&gt; 
&gt; Where did you get this list? We should use the same list of nodes as ancestorToRetainStructureAndAppearanceForBlock. e.g. this list is missing h1 and including random elements like video and audio. r- because of this code duplication.
&gt; 

Updated per offline discussion.

&gt; &gt; Source/WebCore/editing/markup.cpp:502
&gt; &gt; +    Node* commonAncestorBlock = enclosingNodeOfType(
&gt; &gt; +        firstPositionInOrBeforeNode(commonAncestor), isHtmlBlockLevelElement);
&gt; 
&gt; Nit: It seems like this can fit in one line.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:749
&gt; &gt; +    RefPtr&lt;Node&gt; startNode;
&gt; &gt; +    RefPtr&lt;Node&gt; endNode;
&gt; 
&gt; Come to think of it, these noes should probably be renamed to nodeBeforePastedContent and nodeAfterPastedContent.
&gt; 

Done.

&gt; &gt; Source/WebCore/editing/markup.cpp:789
&gt; &gt; +        if (node-&gt;childNodeCount())
&gt; &gt; +            static_cast&lt;ContainerNode*&gt;(node.get())-&gt;removeAllChildren();
&gt; &gt; +        next = node-&gt;traverseNextNode();
&gt; 
&gt; Again, next = node-&gt;traverseNextSibling(); since you&apos;ve deleted all children.

Done. I misunderstood what traverseNextSibling() did. This makes the patch a bit simpler in the end too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484005</commentid>
    <comment_count>54</comment_count>
      <attachid>110971</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 08:56:04 -0700</bug_when>
    <thetext>Comment on attachment 110971
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Covered by existing layout tests.

No rebaselines?

&gt; Source/WebCore/editing/markup.cpp:431
&gt; +bool isSpeciallyStyledBlock(const Node* node)

The word &quot;specially&quot; doesn&apos;t add any semantics here. I would merge this function and isHTMLBlockElement, and make it take an enum that indicates whether we include table cell (td/th) or not.

Alternatively, we can name this isNonTableCellHTMLBlockElement.

&gt; Source/WebCore/editing/markup.cpp:444
&gt; +        || node-&gt;hasTagName(h6Tag);

Let&apos;s not add h6 now. We need a test for this. r- because of this.

&gt; Source/WebCore/editing/markup.cpp:449
&gt; +    return node-&gt;hasTagName(tdTag)

You&apos;re missing th here.

&gt; Source/WebCore/editing/markup.cpp:450
&gt; +        || node-&gt;hasTagName(trTag)

I don&apos;t think we should have tr here.

&gt; Source/WebCore/editing/markup.cpp:451
&gt; +        || node-&gt;hasTagName(blockquoteTag)

blockquote probably belongs to isSpeciallyStyledBlock but let&apos;s not make that change either. We need a test.

&gt; Source/WebCore/editing/markup.cpp:455
&gt; +// FIXME: Do we want to handle mail quotes here instead? It might be useful...

Please remove &quot;It might be useful...&quot; It doesn&apos;t add any semantics.

&gt; Source/WebCore/editing/markup.cpp:456
&gt; +// This is currently handled one level about ancestorToRetainStructureAndAppearance.

I don&apos;t understand this comment.

&gt; Source/WebCore/editing/markup.cpp:481
&gt; +static Node* ancestorToRetainStructureAndAppearance(Node* commonAncestor)
&gt; +{
&gt; +    return ancestorToRetainStructureAndAppearanceForBlock(enclosingBlock(commonAncestor));
&gt; +}
&gt; +
&gt; +static Node* ancestorToRetainStructureAndAppearanceWithNoRenderer(Node* commonAncestor)

Please add inline keywords to these functions.

&gt; Source/WebCore/editing/markup.cpp:725
&gt; +    // We move the resulting DOM tree into a Document so we can create a proper Range.

This comment seems unnecessary.

&gt; Source/WebCore/editing/markup.cpp:747
&gt; +    for (Node* node = taggedDocument-&gt;firstChild(); node; node = node-&gt;traverseNextNode()) {
&gt; +        if (node-&gt;nodeType() == Node::COMMENT_NODE &amp;&amp; static_cast&lt;CharacterData*&gt;(node)-&gt;data() == fragmentMarkerTag) {
&gt; +            if (!nodeBeforeContext)
&gt; +                nodeBeforeContext = node;
&gt; +            else {
&gt; +                nodeAfterContext = node;
&gt; +                break;
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (!(nodeBeforeContext &amp;&amp; nodeAfterContext))
&gt; +        return 0;
&gt; +
&gt; +    RefPtr&lt;Range&gt; range = Range::create(taggedDocument.get(),
&gt; +        positionAfterNode(nodeBeforeContext.get()).parentAnchoredEquivalent(),
&gt; +        positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent());

We can probably extract this segment as a function.

&gt; Source/WebCore/editing/markup.cpp:754
&gt; +    // Set up the initial range we&apos;re interested in.

This comment repeats what the code says. Please remove.

&gt; Source/WebCore/editing/markup.cpp:760
&gt; +        fragment-&gt;appendChild(specialCommonAncestor, ec);
&gt; +        ASSERT(!ec);
&gt; +    } else
&gt; +        fragment-&gt;takeAllChildrenFrom(static_cast&lt;ContainerNode*&gt;(commonAncestor));

I would rather see a comment on why we call appendChild for specialCommonAncestor and takeAllChildrenFrom for commonAncestor.

&gt; Source/WebCore/editing/markup.cpp:779
&gt; +    Node* next;
&gt; +    for (RefPtr&lt;Node&gt; node = fragment-&gt;firstChild(); node; node = next) {
&gt; +        if (nodeBeforeContext-&gt;isDescendantOf(node.get())) {
&gt; +            next = node-&gt;traverseNextNode();
&gt; +            continue;
&gt; +        }
&gt; +        next = node-&gt;traverseNextSibling();
&gt; +        node-&gt;parentNode()-&gt;removeChild(node.get(), ec);
&gt; +        if (nodeBeforeContext == node)
&gt; +            break;
&gt; +    }
&gt; +
&gt; +    ASSERT(nodeAfterContext-&gt;parentNode());
&gt; +    for (Node* node = nodeAfterContext.get(); node; node = next) {
&gt; +        next = node-&gt;traverseNextSibling();
&gt; +        node-&gt;parentNode()-&gt;removeChild(node, ec);
&gt; +        ASSERT(!ec);
&gt; +    }

I feel like this should be extracted as a helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484120</commentid>
    <comment_count>55</comment_count>
      <attachid>111035</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 11:38:09 -0700</bug_when>
    <thetext>Created attachment 111035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484121</commentid>
    <comment_count>56</comment_count>
      <attachid>110971</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 11:38:46 -0700</bug_when>
    <thetext>Comment on attachment 110971
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        Covered by existing layout tests.
&gt; 
&gt; No rebaselines?

No, assuming everything is correct, the resulting DOM tree in the &quot;normal case&quot; should be identical.

&gt;&gt; Source/WebCore/editing/markup.cpp:431
&gt;&gt; +bool isSpeciallyStyledBlock(const Node* node)
&gt; 
&gt; The word &quot;specially&quot; doesn&apos;t add any semantics here. I would merge this function and isHTMLBlockElement, and make it take an enum that indicates whether we include table cell (td/th) or not.
&gt; 
&gt; Alternatively, we can name this isNonTableCellHTMLBlockElement.

I chose to split them up but use your naming suggestion.

&gt;&gt; Source/WebCore/editing/markup.cpp:444
&gt;&gt; +        || node-&gt;hasTagName(h6Tag);
&gt; 
&gt; Let&apos;s not add h6 now. We need a test for this. r- because of this.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:449
&gt;&gt; +    return node-&gt;hasTagName(tdTag)
&gt; 
&gt; You&apos;re missing th here.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:450
&gt;&gt; +        || node-&gt;hasTagName(trTag)
&gt; 
&gt; I don&apos;t think we should have tr here.

I don&apos;t know that I agree. Why do we check for trTag in ancestorToRetainStructureAndAppearanceForBlock then?
Since I don&apos;t think it should make a difference, I removed it for now.

&gt;&gt; Source/WebCore/editing/markup.cpp:451
&gt;&gt; +        || node-&gt;hasTagName(blockquoteTag)
&gt; 
&gt; blockquote probably belongs to isSpeciallyStyledBlock but let&apos;s not make that change either. We need a test.

Done. Removed.

&gt;&gt; Source/WebCore/editing/markup.cpp:455
&gt;&gt; +// FIXME: Do we want to handle mail quotes here instead? It might be useful...
&gt; 
&gt; Please remove &quot;It might be useful...&quot; It doesn&apos;t add any semantics.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:456
&gt;&gt; +// This is currently handled one level about ancestorToRetainStructureAndAppearance.
&gt; 
&gt; I don&apos;t understand this comment.

I updated it. I hope it makes more sense now.

&gt;&gt; Source/WebCore/editing/markup.cpp:481
&gt;&gt; +static Node* ancestorToRetainStructureAndAppearanceWithNoRenderer(Node* commonAncestor)
&gt; 
&gt; Please add inline keywords to these functions.

I really don&apos;t feel like the inline keyword adds or gets us anything here, but done.

&gt;&gt; Source/WebCore/editing/markup.cpp:725
&gt;&gt; +    // We move the resulting DOM tree into a Document so we can create a proper Range.
&gt; 
&gt; This comment seems unnecessary.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:747
&gt;&gt; +        positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent());
&gt; 
&gt; We can probably extract this segment as a function.

Which segment and what would you suggest naming it?

&gt;&gt; Source/WebCore/editing/markup.cpp:754
&gt;&gt; +    // Set up the initial range we&apos;re interested in.
&gt; 
&gt; This comment repeats what the code says. Please remove.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:760
&gt;&gt; +        fragment-&gt;takeAllChildrenFrom(static_cast&lt;ContainerNode*&gt;(commonAncestor));
&gt; 
&gt; I would rather see a comment on why we call appendChild for specialCommonAncestor and takeAllChildrenFrom for commonAncestor.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:779
&gt;&gt; +    }
&gt; 
&gt; I feel like this should be extracted as a helper function.

Done... not entirely sure what you had in mind here though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484128</commentid>
    <comment_count>57</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 11:43:14 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (From update of attachment 110971 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110971&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:10
&gt; &gt;&gt; +        Covered by existing layout tests.
&gt; &gt; 
&gt; &gt; No rebaselines?
&gt; 
&gt; No, assuming everything is correct, the resulting DOM tree in the &quot;normal case&quot; should be identical.

Did you run layout tests? At least ones in editing, fast/events, and fast/forms?

&gt; &gt;&gt; Source/WebCore/editing/markup.cpp:747
&gt; &gt;&gt; +        positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent());
&gt; &gt; 
&gt; &gt; We can probably extract this segment as a function.
&gt; 
&gt; Which segment and what would you suggest naming it?

The part you&apos;d find start and end nodes and create a range out of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484134</commentid>
    <comment_count>58</comment_count>
      <attachid>111035</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 11:48:54 -0700</bug_when>
    <thetext>Comment on attachment 111035
Patch

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

Please consider making trimFragment take PassRefPtr but this patch is probably landable as is.

&gt; Source/WebCore/editing/markup.cpp:711
&gt; +static void trimFragment(DocumentFragment* fragment, Node* nodeBeforeContext, Node* nodeAfterContext)

This function should probably take PassRefPtr to nodes.

&gt; Source/WebCore/editing/markup.cpp:721
&gt; +        node-&gt;parentNode()-&gt;removeChild(node.get(), ec);

I&apos;d add an assertion that node doesn&apos;t contain nodeAfterContext.

&gt; Source/WebCore/editing/markup.cpp:734
&gt; +PassRefPtr&lt;DocumentFragment&gt; createFragmentFromMarkupWithContext(Document* document, const String&amp; markup, unsigned fragmentStart, unsigned fragmentEnd, const String&amp; baseURL, FragmentScriptingPermission scriptingPermission)

Nit: Probably split this into two lines.

&gt; Source/WebCore/editing/markup.cpp:763
&gt; +    if (!(nodeBeforeContext &amp;&amp; nodeAfterContext))

I think !nodeBeforeContext || ! nodeAfterContext looked better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484163</commentid>
    <comment_count>59</comment_count>
      <attachid>111046</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:16:37 -0700</bug_when>
    <thetext>Created attachment 111046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484164</commentid>
    <comment_count>60</comment_count>
      <attachid>110971</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:16:57 -0700</bug_when>
    <thetext>Comment on attachment 110971
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt;&gt;&gt; +        Covered by existing layout tests.
&gt;&gt;&gt; 
&gt;&gt;&gt; No rebaselines?
&gt;&gt; 
&gt;&gt; No, assuming everything is correct, the resulting DOM tree in the &quot;normal case&quot; should be identical.
&gt; 
&gt; Did you run layout tests? At least ones in editing, fast/events, and fast/forms?

Yes.

&gt;&gt;&gt;&gt; Source/WebCore/editing/markup.cpp:747
&gt;&gt;&gt;&gt; +        positionBeforeNode(nodeAfterContext.get()).parentAnchoredEquivalent());
&gt;&gt;&gt; 
&gt;&gt;&gt; We can probably extract this segment as a function.
&gt;&gt; 
&gt;&gt; Which segment and what would you suggest naming it?
&gt; 
&gt; The part you&apos;d find start and end nodes and create a range out of it.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484167</commentid>
    <comment_count>61</comment_count>
      <attachid>111035</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:17:52 -0700</bug_when>
    <thetext>Comment on attachment 111035
Patch

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

&gt;&gt; Source/WebCore/editing/markup.cpp:711
&gt;&gt; +static void trimFragment(DocumentFragment* fragment, Node* nodeBeforeContext, Node* nodeAfterContext)
&gt; 
&gt; This function should probably take PassRefPtr to nodes.

Not needed per our discussion.

&gt;&gt; Source/WebCore/editing/markup.cpp:721
&gt;&gt; +        node-&gt;parentNode()-&gt;removeChild(node.get(), ec);
&gt; 
&gt; I&apos;d add an assertion that node doesn&apos;t contain nodeAfterContext.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:734
&gt;&gt; +PassRefPtr&lt;DocumentFragment&gt; createFragmentFromMarkupWithContext(Document* document, const String&amp; markup, unsigned fragmentStart, unsigned fragmentEnd, const String&amp; baseURL, FragmentScriptingPermission scriptingPermission)
&gt; 
&gt; Nit: Probably split this into two lines.

Done.

&gt;&gt; Source/WebCore/editing/markup.cpp:763
&gt;&gt; +    if (!(nodeBeforeContext &amp;&amp; nodeAfterContext))
&gt; 
&gt; I think !nodeBeforeContext || ! nodeAfterContext looked better.

Not needed anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484170</commentid>
    <comment_count>62</comment_count>
      <attachid>111046</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 12:19:43 -0700</bug_when>
    <thetext>Comment on attachment 111046
Patch

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

&gt; Source/WebCore/editing/markup.cpp:711
&gt; +const char fragmentMarkerTag[] = &quot;webkit-fragment-marker&quot;;

Nit: missing static.

&gt; Source/WebCore/editing/markup.cpp:713
&gt; +bool findNodesSurroundingContext(Document* document, RefPtr&lt;Node&gt;&amp; nodeBeforeContext, RefPtr&lt;Node&gt;&amp; nodeAfterContext)

Nit: missing static (this is going to cause a compilation error on some platforms).

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:-270
&gt; -

Are you deleting a blank line? Or removing the last line break from the line (which is bad)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484176</commentid>
    <comment_count>63</comment_count>
      <attachid>111050</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:26:06 -0700</bug_when>
    <thetext>Created attachment 111050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484177</commentid>
    <comment_count>64</comment_count>
      <attachid>111046</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:26:20 -0700</bug_when>
    <thetext>Comment on attachment 111046
Patch

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

&gt;&gt; Source/WebCore/editing/markup.cpp:711
&gt;&gt; +const char fragmentMarkerTag[] = &quot;webkit-fragment-marker&quot;;
&gt; 
&gt; Nit: missing static.

Done. I always thought that const implies internal linkage in C++, but I added it to be safe.

&gt;&gt; Source/WebCore/editing/markup.cpp:713
&gt;&gt; +bool findNodesSurroundingContext(Document* document, RefPtr&lt;Node&gt;&amp; nodeBeforeContext, RefPtr&lt;Node&gt;&amp; nodeAfterContext)
&gt; 
&gt; Nit: missing static (this is going to cause a compilation error on some platforms).

Oops. Fixed.

&gt;&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:-270
&gt;&gt; -
&gt; 
&gt; Are you deleting a blank line? Or removing the last line break from the line (which is bad)?

Hm. I think my editor did that. Reverted this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484209</commentid>
    <comment_count>65</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2011-10-14 12:55:01 -0700</bug_when>
    <thetext>Committed r97497: &lt;http://trac.webkit.org/changeset/97497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484524</commentid>
    <comment_count>66</comment_count>
      <attachid>111050</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-15 00:14:00 -0700</bug_when>
    <thetext>Comment on attachment 111050
Patch

Cleared review? from attachment 111050 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96064</attachid>
            <date>2011-06-05 22:43:19 -0700</date>
            <delta_ts>2011-09-29 16:34:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20110605224318.patch</filename>
            <type>text/plain</type>
            <size>1407</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgxMjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MGIwYWEwY2I3YzM1MWI3ZDVjMzljZDZiM2ViMjUyNWJhOTM1M2QxMC4uMjM5MjJkZTY0Y2IxYmU3
Yjg4OGNjYTVkYWFmMmIzZDZhNmI5Y2Y0OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMS0wNi0wNSAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIEFkZCBwbHVtYmluZyB0byBzdXBwb3J0IHBhc3RpbmcgY29udGV4dCBpbiBIVE1M
IHBhc3RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjIxMTIKKworICAgICAgICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2xpcGJvYXJkOjpyZWFkSFRNTCk6CisKIDIwMTEtMDYtMDQgIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJk
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAx
YmUyNTVhNzY4ZmU5NDNjMzdhOGUxNTVlMGUzNGI2ZTI4OGY2NmUxLi4yM2MxOGIxMWEwNzBkZGY2
ODE3Njc2NzY4YjA3NGIxNzJmNTI2YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDbGlwYm9hcmQuaApAQCAtNjQsNiArNjQsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFdlYlN0cmluZyByZWFkUGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7
IH0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsgcmV0
dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoCisgICAg
ICAgIEJ1ZmZlciwgV2ViVVJMKiwgaW50KiBmcmFnbWVudFN0YXJ0LAorICAgICAgICBpbnQqIGZy
YWdtZW50RW5kKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgV2ViRGF0YSBy
ZWFkSW1hZ2UoQnVmZmVyKSB7IHJldHVybiBXZWJEYXRhKCk7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVBsYWluVGV4dChjb25zdCBXZWJTdHJpbmcmKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109219</attachid>
            <date>2011-09-29 16:34:50 -0700</date>
            <delta_ts>2011-10-05 22:16:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20110929163448.patch</filename>
            <type>text/plain</type>
            <size>15404</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NDE4ZWQ4MmQzODkyMmEy
NzM0M2NiM2U4YWFhNDlhYjFjNTEzNDA3Li4zMGUxZmQ1NWJhYmZmM2I4ODkxMDk1ZDdjYzU2OWQ1
YmM2MmI1MDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMjkgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgY2hhbmdlIGFsbG93cyB1cyB0byBjcmVhdGUgYW4gSFRNTCBmcmFnbWVudCB0YWtpbmcg
aW50byBhY2NvdW50IHRoZSBjb250ZXh0IGFyb3VuZCB0aGUKKyAgICAgICAgbWFya3VwLiBUaGlz
IHByZXNlcnZlcyA8c3R5bGU+IGRlY2xhcmF0aW9ucyBhbmQgb3RoZXIgSFRNTCBlbGVtZW50cyB0
aGF0IGFyZQorICAgICAgICBjb250ZXh0LWRlcGVuZGVudCwgbGlrZSBURCBhbmQgTEkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKwogMjAxMS0wOS0yOSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjk2MzQwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4
IGU4Y2E5NWU0YjcwY2IzZGQ1ZjhjOTIyYzg3ODVlZTQ1NGI1MGRlM2UuLmZmOGE1NzMxYWIyMDg4
MDAxZmMzN2Y2MWYzNTA1NThkMjhhZjU2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
QEAgLTQ1LDE0ICs0NSwyMiBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbXB0
eUNsaWVudHMuaCIKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWFya3VwQWNjdW11
bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJYTUxO
U05hbWVzLmgiCkBAIC02Niw2ICs3NCw1NiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CitQYWdlKiBwYWdlRm9yUGFyc2luZyA9IDA7
CisKK2Jvb2wgZW5zdXJlUGFnZUZvclBhcnNpbmdJbml0aWFsaXplZCgpCit7CisgICAgaWYgKHBh
Z2VGb3JQYXJzaW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0YXRpYyBGcmFtZUxv
YWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9IG5ldyBFbXB0eUZyYW1lTG9hZGVy
Q2xpZW50OworICAgIFBhZ2U6OlBhZ2VDbGllbnRzIHBhZ2VDbGllbnRzOworICAgIHN0YXRpYyBD
aHJvbWVDbGllbnQqIGR1bW15Q2hyb21lQ2xpZW50ID0gbmV3IEVtcHR5Q2hyb21lQ2xpZW50Owor
ICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IGR1bW15Q2hyb21lQ2xpZW50OworI2lmIEVO
QUJMRShDT05URVhUX01FTlVTKQorICAgIHN0YXRpYyBDb250ZXh0TWVudUNsaWVudCogZHVtbXlD
b250ZXh0TWVudUNsaWVudCA9IG5ldyBFbXB0eUNvbnRleHRNZW51Q2xpZW50OworICAgIHBhZ2VD
bGllbnRzLmNvbnRleHRNZW51Q2xpZW50ID0gZHVtbXlDb250ZXh0TWVudUNsaWVudDsKKyNlbmRp
ZgorICAgIHN0YXRpYyBFZGl0b3JDbGllbnQqIGR1bW15RWRpdG9yQ2xpZW50ID0gbmV3IEVtcHR5
RWRpdG9yQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IGR1bW15RWRpdG9y
Q2xpZW50OworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgc3RhdGljIERyYWdDbGllbnQq
IGR1bW15RHJhZ0NsaWVudCA9IG5ldyBFbXB0eURyYWdDbGllbnQ7CisgICAgcGFnZUNsaWVudHMu
ZHJhZ0NsaWVudCA9IGR1bW15RHJhZ0NsaWVudDsKKyNlbmRpZgorICAgIHN0YXRpYyBJbnNwZWN0
b3JDbGllbnQqIGR1bW15SW5zcGVjdG9yQ2xpZW50ID0gbmV3IEVtcHR5SW5zcGVjdG9yQ2xpZW50
OworICAgIHBhZ2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9IGR1bW15SW5zcGVjdG9yQ2xpZW50
OworI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisgICAgc3RhdGljIERldmljZU1vdGlv
bkNsaWVudCogZHVtbXlEZXZpY2VNb3Rpb25DbGllbnQgPSBuZXcgRW1wdHlEZXZpY2VNb3Rpb25D
bGllbnQ7CisgICAgcGFnZUNsaWVudHMuZGV2aWNlTW90aW9uQ2xpZW50ID0gZHVtbXlEZXZpY2VN
b3Rpb25DbGllbnQ7CisgICAgc3RhdGljIERldmljZU9yaWVudGF0aW9uQ2xpZW50KiBkdW1teURl
dmljZU9yaWVudGF0aW9uQ2xpZW50ID0gbmV3IEVtcHR5RGV2aWNlT3JpZW50YXRpb25DbGllbnQ7
CisgICAgcGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQgPSBkdW1teURldmljZU9y
aWVudGF0aW9uQ2xpZW50OworI2VuZGlmCisKKyAgICBwYWdlRm9yUGFyc2luZyA9IG5ldyBQYWdl
KHBhZ2VDbGllbnRzKTsKKyAgICBwYWdlRm9yUGFyc2luZy0+c2V0dGluZ3MoKS0+c2V0TWVkaWFF
bmFibGVkKGZhbHNlKTsKKyAgICBwYWdlRm9yUGFyc2luZy0+c2V0dGluZ3MoKS0+c2V0SmF2YVNj
cmlwdEVuYWJsZWQoZmFsc2UpOworICAgIHBhZ2VGb3JQYXJzaW5nLT5zZXR0aW5ncygpLT5zZXRQ
bHVnaW5zRW5hYmxlZChmYWxzZSk7CisKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6
OmNyZWF0ZShwYWdlRm9yUGFyc2luZywgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisgICAg
ZnJhbWUtPnNldFZpZXcoRnJhbWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsKKyAgICAvLyBE
aXNhYmxlIHNjcm9sbGluZy4gVGhpcyBwcmV2ZW50cyBhIGNyYXNoLi4uIHRob3VnaCB3ZSBzaG91
bGQgcmVhbGx5IGZpZ3VyZSBvdXQgd2h5IGl0IGNyYXNoZXMuCisgICAgZnJhbWUtPnZpZXcoKS0+
c2V0Q2FuSGF2ZVNjcm9sbGJhcnMoZmFsc2UpOworICAgIGZyYW1lLT5pbml0KCk7CisgICAgRnJh
bWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBsb2FkZXItPnNldEZvcmNl
ZFNhbmRib3hGbGFncyhTYW5kYm94QWxsKTsgLy8gSXMgdGhpcyBuZWVkZWQ/CisgICAgQVNTRVJU
KGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSk7IC8vIERvY3VtZW50TG9hZGVyIHNob3Vs
ZCBoYXZlIGJlZW4gY3JlYXRlZCBieSBpbml0KCkKKyAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPndyaXRlcigpLT5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiosIGludCBwcm9wZXJ0eUlEKTsKQEAgLTY5NCw2ICs3NTIsNTggQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRl
eHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgaW50IGZyYWdtZW50
U3RhcnQsIGludCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICAvLyBUaGlzIG1l
dGhvZCBpc24ndCByZWFsbHkgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHdlYiBhcHBz
IHNvIGl0J3MgYXNzdW1lZCB3ZSdyZSBwYXNzaW5nIGluIHNvbWV0aGluZyBzYW5lLgorICAgIGlm
IChmcmFnbWVudFN0YXJ0IDwgMCB8fCBmcmFnbWVudEVuZCA8IDApCisgICAgICAgIHJldHVybiBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIG1hcmt1cCwgYmFzZVVSTCwgc2NyaXB0
aW5nUGVybWlzc2lvbik7CisKKyAgICAvLyBXZSB1c2UgY29tbWVudCB0YWdzIHRvIGhlbHAgdXMg
ZXh0cmFjdCB0aGUgYXBwcm9wcmlhdGUgRG9jdW1lbnRGcmFnbWVudC4KKyAgICBjb25zdCBjaGFy
IGJlZ2luVGFnW10gPSAiM2Y4MWM2ZmItZTkyZS00MTdkLWEwNWUtZmQ2ZjdhNmM4ODNjIjsKKyAg
ICBjb25zdCBjaGFyIGVuZFRhZ1tdID0gIjM4NzllZmM0LTdmMGEtNDM1Mi1iYTczLTYxMTU4YmJl
Y2Q3MCI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHRhZ2dlZE1hcmt1cDsKKyAgICB0YWdnZWRNYXJr
dXAuYXBwZW5kKG1hcmt1cC5sZWZ0KGZyYWdtZW50U3RhcnQpKTsKKyAgICB0YWdnZWRNYXJrdXAu
YXBwZW5kKCI8IS0tIik7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChiZWdpblRhZyk7CisgICAg
dGFnZ2VkTWFya3VwLmFwcGVuZCgiLS0+Iik7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJr
dXAuc3Vic3RyaW5nKGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCkp
OworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoIjwhLS0iKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBw
ZW5kKGVuZFRhZyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZCgiLS0+Iik7CisgICAgdGFnZ2Vk
TWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50RW5kKSk7CisKKyAgICBlbnN1
cmVQYWdlRm9yUGFyc2luZ0luaXRpYWxpemVkKCk7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9
IHBhZ2VGb3JQYXJzaW5nLT5tYWluRnJhbWUoKS0+bG9hZGVyKCk7CisgICAgQVNTRVJUKGxvYWRl
ci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSk7CisgICAgY29uc3QgQ1N0cmluZyYgdGFnZ2VkTWFy
a3VwRGF0YSA9IHRhZ2dlZE1hcmt1cC50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBsb2FkZXItPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5iZWdpbihLVVJMKCkpOworICAgIGxvYWRl
ci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmFkZERhdGEodGFnZ2VkTWFya3Vw
RGF0YS5kYXRhKCksIHRhZ2dlZE1hcmt1cERhdGEubGVuZ3RoKCkpOworICAgIGxvYWRlci0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOworICAgIC8vIFRPRE86IFdlIG5l
ZWQgdG8gZG8gc29tZSBjbGVhbnVwIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgZG9jLi4uIGZpZ3Vy
ZSBvdXQgd2hhdC4KKworICAgIC8vIE5vdyBzcGVsdW5rIHRocm91Z2ggdGhlIERPTSBhbmQgZXh0
cmFjdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSByYW5nZSB1c2luZyB0aGUgc2V0
aW5lbHMuCisgICAgUmVmUHRyPE5vZGU+IGZyYWdtZW50U3RhcnROb2RlID0gMDsKKyAgICBSZWZQ
dHI8Tm9kZT4gZnJhZ21lbnRFbmROb2RlID0gMDsKKyAgICBmb3IgKE5vZGUqIG4gPSBwYWdlRm9y
UGFyc2luZy0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpDT01NRU5UX05PREUpIHsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDaGFyYWN0ZXJE
YXRhKj4obiktPmRhdGEoKSA9PSBiZWdpblRhZykKKyAgICAgICAgICAgICAgICBmcmFnbWVudFN0
YXJ0Tm9kZSA9IG47CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+
KG4pLT5kYXRhKCkgPT0gZW5kVGFnKQorICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kTm9kZSA9
IG47CisgICAgICAgICAgICBpZiAoZnJhZ21lbnRTdGFydE5vZGUgJiYgZnJhZ21lbnRFbmROb2Rl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFnZUZvclBhcnNpbmctPm1haW5GcmFtZSgp
LT5kb2N1bWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBv
c2l0aW9uKGZyYWdtZW50U3RhcnROb2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9y
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihmcmFn
bWVudEVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSk7CisgICAgY29u
c3QgU3RyaW5nJiBmcmFnbWVudE1hcmt1cCA9IGNyZWF0ZU1hcmt1cChyYW5nZS5nZXQoKSwgMCwg
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CisKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGRvY3VtZW50LCBmcmFnbWVudE1hcmt1cCwgYmFzZVVSTCwgc2NyaXB0aW5nUGVybWlz
c2lvbik7Cit9CisKIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5oCmluZGV4IDFiZmU5MDA2NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkwMjc5ZDU3ZjAuLmFkZTQ1
NjNlNmMzZDUxZjBlNzhlMTYxYjY1OWE2ZTA5MzMwZDA5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1
cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBT
dHJpbmcmIG1hcmt1cCwgaW50IGZyYWdtZW50U3RhcnQsIGludCBmcmFnbWVudEVuZCwgY29uc3Qg
U3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNj
cmlwdGluZ0FsbG93ZWQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTm9kZXMoRG9jdW1lbnQqLCBjb25zdCBWZWN0b3I8Tm9kZSo+Jik7CiAKICAg
ICBib29sIGlzUGxhaW5UZXh0TWFya3VwKE5vZGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXgg
YTg4MmU2MzA3ZTRkODY4NmVlNTc5NjI0ZjYyYTBlOGE2NzkyZDA0NC4uODMzYTNjOWQ3YWY3YjBi
NzNjZjJlMDkwNjIzOGIyYzY1NTM3ZGIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xNjAsNyArMTYw
LDggQEAgU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0
YW5kYXJkQnVmZmVyOwogICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAg
S1VSTCBzb3VyY2VVUkw7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIGludCBp
Z25vcmVkOworICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChi
dWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJu
IGh0bWxUZXh0OwogICAgICAgICB9CkBAIC0yNjcsNCArMjY4LDMgQEAgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcApp
bmRleCBiMzdlY2E0YzBjY2E4ZTA3MjM5OWNhMDdmNWUwOTFiY2IyYzllNzdjLi43NDMzODA2YmE4
NDBmMzIxNjI0OWMxMzQ5ZTQyOTU1ODMzZjNiYTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5j
cHAKQEAgLTk3LDcgKzk3LDggQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgIGlmICh0eXBl
KCkgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAg
S1VSTCBpZ25vcmVkU291cmNlVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2Fy
ZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25v
cmVkU291cmNlVVJMKTsKKyAgICAgICAgaW50IGlnbm9yZWQ7CisgICAgICAgIFBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVy
LCAmaHRtbCwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAg
IGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGFzdGVib2FyZENocm9taXVtLmNwcAppbmRleCA2ZjU2MDc3N2Q4MzM5YWI1ZDJkMjdlMzY3
Y2ZiMDZkNjI4NDdhYzcxLi40YzA2YWJlOTQ4OTc0ZTljNzdmNGU2N2JmMTcxMzE2YzQzYWU1YWU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJk
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3Rl
Ym9hcmRDaHJvbWl1bS5jcHAKQEAgLTE3MywxMCArMTczLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBh
c3NSZWZQCiAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFi
bGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAgU3Ry
aW5nIG1hcmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAmc3JjVVJMKTsKKyAgICAgICAg
aW50IGZyYWdtZW50U3RhcnQgPSAtMTsKKyAgICAgICAgaW50IGZyYWdtZW50RW5kID0gLTE7Cisg
ICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3Vw
LCAmc3JjVVJMLCAmZnJhZ21lbnRTdGFydCwgJmZyYWdtZW50RW5kKTsKIAogICAgICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQotICAgICAgICAgICAgY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIHNyY1VSTCwgRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cFdpdGhDb250ZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIGZyYWdtZW50U3RhcnQsIGZy
YWdtZW50RW5kLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAgICAg
IGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZv
cm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAppbmRleCBlMzIxN2JiMjAwMzhjYWIxM2JkNjRhZDMzNTQwZWVmNzcxNTZiODg2Li43
NWIxNTgwNzNjZWFkY2FlZTg0YjlkYzUzOGZmMTYzMWYwNTQ2Y2VlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaApAQCAtOTgsNyAr
OTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFi
bGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlcik7CiAKICAgICBzdGF0aWMgU3RyaW5nIGNsaXBib2FyZFJlYWRQbGFp
blRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0gICAgc3RhdGljIHZv
aWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwg
U3RyaW5nKiwgS1VSTCopOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRIVE1MKFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyosIEtVUkwqLCBpbnQqIGZyYWdt
ZW50U3RhcnQsIGludCogZnJhZ21lbnRFbmQpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gY2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIpOwogICAgIHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1ZW5jZU51bWJlcigp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGM2ZmZmYTBhZDk2YTlkMTExNDMwNjUx
ZDk0Mzk2YWY1ZWIxOGVjNWMuLmY0ZTFiMWNkMDA5OGIzOGRmODI3ODc2M2NiMGEyYzRhMTUxZGRi
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDkt
MjkgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4
dC1hd2FyZSBIVE1MIHBhc3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBwbHVtYmluZyBmb3IgQ2hyb21pdW0gcG9ydCB0byBwYXNzIEhUTUwgZnJh
Z21lbnQgc3RhcnQvZW5kIGluZGV4ZXMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2xpcGJvYXJk
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNsaXBib2FyZDo6cmVhZEhUTUwpOgorICAgICAgICAq
IHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkSFRNTCk6CisKIDIwMTEtMDktMjkgIElhaW4gTWVycmljayAgPGh1
c2t5QGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIHVuaXQgdGVzdCBmb3IgQ0NMYXllclNvcnRl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJk
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAy
NDFhOWM2YzM0Y2VjZGJjMjg5MTU0MzBhN2UwNTllNjhkYzE2YmE5Li44Y2ZlNzgwYWY1Njk5MDFi
MmQ3OTFmZjlhMjcwZjY0Zjc3NWEwOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDbGlwYm9hcmQuaApAQCAtNjQsNiArNjQsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFdlYlN0cmluZyByZWFkUGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7
IH0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsgcmV0
dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoCisgICAg
ICAgIEJ1ZmZlciBidWZmZXIsIFdlYlVSTCogcGFnZVVSTCwgaW50KiBmcmFnbWVudFN0YXJ0LAor
ICAgICAgICBpbnQqIGZyYWdtZW50RW5kKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQogICAgIHZp
cnR1YWwgV2ViRGF0YSByZWFkSW1hZ2UoQnVmZmVyKSB7IHJldHVybiBXZWJEYXRhKCk7IH0KIAog
ICAgIC8vIFJldHVybnMgYW4gaWRlbnRpZmllciB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlcm1p
bmUgd2hldGhlciB0aGUgZGF0YQpAQCAtODcsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgLy8gcGFz
dGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weSAob24gWCkuCiAgICAgdmlydHVh
bCBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZWFkQXZhaWxhYmxlVHlwZXMoCiAgICAgICAgIEJ1ZmZl
ciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpIHsgcmV0dXJuIFdlYlZlY3RvcjxXZWJTdHJpbmc+
KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIHdhcyBzdWNj
ZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIuIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlci4K
ICAgICB2aXJ0dWFsIGJvb2wgcmVhZERhdGEoCiAgICAgICAgIEJ1ZmZlciwgY29uc3QgV2ViU3Ry
aW5nJiB0eXBlLCBXZWJTdHJpbmcqIGRhdGEsCiAgICAgICAgIFdlYlN0cmluZyogbWV0YWRhdGEp
IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZv
cm1TdXBwb3J0LmNwcAppbmRleCA1NDg3Mjg1NTBhYmZiNDgwNmU5ZGViMmUxNzk3ZWI5NWI2MmY0
NjBkLi4wNzBhMGIzZGFmYWJlNjZhZDAxMTkwMjNjNzZmMmEwYmRlMTUzNGQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKQEAgLTE2OCwxMSAr
MTY4LDExIEBAIFN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQo
CiAKIHZvaWQgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTCgKICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKLSAgICBTdHJpbmcqIGh0bWxUZXh0
LCBLVVJMKiBzb3VyY2VVUkwpCisgICAgU3RyaW5nKiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJM
LCBpbnQqIGZyYWdtZW50U3RhcnQsIGludCogZnJhZ21lbnRFbmQpCiB7CiAgICAgV2ViVVJMIHVy
bDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCkt
PnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVm
ZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7CiAgICAgKnNvdXJjZVVS
TCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109914</attachid>
            <date>2011-10-05 22:16:17 -0700</date>
            <delta_ts>2011-10-05 23:24:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111005221616.patch</filename>
            <type>text/plain</type>
            <size>15281</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmEyYWMzMjhlZmI4OGZj
MzY3NzYwYjI5MDM5YjYxZDExYzAyNmRmLi5iYzVjYTg4ZGJiYzY0ZTFlOTE2ZDdlNmM3NDg2MGY5
Nzc0M2RiZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTAtMDUgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb250
ZXh0LWF3YXJlIEhUTUwgcGFzdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYyMTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhbiBIVE1MIGZyYWdt
ZW50IHRha2luZyBpbnRvIGFjY291bnQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZQorICAgICAgICBt
YXJrdXAuIFRoaXMgcHJlc2VydmVzIDxzdHlsZT4gZGVjbGFyYXRpb25zIGFuZCBvdGhlciBIVE1M
IGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIGNvbnRleHQtZGVwZW5kZW50LCBsaWtlIFREIGFu
ZCBMSS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFnZUZvclBhcnNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgor
ICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6Z2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9h
cmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZy
YWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoK
KwogMjAxMS0xMC0wNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5wdXQgc3R5bGVzIGFyZSB1bmV4cGVjdGVkbHkgc2hhcmVkIHJlZ2FyZGxlc3Mgb2YgcmVx
dWlyZWQgc3RhdHVzIGRpZmZlcmVuY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXgg
ZThjYTk1ZTRiNzBjYjNkZDVmOGM5MjJjODc4NWVlNDU0YjUwZGUzZS4uYTdjZDI2NTM1YTNkYjg1
NDNjYWU5YjQ4NTQwNjMyMTc2ZjVhYTBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApA
QCAtNDUsMTQgKzQ1LDE4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVtcHR5
Q2xpZW50cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWFya3Vw
QWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJYTUxOU05hbWVzLmgiCkBAIC02Niw2ICs3MCw1NCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKworc3RhdGljIGJvb2wgcGFnZUZvclBhcnNpbmcoKQor
eworICAgIHN0YXRpYyBQYWdlKiBwYWdlID0gMDsKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0
dXJuIHBhZ2U7CisKKyAgICBzdGF0aWMgRnJhbWVMb2FkZXJDbGllbnQqIGR1bW15RnJhbWVMb2Fk
ZXJDbGllbnQgPSBuZXcgRW1wdHlGcmFtZUxvYWRlckNsaWVudDsKKyAgICBQYWdlOjpQYWdlQ2xp
ZW50cyBwYWdlQ2xpZW50czsKKyAgICBzdGF0aWMgQ2hyb21lQ2xpZW50KiBkdW1teUNocm9tZUNs
aWVudCA9IG5ldyBFbXB0eUNocm9tZUNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGll
bnQgPSBkdW1teUNocm9tZUNsaWVudDsKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKyAgICBz
dGF0aWMgQ29udGV4dE1lbnVDbGllbnQqIGR1bW15Q29udGV4dE1lbnVDbGllbnQgPSBuZXcgRW1w
dHlDb250ZXh0TWVudUNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5jb250ZXh0TWVudUNsaWVudCA9
IGR1bW15Q29udGV4dE1lbnVDbGllbnQ7CisjZW5kaWYKKyAgICBzdGF0aWMgRWRpdG9yQ2xpZW50
KiBkdW1teUVkaXRvckNsaWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVudDsKKyAgICBwYWdlQ2xp
ZW50cy5lZGl0b3JDbGllbnQgPSBkdW1teUVkaXRvckNsaWVudDsKKyNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQorICAgIHN0YXRpYyBEcmFnQ2xpZW50KiBkdW1teURyYWdDbGllbnQgPSBuZXcgRW1w
dHlEcmFnQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBkdW1teURyYWdDbGll
bnQ7CisjZW5kaWYKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNs
aWVudCA9IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5pbnNwZWN0
b3JDbGllbnQgPSBkdW1teUluc3BlY3RvckNsaWVudDsKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVO
VEFUSU9OKQorICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25DbGllbnQqIGR1bW15RGV2aWNlTW90aW9u
Q2xpZW50ID0gbmV3IEVtcHR5RGV2aWNlTW90aW9uQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRl
dmljZU1vdGlvbkNsaWVudCA9IGR1bW15RGV2aWNlTW90aW9uQ2xpZW50OworICAgIHN0YXRpYyBE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZHVtbXlEZXZpY2VPcmllbnRhdGlvbkNsaWVudCA9IG5l
dyBFbXB0eURldmljZU9yaWVudGF0aW9uQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRldmljZU9y
aWVudGF0aW9uQ2xpZW50ID0gZHVtbXlEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKKyNlbmRpZgor
CisgICAgcGFnZSA9IG5ldyBQYWdlKHBhZ2VDbGllbnRzKTsKKyAgICBwYWdlLT5zZXR0aW5ncygp
LT5zZXRNZWRpYUVuYWJsZWQoZmFsc2UpOworICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldEphdmFT
Y3JpcHRFbmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRQbHVnaW5zRW5h
YmxlZChmYWxzZSk7CisKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6OmNyZWF0ZShw
YWdlLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICBmcmFtZS0+c2V0VmlldyhGcmFt
ZVZpZXc6OmNyZWF0ZShmcmFtZS5nZXQoKSkpOworICAgIC8vIERpc2FibGUgc2Nyb2xsaW5nLiBU
aGlzIHByZXZlbnRzIGEgY3Jhc2guLi4gdGhvdWdoIHdlIHNob3VsZCByZWFsbHkgZmlndXJlIG91
dCB3aHkgaXQgY3Jhc2hlcy4KKyAgICBmcmFtZS0+dmlldygpLT5zZXRDYW5IYXZlU2Nyb2xsYmFy
cyhmYWxzZSk7CisgICAgZnJhbWUtPmluaXQoKTsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0g
ZnJhbWUtPmxvYWRlcigpOworICAgIGxvYWRlci0+c2V0Rm9yY2VkU2FuZGJveEZsYWdzKFNhbmRi
b3hBbGwpOyAvLyBJcyB0aGlzIG5lZWRlZD8KKyAgICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1
bWVudExvYWRlcigpKTsgLy8gRG9jdW1lbnRMb2FkZXIgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVk
IGJ5IGluaXQoKQorICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCkt
PnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKworICAgIHJldHVybiBwYWdlOworfQorCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVx
dWFsVG9Ob25lKENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7CkBAIC02OTQs
NiArNzQ2LDU4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QKICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBj
b25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzbid0IHJlYWxseSBtZWFudCB0
byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgd2ViIGFwcHMgc28gaXQncyBhc3N1bWVkIHdlJ3JlIHBh
c3NpbmcgaW4gc29tZXRoaW5nIHNhbmUuCisgICAgaWYgKGZyYWdtZW50U3RhcnQgPCAwIHx8IGZy
YWdtZW50RW5kIDwgMCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChk
b2N1bWVudCwgbWFya3VwLCBiYXNlVVJMLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKworICAgIC8v
IFdlIHVzZSBjb21tZW50IHRhZ3MgdG8gaGVscCB1cyBleHRyYWN0IHRoZSBhcHByb3ByaWF0ZSBE
b2N1bWVudEZyYWdtZW50LgorICAgIGNvbnN0IGNoYXIgZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3
ZWJraXQtZnJhZ21lbnQtbWFya2VyIjsKKworICAgIFN0cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3Vw
OworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQoZnJhZ21lbnRTdGFydCkpOwor
ICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoIjwhLS0iKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5k
KGZyYWdtZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKCItLT4iKTsKKyAg
ICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmcoZnJhZ21lbnRTdGFydCwgZnJh
Z21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KSk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZCgiPCEt
LSIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoZnJhZ21lbnRNYXJrZXJUYWcpOworICAgIHRh
Z2dlZE1hcmt1cC5hcHBlbmQoIi0tPiIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3Vw
LnN1YnN0cmluZyhmcmFnbWVudEVuZCkpOworCisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IHBh
Z2VGb3JQYXJzaW5nKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBBU1NFUlQobG9hZGVy
LT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsKKyAgICBjb25zdCBDU3RyaW5nJiB0YWdnZWRNYXJr
dXBEYXRhID0gdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCkudXRmOCgpOworICAgIGxvYWRlci0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7CisgICAgbG9hZGVy
LT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YWRkRGF0YSh0YWdnZWRNYXJrdXBE
YXRhLmRhdGEoKSwgdGFnZ2VkTWFya3VwRGF0YS5sZW5ndGgoKSk7CisgICAgbG9hZGVyLT5hY3Rp
dmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZW5kKCk7CisgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZG8gc29tZSBjbGVhbnVwIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgZG9jLi4uIGZpZ3Vy
ZSBvdXQgd2hhdC4KKworICAgIC8vIE5vdyBzcGVsdW5rIHRocm91Z2ggdGhlIERPTSBhbmQgZXh0
cmFjdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSByYW5nZSB1c2luZyB0aGUgc2V0
aW5lbHMuCisgICAgUmVmUHRyPE5vZGU+IGZyYWdtZW50U3RhcnROb2RlID0gMDsKKyAgICBSZWZQ
dHI8Tm9kZT4gZnJhZ21lbnRFbmROb2RlID0gMDsKKyAgICBmb3IgKE5vZGUqIG4gPSBwYWdlRm9y
UGFyc2luZy0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpDT01NRU5UX05PREUpIHsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDaGFyYWN0ZXJE
YXRhKj4obiktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtlclRhZykgeworICAgICAgICAgICAgICAg
IGlmICghZnJhZ21lbnRTdGFydE5vZGUpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50U3Rh
cnROb2RlID0gbjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZy
YWdtZW50RW5kTm9kZSA9IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnJhZ21l
bnRTdGFydE5vZGUgJiYgZnJhZ21lbnRFbmROb2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVh
dGUocGFnZUZvclBhcnNpbmctPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLAorICAgICAgICAgICAg
UG9zaXRpb24oZnJhZ21lbnRTdGFydE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNo
b3IpLAorICAgICAgICAgICAgUG9zaXRpb24oZnJhZ21lbnRFbmROb2RlLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc0JlZm9yZUFuY2hvcikpOworICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRNYXJrdXAg
PSBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwor
CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgZnJhZ21lbnRN
YXJrdXAsIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworfQorCiBTdHJpbmcgY3JlYXRl
TWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0
b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcykKIHsKICAg
ICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAppbmRleCAxYmZlOTAwNjRjZGI3MmRi
NzcyZGY3NDUwYWE0ZDc5MDI3OWQ1N2YwLi42OTU2YTc2OTVjN2QxNmQ1MjA4ZTc2ZTQ0NDkwZDc3
MmJhOTNiZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21UZXh0KFJhbmdlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOwog
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwg
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsK
KyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZy
YWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBjb25zdCBTdHJpbmcmIGJhc2VVUkws
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7
CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2Rl
cyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2RlKj4mKTsKIAogICAgIGJvb2wgaXNQbGFpblRl
eHRNYXJrdXAoTm9kZSAqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCBhODgyZTYzMDdlNGQ4Njg2
ZWU1Nzk2MjRmNjJhMGU4YTY3OTJkMDQ0Li5lNGI3YmVlZTc4MzU3YjhiYTZmMmFmZDcwMDc4OGEy
NzQyZGU0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTE2MCw3ICsxNjAsOCBAQCBTdHJpbmcgQ2hy
b21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vz
cykKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAg
ICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsK
LSAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOworICAgICAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAg
ICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRt
bFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgICAgICBzdWNj
ZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsK
ICAgICAgICAgfQpAQCAtMjY3LDQgKzI2OCwzIEBAIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYjM3ZWNh
NGMwY2NhOGUwNzIzOTljYTA3ZjVlMDkxYmNiMmM5ZTc3Yy4uYzExNGZmNWI3YTYzYmMxODRhNDQ1
ZjQwNDZhYTgwMjY1MzA4MTQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC05Nyw3
ICs5Nyw4IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyhQYXNz
UmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykKICAgICBpZiAodHlwZSgpID09IG1pbWVU
eXBlVGV4dEhUTUwpIHsKICAgICAgICAgU3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgaWdub3Jl
ZFNvdXJjZVVSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVS
TCk7CisgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRt
bCwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgIGNhbGxi
YWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFz
dGVib2FyZENocm9taXVtLmNwcAppbmRleCA2ZjU2MDc3N2Q4MzM5YWI1ZDJkMjdlMzY3Y2ZiMDZk
NjI4NDdhYzcxLi45NTcyZjA5NzViYTc3YzU5ZDNjNGY0NGNkNDE1MGQ3ZjEzMTNiZjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRD
aHJvbWl1bS5jcHAKQEAgLTE3MywxMCArMTczLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQ
CiAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFz
dGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAgU3RyaW5nIG1h
cmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xp
cGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAmc3JjVVJMKTsKKyAgICAgICAgdW5zaWdu
ZWQgZnJhZ21lbnRTdGFydCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsK
KyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJr
dXAsICZzcmNVUkwsICZmcmFnbWVudFN0YXJ0LCAmZnJhZ21lbnRFbmQpOwogCiAgICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9Ci0gICAgICAgICAgICBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAg
ICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3Jt
U3VwcG9ydC5oCmluZGV4IGUzMjE3YmIyMDAzOGNhYjEzYmQ2NGFkMzM1NDBlZWY3NzE1NmI4ODYu
LjkwZjQwOTVmOTFkNmVlOGY1NDE1NzlkODY4MzdmMmNjMjEzMjM2MTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCkBAIC05OCw3
ICs5OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBs
YWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLSAgICBzdGF0aWMg
dm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
LCBTdHJpbmcqLCBLVVJMKik7CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCosIHVuc2lnbmVk
KiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIpOwogICAgIHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1
ZW5jZU51bWJlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDAwNzkwMmVmYmUz
ZjZiYjYzOGVhMDQ2ZjNlMjZhYmZmMGJlMzMyY2UuLmJiZDdjZGFmZGQ1MDkyMWJjYjZkOGExMWZj
YThmM2JhOWE2NmUzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMTAtMDUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBDb250ZXh0LWF3YXJlIEhUTUwgcGFzdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTEyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBsdW1iaW5nIGZvciBDaHJvbWl1
bSBwb3J0IHRvIHBhc3MgSFRNTCBmcmFnbWVudCBzdGFydC9lbmQgaW5kZXhlcy4KKworICAgICAg
ICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2xpcGJvYXJk
OjpyZWFkSFRNTCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKToKKwogMjAxMS0x
MC0wNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Q2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IHNhdmUgaW5zcGVjdG9yIHN0YXRlIGludG8gc2luZ2xl
IHN0cmluZyBpbnN0ZWFkIG9mIHN0cmluZyBtYXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTljNmMzNGNlY2RiYzI4OTE1NDMwYTdlMDU5
ZTY4ZGMxNmJhOS4uYzAzMmQ2MTJjODI0MDY1MDQ1NTI1NTcwNmJiODNhZDk1NWZjM2U3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKQEAgLTY0LDYg
KzY0LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZFBsYWluVGV4dChC
dWZmZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVh
ZEhUTUwoQnVmZmVyLCBXZWJVUkwqKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1
YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAgICAgICBCdWZmZXIgYnVmZmVyLCBXZWJVUkwqIHBh
Z2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LAorICAgICAgICB1bnNpZ25lZCogZnJhZ21l
bnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBXZWJEYXRhIHJlYWRJ
bWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRhdGEoKTsgfQogCiAgICAgLy8gUmV0dXJucyBhbiBp
ZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRh
CkBAIC04Nyw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICAvLyBwYXN0ZSwgZHJhZyBhbmQgZHJvcCwg
YW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4KICAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJTdHJp
bmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgQnVmZmVyLCBib29sKiBjb250YWluc0Zp
bGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsgfQotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxseSByZWFkIGZyb20g
dGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3
YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLgogICAgIHZpcnR1YWwgYm9vbCBy
ZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBjb25zdCBXZWJTdHJpbmcmIHR5cGUsIFdlYlN0cmlu
ZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5nKiBtZXRhZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCmluZGV4
IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3OTdlYjk1YjYyZjQ2MGQuLmQxYTcyNDMyNWQ4MThl
YjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApAQCAtMTY4LDExICsxNjgsMTEgQEAgU3RyaW5nIFBs
YXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCgKIAogdm9pZCBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCkK
KyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVu
dFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpCiB7CiAgICAgV2ViVVJMIHVybDsKICAgICAq
aHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1M
KAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVy
bCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCAm
dXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7CiAgICAgKnNvdXJjZVVSTCA9IHVybDsK
IH0KIAo=
</data>
<flag name="commit-queue"
          id="107261"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109916</attachid>
            <date>2011-10-05 22:25:04 -0700</date>
            <delta_ts>2011-10-05 23:18:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111005222502.patch</filename>
            <type>text/plain</type>
            <size>15020</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmEyYWMzMjhlZmI4OGZj
MzY3NzYwYjI5MDM5YjYxZDExYzAyNmRmLi5iYzVjYTg4ZGJiYzY0ZTFlOTE2ZDdlNmM3NDg2MGY5
Nzc0M2RiZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTAtMDUgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb250
ZXh0LWF3YXJlIEhUTUwgcGFzdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYyMTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhbiBIVE1MIGZyYWdt
ZW50IHRha2luZyBpbnRvIGFjY291bnQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZQorICAgICAgICBt
YXJrdXAuIFRoaXMgcHJlc2VydmVzIDxzdHlsZT4gZGVjbGFyYXRpb25zIGFuZCBvdGhlciBIVE1M
IGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIGNvbnRleHQtZGVwZW5kZW50LCBsaWtlIFREIGFu
ZCBMSS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFnZUZvclBhcnNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgor
ICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6Z2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9h
cmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZy
YWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoK
KwogMjAxMS0xMC0wNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5wdXQgc3R5bGVzIGFyZSB1bmV4cGVjdGVkbHkgc2hhcmVkIHJlZ2FyZGxlc3Mgb2YgcmVx
dWlyZWQgc3RhdHVzIGRpZmZlcmVuY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXgg
ZThjYTk1ZTRiNzBjYjNkZDVmOGM5MjJjODc4NWVlNDU0YjUwZGUzZS4uNTg2ZTdjNDk5OTU3ZDgw
ZDIwM2UxN2I1N2JjZmM2Nzk0YjJjYjIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApA
QCAtNDUsMTQgKzQ1LDE4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVtcHR5
Q2xpZW50cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWFya3Vw
QWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJYTUxOU05hbWVzLmgiCkBAIC02Niw2ICs3MCw1NCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKworc3RhdGljIGJvb2wgcGFnZUZvclBhcnNpbmcoKQor
eworICAgIHN0YXRpYyBQYWdlKiBwYWdlID0gMDsKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0
dXJuIHBhZ2U7CisKKyAgICBzdGF0aWMgRnJhbWVMb2FkZXJDbGllbnQqIGR1bW15RnJhbWVMb2Fk
ZXJDbGllbnQgPSBuZXcgRW1wdHlGcmFtZUxvYWRlckNsaWVudDsKKyAgICBQYWdlOjpQYWdlQ2xp
ZW50cyBwYWdlQ2xpZW50czsKKyAgICBzdGF0aWMgQ2hyb21lQ2xpZW50KiBkdW1teUNocm9tZUNs
aWVudCA9IG5ldyBFbXB0eUNocm9tZUNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGll
bnQgPSBkdW1teUNocm9tZUNsaWVudDsKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKyAgICBz
dGF0aWMgQ29udGV4dE1lbnVDbGllbnQqIGR1bW15Q29udGV4dE1lbnVDbGllbnQgPSBuZXcgRW1w
dHlDb250ZXh0TWVudUNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5jb250ZXh0TWVudUNsaWVudCA9
IGR1bW15Q29udGV4dE1lbnVDbGllbnQ7CisjZW5kaWYKKyAgICBzdGF0aWMgRWRpdG9yQ2xpZW50
KiBkdW1teUVkaXRvckNsaWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVudDsKKyAgICBwYWdlQ2xp
ZW50cy5lZGl0b3JDbGllbnQgPSBkdW1teUVkaXRvckNsaWVudDsKKyNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQorICAgIHN0YXRpYyBEcmFnQ2xpZW50KiBkdW1teURyYWdDbGllbnQgPSBuZXcgRW1w
dHlEcmFnQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBkdW1teURyYWdDbGll
bnQ7CisjZW5kaWYKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNs
aWVudCA9IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5pbnNwZWN0
b3JDbGllbnQgPSBkdW1teUluc3BlY3RvckNsaWVudDsKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVO
VEFUSU9OKQorICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25DbGllbnQqIGR1bW15RGV2aWNlTW90aW9u
Q2xpZW50ID0gbmV3IEVtcHR5RGV2aWNlTW90aW9uQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRl
dmljZU1vdGlvbkNsaWVudCA9IGR1bW15RGV2aWNlTW90aW9uQ2xpZW50OworICAgIHN0YXRpYyBE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZHVtbXlEZXZpY2VPcmllbnRhdGlvbkNsaWVudCA9IG5l
dyBFbXB0eURldmljZU9yaWVudGF0aW9uQ2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRldmljZU9y
aWVudGF0aW9uQ2xpZW50ID0gZHVtbXlEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKKyNlbmRpZgor
CisgICAgcGFnZSA9IG5ldyBQYWdlKHBhZ2VDbGllbnRzKTsKKyAgICBwYWdlLT5zZXR0aW5ncygp
LT5zZXRNZWRpYUVuYWJsZWQoZmFsc2UpOworICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldEphdmFT
Y3JpcHRFbmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRQbHVnaW5zRW5h
YmxlZChmYWxzZSk7CisKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6OmNyZWF0ZShw
YWdlLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICBmcmFtZS0+c2V0VmlldyhGcmFt
ZVZpZXc6OmNyZWF0ZShmcmFtZS5nZXQoKSkpOworICAgIC8vIERpc2FibGUgc2Nyb2xsaW5nLiBU
aGlzIHByZXZlbnRzIGEgY3Jhc2guLi4gdGhvdWdoIHdlIHNob3VsZCByZWFsbHkgZmlndXJlIG91
dCB3aHkgaXQgY3Jhc2hlcy4KKyAgICBmcmFtZS0+dmlldygpLT5zZXRDYW5IYXZlU2Nyb2xsYmFy
cyhmYWxzZSk7CisgICAgZnJhbWUtPmluaXQoKTsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0g
ZnJhbWUtPmxvYWRlcigpOworICAgIGxvYWRlci0+c2V0Rm9yY2VkU2FuZGJveEZsYWdzKFNhbmRi
b3hBbGwpOyAvLyBJcyB0aGlzIG5lZWRlZD8KKyAgICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1
bWVudExvYWRlcigpKTsgLy8gRG9jdW1lbnRMb2FkZXIgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVk
IGJ5IGluaXQoKQorICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCkt
PnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKworICAgIHJldHVybiBwYWdlOworfQorCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVx
dWFsVG9Ob25lKENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7CkBAIC02OTQs
NiArNzQ2LDU0IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QKICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBj
b25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQoreworICAgIC8vIFdlIHVzZSBjb21tZW50IHRhZ3MgdG8gaGVscCB1cyBl
eHRyYWN0IHRoZSBhcHByb3ByaWF0ZSBEb2N1bWVudEZyYWdtZW50LgorICAgIGNvbnN0IGNoYXIg
ZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3ZWJraXQtZnJhZ21lbnQtbWFya2VyIjsKKworICAgIFN0
cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3VwOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3Vw
LmxlZnQoZnJhZ21lbnRTdGFydCkpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoIjwhLS0iKTsK
KyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKGZyYWdtZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRN
YXJrdXAuYXBwZW5kKCItLT4iKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJz
dHJpbmcoZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KSk7CisgICAg
dGFnZ2VkTWFya3VwLmFwcGVuZCgiPCEtLSIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoZnJh
Z21lbnRNYXJrZXJUYWcpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoIi0tPiIpOworICAgIHRh
Z2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudEVuZCkpOworCisgICAg
RnJhbWVMb2FkZXIqIGxvYWRlciA9IHBhZ2VGb3JQYXJzaW5nKCktPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKTsKKyAgICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsKKyAgICBj
b25zdCBDU3RyaW5nJiB0YWdnZWRNYXJrdXBEYXRhID0gdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCku
dXRmOCgpOworICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJl
Z2luKEtVUkwoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIo
KS0+YWRkRGF0YSh0YWdnZWRNYXJrdXBEYXRhLmRhdGEoKSwgdGFnZ2VkTWFya3VwRGF0YS5sZW5n
dGgoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZW5k
KCk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gc29tZSBjbGVhbnVwIGJlZm9yZSBsb2Fk
aW5nIHRoZSBuZXcgZG9jLi4uIGZpZ3VyZSBvdXQgd2hhdC4KKworICAgIC8vIE5vdyBzcGVsdW5r
IHRocm91Z2ggdGhlIERPTSBhbmQgZXh0cmFjdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9m
IHRoZSByYW5nZSB1c2luZyB0aGUgc2V0aW5lbHMuCisgICAgUmVmUHRyPE5vZGU+IGZyYWdtZW50
U3RhcnROb2RlID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gZnJhZ21lbnRFbmROb2RlID0gMDsKKyAg
ICBmb3IgKE5vZGUqIG4gPSBwYWdlRm9yUGFyc2luZy0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBp
ZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKKyAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obiktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtl
clRhZykgeworICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnRTdGFydE5vZGUpCisgICAgICAg
ICAgICAgICAgICAgIGZyYWdtZW50U3RhcnROb2RlID0gbjsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kTm9kZSA9IG47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZnJhZ21lbnRTdGFydE5vZGUgJiYgZnJhZ21lbnRFbmROb2RlKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFnZUZvclBhcnNpbmctPm1haW5GcmFtZSgpLT5k
b2N1bWVudCgpLAorICAgICAgICAgICAgUG9zaXRpb24oZnJhZ21lbnRTdGFydE5vZGUsIFBvc2l0
aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpLAorICAgICAgICAgICAgUG9zaXRpb24oZnJhZ21l
bnRFbmROb2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpOworICAgIGNvbnN0
IFN0cmluZyYgZnJhZ21lbnRNYXJrdXAgPSBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIEFu
bm90YXRlRm9ySW50ZXJjaGFuZ2UpOworCisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChkb2N1bWVudCwgZnJhZ21lbnRNYXJrdXAsIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Np
b24pOworfQorCiBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJl
bk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBz
aG91bGRSZXNvbHZlVVJMcykKIHsKICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
aAppbmRleCAxYmZlOTAwNjRjZGI3MmRiNzcyZGY3NDUwYWE0ZDc5MDI3OWQ1N2YwLi42OTU2YTc2
OTVjN2QxNmQ1MjA4ZTc2ZTQ0NDkwZDc3MmJhOTNiZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlKiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIHRleHQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAs
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZy
YWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2RlKj4m
KTsKIAogICAgIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSAqbm9kZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNw
cAppbmRleCBhODgyZTYzMDdlNGQ4Njg2ZWU1Nzk2MjRmNjJhMGU4YTY3OTJkMDQ0Li5lNGI3YmVl
ZTc4MzU3YjhiYTZmMmFmZDcwMDc4OGEyNzQyZGU0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTE2
MCw3ICsxNjAsOCBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJp
dmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CiAgICAg
ICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xp
cGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOworICAgICAgICAg
ICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJv
YXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdu
b3JlZCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKICAgICAg
ICAgICAgIHJldHVybiBodG1sVGV4dDsKICAgICAgICAgfQpAQCAtMjY3LDQgKzI2OCwzIEBAIENo
cm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9i
amVjdCYgb3RoZXIpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bS5jcHAKaW5kZXggYjM3ZWNhNGMwY2NhOGUwNzIzOTljYTA3ZjVlMDkxYmNiMmM5ZTc3
Yy4uYzExNGZmNWI3YTYzYmMxODRhNDQ1ZjQwNDZhYTgwMjY1MzA4MTQ5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0uY3BwCkBAIC05Nyw3ICs5Nyw4IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykK
ICAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKICAgICAgICAgU3RyaW5nIGh0
bWw7CiAgICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIs
ICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCk7CisgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7Cisg
ICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZh
dGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAm
aWdub3JlZCk7CiAgICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwg
aHRtbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAppbmRleCA2ZjU2MDc3
N2Q4MzM5YWI1ZDJkMjdlMzY3Y2ZiMDZkNjI4NDdhYzcxLi45NTcyZjA5NzViYTc3YzU5ZDNjNGY0
NGNkNDE1MGQ3ZjEzMTNiZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTE3MywxMCArMTczLDEyIEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVu
dChGcmFtZSogZnJhbWUsIFBhc3NSZWZQCiAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJv
YXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZl
cikpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAg
ICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAm
c3JjVVJMKTsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIGZyYWdtZW50RW5kID0gMDsKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwsICZmcmFnbWVudFN0YXJ0LCAmZnJh
Z21lbnRFbmQpOwogCiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
Ci0gICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCks
IG1hcmt1cCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAg
ICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoZnJhbWUtPmRvY3VtZW50KCks
IG1hcmt1cCwgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQsIHNyY1VSTCwgRnJhZ21lbnRTY3Jp
cHRpbmdOb3RBbGxvd2VkKTsKICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCmluZGV4IGUzMjE3YmIyMDAzOGNhYjEz
YmQ2NGFkMzM1NDBlZWY3NzE1NmI4ODYuLjkwZjQwOTVmOTFkNmVlOGY1NDE1NzlkODY4MzdmMmNj
MjEzMjM2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtU3VwcG9ydC5oCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
Rm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKIAogICAgIHN0YXRp
YyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7CisgICAgc3RhdGljIHZv
aWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwg
U3RyaW5nKiwgS1VSTCosIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21l
bnRFbmQpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2xpcGJvYXJkUmVh
ZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwogICAgIHN0YXRpYyB1
aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1ZW5jZU51bWJlcigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDAwNzkwMmVmYmUzZjZiYjYzOGVhMDQ2ZjNlMjZhYmZmMGJlMzMyY2UuLmJi
ZDdjZGFmZGQ1MDkyMWJjYjZkOGExMWZjYThmM2JhOWE2NmUzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMDUgIERhbmllbCBDaGVuZyAgPGRj
aGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb250ZXh0LWF3YXJlIEhU
TUwgcGFzdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYyMTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHBsdW1iaW5nIGZvciBDaHJvbWl1bSBwb3J0IHRvIHBhc3MgSFRNTCBmcmFnbWVudCBzdGFy
dC9lbmQgaW5kZXhlcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2xpcGJvYXJkOjpyZWFkSFRNTCk6CisgICAgICAgICogc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBi
b2FyZFJlYWRIVE1MKToKKwogMjAxMS0xMC0wNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IHNhdmUgaW5z
cGVjdG9yIHN0YXRlIGludG8gc2luZ2xlIHN0cmluZyBpbnN0ZWFkIG9mIHN0cmluZyBtYXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTlj
NmMzNGNlY2RiYzI4OTE1NDMwYTdlMDU5ZTY4ZGMxNmJhOS4uYzAzMmQ2MTJjODI0MDY1MDQ1NTI1
NTcwNmJiODNhZDk1NWZjM2U3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ2xpcGJvYXJkLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ2xpcGJvYXJkLmgKQEAgLTY0LDYgKzY0LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBX
ZWJTdHJpbmcgcmVhZFBsYWluVGV4dChCdWZmZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAg
ICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoQnVmZmVyLCBXZWJVUkwqKSB7IHJldHVybiBX
ZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAgICAgICBC
dWZmZXIgYnVmZmVyLCBXZWJVUkwqIHBhZ2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LAor
ICAgICAgICB1bnNpZ25lZCogZnJhZ21lbnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAg
ICAgdmlydHVhbCBXZWJEYXRhIHJlYWRJbWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRhdGEoKTsg
fQogCiAgICAgLy8gUmV0dXJucyBhbiBpZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRl
dGVybWluZSB3aGV0aGVyIHRoZSBkYXRhCkBAIC04Nyw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICAv
LyBwYXN0ZSwgZHJhZyBhbmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4KICAgICB2
aXJ0dWFsIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAg
QnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0
cmluZz4oKTsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2Fz
IHN1Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVm
ZmVyLgogICAgIHZpcnR1YWwgYm9vbCByZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBjb25zdCBX
ZWJTdHJpbmcmIHR5cGUsIFdlYlN0cmluZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5nKiBtZXRh
ZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwCmluZGV4IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3OTdlYjk1
YjYyZjQ2MGQuLmQxYTcyNDMyNWQ4MThlYjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApAQCAtMTY4
LDExICsxNjgsMTEgQEAgU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWlu
VGV4dCgKIAogdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmluZyogaHRt
bFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKKyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3Vy
Y2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpCiB7
CiAgICAgV2ViVVJMIHVybDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9h
cmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBi
b2FyZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7
CiAgICAgKnNvdXJjZVVSTCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109919</attachid>
            <date>2011-10-05 23:18:13 -0700</date>
            <delta_ts>2011-10-05 23:47:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111005231812.patch</filename>
            <type>text/plain</type>
            <size>15359</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmEyYWMzMjhlZmI4OGZj
MzY3NzYwYjI5MDM5YjYxZDExYzAyNmRmLi4zMmUwZjFlYzEzMGU1NzhlYjkxMzk0MzVhZjU0ODZl
YTRmNWNjOGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTAtMDUgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gY3JlYXRlIGFuIEhUTUwgZnJh
Z21lbnQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29udGV4dCBhcm91bmQgdGhlCisgICAgICAg
IG1hcmt1cC4gVGhpcyBwcmVzZXJ2ZXMgPHN0eWxlPiBkZWNsYXJhdGlvbnMgYW5kIG90aGVyIEhU
TUwgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAgICAgY29udGV4dC1kZXBlbmRlbnQsIGxpa2UgVEQg
YW5kIExJLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWdlRm9yUGFyc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dCk6
CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVi
b2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50
RnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5o
OgorCiAyMDExLTEwLTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbnB1dCBzdHlsZXMgYXJlIHVuZXhwZWN0ZWRseSBzaGFyZWQgcmVnYXJkbGVzcyBvZiBy
ZXF1aXJlZCBzdGF0dXMgZGlmZmVyZW5jZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCBlOGNhOTVlNGI3MGNiM2RkNWY4YzkyMmM4Nzg1ZWU0NTRiNTBkZTNlLi45YjMzYmY0MDU2OTUw
MTYzZGMyZTFlM2Y4ZGZiZjZmY2M5ZTAzMzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC00NSwxNCArNDUsMTggQEAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRW1w
dHlDbGllbnRzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNYXJr
dXBBY2N1bXVsYXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1
ZGUgIlhNTE5TTmFtZXMuaCIKQEAgLTY2LDYgKzcwLDU0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorCitzdGF0aWMgUGFnZSogcGFnZUZvclBhc3RlKCkK
K3sKKyAgICBzdGF0aWMgUGFnZSogcGFnZSA9IDA7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJl
dHVybiBwYWdlOworCisgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xpZW50KiBkdW1teUZyYW1lTG9h
ZGVyQ2xpZW50ID0gbmV3IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ7CisgICAgUGFnZTo6UGFnZUNs
aWVudHMgcGFnZUNsaWVudHM7CisgICAgc3RhdGljIENocm9tZUNsaWVudCogZHVtbXlDaHJvbWVD
bGllbnQgPSBuZXcgRW1wdHlDaHJvbWVDbGllbnQ7CisgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xp
ZW50ID0gZHVtbXlDaHJvbWVDbGllbnQ7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAg
c3RhdGljIENvbnRleHRNZW51Q2xpZW50KiBkdW1teUNvbnRleHRNZW51Q2xpZW50ID0gbmV3IEVt
cHR5Q29udGV4dE1lbnVDbGllbnQ7CisgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQg
PSBkdW1teUNvbnRleHRNZW51Q2xpZW50OworI2VuZGlmCisgICAgc3RhdGljIEVkaXRvckNsaWVu
dCogZHVtbXlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0b3JDbGllbnQ7CisgICAgcGFnZUNs
aWVudHMuZWRpdG9yQ2xpZW50ID0gZHVtbXlFZGl0b3JDbGllbnQ7CisjaWYgRU5BQkxFKERSQUdf
U1VQUE9SVCkKKyAgICBzdGF0aWMgRHJhZ0NsaWVudCogZHVtbXlEcmFnQ2xpZW50ID0gbmV3IEVt
cHR5RHJhZ0NsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gZHVtbXlEcmFnQ2xp
ZW50OworI2VuZGlmCisgICAgc3RhdGljIEluc3BlY3RvckNsaWVudCogZHVtbXlJbnNwZWN0b3JD
bGllbnQgPSBuZXcgRW1wdHlJbnNwZWN0b3JDbGllbnQ7CisgICAgcGFnZUNsaWVudHMuaW5zcGVj
dG9yQ2xpZW50ID0gZHVtbXlJbnNwZWN0b3JDbGllbnQ7CisjaWYgRU5BQkxFKERFVklDRV9PUklF
TlRBVElPTikKKyAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ2xpZW50KiBkdW1teURldmljZU1vdGlv
bkNsaWVudCA9IG5ldyBFbXB0eURldmljZU1vdGlvbkNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5k
ZXZpY2VNb3Rpb25DbGllbnQgPSBkdW1teURldmljZU1vdGlvbkNsaWVudDsKKyAgICBzdGF0aWMg
RGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGR1bW15RGV2aWNlT3JpZW50YXRpb25DbGllbnQgPSBu
ZXcgRW1wdHlEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5kZXZpY2VP
cmllbnRhdGlvbkNsaWVudCA9IGR1bW15RGV2aWNlT3JpZW50YXRpb25DbGllbnQ7CisjZW5kaWYK
KworICAgIHBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CisgICAgcGFnZS0+c2V0dGluZ3Mo
KS0+c2V0TWVkaWFFbmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLT5zZXR0aW5ncygpLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZChmYWxzZSk7CisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0UGx1Z2luc0Vu
YWJsZWQoZmFsc2UpOworCisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUo
cGFnZSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisgICAgZnJhbWUtPnNldFZpZXcoRnJh
bWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsKKyAgICAvLyBEaXNhYmxlIHNjcm9sbGluZy4g
VGhpcyBwcmV2ZW50cyBhIGNyYXNoLi4uIHRob3VnaCB3ZSBzaG91bGQgcmVhbGx5IGZpZ3VyZSBv
dXQgd2h5IGl0IGNyYXNoZXMuCisgICAgZnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJh
cnMoZmFsc2UpOworICAgIGZyYW1lLT5pbml0KCk7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBsb2FkZXItPnNldEZvcmNlZFNhbmRib3hGbGFncyhTYW5k
Ym94QWxsKTsgLy8gSXMgdGhpcyBuZWVkZWQ/CisgICAgQVNTRVJUKGxvYWRlci0+YWN0aXZlRG9j
dW1lbnRMb2FkZXIoKSk7IC8vIERvY3VtZW50TG9hZGVyIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRl
ZCBieSBpbml0KCkKKyAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigp
LT5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisKKyAgICByZXR1cm4gcGFnZTsKK30KKwogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JF
cXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5SUQpOwpAQCAtNjk0
LDYgKzc0Niw1MyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0CiAgICAgcmV0dXJuIGZyYWdtZW50
LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwg
Y29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0
aW5nUGVybWlzc2lvbikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgdGhlIG1hcmt1cCBhbHJlYWR5IGNvbnRhaW5zIHRoZXNlIG1hcmtlcnMuCisgICAgY29u
c3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOwor
CisgICAgU3RyaW5nQnVpbGRlciB0YWdnZWRNYXJrdXA7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVu
ZChtYXJrdXAubGVmdChmcmFnbWVudFN0YXJ0KSk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZCgi
PCEtLSIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoZnJhZ21lbnRNYXJrZXJUYWcpOworICAg
IHRhZ2dlZE1hcmt1cC5hcHBlbmQoIi0tPiIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFy
a3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3RhcnQp
KTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKCI8IS0tIik7CisgICAgdGFnZ2VkTWFya3VwLmFw
cGVuZChmcmFnbWVudE1hcmtlclRhZyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZCgiLS0+Iik7
CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50RW5kKSk7
CisKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gcGFnZUZvclBhc3RlKCktPm1haW5GcmFtZSgp
LT5sb2FkZXIoKTsKKyAgICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsK
KyAgICBjb25zdCBDU3RyaW5nJiB0YWdnZWRNYXJrdXBEYXRhID0gdGFnZ2VkTWFya3VwLnRvU3Ry
aW5nKCkudXRmOCgpOworICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVy
KCktPmJlZ2luKEtVUkwoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53
cml0ZXIoKS0+YWRkRGF0YSh0YWdnZWRNYXJrdXBEYXRhLmRhdGEoKSwgdGFnZ2VkTWFya3VwRGF0
YS5sZW5ndGgoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIo
KS0+ZW5kKCk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gc29tZSBjbGVhbnVwIGJlZm9y
ZSBsb2FkaW5nIHRoZSBuZXcgZG9jLi4uIGZpZ3VyZSBvdXQgd2hhdC4KKworICAgIC8vIE5vdyBz
cGVsdW5rIHRocm91Z2ggdGhlIERPTSBhbmQgZXh0cmFjdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUg
ZW5kIG9mIHRoZSByYW5nZSB1c2luZyB0aGUgc2V0aW5lbHMuCisgICAgTm9kZSogZnJhZ21lbnRT
dGFydE5vZGUgPSAwOworICAgIE5vZGUqIGZyYWdtZW50RW5kTm9kZSA9IDA7CisgICAgZm9yIChO
b2RlKiBub2RlID0gcGFnZUZvclBhc3RlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKSB7CisgICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG5vZGUpLT5kYXRhKCkgPT0gZnJh
Z21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYWdtZW50U3RhcnROb2Rl
KQorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0Tm9kZSA9IG5vZGU7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kTm9kZSA9IG5v
ZGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhZ2VGb3JQYXN0ZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwKKyAg
ICAgICAgUG9zaXRpb24oZnJhZ21lbnRTdGFydE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IpLAorICAgICAgICBQb3NpdGlvbihmcmFnbWVudEVuZE5vZGUsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKSk7CisKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGRvY3VtZW50LCBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UpLCBiYXNlVVJMLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKK30KKwogU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25s
eSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMp
CiB7CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKaW5kZXggMWJmZTkwMDY0
Y2RiNzJkYjc3MmRmNzQ1MGFhNGQ3OTAyNzlkNTdmMC4uNjk1NmE3Njk1YzdkMTZkNTIwOGU3NmU0
NDQ5MGQ3NzJiYTkzYmYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCkBAIC00NSw2ICs0NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0
ZXh0KTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJh
c2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNp
Z25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBi
YXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0Fs
bG93ZWQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTm9kZXMoRG9jdW1lbnQqLCBjb25zdCBWZWN0b3I8Tm9kZSo+Jik7CiAKICAgICBib29sIGlz
UGxhaW5UZXh0TWFya3VwKE5vZGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggYTg4MmU2MzA3
ZTRkODY4NmVlNTc5NjI0ZjYyYTBlOGE2NzkyZDA0NC4uZTRiN2JlZWU3ODM1N2I4YmE2ZjJhZmQ3
MDA3ODhhMjc0MmRlNGQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xNjAsNyArMTYwLDggQEAgU3Ry
aW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wm
IHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVm
ZmVyOwogICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAgS1VSTCBzb3Vy
Y2VVUkw7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1
ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9y
ZWQ7CisgICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZl
ciwgJmh0bWxUZXh0LCAmc291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwogICAgICAgICAg
ICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gaHRt
bFRleHQ7CiAgICAgICAgIH0KQEAgLTI2Nyw0ICsyNjgsMyBAQCBDaHJvbWl1bURhdGFPYmplY3Q6
OkNocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVyKQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCmluZGV4
IGIzN2VjYTRjMGNjYThlMDcyMzk5Y2EwN2Y1ZTA5MWJjYjJjOWU3N2MuLmMxMTRmZjViN2E2M2Jj
MTg0YTQ0NWY0MDQ2YWE4MDI2NTMwODE0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcApA
QCAtOTcsNyArOTcsOCBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJp
bmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2spCiAgICAgaWYgKHR5cGUoKSA9
PSBtaW1lVHlwZVRleHRIVE1MKSB7CiAgICAgICAgIFN0cmluZyBodG1sOwogICAgICAgICBLVVJM
IGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVh
ZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwgJmlnbm9yZWRT
b3VyY2VVUkwpOworICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZl
ciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwogICAgICAg
ICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIGh0bWwpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGFzdGVib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggNmY1NjA3NzdkODMzOWFiNWQyZDI3ZTM2
N2NmYjA2ZDYyODQ3YWM3MS4uOTU3MmYwOTc1YmE3N2M1OWQzYzRmNDRjZDQxNTBkN2YxMzEzYmYx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2Fy
ZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwCkBAIC0xNzMsMTAgKzE3MywxMiBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUAogICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZElzRm9ybWF0QXZhaWxh
YmxlKFBhc3RlYm9hcmRQcml2YXRlOjpIVE1MRm9ybWF0LCBidWZmZXIpKSB7CiAgICAgICAgIFN0
cmluZyBtYXJrdXA7CiAgICAgICAgIEtVUkwgc3JjVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBv
cnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7CisgICAgICAg
IHVuc2lnbmVkIGZyYWdtZW50U3RhcnQgPSAwOworICAgICAgICB1bnNpZ25lZCBmcmFnbWVudEVu
ZCA9IDA7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVy
LCAmbWFya3VwLCAmc3JjVVJMLCAmZnJhZ21lbnRTdGFydCwgJmZyYWdtZW50RW5kKTsKIAogICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQotICAgICAgICAgICAgY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIHNyY1VSTCwg
RnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIGZyYWdtZW50
U3RhcnQsIGZyYWdtZW50RW5kLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7
CiAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Q
bGF0Zm9ybVN1cHBvcnQuaAppbmRleCBlMzIxN2JiMjAwMzhjYWIxM2JkNjRhZDMzNTQwZWVmNzcx
NTZiODg2Li45MGY0MDk1ZjkxZDZlZThmNTQxNTc5ZDg2ODM3ZjJjYzIxMzIzNjE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaApA
QCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkSXNGb3Jt
YXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAKICAgICBzdGF0aWMgU3RyaW5nIGNsaXBib2Fy
ZFJlYWRQbGFpblRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0gICAg
c3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCopOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRI
VE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyosIEtVUkwqLCB1
bnNpZ25lZCogZnJhZ21lbnRTdGFydCwgdW5zaWduZWQqIGZyYWdtZW50RW5kKTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNsaXBib2FyZFJlYWRJbWFnZShQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKICAgICBzdGF0aWMgdWludDY0X3QgY2xpcGJvYXJk
R2V0U2VxdWVuY2VOdW1iZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMDc5
MDJlZmJlM2Y2YmI2MzhlYTA0NmYzZTI2YWJmZjBiZTMzMmNlLi5lZGY1YWFkNjViMjdjNGI0ZTdh
OTZlNWMxZmUyMDc1YjliNTI0N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDExLTEwLTA1ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIENvbnRleHQtYXdhcmUgSFRNTCBwYXN0ZSBmb3IgQ2hyb21pdW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBsdW1iaW5nIGZv
ciBDaHJvbWl1bSBwb3J0IHRvIHBhc3MgSFRNTCBmcmFnbWVudCBzdGFydC9lbmQgaW5kZXhlcy4K
KworICAgICAgICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q2xpcGJvYXJkOjpyZWFkSFRNTCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKToK
KwogMjAxMS0xMC0wNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IHNhdmUgaW5zcGVjdG9yIHN0YXRlIGlu
dG8gc2luZ2xlIHN0cmluZyBpbnN0ZWFkIG9mIHN0cmluZyBtYXAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTljNmMzNGNlY2RiYzI4OTE1
NDMwYTdlMDU5ZTY4ZGMxNmJhOS4uMTlmNjNjMWI4MmIwYzk5NWJkZDRhOGYzMWNhZTAyZDE1NzRi
NGYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJv
YXJkLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgK
QEAgLTYzLDcgKzYzLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtYXRBdmFp
bGFibGUoRm9ybWF0LCBCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIFdl
YlN0cmluZyByZWFkUGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAg
ICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsgcmV0dXJuIFdl
YlN0cmluZygpOyB9CisgICAgLy8gZnJhZ21lbnRTdGFydCBhbmQgZnJhZ21lbnRFbmQgYXJlIGlu
ZGV4ZXMgaW50byB0aGUgcmV0dXJuZWQgbWFya3VwIHRoYXQKKyAgICAvLyBpbmRpY2F0ZSB0aGUg
c3RhcnQgYW5kIGVuZCBvZiB0aGUgZnJhZ21lbnQgaWYgdGhlIHJldHVybmVkIG1hcmt1cAorICAg
IC8vIGNvbnRhaW5zIGFkZGl0aW9uYWwgY29udGV4dC4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25h
bCBjb250ZXh0LAorICAgIC8vIGZyYWdtZW50U3RhcnQgd2lsbCBiZSB6ZXJvIGFuZCBmcmFnbWVu
dEVuZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBsZW5ndGgKKyAgICAvLyBvZiB0aGUgcmV0dXJu
ZWQgbWFya3VwLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAgICAgICBCdWZm
ZXIgYnVmZmVyLCBXZWJVUkwqIHBhZ2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LAorICAg
ICAgICB1bnNpZ25lZCogZnJhZ21lbnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAgICAg
dmlydHVhbCBXZWJEYXRhIHJlYWRJbWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRhdGEoKTsgfQog
CiAgICAgLy8gUmV0dXJucyBhbiBpZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBkYXRhCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBw
YXN0ZSwgZHJhZyBhbmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4KICAgICB2aXJ0
dWFsIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgQnVm
ZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmlu
Zz4oKTsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1
Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVy
LgogICAgIHZpcnR1YWwgYm9vbCByZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBjb25zdCBXZWJT
dHJpbmcmIHR5cGUsIFdlYlN0cmluZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5nKiBtZXRhZGF0
YSkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwCmluZGV4IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3OTdlYjk1YjYy
ZjQ2MGQuLmQxYTcyNDMyNWQ4MThlYjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApAQCAtMTY4LDEx
ICsxNjgsMTEgQEAgU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4
dCgKIAogdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmluZyogaHRtbFRl
eHQsIEtVUkwqIHNvdXJjZVVSTCkKKyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VV
UkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpCiB7CiAg
ICAgV2ViVVJMIHVybDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6
OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2Fy
ZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7CiAg
ICAgKnNvdXJjZVVSTCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109926</attachid>
            <date>2011-10-05 23:47:07 -0700</date>
            <delta_ts>2011-10-07 14:22:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111005234705.patch</filename>
            <type>text/plain</type>
            <size>15489</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZmEyYWMzMjhlZmI4OGZj
MzY3NzYwYjI5MDM5YjYxZDExYzAyNmRmLi4zMmUwZjFlYzEzMGU1NzhlYjkxMzk0MzVhZjU0ODZl
YTRmNWNjOGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTAtMDUgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gY3JlYXRlIGFuIEhUTUwgZnJh
Z21lbnQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29udGV4dCBhcm91bmQgdGhlCisgICAgICAg
IG1hcmt1cC4gVGhpcyBwcmVzZXJ2ZXMgPHN0eWxlPiBkZWNsYXJhdGlvbnMgYW5kIG90aGVyIEhU
TUwgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAgICAgY29udGV4dC1kZXBlbmRlbnQsIGxpa2UgVEQg
YW5kIExJLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWdlRm9yUGFyc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dCk6
CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVi
b2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50
RnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5o
OgorCiAyMDExLTEwLTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbnB1dCBzdHlsZXMgYXJlIHVuZXhwZWN0ZWRseSBzaGFyZWQgcmVnYXJkbGVzcyBvZiBy
ZXF1aXJlZCBzdGF0dXMgZGlmZmVyZW5jZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCBlOGNhOTVlNGI3MGNiM2RkNWY4YzkyMmM4Nzg1ZWU0NTRiNTBkZTNlLi42Mjg4OGJhN2NiZmEy
N2MwNDgzZTBkZTRmNTBmYjQyZTVjYWU0NmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC00NSwxNCArNDUsMTggQEAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRW1w
dHlDbGllbnRzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNYXJr
dXBBY2N1bXVsYXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1
ZGUgIlhNTE5TTmFtZXMuaCIKQEAgLTY2LDYgKzcwLDU0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorCitzdGF0aWMgUGFnZSogcGFnZUZvclBhc3RlKCkK
K3sKKyAgICBzdGF0aWMgUGFnZSogcGFnZSA9IDA7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJl
dHVybiBwYWdlOworCisgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xpZW50KiBkdW1teUZyYW1lTG9h
ZGVyQ2xpZW50ID0gYWRvcHRQdHIobmV3IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQpLmxlYWtQdHIo
KTsKKyAgICBQYWdlOjpQYWdlQ2xpZW50cyBwYWdlQ2xpZW50czsKKyAgICBzdGF0aWMgQ2hyb21l
Q2xpZW50KiBkdW1teUNocm9tZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBFbXB0eUNocm9tZUNsaWVu
dCkubGVha1B0cigpOworICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IGR1bW15Q2hyb21l
Q2xpZW50OworI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQorICAgIHN0YXRpYyBDb250ZXh0TWVu
dUNsaWVudCogZHVtbXlDb250ZXh0TWVudUNsaWVudCA9IGFkb3B0UHRyKG5ldyBFbXB0eUNvbnRl
eHRNZW51Q2xpZW50KS5sZWFrUHRyKCk7CisgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGll
bnQgPSBkdW1teUNvbnRleHRNZW51Q2xpZW50OworI2VuZGlmCisgICAgc3RhdGljIEVkaXRvckNs
aWVudCogZHVtbXlFZGl0b3JDbGllbnQgPSBhZG9wdFB0cihuZXcgRW1wdHlFZGl0b3JDbGllbnQp
LmxlYWtQdHIoKTsKKyAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBkdW1teUVkaXRvckNs
aWVudDsKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgIHN0YXRpYyBEcmFnQ2xpZW50KiBk
dW1teURyYWdDbGllbnQgPSBhZG9wdFB0cihuZXcgRW1wdHlEcmFnQ2xpZW50KS5sZWFrUHRyKCk7
CisgICAgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCA9IGR1bW15RHJhZ0NsaWVudDsKKyNlbmRpZgor
ICAgIHN0YXRpYyBJbnNwZWN0b3JDbGllbnQqIGR1bW15SW5zcGVjdG9yQ2xpZW50ID0gYWRvcHRQ
dHIobmV3IEVtcHR5SW5zcGVjdG9yQ2xpZW50KS5sZWFrUHRyKCk7CisgICAgcGFnZUNsaWVudHMu
aW5zcGVjdG9yQ2xpZW50ID0gZHVtbXlJbnNwZWN0b3JDbGllbnQ7CisjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikKKyAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ2xpZW50KiBkdW1teURldmlj
ZU1vdGlvbkNsaWVudCA9IGFkb3B0UHRyKG5ldyBFbXB0eURldmljZU1vdGlvbkNsaWVudCkubGVh
a1B0cigpOworICAgIHBhZ2VDbGllbnRzLmRldmljZU1vdGlvbkNsaWVudCA9IGR1bW15RGV2aWNl
TW90aW9uQ2xpZW50OworICAgIHN0YXRpYyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZHVtbXlE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudCA9IGFkb3B0UHRyKG5ldyBFbXB0eURldmljZU9yaWVudGF0
aW9uQ2xpZW50KS5sZWFrUHRyKCk7CisgICAgcGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25D
bGllbnQgPSBkdW1teURldmljZU9yaWVudGF0aW9uQ2xpZW50OworI2VuZGlmCisKKyAgICBwYWdl
ID0gYWRvcHRQdHIobmV3IFBhZ2UocGFnZUNsaWVudHMpKS5sZWFrUHRyKCk7CisgICAgcGFnZS0+
c2V0dGluZ3MoKS0+c2V0TWVkaWFFbmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLT5zZXR0aW5ncygp
LT5zZXRKYXZhU2NyaXB0RW5hYmxlZChmYWxzZSk7CisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0
UGx1Z2luc0VuYWJsZWQoZmFsc2UpOworCisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1l
OjpjcmVhdGUocGFnZSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisgICAgZnJhbWUtPnNl
dFZpZXcoRnJhbWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsKKyAgICAvLyBEaXNhYmxlIHNj
cm9sbGluZy4gVGhpcyBwcmV2ZW50cyBhIGNyYXNoLi4uIHRob3VnaCB3ZSBzaG91bGQgcmVhbGx5
IGZpZ3VyZSBvdXQgd2h5IGl0IGNyYXNoZXMuCisgICAgZnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2
ZVNjcm9sbGJhcnMoZmFsc2UpOworICAgIGZyYW1lLT5pbml0KCk7CisgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBsb2FkZXItPnNldEZvcmNlZFNhbmRib3hG
bGFncyhTYW5kYm94QWxsKTsgLy8gSXMgdGhpcyBuZWVkZWQ/CisgICAgQVNTRVJUKGxvYWRlci0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSk7IC8vIERvY3VtZW50TG9hZGVyIHNob3VsZCBoYXZlIGJl
ZW4gY3JlYXRlZCBieSBpbml0KCkKKyAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkt
PndyaXRlcigpLT5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisKKyAgICByZXR1cm4gcGFnZTsK
K30KKwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgcHJvcGVydHlN
aXNzaW5nT3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5SUQp
OwpAQCAtNjk0LDYgKzc0Niw1MSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0CiAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFn
bWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgdGhlIG1hcmt1cCBhbHJlYWR5IGNvbnRhaW5zIHRoZXNlIG1hcmtlcnMu
CisgICAgY29uc3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1t
YXJrZXIiOworCisgICAgU3RyaW5nQnVpbGRlciB0YWdnZWRNYXJrdXA7CisgICAgdGFnZ2VkTWFy
a3VwLmFwcGVuZChtYXJrdXAubGVmdChmcmFnbWVudFN0YXJ0KSk7CisgICAgdGFnZ2VkTWFya3Vw
LmFwcGVuZCgiPCEtLSIpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoZnJhZ21lbnRNYXJrZXJU
YWcpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQoIi0tPiIpOworICAgIHRhZ2dlZE1hcmt1cC5h
cHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdt
ZW50U3RhcnQpKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKCI8IS0tIik7CisgICAgdGFnZ2Vk
TWFya3VwLmFwcGVuZChmcmFnbWVudE1hcmtlclRhZyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVu
ZCgiLS0+Iik7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdt
ZW50RW5kKSk7CisKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gcGFnZUZvclBhc3RlKCktPm1h
aW5GcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpKTsKKyAgICBjb25zdCBDU3RyaW5nJiB0YWdnZWRNYXJrdXBEYXRhID0gdGFnZ2VkTWFy
a3VwLnRvU3RyaW5nKCkudXRmOCgpOworICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIo
KS0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpLT53cml0ZXIoKS0+YWRkRGF0YSh0YWdnZWRNYXJrdXBEYXRhLmRhdGEoKSwgdGFnZ2Vk
TWFya3VwRGF0YS5sZW5ndGgoKSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigp
LT53cml0ZXIoKS0+ZW5kKCk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gc29tZSBjbGVh
bnVwIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgZG9jLi4uIGZpZ3VyZSBvdXQgd2hhdC4KKworICAg
IC8vIE5vdyBzcGVsdW5rIHRocm91Z2ggdGhlIERPTSBhbmQgZXh0cmFjdCB0aGUgYmVnaW5uaW5n
IGFuZCB0aGUgZW5kIG9mIHRoZSByYW5nZSB1c2luZyB0aGUgc2V0aW5lbHMuCisgICAgTm9kZSog
ZnJhZ21lbnRTdGFydE5vZGUgPSAwOworICAgIE5vZGUqIGZyYWdtZW50RW5kTm9kZSA9IDA7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gcGFnZUZvclBhc3RlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVu
dCgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKKyAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYm
IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFy
a2VyVGFnKSB7CisgICAgICAgICAgICBpZiAoIWZyYWdtZW50U3RhcnROb2RlKQorICAgICAgICAg
ICAgICAgIGZyYWdtZW50U3RhcnROb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGZyYWdtZW50RW5kTm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYWdlRm9yUGFzdGUoKS0+bWFpbkZyYW1lKCktPmRvY3Vt
ZW50KCksCisgICAgICAgIHBvc2l0aW9uQWZ0ZXJOb2RlKGZyYWdtZW50U3RhcnROb2RlKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSwKKyAgICAgICAgcG9zaXRpb25CZWZvcmVOb2RlKGZyYWdt
ZW50RW5kTm9kZSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworCisgICAgcmV0dXJuIGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgY3JlYXRlTWFya3VwKHJhbmdlLmdldCgp
LCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwgYmFzZVVSTCwgc2NyaXB0aW5nUGVybWlzc2lv
bik7Cit9CisKIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVu
T25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNo
b3VsZFJlc29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5o
CmluZGV4IDFiZmU5MDA2NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkwMjc5ZDU3ZjAuLjY5NTZhNzY5
NWM3ZDE2ZDUyMDhlNzZlNDQ0OTBkNzcyYmE5M2JmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
aApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwg
Y29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFn
bWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJp
bmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQs
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiwgY29uc3QgVmVjdG9yPE5vZGUqPiYp
OwogCiAgICAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlICpub2RlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3Bw
CmluZGV4IGE4ODJlNjMwN2U0ZDg2ODZlZTU3OTYyNGY2MmEwZThhNjc5MmQwNDQuLmU0YjdiZWVl
NzgzNTdiOGJhNmYyYWZkNzAwNzg4YTI3NDJkZTRkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMTYw
LDcgKzE2MCw4IEBAIFN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKICAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKICAgICAg
ICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlw
Ym9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25v
cmVkKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAg
ICAgICAgcmV0dXJuIGh0bWxUZXh0OwogICAgICAgICB9CkBAIC0yNjcsNCArMjY4LDMgQEAgQ2hy
b21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2Jq
ZWN0JiBvdGhlcikKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtLmNwcAppbmRleCBiMzdlY2E0YzBjY2E4ZTA3MjM5OWNhMDdmNWUwOTFiY2IyYzllNzdj
Li5jMTE0ZmY1YjdhNjNiYzE4NGE0NDVmNDA0NmFhODAyNjUzMDgxNDlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bS5jcHAKQEAgLTk3LDcgKzk3LDggQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQog
ICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICBTdHJpbmcgaHRt
bDsKICAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBv
cnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwg
Jmh0bWwsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAg
ICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0
ZTo6U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZp
Z25vcmVkKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBo
dG1sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDZmNTYwNzc3
ZDgzMzlhYjVkMmQyN2UzNjdjZmIwNmQ2Mjg0N2FjNzEuLjk1NzJmMDk3NWJhNzdjNTlkM2M0ZjQ0
Y2Q0MTUwZDdmMTMxM2JmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcApAQCAtMTczLDEwICsxNzMsMTIgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlAKICAgICBpZiAoUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVy
KSkgewogICAgICAgICBTdHJpbmcgbWFya3VwOwogICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAg
ICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZz
cmNVUkwpOworICAgICAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0ID0gMDsKKyAgICAgICAgdW5z
aWduZWQgZnJhZ21lbnRFbmQgPSAwOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2Fy
ZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCwgJmZyYWdtZW50U3RhcnQsICZmcmFn
bWVudEVuZCk7CiAKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0K
LSAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwg
bWFya3VwLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAg
ICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwg
bWFya3VwLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCwgc3JjVVJMLCBGcmFnbWVudFNjcmlw
dGluZ05vdEFsbG93ZWQpOwogICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAgICAgICAgICByZXR1
cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKaW5kZXggZTMyMTdiYjIwMDM4Y2FiMTNi
ZDY0YWQzMzU0MGVlZjc3MTU2Yjg4Ni4uOTBmNDA5NWY5MWQ2ZWU4ZjU0MTU3OWQ4NjgzN2YyY2My
MTMyMzYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IGNsaXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRG
b3JtYXQsIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwogCiAgICAgc3RhdGlj
IFN0cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIpOwotICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyosIEtVUkwqKTsKKyAgICBzdGF0aWMgdm9p
ZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBT
dHJpbmcqLCBLVVJMKiwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVu
dEVuZCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjbGlwYm9hcmRSZWFk
SW1hZ2UoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAgICAgc3RhdGljIHVp
bnQ2NF90IGNsaXBib2FyZEdldFNlcXVlbmNlTnVtYmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggMDA3OTAyZWZiZTNmNmJiNjM4ZWEwNDZmM2UyNmFiZmYwYmUzMzJjZS4uZWRm
NWFhZDY1YjI3YzRiNGU3YTk2ZTVjMWZlMjA3NWI5YjUyNDdkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0wNSAgRGFuaWVsIENoZW5nICA8ZGNo
ZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb250ZXh0LWF3YXJlIEhUTUwgcGFzdGUgZm9y
IENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBwbHVtYmluZyBmb3IgQ2hyb21pdW0gcG9ydCB0byBwYXNzIEhUTUwgZnJhZ21lbnQgc3Rh
cnQvZW5kIGluZGV4ZXMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2xpcGJvYXJkLmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNsaXBib2FyZDo6cmVhZEhUTUwpOgorICAgICAgICAqIHNyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TdXBwb3J0OjpjbGlw
Ym9hcmRSZWFkSFRNTCk6CisKIDIwMTEtMTAtMDQgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBXZWIgSW5zcGVjdG9yOiBzYXZlIGlu
c3BlY3RvciBzdGF0ZSBpbnRvIHNpbmdsZSBzdHJpbmcgaW5zdGVhZCBvZiBzdHJpbmcgbWFwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oCmluZGV4IDI0MWE5
YzZjMzRjZWNkYmMyODkxNTQzMGE3ZTA1OWU2OGRjMTZiYTkuLjE5ZjYzYzFiODJiMGM5OTViZGQ0
YThmMzFjYWUwMmQxNTc0YjRmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNsaXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkNsaXBib2FyZC5oCkBAIC02Myw3ICs2MywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzRm9ybWF0QXZhaWxhYmxlKEZvcm1hdCwgQnVmZmVyKSB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZFBsYWluVGV4dChCdWZmZXIpIHsgcmV0dXJuIFdl
YlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoQnVmZmVyLCBXZWJV
UkwqKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIC8vIGZyYWdtZW50U3RhcnQgYW5kIGZy
YWdtZW50RW5kIGFyZSBpbmRleGVzIGludG8gdGhlIHJldHVybmVkIG1hcmt1cCB0aGF0CisgICAg
Ly8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGZyYWdtZW50IGlmIHRoZSByZXR1
cm5lZCBtYXJrdXAKKyAgICAvLyBjb250YWlucyBhZGRpdGlvbmFsIGNvbnRleHQuIElmIHRoZXJl
IGlzIG5vIGFkZGl0aW9uYWwgY29udGV4dCwKKyAgICAvLyBmcmFnbWVudFN0YXJ0IHdpbGwgYmUg
emVybyBhbmQgZnJhZ21lbnRFbmQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgbGVuZ3RoCisgICAg
Ly8gb2YgdGhlIHJldHVybmVkIG1hcmt1cC4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRN
TCgKKyAgICAgICAgQnVmZmVyIGJ1ZmZlciwgV2ViVVJMKiBwYWdlVVJMLCB1bnNpZ25lZCogZnJh
Z21lbnRTdGFydCwKKyAgICAgICAgdW5zaWduZWQqIGZyYWdtZW50RW5kKSB7IHJldHVybiBXZWJT
dHJpbmcoKTsgfQogICAgIHZpcnR1YWwgV2ViRGF0YSByZWFkSW1hZ2UoQnVmZmVyKSB7IHJldHVy
biBXZWJEYXRhKCk7IH0KIAogICAgIC8vIFJldHVybnMgYW4gaWRlbnRpZmllciB3aGljaCBjYW4g
YmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YQpAQCAtODcsNyArOTQsNyBAQCBw
dWJsaWM6CiAgICAgLy8gcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weSAo
b24gWCkuCiAgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZWFkQXZhaWxhYmxlVHlw
ZXMoCiAgICAgICAgIEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpIHsgcmV0dXJuIFdl
YlZlY3RvcjxXZWJTdHJpbmc+KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVl
c3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIuIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxseSByZWFk
IGZyb20gdGhlIGJ1ZmZlci4KICAgICB2aXJ0dWFsIGJvb2wgcmVhZERhdGEoCiAgICAgICAgIEJ1
ZmZlciwgY29uc3QgV2ViU3RyaW5nJiB0eXBlLCBXZWJTdHJpbmcqIGRhdGEsCiAgICAgICAgIFdl
YlN0cmluZyogbWV0YWRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAppbmRleCA1NDg3Mjg1NTBhYmZiNDgwNmU5
ZGViMmUxNzk3ZWI5NWI2MmY0NjBkLi5kMWE3MjQzMjVkODE4ZWI5YTAwZGFlNTA5NWRjOWQ2MTQ3
NWEzNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9y
dC5jcHAKQEAgLTE2OCwxMSArMTY4LDExIEBAIFN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoCiAKIHZvaWQgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFk
SFRNTCgKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKLSAg
ICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwpCisgICAgU3RyaW5nKiBodG1sVGV4
dCwgS1VSTCogc291cmNlVVJMLCB1bnNpZ25lZCogZnJhZ21lbnRTdGFydCwgdW5zaWduZWQqIGZy
YWdtZW50RW5kKQogewogICAgIFdlYlVSTCB1cmw7CiAgICAgKmh0bWxUZXh0ID0gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKLSAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOworICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCwgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQpOwogICAgICpzb3VyY2VVUkwgPSB1cmw7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110209</attachid>
            <date>2011-10-07 13:41:50 -0700</date>
            <delta_ts>2011-10-12 16:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111007134149.patch</filename>
            <type>text/plain</type>
            <size>16587</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZDczOTA0ZjEyNTU3NDMx
NzkyNmM0YmRmZmIwZTc4NGFmM2M4NTc1Li41Yzc2ZDMyZWJkY2Y0MWRhZDNjNGFjZTA4NGZlYzhi
Njc3NWUwM2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMDYgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gY3JlYXRlIGFuIEhUTUwgZnJh
Z21lbnQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29udGV4dCBhcm91bmQKKyAgICAgICAgdGhl
IG1hcmt1cC4gVGhpcyBwcmVzZXJ2ZXMgPHN0eWxlPiBkZWNsYXJhdGlvbnMgYW5kIG90aGVyIEhU
TUwgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAgICAgY29udGV4dC1kZXBlbmRlbnQsIGxpa2UgVEQg
YW5kIExJLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFnZUZvclBhcnNpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgorICAgICAgICAqIGVkaXRp
bmcvbWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJp
bmcpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKwogMjAxMS0xMC0wNiAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk2NzkxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5oCmluZGV4IGYxYjIyMTlkODZjNTlmNTFjYzIzN2Y5NzEyMzQ5YTU2ZmZi
MmYwNTQuLmEzMWY5MTI4NThiN2M2MDdjZTRlYzI5NjFlMDY3NjNkZTQ4NDU4YmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTcxLDYgKzcxLDggQEAg
cHVibGljOgogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIG5v
ZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5KTsKIAorICAgIHN0YXRpYyB2b2lk
IGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQp
OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9IDApOwpA
QCAtODYsNyArODgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoU3Ry
aW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKICAgICBFbnRpdHlNYXNrIGVu
dGl0eU1hc2tGb3JUZXh0KFRleHQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4
dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKLSAgICB2b2lkIGFwcGVuZENvbW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBwZW5k
RG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7
CiAgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0
LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZThjYTk1ZTRiNzBjYjNkZDVm
OGM5MjJjODc4NWVlNDU0YjUwZGUzZS4uMWQxYjc5NDE4MDEyZGY5OTFiYWE4ZDMyOTZhMDVhMTBh
ZTU2YjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDUsMTQgKzQ1LDE4IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5o
IgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBA
IC02Niw2ICs3MCw1NSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKworc3RhdGljIFBhZ2UqIHBhZ2VGb3JQYXN0ZSgpCit7CisgICAgc3RhdGljIFBhZ2Uq
IHBhZ2UgPSAwOworICAgIGlmIChwYWdlKQorICAgICAgICByZXR1cm4gcGFnZTsKKworICAgIHN0
YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9IGFkb3B0UHRy
KG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50KS5sZWFrUHRyKCk7CisgICAgUGFnZTo6UGFnZUNs
aWVudHMgcGFnZUNsaWVudHM7CisgICAgc3RhdGljIENocm9tZUNsaWVudCogZHVtbXlDaHJvbWVD
bGllbnQgPSBhZG9wdFB0cihuZXcgRW1wdHlDaHJvbWVDbGllbnQpLmxlYWtQdHIoKTsKKyAgICBw
YWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBkdW1teUNocm9tZUNsaWVudDsKKyNpZiBFTkFCTEUo
Q09OVEVYVF9NRU5VUykKKyAgICBzdGF0aWMgQ29udGV4dE1lbnVDbGllbnQqIGR1bW15Q29udGV4
dE1lbnVDbGllbnQgPSBhZG9wdFB0cihuZXcgRW1wdHlDb250ZXh0TWVudUNsaWVudCkubGVha1B0
cigpOworICAgIHBhZ2VDbGllbnRzLmNvbnRleHRNZW51Q2xpZW50ID0gZHVtbXlDb250ZXh0TWVu
dUNsaWVudDsKKyNlbmRpZgorICAgIHN0YXRpYyBFZGl0b3JDbGllbnQqIGR1bW15RWRpdG9yQ2xp
ZW50ID0gYWRvcHRQdHIobmV3IEVtcHR5RWRpdG9yQ2xpZW50KS5sZWFrUHRyKCk7CisgICAgcGFn
ZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gZHVtbXlFZGl0b3JDbGllbnQ7CisjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKKyAgICBzdGF0aWMgRHJhZ0NsaWVudCogZHVtbXlEcmFnQ2xpZW50ID0gYWRv
cHRQdHIobmV3IEVtcHR5RHJhZ0NsaWVudCkubGVha1B0cigpOworICAgIHBhZ2VDbGllbnRzLmRy
YWdDbGllbnQgPSBkdW1teURyYWdDbGllbnQ7CisjZW5kaWYKKyAgICBzdGF0aWMgSW5zcGVjdG9y
Q2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVudCA9IGFkb3B0UHRyKG5ldyBFbXB0eUluc3BlY3Rv
ckNsaWVudCkubGVha1B0cigpOworICAgIHBhZ2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9IGR1
bW15SW5zcGVjdG9yQ2xpZW50OworI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisgICAg
c3RhdGljIERldmljZU1vdGlvbkNsaWVudCogZHVtbXlEZXZpY2VNb3Rpb25DbGllbnQgPSBhZG9w
dFB0cihuZXcgRW1wdHlEZXZpY2VNb3Rpb25DbGllbnQpLmxlYWtQdHIoKTsKKyAgICBwYWdlQ2xp
ZW50cy5kZXZpY2VNb3Rpb25DbGllbnQgPSBkdW1teURldmljZU1vdGlvbkNsaWVudDsKKyAgICBz
dGF0aWMgRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGR1bW15RGV2aWNlT3JpZW50YXRpb25DbGll
bnQgPSBhZG9wdFB0cihuZXcgRW1wdHlEZXZpY2VPcmllbnRhdGlvbkNsaWVudCkubGVha1B0cigp
OworICAgIHBhZ2VDbGllbnRzLmRldmljZU9yaWVudGF0aW9uQ2xpZW50ID0gZHVtbXlEZXZpY2VP
cmllbnRhdGlvbkNsaWVudDsKKyNlbmRpZgorCisgICAgcGFnZSA9IGFkb3B0UHRyKG5ldyBQYWdl
KHBhZ2VDbGllbnRzKSkubGVha1B0cigpOworICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldE1lZGlh
RW5hYmxlZChmYWxzZSk7CisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdEVuYWJs
ZWQoZmFsc2UpOworICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldFBsdWdpbnNFbmFibGVkKGZhbHNl
KTsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHBhZ2UsIDAsIGR1
bW15RnJhbWVMb2FkZXJDbGllbnQpOworICAgIGZyYW1lLT5zZXRWaWV3KEZyYW1lVmlldzo6Y3Jl
YXRlKGZyYW1lLmdldCgpKSk7CisgICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcuIFRoaXMgcHJldmVu
dHMgYSBjcmFzaC4uLiB0aG91Z2ggd2Ugc2hvdWxkIHJlYWxseSBmaWd1cmUgb3V0IHdoeSBpdCBj
cmFzaGVzLgorICAgIGZyYW1lLT52aWV3KCktPnNldENhbkhhdmVTY3JvbGxiYXJzKGZhbHNlKTsK
KyAgICBmcmFtZS0+aW5pdCgpOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9h
ZGVyKCk7CisgICAgbG9hZGVyLT5zZXRGb3JjZWRTYW5kYm94RmxhZ3MoU2FuZGJveEFsbCk7IC8v
IElzIHRoaXMgbmVlZGVkPworICAgIEFTU0VSVChsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCkpOyAvLyBEb2N1bWVudExvYWRlciBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgaW5pdCgp
CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5jb2Rp
bmcoIlVURi04IiwgZmFsc2UpOworICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+
d3JpdGVyKCktPnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKworICAgIHJldHVybiBwYWdlOwor
fQorCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1p
c3NpbmdPckVxdWFsVG9Ob25lKENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7
CkBAIC02OTQsNiArNzQ3LDQ2IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QKICAgICByZXR1cm4g
ZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdt
ZW50RW5kLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0
aGUgY2FzZSB3aGVyZSB0aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4K
KyAgICBjb25zdCBjaGFyIGZyYWdtZW50TWFya2VyVGFnW10gPSAid2Via2l0LWZyYWdtZW50LW1h
cmtlciI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHRhZ2dlZE1hcmt1cDsKKyAgICB0YWdnZWRNYXJr
dXAuYXBwZW5kKG1hcmt1cC5sZWZ0KGZyYWdtZW50U3RhcnQpKTsKKyAgICBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKKyAg
ICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmcoZnJhZ21lbnRTdGFydCwgZnJh
Z21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KSk7CisgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFnbWVudE1hcmtlclRhZyk7CisgICAgdGFnZ2VkTWFy
a3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50RW5kKSk7CisKKyAgICBGcmFtZUxv
YWRlciogbG9hZGVyID0gcGFnZUZvclBhc3RlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKTsKKyAg
ICBBU1NFUlQobG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsKKyAgICBjb25zdCBDU3Ry
aW5nJiB0YWdnZWRNYXJrdXBEYXRhID0gdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCkudXRmOCgpOwor
ICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKEtVUkwo
KSk7CisgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YWRkRGF0
YSh0YWdnZWRNYXJrdXBEYXRhLmRhdGEoKSwgdGFnZ2VkTWFya3VwRGF0YS5sZW5ndGgoKSk7Cisg
ICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZW5kKCk7CisgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gZG8gc29tZSBjbGVhbnVwIGJlZm9yZSBsb2FkaW5nIHRoZSBu
ZXcgZG9jLi4uIGZpZ3VyZSBvdXQgd2hhdC4KKworICAgIC8vIE5vdyBzcGVsdW5rIHRocm91Z2gg
dGhlIERPTSBhbmQgZXh0cmFjdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSByYW5n
ZSB1c2luZyB0aGUgc2VudGluZWxzLgorICAgIE5vZGUqIGZyYWdtZW50U3RhcnROb2RlID0gMDsK
KyAgICBOb2RlKiBmcmFnbWVudEVuZE5vZGUgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IHBh
Z2VGb3JQYXN0ZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5u
b2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSAmJiBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJE
YXRhKj4obm9kZSktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtlclRhZykgeworICAgICAgICAgICAg
aWYgKCFmcmFnbWVudFN0YXJ0Tm9kZSkKKyAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0Tm9k
ZSA9IG5vZGU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudEVu
ZE5vZGUgPSBub2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
cGFnZUZvclBhc3RlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLAorICAgICAgICBwb3NpdGlv
bkFmdGVyTm9kZShmcmFnbWVudFN0YXJ0Tm9kZSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCks
CisgICAgICAgIHBvc2l0aW9uQmVmb3JlTm9kZShmcmFnbWVudEVuZE5vZGUpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRv
Y3VtZW50LCBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIERvTm90QW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSksIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworfQorCiBTdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBW
ZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcykKIHsK
ICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAppbmRleCAxYmZlOTAwNjRjZGI3
MmRiNzcyZGY3NDUwYWE0ZDc5MDI3OWQ1N2YwLi5mMjg3MTViMjIyOTc3YzU5MWRkYjJkZDk1NDVm
Y2QzMTY4OWM0MTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQp
OwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVS
TCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVk
IGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBjb25zdCBTdHJpbmcmIGJhc2VV
UkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0IFZlY3Rv
cjxOb2RlKj4mKTsKIAogICAgIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSAqbm9kZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmNwcAppbmRleCBhODgyZTYzMDdlNGQ4Njg2ZWU1Nzk2MjRmNjJhMGU4YTY3OTJkMDQ0
Li5lNGI3YmVlZTc4MzU3YjhiYTZmMmFmZDcwMDc4OGEyNzQyZGU0ZDJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKQEAgLTE2MCw3ICsxNjAsOCBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKICAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcgaHRtbFRl
eHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIFBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOwor
ICAgICAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwsICZpZ25v
cmVkLCAmaWdub3JlZCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHko
KTsKICAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKICAgICAgICAgfQpAQCAtMjY3LDQgKzI2
OCwzIEBAIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9t
aXVtRGF0YU9iamVjdCYgb3RoZXIpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYjM3ZWNhNGMwY2NhOGUwNzIzOTljYTA3ZjVlMDkx
YmNiMmM5ZTc3Yy4uYzExNGZmNWI3YTYzYmMxODRhNDQ1ZjQwNDZhYTgwMjY1MzA4MTQ5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC05Nyw3ICs5Nyw4IEBAIHZvaWQgRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBj
YWxsYmFjaykKICAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKICAgICAgICAg
U3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKLSAgICAgICAgUGxh
dGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRh
cmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCk7CisgICAgICAgIHVuc2lnbmVkIGln
bm9yZWQ7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwgJmlnbm9yZWRTb3VyY2VVUkwsICZp
Z25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1f
Y29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAppbmRl
eCA2ZjU2MDc3N2Q4MzM5YWI1ZDJkMjdlMzY3Y2ZiMDZkNjI4NDdhYzcxLi45NTcyZjA5NzViYTc3
YzU5ZDNjNGY0NGNkNDE1MGQ3ZjEzMTNiZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTE3MywxMCAr
MTczLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1l
bnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQCiAgICAgaWYgKFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxGb3Jt
YXQsIGJ1ZmZlcikpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cDsKICAgICAgICAgS1VSTCBzcmNV
Ukw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
bWFya3VwLCAmc3JjVVJMKTsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydCA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwsICZmcmFnbWVudFN0
YXJ0LCAmZnJhZ21lbnRFbmQpOwogCiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9Ci0gICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRv
Y3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwor
ICAgICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoZnJhbWUtPmRv
Y3VtZW50KCksIG1hcmt1cCwgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQsIHNyY1VSTCwgRnJh
Z21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCmluZGV4IGUzMjE3YmIy
MDAzOGNhYjEzYmQ2NGFkMzM1NDBlZWY3NzE1NmI4ODYuLjkwZjQwOTVmOTFkNmVlOGY1NDE1Nzlk
ODY4MzdmMmNjMjEzMjM2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6
Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKIAog
ICAgIHN0YXRpYyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7CisgICAg
c3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCosIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25l
ZCogZnJhZ21lbnRFbmQpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2xp
cGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwogICAg
IHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1ZW5jZU51bWJlcigpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IGVmYTMxZWM3ZjRiOTk1YTY3YWVjYmNmYzM3YzI4NzlmOTY3
ZDdhNGEuLmRkYTI1ZGIwOWMzYzQzNTRjZGJmODFiNjM1OWZmMGViYTJhNGY1MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMDYgIERhbmllbCBD
aGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBIVE1M
IHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgcGx1bWJpbmcgZm9yIENocm9taXVtIHBvcnQgdG8gcGFzcyBIVE1MIGZy
YWdtZW50IHN0YXJ0L2VuZCBpbmRleGVzLgorCisgICAgICAgICogcHVibGljL1dlYkNsaXBib2Fy
ZC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDbGlwYm9hcmQ6OnJlYWRIVE1MKToKKyAgICAgICAg
KiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorCiAyMDExLTEwLTA2ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByOTY3OTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDbGlwYm9hcmQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2Fy
ZC5oCmluZGV4IDI0MWE5YzZjMzRjZWNkYmMyODkxNTQzMGE3ZTA1OWU2OGRjMTZiYTkuLjE5ZjYz
YzFiODJiMGM5OTViZGQ0YThmMzFjYWUwMmQxNTc0YjRmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oCkBAIC02Myw3ICs2MywxNCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzRm9ybWF0QXZhaWxhYmxlKEZvcm1hdCwgQnVmZmVyKSB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZFBsYWluVGV4dChCdWZm
ZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhU
TUwoQnVmZmVyLCBXZWJVUkwqKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIC8vIGZyYWdt
ZW50U3RhcnQgYW5kIGZyYWdtZW50RW5kIGFyZSBpbmRleGVzIGludG8gdGhlIHJldHVybmVkIG1h
cmt1cCB0aGF0CisgICAgLy8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGZyYWdt
ZW50IGlmIHRoZSByZXR1cm5lZCBtYXJrdXAKKyAgICAvLyBjb250YWlucyBhZGRpdGlvbmFsIGNv
bnRleHQuIElmIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgY29udGV4dCwKKyAgICAvLyBmcmFnbWVu
dFN0YXJ0IHdpbGwgYmUgemVybyBhbmQgZnJhZ21lbnRFbmQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0
aGUgbGVuZ3RoCisgICAgLy8gb2YgdGhlIHJldHVybmVkIG1hcmt1cC4KKyAgICB2aXJ0dWFsIFdl
YlN0cmluZyByZWFkSFRNTCgKKyAgICAgICAgQnVmZmVyIGJ1ZmZlciwgV2ViVVJMKiBwYWdlVVJM
LCB1bnNpZ25lZCogZnJhZ21lbnRTdGFydCwKKyAgICAgICAgdW5zaWduZWQqIGZyYWdtZW50RW5k
KSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgV2ViRGF0YSByZWFkSW1hZ2Uo
QnVmZmVyKSB7IHJldHVybiBXZWJEYXRhKCk7IH0KIAogICAgIC8vIFJldHVybnMgYW4gaWRlbnRp
ZmllciB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YQpAQCAt
ODcsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgLy8gcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBz
ZWxlY3Rpb24gY29weSAob24gWCkuCiAgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViU3RyaW5nPiBy
ZWFkQXZhaWxhYmxlVHlwZXMoCiAgICAgICAgIEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFt
ZXMpIHsgcmV0dXJuIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBi
dWZmZXIuIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1
Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlci4KICAgICB2aXJ0dWFsIGJvb2wgcmVhZERh
dGEoCiAgICAgICAgIEJ1ZmZlciwgY29uc3QgV2ViU3RyaW5nJiB0eXBlLCBXZWJTdHJpbmcqIGRh
dGEsCiAgICAgICAgIFdlYlN0cmluZyogbWV0YWRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAppbmRleCA1NDg3
Mjg1NTBhYmZiNDgwNmU5ZGViMmUxNzk3ZWI5NWI2MmY0NjBkLi5kMWE3MjQzMjVkODE4ZWI5YTAw
ZGFlNTA5NWRjOWQ2MTQ3NWEzNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1BsYXRmb3JtU3VwcG9ydC5jcHAKQEAgLTE2OCwxMSArMTY4LDExIEBAIFN0cmluZyBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCiAKIHZvaWQgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSFRNTCgKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlciwKLSAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwpCisgICAg
U3RyaW5nKiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJMLCB1bnNpZ25lZCogZnJhZ21lbnRTdGFy
dCwgdW5zaWduZWQqIGZyYWdtZW50RW5kKQogewogICAgIFdlYlVSTCB1cmw7CiAgICAgKmh0bWxU
ZXh0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOwor
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCwg
ZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQpOwogICAgICpzb3VyY2VVUkwgPSB1cmw7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110767</attachid>
            <date>2011-10-12 16:16:29 -0700</date>
            <delta_ts>2011-10-13 14:54:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111012161628.patch</filename>
            <type>text/plain</type>
            <size>17627</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZWY4ODZiMjA3Njg5YzAw
Nzg0ZGU4ZWIyZjdlZTFhYjA0NzRhZDRlLi4yYzQwMzg2NGE4OTkyODAzNmI3NWRkMmU0ZTY0YmY0
MWQ5YTYyNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTAtMTIgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQgd2hp
Y2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1cmUgdG8KKyAgICAgICAgcmV0
YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYW5kIGFwcGVhcmFu
Y2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAgIGEgRE9NIHRyZWUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VG
b3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5k
QXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJl
QW5kQXBwZWFyYW5jZUhBQ0spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwV2l0aENvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKwogMjAxMS0xMC0xMiAgSmlhbiBMaSAgPGppYW5saUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydCBwYXNzaW5nIG9wdGlvbmFsIGZpbGVuYW1lIHdo
ZW4gRm9ybURhdGEuYXBwZW5kKCkgaXMgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5oCmluZGV4IGYxYjIyMTlkODZjNTlmNTFjYzIzN2Y5NzEyMzQ5YTU2
ZmZiMmYwNTQuLmEzMWY5MTI4NThiN2M2MDdjZTRlYzI5NjFlMDY3NjNkZTQ4NDU4YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTcxLDYgKzcxLDgg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUqIG5vZGUsIE5vZGUq
IG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5KTsKIAorICAgIHN0YXRpYyB2
b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1l
bnQpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9IDAp
OwpAQCAtODYsNyArODgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBlbmROYW1lc3BhY2Uo
U3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKICAgICBFbnRpdHlNYXNr
IGVudGl0eU1hc2tGb3JUZXh0KFRleHQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
VGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKLSAgICB2b2lkIGFwcGVuZENvbW1lbnQo
U3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBw
ZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBl
Kik7CiAgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYg
b3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1l
c3BhY2VzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZDMxMDRiNTg4MDk4ZGRj
Mjg3ZTBkYjFkYTZjMjM3MWExMTkyZjMyZi4uNGU5ZjZiNzYxZjdhNjBiNjcwM2E0MmU0YjYyNjYw
MjkwZGJjNjNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzAsNiArNzAsMTIg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNz
aW5nT3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5SUQpOwog
CisvLyBGSVhNRTogTmVlZCBhIGJldHRlciBuYW1lLgorc3RydWN0IENsb25lZE5vZGVCaXJ0aENl
cnRpZmljYXRlIHsKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGU7CisgICAgTm9kZSogY2xvbmVkTm9k
ZTsKK307CisKIGNsYXNzIEF0dHJpYnV0ZUNoYW5nZSB7CiBwdWJsaWM6CiAgICAgQXR0cmlidXRl
Q2hhbmdlKCkKQEAgLTQyOCwxMCArNDM0LDggQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OnRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0YXJ0Tm9kZSwgTm8KICAg
ICByZXR1cm4gbGFzdENsb3NlZDsKIH0KIAotc3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5T
dHJ1Y3R1cmVBbmRBcHBlYXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQorc3RhdGljIE5vZGUq
IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlRm9yQmxvY2soTm9kZSogY29t
bW9uQW5jZXN0b3JCbG9jaykKIHsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrID0gZW5j
bG9zaW5nQmxvY2soY29tbW9uQW5jZXN0b3IpOwotCiAgICAgaWYgKCFjb21tb25BbmNlc3RvckJs
b2NrKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNDU5LDYgKzQ2MywyNSBAQCBzdGF0aWMgTm9k
ZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2UoTm9kZSogY29tbW9uQW5j
ZXN0b3IpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWlu
U3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikKK3sKKyAgICByZXR1
cm4gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhlbmNsb3Np
bmdCbG9jayhjb21tb25BbmNlc3RvcikpOworfQorCitzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1Jl
dGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VIQUNLKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQorewor
ICAgIGlmIChjb21tb25BbmNlc3Rvci0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIEZJWE1FOiBEbyB3ZSB3YW50IHRvIGhhbmRsZSBtYWlsIHF1b3RlcyBjb3JyZWN0
bHk/IEl0IG1pZ2h0IGJlIHVzZWZ1bC4uLgorICAgIC8vIFdlIGNoZWF0IGhlcmUgc2luY2Ugd2Ug
ZG9uJ3QgaGF2ZSBhIHJlbmRlciB0cmVlLgorICAgIGlmIChjb21tb25BbmNlc3Rvci0+aGFzVGFn
TmFtZSh0ZFRhZykKKyAgICAgICAgfHwgY29tbW9uQW5jZXN0b3ItPmhhc1RhZ05hbWUobGlUYWcp
KQorICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2RlKCk7
CisKKyAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JC
bG9jayhjb21tb25BbmNlc3Rvcik7Cit9CisKIHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09y
RXF1YWxUb05vbmUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0eUlEKQog
ewogICAgIGlmICghc3R5bGUpCkBAIC02ODQsNiArNzA3LDEwMiBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0CiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0
YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICAvLyBGSVhN
RTogTmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hcmt1cCBhbHJlYWR5IGNvbnRh
aW5zIHRoZXNlIG1hcmtlcnMuCisgICAgY29uc3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0g
IndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOworCisgICAgU3RyaW5nQnVpbGRlciB0YWdnZWRNYXJr
dXA7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAubGVmdChmcmFnbWVudFN0YXJ0KSk7
CisgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFn
bWVudE1hcmtlclRhZyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5n
KGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJU
YWcpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudEVu
ZCkpOworICAgIGNvbnN0IENTdHJpbmcmIHRhZ2dlZE1hcmt1cERhdGEgPSB0YWdnZWRNYXJrdXAu
dG9TdHJpbmcoKS51dGY4KCk7CisgICAgTE9HX0VSUk9SKCJUYWdnZWQgbWFya3VwOiAlcyIsIHRh
Z2dlZE1hcmt1cC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IHRhZ2dlZEZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRv
Y3VtZW50LCB0YWdnZWRNYXJrdXAudG9TdHJpbmcoKSwgYmFzZVVSTCwgc2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgLy8gV2UgbW92ZSB0aGUgcmVzdWx0aW5nIERPTSB0cmVlIGludG8gYSBEb2N1
bWVudCBzbyB3ZSBjYW4gY3JlYXRlIGEgcHJvcGVyIFJhbmdlLgorICAgIFJlZlB0cjxEb2N1bWVu
dD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIEtVUkwoKSk7CisgICAgdGFn
Z2VkRG9jdW1lbnQtPnRha2VBbGxDaGlsZHJlbkZyb20odGFnZ2VkRnJhZ21lbnQuZ2V0KCkpOwor
CisgICAgTm9kZSogc3RhcnROb2RlID0gMDsKKyAgICBOb2RlKiBlbmROb2RlID0gMDsKKyAgICBm
b3IgKE5vZGUqIG4gPSB0YWdnZWREb2N1bWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5ub2RlVHlwZSgpID09IE5vZGU6OkNP
TU1FTlRfTk9ERSAmJiBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obiktPmRhdGEoKSA9PSBm
cmFnbWVudE1hcmtlclRhZykgeworICAgICAgICAgICAgaWYgKCFzdGFydE5vZGUpCisgICAgICAg
ICAgICAgICAgc3RhcnROb2RlID0gbjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGVuZE5vZGUgPSBuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
dGFnZ2VkRG9jdW1lbnQuZ2V0KCksCisgICAgICAgIHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0Tm9k
ZSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksCisgICAgICAgIHBvc2l0aW9uQmVmb3JlTm9k
ZShlbmROb2RlKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNl
c3RvckNvbnRhaW5lcihlYyk7CisgICAgQVNTRVJUKCFlYyk7CisgICAgTm9kZSogc3BlY2lhbENv
bW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VIQUNL
KGNvbW1vbkFuY2VzdG9yKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgLy8gVGhpcyBpcyBh
IHJlY29yZCBvZiB0aGUgY2xvbmVkIGFuY2VzdG9ycyBvZiB0aGUgY3VycmVudCBub2RlIGluIHRo
ZSBkZXN0aW5hdGlvbiBmcmFnbWVudC4KKyAgICBWZWN0b3I8Q2xvbmVkTm9kZUJpcnRoQ2VydGlm
aWNhdGU+IGNsb25lZEFuY2VzdG9yczsKKyAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RM
YXN0Tm9kZSgpOworICAgIE5vZGUqIG5leHQ7CisgICAgLy8gVGhpcyBsb29wIGlzIHN0cnVjdHVy
ZWQgc2ltaWxhcmx5IHRvIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKCkuCisgICAgZm9y
IChOb2RlKiBuID0gc3RhcnROb2RlOyBuICE9IHBhc3RFbmQ7IG4gPSBuZXh0KSB7CisgICAgICAg
IG5leHQgPSBuLT50cmF2ZXJzZU5leHROb2RlKCk7CisKKyAgICAgICAgUmVmUHRyPE5vZGU+IGNs
b25lID0gbi0+Y2xvbmVOb2RlKGZhbHNlKTsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJy
ZW50IGFuY2VzdG9ycywgc2ltcGx5IGFkZCBhcHBlbmQgaXQgdG8gdGhlIGRvY3VtZW50IGZyYWdt
ZW50IHdlJ3JlCisgICAgICAgIC8vIGJ1aWxkaW5nLgorICAgICAgICBpZiAoY2xvbmVkQW5jZXN0
b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChjbG9uZSwg
ZWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9uZWRBbmNlc3RvcnMubGFzdCgpLmNs
b25lZE5vZGUtPmFwcGVuZENoaWxkKGNsb25lLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOwor
CisgICAgICAgIGlmIChuLT5jaGlsZE5vZGVDb3VudCgpKSB7CisgICAgICAgICAgICAvLyBJZiB0
aGlzIG5vZGUgaGFzIGNoaWxkcmVuLCB3ZSBuZWVkIHRvIHB1c2ggaXQgaW50byB0aGUgY2xvbmVk
IHBhcmVudCBjaGFpbiBzbyB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhl
IHByb3BlciBub2RlIHRvIGFwcGVuZCBjbG9uZWQgbm9kZXMgdG8uCisgICAgICAgICAgICBDbG9u
ZWROb2RlQmlydGhDZXJ0aWZpY2F0ZSByZWNvcmQ7CisgICAgICAgICAgICByZWNvcmQub3JpZ2lu
YWxOb2RlID0gbjsKKyAgICAgICAgICAgIHJlY29yZC5jbG9uZWROb2RlID0gY2xvbmUuZ2V0KCk7
CisgICAgICAgICAgICBjbG9uZWRBbmNlc3RvcnMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIW4tPm5leHRTaWJsaW5nKCkgfHwgbmV4dCA9PSBwYXN0RW5kKSB7CisgICAgICAg
ICAgICB3aGlsZSAoIWNsb25lZEFuY2VzdG9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBDbG9uZWROb2RlQmlydGhDZXJ0aWZpY2F0ZSByZWNvcmQgPSBjbG9uZWRBbmNlc3RvcnMubGFz
dCgpOworICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBhdCB0aGUgZW5kIGFuZCB0aGUg
bmV4dCBub2RlIHdlJ2xsIGNsb25lIGlzIGEgZGVzY2VuZGVudCBvZiB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBvcmlnaW5hbCBhbmNlc3RvciBub2RlLCB0aGVuIHdlJ3ZlIHVud291bmQgZmFyIGVu
b3VnaC4KKyAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIG5leHQtPmlzRGVz
Y2VuZGFudE9mKHJlY29yZC5vcmlnaW5hbE5vZGUpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjbG9uZWRBbmNlc3RvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNwZWNpYWxDb21tb25BbmNlc3Rv
cikgeworICAgICAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gY29tbW9uQW5jZXN0
b3ItPnBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5v
ZGUoKSkgeworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGNsb25lID0gYW5jZXN0b3ItPmNsb25l
Tm9kZShmYWxzZSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4oY2xv
bmUuZ2V0KCkpLT50YWtlQWxsQ2hpbGRyZW5Gcm9tKGZyYWdtZW50LmdldCgpKTsKKyAgICAgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChjbG9uZSwgZWMpOworICAgICAgICAgICAgQVNTRVJU
KCFlYyk7CisKKyAgICAgICAgICAgIGlmIChhbmNlc3RvciA9PSBzcGVjaWFsQ29tbW9uQW5jZXN0
b3IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZnJhZ21lbnQ7Cit9CisKIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwg
RUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1
dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5oCmluZGV4IDFiZmU5MDA2NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkwMjc5ZDU3ZjAu
LmYyODcxNWIyMjI5NzdjNTkxZGRiMmRkOTU0NWZjZDMxNjg5YzQxOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2Uq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
IG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJh
Z21lbnRFbmQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uKTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJv
bU5vZGVzKERvY3VtZW50KiwgY29uc3QgVmVjdG9yPE5vZGUqPiYpOwogCiAgICAgYm9vbCBpc1Bs
YWluVGV4dE1hcmt1cChOb2RlICpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IGE4ODJlNjMwN2U0
ZDg2ODZlZTU3OTYyNGY2MmEwZThhNjc5MmQwNDQuLmU0YjdiZWVlNzgzNTdiOGJhNmYyYWZkNzAw
Nzg4YTI3NDJkZTRkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMTYwLDcgKzE2MCw4IEBAIFN0cmlu
ZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBz
dWNjZXNzKQogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZl
cjsKICAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKICAgICAgICAgICAgIEtVUkwgc291cmNl
VVJMOwotICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZm
ZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVk
OworICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIs
ICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAgICAg
IHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGh0bWxU
ZXh0OwogICAgICAgICB9CkBAIC0yNjcsNCArMjY4LDMgQEAgQ2hyb21pdW1EYXRhT2JqZWN0OjpD
aHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCBi
MzdlY2E0YzBjY2E4ZTA3MjM5OWNhMDdmNWUwOTFiY2IyYzllNzdjLi5jMTE0ZmY1YjdhNjNiYzE4
NGE0NDVmNDA0NmFhODAyNjUzMDgxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAg
LTk3LDcgKzk3LDggQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5n
KFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgIGlmICh0eXBlKCkgPT0g
bWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAgS1VSTCBp
Z25vcmVkU291cmNlVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRI
VE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291
cmNlVVJMKTsKKyAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgUGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIs
ICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAg
Y2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBodG1sKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDZmNTYwNzc3ZDgzMzlhYjVkMmQyN2UzNjdj
ZmIwNmQ2Mjg0N2FjNzEuLjk1NzJmMDk3NWJhNzdjNTlkM2M0ZjQ0Y2Q0MTUwZDdmMTMxM2JmMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVi
b2FyZENocm9taXVtLmNwcApAQCAtMTczLDEwICsxNzMsMTIgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFz
c1JlZlAKICAgICBpZiAoUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJs
ZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJp
bmcgbWFya3VwOwogICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAgICB1
bnNpZ25lZCBmcmFnbWVudFN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRFbmQg
PSAwOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jm1hcmt1cCwgJnNyY1VSTCwgJmZyYWdtZW50U3RhcnQsICZmcmFnbWVudEVuZCk7CiAKICAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0KLSAgICAgICAgICAgIGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBzcmNVUkwsIEZy
YWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXBXaXRoQ29udGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFnbWVudFN0
YXJ0LCBmcmFnbWVudEVuZCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwog
ICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BsYXRmb3JtU3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKaW5kZXggZTMyMTdiYjIwMDM4Y2FiMTNiZDY0YWQzMzU0MGVlZjc3MTU2
Yjg4Ni4uOTBmNDA5NWY5MWQ2ZWU4ZjU0MTU3OWQ4NjgzN2YyY2MyMTMyMzYxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKQEAg
LTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNsaXBib2FyZElzRm9ybWF0
QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRGb3JtYXQsIFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwogCiAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRS
ZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgIHN0
YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIsIFN0cmluZyosIEtVUkwqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRN
TChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKiwgdW5z
aWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFBy
aXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAgICAgc3RhdGljIHVpbnQ2NF90IGNsaXBib2FyZEdl
dFNlcXVlbmNlTnVtYmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDhlMzI2
ZDBmM2U0OGYyNzZiN2YzMWExOTgxNWMwNTA1ZDFlMGRhNy4uMjU4YWQ3Y2Y2NjM3ODUzZGM3MTM3
YTI1OTk2ZTUyY2E5MjBhMDY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMS0xMC0xMiAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4K
KworICAgICAgICBDb250ZXh0LWF3YXJlIEhUTUwgcGFzdGUgZm9yIENocm9taXVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjExMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQgc2lkZSBm
b3IgcGx1bWJpbmcgdG8gcmVjZWl2ZSBjb250ZXh0IGZvciBIVE1MIHBhc3RlLgorCisgICAgICAg
ICogcHVibGljL1dlYkNsaXBib2FyZC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDbGlwYm9hcmQ6
OnJlYWRIVE1MKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorCiAyMDExLTEw
LTEyICBTZXJnZXkgR2xhenVub3YgIDxzZXJnLmdsYXp1bm92QGdtYWlsLmNvbT4KIAogICAgICAg
ICBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMIGdldHMgY29uZnVzZWQg
Ynkgc3luY2hyb25vdXMgZnJhbWUgbG9hZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTljNmMzNGNlY2RiYzI4OTE1NDMwYTdlMDU5ZTY4
ZGMxNmJhOS4uMTlmNjNjMWI4MmIwYzk5NWJkZDRhOGYzMWNhZTAyZDE1NzRiNGYxYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKQEAgLTYzLDcgKzYz
LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtYXRBdmFpbGFibGUoRm9ybWF0
LCBCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFk
UGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFdl
YlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9
CisgICAgLy8gZnJhZ21lbnRTdGFydCBhbmQgZnJhZ21lbnRFbmQgYXJlIGluZGV4ZXMgaW50byB0
aGUgcmV0dXJuZWQgbWFya3VwIHRoYXQKKyAgICAvLyBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVu
ZCBvZiB0aGUgZnJhZ21lbnQgaWYgdGhlIHJldHVybmVkIG1hcmt1cAorICAgIC8vIGNvbnRhaW5z
IGFkZGl0aW9uYWwgY29udGV4dC4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBjb250ZXh0LAor
ICAgIC8vIGZyYWdtZW50U3RhcnQgd2lsbCBiZSB6ZXJvIGFuZCBmcmFnbWVudEVuZCB3aWxsIGJl
IHRoZSBzYW1lIGFzIHRoZSBsZW5ndGgKKyAgICAvLyBvZiB0aGUgcmV0dXJuZWQgbWFya3VwLgor
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAgICAgICBCdWZmZXIgYnVmZmVyLCBX
ZWJVUkwqIHBhZ2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LAorICAgICAgICB1bnNpZ25l
ZCogZnJhZ21lbnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBXZWJE
YXRhIHJlYWRJbWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRhdGEoKTsgfQogCiAgICAgLy8gUmV0
dXJucyBhbiBpZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVy
IHRoZSBkYXRhCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBwYXN0ZSwgZHJhZyBh
bmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4KICAgICB2aXJ0dWFsIFdlYlZlY3Rv
cjxXZWJTdHJpbmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgQnVmZmVyLCBib29sKiBj
b250YWluc0ZpbGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsgfQotICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxseSBy
ZWFkIGZyb20gdGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0
ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLgogICAgIHZpcnR1
YWwgYm9vbCByZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBjb25zdCBXZWJTdHJpbmcmIHR5cGUs
IFdlYlN0cmluZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5nKiBtZXRhZGF0YSkgeyByZXR1cm4g
ZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3Jt
U3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQu
Y3BwCmluZGV4IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3OTdlYjk1YjYyZjQ2MGQuLmQxYTcy
NDMyNWQ4MThlYjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApAQCAtMTY4LDExICsxNjgsMTEgQEAg
U3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCgKIAogdm9pZCBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNv
dXJjZVVSTCkKKyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwsIHVuc2lnbmVk
KiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpCiB7CiAgICAgV2ViVVJMIHVy
bDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCkt
PnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVm
ZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7CiAgICAgKnNvdXJjZVVS
TCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110914</attachid>
            <date>2011-10-13 14:54:06 -0700</date>
            <delta_ts>2011-10-13 15:53:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111013145404.patch</filename>
            <type>text/plain</type>
            <size>16156</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZWY4ODZiMjA3Njg5YzAw
Nzg0ZGU4ZWIyZjdlZTFhYjA0NzRhZDRlLi42OTdjN2NjYTg5MDc4MDQ1ZTg4OTRjMGE3M2VkMGJl
ODhmNjEwODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVj
dHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3Rv
clRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0spOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKwogMjAxMS0xMC0xMiAgSmlh
biBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydCBwYXNzaW5nIG9w
dGlvbmFsIGZpbGVuYW1lIHdoZW4gRm9ybURhdGEuYXBwZW5kKCkgaXMgdXNlZCB0bwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCmluZGV4IGYxYjIyMTlkODZjNTlm
NTFjYzIzN2Y5NzEyMzQ5YTU2ZmZiMmYwNTQuLmEzMWY5MTI4NThiN2M2MDdjZTRlYzI5NjFlMDY3
NjNkZTQ4NDU4YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmgKQEAgLTcxLDYgKzcxLDggQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVz
KE5vZGUqIG5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5
KTsKIAorICAgIHN0YXRpYyB2b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBj
b25zdCBTdHJpbmcmIGNvbW1lbnQpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUq
LCBOYW1lc3BhY2VzKiA9IDApOwpAQCAtODYsNyArODgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBhcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMm
KTsKICAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKLSAgICB2
b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1l
bnQpOwogICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgRG9jdW1lbnRUeXBlKik7CiAgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5k
ZXggZDMxMDRiNTg4MDk4ZGRjMjg3ZTBkYjFkYTZjMjM3MWExMTkyZjMyZi4uNWY0NGVkNzA4NmU4
YWExMTc2ZjhjOTc4NjQ0MGIyNWQzNjhjMTE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cApAQCAtNDI4LDEwICs0MjgsOCBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJh
dmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBObwogICAgIHJldHVy
biBsYXN0Q2xvc2VkOwogfQogCi1zdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVy
ZUFuZEFwcGVhcmFuY2UoTm9kZSogY29tbW9uQW5jZXN0b3IpCitzdGF0aWMgTm9kZSogYW5jZXN0
b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNl
c3RvckJsb2NrKQogewotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2sgPSBlbmNsb3NpbmdC
bG9jayhjb21tb25BbmNlc3Rvcik7Ci0KICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQmxvY2spCiAg
ICAgICAgIHJldHVybiAwOwogCkBAIC00NTksNiArNDU3LDI1IEBAIHN0YXRpYyBOb2RlKiBhbmNl
c3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikK
ICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1
cmVBbmRBcHBlYXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQoreworICAgIHJldHVybiBhbmNl
c3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Jsb2Nr
KGNvbW1vbkFuY2VzdG9yKSk7Cit9CisKK3N0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3Ry
dWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0soTm9kZSogY29tbW9uQW5jZXN0b3IpCit7CisgICAgaWYg
KGNvbW1vbkFuY2VzdG9yLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gRklYTUU6IERvIHdlIHdhbnQgdG8gaGFuZGxlIG1haWwgcXVvdGVzIGNvcnJlY3RseT8gSXQg
bWlnaHQgYmUgdXNlZnVsLi4uCisgICAgLy8gV2UgY2hlYXQgaGVyZSBzaW5jZSB3ZSBkb24ndCBo
YXZlIGEgcmVuZGVyIHRyZWUuCisgICAgaWYgKGNvbW1vbkFuY2VzdG9yLT5oYXNUYWdOYW1lKHRk
VGFnKQorICAgICAgICB8fCBjb21tb25BbmNlc3Rvci0+aGFzVGFnTmFtZShsaVRhZykpCisgICAg
ICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKworICAg
IHJldHVybiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGNv
bW1vbkFuY2VzdG9yKTsKK30KKwogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRv
Tm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAg
aWYgKCFzdHlsZSkKQEAgLTY4NCw2ICs3MDEsODMgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdAog
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5z
aWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgLy8gRklYTUU6IE5lZWQg
dG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBtYXJrdXAgYWxyZWFkeSBjb250YWlucyB0aGVz
ZSBtYXJrZXJzLgorICAgIGNvbnN0IGNoYXIgZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3ZWJraXQt
ZnJhZ21lbnQtbWFya2VyIjsKKworICAgIFN0cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3VwOworICAg
IHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQoZnJhZ21lbnRTdGFydCkpOworICAgIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJr
ZXJUYWcpOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVu
dFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3RhcnQpKTsKKyAgICBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKKyAg
ICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmcoZnJhZ21lbnRFbmQpKTsKKwor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkws
IHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIC8vIFdlIG1vdmUgdGhlIHJlc3VsdGluZyBET00g
dHJlZSBpbnRvIGEgRG9jdW1lbnQgc28gd2UgY2FuIGNyZWF0ZSBhIHByb3BlciBSYW5nZS4KKyAg
ICBSZWZQdHI8RG9jdW1lbnQ+IHRhZ2dlZERvY3VtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBL
VVJMKCkpOworICAgIHRhZ2dlZERvY3VtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRhZ2dlZEZy
YWdtZW50LmdldCgpKTsKKworICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCB0byBtYWtlIHRoZXNl
IFJlZlB0cnMgdG8gcHJldmVudCBwb3NzaWJsZSBjcmFzaGVzIGluIHRoZSB0cmF2ZXJzYWwgY29k
ZSBiZWxvdworICAgIC8vIGZyb20gbWFsZm9ybWVkIG1hcmt1cC4KKyAgICBOb2RlKiBzdGFydE5v
ZGUgPSAwOworICAgIE5vZGUqIGVuZE5vZGUgPSAwOworICAgIGZvciAoTm9kZSogbiA9IHRhZ2dl
ZERvY3VtZW50LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRp
Y19jYXN0PENoYXJhY3RlckRhdGEqPihuKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFnKSB7
CisgICAgICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAgICAgICAgICAgICBzdGFydE5vZGUg
PSBuOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZW5kTm9kZSA9IG47Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQo
KSwKKyAgICAgICAgcG9zaXRpb25BZnRlck5vZGUoc3RhcnROb2RlKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKSwKKyAgICAgICAgcG9zaXRpb25CZWZvcmVOb2RlKGVuZE5vZGUpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIE5v
ZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsK
KyAgICBBU1NFUlQoIWVjKTsKKyAgICBOb2RlKiBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBhbmNl
c3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0soY29tbW9uQW5jZXN0b3IpOwor
CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAvLyBTZXQgdXAgdGhlIGluaXRpYWwgcmFuZ2Ugd2Un
cmUgaW50ZXJlc3RlZCBpbi4KKyAgICBpZiAoc3BlY2lhbENvbW1vbkFuY2VzdG9yKSB7CisgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChzcGVjaWFsQ29tbW9uQW5jZXN0b3IsIGVjKTsKKyAg
ICAgICAgQVNTRVJUKCFlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYWdtZW50LT50YWtlQWxs
Q2hpbGRyZW5Gcm9tKHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihjb21tb25BbmNlc3Rvcikp
OworCisgICAgTm9kZSogbmV4dDsKKyAgICBmb3IgKE5vZGUqIG4gPSBmcmFnbWVudC0+Zmlyc3RD
aGlsZCgpOyBuOyBuID0gbmV4dCkgeworICAgICAgICBpZiAoc3RhcnROb2RlLT5pc0Rlc2NlbmRh
bnRPZihuKSkgeworICAgICAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChuLT5jaGlsZE5vZGVD
b3VudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q29udGFpbmVyTm9kZSo+KG4pLT5yZW1v
dmVBbGxDaGlsZHJlbigpOworICAgICAgICBuZXh0ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICBuLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG4sIGVjKTsKKyAgICAgICAgLy8g
RklYTUU6IFdlJ3JlIGNvbXBhcmluZyBhIGRlbGV0ZWQgcG9pbnRlci4gSXQgd29ya3MsIGJ1dCBp
dCBzZWVtcyBhIGxpdHRsZSBkYW5nZXJvdXMuCisgICAgICAgIGlmIChzdGFydE5vZGUgPT0gbikK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmb3IgKE5vZGUqIG4gPSBlbmROb2RlOyBu
OyBuID0gbmV4dCkgeworICAgICAgICBpZiAobi0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihuKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
KyAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbi0+cGFyZW50
Tm9kZSgpLT5yZW1vdmVDaGlsZChuLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0K
KworICAgIHJldHVybiBmcmFnbWVudDsKK30KKwogU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBO
b2RlKiBub2RlLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSwgVmVjdG9yPE5vZGUqPiogbm9k
ZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7CiAgICAgaWYgKCFub2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgKaW5kZXggMWJmZTkwMDY0Y2RiNzJkYjc3MmRmNzQ1MGFhNGQ3
OTAyNzlkNTdmMC4uZjI4NzE1YjIyMjk3N2M1OTFkZGIyZGQ5NTQ1ZmNkMzE2ODljNDE5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCosIGNv
bnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChE
b2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1
bnNpZ25lZCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTm9kZXMoRG9jdW1lbnQqLCBjb25zdCBWZWN0b3I8Tm9kZSo+Jik7CiAKICAg
ICBib29sIGlzUGxhaW5UZXh0TWFya3VwKE5vZGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXgg
YTg4MmU2MzA3ZTRkODY4NmVlNTc5NjI0ZjYyYTBlOGE2NzkyZDA0NC4uZTRiN2JlZWU3ODM1N2I4
YmE2ZjJhZmQ3MDA3ODhhMjc0MmRlNGQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xNjAsNyArMTYw
LDggQEAgU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0
YW5kYXJkQnVmZmVyOwogICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAg
S1VSTCBzb3VyY2VVUkw7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGlnbm9yZWQ7CisgICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRI
VE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwog
ICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gaHRtbFRleHQ7CiAgICAgICAgIH0KQEAgLTI2Nyw0ICsyNjgsMyBAQCBDaHJvbWl1bURh
dGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90
aGVyKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0u
Y3BwCmluZGV4IGIzN2VjYTRjMGNjYThlMDcyMzk5Y2EwN2Y1ZTA5MWJjYjJjOWU3N2MuLmMxMTRm
ZjViN2E2M2JjMTg0YTQ0NWY0MDQ2YWE4MDI2NTMwODE0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtLmNwcApAQCAtOTcsNyArOTcsOCBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6
Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2spCiAgICAgaWYg
KHR5cGUoKSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CiAgICAgICAgIFN0cmluZyBodG1sOwogICAg
ICAgICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xp
cGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwg
Jmlnbm9yZWRTb3VyY2VVUkwpOworICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFu
ZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQp
OwogICAgICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIGh0bWwpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggNmY1NjA3NzdkODMzOWFi
NWQyZDI3ZTM2N2NmYjA2ZDYyODQ3YWM3MS4uOTU3MmYwOTc1YmE3N2M1OWQzYzRmNDRjZDQxNTBk
N2YxMzEzYmYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGFzdGVib2FyZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCkBAIC0xNzMsMTAgKzE3MywxMiBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUAogICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZElzRm9y
bWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpIVE1MRm9ybWF0LCBidWZmZXIpKSB7CiAg
ICAgICAgIFN0cmluZyBtYXJrdXA7CiAgICAgICAgIEtVUkwgc3JjVVJMOwotICAgICAgICBQbGF0
Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7
CisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQgPSAwOworICAgICAgICB1bnNpZ25lZCBm
cmFnbWVudEVuZCA9IDA7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhU
TUwoYnVmZmVyLCAmbWFya3VwLCAmc3JjVVJMLCAmZnJhZ21lbnRTdGFydCwgJmZyYWdtZW50RW5k
KTsKIAogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQotICAgICAg
ICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAs
IHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAs
IGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90
QWxsb3dlZCk7CiAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFn
bWVudC5yZWxlYXNlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAppbmRleCBlMzIxN2JiMjAwMzhjYWIxM2JkNjRhZDMz
NTQwZWVmNzcxNTZiODg2Li45MGY0MDk1ZjkxZDZlZThmNTQxNTc5ZDg2ODM3ZjJjYzIxMzIzNjE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2xpcGJv
YXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwg
UGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAKICAgICBzdGF0aWMgU3RyaW5n
IGNsaXBib2FyZFJlYWRQbGFpblRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
cik7Ci0gICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCopOworICAgIHN0YXRpYyB2b2lkIGNsaXBi
b2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyos
IEtVUkwqLCB1bnNpZ25lZCogZnJhZ21lbnRTdGFydCwgdW5zaWduZWQqIGZyYWdtZW50RW5kKTsK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNsaXBib2FyZFJlYWRJbWFnZShQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKICAgICBzdGF0aWMgdWludDY0X3Qg
Y2xpcGJvYXJkR2V0U2VxdWVuY2VOdW1iZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAwOGUzMjZkMGYzZTQ4ZjI3NmI3ZjMxYTE5ODE1YzA1MDVkMWUwZGE3Li5iYjRlMzA5YmI1
ZGZmNmJhZGM5MTQwMzY3N2Y1ZjA1OWVkMDc4OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEwLTEzICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIENvbnRleHQtYXdhcmUgSFRNTCBwYXN0ZSBmb3IgQ2hyb21p
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTEy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdl
YktpdCBzaWRlIGZvciBwbHVtYmluZyB0byByZWNlaXZlIGNvbnRleHQgZm9yIEhUTUwgcGFzdGUu
CisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNsaXBib2FyZDo6cmVhZEhUTUwpOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTCk6
CisKIDIwMTEtMTAtMTIgIFNlcmdleSBHbGF6dW5vdiAgPHNlcmcuZ2xhenVub3ZAZ21haWwuY29t
PgogCiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwgZ2V0
cyBjb25mdXNlZCBieSBzeW5jaHJvbm91cyBmcmFtZSBsb2FkcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAyNDFhOWM2YzM0Y2VjZGJjMjg5MTU0
MzBhN2UwNTllNjhkYzE2YmE5Li4xOWY2M2MxYjgyYjBjOTk1YmRkNGE4ZjMxY2FlMDJkMTU3NGI0
ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9h
cmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaApA
QCAtNjMsNyArNjMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1hdEF2YWls
YWJsZShGb3JtYXQsIEJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIHJlYWRQbGFpblRleHQoQnVmZmVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAg
IHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKEJ1ZmZlciwgV2ViVVJMKikgeyByZXR1cm4gV2Vi
U3RyaW5nKCk7IH0KKyAgICAvLyBmcmFnbWVudFN0YXJ0IGFuZCBmcmFnbWVudEVuZCBhcmUgaW5k
ZXhlcyBpbnRvIHRoZSByZXR1cm5lZCBtYXJrdXAgdGhhdAorICAgIC8vIGluZGljYXRlIHRoZSBz
dGFydCBhbmQgZW5kIG9mIHRoZSBmcmFnbWVudCBpZiB0aGUgcmV0dXJuZWQgbWFya3VwCisgICAg
Ly8gY29udGFpbnMgYWRkaXRpb25hbCBjb250ZXh0LiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFs
IGNvbnRleHQsCisgICAgLy8gZnJhZ21lbnRTdGFydCB3aWxsIGJlIHplcm8gYW5kIGZyYWdtZW50
RW5kIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSByZXR1cm5l
ZCBtYXJrdXAuCisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoCisgICAgICAgIEJ1ZmZl
ciBidWZmZXIsIFdlYlVSTCogcGFnZVVSTCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsCisgICAg
ICAgIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KICAgICB2
aXJ0dWFsIFdlYkRhdGEgcmVhZEltYWdlKEJ1ZmZlcikgeyByZXR1cm4gV2ViRGF0YSgpOyB9CiAK
ICAgICAvLyBSZXR1cm5zIGFuIGlkZW50aWZpZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdGhlIGRhdGEKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIHBh
c3RlLCBkcmFnIGFuZCBkcm9wLCBhbmQgc2VsZWN0aW9uIGNvcHkgKG9uIFgpLgogICAgIHZpcnR1
YWwgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVhZEF2YWlsYWJsZVR5cGVzKAogICAgICAgICBCdWZm
ZXIsIGJvb2wqIGNvbnRhaW5zRmlsZW5hbWVzKSB7IHJldHVybiBXZWJWZWN0b3I8V2ViU3RyaW5n
PigpOyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3Vj
Y2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHJlcXVlc3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIu
CiAgICAgdmlydHVhbCBib29sIHJlYWREYXRhKAogICAgICAgICBCdWZmZXIsIGNvbnN0IFdlYlN0
cmluZyYgdHlwZSwgV2ViU3RyaW5nKiBkYXRhLAogICAgICAgICBXZWJTdHJpbmcqIG1ldGFkYXRh
KSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHAKaW5kZXggNTQ4NzI4NTUwYWJmYjQ4MDZlOWRlYjJlMTc5N2ViOTViNjJm
NDYwZC4uZDFhNzI0MzI1ZDgxOGViOWEwMGRhZTUwOTVkYzlkNjE0NzVhMzc2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCkBAIC0xNjgsMTEg
KzE2OCwxMSBAQCBTdHJpbmcgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KAogCiB2b2lkIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgU3RyaW5nKiBodG1sVGV4
dCwgS1VSTCogc291cmNlVVJMKQorICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVS
TCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkKIHsKICAg
ICBXZWJVUkwgdXJsOwogICAgICpodG1sVGV4dCA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5j
bGlwYm9hcmQoKS0+cmVhZEhUTUwoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6
QnVmZmVyPihidWZmZXIpLCAmdXJsKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJk
OjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwsIGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kKTsKICAg
ICAqc291cmNlVVJMID0gdXJsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110919</attachid>
            <date>2011-10-13 15:53:14 -0700</date>
            <delta_ts>2011-10-13 16:20:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111013155313.patch</filename>
            <type>text/plain</type>
            <size>16319</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li41ZjE5MDkwNWNmNjI2ZTEyOTllMWMyZTgwZmZlNDJm
NzRjYmI5MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVj
dHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3Rv
clRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0spOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKwogMjAxMS0xMC0xMyAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjk3MzYyLgpAQCAtOTcyLDcgKzk5OCw2IEBACiAgICAgICAgICog
Y3NzL0NTU1ZhbHVlS2V5d29yZHMuaW46IHJpZGdlIGFuZCBvdXRzZXQgd2VyZSB0aGUgd3Jvbmcg
d2F5IHJvdW5kCiAgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRz
Lmg6IGRpdHRvCiAKLQogMjAxMS0xMC0xMiAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgU3VwcG9ydCBwYXNzaW5nIG9wdGlvbmFsIGZpbGVuYW1lIHdoZW4gRm9ybURh
dGEuYXBwZW5kKCkgaXMgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5oCmluZGV4IGYxYjIyMTlkODZjNTlmNTFjYzIzN2Y5NzEyMzQ5YTU2ZmZiMmYwNTQu
LmEzMWY5MTI4NThiN2M2MDdjZTRlYzI5NjFlMDY3NjNkZTQ4NDU4YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTcxLDYgKzcxLDggQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIG5vZGVUb1Nr
aXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5KTsKIAorICAgIHN0YXRpYyB2b2lkIGFwcGVu
ZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9IDApOwpAQCAtODYs
NyArODgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoU3RyaW5nQnVp
bGRlciYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKICAgICBFbnRpdHlNYXNrIGVudGl0eU1h
c2tGb3JUZXh0KFRleHQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJp
bmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKLSAgICB2b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVp
bGRlciYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBwZW5kRG9jdW1l
bnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CiAgICAg
dm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nQnVpbGRlciYgb3V0LCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZDMxMDRiNTg4MDk4ZGRjMjg3ZTBkYjFk
YTZjMjM3MWExMTkyZjMyZi4uNmZmNGMzNzhlNGE3NTc5ZTQ0MmM2Y2RiYTVhMjQ0YzlhNjg2YjRj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDI4LDEwICs0MjgsOCBAQCBOb2Rl
KiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24o
Tm9kZSogc3RhcnROb2RlLCBObwogICAgIHJldHVybiBsYXN0Q2xvc2VkOwogfQogCi1zdGF0aWMg
Tm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2UoTm9kZSogY29tbW9u
QW5jZXN0b3IpCitzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVh
cmFuY2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrKQogewotICAgIE5vZGUqIGNv
bW1vbkFuY2VzdG9yQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rvcik7Ci0KICAg
ICBpZiAoIWNvbW1vbkFuY2VzdG9yQmxvY2spCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00NTks
NiArNDU3LDI1IEBAIHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBw
ZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGlj
IE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlKE5vZGUqIGNvbW1v
bkFuY2VzdG9yKQoreworICAgIHJldHVybiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBw
ZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFuY2VzdG9yKSk7Cit9CisKK3N0
YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0soTm9k
ZSogY29tbW9uQW5jZXN0b3IpCit7CisgICAgaWYgKGNvbW1vbkFuY2VzdG9yLT5pc1RleHROb2Rl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IERvIHdlIHdhbnQgdG8gaGFu
ZGxlIG1haWwgcXVvdGVzIGNvcnJlY3RseT8gSXQgbWlnaHQgYmUgdXNlZnVsLi4uCisgICAgLy8g
V2UgY2hlYXQgaGVyZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyIHRyZWUuCisgICAgaWYg
KGNvbW1vbkFuY2VzdG9yLT5oYXNUYWdOYW1lKHRkVGFnKQorICAgICAgICB8fCBjb21tb25BbmNl
c3Rvci0+aGFzVGFnTmFtZShsaVRhZykpCisgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9u
QW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKworICAgIHJldHVybiBhbmNlc3RvclRvUmV0YWluU3Ry
dWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGNvbW1vbkFuY2VzdG9yKTsKK30KKwogc3RhdGlj
IGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKCFzdHlsZSkKQEAgLTY4NCw2ICs3MDEs
ODIgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7CiB9CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1
cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZSBtYXJrdXAgYWxyZWFkeSBjb250YWlucyB0aGVzZSBtYXJrZXJzLgorICAgIGNvbnN0IGNoYXIg
ZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3ZWJraXQtZnJhZ21lbnQtbWFya2VyIjsKKworICAgIFN0
cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3VwOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3Vw
LmxlZnQoZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21t
ZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOworICAgIHRhZ2dlZE1hcmt1cC5h
cHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdt
ZW50U3RhcnQpKTsKKyAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRN
YXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1
cC5zdWJzdHJpbmcoZnJhZ21lbnRFbmQpKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFn
Z2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAg
IC8vIFdlIG1vdmUgdGhlIHJlc3VsdGluZyBET00gdHJlZSBpbnRvIGEgRG9jdW1lbnQgc28gd2Ug
Y2FuIGNyZWF0ZSBhIHByb3BlciBSYW5nZS4KKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHRhZ2dlZERv
Y3VtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBLVVJMKCkpOworICAgIHRhZ2dlZERvY3VtZW50
LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRhZ2dlZEZyYWdtZW50LmdldCgpKTsKKworICAgIFJlZlB0
cjxOb2RlPiBzdGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGU7CisgICAgZm9yIChO
b2RlKiBub2RlID0gdGFnZ2VkRG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG5vZGUp
LT5kYXRhKCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAgICAgIGlmICghc3RhcnRO
b2RlKQorICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghKHN0YXJ0Tm9k
ZSAmJiBlbmROb2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKKyAgICAgICAgcG9zaXRp
b25BZnRlck5vZGUoc3RhcnROb2RlLmdldCgpKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwK
KyAgICAgICAgcG9zaXRpb25CZWZvcmVOb2RlKGVuZE5vZGUuZ2V0KCkpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIE5vZGUqIGNv
bW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKKyAgICBB
U1NFUlQoIWVjKTsKKyAgICBOb2RlKiBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBhbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUhBQ0soY29tbW9uQW5jZXN0b3IpOworCisgICAg
Ly8gU2V0IHVwIHRoZSBpbml0aWFsIHJhbmdlIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBpZiAoc3BlY2lhbENvbW1vbkFuY2VzdG9yKSB7CisgICAgICAgIGZy
YWdtZW50LT5hcHBlbmRDaGlsZChzcGVjaWFsQ29tbW9uQW5jZXN0b3IsIGVjKTsKKyAgICAgICAg
QVNTRVJUKCFlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRy
ZW5Gcm9tKHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihjb21tb25BbmNlc3RvcikpOworCisg
ICAgTm9kZSogbmV4dDsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+
aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIG5leHQgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PENvbnRhaW5lck5vZGUqPihub2RlLmdldCgpKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICAg
ICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbm9kZS0+cGFyZW50
Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLmdldCgpLCBlYyk7CisgICAgICAgIGlmIChzdGFydE5v
ZGUgPT0gbm9kZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChlbmRO
b2RlLT5wYXJlbnROb2RlKCkpOworICAgIGZvciAoTm9kZSogbm9kZSA9IGVuZE5vZGUuZ2V0KCk7
IG5vZGU7IG5vZGUgPSBuZXh0KSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgp
KQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q29udGFpbmVyTm9kZSo+KG5vZGUpLT5yZW1vdmVB
bGxDaGlsZHJlbigpOworICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUsIGVjKTsKKyAgICAg
ICAgQVNTRVJUKCFlYyk7CisgICAgfQorCisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCiBTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5P
bmx5LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJM
cykKIHsKICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAppbmRleCAxYmZlOTAw
NjRjZGI3MmRiNzcyZGY3NDUwYWE0ZDc5MDI3OWQ1N2YwLi5mMjg3MTViMjIyOTc3YzU5MWRkYjJk
ZDk1NDVmY2QzMTY4OWM0MTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKQEAgLTQ1LDYgKzQ1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHRleHQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdB
bGxvd2VkKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIHVu
c2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBjb25zdCBTdHJpbmcm
IGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0
IFZlY3RvcjxOb2RlKj4mKTsKIAogICAgIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSAqbm9k
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcAppbmRleCBhODgyZTYzMDdlNGQ4Njg2ZWU1Nzk2MjRmNjJhMGU4YTY3
OTJkMDQ0Li5lNGI3YmVlZTc4MzU3YjhiYTZmMmFmZDcwMDc4OGEyNzQyZGU0ZDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5jcHAKQEAgLTE2MCw3ICsxNjAsOCBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0Ojpn
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKICAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcg
aHRtbFRleHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIFBsYXRm
b3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VV
UkwpOworICAgICAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgICAgIFBsYXRmb3Jt
U3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkws
ICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0Lmlz
RW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKICAgICAgICAgfQpAQCAtMjY3
LDQgKzI2OCwzIEBAIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Rh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYjM3ZWNhNGMwY2NhOGUwNzIzOTljYTA3
ZjVlMDkxYmNiMmM5ZTc3Yy4uYzExNGZmNWI3YTYzYmMxODRhNDQ1ZjQwNDZhYTgwMjY1MzA4MTQ5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC05Nyw3ICs5Nyw4IEBAIHZvaWQgRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxi
YWNrPiBjYWxsYmFjaykKICAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKICAg
ICAgICAgU3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKLSAgICAg
ICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6
U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCk7CisgICAgICAgIHVuc2ln
bmVkIGlnbm9yZWQ7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwo
UGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwgJmlnbm9yZWRTb3VyY2VV
UkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxi
YWNrKG1fY29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNw
cAppbmRleCA2ZjU2MDc3N2Q4MzM5YWI1ZDJkMjdlMzY3Y2ZiMDZkNjI4NDdhYzcxLi45NTcyZjA5
NzViYTc3YzU5ZDNjNGY0NGNkNDE1MGQ3ZjEzMTNiZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTE3
MywxMCArMTczLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6
ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQCiAgICAgaWYgKFBsYXRmb3Jt
U3VwcG9ydDo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhU
TUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cDsKICAgICAgICAgS1VS
TCBzcmNVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVm
ZmVyLCAmbWFya3VwLCAmc3JjVVJMKTsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydCA9
IDA7CisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsKKyAgICAgICAgUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwsICZmcmFn
bWVudFN0YXJ0LCAmZnJhZ21lbnRFbmQpOwogCiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9Ci0gICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJh
bWUtPmRvY3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpOworICAgICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoZnJh
bWUtPmRvY3VtZW50KCksIG1hcmt1cCwgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQsIHNyY1VS
TCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAgICAgaWYgKGZyYWdtZW50KQog
ICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCmluZGV4IGUz
MjE3YmIyMDAzOGNhYjEzYmQ2NGFkMzM1NDBlZWY3NzE1NmI4ODYuLjkwZjQwOTVmOTFkNmVlOGY1
NDE1NzlkODY4MzdmMmNjMjEzMjM2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
KTsKIAogICAgIHN0YXRpYyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFk
SFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7
CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNs
aXBib2FyZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCosIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1
bnNpZ25lZCogZnJhZ21lbnRFbmQpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gY2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIp
OwogICAgIHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1ZW5jZU51bWJlcigpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRhNTRmODgxNTE5M2E3NzA3MGQ0ZDg3NDc3ZTc4
NTljYjhjZGRmNDEuLjhjNWY3ZjEwZGRjNjNmNGI2ZjJkZGJjMjAwYjg3YWNhN2I4MmVmOWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMTMgIERh
bmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2Fy
ZSBIVE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0IHNpZGUgZm9yIHBsdW1iaW5nIHRvIHJlY2VpdmUg
Y29udGV4dCBmb3IgSFRNTCBwYXN0ZS4KKworICAgICAgICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2xpcGJvYXJkOjpyZWFkSFRNTCk6CisgICAgICAgICog
c3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBv
cnQ6OmNsaXBib2FyZFJlYWRIVE1MKToKKwogMjAxMS0xMC0xMyAgUGVuZyBIdWFuZyAgPHNoYXdu
LnAuaHVhbmdAZ21haWwuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgc2VsZWN0aW9u
Qm91bmRzKCkgbWV0aG9kIHRvIFdlYldpZGdldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTljNmMzNGNlY2RiYzI4OTE1NDMwYTdlMDU5
ZTY4ZGMxNmJhOS4uMTlmNjNjMWI4MmIwYzk5NWJkZDRhOGYzMWNhZTAyZDE1NzRiNGYxYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKQEAgLTYzLDcg
KzYzLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtYXRBdmFpbGFibGUoRm9y
bWF0LCBCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBy
ZWFkUGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFs
IFdlYlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9CisgICAgLy8gZnJhZ21lbnRTdGFydCBhbmQgZnJhZ21lbnRFbmQgYXJlIGluZGV4ZXMgaW50
byB0aGUgcmV0dXJuZWQgbWFya3VwIHRoYXQKKyAgICAvLyBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5k
IGVuZCBvZiB0aGUgZnJhZ21lbnQgaWYgdGhlIHJldHVybmVkIG1hcmt1cAorICAgIC8vIGNvbnRh
aW5zIGFkZGl0aW9uYWwgY29udGV4dC4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBjb250ZXh0
LAorICAgIC8vIGZyYWdtZW50U3RhcnQgd2lsbCBiZSB6ZXJvIGFuZCBmcmFnbWVudEVuZCB3aWxs
IGJlIHRoZSBzYW1lIGFzIHRoZSBsZW5ndGgKKyAgICAvLyBvZiB0aGUgcmV0dXJuZWQgbWFya3Vw
LgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAgICAgICBCdWZmZXIgYnVmZmVy
LCBXZWJVUkwqIHBhZ2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LAorICAgICAgICB1bnNp
Z25lZCogZnJhZ21lbnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAgICAgdmlydHVhbCBX
ZWJEYXRhIHJlYWRJbWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRhdGEoKTsgfQogCiAgICAgLy8g
UmV0dXJucyBhbiBpZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0
aGVyIHRoZSBkYXRhCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBwYXN0ZSwgZHJh
ZyBhbmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4KICAgICB2aXJ0dWFsIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgQnVmZmVyLCBib29s
KiBjb250YWluc0ZpbGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsgfQot
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxs
eSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1
ZXN0ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLgogICAgIHZp
cnR1YWwgYm9vbCByZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBjb25zdCBXZWJTdHJpbmcmIHR5
cGUsIFdlYlN0cmluZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5nKiBtZXRhZGF0YSkgeyByZXR1
cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBv
cnQuY3BwCmluZGV4IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3OTdlYjk1YjYyZjQ2MGQuLmQx
YTcyNDMyNWQ4MThlYjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApAQCAtMTY4LDExICsxNjgsMTEg
QEAgU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCgKIAogdm9p
ZCBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwq
IHNvdXJjZVVSTCkKKyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwsIHVuc2ln
bmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpCiB7CiAgICAgV2ViVVJM
IHVybDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJk
KCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4o
YnVmZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVy
PihidWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCk7CiAgICAgKnNvdXJj
ZVVSTCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110925</attachid>
            <date>2011-10-13 16:20:48 -0700</date>
            <delta_ts>2011-10-14 00:05:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111013162047.patch</filename>
            <type>text/plain</type>
            <size>17484</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li5hYWRkMTkwMTgzMjMyM2RlYWYyNzJmZWQwZGIyZWI4
NWJiN2VlNWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVj
dHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphbmNlc3Rv
clRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZVdpdGhOb1JlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KToKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omdl
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06Omdl
dEFzU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisKIDIwMTEt
MTAtMTMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NzM2Mi4KQEAgLTk3Miw3ICs5OTgsNiBAQAog
ICAgICAgICAqIGNzcy9DU1NWYWx1ZUtleXdvcmRzLmluOiByaWRnZSBhbmQgb3V0c2V0IHdlcmUg
dGhlIHdyb25nIHdheSByb3VuZAogICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZUNvbnN0YW50cy5oOiBkaXR0bwogCi0KIDIwMTEtMTAtMTIgIEppYW4gTGkgIDxqaWFubGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFN1cHBvcnQgcGFzc2luZyBvcHRpb25hbCBmaWxlbmFtZSB3
aGVuIEZvcm1EYXRhLmFwcGVuZCgpIGlzIHVzZWQgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAppbmRleCBmMWIyMjE5ZDg2YzU5ZjUxY2MyMzdmOTcxMjM0OWE1
NmZmYjJmMDU0Li5hMzFmOTEyODU4YjdjNjA3Y2U0ZWMyOTYxZTA2NzYzZGU0ODQ1OGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCkBAIC03MSw2ICs3MSw4
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2Rl
KiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSk7CiAKKyAgICBzdGF0aWMg
dm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21t
ZW50KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhOb2RlKiwgTmFtZXNwYWNlcyogPSAw
KTsKQEAgLTg2LDcgKzg4LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNl
KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFz
ayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFw
cGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlw
ZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmly
dHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IGQzMTA0YjU4ODA5OGRk
YzI4N2UwZGIxZGE2YzIzNzFhMTE5MmYzMmYuLjNhYjg5ZWYzNWE5ZjcxOTkwNzFiNDdmY2Q3YjVh
Y2M5M2QyZTdlNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTQyOCwxMCArNDI4
LDEwIEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU5vZGVzRm9yU2Vy
aWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vCiAgICAgcmV0dXJuIGxhc3RDbG9zZWQ7CiB9
CiAKLXN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShO
b2RlKiBjb21tb25BbmNlc3RvcikKKy8vIEZJWE1FOiBEbyB3ZSB3YW50IHRvIGhhbmRsZSBtYWls
IHF1b3RlcyBoZXJlIGluc3RlYWQ/IEl0IG1pZ2h0IGJlIHVzZWZ1bC4uLgorLy8gVGhpcyBpcyBj
dXJyZW50bHkgaGFuZGxlZCBvbmUgbGV2ZWwgYWJvdXQgYW5jZXN0b3JUb1JldGFpblN0cnVjdHVy
ZUFuZEFwcGVhcmFuY2UuCitzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFu
ZEFwcGVhcmFuY2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrKQogewotICAgIE5v
ZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rvcik7
Ci0KICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQmxvY2spCiAgICAgICAgIHJldHVybiAwOwogCkBA
IC00NTksNiArNDU5LDUwIEBAIHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJl
QW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikKICAgICByZXR1cm4gMDsKIH0KIAor
c3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlKE5vZGUq
IGNvbW1vbkFuY2VzdG9yKQoreworICAgIHJldHVybiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJl
QW5kQXBwZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFuY2VzdG9yKSk7Cit9
CisKK3N0YXRpYyBib29sIGlzSHRtbEJsb2NrTGV2ZWxFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUp
Cit7CisgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCB1c2UgYSBoYXNoIHNldCBoZXJlLi4u
CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUoYWRkcmVzc1RhZykKKyAgICAgICAgfHwgbm9k
ZS0+aGFzVGFnTmFtZShhcnRpY2xlVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGFz
aWRlVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKQorICAgICAgICB8
fCBub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoY2FudmFzVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGRkVGFnKQorICAg
ICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGRpdlRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFn
TmFtZShkbFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShmaWdjYXB0aW9uVGFnKQorICAgICAgICB8fCBub2Rl
LT5oYXNUYWdOYW1lKGZpZ3VyZVRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShmb290
ZXJUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykKKyAgICAgICAgfHwg
bm9kZS0+aGFzVGFnTmFtZShoZWFkZXJUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUo
aGdyb3VwVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGhyVGFnKQorICAgICAgICB8
fCBub2RlLT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKG9sVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKG91dHB1dFRhZykKKyAgICAg
ICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KHByZVRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShzZWN0aW9uVGFnKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKHRmb290VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHVsVGFnKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKTsKK30KKworc3RhdGljIE5vZGUqIGFuY2Vz
dG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIoTm9kZSogY29t
bW9uQW5jZXN0b3IpCit7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3JCbG9jayA9IGVuY2xvc2lu
Z05vZGVPZlR5cGUoCisgICAgICAgIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjb21tb25B
bmNlc3RvciksIGlzSHRtbEJsb2NrTGV2ZWxFbGVtZW50KTsKKyAgICByZXR1cm4gYW5jZXN0b3JU
b1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhjb21tb25BbmNlc3RvckJsb2Nr
KTsKK30KKwogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKCFzdHlsZSkK
QEAgLTY4NCw2ICs3MjgsODIgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdAogICAgIHJldHVybiBm
cmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21l
bnRFbmQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
IHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHRoZSBtYXJrdXAgYWxyZWFkeSBjb250YWlucyB0aGVzZSBtYXJrZXJzLgor
ICAgIGNvbnN0IGNoYXIgZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3ZWJraXQtZnJhZ21lbnQtbWFy
a2VyIjsKKworICAgIFN0cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3VwOworICAgIHRhZ2dlZE1hcmt1
cC5hcHBlbmQobWFya3VwLmxlZnQoZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRDb21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOworICAg
IHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFn
bWVudEVuZCAtIGZyYWdtZW50U3RhcnQpKTsKKyAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q29tbWVudCh0YWdnZWRNYXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRNYXJr
dXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmcoZnJhZ21lbnRFbmQpKTsKKworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChkb2N1bWVudCwgdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHNjcmlwdGluZ1Bl
cm1pc3Npb24pOworICAgIC8vIFdlIG1vdmUgdGhlIHJlc3VsdGluZyBET00gdHJlZSBpbnRvIGEg
RG9jdW1lbnQgc28gd2UgY2FuIGNyZWF0ZSBhIHByb3BlciBSYW5nZS4KKyAgICBSZWZQdHI8RG9j
dW1lbnQ+IHRhZ2dlZERvY3VtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBLVVJMKCkpOworICAg
IHRhZ2dlZERvY3VtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRhZ2dlZEZyYWdtZW50LmdldCgp
KTsKKworICAgIFJlZlB0cjxOb2RlPiBzdGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5v
ZGU7CisgICAgZm9yIChOb2RlKiBub2RlID0gdGFnZ2VkRG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobm9k
ZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFj
dGVyRGF0YSo+KG5vZGUpLT5kYXRhKCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAg
ICAgIGlmICghc3RhcnROb2RlKQorICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghKHN0YXJ0Tm9kZSAmJiBlbmROb2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwK
KyAgICAgICAgcG9zaXRpb25BZnRlck5vZGUoc3RhcnROb2RlLmdldCgpKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSwKKyAgICAgICAgcG9zaXRpb25CZWZvcmVOb2RlKGVuZE5vZGUuZ2V0KCkp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKyAgICBOb2RlKiBzcGVjaWFsQ29tbW9uQW5jZXN0
b3IgPSBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZVdpdGhOb1JlbmRlcmVy
KGNvbW1vbkFuY2VzdG9yKTsKKworICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCByYW5nZSB3ZSdy
ZSBpbnRlcmVzdGVkIGluLgorICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgaWYgKHNwZWNpYWxDb21t
b25BbmNlc3RvcikgeworICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3BlY2lhbENvbW1v
bkFuY2VzdG9yLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0gZWxzZQorICAgICAg
ICBmcmFnbWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbShzdGF0aWNfY2FzdDxDb250YWluZXJOb2Rl
Kj4oY29tbW9uQW5jZXN0b3IpKTsKKworICAgIE5vZGUqIG5leHQ7CisgICAgZm9yIChSZWZQdHI8
Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7
CisgICAgICAgIGlmIChzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkp
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4obm9kZS5nZXQoKSktPnJl
bW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwg
ZWMpOworICAgICAgICBpZiAoc3RhcnROb2RlID09IG5vZGUpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBBU1NFUlQoZW5kTm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBlbmROb2RlLmdldCgpOyBub2RlOyBub2RlID0gbmV4dCkgeworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbnRh
aW5lck5vZGUqPihub2RlKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICAgICAgbmV4dCA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1v
dmVDaGlsZChub2RlLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0KKworICAgIHJl
dHVybiBmcmFnbWVudDsKK30KKwogU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2Rl
LCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBYnNv
bHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmgKaW5kZXggMWJmZTkwMDY0Y2RiNzJkYjc3MmRmNzQ1MGFhNGQ3OTAyNzlkNTdm
MC4uZjI4NzE1YjIyMjk3N2M1OTFkZGIyZGQ5NTQ1ZmNkMzE2ODljNDE5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5n
ZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCosIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCos
IGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBm
cmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24pOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTm9kZXMoRG9jdW1lbnQqLCBjb25zdCBWZWN0b3I8Tm9kZSo+Jik7CiAKICAgICBib29sIGlz
UGxhaW5UZXh0TWFya3VwKE5vZGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggYTg4MmU2MzA3
ZTRkODY4NmVlNTc5NjI0ZjYyYTBlOGE2NzkyZDA0NC4uZTRiN2JlZWU3ODM1N2I4YmE2ZjJhZmQ3
MDA3ODhhMjc0MmRlNGQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xNjAsNyArMTYwLDggQEAgU3Ry
aW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wm
IHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVm
ZmVyOwogICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAgS1VSTCBzb3Vy
Y2VVUkw7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1
ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9y
ZWQ7CisgICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZl
ciwgJmh0bWxUZXh0LCAmc291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwogICAgICAgICAg
ICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gaHRt
bFRleHQ7CiAgICAgICAgIH0KQEAgLTI2Nyw0ICsyNjgsMyBAQCBDaHJvbWl1bURhdGFPYmplY3Q6
OkNocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVyKQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCmluZGV4
IGIzN2VjYTRjMGNjYThlMDcyMzk5Y2EwN2Y1ZTA5MWJjYjJjOWU3N2MuLmMxMTRmZjViN2E2M2Jj
MTg0YTQ0NWY0MDQ2YWE4MDI2NTMwODE0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcApA
QCAtOTcsNyArOTcsOCBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJp
bmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2spCiAgICAgaWYgKHR5cGUoKSA9
PSBtaW1lVHlwZVRleHRIVE1MKSB7CiAgICAgICAgIFN0cmluZyBodG1sOwogICAgICAgICBLVVJM
IGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVh
ZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRtbCwgJmlnbm9yZWRT
b3VyY2VVUkwpOworICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZl
ciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwogICAgICAg
ICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIGh0bWwpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGFzdGVib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggNmY1NjA3NzdkODMzOWFiNWQyZDI3ZTM2
N2NmYjA2ZDYyODQ3YWM3MS4uOTU3MmYwOTc1YmE3N2M1OWQzYzRmNDRjZDQxNTBkN2YxMzEzYmYx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2Fy
ZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwCkBAIC0xNzMsMTAgKzE3MywxMiBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUAogICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZElzRm9ybWF0QXZhaWxh
YmxlKFBhc3RlYm9hcmRQcml2YXRlOjpIVE1MRm9ybWF0LCBidWZmZXIpKSB7CiAgICAgICAgIFN0
cmluZyBtYXJrdXA7CiAgICAgICAgIEtVUkwgc3JjVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBv
cnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7CisgICAgICAg
IHVuc2lnbmVkIGZyYWdtZW50U3RhcnQgPSAwOworICAgICAgICB1bnNpZ25lZCBmcmFnbWVudEVu
ZCA9IDA7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVy
LCAmbWFya3VwLCAmc3JjVVJMLCAmZnJhZ21lbnRTdGFydCwgJmZyYWdtZW50RW5kKTsKIAogICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQotICAgICAgICAgICAgY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIHNyY1VSTCwg
RnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIGZyYWdtZW50
U3RhcnQsIGZyYWdtZW50RW5kLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7
CiAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Q
bGF0Zm9ybVN1cHBvcnQuaAppbmRleCBlMzIxN2JiMjAwMzhjYWIxM2JkNjRhZDMzNTQwZWVmNzcx
NTZiODg2Li45MGY0MDk1ZjkxZDZlZThmNTQxNTc5ZDg2ODM3ZjJjYzIxMzIzNjE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaApA
QCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkSXNGb3Jt
YXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAKICAgICBzdGF0aWMgU3RyaW5nIGNsaXBib2Fy
ZFJlYWRQbGFpblRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0gICAg
c3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCopOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRI
VE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyosIEtVUkwqLCB1
bnNpZ25lZCogZnJhZ21lbnRTdGFydCwgdW5zaWduZWQqIGZyYWdtZW50RW5kKTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNsaXBib2FyZFJlYWRJbWFnZShQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKICAgICBzdGF0aWMgdWludDY0X3QgY2xpcGJvYXJk
R2V0U2VxdWVuY2VOdW1iZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkYTU0
Zjg4MTUxOTNhNzcwNzBkNGQ4NzQ3N2U3ODU5Y2I4Y2RkZjQxLi44YzVmN2YxMGRkYzYzZjRiNmYy
ZGRiYzIwMGI4N2FjYTdiODJlZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDExLTEwLTEzICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIENvbnRleHQtYXdhcmUgSFRNTCBwYXN0ZSBmb3IgQ2hyb21pdW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdCBzaWRl
IGZvciBwbHVtYmluZyB0byByZWNlaXZlIGNvbnRleHQgZm9yIEhUTUwgcGFzdGUuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViQ2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNsaXBib2Fy
ZDo6cmVhZEhUTUwpOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTCk6CisKIDIwMTEt
MTAtMTMgIFBlbmcgSHVhbmcgIDxzaGF3bi5wLmh1YW5nQGdtYWlsLmNvbT4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZCBhIHNlbGVjdGlvbkJvdW5kcygpIG1ldGhvZCB0byBXZWJXaWRnZXQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oCmluZGV4IDI0MWE5
YzZjMzRjZWNkYmMyODkxNTQzMGE3ZTA1OWU2OGRjMTZiYTkuLjE5ZjYzYzFiODJiMGM5OTViZGQ0
YThmMzFjYWUwMmQxNTc0YjRmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNsaXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkNsaXBib2FyZC5oCkBAIC02Myw3ICs2MywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzRm9ybWF0QXZhaWxhYmxlKEZvcm1hdCwgQnVmZmVyKSB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZFBsYWluVGV4dChCdWZmZXIpIHsgcmV0dXJuIFdl
YlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoQnVmZmVyLCBXZWJV
UkwqKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIC8vIGZyYWdtZW50U3RhcnQgYW5kIGZy
YWdtZW50RW5kIGFyZSBpbmRleGVzIGludG8gdGhlIHJldHVybmVkIG1hcmt1cCB0aGF0CisgICAg
Ly8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGZyYWdtZW50IGlmIHRoZSByZXR1
cm5lZCBtYXJrdXAKKyAgICAvLyBjb250YWlucyBhZGRpdGlvbmFsIGNvbnRleHQuIElmIHRoZXJl
IGlzIG5vIGFkZGl0aW9uYWwgY29udGV4dCwKKyAgICAvLyBmcmFnbWVudFN0YXJ0IHdpbGwgYmUg
emVybyBhbmQgZnJhZ21lbnRFbmQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgbGVuZ3RoCisgICAg
Ly8gb2YgdGhlIHJldHVybmVkIG1hcmt1cC4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRN
TCgKKyAgICAgICAgQnVmZmVyIGJ1ZmZlciwgV2ViVVJMKiBwYWdlVVJMLCB1bnNpZ25lZCogZnJh
Z21lbnRTdGFydCwKKyAgICAgICAgdW5zaWduZWQqIGZyYWdtZW50RW5kKSB7IHJldHVybiBXZWJT
dHJpbmcoKTsgfQogICAgIHZpcnR1YWwgV2ViRGF0YSByZWFkSW1hZ2UoQnVmZmVyKSB7IHJldHVy
biBXZWJEYXRhKCk7IH0KIAogICAgIC8vIFJldHVybnMgYW4gaWRlbnRpZmllciB3aGljaCBjYW4g
YmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YQpAQCAtODcsNyArOTQsNyBAQCBw
dWJsaWM6CiAgICAgLy8gcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weSAo
b24gWCkuCiAgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZWFkQXZhaWxhYmxlVHlw
ZXMoCiAgICAgICAgIEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpIHsgcmV0dXJuIFdl
YlZlY3RvcjxXZWJTdHJpbmc+KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVl
c3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIuIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIHN1Y2Nlc3NmdWxseSByZWFk
IGZyb20gdGhlIGJ1ZmZlci4KICAgICB2aXJ0dWFsIGJvb2wgcmVhZERhdGEoCiAgICAgICAgIEJ1
ZmZlciwgY29uc3QgV2ViU3RyaW5nJiB0eXBlLCBXZWJTdHJpbmcqIGRhdGEsCiAgICAgICAgIFdl
YlN0cmluZyogbWV0YWRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAppbmRleCA1NDg3Mjg1NTBhYmZiNDgwNmU5
ZGViMmUxNzk3ZWI5NWI2MmY0NjBkLi5kMWE3MjQzMjVkODE4ZWI5YTAwZGFlNTA5NWRjOWQ2MTQ3
NWEzNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9y
dC5jcHAKQEAgLTE2OCwxMSArMTY4LDExIEBAIFN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoCiAKIHZvaWQgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFk
SFRNTCgKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKLSAg
ICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwpCisgICAgU3RyaW5nKiBodG1sVGV4
dCwgS1VSTCogc291cmNlVVJMLCB1bnNpZ25lZCogZnJhZ21lbnRTdGFydCwgdW5zaWduZWQqIGZy
YWdtZW50RW5kKQogewogICAgIFdlYlVSTCB1cmw7CiAgICAgKmh0bWxUZXh0ID0gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKLSAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOworICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCwgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQpOwogICAgICpzb3VyY2VVUkwgPSB1cmw7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110971</attachid>
            <date>2011-10-14 00:05:23 -0700</date>
            <delta_ts>2011-10-14 12:16:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111014000522.patch</filename>
            <type>text/plain</type>
            <size>17401</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li4zY2E5MDZkYzRhMDRhN2UwMWFiZGYwYTIxMjQzYWVl
NWE5YWY1YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGVjaWFsbHlTdHlsZWRCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjppc0hUTUxCbG9ja0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5j
ZVdpdGhOb1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cFdpdGhDb250ZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
UGxhdGZvcm1TdXBwb3J0Lmg6CisKIDIwMTEtMTAtMTMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5
NzM2Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAppbmRleCBm
MWIyMjE5ZDg2YzU5ZjUxY2MyMzdmOTcxMjM0OWE1NmZmYjJmMDU0Li5hMzFmOTEyODU4YjdjNjA3
Y2U0ZWMyOTYxZTA2NzYzZGU0ODQ1OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5oCkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBz
ZXJpYWxpemVOb2RlcyhOb2RlKiBub2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5
IGNoaWxkcmVuT25seSk7CiAKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKKwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRT
dGFydFRhZyhOb2RlKiwgTmFtZXNwYWNlcyogPSAwKTsKQEAgLTg2LDcgKzg4LDYgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
LCBOYW1lc3BhY2VzJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBU
ZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3Qg
U3RyaW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vz
c2luZ0luc3RydWN0aW9uKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCmluZGV4IGQzMTA0YjU4ODA5OGRkYzI4N2UwZGIxZGE2YzIzNzFhMTE5MmYzMmYu
LmM3ZmYyOWQ4NGZjMDZlZDAxMDQ2Yzk0ZWVkZjUyNGRiOWU0NmJjYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKQEAgLTQyOCwxMCArNDI4LDM0IEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjp0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUs
IE5vCiAgICAgcmV0dXJuIGxhc3RDbG9zZWQ7CiB9CiAKLXN0YXRpYyBOb2RlKiBhbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikKK2Jvb2wg
aXNTcGVjaWFsbHlTdHlsZWRCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewotICAgIE5vZGUqIGNv
bW1vbkFuY2VzdG9yQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rvcik7CisgICAg
cmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUobGlzdGluZ1RhZykKKyAgICAgICAgfHwgbm9kZS0+aGFz
VGFnTmFtZShvbFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVUYWcpCisgICAg
ICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1Rh
Z05hbWUodWxUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoeG1wVGFnKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKGgxVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KGgyVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgzVGFnKQorICAgICAgICB8fCBu
b2RlLT5oYXNUYWdOYW1lKGg0VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg1VGFn
KQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg2VGFnKTsKK30KKworc3RhdGljIGJvb2wg
aXNIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUt
Pmhhc1RhZ05hbWUodGRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpCisg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKKyAgICAgICAgfHwgaXNT
cGVjaWFsbHlTdHlsZWRCbG9jayhub2RlKTsKK30KIAorLy8gRklYTUU6IERvIHdlIHdhbnQgdG8g
aGFuZGxlIG1haWwgcXVvdGVzIGhlcmUgaW5zdGVhZD8gSXQgbWlnaHQgYmUgdXNlZnVsLi4uCisv
LyBUaGlzIGlzIGN1cnJlbnRseSBoYW5kbGVkIG9uZSBsZXZlbCBhYm91dCBhbmNlc3RvclRvUmV0
YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZS4KK3N0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWlu
U3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2sp
Cit7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvckJsb2NrKQogICAgICAgICByZXR1cm4gMDsKIApA
QCAtNDQzLDIyICs0NjcsMjMgQEAgc3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1
cmVBbmRBcHBlYXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQogICAgICAgICByZXR1cm4gdGFi
bGU7CiAgICAgfQogCi0gICAgaWYgKGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUobGlz
dGluZ1RhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShvbFRh
ZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShwcmVUYWcpCi0g
ICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodGFibGVUYWcpCi0gICAg
ICAgIHx8IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodWxUYWcpCi0gICAgICAgIHx8
IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUoeG1wVGFnKQotICAgICAgICB8fCBjb21t
b25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKGgxVGFnKQotICAgICAgICB8fCBjb21tb25BbmNl
c3RvckJsb2NrLT5oYXNUYWdOYW1lKGgyVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJs
b2NrLT5oYXNUYWdOYW1lKGgzVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5o
YXNUYWdOYW1lKGg0VGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdO
YW1lKGg1VGFnKSkKKyAgICBpZiAoaXNTcGVjaWFsbHlTdHlsZWRCbG9jayhjb21tb25BbmNlc3Rv
ckJsb2NrKSkKICAgICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQmxvY2s7CiAKICAgICByZXR1
cm4gMDsKIH0KIAorc3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBl
YXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQoreworICAgIHJldHVybiBhbmNlc3RvclRvUmV0
YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFu
Y2VzdG9yKSk7Cit9CisKK3N0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5k
QXBwZWFyYW5jZVdpdGhOb1JlbmRlcmVyKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQoreworICAgIE5v
ZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2sgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShjb21tb25BbmNlc3RvciksIGlzSFRNTEJsb2NrRWxlbWVudCk7Cisg
ICAgcmV0dXJuIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlRm9yQmxvY2so
Y29tbW9uQW5jZXN0b3JCbG9jayk7Cit9CisKIHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09y
RXF1YWxUb05vbmUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0eUlEKQog
ewogICAgIGlmICghc3R5bGUpCkBAIC02ODQsNiArNzA5LDc4IEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QKICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3Rh
cnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQoreworICAgIC8vIEZJWE1F
OiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbWFya3VwIGFscmVhZHkgY29udGFp
bnMgdGhlc2UgbWFya2Vycy4KKyAgICBjb25zdCBjaGFyIGZyYWdtZW50TWFya2VyVGFnW10gPSAi
d2Via2l0LWZyYWdtZW50LW1hcmtlciI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHRhZ2dlZE1hcmt1
cDsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5sZWZ0KGZyYWdtZW50U3RhcnQpKTsK
KyAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAsIGZyYWdt
ZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmco
ZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KSk7CisgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFnbWVudE1hcmtlclRh
Zyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50RW5k
KSk7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdGFnZ2VkRnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIHRhZ2dlZE1hcmt1cC50b1N0cmluZygpLCBi
YXNlVVJMLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAvLyBXZSBtb3ZlIHRoZSByZXN1bHRp
bmcgRE9NIHRyZWUgaW50byBhIERvY3VtZW50IHNvIHdlIGNhbiBjcmVhdGUgYSBwcm9wZXIgUmFu
Z2UuCisgICAgUmVmUHRyPERvY3VtZW50PiB0YWdnZWREb2N1bWVudCA9IERvY3VtZW50OjpjcmVh
dGUoMCwgS1VSTCgpKTsKKyAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbSh0
YWdnZWRGcmFnbWVudC5nZXQoKSk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZUNvbnRl
eHQ7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7CisgICAgZm9yIChOb2RlKiBu
b2RlID0gdGFnZ2VkRG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG5vZGUpLT5kYXRh
KCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAgICAgIGlmICghbm9kZUJlZm9yZUNv
bnRleHQpCisgICAgICAgICAgICAgICAgbm9kZUJlZm9yZUNvbnRleHQgPSBub2RlOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbm9kZUFmdGVyQ29udGV4dCA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIShub2RlQmVmb3JlQ29udGV4dCAmJiBub2RlQWZ0ZXJDb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh0
YWdnZWREb2N1bWVudC5nZXQoKSwKKyAgICAgICAgcG9zaXRpb25BZnRlck5vZGUobm9kZUJlZm9y
ZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLAorICAgICAgICBwb3Np
dGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTm9kZSogY29tbW9u
QW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOworICAgIEFTU0VS
VCghZWMpOworICAgIE5vZGUqIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGFuY2VzdG9yVG9SZXRh
aW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIoY29tbW9uQW5jZXN0b3IpOwor
CisgICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHJhbmdlIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBpZiAoc3BlY2lhbENvbW1vbkFuY2VzdG9yKSB7CisgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChzcGVjaWFsQ29tbW9uQW5jZXN0b3IsIGVjKTsKKyAg
ICAgICAgQVNTRVJUKCFlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYWdtZW50LT50YWtlQWxs
Q2hpbGRyZW5Gcm9tKHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihjb21tb25BbmNlc3Rvcikp
OworCisgICAgTm9kZSogbmV4dDsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKyAgICAgICAgaWYgKG5vZGVC
ZWZvcmVDb250ZXh0LT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgeworICAgICAgICAgICAg
bmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgZWMpOwor
ICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9kZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIEFTU0VSVChub2RlQWZ0ZXJDb250ZXh0LT5wYXJlbnROb2RlKCkpOwor
ICAgIGZvciAoTm9kZSogbm9kZSA9IG5vZGVBZnRlckNvbnRleHQuZ2V0KCk7IG5vZGU7IG5vZGUg
PSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZSwgZWMpOworICAgICAg
ICBBU1NFUlQoIWVjKTsKKyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKIFN0cmlu
ZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9u
bHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxz
KQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCmluZGV4IDFiZmU5MDA2
NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkwMjc5ZDU3ZjAuLmYyODcxNWIyMjI5NzdjNTkxZGRiMmRk
OTU0NWZjZDMxNjg5YzQxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaApAQCAtNDUsNiArNDUs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
dGV4dCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBi
YXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0Fs
bG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgdW5z
aWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiwgY29uc3Qg
VmVjdG9yPE5vZGUqPiYpOwogCiAgICAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlICpub2Rl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuY3BwCmluZGV4IGE4ODJlNjMwN2U0ZDg2ODZlZTU3OTYyNGY2MmEwZThhNjc5
MmQwNDQuLmU0YjdiZWVlNzgzNTdiOGJhNmYyYWZkNzAwNzg4YTI3NDJkZTRkMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcApAQCAtMTYwLDcgKzE2MCw4IEBAIFN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6Omdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQogICAgICAgICAgICAgICAg
IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKICAgICAgICAgICAgIFN0cmluZyBo
dG1sVGV4dDsKICAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgUGxhdGZv
cm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVS
TCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICAgICAgUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCwg
Jmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNF
bXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwogICAgICAgICB9CkBAIC0yNjcs
NCArMjY4LDMgQEAgQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3Qg
Q2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCBiMzdlY2E0YzBjY2E4ZTA3MjM5OWNhMDdm
NWUwOTFiY2IyYzllNzdjLi5jMTE0ZmY1YjdhNjNiYzE4NGE0NDVmNDA0NmFhODAyNjUzMDgxNDlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAgLTk3LDcgKzk3LDggQEAgdm9pZCBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJh
Y2s+IGNhbGxiYWNrKQogICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAg
ICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJMOwotICAgICAg
ICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpT
dGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAgICAgdW5zaWdu
ZWQgaWdub3JlZDsKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVS
TCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJh
Y2sobV9jb250ZXh0LCBodG1sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3Bw
CmluZGV4IDZmNTYwNzc3ZDgzMzlhYjVkMmQyN2UzNjdjZmIwNmQ2Mjg0N2FjNzEuLjk1NzJmMDk3
NWJhNzdjNTlkM2M0ZjQ0Y2Q0MTUwZDdmMTMxM2JmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcApAQCAtMTcz
LDEwICsxNzMsMTIgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpk
b2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlAKICAgICBpZiAoUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRN
TEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwOwogICAgICAgICBLVVJM
IHNyY1VSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZm
ZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0ID0g
MDsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOworICAgICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCwgJmZyYWdt
ZW50U3RhcnQsICZmcmFnbWVudEVuZCk7CiAKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0KLSAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFt
ZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dl
ZCk7CisgICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChmcmFt
ZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCwgc3JjVVJM
LCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICBpZiAoZnJhZ21lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKaW5kZXggZTMy
MTdiYjIwMDM4Y2FiMTNiZDY0YWQzMzU0MGVlZjc3MTU2Yjg4Ni4uOTBmNDA5NWY5MWQ2ZWU4ZjU0
MTU3OWQ4NjgzN2YyY2MyMTMyMzYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGNsaXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRGb3JtYXQsIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIp
OwogCiAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRI
VE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyosIEtVUkwqKTsK
KyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKiwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsIHVu
c2lnbmVkKiBmcmFnbWVudEVuZCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7
CiAgICAgc3RhdGljIHVpbnQ2NF90IGNsaXBib2FyZEdldFNlcXVlbmNlTnVtYmVyKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGE1NGY4ODE1MTkzYTc3MDcwZDRkODc0NzdlNzg1
OWNiOGNkZGY0MS4uOGM1ZjdmMTBkZGM2M2Y0YjZmMmRkYmMyMDBiODdhY2E3YjgyZWY5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0xMyAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb250ZXh0LWF3YXJl
IEhUTUwgcGFzdGUgZm9yIENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MjExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQgc2lkZSBmb3IgcGx1bWJpbmcgdG8gcmVjZWl2ZSBj
b250ZXh0IGZvciBIVE1MIHBhc3RlLgorCisgICAgICAgICogcHVibGljL1dlYkNsaXBib2FyZC5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJDbGlwYm9hcmQ6OnJlYWRIVE1MKToKKyAgICAgICAgKiBz
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorCiAyMDExLTEwLTEzICBQZW5nIEh1YW5nICA8c2hhd24u
cC5odWFuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBzZWxlY3Rpb25C
b3VuZHMoKSBtZXRob2QgdG8gV2ViV2lkZ2V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAyNDFhOWM2YzM0Y2VjZGJjMjg5MTU0MzBhN2UwNTll
NjhkYzE2YmE5Li4xOWY2M2MxYjgyYjBjOTk1YmRkNGE4ZjMxY2FlMDJkMTU3NGI0ZjFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaApAQCAtNjMsNyAr
NjMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1hdEF2YWlsYWJsZShGb3Jt
YXQsIEJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJl
YWRQbGFpblRleHQoQnVmZmVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwg
V2ViU3RyaW5nIHJlYWRIVE1MKEJ1ZmZlciwgV2ViVVJMKikgeyByZXR1cm4gV2ViU3RyaW5nKCk7
IH0KKyAgICAvLyBmcmFnbWVudFN0YXJ0IGFuZCBmcmFnbWVudEVuZCBhcmUgaW5kZXhlcyBpbnRv
IHRoZSByZXR1cm5lZCBtYXJrdXAgdGhhdAorICAgIC8vIGluZGljYXRlIHRoZSBzdGFydCBhbmQg
ZW5kIG9mIHRoZSBmcmFnbWVudCBpZiB0aGUgcmV0dXJuZWQgbWFya3VwCisgICAgLy8gY29udGFp
bnMgYWRkaXRpb25hbCBjb250ZXh0LiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIGNvbnRleHQs
CisgICAgLy8gZnJhZ21lbnRTdGFydCB3aWxsIGJlIHplcm8gYW5kIGZyYWdtZW50RW5kIHdpbGwg
YmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSByZXR1cm5lZCBtYXJrdXAu
CisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoCisgICAgICAgIEJ1ZmZlciBidWZmZXIs
IFdlYlVSTCogcGFnZVVSTCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsCisgICAgICAgIHVuc2ln
bmVkKiBmcmFnbWVudEVuZCkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFdl
YkRhdGEgcmVhZEltYWdlKEJ1ZmZlcikgeyByZXR1cm4gV2ViRGF0YSgpOyB9CiAKICAgICAvLyBS
ZXR1cm5zIGFuIGlkZW50aWZpZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgdGhlIGRhdGEKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIHBhc3RlLCBkcmFn
IGFuZCBkcm9wLCBhbmQgc2VsZWN0aW9uIGNvcHkgKG9uIFgpLgogICAgIHZpcnR1YWwgV2ViVmVj
dG9yPFdlYlN0cmluZz4gcmVhZEF2YWlsYWJsZVR5cGVzKAogICAgICAgICBCdWZmZXIsIGJvb2wq
IGNvbnRhaW5zRmlsZW5hbWVzKSB7IHJldHVybiBXZWJWZWN0b3I8V2ViU3RyaW5nPigpOyB9Ci0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5
IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVl
c3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIuCiAgICAgdmly
dHVhbCBib29sIHJlYWREYXRhKAogICAgICAgICBCdWZmZXIsIGNvbnN0IFdlYlN0cmluZyYgdHlw
ZSwgV2ViU3RyaW5nKiBkYXRhLAogICAgICAgICBXZWJTdHJpbmcqIG1ldGFkYXRhKSB7IHJldHVy
biBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZv
cm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9y
dC5jcHAKaW5kZXggNTQ4NzI4NTUwYWJmYjQ4MDZlOWRlYjJlMTc5N2ViOTViNjJmNDYwZC4uZDFh
NzI0MzI1ZDgxOGViOWEwMGRhZTUwOTVkYzlkNjE0NzVhMzc2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCkBAIC0xNjgsMTEgKzE2OCwxMSBA
QCBTdHJpbmcgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAogCiB2b2lk
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgU3RyaW5nKiBodG1sVGV4dCwgS1VSTCog
c291cmNlVVJMKQorICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCwgdW5zaWdu
ZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkKIHsKICAgICBXZWJVUkwg
dXJsOwogICAgICpodG1sVGV4dCA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQo
KS0+cmVhZEhUTUwoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpLCAmdXJsKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+
KGJ1ZmZlciksICZ1cmwsIGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kKTsKICAgICAqc291cmNl
VVJMID0gdXJsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111035</attachid>
            <date>2011-10-14 11:38:09 -0700</date>
            <delta_ts>2011-10-14 12:17:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111014113808.patch</filename>
            <type>text/plain</type>
            <size>17752</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li41Mjg3ZjdmZDdlZmI1ZDBhMzA4YTAyZWMzZjEwMjM2
MjE4ZmMzZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxv
Y2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRNTEJsb2NrRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJs
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBl
YXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRB
cHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6dHJpbUZyYWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0
KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1l
bnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0
Lmg6CisKIDIwMTEtMTAtMTMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NzM2Mi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAppbmRleCBmMWIyMjE5ZDg2YzU5ZjUx
Y2MyMzdmOTcxMjM0OWE1NmZmYjJmMDU0Li5hMzFmOTEyODU4YjdjNjA3Y2U0ZWMyOTYxZTA2NzYz
ZGU0ODQ1OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhO
b2RlKiBub2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSk7
CiAKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29u
c3QgU3RyaW5nJiBjb21tZW50KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhOb2RlKiwg
TmFtZXNwYWNlcyogPSAwKTsKQEAgLTg2LDcgKzg4LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
YXBwZW5kTmFtZXNwYWNlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7
CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgdm9p
ZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50
KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9u
KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYg
ZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0
LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4
IGQzMTA0YjU4ODA5OGRkYzI4N2UwZGIxZGE2YzIzNzFhMTE5MmYzMmYuLjdkY2JhZDEyMzZmZjI3
NWFkNmJmODUxZTdhNmMyN2ZiMzAwNDllNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
QEAgLTQyOCwxMCArNDI4LDMzIEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2
ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vCiAgICAgcmV0dXJu
IGxhc3RDbG9zZWQ7CiB9CiAKLXN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJl
QW5kQXBwZWFyYW5jZShOb2RlKiBjb21tb25BbmNlc3RvcikKK2Jvb2wgaXNOb25UYWJsZUNlbGxI
VE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgTm9kZSogY29tbW9uQW5j
ZXN0b3JCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFuY2VzdG9yKTsKKyAgICByZXR1cm4g
bm9kZS0+aGFzVGFnTmFtZShsaXN0aW5nVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KG9sVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHByZVRhZykKKyAgICAgICAgfHwg
bm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSh1
bFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSh4bXBUYWcpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoaDFUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDJUYWcp
CisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDNUYWcpCisgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUoaDRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDVUYWcpOworfQog
CitzdGF0aWMgYm9vbCBpc0hUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFn
TmFtZSh0aFRhZykKKyAgICAgICAgfHwgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KG5v
ZGUpOworfQorCisvLyBGSVhNRTogRG8gd2Ugd2FudCB0byBoYW5kbGUgbWFpbCBxdW90ZXMgaGVy
ZSBpbnN0ZWFkPworLy8gVGhpcyBpcyBjdXJyZW50bHkgaGFuZGxlZCBpbiBoaWdoZXN0QW5jZXN0
b3JUb1dyYXBNYXJrdXAgYnV0IGl0IG1pZ2h0IG1ha2UgbW9yZQorLy8gc2Vuc2UgdG8gbW92ZSB0
aGF0IGludG8gaGVyZS4KK3N0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5k
QXBwZWFyYW5jZUZvckJsb2NrKE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2spCit7CiAgICAgaWYg
KCFjb21tb25BbmNlc3RvckJsb2NrKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNDQzLDIyICs0
NjYsMjMgQEAgc3RhdGljIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJh
bmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQogICAgICAgICByZXR1cm4gdGFibGU7CiAgICAgfQog
Ci0gICAgaWYgKGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUobGlzdGluZ1RhZykKLSAg
ICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShvbFRhZykKLSAgICAgICAg
fHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShwcmVUYWcpCi0gICAgICAgIHx8IGNv
bW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodGFibGVUYWcpCi0gICAgICAgIHx8IGNvbW1v
bkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodWxUYWcpCi0gICAgICAgIHx8IGNvbW1vbkFuY2Vz
dG9yQmxvY2stPmhhc1RhZ05hbWUoeG1wVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJs
b2NrLT5oYXNUYWdOYW1lKGgxVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5o
YXNUYWdOYW1lKGgyVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdO
YW1lKGgzVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKGg0
VGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKGg1VGFnKSkK
KyAgICBpZiAoaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGNvbW1vbkFuY2VzdG9yQmxv
Y2spKQogICAgICAgICByZXR1cm4gY29tbW9uQW5jZXN0b3JCbG9jazsKIAogICAgIHJldHVybiAw
OwogfQogCitzdGF0aWMgaW5saW5lIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRB
cHBlYXJhbmNlKE5vZGUqIGNvbW1vbkFuY2VzdG9yKQoreworICAgIHJldHVybiBhbmNlc3RvclRv
UmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKGVuY2xvc2luZ0Jsb2NrKGNvbW1v
bkFuY2VzdG9yKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0
cnVjdHVyZUFuZEFwcGVhcmFuY2VXaXRoTm9SZW5kZXJlcihOb2RlKiBjb21tb25BbmNlc3RvcikK
K3sKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrID0gZW5jbG9zaW5nTm9kZU9mVHlwZShm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoY29tbW9uQW5jZXN0b3IpLCBpc0hUTUxCbG9ja0Vs
ZW1lbnQpOworICAgIHJldHVybiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5j
ZUZvckJsb2NrKGNvbW1vbkFuY2VzdG9yQmxvY2spOworfQorCiBzdGF0aWMgYm9vbCBwcm9wZXJ0
eU1pc3NpbmdPckVxdWFsVG9Ob25lKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBpbnQgcHJv
cGVydHlJRCkKIHsKICAgICBpZiAoIXN0eWxlKQpAQCAtNjg0LDYgKzcwOCw4NSBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0CiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KIAorc3Rh
dGljIHZvaWQgdHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBOb2RlKiBu
b2RlQmVmb3JlQ29udGV4dCwgTm9kZSogbm9kZUFmdGVyQ29udGV4dCkKK3sKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBOb2RlKiBuZXh0OworICAgIGZvciAoUmVmUHRyPE5vZGU+IG5v
ZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dCkgeworICAgICAg
ICBpZiAobm9kZUJlZm9yZUNvbnRleHQtPmlzRGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLmdl
dCgpLCBlYyk7CisgICAgICAgIGlmIChub2RlQmVmb3JlQ29udGV4dCA9PSBub2RlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKG5vZGVBZnRlckNvbnRleHQtPnBhcmVu
dE5vZGUoKSk7CisgICAgZm9yIChOb2RlKiBub2RlID0gbm9kZUFmdGVyQ29udGV4dDsgbm9kZTsg
bm9kZSA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKKyAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLCBlYyk7Cisg
ICAgICAgIEFTU0VSVCghZWMpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25l
ZCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBo
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hcmt1cCBhbHJlYWR5IGNvbnRhaW5zIHRoZXNlIG1h
cmtlcnMuCisgICAgY29uc3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFn
bWVudC1tYXJrZXIiOworCisgICAgU3RyaW5nQnVpbGRlciB0YWdnZWRNYXJrdXA7CisgICAgdGFn
Z2VkTWFya3VwLmFwcGVuZChtYXJrdXAubGVmdChmcmFnbWVudFN0YXJ0KSk7CisgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFnbWVudE1hcmtlclRh
Zyk7CisgICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50U3Rh
cnQsIGZyYWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRDb21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOworICAgIHRh
Z2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudEVuZCkpOworCisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRhZ2dlZEZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKGRvY3VtZW50LCB0YWdnZWRNYXJrdXAudG9TdHJpbmcoKSwgYmFzZVVSTCwgc2Ny
aXB0aW5nUGVybWlzc2lvbik7CisgICAgUmVmUHRyPERvY3VtZW50PiB0YWdnZWREb2N1bWVudCA9
IERvY3VtZW50OjpjcmVhdGUoMCwgS1VSTCgpKTsKKyAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFs
bENoaWxkcmVuRnJvbSh0YWdnZWRGcmFnbWVudC5nZXQoKSk7CisKKyAgICBSZWZQdHI8Tm9kZT4g
bm9kZUJlZm9yZUNvbnRleHQ7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gdGFnZ2VkRG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0
YSo+KG5vZGUpLT5kYXRhKCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAgICAgIGlm
ICghbm9kZUJlZm9yZUNvbnRleHQpCisgICAgICAgICAgICAgICAgbm9kZUJlZm9yZUNvbnRleHQg
PSBub2RlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbm9kZUFmdGVyQ29u
dGV4dCA9IG5vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIShub2RlQmVmb3JlQ29udGV4dCAmJiBub2RlQWZ0ZXJD
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKKyAgICAgICAgcG9zaXRpb25BZnRl
ck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LAorICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIo
ZWMpOworICAgIEFTU0VSVCghZWMpOworICAgIE5vZGUqIHNwZWNpYWxDb21tb25BbmNlc3RvciA9
IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIoY29t
bW9uQW5jZXN0b3IpOworCisgICAgLy8gV2hlbiB0aGVyZSdzIGEgc3BlY2lhbCBjb21tb24gYW5j
ZXN0b3Igb3V0c2lkZSBvZiB0aGUgZnJhZ21lbnQsIHdlIG11c3QgaW5jbHVkZSBpdCBhcyB3ZWxs
IHRvCisgICAgLy8gcHJlc2VydmUgdGhlIHN0cnVjdHVyZSBhbmQgYXBwZWFyYW5jZSBvZiB0aGUg
ZnJhZ21lbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgZnJhZ21lbnQgY29udGFpbnMKKyAgICAvLyBU
RCwgd2UgbmVlZCB0byBpbmNsdWRlIHRoZSBlbmNsb3NpbmcgVEFCTEUgdGFnIGFzIHdlbGwuCisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBpZiAoc3BlY2lhbENvbW1vbkFuY2VzdG9yKSB7CisgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChzcGVjaWFsQ29tbW9uQW5jZXN0b3IsIGVjKTsKKyAg
ICAgICAgQVNTRVJUKCFlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYWdtZW50LT50YWtlQWxs
Q2hpbGRyZW5Gcm9tKHN0YXRpY19jYXN0PENvbnRhaW5lck5vZGUqPihjb21tb25BbmNlc3Rvcikp
OworCisgICAgdHJpbUZyYWdtZW50KGZyYWdtZW50LmdldCgpLCBub2RlQmVmb3JlQ29udGV4dC5n
ZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9
CisKIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25seSBj
aGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJl
c29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCmluZGV4
IDFiZmU5MDA2NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkwMjc5ZDU3ZjAuLmYyODcxNWIyMjI5Nzdj
NTkxZGRiMmRkOTU0NWZjZDMxNjg5YzQxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaApAQCAt
NDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgdGV4dCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3Qg
U3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNj
cmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1h
cmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50
KiwgY29uc3QgVmVjdG9yPE5vZGUqPiYpOwogCiAgICAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChO
b2RlICpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IGE4ODJlNjMwN2U0ZDg2ODZlZTU3OTYyNGY2
MmEwZThhNjc5MmQwNDQuLmU0YjdiZWVlNzgzNTdiOGJhNmYyYWZkNzAwNzg4YTI3NDJkZTRkMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcApAQCAtMTYwLDcgKzE2MCw4IEBAIFN0cmluZyBDaHJvbWl1bURhdGFP
YmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQogICAgICAg
ICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKICAgICAgICAgICAg
IFN0cmluZyBodG1sVGV4dDsKICAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAg
ICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwg
JnNvdXJjZVVSTCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICAgICAg
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNv
dXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRt
bFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwogICAgICAgICB9
CkBAIC0yNjcsNCArMjY4LDMgQEAgQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmpl
Y3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCBiMzdlY2E0YzBjY2E4ZTA3
MjM5OWNhMDdmNWUwOTFiY2IyYzllNzdjLi5jMTE0ZmY1YjdhNjNiYzE4NGE0NDVmNDA0NmFhODAy
NjUzMDgxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAgLTk3LDcgKzk3LDggQEAg
dm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3Ry
aW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRN
TCkgewogICAgICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJM
OwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQ
cml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAg
ICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRS
ZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3Jl
ZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVk
dWxlQ2FsbGJhY2sobV9jb250ZXh0LCBodG1sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hy
b21pdW0uY3BwCmluZGV4IDZmNTYwNzc3ZDgzMzlhYjVkMmQyN2UzNjdjZmIwNmQ2Mjg0N2FjNzEu
Ljk1NzJmMDk3NWJhNzdjNTlkM2M0ZjQ0Y2Q0MTUwZDdmMTMxM2JmMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNw
cApAQCAtMTczLDEwICsxNzMsMTIgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlAKICAgICBpZiAo
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJp
dmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwOwogICAg
ICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFk
SFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAgICB1bnNpZ25lZCBmcmFnbWVu
dFN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOworICAgICAgICBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VS
TCwgJmZyYWdtZW50U3RhcnQsICZmcmFnbWVudEVuZCk7CiAKICAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0KLSAgICAgICAgICAgIGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBzcmNVUkwsIEZyYWdtZW50U2NyaXB0aW5n
Tm90QWxsb3dlZCk7CisgICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29u
dGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVu
ZCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICBpZiAoZnJh
Z21lbnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9y
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgK
aW5kZXggZTMyMTdiYjIwMDM4Y2FiMTNiZDY0YWQzMzU0MGVlZjc3MTU2Yjg4Ni4uOTBmNDA5NWY5
MWQ2ZWU4ZjU0MTU3OWQ4NjgzN2YyY2MyMTMyMzYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKQEAgLTk4LDcgKzk4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBib29sIGNsaXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRGb3JtYXQsIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIpOwogCiAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBh
c3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgIHN0YXRpYyB2b2lkIGNsaXBi
b2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmluZyos
IEtVUkwqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKiwgdW5zaWduZWQqIGZyYWdtZW50
U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlcik7CiAgICAgc3RhdGljIHVpbnQ2NF90IGNsaXBib2FyZEdldFNlcXVlbmNlTnVtYmVy
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGE1NGY4ODE1MTkzYTc3MDcwZDRk
ODc0NzdlNzg1OWNiOGNkZGY0MS4uOGM1ZjdmMTBkZGM2M2Y0YjZmMmRkYmMyMDBiODdhY2E3Yjgy
ZWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0x
MC0xMyAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb250
ZXh0LWF3YXJlIEhUTUwgcGFzdGUgZm9yIENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQgc2lkZSBmb3IgcGx1bWJpbmcgdG8g
cmVjZWl2ZSBjb250ZXh0IGZvciBIVE1MIHBhc3RlLgorCisgICAgICAgICogcHVibGljL1dlYkNs
aXBib2FyZC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDbGlwYm9hcmQ6OnJlYWRIVE1MKToKKyAg
ICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorCiAyMDExLTEwLTEzICBQZW5nIEh1YW5n
ICA8c2hhd24ucC5odWFuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBz
ZWxlY3Rpb25Cb3VuZHMoKSBtZXRob2QgdG8gV2ViV2lkZ2V0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAyNDFhOWM2YzM0Y2VjZGJjMjg5MTU0
MzBhN2UwNTllNjhkYzE2YmE5Li4xOWY2M2MxYjgyYjBjOTk1YmRkNGE4ZjMxY2FlMDJkMTU3NGI0
ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9h
cmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaApA
QCAtNjMsNyArNjMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1hdEF2YWls
YWJsZShGb3JtYXQsIEJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIHJlYWRQbGFpblRleHQoQnVmZmVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAg
IHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKEJ1ZmZlciwgV2ViVVJMKikgeyByZXR1cm4gV2Vi
U3RyaW5nKCk7IH0KKyAgICAvLyBmcmFnbWVudFN0YXJ0IGFuZCBmcmFnbWVudEVuZCBhcmUgaW5k
ZXhlcyBpbnRvIHRoZSByZXR1cm5lZCBtYXJrdXAgdGhhdAorICAgIC8vIGluZGljYXRlIHRoZSBz
dGFydCBhbmQgZW5kIG9mIHRoZSBmcmFnbWVudCBpZiB0aGUgcmV0dXJuZWQgbWFya3VwCisgICAg
Ly8gY29udGFpbnMgYWRkaXRpb25hbCBjb250ZXh0LiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFs
IGNvbnRleHQsCisgICAgLy8gZnJhZ21lbnRTdGFydCB3aWxsIGJlIHplcm8gYW5kIGZyYWdtZW50
RW5kIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSByZXR1cm5l
ZCBtYXJrdXAuCisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwoCisgICAgICAgIEJ1ZmZl
ciBidWZmZXIsIFdlYlVSTCogcGFnZVVSTCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsCisgICAg
ICAgIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KICAgICB2
aXJ0dWFsIFdlYkRhdGEgcmVhZEltYWdlKEJ1ZmZlcikgeyByZXR1cm4gV2ViRGF0YSgpOyB9CiAK
ICAgICAvLyBSZXR1cm5zIGFuIGlkZW50aWZpZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdGhlIGRhdGEKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIHBh
c3RlLCBkcmFnIGFuZCBkcm9wLCBhbmQgc2VsZWN0aW9uIGNvcHkgKG9uIFgpLgogICAgIHZpcnR1
YWwgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVhZEF2YWlsYWJsZVR5cGVzKAogICAgICAgICBCdWZm
ZXIsIGJvb2wqIGNvbnRhaW5zRmlsZW5hbWVzKSB7IHJldHVybiBXZWJWZWN0b3I8V2ViU3RyaW5n
PigpOyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3Vj
Y2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHJlcXVlc3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBidWZmZXIu
CiAgICAgdmlydHVhbCBib29sIHJlYWREYXRhKAogICAgICAgICBCdWZmZXIsIGNvbnN0IFdlYlN0
cmluZyYgdHlwZSwgV2ViU3RyaW5nKiBkYXRhLAogICAgICAgICBXZWJTdHJpbmcqIG1ldGFkYXRh
KSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHAKaW5kZXggNTQ4NzI4NTUwYWJmYjQ4MDZlOWRlYjJlMTc5N2ViOTViNjJm
NDYwZC4uZDFhNzI0MzI1ZDgxOGViOWEwMGRhZTUwOTVkYzlkNjE0NzVhMzc2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCkBAIC0xNjgsMTEg
KzE2OCwxMSBAQCBTdHJpbmcgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KAogCiB2b2lkIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgU3RyaW5nKiBodG1sVGV4
dCwgS1VSTCogc291cmNlVVJMKQorICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVS
TCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkKIHsKICAg
ICBXZWJVUkwgdXJsOwogICAgICpodG1sVGV4dCA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5j
bGlwYm9hcmQoKS0+cmVhZEhUTUwoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6
QnVmZmVyPihidWZmZXIpLCAmdXJsKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJk
OjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwsIGZyYWdtZW50U3RhcnQsIGZyYWdtZW50RW5kKTsKICAg
ICAqc291cmNlVVJMID0gdXJsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111046</attachid>
            <date>2011-10-14 12:16:37 -0700</date>
            <delta_ts>2011-10-14 12:26:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111014121636.patch</filename>
            <type>text/plain</type>
            <size>18047</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li41OGU5ZTNjMzU1MWM3ZjRmNmQ5YWRjY2ZkNjEyZjk1
YWQ0YmZjMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxv
Y2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRNTEJsb2NrRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJs
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBl
YXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRB
cHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5vZGVzU3Vy
cm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dCk6CisgICAg
ICAgICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
OjpnZXRBc1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oOgorCiAy
MDExLTEwLTEzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTczNjIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggZjFiMjIxOWQ4NmM1OWY1MWNjMjM3Zjk3
MTIzNDlhNTZmZmIyZjA1NC4uYTMxZjkxMjg1OGI3YzYwN2NlNGVjMjk2MWUwNjc2M2RlNDg0NThi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApAQCAtNzEs
NiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9kZSogbm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpOwogCisgICAg
c3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmlu
ZyYgY29tbWVudCk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9kZSosIE5hbWVzcGFj
ZXMqID0gMCk7CkBAIC04Niw3ICs4OCw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFwcGVuZE5h
bWVzcGFjZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwogICAgIEVu
dGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwotICAgIHZvaWQgYXBwZW5k
Q29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CiAgICAg
dm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdC
dWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOwog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBkMzEwNGI1
ODgwOThkZGMyODdlMGRiMWRhNmMyMzcxYTExOTJmMzJmLi5mMzA3MDIwYTdjODg5YWJjMDc0NmJh
NGNkYmQ1YTBjMjU3OThlOGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00Mjgs
MTAgKzQyOCwzMyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOb2Rl
c0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBObwogICAgIHJldHVybiBsYXN0Q2xv
c2VkOwogfQogCi1zdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVh
cmFuY2UoTm9kZSogY29tbW9uQW5jZXN0b3IpCitib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2Nr
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxv
Y2sgPSBlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rvcik7CisgICAgcmV0dXJuIG5vZGUtPmhh
c1RhZ05hbWUobGlzdGluZ1RhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykK
KyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUodGFibGVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpCisg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoeG1wVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNU
YWdOYW1lKGgxVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgyVGFnKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKGgzVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KGg0VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg1VGFnKTsKK30KKworc3RhdGlj
IGJvb2wgaXNIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJu
IG5vZGUtPmhhc1RhZ05hbWUodGRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodGhU
YWcpCisgICAgICAgIHx8IGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChub2RlKTsKK30K
IAorLy8gRklYTUU6IERvIHdlIHdhbnQgdG8gaGFuZGxlIG1haWwgcXVvdGVzIGhlcmUgaW5zdGVh
ZD8KKy8vIFRoaXMgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gaGlnaGVzdEFuY2VzdG9yVG9XcmFw
TWFya3VwIGJ1dCBpdCBtaWdodCBtYWtlIG1vcmUKKy8vIHNlbnNlIHRvIG1vdmUgdGhhdCBpbnRv
IGhlcmUuCitzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFu
Y2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrKQorewogICAgIGlmICghY29tbW9u
QW5jZXN0b3JCbG9jaykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ0MywyMiArNDY2LDIzIEBA
IHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2Rl
KiBjb21tb25BbmNlc3RvcikKICAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgIH0KIAotICAgIGlm
IChjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcpCi0gICAgICAgIHx8
IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUob2xUYWcpCi0gICAgICAgIHx8IGNvbW1v
bkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUocHJlVGFnKQotICAgICAgICB8fCBjb21tb25BbmNl
c3RvckJsb2NrLT5oYXNUYWdOYW1lKHRhYmxlVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3Rv
ckJsb2NrLT5oYXNUYWdOYW1lKHVsVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2Nr
LT5oYXNUYWdOYW1lKHhtcFRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFz
VGFnTmFtZShoMVRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFt
ZShoMlRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoM1Rh
ZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoNFRhZykKLSAg
ICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoNVRhZykpCisgICAgaWYg
KGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb21tb25BbmNlc3RvckJsb2NrKSkKICAg
ICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQmxvY2s7CiAKICAgICByZXR1cm4gMDsKIH0KIAor
c3RhdGljIGlubGluZSBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5j
ZShOb2RlKiBjb21tb25BbmNlc3RvcikKK3sKKyAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0
cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rv
cikpOworfQorCitzdGF0aWMgaW5saW5lIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVB
bmRBcHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIoTm9kZSogY29tbW9uQW5jZXN0b3IpCit7CisgICAg
Tm9kZSogY29tbW9uQW5jZXN0b3JCbG9jayA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKGNvbW1vbkFuY2VzdG9yKSwgaXNIVE1MQmxvY2tFbGVtZW50KTsK
KyAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9j
ayhjb21tb25BbmNlc3RvckJsb2NrKTsKK30KKwogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5n
T3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQp
CiB7CiAgICAgaWYgKCFzdHlsZSkKQEAgLTY4NCw2ICs3MDgsOTIgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKK2NvbnN0IGNoYXIg
ZnJhZ21lbnRNYXJrZXJUYWdbXSA9ICJ3ZWJraXQtZnJhZ21lbnQtbWFya2VyIjsKKworYm9vbCBm
aW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8Tm9k
ZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQpCit7
CisgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+
KG5vZGUpLT5kYXRhKCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKKyAgICAgICAgICAgIGlmICgh
bm9kZUJlZm9yZUNvbnRleHQpCisgICAgICAgICAgICAgICAgbm9kZUJlZm9yZUNvbnRleHQgPSBu
b2RlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbm9kZUFmdGVyQ29udGV4
dCA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB0cmlt
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIE5vZGUqIG5vZGVCZWZvcmVDb250
ZXh0LCBOb2RlKiBub2RlQWZ0ZXJDb250ZXh0KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIE5vZGUqIG5leHQ7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50
LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7CisgICAgICAgIGlmIChub2RlQmVm
b3JlQ29udGV4dC0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIG5l
eHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAg
ICAgICBBU1NFUlQoIW5vZGUtPmNvbnRhaW5zKG5vZGVBZnRlckNvbnRleHQpKTsKKyAgICAgICAg
bm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLmdldCgpLCBlYyk7CisgICAgICAg
IGlmIChub2RlQmVmb3JlQ29udGV4dCA9PSBub2RlKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgQVNTRVJUKG5vZGVBZnRlckNvbnRleHQtPnBhcmVudE5vZGUoKSk7CisgICAgZm9y
IChOb2RlKiBub2RlID0gbm9kZUFmdGVyQ29udGV4dDsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKyAg
ICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbm9kZS0+
cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMp
OworICAgIH0KK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwKKyAg
ICBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2Fz
ZSB3aGVyZSB0aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4KKworICAg
IFN0cmluZ0J1aWxkZXIgdGFnZ2VkTWFya3VwOworICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFy
a3VwLmxlZnQoZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
b21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOworICAgIHRhZ2dlZE1hcmt1
cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZy
YWdtZW50U3RhcnQpKTsKKyAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdn
ZWRNYXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKKyAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1h
cmt1cC5zdWJzdHJpbmcoZnJhZ21lbnRFbmQpKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwg
dGFnZ2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwor
ICAgIFJlZlB0cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAs
IEtVUkwoKSk7CisgICAgdGFnZ2VkRG9jdW1lbnQtPnRha2VBbGxDaGlsZHJlbkZyb20odGFnZ2Vk
RnJhZ21lbnQuZ2V0KCkpOworCisgICAgUmVmUHRyPE5vZGU+IG5vZGVCZWZvcmVDb250ZXh0Owor
ICAgIFJlZlB0cjxOb2RlPiBub2RlQWZ0ZXJDb250ZXh0OworICAgIGlmICghZmluZE5vZGVzU3Vy
cm91bmRpbmdDb250ZXh0KHRhZ2dlZERvY3VtZW50LmdldCgpLCBub2RlQmVmb3JlQ29udGV4dCwg
bm9kZUFmdGVyQ29udGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFJhbmdlOjpjcmVhdGUodGFnZ2VkRG9jdW1lbnQuZ2V0KCksCisgICAgICAgIHBv
c2l0aW9uQWZ0ZXJOb2RlKG5vZGVCZWZvcmVDb250ZXh0LmdldCgpKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKSwKKyAgICAgICAgcG9zaXRpb25CZWZvcmVOb2RlKG5vZGVBZnRlckNvbnRleHQu
Z2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKyAgICBOb2RlKiBzcGVjaWFsQ29tbW9u
QW5jZXN0b3IgPSBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZVdpdGhOb1Jl
bmRlcmVyKGNvbW1vbkFuY2VzdG9yKTsKKworICAgIC8vIFdoZW4gdGhlcmUncyBhIHNwZWNpYWwg
Y29tbW9uIGFuY2VzdG9yIG91dHNpZGUgb2YgdGhlIGZyYWdtZW50LCB3ZSBtdXN0IGluY2x1ZGUg
aXQgYXMgd2VsbCB0bworICAgIC8vIHByZXNlcnZlIHRoZSBzdHJ1Y3R1cmUgYW5kIGFwcGVhcmFu
Y2Ugb2YgdGhlIGZyYWdtZW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZyYWdtZW50IGNvbnRhaW5z
CisgICAgLy8gVEQsIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgZW5jbG9zaW5nIFRBQkxFIHRhZyBh
cyB3ZWxsLgorICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50
RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgaWYgKHNwZWNpYWxDb21tb25BbmNlc3Rv
cikgeworICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3BlY2lhbENvbW1vbkFuY2VzdG9y
LCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0gZWxzZQorICAgICAgICBmcmFnbWVu
dC0+dGFrZUFsbENoaWxkcmVuRnJvbShzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4oY29tbW9u
QW5jZXN0b3IpKTsKKworICAgIHRyaW1GcmFnbWVudChmcmFnbWVudC5nZXQoKSwgbm9kZUJlZm9y
ZUNvbnRleHQuZ2V0KCksIG5vZGVBZnRlckNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGZy
YWdtZW50OworfQorCiBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGls
ZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJM
cyBzaG91bGRSZXNvbHZlVVJMcykKIHsKICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuaAppbmRleCAxYmZlOTAwNjRjZGI3MmRiNzcyZGY3NDUwYWE0ZDc5MDI3OWQ1N2YwLi5mMjg3
MTViMjIyOTc3YzU5MWRkYjJkZDk1NDVmY2QzMTY4OWM0MTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlKiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0g
RnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50
RW5kLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7
CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2Rl
cyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2RlKj4mKTsKIAogICAgIGJvb2wgaXNQbGFpblRl
eHRNYXJrdXAoTm9kZSAqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCBhODgyZTYzMDdlNGQ4Njg2
ZWU1Nzk2MjRmNjJhMGU4YTY3OTJkMDQ0Li5lNGI3YmVlZTc4MzU3YjhiYTZmMmFmZDcwMDc4OGEy
NzQyZGU0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTE2MCw3ICsxNjAsOCBAQCBTdHJpbmcgQ2hy
b21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vz
cykKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAg
ICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsK
LSAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOworICAgICAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAg
ICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRt
bFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgICAgICBzdWNj
ZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsK
ICAgICAgICAgfQpAQCAtMjY3LDQgKzI2OCwzIEBAIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYjM3ZWNh
NGMwY2NhOGUwNzIzOTljYTA3ZjVlMDkxYmNiMmM5ZTc3Yy4uYzExNGZmNWI3YTYzYmMxODRhNDQ1
ZjQwNDZhYTgwMjY1MzA4MTQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC05Nyw3
ICs5Nyw4IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyhQYXNz
UmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykKICAgICBpZiAodHlwZSgpID09IG1pbWVU
eXBlVGV4dEhUTUwpIHsKICAgICAgICAgU3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgaWdub3Jl
ZFNvdXJjZVVSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVS
TCk7CisgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyLCAmaHRt
bCwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CiAgICAgICAgIGNhbGxi
YWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFz
dGVib2FyZENocm9taXVtLmNwcAppbmRleCA2ZjU2MDc3N2Q4MzM5YWI1ZDJkMjdlMzY3Y2ZiMDZk
NjI4NDdhYzcxLi45NTcyZjA5NzViYTc3YzU5ZDNjNGY0NGNkNDE1MGQ3ZjEzMTNiZjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRD
aHJvbWl1bS5jcHAKQEAgLTE3MywxMCArMTczLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQ
CiAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFz
dGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAgU3RyaW5nIG1h
cmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xp
cGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAmc3JjVVJMKTsKKyAgICAgICAgdW5zaWdu
ZWQgZnJhZ21lbnRTdGFydCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsK
KyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJr
dXAsICZzcmNVUkwsICZmcmFnbWVudFN0YXJ0LCAmZnJhZ21lbnRFbmQpOwogCiAgICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9Ci0gICAgICAgICAgICBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAg
ICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3Jt
U3VwcG9ydC5oCmluZGV4IGUzMjE3YmIyMDAzOGNhYjEzYmQ2NGFkMzM1NDBlZWY3NzE1NmI4ODYu
LjkwZjQwOTVmOTFkNmVlOGY1NDE1NzlkODY4MzdmMmNjMjEzMjM2MTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCkBAIC05OCw3
ICs5OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBs
YWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLSAgICBzdGF0aWMg
dm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
LCBTdHJpbmcqLCBLVVJMKik7CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCosIHVuc2lnbmVk
KiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRFbmQpOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIpOwogICAgIHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1
ZW5jZU51bWJlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRhNTRmODgxNTE5
M2E3NzA3MGQ0ZDg3NDc3ZTc4NTljYjhjZGRmNDEuLjhjNWY3ZjEwZGRjNjNmNGI2ZjJkZGJjMjAw
Yjg3YWNhN2I4MmVmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMTAtMTMgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgQ29udGV4dC1hd2FyZSBIVE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0IHNpZGUgZm9yIHBs
dW1iaW5nIHRvIHJlY2VpdmUgY29udGV4dCBmb3IgSFRNTCBwYXN0ZS4KKworICAgICAgICAqIHB1
YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2xpcGJvYXJkOjpyZWFk
SFRNTCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKToKKwogMjAxMS0xMC0xMyAg
UGVuZyBIdWFuZyAgPHNoYXduLnAuaHVhbmdAZ21haWwuY29tPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gQWRkIGEgc2VsZWN0aW9uQm91bmRzKCkgbWV0aG9kIHRvIFdlYldpZGdldC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKaW5kZXggMjQxYTljNmMzNGNl
Y2RiYzI4OTE1NDMwYTdlMDU5ZTY4ZGMxNmJhOS4uMTlmNjNjMWI4MmIwYzk5NWJkZDRhOGYzMWNh
ZTAyZDE1NzRiNGYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ2xpcGJvYXJkLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xp
cGJvYXJkLmgKQEAgLTYzLDcgKzYzLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNG
b3JtYXRBdmFpbGFibGUoRm9ybWF0LCBCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2
aXJ0dWFsIFdlYlN0cmluZyByZWFkUGxhaW5UZXh0KEJ1ZmZlcikgeyByZXR1cm4gV2ViU3RyaW5n
KCk7IH0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyByZWFkSFRNTChCdWZmZXIsIFdlYlVSTCopIHsg
cmV0dXJuIFdlYlN0cmluZygpOyB9CisgICAgLy8gZnJhZ21lbnRTdGFydCBhbmQgZnJhZ21lbnRF
bmQgYXJlIGluZGV4ZXMgaW50byB0aGUgcmV0dXJuZWQgbWFya3VwIHRoYXQKKyAgICAvLyBpbmRp
Y2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZnJhZ21lbnQgaWYgdGhlIHJldHVybmVkIG1h
cmt1cAorICAgIC8vIGNvbnRhaW5zIGFkZGl0aW9uYWwgY29udGV4dC4gSWYgdGhlcmUgaXMgbm8g
YWRkaXRpb25hbCBjb250ZXh0LAorICAgIC8vIGZyYWdtZW50U3RhcnQgd2lsbCBiZSB6ZXJvIGFu
ZCBmcmFnbWVudEVuZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBsZW5ndGgKKyAgICAvLyBvZiB0
aGUgcmV0dXJuZWQgbWFya3VwLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKAorICAg
ICAgICBCdWZmZXIgYnVmZmVyLCBXZWJVUkwqIHBhZ2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0
YXJ0LAorICAgICAgICB1bnNpZ25lZCogZnJhZ21lbnRFbmQpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9CiAgICAgdmlydHVhbCBXZWJEYXRhIHJlYWRJbWFnZShCdWZmZXIpIHsgcmV0dXJuIFdlYkRh
dGEoKTsgfQogCiAgICAgLy8gUmV0dXJucyBhbiBpZGVudGlmaWVyIHdoaWNoIGNhbiBiZSB1c2Vk
IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhCkBAIC04Nyw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBwYXN0ZSwgZHJhZyBhbmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5IChvbiBYKS4K
ICAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlYWRBdmFpbGFibGVUeXBlcygKICAg
ICAgICAgQnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykgeyByZXR1cm4gV2ViVmVjdG9y
PFdlYlN0cmluZz4oKTsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHR5
cGUgd2FzIHN1Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0
aGUgYnVmZmVyLgogICAgIHZpcnR1YWwgYm9vbCByZWFkRGF0YSgKICAgICAgICAgQnVmZmVyLCBj
b25zdCBXZWJTdHJpbmcmIHR5cGUsIFdlYlN0cmluZyogZGF0YSwKICAgICAgICAgV2ViU3RyaW5n
KiBtZXRhZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCmluZGV4IDU0ODcyODU1MGFiZmI0ODA2ZTlkZWIyZTE3
OTdlYjk1YjYyZjQ2MGQuLmQxYTcyNDMyNWQ4MThlYjlhMDBkYWU1MDk1ZGM5ZDYxNDc1YTM3NmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcApA
QCAtMTY4LDExICsxNjgsMTEgQEAgU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVh
ZFBsYWluVGV4dCgKIAogdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKAog
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAotICAgIFN0cmlu
ZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKKyAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJM
KiBzb3VyY2VVUkwsIHVuc2lnbmVkKiBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCogZnJhZ21lbnRF
bmQpCiB7CiAgICAgV2ViVVJMIHVybDsKICAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJD
bGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7CisgICAgICAgIHN0YXRpY19jYXN0PFdl
YkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVu
dEVuZCk7CiAgICAgKnNvdXJjZVVSTCA9IHVybDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111050</attachid>
            <date>2011-10-14 12:26:06 -0700</date>
            <delta_ts>2011-10-15 00:14:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62112-20111014122605.patch</filename>
            <type>text/plain</type>
            <size>17938</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVjMTUzYjRiOWUzZWFl
NTRhYTkxNzJiYWI3YTU1ZWUwZDFhNjA1Li41OGU5ZTNjMzU1MWM3ZjRmNmQ5YWRjY2ZkNjEyZjk1
YWQ0YmZjMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMTAtMTMgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGV4dC1hd2FyZSBI
VE1MIHBhc3RlIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjIxMTIKKworICAgICAgICBBZGQgY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwV2l0aENvbnRleHQgd2hpY2ggdW5kZXJzdGFuZHMgZW5vdWdoIGFib3V0IERPTSBzdHJ1Y3R1
cmUgdG8KKyAgICAgICAgcmV0YWluIG5lY2Vzc2FyeSBlbGVtZW50cyB0byBwcmVzZXJ2ZSBzdHJ1
Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugd2hlbiBleHRyYWN0aW5nIGEgc3Vic2V0IG9mCisgICAgICAg
IGEgRE9NIHRyZWUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxv
Y2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRNTEJsb2NrRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjphbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJs
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBl
YXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRB
cHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5vZGVzU3Vy
cm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dCk6CisgICAg
ICAgICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
OjpnZXRBc1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oOgorCiAy
MDExLTEwLTEzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTczNjIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggZjFiMjIxOWQ4NmM1OWY1MWNjMjM3Zjk3
MTIzNDlhNTZmZmIyZjA1NC4uYTMxZjkxMjg1OGI3YzYwN2NlNGVjMjk2MWUwNjc2M2RlNDg0NThi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApAQCAtNzEs
NiArNzEsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9kZSogbm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpOwogCisgICAg
c3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmlu
ZyYgY29tbWVudCk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9kZSosIE5hbWVzcGFj
ZXMqID0gMCk7CkBAIC04Niw3ICs4OCw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFwcGVuZE5h
bWVzcGFjZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwogICAgIEVu
dGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwotICAgIHZvaWQgYXBwZW5k
Q29tbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CiAgICAg
dm9pZCBhcHBlbmREb2N1bWVudFR5cGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmdC
dWlsZGVyJiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOwog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBkMzEwNGI1
ODgwOThkZGMyODdlMGRiMWRhNmMyMzcxYTExOTJmMzJmLi44NzQ2ZTdkYzExNjRhOTVjODQxNTBi
OTAyYzFlODgyZDM0NTVjYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00Mjgs
MTAgKzQyOCwzMyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOb2Rl
c0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBObwogICAgIHJldHVybiBsYXN0Q2xv
c2VkOwogfQogCi1zdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVh
cmFuY2UoTm9kZSogY29tbW9uQW5jZXN0b3IpCitib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2Nr
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxv
Y2sgPSBlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rvcik7CisgICAgcmV0dXJuIG5vZGUtPmhh
c1RhZ05hbWUobGlzdGluZ1RhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykK
KyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUodGFibGVUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpCisg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoeG1wVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNU
YWdOYW1lKGgxVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgyVGFnKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKGgzVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KGg0VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg1VGFnKTsKK30KKworc3RhdGlj
IGJvb2wgaXNIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJu
IG5vZGUtPmhhc1RhZ05hbWUodGRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodGhU
YWcpCisgICAgICAgIHx8IGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChub2RlKTsKK30K
IAorLy8gRklYTUU6IERvIHdlIHdhbnQgdG8gaGFuZGxlIG1haWwgcXVvdGVzIGhlcmUgaW5zdGVh
ZD8KKy8vIFRoaXMgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gaGlnaGVzdEFuY2VzdG9yVG9XcmFw
TWFya3VwIGJ1dCBpdCBtaWdodCBtYWtlIG1vcmUKKy8vIHNlbnNlIHRvIG1vdmUgdGhhdCBpbnRv
IGhlcmUuCitzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFu
Y2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNlc3RvckJsb2NrKQorewogICAgIGlmICghY29tbW9u
QW5jZXN0b3JCbG9jaykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ0MywyMiArNDY2LDIzIEBA
IHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShOb2Rl
KiBjb21tb25BbmNlc3RvcikKICAgICAgICAgcmV0dXJuIHRhYmxlOwogICAgIH0KIAotICAgIGlm
IChjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcpCi0gICAgICAgIHx8
IGNvbW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUob2xUYWcpCi0gICAgICAgIHx8IGNvbW1v
bkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUocHJlVGFnKQotICAgICAgICB8fCBjb21tb25BbmNl
c3RvckJsb2NrLT5oYXNUYWdOYW1lKHRhYmxlVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3Rv
ckJsb2NrLT5oYXNUYWdOYW1lKHVsVGFnKQotICAgICAgICB8fCBjb21tb25BbmNlc3RvckJsb2Nr
LT5oYXNUYWdOYW1lKHhtcFRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFz
VGFnTmFtZShoMVRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFt
ZShoMlRhZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoM1Rh
ZykKLSAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoNFRhZykKLSAg
ICAgICAgfHwgY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZShoNVRhZykpCisgICAgaWYg
KGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb21tb25BbmNlc3RvckJsb2NrKSkKICAg
ICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQmxvY2s7CiAKICAgICByZXR1cm4gMDsKIH0KIAor
c3RhdGljIGlubGluZSBOb2RlKiBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5j
ZShOb2RlKiBjb21tb25BbmNlc3RvcikKK3sKKyAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0
cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhlbmNsb3NpbmdCbG9jayhjb21tb25BbmNlc3Rv
cikpOworfQorCitzdGF0aWMgaW5saW5lIE5vZGUqIGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVB
bmRBcHBlYXJhbmNlV2l0aE5vUmVuZGVyZXIoTm9kZSogY29tbW9uQW5jZXN0b3IpCit7CisgICAg
Tm9kZSogY29tbW9uQW5jZXN0b3JCbG9jayA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKGNvbW1vbkFuY2VzdG9yKSwgaXNIVE1MQmxvY2tFbGVtZW50KTsK
KyAgICByZXR1cm4gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9j
ayhjb21tb25BbmNlc3RvckJsb2NrKTsKK30KKwogc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5n
T3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQp
CiB7CiAgICAgaWYgKCFzdHlsZSkKQEAgLTY4NCw2ICs3MDgsOTIgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBjb25z
dCBjaGFyIGZyYWdtZW50TWFya2VyVGFnW10gPSAid2Via2l0LWZyYWdtZW50LW1hcmtlciI7CisK
K3N0YXRpYyBib29sIGZpbmROb2Rlc1N1cnJvdW5kaW5nQ29udGV4dChEb2N1bWVudCogZG9jdW1l
bnQsIFJlZlB0cjxOb2RlPiYgbm9kZUJlZm9yZUNvbnRleHQsIFJlZlB0cjxOb2RlPiYgbm9kZUFm
dGVyQ29udGV4dCkKK3sKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlm
IChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSAmJiBzdGF0aWNfY2FzdDxD
aGFyYWN0ZXJEYXRhKj4obm9kZSktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtlclRhZykgeworICAg
ICAgICAgICAgaWYgKCFub2RlQmVmb3JlQ29udGV4dCkKKyAgICAgICAgICAgICAgICBub2RlQmVm
b3JlQ29udGV4dCA9IG5vZGU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBu
b2RlQWZ0ZXJDb250ZXh0ID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgTm9kZSog
bm9kZUJlZm9yZUNvbnRleHQsIE5vZGUqIG5vZGVBZnRlckNvbnRleHQpCit7CisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgTm9kZSogbmV4dDsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBu
b2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKyAgICAg
ICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgewor
ICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4
dCkpOworICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCks
IGVjKTsKKyAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0ID09IG5vZGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQobm9kZUFmdGVyQ29udGV4dC0+cGFyZW50Tm9k
ZSgpKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBub2RlQWZ0ZXJDb250ZXh0OyBub2RlOyBub2Rl
ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwor
ICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUsIGVjKTsKKyAgICAg
ICAgQVNTRVJUKCFlYyk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZy
YWdtZW50RW5kLAorICAgIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
aGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBtYXJrdXAgYWxyZWFkeSBjb250YWlucyB0aGVzZSBt
YXJrZXJzLgorCisgICAgU3RyaW5nQnVpbGRlciB0YWdnZWRNYXJrdXA7CisgICAgdGFnZ2VkTWFy
a3VwLmFwcGVuZChtYXJrdXAubGVmdChmcmFnbWVudFN0YXJ0KSk7CisgICAgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFnbWVudE1hcmtlclRhZyk7Cisg
ICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50U3RhcnQsIGZy
YWdtZW50RW5kIC0gZnJhZ21lbnRTdGFydCkpOworICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRDb21tZW50KHRhZ2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOworICAgIHRhZ2dlZE1h
cmt1cC5hcHBlbmQobWFya3VwLnN1YnN0cmluZyhmcmFnbWVudEVuZCkpOworCisgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IHRhZ2dlZEZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKGRvY3VtZW50LCB0YWdnZWRNYXJrdXAudG9TdHJpbmcoKSwgYmFzZVVSTCwgc2NyaXB0aW5n
UGVybWlzc2lvbik7CisgICAgUmVmUHRyPERvY3VtZW50PiB0YWdnZWREb2N1bWVudCA9IERvY3Vt
ZW50OjpjcmVhdGUoMCwgS1VSTCgpKTsKKyAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxk
cmVuRnJvbSh0YWdnZWRGcmFnbWVudC5nZXQoKSk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUJl
Zm9yZUNvbnRleHQ7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7CisgICAgaWYg
KCFmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQodGFnZ2VkRG9jdW1lbnQuZ2V0KCksIG5vZGVC
ZWZvcmVDb250ZXh0LCBub2RlQWZ0ZXJDb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQo
KSwKKyAgICAgICAgcG9zaXRpb25BZnRlck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLAorICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9k
ZUFmdGVyQ29udGV4dC5nZXQoKSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOworICAgIEFTU0VSVCghZWMpOworICAgIE5vZGUq
IHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBl
YXJhbmNlV2l0aE5vUmVuZGVyZXIoY29tbW9uQW5jZXN0b3IpOworCisgICAgLy8gV2hlbiB0aGVy
ZSdzIGEgc3BlY2lhbCBjb21tb24gYW5jZXN0b3Igb3V0c2lkZSBvZiB0aGUgZnJhZ21lbnQsIHdl
IG11c3QgaW5jbHVkZSBpdCBhcyB3ZWxsIHRvCisgICAgLy8gcHJlc2VydmUgdGhlIHN0cnVjdHVy
ZSBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgZnJhZ21lbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgZnJh
Z21lbnQgY29udGFpbnMKKyAgICAvLyBURCwgd2UgbmVlZCB0byBpbmNsdWRlIHRoZSBlbmNsb3Np
bmcgVEFCTEUgdGFnIGFzIHdlbGwuCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBpZiAoc3BlY2lh
bENvbW1vbkFuY2VzdG9yKSB7CisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChzcGVjaWFs
Q29tbW9uQW5jZXN0b3IsIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfSBlbHNlCisg
ICAgICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHN0YXRpY19jYXN0PENvbnRhaW5l
ck5vZGUqPihjb21tb25BbmNlc3RvcikpOworCisgICAgdHJpbUZyYWdtZW50KGZyYWdtZW50Lmdl
dCgpLCBub2RlQmVmb3JlQ29udGV4dC5nZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7CisK
KyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9k
ZSogbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVz
LCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5oCmluZGV4IDFiZmU5MDA2NGNkYjcyZGI3NzJkZjc0NTBhYTRkNzkw
Mjc5ZDU3ZjAuLmYyODcxNWIyMjI5NzdjNTkxZGRiMmRkOTU0NWZjZDMxNjg5YzQxOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoUmFuZ2UqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoRG9j
dW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21lbnRTdGFydCwgdW5z
aWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uKTsKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiwgY29uc3QgVmVjdG9yPE5vZGUqPiYpOwogCiAgICAg
Ym9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlICpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IGE4
ODJlNjMwN2U0ZDg2ODZlZTU3OTYyNGY2MmEwZThhNjc5MmQwNDQuLjkyNjU1ZDhhOTlkZTgyMTRi
ZjFiNTI4NTkwY2M1Yzk2MDZkNGQ4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMTYwLDcgKzE2MCw4
IEBAIFN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBib29sJiBzdWNjZXNzKQogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFu
ZGFyZEJ1ZmZlcjsKICAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKICAgICAgICAgICAgIEtV
Ukwgc291cmNlVVJMOwotICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFk
SFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpZ25vcmVkOworICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRN
TChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0
dXJuIGh0bWxUZXh0OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCBi
MzdlY2E0YzBjY2E4ZTA3MjM5OWNhMDdmNWUwOTFiY2IyYzllNzdjLi5jMTE0ZmY1YjdhNjNiYzE4
NGE0NDVmNDA0NmFhODAyNjUzMDgxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAg
LTk3LDcgKzk3LDggQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5n
KFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgIGlmICh0eXBlKCkgPT0g
bWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAgS1VSTCBp
Z25vcmVkU291cmNlVVJMOwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRI
VE1MKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291
cmNlVVJMKTsKKyAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAgUGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIs
ICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKICAgICAgICAg
Y2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBodG1sKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDZmNTYwNzc3ZDgzMzlhYjVkMmQyN2UzNjdj
ZmIwNmQ2Mjg0N2FjNzEuLjk1NzJmMDk3NWJhNzdjNTlkM2M0ZjQ0Y2Q0MTUwZDdmMTMxM2JmMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVi
b2FyZENocm9taXVtLmNwcApAQCAtMTczLDEwICsxNzMsMTIgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFz
c1JlZlAKICAgICBpZiAoUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJs
ZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJp
bmcgbWFya3VwOwogICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAgICB1
bnNpZ25lZCBmcmFnbWVudFN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRFbmQg
PSAwOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jm1hcmt1cCwgJnNyY1VSTCwgJmZyYWdtZW50U3RhcnQsICZmcmFnbWVudEVuZCk7CiAKICAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0KLSAgICAgICAgICAgIGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBzcmNVUkwsIEZy
YWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXBXaXRoQ29udGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFnbWVudFN0
YXJ0LCBmcmFnbWVudEVuZCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwog
ICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BsYXRmb3JtU3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKaW5kZXggZTMyMTdiYjIwMDM4Y2FiMTNiZDY0YWQzMzU0MGVlZjc3MTU2
Yjg4Ni4uOTBmNDA5NWY5MWQ2ZWU4ZjU0MTU3OWQ4NjgzN2YyY2MyMTMyMzYxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKQEAg
LTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNsaXBib2FyZElzRm9ybWF0
QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRGb3JtYXQsIFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwogCiAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRS
ZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgIHN0
YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIsIFN0cmluZyosIEtVUkwqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRN
TChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKiwgdW5z
aWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFnbWVudEVuZCk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFBy
aXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CiAgICAgc3RhdGljIHVpbnQ2NF90IGNsaXBib2FyZEdl
dFNlcXVlbmNlTnVtYmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGE1NGY4
ODE1MTkzYTc3MDcwZDRkODc0NzdlNzg1OWNiOGNkZGY0MS4uOGM1ZjdmMTBkZGM2M2Y0YjZmMmRk
YmMyMDBiODdhY2E3YjgyZWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMS0xMC0xMyAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4K
KworICAgICAgICBDb250ZXh0LWF3YXJlIEhUTUwgcGFzdGUgZm9yIENocm9taXVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjExMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQgc2lkZSBm
b3IgcGx1bWJpbmcgdG8gcmVjZWl2ZSBjb250ZXh0IGZvciBIVE1MIHBhc3RlLgorCisgICAgICAg
ICogcHVibGljL1dlYkNsaXBib2FyZC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDbGlwYm9hcmQ6
OnJlYWRIVE1MKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorCiAyMDExLTEw
LTEzICBQZW5nIEh1YW5nICA8c2hhd24ucC5odWFuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgW2No
cm9taXVtXSBBZGQgYSBzZWxlY3Rpb25Cb3VuZHMoKSBtZXRob2QgdG8gV2ViV2lkZ2V0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCAyNDFhOWM2
YzM0Y2VjZGJjMjg5MTU0MzBhN2UwNTllNjhkYzE2YmE5Li4xOWY2M2MxYjgyYjBjOTk1YmRkNGE4
ZjMxY2FlMDJkMTU3NGI0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDbGlwYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDbGlwYm9hcmQuaApAQCAtNjMsNyArNjMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0Zvcm1hdEF2YWlsYWJsZShGb3JtYXQsIEJ1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH0KIAog
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRQbGFpblRleHQoQnVmZmVyKSB7IHJldHVybiBXZWJT
dHJpbmcoKTsgfQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHJlYWRIVE1MKEJ1ZmZlciwgV2ViVVJM
KikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKyAgICAvLyBmcmFnbWVudFN0YXJ0IGFuZCBmcmFn
bWVudEVuZCBhcmUgaW5kZXhlcyBpbnRvIHRoZSByZXR1cm5lZCBtYXJrdXAgdGhhdAorICAgIC8v
IGluZGljYXRlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBmcmFnbWVudCBpZiB0aGUgcmV0dXJu
ZWQgbWFya3VwCisgICAgLy8gY29udGFpbnMgYWRkaXRpb25hbCBjb250ZXh0LiBJZiB0aGVyZSBp
cyBubyBhZGRpdGlvbmFsIGNvbnRleHQsCisgICAgLy8gZnJhZ21lbnRTdGFydCB3aWxsIGJlIHpl
cm8gYW5kIGZyYWdtZW50RW5kIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aAorICAgIC8v
IG9mIHRoZSByZXR1cm5lZCBtYXJrdXAuCisgICAgdmlydHVhbCBXZWJTdHJpbmcgcmVhZEhUTUwo
CisgICAgICAgIEJ1ZmZlciBidWZmZXIsIFdlYlVSTCogcGFnZVVSTCwgdW5zaWduZWQqIGZyYWdt
ZW50U3RhcnQsCisgICAgICAgIHVuc2lnbmVkKiBmcmFnbWVudEVuZCkgeyByZXR1cm4gV2ViU3Ry
aW5nKCk7IH0KICAgICB2aXJ0dWFsIFdlYkRhdGEgcmVhZEltYWdlKEJ1ZmZlcikgeyByZXR1cm4g
V2ViRGF0YSgpOyB9CiAKICAgICAvLyBSZXR1cm5zIGFuIGlkZW50aWZpZXIgd2hpY2ggY2FuIGJl
IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEKQEAgLTg3LDcgKzk0LDcgQEAgcHVi
bGljOgogICAgIC8vIHBhc3RlLCBkcmFnIGFuZCBkcm9wLCBhbmQgc2VsZWN0aW9uIGNvcHkgKG9u
IFgpLgogICAgIHZpcnR1YWwgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVhZEF2YWlsYWJsZVR5cGVz
KAogICAgICAgICBCdWZmZXIsIGJvb2wqIGNvbnRhaW5zRmlsZW5hbWVzKSB7IHJldHVybiBXZWJW
ZWN0b3I8V2ViU3RyaW5nPigpOyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0
ZWQgdHlwZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiAKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCBm
cm9tIHRoZSBidWZmZXIuCiAgICAgdmlydHVhbCBib29sIHJlYWREYXRhKAogICAgICAgICBCdWZm
ZXIsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgV2ViU3RyaW5nKiBkYXRhLAogICAgICAgICBXZWJT
dHJpbmcqIG1ldGFkYXRhKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKaW5kZXggNTQ4NzI4NTUwYWJmYjQ4MDZlOWRl
YjJlMTc5N2ViOTViNjJmNDYwZC4uZDFhNzI0MzI1ZDgxOGViOWEwMGRhZTUwOTVkYzlkNjE0NzVh
Mzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBw
b3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQu
Y3BwCkBAIC0xNjgsMTEgKzE2OCwxMSBAQCBTdHJpbmcgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRSZWFkUGxhaW5UZXh0KAogCiB2b2lkIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhU
TUwoCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAg
U3RyaW5nKiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJMKQorICAgIFN0cmluZyogaHRtbFRleHQs
IEtVUkwqIHNvdXJjZVVSTCwgdW5zaWduZWQqIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkKiBmcmFn
bWVudEVuZCkKIHsKICAgICBXZWJVUkwgdXJsOwogICAgICpodG1sVGV4dCA9IHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+cmVhZEhUTUwoCi0gICAgICAgIHN0YXRpY19jYXN0
PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwsIGZyYWdtZW50U3RhcnQsIGZy
YWdtZW50RW5kKTsKICAgICAqc291cmNlVVJMID0gdXJsOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>