<?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>74402</bug_id>
          
          <creation_ts>2011-12-13 05:48:51 -0800</creation_ts>
          <short_desc>didFirstVisuallyNonEmptyLayout() callback is not fired, when Page is restored from PageCache.</short_desc>
          <delta_ts>2020-05-27 13:43:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=156356</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>carlon.luca</cc>
    
    <cc>japhet</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>520048</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-12-13 05:48:51 -0800</bug_when>
    <thetext>didFirstVisuallyNonEmptyLayout() callback is not fired, when Page is restored from PageCache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520056</commentid>
    <comment_count>1</comment_count>
      <attachid>119009</attachid>
    <who name="alan">zalan</who>
    <bug_when>2011-12-13 06:29:44 -0800</bug_when>
    <thetext>Created attachment 119009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520057</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-12-13 06:40:07 -0800</bug_when>
    <thetext>As for the missing test case: looked at both internals.idl and WebKitTestRunner/InjectBundlePage to see where layout related event testing should go, but didnt find a place where it could fit. Any suggestion how to test this properly? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520685</commentid>
    <comment_count>3</comment_count>
      <attachid>119009</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-12-13 22:36:41 -0800</bug_when>
    <thetext>Comment on attachment 119009
Patch

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

&gt; Source/WebCore/loader/FrameLoader.cpp:2034
&gt; +    clear(true, true, false);

This would be a great time to change those booleans to enums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521012</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 09:55:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; As for the missing test case: looked at both internals.idl and WebKitTestRunner/InjectBundlePage to see where layout related event testing should go, but didnt find a place where it could fit. Any suggestion how to test this properly? Thanks.

This is not really an event such as &quot;onload&quot; or &quot;pageshow&quot;, it&apos;s a delegate callback.

WebKitTestRunner need to implement the delegate callback and log it so it shows up in the test output.

InjectBundlePage.cpp has a comment showing where this delegate callback will go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557205</commentid>
    <comment_count>5</comment_count>
      <attachid>127170</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-02-15 06:01:42 -0800</bug_when>
    <thetext>Created attachment 127170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557207</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 06:05:49 -0800</bug_when>
    <thetext>Attachment 127170 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Last 3072 characters of output:
0 master     -&gt; origin/master  (forced update)
	M	LayoutTests/platform/chromium-linux/tables/mozilla/bugs/bug11026-expected.png
	M	LayoutTests/platform/chromium-linux/tables/mozilla/bugs/bug10565-expected.png
	M	LayoutTests/platform/chromium-linux/tables/mozilla/bugs/bug1188-expected.png
	M	LayoutTests/platform/chromium/test_expectations.txt
	A	LayoutTests/platform/chromium-mac-snowleopard/tables/mozilla/bugs/bug11026-expected.png
	A	LayoutTests/platform/chromium-mac-snowleopard/tables/mozilla/bugs/bug10565-expected.png
	M	LayoutTests/platform/chromium-mac-snowleopard/tables/mozilla/bugs/bug1188-expected.png
	D	LayoutTests/platform/chromium-mac/tables/mozilla/bugs/bug11026-expected.png
	D	LayoutTests/platform/chromium-mac/tables/mozilla/bugs/bug10565-expected.png
	M	LayoutTests/platform/chromium-mac-leopard/tables/mozilla/bugs/bug11026-expected.png
	M	LayoutTests/platform/chromium-mac-leopard/tables/mozilla/bugs/bug10565-expected.png
	M	LayoutTests/platform/chromium-mac-leopard/tables/mozilla/bugs/bug1188-expected.png
	M	LayoutTests/platform/chromium-win/tables/mozilla/bugs/bug1188-expected.png
	M	LayoutTests/platform/chromium-win/tables/mozilla/bugs/bug11026-expected.png
	M	LayoutTests/platform/chromium-win/tables/mozilla/bugs/bug10565-expected.png
	A	LayoutTests/inspector/elements/resolve-node-blocked-expected.txt
	A	LayoutTests/inspector/elements/resolve-node-blocked.html
	M	LayoutTests/ChangeLog
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/inspector/InjectedScript.cpp
	M	Source/WebCore/inspector/InjectedScript.h
W: -empty_dir: trunk/LayoutTests/platform/chromium-mac/tables/mozilla/bugs/bug10565-expected.png
W: -empty_dir: trunk/LayoutTests/platform/chromium-mac/tables/mozilla/bugs/bug11026-expected.png
r107808 = 41432d00ee5deb89df7c1d46c048e30e4ec715fb (refs/remotes/origin/master)
First, rewinding head to replay your work on top of it...
Applying: Web Inspector: crash when inspecting an element on a page with eval disabled by CSP
Using index info to reconstruct a base tree...
&lt;stdin&gt;:35: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebCore/inspector/InjectedScript.cpp
CONFLICT (content): Merge conflict in Source/WebCore/inspector/InjectedScript.cpp
Auto-merging Source/WebCore/inspector/InjectedScript.h
CONFLICT (content): Merge conflict in Source/WebCore/inspector/InjectedScript.h
Failed to merge in the changes.
Patch failed at 0001 Web Inspector: crash when inspecting an element on a page with eval disabled by CSP

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557312</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-15 09:05:05 -0800</bug_when>
    <thetext>I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.

The behavior of API callbacks when restoring a page from page cache is very strange - see e.g. bug 62740, but there were other issues I cannot find at the moment.

Can we agree on the behavior of other callbacks (like didFirstLayoutForFrame), and test it systemically?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557321</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-15 09:29:43 -0800</bug_when>
    <thetext>I personally would like a new callback specifically about restoration from the page cache because - as Alexey mentions - this logically isn&apos;t the &quot;first visually nonempty layout&quot;.  Logically there is usually *no* layout after restoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557325</commentid>
    <comment_count>9</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-02-15 09:39:06 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)


&gt; The behavior of API callbacks when restoring a page from page cache is very strange - see e.g. bug 62740, but there were other issues I cannot find at the moment.
&gt; 
&gt; Can we agree on the behavior of other callbacks (like didFirstLayoutForFrame), and test it systemically?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557327</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-15 09:45:27 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
&gt; FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)

You&apos;re saying that history.forward() *WHEN* the forward page is in the page cache makes this call?

But history.back() *WHEN* the back page is in the page cache does not make this call?

That seems unlikely to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557328</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-15 09:46:12 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
&gt; &gt; FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)
&gt; 
&gt; You&apos;re saying that history.forward() *WHEN* the forward page is in the page cache makes this call?
&gt; 
&gt; But history.back() *WHEN* the back page is in the page cache does not make this call?
&gt; 
&gt; That seems unlikely to me.

If history.forward() in the page cache case is different from history.back() in the page cache case, then yes that&apos;s a bizarre inconsistency we should fix.

