<?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>26651</bug_id>
          
          <creation_ts>2009-06-23 10:12:00 -0700</creation_ts>
          <short_desc>Add a preference to disable hardware acceleration</short_desc>
          <delta_ts>2009-06-27 21:19:07 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127641</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-23 10:12:00 -0700</bug_when>
    <thetext>We need to add a pref to turn off hardware accleration, for these reasons:
* Need to be able to flip a pref in order to test without hardware
* Need a kill switch for applications which may have issues with hardware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127923</commentid>
    <comment_count>1</comment_count>
      <attachid>31788</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-24 09:31:01 -0700</bug_when>
    <thetext>Created attachment 31788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127960</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-24 12:05:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/6989101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127961</commentid>
    <comment_count>3</comment_count>
      <attachid>31788</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-24 12:05:21 -0700</bug_when>
    <thetext>Comment on attachment 31788
Patch

Needs some more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128061</commentid>
    <comment_count>4</comment_count>
      <attachid>31825</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-24 18:33:49 -0700</bug_when>
    <thetext>Created attachment 31825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128088</commentid>
    <comment_count>5</comment_count>
      <attachid>31825</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-24 20:49:31 -0700</bug_when>
    <thetext>Comment on attachment 31825
Patch

&gt; Index: WebCore/page/Settings.cpp
&gt; ===================================================================

Is m_acceleratedCompositingDisabled initialized in the constructor?