I still need to see evidence to believe it  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557345</commentid>
    <comment_count>12</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-02-15 10:05:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
&gt; &gt; FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)
&gt; 
&gt; You&apos;re saying that history.forward() *WHEN* the forward page is in the page cache makes this call?
&gt; 
&gt; But history.back() *WHEN* the back page is in the page cache does not make this call?
&gt; 
&gt; That seems unlikely to me.

It&apos;s because FrameLoader::open() calls FrameLoader::clear() too soon, when the mainframe still holds the pointer to the current frameview instance. So we always reset the current frameview and not the one which is being restored.
Let&apos;s say you load page A and page B and then you do history.back() and history.forward(). 
When we are on Page B and history.back() is called, page B&apos;s frameview gets reset, so then later, when doing history.forward() the callback is called. (and similarly, while doing history.forward(), Page A&apos;s frameview gets reset, and then history.back() fires the callback this time)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557348</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-15 10:10:21 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
&gt; &gt; &gt; FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)
&gt; &gt; 
&gt; &gt; You&apos;re saying that history.forward() *WHEN* the forward page is in the page cache makes this call?
&gt; &gt; 
&gt; &gt; But history.back() *WHEN* the back page is in the page cache does not make this call?
&gt; &gt; 
&gt; &gt; That seems unlikely to me.
&gt; 
&gt; It&apos;s because FrameLoader::open() calls FrameLoader::clear() too soon, when the mainframe still holds the pointer to the current frameview instance. So we always reset the current frameview and not the one which is being restored.
&gt; Let&apos;s say you load page A and page B and then you do history.back() and history.forward(). 
&gt; When we are on Page B and history.back() is called, page B&apos;s frameview gets reset, so then later, when doing history.forward() the callback is called. (and similarly, while doing history.forward(), Page A&apos;s frameview gets reset, and then history.back() fires the callback this time)

I see.  So anytime you are navigating from any page X to any page Y that is in the page cache, and page X is eligible for the page cache, page X gets its FrameView reset.

It&apos;s not really about back/forward.

This sounds like a bug.  Again, by design the page is &quot;paused&quot; and looks exactly like it did when you left.  Logically there should be no layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558088</commentid>
    <comment_count>14</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-02-16 04:57:09 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; I&apos;m not sure if this is a bug. Logically, it&apos;s not the first non-empty layout for the page when it is restored.
&gt; &gt; &gt; &gt; FrameLoader does make an attempt to reset frameview and set the callback flags to default. It made me think that sending first non-empty layout, when restoring page, was the expected behavior. However, if we say that the current behavior is correct, history.forward() should not be sending it either (as it does with the current codebase)
&gt; &gt; &gt; 
&gt; &gt; &gt; You&apos;re saying that history.forward() *WHEN* the forward page is in the page cache makes this call?
&gt; &gt; &gt; 
&gt; &gt; &gt; But history.back() *WHEN* the back page is in the page cache does not make this call?
&gt; &gt; &gt; 
&gt; &gt; &gt; That seems unlikely to me.
&gt; &gt; 
&gt; &gt; It&apos;s because FrameLoader::open() calls FrameLoader::clear() too soon, when the mainframe still holds the pointer to the current frameview instance. So we always reset the current frameview and not the one which is being restored.
&gt; &gt; Let&apos;s say you load page A and page B and then you do history.back() and history.forward(). 
&gt; &gt; When we are on Page B and history.back() is called, page B&apos;s frameview gets reset, so then later, when doing history.forward() the callback is called. (and similarly, while doing history.forward(), Page A&apos;s frameview gets reset, and then history.back() fires the callback this time)
&gt; 
&gt; I see.  So anytime you are navigating from any page X to any page Y that is in the page cache, and page X is eligible for the page cache, page X gets its FrameView reset.
&gt; 
&gt; It&apos;s not really about back/forward.
Yes, correct. I should have pointed out that history back/forward was just an easy way to reproduce this inconsistency, but it wasn&apos;t really about back/forward.

&gt; 
&gt; This sounds like a bug.  Again, by design the page is &quot;paused&quot; and looks exactly like it did when you left.  Logically there should be no layout.
Yes, most of the time there should be no layout. However, in some special (mobile) cases, when the content is sized to some fixed width (device-width) and the viewport gets resized (rotated), while the page is in the page cache, it does require layout. But I agree, it still does not justify sending off first non-empty layout again. 
I think, FrameView::reset() needs a close look to figure out, if any of those flags needs reset on page cache restore, and agree on the callbacks as Alexey pointed out.
and yes, I&apos;d also like to see some callback on restoration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588943</commentid>
    <comment_count>15</comment_count>
    <who name="Luca Carlon">carlon.luca</who>
    <bug_when>2012-03-27 08:42:57 -0700</bug_when>
    <thetext>I can reproduce this bug. In Qt, when going back, I can&apos;t get correctly both signals for the size of the content and of the new URL. Setting the cache to 0 pages max solved both the issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588954</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-03-27 08:59:37 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I can reproduce this bug. In Qt, when going back, I can&apos;t get correctly both signals for the size of the content and of the new URL. Setting the cache to 0 pages max solved both the issues.

Luca, please be very explicit about this.

What callback internal to WebCore ends up triggering the &quot;Size of content&quot; signal in Qt?

If you are saying that you are *expecting* to get didFirstVisuallyNonEmptyLayout when you return to a cached page and it&apos;s reproducible that you are *not* getting it...  that is not a bug.  didFirstVisuallyNonEmptyLayout happens for the first layout on a new page.  Period.

If you&apos;re expecting to get some other callback when you return to a cached page, please share what that callback is.

If you&apos;re saying &quot;Qt needs a signal when returning to a cached page for the size-of-content and we&apos;re not getting one&quot; then that&apos;s a port-specific bug for the Qt folks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588965</commentid>
    <comment_count>17</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-03-27 09:11:14 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; I can reproduce this bug. In Qt, when going back, I can&apos;t get correctly both signals for the size of the content and of the new URL. Setting the cache to 0 pages max solved both the issues.
&gt; 
&gt; Luca, please be very explicit about this.
&gt; 
&gt; What callback internal to WebCore ends up triggering the &quot;Size of content&quot; signal in Qt?
&gt; 
&gt; If you are saying that you are *expecting* to get didFirstVisuallyNonEmptyLayout when you return to a cached page and it&apos;s reproducible that you are *not* getting it...  that is not a bug.  didFirstVisuallyNonEmptyLayout happens for the first layout on a new page.  Period.
&gt; 
&gt; If you&apos;re expecting to get some other callback when you return to a cached page, please share what that callback is.
&gt; 
&gt; If you&apos;re saying &quot;Qt needs a signal when returning to a cached page for the size-of-content and we&apos;re not getting one&quot; then that&apos;s a port-specific bug for the Qt folks.
I&apos;ll make this bug Qt specific and open 2 bugs about 
1, WebCore should not send the non-empty delegate callback, when the page is being restored from page cache 
2, WebCore should send delegate callbacks on page restoration. 

After fixing those, which I am planning to do early next week, I can get back to this and fix it for Qt by using the page restoration callbacks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119009</attachid>
            <date>2011-12-13 06:29:44 -0800</date>
            <delta_ts>2011-12-14 00:59:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74402-20111213152939.patch</filename>
            <type>text/plain</type>
            <size>2002</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjY3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTEyLTEzICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXQoKSBjYWxsYmFjayBpcyBub3QgZmlyZWQsIHdoZW4gUGFnZSBpcyByZXN0b3Jl
ZCBmcm9tIFBhZ2VDYWNoZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc0NDAyCisKKyAgICAgICAgRnJhbWVWaWV3OjpjbGVhcigpIGlzIGNhbGxlZCBv
biB0aGUgd3JvbmcgRnJhbVZpZXcgaW5zdGFuY2UsIHdoZW4gdGhlIGFzc29jaWF0ZWQKKyAgICAg
ICAgZnJhbWUgaXMgcmVzdG9yZWQgZnJvbSB0aGUgUGFnZUNhY2hlLiBNYWluZnJhbWUgc3RpbGwg
aG9sZHMgdGhlIGN1cnJlbnQgdmlldydzIHBvaW50ZXIgYXQgdGhlIHRpbWUKKyAgICAgICAgd2hl
biBjbGVhcigpIGlzIGNhbGxlZCwgd2hpY2ggcmVzdWx0cyBpbiByZXNldHRpbmcgdGhlIGN1cnJl
bnQgRnJhbWVWaWV3IGluc3RhbmNlLCBpbnN0ZWFkIG9mIHRoZSBvbmUKKyAgICAgICAgYmVpbmcg
cmVzdG9yZWQuIE5vdCBjYWxsaW5nIGNsZWFyKCkgb24gdGhlIHJlc3RvcmVkIGluc3RhbmNlIGxl
YXZlcyBtX2ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dENhbGxiYWNrUGVuZGluZworICAgICAg
ICBmYWxzZSBhbmQgbm8gY2FsbGJhY2sgaXMgZmlyZWQgZHVyaW5nIHRoZSBmaXJzdCBub24tZW1w
dHkgbGF5b3V0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpvcGVuKToKKwogMjAxMS0xMi0xMyAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgc2NyaXB0cyBuYXZpZ2F0b3Ig
c2lkZWJhciB0byBzY3JpcHRzIHBhbmVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiAxMDI2NzApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMxLDcgKzIwMzEsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpvcGVuKENhY2hlZEZyYW1lQmFzZSYKICAgICBtX2hhc1JlY2VpdmVkRmlyc3RE
YXRhID0gZmFsc2U7CiAKICAgICBzdGFydGVkKCk7Ci0gICAgY2xlYXIodHJ1ZSwgdHJ1ZSwgY2Fj
aGVkRnJhbWUuaXNNYWluRnJhbWUoKSk7CisgICAgY2xlYXIodHJ1ZSwgdHJ1ZSwgZmFsc2UpOwog
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY2FjaGVkRnJhbWUuZG9jdW1lbnQoKTsKICAgICBB
U1NFUlQoZG9jdW1lbnQpOwpAQCAtMjA1Miw2ICsyMDUyLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6
b3BlbihDYWNoZWRGcmFtZUJhc2UmCiAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAg
dmlldy0+c2V0RnJhbWVSZWN0KG1fZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkpOwogICAgIG1f
ZnJhbWUtPnNldFZpZXcodmlldyk7CisgICAgaWYgKGNhY2hlZEZyYW1lLmlzTWFpbkZyYW1lKCkp
CisgICAgICAgIHZpZXctPmNsZWFyKCk7CiAgICAgCiAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQo
ZG9jdW1lbnQpOwogICAgIG1fZnJhbWUtPnNldERPTVdpbmRvdyhjYWNoZWRGcmFtZS5kb21XaW5k
b3coKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127170</attachid>
            <date>2012-02-15 06:01:42 -0800</date>
            <delta_ts>2012-03-28 03:09:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74402-20120215150141.patch</filename>
            <type>text/plain</type>
            <size>25003</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzgwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAyLTE1ICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXQoKSBjYWxsYmFjayBpcyBub3QgZmlyZWQsIHdoZW4gUGFnZSBpcyByZXN0b3Jl