&gt; +void Settings::setAcceleratedCompositingDisabled(bool disabled)
&gt; +{
&gt; +    if (m_acceleratedCompositingDisabled == disabled)
&gt; +        return;

It&apos;s not worth doing this optimization here.

&gt; Index: WebCore/page/Settings.h
&gt; ===================================================================
&gt; --- WebCore/page/Settings.h	(revision 44993)
&gt; +++ WebCore/page/Settings.h	(working copy)
&gt; @@ -241,6 +241,9 @@ namespace WebCore {
&gt;          void setXSSAuditorEnabled(bool);
&gt;          bool xssAuditorEnabled() const { return m_xssAuditorEnabled; }
&gt;  
&gt; +        void setAcceleratedCompositingDisabled(bool);
&gt; +        bool acceleratedCompositingDisabled() const { return m_acceleratedCompositingDisabled; }

I think we should turn this around, and rename these as &quot;acceleratedCompositingEnabled&quot;.
It can default to true if ACCELERATED_COMPOSITING is defined.

&gt; +bool RenderLayer::hasAcceleratedCompositing() const
&gt; +{
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    return compositor()-&gt;hasAcceleratedCompositing();
&gt; +#else
&gt; +    return false;
&gt; +#endif
&gt; +}

I don&apos;t think this is ever used.

&gt; Index: WebCore/rendering/RenderLayerCompositor.cpp
&gt; ===================================================================

&gt; +bool RenderLayerCompositor::hasAcceleratedCompositing(bool updateFromPref /*= false*/)
&gt; +{
&gt; +    if (updateFromPref) {
&gt; +        bool accelerationDisabled = m_renderView-&gt;frameView()-&gt;frame()-&gt;page()-&gt;settings() &amp;&amp; m_renderView-&gt;frameView()-&gt;frame()-&gt;page()-&gt;settings()-&gt;acceleratedCompositingDisabled();

m_renderView-&gt;document()-&gt;settings() is shorter.


&gt; Index: WebCore/rendering/RenderLayerCompositor.h
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderLayerCompositor.h	(revision 44993)
&gt; +++ WebCore/rendering/RenderLayerCompositor.h	(working copy)
&gt; @@ -56,6 +56,9 @@ public:
&gt;      // This will make a compositing layer at the root automatically, and hook up to
&gt;      // the native view/window system.
&gt;      void enableCompositingMode(bool enable = true);
&gt; +    
&gt; +    // Returns true if the accelerated compositing is enabled
&gt; +    bool hasAcceleratedCompositing(bool updateFromPref=false);

Darin hates boolean arguments, because they make the code at the call site hard to read, and I agree.
An enum would make it more readable, or just two methods: hasAcceleratedCompositing() and hasAcceleratedCompositingCached()
or something.

&gt; Index: WebKit/mac/WebView/WebPreferenceKeysPrivate.h
&gt; ===================================================================
&gt; --- WebKit/mac/WebView/WebPreferenceKeysPrivate.h	(revision 44993)
&gt; +++ WebKit/mac/WebView/WebPreferenceKeysPrivate.h	(working copy)
&gt; @@ -82,6 +82,7 @@
&gt;  #define WebKitOfflineWebApplicationCacheEnabledPreferenceKey @&quot;WebKitOfflineWebApplicationCacheEnabled&quot;
&gt;  #define WebKitZoomsTextOnlyPreferenceKey @&quot;WebKitZoomsTextOnly&quot;
&gt;  #define WebKitXSSAuditorEnabledPreferenceKey @&quot;WebKitXSSAuditorEnabled&quot;
&gt; +#define WebKitAcceleratedCompositingDisabledPreferenceKey @&quot;WebKitAcceleratedCompositingDisabled&quot;

I&apos;m torn about whether the key should have &quot;enabled&quot; or &quot;disabled&quot; in the name. The closest equivalent
is WebKitEnableDeferredUpdates, which is only on for SnowLeopard, so I suggest we follow that.

&gt; Index: WebKit/mac/WebView/WebPreferences.h
&gt; ===================================================================

&gt; +    @method acceleratedCompositingDisabled
&gt; +*/
&gt; +- (BOOL)acceleratedCompositingDisabled;
&gt; +
&gt; +/*!
&gt; +    @method setAcceleratedCompositingDisabled:
&gt; +    @param size

size?

&gt; +*/
&gt; +- (void)setAcceleratedCompositingDisabled:(BOOL)disabled;

I also think these should use &apos;enabled&apos;.

So one more round and I think we&apos;ve got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128216</commentid>
    <comment_count>6</comment_count>
      <attachid>31864</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-25 10:58:33 -0700</bug_when>
    <thetext>Created attachment 31864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128231</commentid>
    <comment_count>7</comment_count>
      <attachid>31864</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-25 12:02:04 -0700</bug_when>
    <thetext>Comment on attachment 31864
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 45129)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,43 @@
&gt; +2009-06-24  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26651
&gt; +
&gt; +        Preference is named &quot;WebKitAcceleratedCompositingDisabled&quot;

It&apos;s WebKitAcceleratedCompositingEnabled now.

&gt; +        and is a boolean value. Prevents compositing layers from
&gt; +        being created, which prevents hardware animation from running.
&gt; +        Also forces video to do software rendering. Added a cache for
&gt; +        the flag in RenderLayerCompositing and made it all work
&gt; +        on-the-fly when the flag is changed while a page is loaded.
&gt; + 
&gt; +        * WebCore.base.exp:
&gt; +        * page/FrameView.cpp:
&gt; +        (WebCore::FrameView::updateCompositingLayers):
&gt; +        * page/Settings.cpp:
&gt; +        (WebCore::Settings::setAcceleratedCompositingDisabled):
&gt; +        * page/Settings.h:
&gt; +        (WebCore::Settings::acceleratedCompositingDisabled):

These method names changed, so you should run prepare-changelog again.

&gt; Index: WebCore/page/Settings.cpp
&gt; ===================================================================

&gt; -static void setNeedsReapplyStylesInAllFrames(Page* page)
&gt; +static void setNeedsReapplyStylesInAllFrames(Page* page, bool /*updateCompositingLayers*/ = false)
&gt;  {
&gt; -    for (Frame* frame = page-&gt;mainFrame(); frame; frame = frame-&gt;tree()-&gt;traverseNext())
&gt; +    for (Frame* frame = page-&gt;mainFrame(); frame; frame = frame-&gt;tree()-&gt;traverseNext()) {
&gt; +        //if (updateCompositingLayers)
&gt; +        //    frame-&gt;view()-&gt;updateCompositingLayers(FrameView::ForcedCompositingUpdate);
&gt;          frame-&gt;setNeedsReapplyStyles();
&gt; +    }

Some unwanted changes here.

&gt;  }
&gt;  
&gt;  #if USE(SAFARI_THEME)
&gt; @@ -104,6 +108,7 @@ Settings::Settings(Page* page)
&gt;      // they can&apos;t use by. Leaving enabled for now to not change existing behavior.
&gt;      , m_downloadableBinaryFontsEnabled(true)
&gt;      , m_xssAuditorEnabled(false)
&gt; +    , m_acceleratedCompositingEnabled(true)

I think you should #ifdef to default to true if ACCEL_COMP is defined, false otherwise.



&gt; +void RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag()
&gt; +{
&gt; +    

Extra blank line here.

&gt; +    bool hasAcceleratedCompositing = m_renderView-&gt;document()-&gt;settings() &amp;&amp; m_renderView-&gt;frameView()-&gt;frame()-&gt;page()-&gt;settings()-&gt;acceleratedCompositingEnabled();

The cleaner way to do this is:

  bool hasAcceleratedCompositing = false;
  if (Settings* settings = m_renderView-&gt;document()-&gt;settings())
    hasAcceleratedCompositing = settings-&gt; acceleratedCompositingEnabled();


&gt; Index: WebCore/rendering/RenderLayerCompositor.h
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderLayerCompositor.h	(revision 44993)
&gt; +++ WebCore/rendering/RenderLayerCompositor.h	(working copy)
&gt; @@ -56,6 +56,12 @@ public:
&gt;      // This will make a compositing layer at the root automatically, and hook up to
&gt;      // the native view/window system.
&gt;      void enableCompositingMode(bool enable = true);
&gt; +    
&gt; +    // Returns true if the accelerated compositing is enabled
&gt; +    bool hasAcceleratedCompositing() { return m_hasAcceleratedCompositing; }

Should be const.


&gt; Index: WebKit/mac/ChangeLog
&gt; ===================================================================
&gt; --- WebKit/mac/ChangeLog	(revision 45129)
&gt; +++ WebKit/mac/ChangeLog	(working copy)
&gt; @@ -1,3 +1,25 @@
&gt; +2009-06-24  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26651
&gt; +
&gt; +        Preference is named &quot;WebKitAcceleratedCompositingDisabled&quot;
&gt; +        and is a boolean value. Prevents compositing layers from
&gt; +        being created, which prevents hardware animation from running.
&gt; +        Also forces video to do software rendering. Added a cache for
&gt; +        the flag in RenderLayerCompositing and made it all work
&gt; +        on-the-fly when the flag is changed while a page is loaded.
&gt; +
&gt; +        * WebView/WebPreferenceKeysPrivate.h:
&gt; +        * WebView/WebPreferences.h:
&gt; +        * WebView/WebPreferences.mm:
&gt; +        (+[WebPreferences initialize]):
&gt; +        (-[WebPreferences acceleratedCompositingDisabled]):
&gt; +        (-[WebPreferences setAcceleratedCompositingDisabled:]):
&gt; +        * WebView/WebView.mm:
&gt; +        (-[WebView _preferencesChangedNotification:]):

Need to update this changelog too.

&gt; Index: WebKit/mac/WebView/WebPreferences.mm
&gt; ===================================================================
&gt; --- WebKit/mac/WebView/WebPreferences.mm	(revision 44993)
&gt; +++ WebKit/mac/WebView/WebPreferences.mm	(working copy)
&gt; @@ -348,6 +348,7 @@ static WebCacheModel cacheModelForMainBu
&gt;          [NSNumber numberWithBool:NO],   WebKitOfflineWebApplicationCacheEnabledPreferenceKey,
&gt;          [NSNumber numberWithBool:YES],  WebKitZoomsTextOnlyPreferenceKey,
&gt;          [NSNumber numberWithBool:NO],   WebKitXSSAuditorEnabledPreferenceKey,
&gt; +        [NSNumber numberWithBool:YES],  WebKitAcceleratedCompositingEnabledPreferenceKey,
&gt;          nil];

I think it should only default to YES when ACCEL_COMP is defined.

&gt; +- (BOOL)acceleratedCompositingEnabled
&gt; +{
&gt; +    return [self _boolValueForKey: WebKitAcceleratedCompositingEnabledPreferenceKey];
&gt; +}
&gt; +
&gt; +- (void)setAcceleratedCompositingEnabled:(BOOL)enabled
&gt; +{
&gt; +    [self _setBoolValue: enabled forKey: WebKitAcceleratedCompositingEnabledPreferenceKey];

WebKit style is no spaces after the colons.

r=me with those cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128286</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-25 15:04:23 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.base.exp
Sending        WebCore/page/FrameView.cpp
Sending        WebCore/page/Settings.cpp
Sending        WebCore/page/Settings.h
Sending        WebCore/rendering/RenderLayer.cpp
Sending        WebCore/rendering/RenderLayer.h
Sending        WebCore/rendering/RenderLayerBacking.cpp
Sending        WebCore/rendering/RenderLayerCompositor.cpp
Sending        WebCore/rendering/RenderLayerCompositor.h
Sending        WebCore/rendering/RenderObject.h
Sending        WebKit/mac/ChangeLog
Sending        WebKit/mac/WebView/WebPreferenceKeysPrivate.h
Sending        WebKit/mac/WebView/WebPreferences.h
Sending        WebKit/mac/WebView/WebPreferences.mm
Sending        WebKit/mac/WebView/WebView.mm
Transmitting file data ................
Committed revision 45199.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128548</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-26 13:43:15 -0700</bug_when>
    <thetext>Simon and I talked about it and decided that this flag should always default to true, to avoid someone running on Leopard, getting the flag set to false, then running on SL and having accelerated compositing turned off. I will submit a patch for this.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128550</commentid>
    <comment_count>10</comment_count>
      <attachid>31947</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-26 13:48:06 -0700</bug_when>
    <thetext>Created attachment 31947
Additional Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128551</commentid>
    <comment_count>11</comment_count>
      <attachid>31947</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-26 13:49:46 -0700</bug_when>
    <thetext>Comment on attachment 31947
Additional Patch

File is wrong in the patch, will try again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128552</commentid>
    <comment_count>12</comment_count>
      <attachid>31948</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-26 13:53:12 -0700</bug_when>
    <thetext>Created attachment 31948
Additional Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128588</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-06-26 15:59:05 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/page/Settings.cpp
Sending        WebKit/mac/ChangeLog
Sending        WebKit/mac/WebView/WebPreferences.mm
Transmitting file data ....
Committed revision 45292.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128707</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-27 21:19:07 -0700</bug_when>
    <thetext>*** Bug 23913 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31788</attachid>
            <date>2009-06-24 09:31:01 -0700</date>
            <delta_ts>2009-06-24 18:33:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>26651.patch</filename>
            <type>text/plain</type>
            <size>8878</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTA4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDYtMjQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjY1MQorCisgICAgICAgIFBy
ZWZlcmVuY2UgaXMgbmFtZWQgIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCIK
KyAgICAgICAgYW5kIGlzIGEgYm9vbGVhbiB2YWx1ZS4gUHJldmVudHMgY29tcG9zaXRpbmcgbGF5
ZXJzIGZyb20KKyAgICAgICAgYmVpbmcgY3JlYXRlZCwgd2hpY2ggcHJldmVudHMgaGFyZHdhcmUg
YW5pbWF0aW9uIGZyb20gcnVubmluZy4KKyAgICAgICAgQWxzbyBmb3JjZXMgdmlkZW8gdG8gZG8g
c29mdHdhcmUgcmVuZGVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAg
ICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjphY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlz
YWJsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5BY2NlbGVyYXRlVmlk
ZW9SZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpu
ZWVkc1RvQmVDb21wb3NpdGVkKToKKwogMjAwOS0wNi0yNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeGVzIGZvciBFTkFCTEUoUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC02NjAsNiArNjYwLDcgQEAgX19a
TjdXZWJDb3JlOFNldHRpbmdzMzZzZXRPZmZsaW5lV2ViQXBwbAogX19aTjdXZWJDb3JlOFNldHRp
bmdzNDBzZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5RWIKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczQwc2V0VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvckVO
U18zN1RleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3JFCiBfX1pON1dlYkNvcmU4
U2V0dGluZ3M0MXNldE5lZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzRWIKK19f
Wk43V2ViQ29yZThTZXR0aW5nczMzc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkRWIK
IF9fWk43V2ViQ29yZThibGFua1VSTEV2CiBfX1pON1dlYkNvcmU4bWFrZVJHQkFFaWlpaQogX19a
TjdXZWJDb3JlOHBhcnNlVVJMRVJLTlNfNlN0cmluZ0UKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0
aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNp
b24gNDQ5OTMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NjQsNCArNDY0LDEyIEBAIHZvaWQgU2V0dGluZ3M6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJv
b2wKICAgICBtX3hzc0F1ZGl0b3JFbmFibGVkID0geHNzQXVkaXRvckVuYWJsZWQ7CiB9CiAKK3Zv
aWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZChib29sIGRpc2Fi
bGVkKQoreworICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCA9PSBkaXNh
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlz
YWJsZWQgPSBkaXNhYmxlZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmgJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0MSw2ICsyNDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgeHNzQXVkaXRvckVu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3hzc0F1ZGl0b3JFbmFibGVkOyB9CiAKKyAgICAgICAg
dm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQoYm9vbCk7CisgICAgICAgIGJv
b2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQ7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBh
Z2UqIG1fcGFnZTsKICAgICAgICAgCkBAIC0zMDEsNiArMzA0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB1bnNpZ25lZCBtX2VkaXRpbmdCZWhhdmlvciA6IDE7CiAgICAgICAgIGJv
b2wgbV9kb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1f
eHNzQXVkaXRvckVuYWJsZWQgOiAxOworICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0Rpc2FibGVkIDogMTsKIAogI2lmIFVTRShTQUZBUklfVEhFTUUpCiAgICAgICAgIHN0YXRp
YyBib29sIGdTaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA0NDk5MykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgogCiAjaWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC00ODUsNyArNDg2LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNhbkFjY2VsZXJhdAogewogICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIG5lZWQgdG8gbG9vayBh
dCBhbGwgYW5jZXN0b3JzIGZvciBtYXNrIG9yIHZpZGVvLiBCdXQgZm9yIG5vdywKICAgICAvLyBq
dXN0IGJhaWwgb24gdGhlIG9idmlvdXMgY2FzZXMuCi0gICAgaWYgKG8tPmhhc01hc2soKSB8fCBv
LT5oYXNSZWZsZWN0aW9uKCkpCisgICAgYm9vbCBhY2NlbGVyYXRpb25EaXNhYmxlZCA9IG8tPmRv
Y3VtZW50KCktPnNldHRpbmdzKCkgJiYgby0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkKCk7CisgICAgaWYgKG8tPmhhc01hc2soKSB8fCBvLT5o
YXNSZWZsZWN0aW9uKCkgfHwgYWNjZWxlcmF0aW9uRGlzYWJsZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiBvLT5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCk7CkBA
IC03MTEsNyArNzEzLDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmhhczNEQ29udGVu
dAogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bmVlZHNUb0JlQ29tcG9zaXRlZChjb25z
dCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzQ29tcG9z
aXRpbmdMYXllcihsYXllcikgfHwgbGF5ZXItPm11c3RPdmVybGF5Q29tcG9zaXRlZExheWVycygp
OworICAgIGJvb2wgYWNjZWxlcmF0aW9uRGlzYWJsZWQgPSBsYXllci0+cmVuZGVyZXIoKS0+ZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKSAmJiBsYXllci0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkKCk7CisgICAgcmV0dXJuICFh
Y2NlbGVyYXRpb25EaXNhYmxlZCAmJiAocmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGxheWVyKSB8
fCBsYXllci0+bXVzdE92ZXJsYXlDb21wb3NpdGVkTGF5ZXJzKCkpOwogfQogCiAjZGVmaW5lIFZF
UkJPU0VfQ09NUE9TSVRJTkdMQVlFUiAgICAwCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDUwODUpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA5
LTA2LTI0ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY2NTEKKworICAgICAgICBQcmVmZXJlbmNlIGlzIG5hbWVkICJX
ZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQiCisgICAgICAgIGFuZCBpcyBhIGJv
b2xlYW4gdmFsdWUuIFByZXZlbnRzIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tCisgICAgICAgIGJl
aW5nIGNyZWF0ZWQsIHdoaWNoIHByZXZlbnRzIGhhcmR3YXJlIGFuaW1hdGlvbiBmcm9tIHJ1bm5p
bmcuCisgICAgICAgIEFsc28gZm9yY2VzIHZpZGVvIHRvIGRvIHNvZnR3YXJlIHJlbmRlcmluZy4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg6CisgICAgICAg
ICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToKKyAgICAg
ICAgKC1bV2ViUHJlZmVyZW5jZXMgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkXSk6Cisg
ICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxl
ZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAwOS0wNi0yNCAgSmVmZiBK
b2huc29uICA8b3BlbmRhcndpbkBsYXBjYXRzb2Z0d2FyZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VLZXlzUHJpdmF0ZS5oCShyZXZpc2lvbiA0NDk5MykKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
NyBAQAogI2RlZmluZSBXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWRQcmVm
ZXJlbmNlS2V5IEAiV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIgogI2Rl
ZmluZSBXZWJLaXRab29tc1RleHRPbmx5UHJlZmVyZW5jZUtleSBAIldlYktpdFpvb21zVGV4dE9u
bHkiCiAjZGVmaW5lIFdlYktpdFhTU0F1ZGl0b3JFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktp
dFhTU0F1ZGl0b3JFbmFibGVkIgorI2RlZmluZSBXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RGlzYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2Fi
bGVkIgogCiAvLyBUaGVzZSBhcmUgcHJpdmF0ZSBib3RoIGJlY2F1c2UgY2FsbGVycyBzaG91bGQg
YmUgdXNpbmcgdGhlIGNvdmVyIG1ldGhvZHMgYW5kIGJlY2F1c2UgdGhlCiAvLyBjb3ZlciBtZXRo
b2RzIHRoZW1zZWx2ZXMgYXJlIHByaXZhdGUuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMuaAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDYgKzQzNywxNyBAQCBjYWNoaW5nIGJlaGF2
aW9yLgogKi8KIC0gKFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbDsKIAorLyohCisgICAgQG1ldGhv
ZCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQKKyovCistIChCT09MKWFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdEaXNhYmxlZDsKKworLyohCisgICAgQG1ldGhvZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRGlzYWJsZWQ6CisgICAgQHBhcmFtIHNpemUKKyovCistICh2b2lkKXNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZDooQk9PTClkaXNhYmxlZDsKKwogQGVuZAogCiAjdW5k
ZWYgV2ViTlNVSW50ZWdlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQko
cmV2aXNpb24gNDQ5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM0OCw2ICszNDgsNyBAQCBzdGF0aWMgV2ViQ2FjaGVNb2RlbCBj
YWNoZU1vZGVsRm9yTWFpbkJ1CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10s
ICAgV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRab29tc1RleHRP
bmx5UHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwg
ICBXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZFByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2Fi
bGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgbmlsXTsKIAogICAgIC8vIFRoaXMgdmFsdWUgc2hv
dWxkbid0IGV2ZXIgY2hhbmdlLCB3aGljaCBpcyBhc3N1bWVkIGluIHRoZSBpbml0aWFsaXphdGlv
biBvZiBXZWJLaXRQREZEaXNwbGF5TW9kZVByZWZlcmVuY2VLZXkgYWJvdmUKQEAgLTczOCw2ICs3
MzksMTYgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIHJl
dHVybiBbc2VsZiBfaW50ZWdlclZhbHVlRm9yS2V5OldlYktpdENhY2hlTW9kZWxQcmVmZXJlbmNl
S2V5XTsKIH0KIAorLSAoQk9PTClhY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQKK3sKKyAg
ICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0Rpc2FibGVkUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0Rpc2FibGVkOihCT09MKWRpc2FibGVkCit7CisgICAgW3NlbGYgX3NldEJvb2xW
YWx1ZTogZGlzYWJsZWQgZm9yS2V5OiBXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJs
ZWRQcmVmZXJlbmNlS2V5XTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViUHJlZmVy
ZW5jZXMgKFdlYlByaXZhdGUpCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDQ5
OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTMwMyw2ICsxMzAzLDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVk
KAogICAgIHNldHRpbmdzLT5zZXRab29tc1RleHRPbmx5KFtwcmVmZXJlbmNlcyB6b29tc1RleHRP
bmx5XSk7CiAgICAgc2V0dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKFtwcmVmZXJlbmNlcyBp
c1hTU0F1ZGl0b3JFbmFibGVkXSk7CiAgICAgc2V0dGluZ3MtPnNldEVuZm9yY2VDU1NNSU1FVHlw
ZUluU3RyaWN0TW9kZSghV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5pV2Vi
IiwgLTEsIDIuMSkpOworICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlz
YWJsZWQoW3ByZWZlcmVuY2VzIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZF0pOwogfQog
CiBzdGF0aWMgaW5saW5lIElNUCBnZXRNZXRob2QoaWQgbywgU0VMIHMpCg==
</data>
<flag name="review"
          id="16373"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31825</attachid>
            <date>2009-06-24 18:33:49 -0700</date>
            <delta_ts>2009-06-25 10:58:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>26651.patch</filename>
            <type>text/plain</type>
            <size>17516</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDYtMjQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjY1MQorCisgICAgICAgIFBy
ZWZlcmVuY2UgaXMgbmFtZWQgIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCIK
KyAgICAgICAgYW5kIGlzIGEgYm9vbGVhbiB2YWx1ZS4gUHJldmVudHMgY29tcG9zaXRpbmcgbGF5
ZXJzIGZyb20KKyAgICAgICAgYmVpbmcgY3JlYXRlZCwgd2hpY2ggcHJldmVudHMgaGFyZHdhcmUg
YW5pbWF0aW9uIGZyb20gcnVubmluZy4KKyAgICAgICAgQWxzbyBmb3JjZXMgdmlkZW8gdG8gZG8g
c29mdHdhcmUgcmVuZGVyaW5nLiBBZGRlZCBhIGNhY2hlIGZvcgorICAgICAgICB0aGUgZmxhZyBp
biBSZW5kZXJMYXllckNvbXBvc2l0aW5nIGFuZCBtYWRlIGl0IGFsbCB3b3JrCisgICAgICAgIG9u
LXRoZS1mbHkgd2hlbiB0aGUgZmxhZyBpcyBjaGFuZ2VkIHdoaWxlIGEgcGFnZSBpcyBsb2FkZWQu
CisgCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
dHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQpOgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjphY2NlbGVyYXRlZENv
bXBvc2l0aW5nRGlzYWJsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlTGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjplbmFibGVDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5BY2NlbGVyYXRlVmlkZW9S
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpuZWVkc1RvQmVDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGVzdHJveVJvb3RQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hdHJpeFJlbmRlcmFibGUpOgor
CiAyMDA5LTA2LTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
NDQ5OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
MCw2ICs2NjAsNyBAQCBfX1pON1dlYkNvcmU4U2V0dGluZ3MzNnNldE9mZmxpbmVXZWJBcHBsCiBf
X1pON1dlYkNvcmU4U2V0dGluZ3M0MHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzNDBzZXRUZXh0RGlyZWN0aW9uU3VibWVudUlu
Y2x1c2lvbkJlaGF2aW9yRU5TXzM3VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlv
ckUKIF9fWk43V2ViQ29yZThTZXR0aW5nczQxc2V0TmVlZHNLZXlib2FyZEV2ZW50RGlzYW1iaWd1
YXRpb25RdWlya3NFYgorX19aTjdXZWJDb3JlOFNldHRpbmdzMzNzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRGlzYWJsZWRFYgogX19aTjdXZWJDb3JlOGJsYW5rVVJMRXYKIF9fWk43V2ViQ29yZTht
YWtlUkdCQUVpaWlpCiBfX1pON1dlYkNvcmU4cGFyc2VVUkxFUktOU182U3RyaW5nRQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OmFw
cGx5T3ZlcmZsb3dUb1ZpZXdwb3J0KAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlIHVwZGF0ZVR5cGUpCiB7CiAgICAgUmVuZGVyVmlldyog
dmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIGlmICh2aWV3ICYmIHZpZXct
PmNvbXBvc2l0b3IoKSkgeworICAgICAgICAvLyBUaGlzIGNhbGwgd2lsbCBtYWtlIHN1cmUgdGhl
IGNhY2hlZCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nIGlzIHVwZGF0ZWQgZnJvbSB0aGUgcHJl
ZgorICAgICAgICB2aWV3LT5jb21wb3NpdG9yKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
dHJ1ZSk7CisgICAgfQorICAgIAogICAgIGlmICghdmlldyB8fCAhdmlldy0+dXNlc0NvbXBvc2l0
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA0NDk5
MykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw0
ICs0NjQsMTIgQEAgdm9pZCBTZXR0aW5nczo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbAogICAg
IG1feHNzQXVkaXRvckVuYWJsZWQgPSB4c3NBdWRpdG9yRW5hYmxlZDsKIH0KIAordm9pZCBTZXR0
aW5nczo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit7
CisgICAgaWYgKG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkID09IGRpc2FibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCA9
IGRpc2FibGVkOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2
aXNpb24gNDQ5OTMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQxLDYgKzI0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRY
U1NBdWRpdG9yRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCB4c3NBdWRpdG9yRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1feHNzQXVkaXRvckVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZChib29sKTsKKyAgICAgICAgYm9vbCBhY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdEaXNhYmxlZDsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFnZSogbV9w
YWdlOwogICAgICAgICAKQEAgLTMwMSw2ICszMDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHVuc2lnbmVkIG1fZWRpdGluZ0JlaGF2aW9yIDogMTsKICAgICAgICAgYm9vbCBtX2Rv
d25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV94c3NBdWRp
dG9yRW5hYmxlZCA6IDE7CisgICAgICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlz
YWJsZWQgOiAxOwogCiAjaWYgVVNFKFNBRkFSSV9USEVNRSkKICAgICAgICAgc3RhdGljIGJvb2wg
Z1Nob3VsZFBhaW50TmF0aXZlQ29udHJvbHM7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCShyZXZpc2lvbiA0NDk5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjpy
ZW5kZXJlckNvbnRlbnRDaGFuZ2VkCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogCitib29sIFJlbmRlckxheWVyOjpoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkg
Y29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIGNv
bXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6c2V0U3RhdGljWShpbnQg
c3RhdGljWSkKIHsKICAgICBpZiAobV9zdGF0aWNZID09IHN0YXRpY1kpCkBAIC0zMzksNyArMzQ4
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICAgICAgQVNTRVJU
KGJveCk7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKICAgICAgICAgYm94
LT5zdHlsZSgpLT5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIGJveC0+Ym9yZGVyQm94UmVj
dCgpLnNpemUoKSwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgICAg
ICBtYWtlTWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0pOworICAgICAgICBtYWtlTWF0cml4
UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKTsKICAgICB9CiAKICAgICBpZiAoaGFkM0RUcmFuc2Zvcm0gIT0gaGFzM0RUcmFu
c2Zvcm0oKSkKQEAgLTM1Niw3ICszNjUsNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJM
YXllcjo6Y3VycmVuCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07
CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5hbmltYXRp
b24oKS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogICAgICAgICBz
dHlsZS0+YXBwbHlUcmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcmVuZGVyQm94KCktPmJvcmRlckJv
eFJlY3QoKS5zaXplKCksIFJlbmRlclN0eWxlOjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAg
ICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSk7CisgICAgICAgIG1ha2VN
YXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpKTsKICAgICAgICAgcmV0dXJuIGN1cnJUcmFuc2Zvcm07CiAgICAgfQog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDQ0OTkzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYg
KzI4OSw5IEBAIHB1YmxpYzoKICAgICAvLyBBbGxvd3MgdXBkYXRlcyBvZiBsYXllciBjb250ZW50
IHdpdGhvdXQgcmVwYWludGluZy4KICAgICB2b2lkIHJlbmRlcmVyQ29udGVudENoYW5nZWQoKTsK
ICNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZyBpcyBlbmFibGVkCisgICAgYm9vbCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29u
c3Q7CiAgICAgCiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiAgICAgdm9pZCB1cGRh
dGVMYXllclBvc2l0aW9ucyhib29sIGRvRnVsbFJlcGFpbnQgPSBmYWxzZSwgYm9vbCBjaGVja0Zv
clJlcGFpbnQgPSB0cnVlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUxheWVyVHJhbgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHQ7CiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9ybSgpKSB7CiAgICAgICAgIHN0
eWxlLT5hcHBseVRyYW5zZm9ybSh0LCB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94
UmVjdCgpLnNpemUoKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAg
ICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSh0KTsKKyAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFi
bGUodCwgY29tcG9zaXRvcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOwogICAgIH0K
ICAgICAKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFRyYW5zZm9ybSh0KTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gNDQ5OTMp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKIAogI2lmIFBST0ZJTEVfTEFZRVJfUkVCVUlMRAogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtODcsNiArODgsNyBAQCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBtX2NvbXBvc2l0aW5nKGZhbHNlKQogICAgICwg
bV9yb290TGF5ZXJBdHRhY2hlZChmYWxzZSkKICAgICAsIG1fY29tcG9zaXRpbmdMYXllcnNOZWVk
VXBkYXRlKGZhbHNlKQorICAgICwgbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpCiAj
aWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAgICAgLCBtX3Jvb3RMYXllclVwZGF0ZUNvdW50KDAp
CiAjZW5kaWYgLy8gUFJPRklMRV9MQVlFUl9SRUJVSUxECkBAIC0xMDksOSArMTExLDIwIEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmFibGVDb21wb3MKICAgICAgICAgLy8gdGhlIGVt
cHR5IHJvb3QgbGF5ZXIsIHdoaWNoIGhhcyBtaW5pbWFsIG92ZXJoZWFkLgogICAgICAgICBpZiAo
bV9jb21wb3NpdGluZykKICAgICAgICAgICAgIGVuc3VyZVJvb3RQbGF0Zm9ybUxheWVyKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc3Ryb3lSb290UGxhdGZvcm1MYXllcigpOwogICAg
IH0KIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoYm9vbCB1cGRhdGVGcm9tUHJlZiAvKj0gZmFsc2UqLykKK3sKKyAgICBpZiAodXBkYXRl
RnJvbVByZWYpIHsKKyAgICAgICAgYm9vbCBhY2NlbGVyYXRpb25EaXNhYmxlZCA9IG1fcmVuZGVy
Vmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCktPnBhZ2UoKS0+c2V0dGluZ3MoKSAmJiBtX3JlbmRl
clZpZXctPmZyYW1lVmlldygpLT5mcmFtZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdEaXNhYmxlZCgpOworICAgICAgICBtX2hhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcgPSAhYWNjZWxlcmF0aW9uRGlzYWJsZWQ7CisgICAgfQorICAgIHJldHVybiBtX2hhc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmc7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpz
ZXRDb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGUoYm9vbCBuZWVkVXBkYXRlKQogewogICAgIGlm
IChpbkNvbXBvc2l0aW5nTW9kZSgpKSB7CkBAIC0xNzMsNiArMTg2LDkgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvcwogICAgICAgICAgICAgICAgICAgICBtX3Jvb3RM
YXllclVwZGF0ZUNvdW50LCAxMDAwLjAgKiAoZW5kVGltZSAtIHN0YXJ0VGltZSkpOwogI2VuZGlm
CiAgICAgQVNTRVJUKHVwZGF0ZVJvb3QgfHwgIW1fY29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRl
KTsKKworICAgIGlmICghaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICBlbmFi
bGVDb21wb3NpdGluZ01vZGUoZmFsc2UpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciogbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVw
YWludCBzaG91bGRSZXBhaW50KQpAQCAtNDg1LDcgKzUwMSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjYW5BY2NlbGVyYXQKIHsKICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSBuZWVk
IHRvIGxvb2sgYXQgYWxsIGFuY2VzdG9ycyBmb3IgbWFzayBvciB2aWRlby4gQnV0IGZvciBub3cs
CiAgICAgLy8ganVzdCBiYWlsIG9uIHRoZSBvYnZpb3VzIGNhc2VzLgotICAgIGlmIChvLT5oYXNN
YXNrKCkgfHwgby0+aGFzUmVmbGVjdGlvbigpKQorICAgIGlmIChvLT5oYXNNYXNrKCkgfHwgby0+
aGFzUmVmbGVjdGlvbigpIHx8ICFtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBvLT5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVy
aW5nKCk7CkBAIC01MTQsNyArNTMwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
YnVpbGRDb21wbwogICAgIH0KIAogICAgIC8vIGhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRo
ZSBSZW5kZXJWaWV3J3Mgcm9vdCBsYXllcgotICAgIGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkK
KyAgICBpZiAobGF5ZXItPmlzUm9vdExheWVyKCkgJiYgbGF5ZXItPmlzQ29tcG9zaXRlZCgpKQog
ICAgICAgICBwYXJlbnRJblJvb3RMYXllcihsYXllcik7CiAKICAgICBDb21wb3NpdGluZ1N0YXRl
IGNoaWxkU3RhdGUgPSBpb0NvbXBTdGF0ZTsKQEAgLTcxMSw3ICs3MjcsNyBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6aGFzM0RDb250ZW50CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpuZWVkc1RvQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QK
IHsKLSAgICByZXR1cm4gcmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGxheWVyKSB8fCBsYXllci0+
bXVzdE92ZXJsYXlDb21wb3NpdGVkTGF5ZXJzKCk7CisgICAgcmV0dXJuIG1faGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyAmJiAocmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGxheWVyKSB8fCBsYXll
ci0+bXVzdE92ZXJsYXlDb21wb3NpdGVkTGF5ZXJzKCkpOwogfQogCiAjZGVmaW5lIFZFUkJPU0Vf
Q09NUE9TSVRJTkdMQVlFUiAgICAwCkBAIC04NjksNiArODg1LDE2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjplbnN1cmVSb290UGwKICAgICBkaWRNb3ZlT25zY3JlZW4oKTsKIH0KIAor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRlc3Ryb3lSb290UGxhdGZvcm1MYXllcigpCit7
CisgICAgaWYgKCFtX3Jvb3RQbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICB3
aWxsTW92ZU9mZnNjcmVlbigpOworICAgIGRlbGV0ZSBtX3Jvb3RQbGF0Zm9ybUxheWVyOworICAg
IG1fcm9vdFBsYXRmb3JtTGF5ZXIgPSAwOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6bGF5ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdAogewog
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlz
aW9uIDQ0OTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgd2ls
bCBtYWtlIGEgY29tcG9zaXRpbmcgbGF5ZXIgYXQgdGhlIHJvb3QgYXV0b21hdGljYWxseSwgYW5k
IGhvb2sgdXAgdG8KICAgICAvLyB0aGUgbmF0aXZlIHZpZXcvd2luZG93IHN5c3RlbS4KICAgICB2
b2lkIGVuYWJsZUNvbXBvc2l0aW5nTW9kZShib29sIGVuYWJsZSA9IHRydWUpOworICAgIAorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxl
ZAorICAgIGJvb2wgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIHVwZGF0ZUZyb21QcmVm
PWZhbHNlKTsKIAogICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlKGJvb2wg
bmVlZFVwZGF0ZSA9IHRydWUpOwogICAgIGJvb2wgY29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGU7IH0KQEAgLTEz
Nyw3ICsxNDAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbGF5ZXJIYXMzRENvbnRlbnQoY29uc3Qg
UmVuZGVyTGF5ZXIqKSBjb25zdDsKIAogICAgIHZvaWQgZW5zdXJlUm9vdFBsYXRmb3JtTGF5ZXIo
KTsKLQorICAgIHZvaWQgZGVzdHJveVJvb3RQbGF0Zm9ybUxheWVyKCk7CisgICAgCiAgICAgLy8g
V2hldGhlciBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciBhbmltYXRpb24gZW5mb3JjZXMgdGhlIG5l
ZWQgZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIuCiAgICAgc3RhdGljIGJvb2wgcmVxdWlyZXNDb21w
b3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCByZXF1
aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlck9iamVjdCopOwpAQCAtMTQ5LDYgKzE1
Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0aW5nOwogICAgIGJvb2wgbV9yb290
TGF5ZXJBdHRhY2hlZDsKICAgICBib29sIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlOwor
ICAgIGJvb2wgbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOworICAgIAogI2lmIFBST0ZJTEVf
TEFZRVJfUkVCVUlMRAogICAgIGludCBtX3Jvb3RMYXllclVwZGF0ZUNvdW50OwogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTU5LDEyICs5NTks
MTQgQEAgaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQ29udGFpbmluZwogICAgICAgICBs
YXN0LT5zY2hlZHVsZVJlbGF5b3V0KCk7CiB9CiAKLWlubGluZSB2b2lkIG1ha2VNYXRyaXhSZW5k
ZXJhYmxlKFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCitpbmxpbmUgdm9pZCBtYWtlTWF0
cml4UmVuZGVyYWJsZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBib29sIGhhczNEUmVu
ZGVyaW5nKQogewogI2lmICFFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgIFVOVVNFRF9QQVJBTSho
YXMzRFJlbmRlcmluZyk7CiAgICAgbWF0cml4Lm1ha2VBZmZpbmUoKTsKICNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKG1hdHJpeCk7CisgICAgaWYgKCFoYXMzRFJlbmRlcmluZykKKyAgICAgICAgbWF0
cml4Lm1ha2VBZmZpbmUoKTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDUxMjkpCisr
KyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisy
MDA5LTA2LTI0ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2NTEKKworICAgICAgICBQcmVmZXJlbmNlIGlzIG5hbWVk
ICJXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQiCisgICAgICAgIGFuZCBpcyBh
IGJvb2xlYW4gdmFsdWUuIFByZXZlbnRzIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tCisgICAgICAg
IGJlaW5nIGNyZWF0ZWQsIHdoaWNoIHByZXZlbnRzIGhhcmR3YXJlIGFuaW1hdGlvbiBmcm9tIHJ1
bm5pbmcuCisgICAgICAgIEFsc28gZm9yY2VzIHZpZGVvIHRvIGRvIHNvZnR3YXJlIHJlbmRlcmlu
Zy4gQWRkZWQgYSBjYWNoZSBmb3IKKyAgICAgICAgdGhlIGZsYWcgaW4gUmVuZGVyTGF5ZXJDb21w
b3NpdGluZyBhbmQgbWFkZSBpdCBhbGwgd29yaworICAgICAgICBvbi10aGUtZmx5IHdoZW4gdGhl
IGZsYWcgaXMgY2hhbmdlZCB3aGlsZSBhIHBhZ2UgaXMgbG9hZGVkLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAg
ICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgorICAgICAgICAoLVtXZWJQcmVmZXJl
bmNlcyBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWRdKToKKyAgICAgICAgKC1bV2ViUHJl
ZmVyZW5jZXMgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkOl0pOgorICAgICAgICAq
IFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uOl0pOgorCiAyMDA5LTA2LTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkocmV2aXNp
b24gNDQ5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAKICNkZWZpbmUgV2ViS2l0T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdE9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Wm9vbXNUZXh0T25seVBy
ZWZlcmVuY2VLZXkgQCJXZWJLaXRab29tc1RleHRPbmx5IgogI2RlZmluZSBXZWJLaXRYU1NBdWRp
dG9yRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIKKyNkZWZp
bmUgV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkUHJlZmVyZW5jZUtleSBAIldl
YktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCIKIAogLy8gVGhlc2UgYXJlIHByaXZh
dGUgYm90aCBiZWNhdXNlIGNhbGxlcnMgc2hvdWxkIGJlIHVzaW5nIHRoZSBjb3ZlciBtZXRob2Rz
IGFuZCBiZWNhdXNlIHRoZQogLy8gY292ZXIgbWV0aG9kcyB0aGVtc2VsdmVzIGFyZSBwcml2YXRl
LgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmgJKHJldmlzaW9uIDQ0OTkzKQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzNyw2ICs0MzcsMTcgQEAgY2FjaGluZyBiZWhhdmlvci4KICovCiAtIChXZWJDYWNoZU1vZGVs
KWNhY2hlTW9kZWw7CiAKKy8qIQorICAgIEBtZXRob2QgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rp
c2FibGVkCisqLworLSAoQk9PTClhY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQ7CisKKy8q
IQorICAgIEBtZXRob2Qgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkOgorICAgIEBw
YXJhbSBzaXplCisqLworLSAodm9pZClzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQ6
KEJPT0wpZGlzYWJsZWQ7CisKIEBlbmQKIAogI3VuZGVmIFdlYk5TVUludGVnZXIKSW5kZXg6IFdl
YktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiAr
MzQ4LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpZRVNdLCAgV2ViS2l0Wm9vbXNUZXh0T25seVByZWZlcmVuY2VLZXksCiAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0WFNTQXVkaXRvckVuYWJsZWRQ
cmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdl
YktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAg
IG5pbF07CiAKICAgICAvLyBUaGlzIHZhbHVlIHNob3VsZG4ndCBldmVyIGNoYW5nZSwgd2hpY2gg
aXMgYXNzdW1lZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgV2ViS2l0UERGRGlzcGxheU1vZGVQ
cmVmZXJlbmNlS2V5IGFib3ZlCkBAIC03MzgsNiArNzM5LDE2IEBAIHN0YXRpYyBXZWJDYWNoZU1v
ZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAgICByZXR1cm4gW3NlbGYgX2ludGVnZXJWYWx1ZUZv
cktleTpXZWJLaXRDYWNoZU1vZGVsUHJlZmVyZW5jZUtleV07CiB9CiAKKy0gKEJPT0wpYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVG
b3JLZXk6IFdlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZFByZWZlcmVuY2VLZXld
OworfQorCistICh2b2lkKXNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZDooQk9PTClk
aXNhYmxlZAoreworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6IGRpc2FibGVkIGZvcktleTogV2Vi
S2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkUHJlZmVyZW5jZUtleV07Cit9CisKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlByZWZlcmVuY2VzIChXZWJQcml2YXRlKQpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMDMsNiArMTMwMyw3IEBAIHN0YXRpYyBi
b29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgKICAgICBzZXR0aW5ncy0+c2V0Wm9vbXNU
ZXh0T25seShbcHJlZmVyZW5jZXMgem9vbXNUZXh0T25seV0pOwogICAgIHNldHRpbmdzLT5zZXRY
U1NBdWRpdG9yRW5hYmxlZChbcHJlZmVyZW5jZXMgaXNYU1NBdWRpdG9yRW5hYmxlZF0pOwogICAg
IHNldHRpbmdzLT5zZXRFbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUoIVdLQXBwVmVyc2lv
bkNoZWNrTGVzc1RoYW4oQCJjb20uYXBwbGUuaVdlYiIsIC0xLCAyLjEpKTsKKyAgICBzZXR0aW5n
cy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Rpc2FibGVkKFtwcmVmZXJlbmNlcyBhY2NlbGVy
YXRlZENvbXBvc2l0aW5nRGlzYWJsZWRdKTsKIH0KIAogc3RhdGljIGlubGluZSBJTVAgZ2V0TWV0
aG9kKGlkIG8sIFNFTCBzKQo=
</data>
<flag name="review"
          id="16404"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31864</attachid>
            <date>2009-06-25 10:58:33 -0700</date>
            <delta_ts>2009-06-25 12:02:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>26651.patch</filename>
            <type>text/plain</type>
            <size>18845</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDYtMjQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjY1MQorCisgICAgICAgIFBy
ZWZlcmVuY2UgaXMgbmFtZWQgIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdEaXNhYmxlZCIK
KyAgICAgICAgYW5kIGlzIGEgYm9vbGVhbiB2YWx1ZS4gUHJldmVudHMgY29tcG9zaXRpbmcgbGF5
ZXJzIGZyb20KKyAgICAgICAgYmVpbmcgY3JlYXRlZCwgd2hpY2ggcHJldmVudHMgaGFyZHdhcmUg
YW5pbWF0aW9uIGZyb20gcnVubmluZy4KKyAgICAgICAgQWxzbyBmb3JjZXMgdmlkZW8gdG8gZG8g
c29mdHdhcmUgcmVuZGVyaW5nLiBBZGRlZCBhIGNhY2hlIGZvcgorICAgICAgICB0aGUgZmxhZyBp
biBSZW5kZXJMYXllckNvbXBvc2l0aW5nIGFuZCBtYWRlIGl0IGFsbCB3b3JrCisgICAgICAgIG9u
LXRoZS1mbHkgd2hlbiB0aGUgZmxhZyBpcyBjaGFuZ2VkIHdoaWxlIGEgcGFnZSBpcyBsb2FkZWQu
CisgCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
dHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRGlzYWJsZWQpOgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjphY2NlbGVyYXRlZENv
bXBvc2l0aW5nRGlzYWJsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlTGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjplbmFibGVDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5BY2NlbGVyYXRlVmlkZW9S
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpuZWVkc1RvQmVDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGVzdHJveVJvb3RQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6bWFrZU1hdHJpeFJlbmRlcmFibGUpOgor
CiAyMDA5LTA2LTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
NDQ5OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
MCw2ICs2NjAsNyBAQCBfX1pON1dlYkNvcmU4U2V0dGluZ3MzNnNldE9mZmxpbmVXZWJBcHBsCiBf
X1pON1dlYkNvcmU4U2V0dGluZ3M0MHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzNDBzZXRUZXh0RGlyZWN0aW9uU3VibWVudUlu
Y2x1c2lvbkJlaGF2aW9yRU5TXzM3VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlv
ckUKIF9fWk43V2ViQ29yZThTZXR0aW5nczQxc2V0TmVlZHNLZXlib2FyZEV2ZW50RGlzYW1iaWd1
YXRpb25RdWlya3NFYgorX19aTjdXZWJDb3JlOFNldHRpbmdzMzJzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4YmxhbmtVUkxFdgogX19aTjdXZWJDb3JlOG1h
a2VSR0JBRWlpaWkKIF9fWk43V2ViQ29yZThwYXJzZVVSTEVSS05TXzZTdHJpbmdFCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDYgKzQyMCwxMSBAQCB2b2lkIEZyYW1lVmlldzo6YXBw
bHlPdmVyZmxvd1RvVmlld3BvcnQoCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnMoQ29tcG9zaXRpbmdVcGRhdGUgdXBkYXRlVHlwZSkKIHsKICAgICBSZW5kZXJWaWV3KiB2
aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKHZpZXcgJiYgdmlldy0+
Y29tcG9zaXRvcigpKSB7CisgICAgICAgIC8vIFRoaXMgY2FsbCB3aWxsIG1ha2Ugc3VyZSB0aGUg
Y2FjaGVkIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgaXMgdXBkYXRlZCBmcm9tIHRoZSBwcmVm
CisgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS0+Y2FjaGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZEZsYWcoKTsKKyAgICB9CisgICAgCiAgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT51c2Vz
Q29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlz
aW9uIDQ0OTkzKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKQEAgLTM3LDEwICszOCwx
MyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyB2b2lkIHNldE5lZWRzUmVhcHBseVN0eWxlc0luQWxsRnJhbWVzKFBhZ2UqIHBhZ2UpCitzdGF0
aWMgdm9pZCBzZXROZWVkc1JlYXBwbHlTdHlsZXNJbkFsbEZyYW1lcyhQYWdlKiBwYWdlLCBib29s
IC8qdXBkYXRlQ29tcG9zaXRpbmdMYXllcnMqLyA9IGZhbHNlKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKQorICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAg
ICAgIC8vaWYgKHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKQorICAgICAgICAvLyAgICBmcmFtZS0+
dmlldygpLT51cGRhdGVDb21wb3NpdGluZ0xheWVycyhGcmFtZVZpZXc6OkZvcmNlZENvbXBvc2l0
aW5nVXBkYXRlKTsKICAgICAgICAgZnJhbWUtPnNldE5lZWRzUmVhcHBseVN0eWxlcygpOworICAg
IH0KIH0KIAogI2lmIFVTRShTQUZBUklfVEhFTUUpCkBAIC0xMDQsNiArMTA4LDcgQEAgU2V0dGlu
Z3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLy8gdGhleSBjYW4ndCB1c2UgYnkuIExlYXZp
bmcgZW5hYmxlZCBmb3Igbm93IHRvIG5vdCBjaGFuZ2UgZXhpc3RpbmcgYmVoYXZpb3IuCiAgICAg
LCBtX2Rvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCh0cnVlKQogICAgICwgbV94c3NBdWRp
dG9yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQo
dHJ1ZSkKIHsKICAgICAvLyBBIEZyYW1lIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBz
byB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJpbmcgCiAgICAgLy8gaGFzaCBiZWZvcmUgdHJ5
aW5nIHRvIHVzZSBpdC4KQEAgLTQ2NCw0ICs0NjksMTMgQEAgdm9pZCBTZXR0aW5nczo6c2V0WFNT
QXVkaXRvckVuYWJsZWQoYm9vbAogICAgIG1feHNzQXVkaXRvckVuYWJsZWQgPSB4c3NBdWRpdG9y
RW5hYmxlZDsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgc2V0TmVlZHNSZWFwcGx5
U3R5bGVzSW5BbGxGcmFtZXMobV9wYWdlLCB0cnVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CiAgICAgICAgIGJv
b2wgeHNzQXVkaXRvckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3hzc0F1ZGl0b3JFbmFibGVk
OyB9CiAKKyAgICAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29s
KTsKKyAgICAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ7IH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKICAgICAgICAgCkBAIC0zMDEsNiArMzA0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2VkaXRpbmdCZWhhdmlvciA6IDE7
CiAgICAgICAgIGJvb2wgbV9kb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQgOiAxOwogICAg
ICAgICBib29sIG1feHNzQXVkaXRvckVuYWJsZWQgOiAxOworICAgICAgICBib29sIG1fYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgOiAxOwogCiAjaWYgVVNFKFNBRkFSSV9USEVNRSkKICAg
ICAgICAgc3RhdGljIGJvb2wgZ1Nob3VsZFBhaW50TmF0aXZlQ29udHJvbHM7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA0NDk5MykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCwxNSBAQCB2
b2lkIFJlbmRlckxheWVyOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkCiB9CiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCitib29sIFJlbmRlckxheWVyOjpoYXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJMYXll
cjo6c2V0U3RhdGljWShpbnQgc3RhdGljWSkKIHsKICAgICBpZiAobV9zdGF0aWNZID09IHN0YXRp
Y1kpCkBAIC0zMzksNyArMzQ4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3Jt
KCkKICAgICAgICAgQVNTRVJUKGJveCk7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5tYWtlSWRlbnRp
dHkoKTsKICAgICAgICAgYm94LT5zdHlsZSgpLT5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0s
IGJveC0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zv
cm1PcmlnaW4pOwotICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0pOwor
ICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGhhc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKSk7CiAgICAgfQogCiAgICAgaWYgKGhhZDNEVHJhbnNmb3JtICE9IGhhczNE
VHJhbnNmb3JtKCkpCkBAIC0zNTYsNyArMzY1LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyTGF5ZXI6OmN1cnJlbgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNm
b3JtOwogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS0+YW5p
bWF0aW9uKCktPmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKICAgICAg
ICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zvcm0sIHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpLCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9yaWdpbik7
Ci0gICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0pOworICAgICAgICBt
YWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpOwogICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKICAgICB9CiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDkgQEAg
cHVibGljOgogICAgIC8vIEFsbG93cyB1cGRhdGVzIG9mIGxheWVyIGNvbnRlbnQgd2l0aG91dCBy
ZXBhaW50aW5nLgogICAgIHZvaWQgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwogI2VuZGlmCisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVu
YWJsZWQKKyAgICBib29sIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdDsKICAgICAK
ICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zKGJvb2wgZG9GdWxsUmVwYWludCA9IGZhbHNlLCBib29sIGNoZWNrRm9yUmVwYWludCA9
IHRydWUpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShy
ZXZpc2lvbiA0NDk5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlTGF5ZXJUcmFuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKICAgICBp
ZiAobV9vd25pbmdMYXllci0+aGFzVHJhbnNmb3JtKCkpIHsKICAgICAgICAgc3R5bGUtPmFwcGx5
VHJhbnNmb3JtKHQsIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6
ZSgpLCBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdpbik7Ci0gICAgICAgIG1ha2VN
YXRyaXhSZW5kZXJhYmxlKHQpOworICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSh0LCBjb21w
b3NpdG9yKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSk7CiAgICAgfQogICAgIAogICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0VHJhbnNmb3JtKHQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA0NDk5MykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgogCiAjaWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC04Nyw2ICs4OCw3IEBAIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVy
TGF5ZXJDb21wb3MKICAgICAsIG1fY29tcG9zaXRpbmcoZmFsc2UpCiAgICAgLCBtX3Jvb3RMYXll
ckF0dGFjaGVkKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGUoZmFs
c2UpCisgICAgLCBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSkKICNpZiBQUk9GSUxF
X0xBWUVSX1JFQlVJTEQKICAgICAsIG1fcm9vdExheWVyVXBkYXRlQ291bnQoMCkKICNlbmRpZiAv
LyBQUk9GSUxFX0xBWUVSX1JFQlVJTEQKQEAgLTEwOSw5ICsxMTEsMjIgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuYWJsZUNvbXBvcwogICAgICAgICAvLyB0aGUgZW1wdHkgcm9vdCBs
YXllciwgd2hpY2ggaGFzIG1pbmltYWwgb3ZlcmhlYWQuCiAgICAgICAgIGlmIChtX2NvbXBvc2l0
aW5nKQogICAgICAgICAgICAgZW5zdXJlUm9vdFBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGVzdHJveVJvb3RQbGF0Zm9ybUxheWVyKCk7CiAgICAgfQogfQogCit2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FjaGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZEZsYWcoKQoreworICAgIAorICAgIGJvb2wgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9
IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSAmJiBtX3JlbmRlclZpZXctPmZy
YW1lVmlldygpLT5mcmFtZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkKCk7CisKKyAgICBpZiAoaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyAhPSBt
X2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpCisgICAgICAgIHNldENvbXBvc2l0aW5nTGF5ZXJz
TmVlZFVwZGF0ZSgpOworICAgICAgICAKKyAgICBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcg
PSBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOworfQorCiB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlKGJvb2wgbmVlZFVwZGF0ZSkKIHsK
ICAgICBpZiAoaW5Db21wb3NpdGluZ01vZGUoKSkgewpAQCAtMTczLDYgKzE4OCw5IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3MKICAgICAgICAgICAgICAgICAgICAg
bV9yb290TGF5ZXJVcGRhdGVDb3VudCwgMTAwMC4wICogKGVuZFRpbWUgLSBzdGFydFRpbWUpKTsK
ICNlbmRpZgogICAgIEFTU0VSVCh1cGRhdGVSb290IHx8ICFtX2NvbXBvc2l0aW5nTGF5ZXJzTmVl
ZFVwZGF0ZSk7CisKKyAgICBpZiAoIWhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKKyAgICAg
ICAgZW5hYmxlQ29tcG9zaXRpbmdNb2RlKGZhbHNlKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGluZ0No
YW5nZVJlcGFpbnQgc2hvdWxkUmVwYWludCkKQEAgLTQ4NSw3ICs1MDMsNyBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2FuQWNjZWxlcmF0CiB7CiAgICAgLy8gRklYTUU6IGlkZWFsbHkg
d2UgbmVlZCB0byBsb29rIGF0IGFsbCBhbmNlc3RvcnMgZm9yIG1hc2sgb3IgdmlkZW8uIEJ1dCBm
b3Igbm93LAogICAgIC8vIGp1c3QgYmFpbCBvbiB0aGUgb2J2aW91cyBjYXNlcy4KLSAgICBpZiAo
by0+aGFzTWFzaygpIHx8IG8tPmhhc1JlZmxlY3Rpb24oKSkKKyAgICBpZiAoby0+aGFzTWFzaygp
IHx8IG8tPmhhc1JlZmxlY3Rpb24oKSB8fCAhbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gby0+c3VwcG9ydHNBY2NlbGVyYXRl
ZFJlbmRlcmluZygpOwpAQCAtNTE0LDcgKzUzMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZWJ1aWxkQ29tcG8KICAgICB9CiAKICAgICAvLyBob3N0IHRoZSBkb2N1bWVudCBsYXll
ciBpbiB0aGUgUmVuZGVyVmlldydzIHJvb3QgbGF5ZXIKLSAgICBpZiAobGF5ZXItPmlzUm9vdExh
eWVyKCkpCisgICAgaWYgKGxheWVyLT5pc1Jvb3RMYXllcigpICYmIGxheWVyLT5pc0NvbXBvc2l0
ZWQoKSkKICAgICAgICAgcGFyZW50SW5Sb290TGF5ZXIobGF5ZXIpOwogCiAgICAgQ29tcG9zaXRp
bmdTdGF0ZSBjaGlsZFN0YXRlID0gaW9Db21wU3RhdGU7CkBAIC03MTEsNyArNzI5LDcgQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmhhczNEQ29udGVudAogCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6bmVlZHNUb0JlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihsYXllcikgfHwg
bGF5ZXItPm11c3RPdmVybGF5Q29tcG9zaXRlZExheWVycygpOworICAgIHJldHVybiBtX2hhc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcgJiYgKHJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihsYXllcikg
fHwgbGF5ZXItPm11c3RPdmVybGF5Q29tcG9zaXRlZExheWVycygpKTsKIH0KIAogI2RlZmluZSBW
RVJCT1NFX0NPTVBPU0lUSU5HTEFZRVIgICAgMApAQCAtODY5LDYgKzg4NywxNiBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdFBsCiAgICAgZGlkTW92ZU9uc2NyZWVuKCk7
CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXN0cm95Um9vdFBsYXRmb3JtTGF5
ZXIoKQoreworICAgIGlmICghbV9yb290UGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgd2lsbE1vdmVPZmZzY3JlZW4oKTsKKyAgICBkZWxldGUgbV9yb290UGxhdGZvcm1MYXll
cjsKKyAgICBtX3Jvb3RQbGF0Zm9ybUxheWVyID0gMDsKK30KKwogYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29u
c3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBsYXllci0+cmVuZGVyZXIoKS0+
c3R5bGUoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CShyZXZpc2lvbiA0NDk5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyB3aWxsIG1ha2UgYSBjb21wb3NpdGluZyBsYXllciBhdCB0aGUgcm9vdCBhdXRvbWF0aWNh
bGx5LCBhbmQgaG9vayB1cCB0bwogICAgIC8vIHRoZSBuYXRpdmUgdmlldy93aW5kb3cgc3lzdGVt
LgogICAgIHZvaWQgZW5hYmxlQ29tcG9zaXRpbmdNb2RlKGJvb2wgZW5hYmxlID0gdHJ1ZSk7Cisg
ICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBp
cyBlbmFibGVkCisgICAgYm9vbCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgeyByZXR1cm4g
bV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOyB9CisgICAgCisgICAgLy8gQ29weSB0aGUgYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRGbGFnIGZyb20gU2V0dGluZ3MKKyAgICB2b2lkIGNh
Y2hlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRGbGFnKCk7CiAKICAgICB2b2lkIHNldENv
bXBvc2l0aW5nTGF5ZXJzTmVlZFVwZGF0ZShib29sIG5lZWRVcGRhdGUgPSB0cnVlKTsKICAgICBi
b29sIGNvbXBvc2l0aW5nTGF5ZXJzTmVlZFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9z
aXRpbmdMYXllcnNOZWVkVXBkYXRlOyB9CkBAIC0xMzcsNyArMTQzLDggQEAgcHJpdmF0ZToKICAg
ICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAKICAg
ICB2b2lkIGVuc3VyZVJvb3RQbGF0Zm9ybUxheWVyKCk7Ci0KKyAgICB2b2lkIGRlc3Ryb3lSb290
UGxhdGZvcm1MYXllcigpOworICAgIAogICAgIC8vIFdoZXRoZXIgYSBydW5uaW5nIHRyYW5zaXRp
b24gb3IgYW5pbWF0aW9uIGVuZm9yY2VzIHRoZSBuZWVkIGZvciBhIGNvbXBvc2l0aW5nIGxheWVy
LgogICAgIHN0YXRpYyBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVy
T2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9y
bShSZW5kZXJPYmplY3QqKTsKQEAgLTE0OSw2ICsxNTYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9jb21wb3NpdGluZzsKICAgICBib29sIG1fcm9vdExheWVyQXR0YWNoZWQ7CiAgICAgYm9vbCBt
X2NvbXBvc2l0aW5nTGF5ZXJzTmVlZFVwZGF0ZTsKKyAgICBib29sIG1faGFzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZzsKKyAgICAKICNpZiBQUk9GSUxFX0xBWUVSX1JFQlVJTEQKICAgICBpbnQgbV9y
b290TGF5ZXJVcGRhdGVDb3VudDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk1OSwxMiArOTU5LDE0IEBAIGlubGluZSB2b2lkIFJlbmRlck9i
amVjdDo6bWFya0NvbnRhaW5pbmcKICAgICAgICAgbGFzdC0+c2NoZWR1bGVSZWxheW91dCgpOwog
fQogCi1pbmxpbmUgdm9pZCBtYWtlTWF0cml4UmVuZGVyYWJsZShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4KQoraW5saW5lIHZvaWQgbWFrZU1hdHJpeFJlbmRlcmFibGUoVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgYm9vbCBoYXMzRFJlbmRlcmluZykKIHsKICNpZiAhRU5BQkxFKDNE
X1JFTkRFUklORykKKyAgICBVTlVTRURfUEFSQU0oaGFzM0RSZW5kZXJpbmcpOwogICAgIG1hdHJp
eC5tYWtlQWZmaW5lKCk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShtYXRyaXgpOworICAgIGlm
ICghaGFzM0RSZW5kZXJpbmcpCisgICAgICAgIG1hdHJpeC5tYWtlQWZmaW5lKCk7CiAjZW5kaWYK
IH0KIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MTI5KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wNi0yNCAgQ2hyaXMgTWFycmluICA8
Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjUx
CisKKyAgICAgICAgUHJlZmVyZW5jZSBpcyBuYW1lZCAiV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0Rpc2FibGVkIgorICAgICAgICBhbmQgaXMgYSBib29sZWFuIHZhbHVlLiBQcmV2ZW50cyBj
b21wb3NpdGluZyBsYXllcnMgZnJvbQorICAgICAgICBiZWluZyBjcmVhdGVkLCB3aGljaCBwcmV2
ZW50cyBoYXJkd2FyZSBhbmltYXRpb24gZnJvbSBydW5uaW5nLgorICAgICAgICBBbHNvIGZvcmNl
cyB2aWRlbyB0byBkbyBzb2Z0d2FyZSByZW5kZXJpbmcuIEFkZGVkIGEgY2FjaGUgZm9yCisgICAg
ICAgIHRoZSBmbGFnIGluIFJlbmRlckxheWVyQ29tcG9zaXRpbmcgYW5kIG1hZGUgaXQgYWxsIHdv
cmsKKyAgICAgICAgb24tdGhlLWZseSB3aGVuIHRoZSBmbGFnIGlzIGNoYW5nZWQgd2hpbGUgYSBw
YWdlIGlzIGxvYWRlZC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRp
YWxpemVdKToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Rpc2FibGVkXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdEaXNhYmxlZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAw
OS0wNi0yNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlS2V5c1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHJldmlzaW9uIDQ0OTkzKQorKysgV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2
ICs4Miw3IEBACiAjZGVmaW5lIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxl
ZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQi
CiAjZGVmaW5lIFdlYktpdFpvb21zVGV4dE9ubHlQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Wm9vbXNU
ZXh0T25seSIKICNkZWZpbmUgV2ViS2l0WFNTQXVkaXRvckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAi
V2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiCisjZGVmaW5lIFdlYktpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkIgogCiAvLyBUaGVzZSBhcmUgcHJpdmF0ZSBib3RoIGJlY2F1c2UgY2FsbGVycyBzaG91
bGQgYmUgdXNpbmcgdGhlIGNvdmVyIG1ldGhvZHMgYW5kIGJlY2F1c2UgdGhlCiAvLyBjb3ZlciBt
ZXRob2RzIHRoZW1zZWx2ZXMgYXJlIHByaXZhdGUuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUHJlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXMuaAkocmV2aXNpb24gNDQ5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDYgKzQzNywxNyBAQCBjYWNoaW5nIGJl
aGF2aW9yLgogKi8KIC0gKFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbDsKIAorLyohCisgICAgQG1l
dGhvZCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAorKi8KKy0gKEJPT0wpYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQ7CisKKy8qIQorICAgIEBtZXRob2Qgc2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQ6CisgICAgQHBhcmFtIGVuYWJsZWQKKyovCistICh2b2lkKXNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOihCT09MKWVuYWJsZWQ7CisKIEBlbmQKIAogI3Vu
ZGVmIFdlYk5TVUludGVnZXIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0J
KHJldmlzaW9uIDQ0OTkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwg
Y2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCAgIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZFByZWZlcmVuY2VLZXks
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0Wm9vbXNUZXh0
T25seVByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10s
ICAgV2ViS2l0WFNTQXVkaXRvckVuYWJsZWRQcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgbmlsXTsKIAogICAgIC8vIFRoaXMgdmFsdWUgc2hv
dWxkbid0IGV2ZXIgY2hhbmdlLCB3aGljaCBpcyBhc3N1bWVkIGluIHRoZSBpbml0aWFsaXphdGlv
biBvZiBXZWJLaXRQREZEaXNwbGF5TW9kZVByZWZlcmVuY2VLZXkgYWJvdmUKQEAgLTczOCw2ICs3
MzksMTYgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIHJl
dHVybiBbc2VsZiBfaW50ZWdlclZhbHVlRm9yS2V5OldlYktpdENhY2hlTW9kZWxQcmVmZXJlbmNl
S2V5XTsKIH0KIAorLSAoQk9PTClhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZAoreworICAg
IHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OiBXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkOihCT09MKWVuYWJsZWQKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVl
OiBlbmFibGVkIGZvcktleTogV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRQcmVm
ZXJlbmNlS2V5XTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViUHJlZmVyZW5jZXMg
KFdlYlByaXZhdGUpCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDQ5OTMpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMwMyw2
ICsxMzAzLDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKAogICAg
IHNldHRpbmdzLT5zZXRab29tc1RleHRPbmx5KFtwcmVmZXJlbmNlcyB6b29tc1RleHRPbmx5XSk7
CiAgICAgc2V0dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKFtwcmVmZXJlbmNlcyBpc1hTU0F1
ZGl0b3JFbmFibGVkXSk7CiAgICAgc2V0dGluZ3MtPnNldEVuZm9yY2VDU1NNSU1FVHlwZUluU3Ry
aWN0TW9kZSghV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5pV2ViIiwgLTEs
IDIuMSkpOworICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChb
cHJlZmVyZW5jZXMgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRdKTsKIH0KIAogc3RhdGlj
IGlubGluZSBJTVAgZ2V0TWV0aG9kKGlkIG8sIFNFTCBzKQo=
</data>
<flag name="review"
          id="16427"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31947</attachid>
            <date>2009-06-26 13:48:06 -0700</date>
            <delta_ts>2009-06-26 13:50:00 -0700</delta_ts>
            <desc>Additional Patch</desc>
            <filename>26651-2.patch</filename>
            <type>text/plain</type>
            <size>5570</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDYtMjYgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgQWRk
aXRpb25hbCBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NjY1MQorCisgICAgICAgIFRoZSBmbGFnIHNob3VsZCBhbHdheXMgZGVmYXVsdCB0byB0cnVlIHRv
IGF2b2lkIGl0IGdldHRpbmcgc2V0CisgICAgICAgIHRvIGZhbHNlIGluIGEgYnVpbGQgd2l0aCBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb2ZmCisgICAgICAgIGFuZCB0aGVuIGRpc2Fi
bGluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB3aGVuIHN1YnNlcXVlbnRseQorICAgICAgICBy
dW5uaW5nIGEgYnVpbGQgd2l0aCBpdCB0dXJuZWQgb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorCisyMDA5LTA2LTI2ICBDaHJp
cyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENI
QU5HRUQKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpT
ZXR0aW5ncyk6CisKIDIwMDktMDYtMjYgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDUyNzgpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzAz
MCw3ICs3MDMwLDcgQEAKIAkJOTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdoZWVsRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0VFQzI2RTA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVy
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52YXNQYXR0ZXJu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMyNzAwOUMzMjE4ODAwQzUx
NUQxIC8qIENhbnZhc1N0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbnZhc1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNGMTlC
MTkwODI0NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CisJCTkzRjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5M0YxOUIxQTA4MjQ1
RTVBMDAxRTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSBXZWJDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJOTNGMUQzMUEwNTU4Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHls
aWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNy
L2xpYi9saWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk5
M0Y4QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnBlcmw7IG5hbWUgPSBDb2RlR2VuZXJhdG9yLnBtOyBwYXRoID0gc2NyaXB0cy9D
b2RlR2VuZXJhdG9yLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5NTQsNiAr
MTY5NTQsNyBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3Qg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIldlYkNvcmUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNv
ZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25z
ID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDQ1Mjc4KQorKysg
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDExICsxMDUs
NyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAvLyB0aGV5IGNhbid0IHVz
ZSBieS4gTGVhdmluZyBlbmFibGVkIGZvciBub3cgdG8gbm90IGNoYW5nZSBleGlzdGluZyBiZWhh
dmlvci4KICAgICAsIG1fZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKHRydWUpCiAgICAg
LCBtX3hzc0F1ZGl0b3JFbmFibGVkKGZhbHNlKQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSkKLSNlbHNl
Ci0gICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKQotI2VuZGlmCiB7
CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2UgaW5p
dGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1
c2UgaXQuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDUyNzkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA2LTI2ICBDaHJpcyBNYXJyaW4g
IDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2NjUxCisKKyAgICAgICAgVGhlIGZsYWcgc2hvdWxkIGFsd2F5cyBk
ZWZhdWx0IHRvIHRydWUgdG8gYXZvaWQgaXQgZ2V0dGluZyBzZXQKKyAgICAgICAgdG8gZmFsc2Ug
aW4gYSBidWlsZCB3aXRoIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHR1cm5lZCBvZmYKKyAgICAg
ICAgYW5kIHRoZW4gZGlzYWJsaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHdoZW4gc3Vic2Vx
dWVudGx5CisgICAgICAgIHJ1bm5pbmcgYSBidWlsZCB3aXRoIGl0IHR1cm5lZCBvbi4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVu
Y2VzIGluaXRpYWxpemVdKToKKwogMjAwOS0wNi0yNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZwpJbmRleDogV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gNDUyNzgpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0OCwxMSArMzQ4
LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpZRVNdLCAgV2ViS2l0Wm9vbXNUZXh0T25seVByZWZlcmVuY2VLZXksCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0WFNTQXVkaXRvckVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZFByZWZlcmVuY2VLZXksCi0jZWxzZQotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Tk9dLCAgIFdlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkUHJlZmVyZW5j
ZUtleSwKLSNlbmRpZgogICAgICAgICBuaWxdOwogCiAgICAgLy8gVGhpcyB2YWx1ZSBzaG91bGRu
J3QgZXZlciBjaGFuZ2UsIHdoaWNoIGlzIGFzc3VtZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9m
IFdlYktpdFBERkRpc3BsYXlNb2RlUHJlZmVyZW5jZUtleSBhYm92ZQo=
</data>
<flag name="review"
          id="16493"
          type_id="1"
          status="-"
          setter="cmarrin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31948</attachid>
            <date>2009-06-26 13:53:12 -0700</date>
            <delta_ts>2009-06-26 13:54:49 -0700</delta_ts>
            <desc>Additional Patch</desc>
            <filename>26651-2.patch</filename>
            <type>text/plain</type>
            <size>3118</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDYtMjYgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgQWRk
aXRpb25hbCBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NjY1MQorCisgICAgICAgIFRoZSBmbGFnIHNob3VsZCBhbHdheXMgZGVmYXVsdCB0byB0cnVlIHRv
IGF2b2lkIGl0IGdldHRpbmcgc2V0CisgICAgICAgIHRvIGZhbHNlIGluIGEgYnVpbGQgd2l0aCBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb2ZmCisgICAgICAgIGFuZCB0aGVuIGRpc2Fi
bGluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB3aGVuIHN1YnNlcXVlbnRseQorICAgICAgICBy
dW5uaW5nIGEgYnVpbGQgd2l0aCBpdCB0dXJuZWQgb24uCisKKyAgICAgICAgKiBwYWdlL1NldHRp
bmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisKIDIwMDkt
MDYtMjYgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDQ1Mjc4KQorKysg
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDExICsxMDUs
NyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAvLyB0aGV5IGNhbid0IHVz
ZSBieS4gTGVhdmluZyBlbmFibGVkIGZvciBub3cgdG8gbm90IGNoYW5nZSBleGlzdGluZyBiZWhh
dmlvci4KICAgICAsIG1fZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKHRydWUpCiAgICAg
LCBtX3hzc0F1ZGl0b3JFbmFibGVkKGZhbHNlKQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSkKLSNlbHNl
Ci0gICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKQotI2VuZGlmCiB7
CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2UgaW5p
dGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1
c2UgaXQuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDUyODEpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA2LTI2ICBDaHJpcyBNYXJyaW4g
IDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgIEFkZGl0aW9uYWwgZml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY2NTEKKworICAgICAgICBUaGUgZmxhZyBzaG91bGQgYWx3YXlzIGRl
ZmF1bHQgdG8gdHJ1ZSB0byBhdm9pZCBpdCBnZXR0aW5nIHNldAorICAgICAgICB0byBmYWxzZSBp
biBhIGJ1aWxkIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdHVybmVkIG9mZgorICAgICAg
ICBhbmQgdGhlbiBkaXNhYmxpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgd2hlbiBzdWJzZXF1
ZW50bHkKKyAgICAgICAgcnVubmluZyBhIGJ1aWxkIHdpdGggaXQgdHVybmVkIG9uLgorCisgICAg
ICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5j
ZXMgaW5pdGlhbGl6ZV0pOgorCiAyMDA5LTA2LTI2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggU25vd0xlb3BhcmQgYnVpbGQuCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA0NTI3OCkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDExICszNDgs
NyBAQCBzdGF0aWMgV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsRm9yTWFpbkJ1CiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU10sICBXZWJLaXRab29tc1RleHRPbmx5UHJlZmVyZW5jZUtleSwKICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZFByZWZl
cmVuY2VLZXksCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkUHJlZmVyZW5jZUtleSwKLSNlbHNlCi0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpOT10sICAgV2ViS2l0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRQcmVmZXJlbmNl
S2V5LAotI2VuZGlmCiAgICAgICAgIG5pbF07CiAKICAgICAvLyBUaGlzIHZhbHVlIHNob3VsZG4n
dCBldmVyIGNoYW5nZSwgd2hpY2ggaXMgYXNzdW1lZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2Yg
V2ViS2l0UERGRGlzcGxheU1vZGVQcmVmZXJlbmNlS2V5IGFib3ZlCg==
</data>
<flag name="review"
          id="16494"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>