ZCBmcm9tIFBhZ2VDYWNoZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQ0MDIKKworICAgICAgICBGcmFtZVZpZXc6OmNsZWFyKCkgaXMgY2FsbGVk
IG9uIHRoZSB3cm9uZyBGcmFtVmlldyBpbnN0YW5jZSwgd2hlbiB0aGUgYXNzb2NpYXRlZAorICAg
ICAgICBmcmFtZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBQYWdlQ2FjaGUuIE1haW5mcmFtZSBzdGls
bCBob2xkcyB0aGUgY3VycmVudCB2aWV3J3MgcG9pbnRlciBhdCB0aGUgdGltZQorICAgICAgICB3
aGVuIGNsZWFyKCkgaXMgY2FsbGVkLCB3aGljaCByZXN1bHRzIGluIHJlc2V0dGluZyB0aGUgY3Vy
cmVudCBGcmFtZVZpZXcgaW5zdGFuY2UsIGluc3RlYWQgb2YgdGhlIG9uZQorICAgICAgICBiZWlu
ZyByZXN0b3JlZC4gTm90IGNhbGxpbmcgY2xlYXIoKSBvbiB0aGUgcmVzdG9yZWQgaW5zdGFuY2Ug
bGVhdmVzIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2tQZW5kaW5nCisgICAg
ICAgIGZhbHNlIGFuZCBjYWxsYmFjayBpc24ndCBmaXJlZCBkdXJpbmcgdGhlIGZpcnN0IG5vbi1l
bXB0eSBsYXlvdXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9sb2FkZXIvaGlzdG9yeS1uYXZpZ2F0aW9uLWxheW91dC1jYWxsYmFj
ay5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OmJlZ2luKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNhbmNlbEFuZENsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6b3Blbik6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6
CisKIDIwMTItMDItMTMgIEJyaWFuIEdyaW5zdGVhZCAgPGJyaWFuZ3JpbnN0ZWFkQGdtYWlsLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgY29sb3JwaWNrZXIgZnVuY3Rpb25hbGl0
eSB0byBjb2xvciBzd2F0Y2hlcyBpbiBTdHlsZXMgU2lkZWJhcgpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCShyZXZpc2lvbiAxMDc1NzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDExIEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OmJlZ2luKGNvbnN0IEtVUkwmIHUKICAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjb25zdWx0IHRoZSBjb250ZW50IHNlY3VyaXR5IHBv
bGljeSBoZXJlIGFib3V0IGJsb2NrZWQgcGx1Zy1pbnM/CiAKICAgICBib29sIHJlc2V0U2NyaXB0
aW5nID0gIShtX2ZyYW1lLT5sb2FkZXIoKS0+c3RhdGVNYWNoaW5lKCktPmlzRGlzcGxheWluZ0lu
aXRpYWxFbXB0eURvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNTZWN1cmVUcmFu
c2l0aW9uVG8odXJsKSk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsZWFyKHJlc2V0U2NyaXB0
aW5nLCByZXNldFNjcmlwdGluZyk7CisgICAgRnJhbWVMb2FkZXI6OkNsZWFyRmxhZ3MgdG9CZUNs
ZWFyZWQgPSBGcmFtZUxvYWRlcjo6Q2xlYXJGcmFtZVZpZXc7CisgICAgaWYgKHJlc2V0U2NyaXB0
aW5nKQorICAgICAgICB0b0JlQ2xlYXJlZCB8PSAoRnJhbWVMb2FkZXI6OkNsZWFyV2luZG93UHJv
cGVydGllcyB8IEZyYW1lTG9hZGVyOjpDbGVhclNjcmlwdE9iamVjdHMpOworCisgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmNsZWFyKHRvQmVDbGVhcmVkKTsKICAgICBjbGVhcigpOwogICAgIGlmIChy
ZXNldFNjcmlwdGluZykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBsYXRmb3Jt
U2NyaXB0T2JqZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAxMDc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsMTEgKzUwNywxMSBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjYW5jZWxBbmRDbGVhcigpCiAgICAgaWYgKCFtX2lzQ29tcGxldGUpCiAgICAgICAgIGNsb3Nl
VVJMKCk7CiAKLSAgICBjbGVhcihmYWxzZSk7CisgICAgY2xlYXIoQ2xlYXJTY3JpcHRPYmplY3Rz
IHwgQ2xlYXJGcmFtZVZpZXcpOwogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT51cGRhdGVQbGF0Zm9y
bVNjcmlwdE9iamVjdHMoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVh
cldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJh
bWVWaWV3KQordm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoQ2xlYXJGbGFncyBpdGVtc1RvQmVDbGVh
cmVkKQogewogICAgIG1fZnJhbWUtPmVkaXRvcigpLT5jbGVhcigpOwogCkBAIC01MzEsMTQgKzUz
MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihib29sIGNsZWFyV2luZG93CiAgICAgfQog
CiAgICAgLy8gRG8gdGhpcyBhZnRlciBkZXRhY2hpbmcgdGhlIGRvY3VtZW50IHNvIHRoYXQgdGhl
IHVubG9hZCBldmVudCB3b3Jrcy4KLSAgICBpZiAoY2xlYXJXaW5kb3dQcm9wZXJ0aWVzKSB7Cisg
ICAgaWYgKGl0ZW1zVG9CZUNsZWFyZWQgJiBDbGVhcldpbmRvd1Byb3BlcnRpZXMpIHsKICAgICAg
ICAgbV9mcmFtZS0+Y2xlYXJET01XaW5kb3coKTsKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCkt
PmNsZWFyV2luZG93U2hlbGwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSk7CiAg
ICAgfQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7CiAgICAgbV9mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmNsZWFyKCk7Ci0gICAgaWYgKGNsZWFyRnJhbWVWaWV3ICYmIG1fZnJh
bWUtPnZpZXcoKSkKKyAgICBpZiAoKGl0ZW1zVG9CZUNsZWFyZWQgJiBDbGVhckZyYW1lVmlldykg
JiYgbV9mcmFtZS0+dmlldygpKQogICAgICAgICBtX2ZyYW1lLT52aWV3KCktPmNsZWFyKCk7CiAK
ICAgICAvLyBEbyBub3QgZHJvcCB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBTY3JpcHRDb250cm9s
bGVyIGFuZCB2aWV3IGFyZSBjbGVhcmVkCkBAIC01NDcsNyArNTQ3LDcgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvdwogCiAgICAgbV9zdWJmcmFtZUxvYWRlci5jbGVh
cigpOwogCi0gICAgaWYgKGNsZWFyU2NyaXB0T2JqZWN0cykKKyAgICBpZiAoaXRlbXNUb0JlQ2xl
YXJlZCAmIENsZWFyU2NyaXB0T2JqZWN0cykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmNs
ZWFyU2NyaXB0T2JqZWN0cygpOwogCiAgICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigp
LT5jbGVhcigpOwpAQCAtMjAyOSw3ICsyMDI5LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6b3BlbihD
YWNoZWRGcmFtZUJhc2UmCiAgICAgbV9oYXNSZWNlaXZlZEZpcnN0RGF0YSA9IGZhbHNlOwogCiAg
ICAgc3RhcnRlZCgpOwotICAgIGNsZWFyKHRydWUsIHRydWUsIGNhY2hlZEZyYW1lLmlzTWFpbkZy
YW1lKCkpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY2FjaGVkRnJhbWUuZG9jdW1lbnQo
KTsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwpAQCAtMjA1MCw3ICsyMDQ5LDEyIEBAIHZvaWQgRnJh
bWVMb2FkZXI6Om9wZW4oQ2FjaGVkRnJhbWVCYXNlJgogICAgIGlmIChtX2ZyYW1lLT52aWV3KCkp
CiAgICAgICAgIHZpZXctPnNldEZyYW1lUmVjdChtX2ZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgp
KTsKICAgICBtX2ZyYW1lLT5zZXRWaWV3KHZpZXcpOwotICAgIAorCisgICAgQ2xlYXJGbGFncyB0
b0JlQ2xlYXJlZCA9IENsZWFyV2luZG93UHJvcGVydGllcyB8IENsZWFyU2NyaXB0T2JqZWN0czsK
KyAgICBpZiAoY2FjaGVkRnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgdG9CZUNsZWFyZWQg
fD0gQ2xlYXJGcmFtZVZpZXc7CisgICAgY2xlYXIodG9CZUNsZWFyZWQpOworCiAgICAgbV9mcmFt
ZS0+c2V0RG9jdW1lbnQoZG9jdW1lbnQpOwogICAgIG1fZnJhbWUtPnNldERPTVdpbmRvdyhjYWNo
ZWRGcmFtZS5kb21XaW5kb3coKSk7CiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFVSTChk
b2N1bWVudC0+dXJsKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJl
dmlzaW9uIDEwNzU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BM
b2FkaW5nKFVubG9hZEV2ZW50UG9saWN5KTsKICAgICBib29sIGNsb3NlVVJMKCk7CiAgICAgdm9p
ZCBjYW5jZWxBbmRDbGVhcigpOwotICAgIHZvaWQgY2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3Bl
cnRpZXMgPSB0cnVlLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cyA9IHRydWUsIGJvb2wgY2xlYXJG
cmFtZVZpZXcgPSB0cnVlKTsKKyAgICBlbnVtIENsZWFyRmxhZyB7CisgICAgICAgIENsZWFyV2lu
ZG93UHJvcGVydGllcyA9IDEgPDwgMCwKKyAgICAgICAgQ2xlYXJTY3JpcHRPYmplY3RzID0gMSA8
PCAxLAorICAgICAgICBDbGVhckZyYW1lVmlldyA9IDEgPDwgMgorICAgIH07CisgICAgdHlwZWRl
ZiB1bnNpZ25lZCBDbGVhckZsYWdzOworICAgIHZvaWQgY2xlYXIoQ2xlYXJGbGFncyk7CiAKICAg
ICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5n
TWFpblJlc291cmNlOyB9CiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEwNzgwNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAyLTE1ICBaYWxhbiBCdWp0YXMgIDx6YnVq
dGFzQGdtYWlsLmNvbT4KKworICAgICAgICBBZGQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcExh
eW91dERlbGVnYXRlQ2FsbGJhY2tzKCkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisKIDIwMTItMDItMTUg
IFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
PHN0eWxlIHNjb3BlZD46IEFsbG93IDxzdHlsZSBzY29wZWQ+IGFzIGEgZGlyZWN0IGNoaWxkIG9m
IGEgU2hhZG93Um9vdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
TG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTA3NTczKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2VMb2FkZXJDbGllbnQ6OmRpZAogICAgIHVzZXJEYXRhID0gYWRvcHRSZWYodG9JbXBsKHVzZXJE
YXRhVG9QYXNzKSk7CiB9CiAKLQogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQ6
OmRpZExheW91dEZvckZyYW1lKFdlYlBhZ2UqIHBhZ2UsIFdlYkZyYW1lKiBmcmFtZSkKIHsKICAg
ICBpZiAoIW1fY2xpZW50LmRpZExheW91dEZvckZyYW1lKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3ODA1KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDItMTUg
IFphbGFuIEJ1anRhcyAgPHpidWp0YXNAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gQWRkIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcygpCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJU
cmVlOjpEdW1wUmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6
dGl0bGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RHVt
cFJlbmRlclRyZWU6OmluaXRpYWxMYXlvdXRDb21wbGV0ZWQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNob3VsZER1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcyk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcExheW91dERlbGVnYXRlQ2FsbGJhY2tzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbDoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdl
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JGcmFtZSk6CisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oOgorICAgICAg
ICAoSW5qZWN0ZWRCdW5kbGVQYWdlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6TGF5b3V0
VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAg
IChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wTGF5b3V0RGVsZWdhdGVDYWxsYmFja3Mp
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvdWxkRHVtcExheW91dERl
bGVnYXRlQ2FsbGJhY2tzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKwogMjAx
Mi0wMi0xNSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XSBGaXggV2ViR0wgaW4gUXRUZXN0QnJvd3NlcgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHJldmlzaW9uIDEwNzU3MykKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTksNiArNDU5LDggQEAgRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkK
IAogICAgIGNvbm5lY3QobV9wYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChj
b25zdCBRU3RyaW5nJikpLAogICAgICAgICAgICAgU0xPVCh0aXRsZUNoYW5nZWQoY29uc3QgUVN0
cmluZyYpKSk7CisgICAgY29ubmVjdChtX3BhZ2UtPm1haW5GcmFtZSgpLCBTSUdOQUwoaW5pdGlh
bExheW91dENvbXBsZXRlZCgpKSwKKyAgICAgICAgICAgIFNMT1QoaW5pdGlhbExheW91dENvbXBs
ZXRlZCgpKSk7CiAgICAgY29ubmVjdChtX3BhZ2UsIFNJR05BTChkYXRhYmFzZVF1b3RhRXhjZWVk
ZWQoUVdlYkZyYW1lKixRU3RyaW5nKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9UKGR1bXBEYXRh
YmFzZVF1b3RhKFFXZWJGcmFtZSosUVN0cmluZykpKTsKICAgICBjb25uZWN0KG1fcGFnZSwgU0lH
TkFMKGFwcGxpY2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKFFXZWJTZWN1cml0eU9yaWdpbiAqLCBx
dWludDY0LCBxdWludDY0KSksCkBAIC0xMDE4LDYgKzEwMjAsMTIgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZTo6dGl0bGVDaGFuZ2VkKGNvbnN0CiAgICAgICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDog
JXNcbiIsIHMudG9VdGY4KCkuZGF0YSgpKTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZTo6aW5p
dGlhbExheW91dENvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fY29udHJvbGxlci0+c2hvdWxkRHVt
cExheW91dERlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgICAgIHByaW50ZigiTEFZT1VUIERFTEVH
QVRFOiBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSBtYWluIGZyYW1lXG4i
KTsKK30KKwogdm9pZCBEdW1wUmVuZGVyVHJlZTo6Y29ubmVjdEZyYW1lKFFXZWJGcmFtZSAqZnJh
bWUpCiB7CiAgICAgY29ubmVjdChmcmFtZSwgU0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RD
bGVhcmVkKCkpLCB0aGlzLCBTTE9UKGluaXRKU09iamVjdHMoKSkpOwpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24gMTA3NTczKQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNiArMTE3LDcgQEAgcHVibGljIFFfU0xPVFM6CiAKICAgICB2b2lkIGR1bXAoKTsK
ICAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nICZzKTsKKyAgICB2b2lkIGluaXRp
YWxMYXlvdXRDb21wbGV0ZWQoKTsKICAgICB2b2lkIGNvbm5lY3RGcmFtZShRV2ViRnJhbWUgKmZy
YW1lKTsKICAgICB2b2lkIGR1bXBEYXRhYmFzZVF1b3RhKFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFFTdHJpbmcmIGRiTmFtZSk7CiAgICAgdm9pZCBkdW1wQXBwbGljYXRpb25DYWNoZVF1b3RhKFFX
ZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBxdWludDY0IGRlZmF1bHRPcmlnaW5RdW90YSwgcXVp
bnQ2NCB0b3RhbFNwYWNlTmVlZGVkKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xh
eW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiAxMDc1NzMpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNl
dCgpCiAgICAgbV93YWl0Rm9yRG9uZSA9IGZhbHNlOwogICAgIG1fZGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSA9IGZhbHNlOwogICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9
IGZhbHNlOworICAgIG1fZHVtcExheW91dERlbGVnYXRlQ2FsbGJhY2tzID0gZmFsc2U7CiAgICAg
bV9kdW1wRGF0YWJhc2VDYWxsYmFja3MgPSBmYWxzZTsKICAgICBtX2R1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3MgPSBmYWxzZTsKICAgICBtX2R1bXBTdGF0dXNDYWxsYmFja3Mg
PSBmYWxzZTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDEwNzU3MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRIYW5kbGVFcnJvclBhZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYW5kbGVFcnJvclBhZ2VzOyB9CiAgICAgYm9vbCBjYW5PcGVuV2luZG93cygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KICAgICBib29sIHNob3VsZER1bXBUaXRs
ZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KKyAgICBib29s
IHNob3VsZER1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVt
cExheW91dERlbGVnYXRlQ2FsbGJhY2tzOyB9CiAgICAgYm9vbCB3YWl0Rm9yUG9saWN5KCkgY29u
c3QgeyByZXR1cm4gbV93YWl0Rm9yUG9saWN5OyB9CiAgICAgYm9vbCBpZ25vcmVSZXFlc3RGb3JQ
ZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uOyB9
CiAgICAgYm9vbCBpc1ByaW50aW5nKCkgeyByZXR1cm4gbV9pc1ByaW50aW5nOyB9CkBAIC0xNDQs
NiArMTQ1LDcgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZExpc3Qo
KTsKICAgICBRU3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3QgUVN0cmluZyYgdXJsKTsK
ICAgICB2b2lkIGR1bXBUaXRsZUNoYW5nZXMoKSB7IG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7
IH0KKyAgICB2b2lkIGR1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcygpIHsgbV9kdW1wTGF5b3V0
RGVsZWdhdGVDYWxsYmFja3MgPSB0cnVlOyB9CiAgICAgUVN0cmluZyBlbmNvZGVIb3N0TmFtZShj
b25zdCBRU3RyaW5nJiBob3N0KTsKICAgICBRU3RyaW5nIGRlY29kZUhvc3ROYW1lKGNvbnN0IFFT
dHJpbmcmIGhvc3QpOwogICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoKSBjb25zdCB7fQpAQCAt
MzAxLDYgKzMwMyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Nhbk9wZW5XaW5kb3dzOwogICAg
IGJvb2wgbV93YWl0Rm9yRG9uZTsKICAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKKyAgICBi
b29sIG1fZHVtcExheW91dERlbGVnYXRlQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9kdW1wRGF0YWJh
c2VDYWxsYmFja3M7CiAgICAgYm9vbCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxs
YmFja3M7CiAgICAgYm9vbCBtX2R1bXBTdGF0dXNDYWxsYmFja3M7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAxMDc1NzMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNiw3ICsyMDYsNyBAQCBJbmplY3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFnZShX
CiAgICAgICAgIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSwKICAgICAgICAgZGlk
UmVjZWl2ZVRpdGxlRm9yRnJhbWUsCiAgICAgICAgIDAsIC8vIGRpZEZpcnN0TGF5b3V0Rm9yRnJh
bWUKLSAgICAgICAgMCwgLy8gZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUK
KyAgICAgICAgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUsCiAgICAgICAg
IDAsIC8vIGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeQogICAgICAgICBkaWREaXNwbGF5SW5z
ZWN1cmVDb250ZW50Rm9yRnJhbWUsCiAgICAgICAgIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZy
YW1lLApAQCAtMzYwLDYgKzM2MCwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVj
ZWl2ZVRpdGxlCiAgICAgc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpLT5kaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSh0aXRsZSwgZnJh
bWUpOwogfQogCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFdLVHlwZVJlZiosIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgc3RhdGlj
X2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
LT5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShmcmFtZSk7Cit9CisKIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHdvcmxkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQogewogICAgIHN0YXRpY19jYXN0PEluamVj
dGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+ZGlkQ2xlYXJX
aW5kb3dGb3JGcmFtZShmcmFtZSwgd29ybGQpOwpAQCAtNjM5LDYgKzY0NCwxNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm9zKCkgPDwgIlRJVExFIENIQU5HRUQ6ICIgPDwgdGl0bGUgPDwgIlxuIjsKIH0KIAor
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCit7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRE
dW1wTGF5b3V0RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkxBWU9VVCBERUxFR0FURTogZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUgIiA8PCBmcmFtZSA8PCAiXG4iOworfQorCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewogICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuaAkocmV2aXNpb24gMTA3NTczKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgIFdLVHlwZVJlZios
IGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZy
YW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgV0tFcnJvclJlZiwgV0tUeXBl
UmVmKiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZy
YW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbWVSZWYs
IFdLVHlwZVJlZiosIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVS
ZWYsIFdLVHlwZVJlZiosIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDbGVhcldp
bmRvd0ZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGRpZENhbmNlbENs
aWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCBj
b25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdEZv
ckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgV0tVUkxSZWYgdXJsLCBk
b3VibGUgZGVsYXksIGRvdWJsZSBkYXRlLCBjb25zdCB2b2lkKik7CkBAIC03OCw2ICs3OSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJl
Zik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVS
ZWYsIFdLRXJyb3JSZWYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJp
bmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbWVSZWYpOworICAgIHZvaWQgZGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZik7CiAgICAgdm9pZCBkaWRD
bGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYsIFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWYpOwogICAgIHZvaWQgZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShXS0J1bmRsZUZy
YW1lUmVmKTsKICAgICB2b2lkIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShXS0J1
bmRsZUZyYW1lUmVmLCBXS1VSTFJlZiB1cmwsIGRvdWJsZSBkZWxheSwgZG91YmxlIGRhdGUpOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwNzU3MykKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIExheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICAsIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2Up
CiAgICAgLCBtX2R1bXBTdGF0dXNDYWxsYmFja3MoZmFsc2UpCiAgICAgLCBtX2R1bXBUaXRsZUNo
YW5nZXMoZmFsc2UpCisgICAgLCBtX2R1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcyhmYWxzZSkK
ICAgICAsIG1fZHVtcFBpeGVscyh0cnVlKQogICAgICwgbV9kdW1wRnVsbFNjcmVlbkNhbGxiYWNr
cyhmYWxzZSkKICAgICAsIG1fd2FpdFRvRHVtcChmYWxzZSkKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250
cm9sbGVyLmgJKHJldmlzaW9uIDEwNzU3MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NiArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdCgpIHsgfSAvLyBX
aWxsIG5lZWQgdG8gZG8gc29tZXRoaW5nIHdoZW4gd2Ugc3VwcG9ydCBwaXhlbCB0ZXN0cy4KICAg
ICB2b2lkIGR1bXBTdGF0dXNDYWxsYmFja3MoKSB7IG1fZHVtcFN0YXR1c0NhbGxiYWNrcyA9IHRy
dWU7IH0KICAgICB2b2lkIGR1bXBUaXRsZUNoYW5nZXMoKSB7IG1fZHVtcFRpdGxlQ2hhbmdlcyA9
IHRydWU7IH0KKyAgICB2b2lkIGR1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcygpIHsgbV9kdW1w
TGF5b3V0RGVsZWdhdGVDYWxsYmFja3MgPSB0cnVlOyB9CiAgICAgdm9pZCBkdW1wRnVsbFNjcmVl
bkNhbGxiYWNrcygpIHsgbV9kdW1wRnVsbFNjcmVlbkNhbGxiYWNrcyA9IHRydWU7IH0KICAgICB2
b2lkIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGRldmljZURQSSwgaW50IGRldmlj
ZVdpZHRoLCBpbnQgZGV2aWNlSGVpZ2h0LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFi
bGVIZWlnaHQpOwogCkBAIC0xNDcsNiArMTQ4LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxk
RHVtcE1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93aGF0VG9EdW1w
ID09IFJlbmRlclRyZWU7IH0KICAgICBib29sIHNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSBj
b25zdCB7IHJldHVybiBtX2R1bXBTdGF0dXNDYWxsYmFja3M7IH0KICAgICBib29sIHNob3VsZER1
bXBUaXRsZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KKyAg
ICBib29sIHNob3VsZER1bXBMYXlvdXREZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fZHVtcExheW91dERlbGVnYXRlQ2FsbGJhY2tzOyB9CiAgICAgYm9vbCBzaG91bGREdW1wUGl4
ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wUGl4ZWxzOyB9CiAgICAgYm9vbCBzaG91bGREdW1w
RnVsbFNjcmVlbkNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEZ1bGxTY3JlZW5DYWxs
YmFja3M7IH0KICAgICBib29sIGlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7IH0KQEAgLTIxNCw2ICsyMTYsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsKICAgICBib29sIG1fZHVtcFN0YXR1
c0NhbGxiYWNrczsKICAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKKyAgICBib29sIG1fZHVt
cExheW91dERlbGVnYXRlQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9kdW1wUGl4ZWxzOwogICAgIGJv
b2wgbV9kdW1wRnVsbFNjcmVlbkNhbGxiYWNrczsKICAgICBib29sIG1fd2FpdFRvRHVtcDsgLy8g
VHJ1ZSBpZiB3YWl0VW50aWxEb25lKCkgaGFzIGJlZW4gY2FsbGVkLCBidXQgbm90aWZ5RG9uZSgp
IGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0Q29udHJvbGxlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlv
dXRUZXN0Q29udHJvbGxlci5pZGwJKHJldmlzaW9uIDEwNzU3MykKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvTGF5b3V0VGVzdENvbnRyb2xsZXIuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG1vZHVsZSBXVFIgewogICAgICAgICB2
b2lkIGR1bXBTZWxlY3Rpb25SZWN0KCk7CiAgICAgICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNr
cygpOwogICAgICAgICB2b2lkIGR1bXBUaXRsZUNoYW5nZXMoKTsKKyAgICAgICAgdm9pZCBkdW1w
TGF5b3V0RGVsZWdhdGVDYWxsYmFja3MoKTsKICAgICAgICAgdm9pZCBkdW1wRnVsbFNjcmVlbkNh
bGxiYWNrcygpOwogICAgICAgICB2b2lkIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW4g
aW50IGRldmljZURQSSwgaW4gaW50IGRldmljZVdpZHRoLCBpbiBpbnQgZGV2aWNlSGVpZ2h0LCBp
biBpbnQgYXZhaWxhYmxlV2lkdGgsIGluIGludCBhdmFpbGFibGVIZWlnaHQpOwogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMDc4MDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMi0xNSAgWmFsYW4gQnVqdGFzICA8emJ1anRhc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQWRkIHRlc3QgdG8gY2hlY2sgZGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0KCkgY2FsbGJhY2sgZmlyaW5nLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9sb2FkZXIvaGlzdG9yeS1uYXZpZ2F0aW9u
LWxheW91dC1jYWxsYmFjay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9h
ZGVyL2hpc3RvcnktbmF2aWdhdGlvbi1sYXlvdXQtY2FsbGJhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEyLTAyLTE1ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDbGVhbiB1cCByYWRpbyBidXR0b24g
dGVzdHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL2hpc3RvcnktbmF2aWdhdGlvbi1s
YXlvdXQtY2FsbGJhY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbG9hZGVyL2hpc3RvcnktbmF2aWdhdGlvbi1sYXlvdXQtY2FsbGJhY2stZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvaGlzdG9yeS1uYXZpZ2F0
aW9uLWxheW91dC1jYWxsYmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NCBAQAorTEFZT1VUIERFTEVHQVRFOiBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JG
cmFtZSBtYWluIGZyYW1lCitMQVlPVVQgREVMRUdBVEU6IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dEZvckZyYW1lIG1haW4gZnJhbWUKK0xBWU9VVCBERUxFR0FURTogZGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUgbWFpbiBmcmFtZQorZ28gYXdheSBhbmQgY29tZSBi
YWNrLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvaGlzdG9yeS1uYXZpZ2F0aW9uLWxh
eW91dC1jYWxsYmFjay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVy
L2hpc3RvcnktbmF2aWdhdGlvbi1sYXlvdXQtY2FsbGJhY2suaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL2hpc3RvcnktbmF2aWdhdGlvbi1sYXlvdXQtY2FsbGJh
Y2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8c2NyaXB0Pgor
CisvLyBOYXZpZ2F0aW9uIHN0ZXBzOgorLy8gMS0gbG9hZHMgdGhpcyBwYWdlIGFuZCBmb3JjZSBs
YXlvdXQuCisvLyAyLSBsb2FkcyBuZXcgcGFnZSBhbmQgZm9yY2UgbGF5b3V0IG9uIGl0LgorLy8g
My0gaW5pdGlhdGVzIGhpc3RvcnkgYmFjayBuYXZpZ2F0aW9uIGFuZCBmb3JjZSBsYXlvdXQgYWdh
aW4uCitmdW5jdGlvbiBmb3JjZUxheW91dEFmdGVyTmF2aWdhdGVCYWNrVG9DYWNoZWRQYWdlKCkg
eworICAgIC8vIEZvcmNlIGxheW91dCBhZnRlciBoaXN0b3J5IGJhY2sgbmF2aWdhdGlvbi4KKyAg
ICAvLyBEb2N1bWVudCBpcyBmcm9tIHBhZ2UgY2FjaGUgdGhpcyB0aW1lLgorICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0VG9wOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24g
bmF2aWdhdGVBd2F5QW5kQmFjaygpIHsKKyAgICAvLyBGb3JjZSBsYXlvdXQuCisgICAgZG9jdW1l
bnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAvLyBBc3NpZ25pbmcgdG8gd2luZG93LmxvY2F0aW9u
IGRvZXMgbm90IGNyZWF0ZSBhIGhpc3RvcnkgZW50cnksIHNvIGluc3RlYWQgbGluayBjbGljayBp
cyBzaW11bGF0ZWQuCisgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2
ZW50cyIpOworICAgIGV2dC5pbml0TW91c2VFdmVudCgiY2xpY2siLCB0cnVlLCB0cnVlLCB3aW5k
b3csIDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTsK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5jaG9yJykuZGlzcGF0Y2hFdmVudChldnQp
OworICAgIC8vIEluaXRpYXRlIHRpbWVyIHRvIGRvIGZpbmFsIHZlcmlmaWNhdGlvbiBhcyB3ZSBo
YXZlIG5hdmlnYXRlZCBiYWNrIHRvIHRoZSBjYWNoZWQgdmVyc2lvbiBvZiB0aGlzIHBhZ2UuCisg
ICAgLy8gVGhpcyB0ZXN0IG1ha2VzIHVzZSBvZiB0aGUgYmVoYXZpb3Igd2hlcmUgdGltZXJzIGFy
ZSByZXN0b3JlZCBvbiBhIGNhY2hlZCBwYWdlLgorICAgIHdpbmRvdy5zZXRUaW1lb3V0KCJmb3Jj
ZUxheW91dEFmdGVyTmF2aWdhdGVCYWNrVG9DYWNoZWRQYWdlKCkiLCAxMDAwKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdFN0ZXAoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRVc2VzUGFnZUNhY2hl
UHJlZmVyZW5jZUtleSIsIDEpOworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcExheW91
dERlbGVnYXRlQ2FsbGJhY2tzKCk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KCJuYXZpZ2F0ZUF3YXlBbmRC
YWNrKCkiLCAwKTsKK30KKworPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3J1blRlc3RTdGVwKCkn
PgorICA8YSBpZD0nYW5jaG9yJyBocmVmPSdkYXRhOnRleHQvaHRtbCw8Ym9keSBvbmxvYWQ9ImRv
Y3VtZW50LmJvZHkub2Zmc2V0VG9wOyBoaXN0b3J5LmJhY2soKSI+PC9ib2R5Pic+Z28gYXdheSBh
bmQgY29tZSBiYWNrLjwvYT4KKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNp
b24gMTA3NTczKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw5IEBAIEJVR1BLQVNUSU5HIFNL
SVAgOiBhbmltYXRpb25zL2FuaW1hdGlvbi0KIEJVR1dLNjA4NzcgU0tJUCA6IGxvYWRlci9uYXZp
Z2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sID0gRkFJTAogQlVHV0s2MDg3NyBTS0lQ
IDogbG9hZGVyL2xvYWQtZGVmZXItcmVzdW1lLWNyYXNoLmh0bWwgPSBGQUlMCiAKKy8vIFVuc2tp
cCBhZnRlciBpbXBsZW1lbnRpbmcgRFJUIHN1cHBvcnQgZm9yIGxheW91dCBkZWxlZ2F0ZSBjYWxs
YmFjayBkdW1wCitCVUdXSzc4NzA5IFNLSVAgOiBmYXN0L2xvYWRlci9oaXN0b3J5LW5hdmlnYXRp
b24tbGF5b3V0LWNhbGxiYWNrLmh0bWwgPSBGQUlMCisKIC8vIENTUzMgU2VsZWN0b3JzMyB0ZXN0
IHN1aXRlCiBCVUdDUjg5NDY4IDogY3NzMy9zZWxlY3RvcnMzID0gUEFTUyBGQUlMCiAKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCShyZXZpc2lvbiAxMDc1NzMpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTA0MCw2ICsxMDQwLDcg
QEAgaHR0cC90ZXN0cy9sb2FkaW5nL29ubG9hZC12cy1pbW1lZGlhdGUtcgogCiAjIEJVRzogTWlz
c2luZyBEUlQgQVBJLgogaHR0cC90ZXN0cy9sb2FkaW5nL3ByZWxvYWQtc2xvdy1sb2FkaW5nLnBo
cAorZmFzdC9sb2FkZXIvaGlzdG9yeS1uYXZpZ2F0aW9uLWxheW91dC1jYWxsYmFjay5odG1sCiAK
ICMgQlVHOiBNaXNzaW5nIHJlc291cmNlIGxvYWQgY2FsbGJhY2sgYWJpbGl0eSBpbiBEUlQKIGh0
dHAvdGVzdHMvbG9hZGluZy9yZWRpcmVjdC1tZXRob2RzLmh0bWwKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCShyZXZpc2lvbiAxMDc1NzMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtOTMyLDYgKzkzMiw3IEBAIGVkaXRpbmcvcGFz
dGVib2FyZC81NzYxNTMwLTEuaHRtbAogCiAjIE1pc3NpbmcgRFJUIEFQSS4KIGh0dHAvdGVzdHMv
bG9hZGluZy9wcmVsb2FkLXNsb3ctbG9hZGluZy5waHAKK2Zhc3QvbG9hZGVyL2hpc3RvcnktbmF2
aWdhdGlvbi1sYXlvdXQtY2FsbGJhY2suaHRtbAogCiAjIERpcmVjdG9yeSB1cGxvYWQgaXMgbm90
IGVuYWJsZWQuCiBmYXN0L2Zvcm1zL2ZpbGUvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0
bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiAxMDc1NzMpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYg
KzM0OSw5IEBAIGVkaXRpbmcvc2VsZWN0aW9uL2NvbnRleHQtbWVudS1vbi10ZXh0LmgKICMgYW5k
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTAyMQogbWVkaWEvY29u
dGV4dC1tZW51LWFjdGlvbnMuaHRtbAogCisjIG1pc3NpbmcgRFJUIEFQSS4KK2Zhc3QvbG9hZGVy
L2hpc3RvcnktbmF2aWdhdGlvbi1sYXlvdXQtY2FsbGJhY2suaHRtbAorCiAjIHJlcXVpcmVzIHZp
ZGVvLmJ1ZmZlcmVkIHRvIGJlIGFibGUgdG8gcmV0dXJuIG11bHRpcGxlIHRpbWVyYW5nZXMKIGh0
dHAvdGVzdHMvbWVkaWEvdmlkZW8tYnVmZmVyZWQuaHRtbAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>