<?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>73194</bug_id>
          
          <creation_ts>2011-11-28 01:26:23 -0800</creation_ts>
          <short_desc>[BlackBerry] Add notification support for the BlackBerry port</short_desc>
          <delta_ts>2011-12-14 01:53:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Robin Qiu">robin.qiu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>dbates</cc>
    
    <cc>leo.yang</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>509643</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-28 01:26:23 -0800</bug_when>
    <thetext>To upstream Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp/h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510607</commentid>
    <comment_count>1</comment_count>
      <attachid>116922</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-29 01:47:27 -0800</bug_when>
    <thetext>Created attachment 116922
Patch for notification support. V1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511260</commentid>
    <comment_count>2</comment_count>
      <attachid>116922</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-11-29 17:57:27 -0800</bug_when>
    <thetext>Comment on attachment 116922
Patch for notification support. V1.

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

This is an informal review.

&gt; Source/WebKit/ChangeLog:3
&gt; +2011-11-29  Robin Qiu  &lt;robin.qiu@torchmobile.com.cn&gt;
&gt; +
&gt; +        [BlackBerry] Add notification support for the BlackBerry port.

As usual this should be the same as bug title.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:55
&gt; +NotificationPresenterImpl::~NotificationPresenterImpl()
&gt; +{
&gt; +}
&gt; +
&gt; +

Extra blank line, please remove one.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:57
&gt; +bool NotificationPresenterImpl::show(Notification* n)
&gt; +{

Should it ASSERT(n) here?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:81
&gt; +void NotificationPresenterImpl::cancel(Notification* n)
&gt; +{

Ditto.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:102
&gt; +void NotificationPresenterImpl::onPermission(const std::string&amp; domainStr, bool isAllowed)
&gt; +{
&gt; +    String domain = String::fromUTF8(domainStr.c_str());

Better ASSERT(!domainStr.empty()) before the converting?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:137
&gt; +void NotificationPresenterImpl::notificationClicked(const std::string&amp; idStr)
&gt; +{
&gt; +    String id = String::fromUTF8(idStr.c_str());

Ditto

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:64
&gt; +    // Checks the current level of permission.
&gt; +    virtual Permission checkPermission(WebCore::ScriptExecutionContext*);
&gt; +
&gt; +

Extra blank line, please remove one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511334</commentid>
    <comment_count>3</comment_count>
      <attachid>117108</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-29 20:33:19 -0800</bug_when>
    <thetext>Created attachment 117108
Patch for notification support. V2.

Modified according Leo&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511336</commentid>
    <comment_count>4</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-29 20:35:02 -0800</bug_when>
    <thetext>
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:64
&gt; &gt; +    // Checks the current level of permission.
&gt; &gt; +    virtual Permission checkPermission(WebCore::ScriptExecutionContext*);
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Extra blank line, please remove one.

The following 2 functions are inherited from another base class, so I added a extra blank line to separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511389</commentid>
    <comment_count>5</comment_count>
      <attachid>117108</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-29 22:12:21 -0800</bug_when>
    <thetext>Comment on attachment 117108
Patch for notification support. V2.

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

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:23
&gt; +#include &quot;NotificationPresenterImpl.h&quot;

As per (2) of section #include Statements of &lt;http://www.webkit.org/coding/coding-style.html&gt;, move this line such that it&apos;s after #include &quot;config.h&quot;.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:27
&gt; +#include &quot;NotificationPresenterBlackBerry.h&quot;

This should be:

#include &lt;NotificationPresenterBlackBerry.h&gt;

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:29
&gt; +#include &quot;StringHash.h&quot;

This should be:

#include &lt;wtf/text/StringHash.h&gt;

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:37
&gt; +NotificationPresenterImpl* NotificationPresenterImpl::m_instance = 0;

Either this variable needs to be renamed to s_instance or we should define this variable in NotificationPresenterImpl::instance() using DEFINE_STATIC_LOCAL() since it&apos;s the only function that references this variable.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:69
&gt; +        // FIXME: load and display HTML content

Nit: load =&gt; Load

Also, comments should be full sentences that end in a period.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:72
&gt; +        // FIXME: strip to one line

Nit: strip =&gt; Strip

Also, comments should be full sentences that end in a period.

I&apos;m not entirely clear what this comment means. I take it that either notification-&gt;contents().title() or notification-&gt;contents().body() may contain some kind of line delimiter character(s) (e.g. new line characters) and that we want to remove such characters such that the message is ultimately displayed as one line of text.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:73
&gt; +        message = notification-&gt;contents().title() + &quot;: &quot; + notification-&gt;contents().body();

We should use makeString() (*) here:

message = makeString(notification-&gt;contents().title(), &quot;: &quot;, notification-&gt;contents().body());

(*) Defined in JavaScriptCore/wtf/text/StringConcatenate.h: &lt;http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/text/StringConcatenate.h?rev=98624#L621&gt;.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:102
&gt; +void NotificationPresenterImpl::onPermission(const std::string&amp; domainStr, bool isAllowed)

Nit: domainStr =&gt; domain

(this matches the name of this parameter in the declaration of this function in NotificationPresenterImpl.h)

Then you could remain the WTF::String variable on line 105 to domainString.

Alternatively, you could rename domainStr to domainStdString or domainString and then update the declaration of this function in NotificationPresenterImpl.h.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:123
&gt; +    // Because we are using a modal dialog to request permission, it&apos;s probably impossible to cancel it.

I don&apos;t understand how canceling the modal dialog is &quot;probably impossible&quot;. It&apos;s either possible or not.

Nit: I suggest adding a &quot;return&quot; statement here instead of just falling off the end of the function. Even though both calling return here and falling off the end of the function have the same effect, I feel that adding return here makes the body of this function less empty and hence improves the readability of this file as you read through this function.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:130
&gt; +

Nit: I suggest removing this empty line since it creates as visual separation that conflicts with the relationship the comment on line 128-129 is trying to build with line 131.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:137
&gt; +// This function will be called by platform side.

Nit: This comment doesn&apos;t read well.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:138
&gt; +void NotificationPresenterImpl::notificationClicked(const std::string&amp; idStr)

Nit: idStr =&gt; id

(this matches the name of this parameter in the declaration of this function in NotificationPresenterImpl.h)

Then you could remain the WTF::String variable on line 141 to idString.

Alternatively, you could rename idStr to idStdString or idString and then update the declaration of this function in NotificationPresenterImpl.h.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:147
&gt; +    for (; iter != m_notifications.end(); ++iter)
&gt; +        if (iter-&gt;second == id &amp;&amp; iter-&gt;first-&gt;scriptExecutionContext()) {
&gt; +            iter-&gt;first-&gt;dispatchEvent(Event::create(eventNames().clickEvent, false, true));
&gt; +            m_notifications.remove(iter);
&gt; +        }

This for-loop needs braces since its body is more than a single line.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:24
&gt; +#include &quot;HashMap.h&quot;

This should be:

#include &lt;wtf/HashMap.h&gt;

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:25
&gt; +#include &quot;HashSet.h&quot;

This should be:

#include &lt;wtf/HashSet.h&gt;

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:26
&gt; +#include &quot;NotificationAckListener.h&quot;

This should be:

#include &lt;NotificationAckListener.h&gt;

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:28
&gt; +#include &quot;NotificationPresenterBlackBerry.h&quot;

Do we need to include this file here? It should be sufficient to only include this file in NotificationPresenterImpl.cpp (which we already do) and then forward declare BlackBerry::Platform::NotificationPresenterBlackBerry.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:29
&gt; +#include &quot;PlatformString.h&quot;

Instead of including this file here, can we include this file in NotificationPresenterImpl.cpp and just forward declare WTF::String in this file?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:30
&gt; +#include &quot;StringHash.h&quot;

Do we need to include this file here? It should be sufficient to only include this file in NotificationPresenterImpl.cpp (which we already do).

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:37
&gt; +

Remove this empty line as it doesn&apos;t improve the readability of this class declaration.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:58
&gt; +    // Cancel all outstanding requests for the ScriptExecutionContext

This comment seems inane given the name of this function. I suggest removing it.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:63
&gt; +

Remove this empty line. There&apos;s already an empty line below and one empty line is sufficient to visually separate these functions.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:65
&gt; +    // Interfaces inherits from NotificationAckListener:

inherits =&gt; inherited
: =&gt; .

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:75
&gt; +    typedef HashMap&lt;RefPtr&lt;WebCore::Notification&gt;, WTF::String&gt; NotificationMap;

Do we need the WTF:: prefix?

Nit: I suggest adding adding and empty line above this line to increase the readability of the private section of class by creating a visual separation between the OwnPtr and this typedef which is referenced in line 76 (below).

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:77
&gt; +    typedef HashMap&lt;RefPtr&lt;WebCore::ScriptExecutionContext&gt;, RefPtr&lt;WebCore::VoidCallback&gt; &gt; PermissionRequestMap;

Nit: I suggest adding adding and empty line above this line to increase the readability of the private section of class by creating a visual separation between the m_notifications and this typedef which is referenced in line 78 (below).

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:79
&gt; +    HashSet&lt;WTF::String&gt; m_allowedDomains;

Do we need the WTF:: prefix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511440</commentid>
    <comment_count>6</comment_count>
      <attachid>117108</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-29 23:56:02 -0800</bug_when>
    <thetext>Comment on attachment 117108
Patch for notification support. V2.

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

&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:72
&gt;&gt; +        // FIXME: strip to one line
&gt; 
&gt; Nit: strip =&gt; Strip
&gt; 
&gt; Also, comments should be full sentences that end in a period.
&gt; 
&gt; I&apos;m not entirely clear what this comment means. I take it that either notification-&gt;contents().title() or notification-&gt;contents().body() may contain some kind of line delimiter character(s) (e.g. new line characters) and that we want to remove such characters such that the message is ultimately displayed as one line of text.

Yes. That&apos;s what I mean. :)

&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:30
&gt;&gt; +#include &quot;StringHash.h&quot;
&gt; 
&gt; Do we need to include this file here? It should be sufficient to only include this file in NotificationPresenterImpl.cpp (which we already do).

Yes. StringHash.h is needed in HashSet&lt;WTF::String&gt; instantiation.

&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:58
&gt;&gt; +    // Cancel all outstanding requests for the ScriptExecutionContext
&gt; 
&gt; This comment seems inane given the name of this function. I suggest removing it.

This comment is copied from its base class, I think I&apos;d better remain it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511452</commentid>
    <comment_count>7</comment_count>
      <attachid>117134</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-30 00:09:03 -0800</bug_when>
    <thetext>Created attachment 117134
Patch for notification support. V3.

Modified according to Daniel&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511456</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 00:12:07 -0800</bug_when>
    <thetext>Attachment 117134 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/...&quot; exit_code: 1

Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511461</commentid>
    <comment_count>9</comment_count>
      <attachid>117136</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-11-30 00:26:00 -0800</bug_when>
    <thetext>Created attachment 117136
Patch for notification support. V4.

Sort the headers in check-webkit-style sorting order. (Different from linux sort tool sorting order).
linux sort tool:
 25 #include &lt;NotificationPresenterBlackBerry.h&gt;
 26 #include &lt;NotificationPresenter.h&gt;

check-webkit-style:
 25 #include &lt;NotificationPresenter.h&gt;
 26 #include &lt;NotificationPresenterBlackBerry.h&gt;


A bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516916</commentid>
    <comment_count>10</comment_count>
      <attachid>117136</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-07 14:22:06 -0800</bug_when>
    <thetext>Comment on attachment 117136
Patch for notification support. V4.

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

Looks quite close to being finished, some nits, so r- for now :)

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:52
&gt; +bool NotificationPresenterImpl::show(Notification* n)

For consistency needs (Notification* notification), see notificationObjectDestroyed.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:77
&gt; +void NotificationPresenterImpl::cancel(Notification* n)

Ditto.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:126
&gt; +    // FIXME: Should store the permission information into file permenently instead of in m_allowedDomains.

Typo -&gt; permanently

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:56
&gt; +    // Cancel all outstanding requests for the ScriptExecutionContext

misses &apos;.&apos; at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517208</commentid>
    <comment_count>11</comment_count>
      <attachid>118335</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-07 23:15:47 -0800</bug_when>
    <thetext>Created attachment 118335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518760</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-10 00:15:02 -0800</bug_when>
    <thetext>Hi Dan,

(In reply to comment #5)
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:73
&gt; &gt; +        message = notification-&gt;contents().title() + &quot;: &quot; + notification-&gt;contents().body();
&gt; 
&gt; We should use makeString() (*) here:
&gt; 
&gt; message = makeString(notification-&gt;contents().title(), &quot;: &quot;, notification-&gt;contents().body());
&gt; 
&gt; (*) Defined in JavaScriptCore/wtf/text/StringConcatenate.h: &lt;http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/text/StringConcatenate.h?rev=98624#L621&gt;.
Just a side note: We have an optimized operator+ template version, that I worked on some months ago, that delivers the same performance as using makeString. In fact StringAppend&lt;T, StringAppend&lt;T&gt; &gt; operator+(StringAppend&amp;) uses makeString internally. If these are WTF::Strings, using notifcation-&gt;contents().title + &quot;: &quot; .. is completely fine, this won&apos;t lead to a realloc, instead the final string will be built using makeString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518764</commentid>
    <comment_count>13</comment_count>
      <attachid>118335</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-10 00:22:20 -0800</bug_when>
    <thetext>Comment on attachment 118335
Patch

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

Looks good to me, still some nits that lead to r-.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:34
&gt; +NotificationPresenterImpl* NotificationPresenterImpl::s_instance = 0;

No need for this, just move the static s_instance declaration into ::instance() - this way it doesn&apos;t need to be present in the header as well.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:36
&gt; +NotificationPresenter* NotificationPresenterImpl::instance()

Why is this named *Impl - we generally try to avoid this idiom in WebCore, but as this is WebKit it might be fine. Do you plan to add more *Impl.cpp named files?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:55
&gt; +    if (NotificationPresenter::PermissionAllowed != checkPermission(notification-&gt;scriptExecutionContext()))

This reads awkward, I&apos;d swap the order here.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:70
&gt; +        message = makeString(n-&gt;contents().title(), &quot;: &quot;, n-&gt;contents().body());

As I mentioned to Dan before, your old variant was fine as well, you could revert to it, this is no gain.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:83
&gt; +    if (m_notifications.contains(n)) {
&gt; +        m_platformPresenter-&gt;cancel(std::string(m_notifications.get(n).utf8().data()));
&gt; +        m_notifications.remove(n);

This idiom is slow, don&apos;t use contains to check, and then remove to query the hash table again. Instead use m_notifications.find(n) which will return you an iterator, if it&apos;s map.end() you can early exit, otherwhise you can cancel the presenter and call remove(it);

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:94
&gt; +{

No ASSERT(context) here?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:103
&gt; +    PermissionRequestMap::iterator iter = m_permissionRequests.begin();

s/iter/it/ - as this is used all over WebCore in this way :-) About the only tolerated abbreviations that we use.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:104
&gt; +    for (; iter != m_permissionRequests.end(); ++iter) {

If this is hot code, you could cache m_permissionRequests.end(), but I doubt it.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:105
&gt; +        if (iter-&gt;first-&gt;url().host() == domainString) {

Early continue; here if it doesn&apos;t match.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:121
&gt; +    return;

Unncessary.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:126
&gt; +    // FIXME: Should store the permission information into file permanently instead of in m_allowedDomains.

ASSERT(context) ?

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:139
&gt; +    NotificationMap::iterator iter = m_notifications.begin();

s/iter/it/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519075</commentid>
    <comment_count>14</comment_count>
      <attachid>118752</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-12 02:09:27 -0800</bug_when>
    <thetext>Created attachment 118752
Patch for notification support. V6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519076</commentid>
    <comment_count>15</comment_count>
      <attachid>118335</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-12 02:11:21 -0800</bug_when>
    <thetext>Comment on attachment 118335
Patch

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

&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:121
&gt;&gt; +    return;
&gt; 
&gt; Unncessary.

I added this according Daniel&apos;s comment. :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519811</commentid>
    <comment_count>16</comment_count>
      <attachid>118939</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-12 19:44:25 -0800</bug_when>
    <thetext>Created attachment 118939
Patch for notification support. V7.

Changed according Nikolas&apos; comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519821</commentid>
    <comment_count>17</comment_count>
      <attachid>118335</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-12 19:49:51 -0800</bug_when>
    <thetext>Comment on attachment 118335
Patch

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

&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:36
&gt;&gt; +NotificationPresenter* NotificationPresenterImpl::instance()
&gt; 
&gt; Why is this named *Impl - we generally try to avoid this idiom in WebCore, but as this is WebKit it might be fine. Do you plan to add more *Impl.cpp named files?

There is already another header file: ./Source/WebCore/notifications/NotificationPresenter.h, If rename NotificationPresenterImpl.h to NotificationPresenter.h, it will conflict with the one in WebCore. So, I keep the original names.

&gt;&gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:121
&gt;&gt;&gt; +    return;
&gt;&gt; 
&gt;&gt; Unncessary.
&gt; 
&gt; I added this according Daniel&apos;s comment. :P

I added this according Daniel&apos;s comment. :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519829</commentid>
    <comment_count>18</comment_count>
      <attachid>118944</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-12 20:05:37 -0800</bug_when>
    <thetext>Created attachment 118944
Patch for notification support. V8.

Contains() -&gt; find()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519932</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-13 00:55:52 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 118335 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118335&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:36
&gt; &gt;&gt; +NotificationPresenter* NotificationPresenterImpl::instance()
&gt; &gt; 
&gt; &gt; Why is this named *Impl - we generally try to avoid this idiom in WebCore, but as this is WebKit it might be fine. Do you plan to add more *Impl.cpp named files?
&gt; 
&gt; There is already another header file: ./Source/WebCore/notifications/NotificationPresenter.h, If rename NotificationPresenterImpl.h to NotificationPresenter.h, it will conflict with the one in WebCore. So, I keep the original names.

Oh okay, these are the information that are supposed to be in the ChangeLog. Next time someone looks at this, wondering why it was named this way :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519940</commentid>
    <comment_count>20</comment_count>
      <attachid>118944</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-13 01:03:49 -0800</bug_when>
    <thetext>Comment on attachment 118944
Patch for notification support. V8.

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

Almost there, I still have some style nitpicks, and give r- as the ChangeLog doesn&apos;t contain any information. At least one line should be added.

&gt; Source/WebKit/ChangeLog:7
&gt; +

Please add at least one or two lines to the ChangeLog, sth. like &quot;Initial upstreaming, no new tests.&quot;

&gt; Source/WebKit/ChangeLog:20
&gt; +        * blackberry/WebCoreSupport/NotificationPresenterImpl.h: Added.

You could explain the file naming here.
I still don&apos;t see why we don&apos;t name it NotificationPresenterBlackBerry.h, or sth. similar. But it&apos;s okay for now.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:23
&gt; +

One newline too much.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:33
&gt; +

One newline too much.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:39
&gt; +        s_instance = new NotificationPresenterImpl();

s/()//

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:61
&gt; +    if (checkPermission(notification-&gt;scriptExecutionContext()) != NotificationPresenter::PermissionAllowed)
&gt; +        return false;
&gt; +
&gt; +    RefPtr&lt;Notification&gt; n = notification;
&gt; +    if (m_notifications.contains(n))
&gt; +        return false;

Which case is simpler to compute? I assume the latter, so we should swap these.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:126
&gt; +    return;

Even if Dan suggested to add this, I&apos;m suggesting to remove this :-)
There is no benefit of adding this, and it&apos;s also leading to compiler warnings under certain circumstances IIRC.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:23
&gt; +

This newline can be removed.

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.h:84
&gt; +

This newline can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519952</commentid>
    <comment_count>21</comment_count>
      <attachid>118975</attachid>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-13 01:32:03 -0800</bug_when>
    <thetext>Created attachment 118975
Patch for notification support. V9.

Thanks, Nikolas. 
I updated my patch according to your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520783</commentid>
    <comment_count>22</comment_count>
      <attachid>118975</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-14 01:39:46 -0800</bug_when>
    <thetext>Comment on attachment 118975
Patch for notification support. V9.

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

Nice job! r=me, with one last comment, just go ahead and land it :-)

&gt; Source/WebKit/blackberry/WebCoreSupport/NotificationPresenterImpl.cpp:134
&gt; +

One newline too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520785</commentid>
    <comment_count>23</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-14 01:51:30 -0800</bug_when>
    <thetext>Committed r102754: &lt;http://trac.webkit.org/changeset/102754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520786</commentid>
    <comment_count>24</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-12-14 01:53:19 -0800</bug_when>
    <thetext>Thanks, Dan, Rob, Niko and Leo.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116922</attachid>
            <date>2011-11-29 01:47:27 -0800</date>
            <delta_ts>2011-11-29 20:33:19 -0800</delta_ts>
            <desc>Patch for notification support. V1.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12057</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSAyNGE2NmZmOGQ1ZGUyMTMyNTM4NzA4MmI5ZjIwZDdhNGY0NWEzYjRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMjkgTm92IDIwMTEgMTc6NDE6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OmdldEluc3RhbmNlKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OmNhbmNlbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5v
dGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysKIC4uLi9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCAgIHwgIDE0OCArKysrKysrKysr
KysrKysrKysrKwogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aCAgICAgfCAgIDg2ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUyZTA1NzYuLmNjN2FmZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMjkgIFJvYmluIFFpdSAgPHJvYmlu
LnFpdUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEFkZCBub3Rp
ZmljYXRpb24gc3VwcG9ydCBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNh
dGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCisKIDIwMTEtMTEtMjYgIEpvbmF0aGFu
IERvbmcgIDxqb25hdGhhbi5kb25nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQ01h
a2VdIENsZWFuIHVwIFdlYiBJbnNwZWN0b3IgdGFyZ2V0IGluIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DTWFrZUxpc3RzQmxhY2tCZXJyeS50eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjA0MjBk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRp
b24uaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5LmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05vdGlmaWNhdGlv
blByZXNlbnRlckltcGwqIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om1faW5zdGFuY2UgPSAw
OworCitOb3RpZmljYXRpb25QcmVzZW50ZXIqIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Omlu
c3RhbmNlKCkKK3sKKyAgICBpZiAoIW1faW5zdGFuY2UpCisgICAgICAgIG1faW5zdGFuY2UgPSBu
ZXcgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworICAgIHJldHVybiBtX2luc3RhbmNlOwor
fQorCitOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KCkKK3sKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyID0gYWRvcHRQdHIoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnk6OmNyZWF0ZSh0aGlzKSk7Cit9
CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KCkKK3sKK30KKworCitib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3coTm90aWZp
Y2F0aW9uKiBuKQoreworICAgIGlmIChOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25B
bGxvd2VkICE9IGNoZWNrUGVybWlzc2lvbihuLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmlj
YXRpb24gPSBuOworICAgIGlmIChtX25vdGlmaWNhdGlvbnMuY29udGFpbnMobm90aWZpY2F0aW9u
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIHV1aWQgPSBjcmVhdGVDYW5v
bmljYWxVVUlEU3RyaW5nKCk7CisgICAgbV9ub3RpZmljYXRpb25zLmFkZChub3RpZmljYXRpb24s
IHV1aWQpOworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRN
TCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBsb2FkIGFuZCBkaXNwbGF5IEhUTUwgY29udGVudAor
ICAgICAgICBtZXNzYWdlID0gbm90aWZpY2F0aW9uLT51cmwoKS5zdHJpbmcoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogc3RyaXAgdG8gb25lIGxpbmUKKyAgICAgICAgbWVzc2Fn
ZSA9IG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS50aXRsZSgpICsgIjogIiArIG5vdGlmaWNhdGlv
bi0+Y29udGVudHMoKS5ib2R5KCk7CisgICAgfQorCisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+
c2hvdyhzdGQ6OnN0cmluZyh1dWlkLnV0ZjgoKS5kYXRhKCkpLCBzdGQ6OnN0cmluZyhtZXNzYWdl
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsOjpjYW5jZWwoTm90aWZpY2F0aW9uKiBuKQoreworICAgIFJlZlB0cjxO
b3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IG47CisgICAgaWYgKG1fbm90aWZpY2F0aW9ucy5j
b250YWlucyhub3RpZmljYXRpb24pKSB7CisgICAgICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNh
bmNlbChzdGQ6OnN0cmluZyhtX25vdGlmaWNhdGlvbnMuZ2V0KG5vdGlmaWNhdGlvbikudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7
CisgICAgfQorfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlv
bk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBjYW5j
ZWwobm90aWZpY2F0aW9uKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpy
ZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMu
YWRkKGNvbnRleHQsIGNhbGxiYWNrKTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5yZXF1ZXN0
UGVybWlzc2lvbihzdGQ6OnN0cmluZyhjb250ZXh0LT51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEo
KSkpOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbihj
b25zdCBzdGQ6OnN0cmluZyYgZG9tYWluU3RyLCBib29sIGlzQWxsb3dlZCkKK3sKKyAgICBTdHJp
bmcgZG9tYWluID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW5TdHIuY19zdHIoKSk7CisgICAgUGVy
bWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5i
ZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT51cmwoKS5ob3N0KCkgPT0gZG9tYWlu
KSB7CisgICAgICAgICAgICBpZiAoaXNBbGxvd2VkKSB7CisgICAgICAgICAgICAgICAgbV9hbGxv
d2VkRG9tYWlucy5hZGQoZG9tYWluKTsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQtPmhh
bmRsZUV2ZW50KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2FsbG93
ZWREb21haW5zLnJlbW92ZShkb21haW4pOworCisgICAgICAgICAgICBtX3Blcm1pc3Npb25SZXF1
ZXN0cy5yZW1vdmUoaXRlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBl
cm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit7CisgICAgLy8gQmVjYXVzZSB3ZSBh
cmUgdXNpbmcgYSBtb2RhbCBkaWFsb2cgdG8gcmVxdWVzdCBwZXJtaXNzaW9uLCBpdCdzIHByb2Jh
Ymx5IGltcG9zc2libGUgdG8gY2FuY2VsIGl0LgorfQorCitOb3RpZmljYXRpb25QcmVzZW50ZXI6
OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBz
dG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1hdGlvbiBpbnRvIGZpbGUgcGVybWVuZW50bHkgaW5z
dGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5zLgorICAgIC8vIFRoZSBzdWdnZXN0ZWQgcGxhY2Ug
dG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3JtUHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oKS4K
KworICAgIGlmIChtX2FsbG93ZWREb21haW5zLmNvbnRhaW5zKGNvbnRleHQtPnVybCgpLmhvc3Qo
KSkpCisgICAgICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25BbGxv
d2VkOworICAgIHJldHVybiBOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxv
d2VkOworCit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgcGxhdGZvcm0g
c2lkZS4KK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tl
ZChjb25zdCBzdGQ6OnN0cmluZyYgaWRTdHIpCit7CisgICAgU3RyaW5nIGlkID0gU3RyaW5nOjpm
cm9tVVRGOChpZFN0ci5jX3N0cigpKTsKKyAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaXRlciAhPSBtX25vdGlm
aWNhdGlvbnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBpZCAm
JiBpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBp
dGVyLT5maXJzdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92
ZShpdGVyKTsKKyAgICAgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShOT1RJRklDQVRJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljYmVhZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE5vdGlmaWNhdGlvblByZXNlbnRlcklt
cGxfaAorI2RlZmluZSBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gKKworI2lmIEVOQUJMRShO
T1RJRklDQVRJT05TKQorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIkhhc2hTZXQu
aCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25BY2tMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk5vdGlm
aWNhdGlvblByZXNlbnRlci5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNr
QmVycnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hh
c2guaCIKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCA6IHB1Ymxp
YyBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXIsIHB1YmxpYyBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Tm90aWZpY2F0aW9uQWNrTGlzdGVuZXIgeworCitwdWJsaWM6CisgICAgc3RhdGljIE5v
dGlmaWNhdGlvblByZXNlbnRlciogaW5zdGFuY2UoKTsKKyAgICB2aXJ0dWFsIH5Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsKCk7CisKKyAgICAvLyBSZXF1ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9u
IGJlIHNob3duLgorICAgIHZpcnR1YWwgYm9vbCBzaG93KFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiop
OworCisgICAgLy8gUmVxdWVzdHMgdGhhdCBhIG5vdGlmaWNhdGlvbiB0aGF0IGhhcyBhbHJlYWR5
IGJlZW4gc2hvd24gYmUgY2FuY2VsZWQuCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbChXZWJDb3Jl
OjpOb3RpZmljYXRpb24qKTsKKworICAgIC8vIEluZm9ybXMgdGhlIHByZXNlbnRlciB0aGF0IGEg
V2ViQ29yZTo6Tm90aWZpY2F0aW9uIG9iamVjdCBoYXMgYmVlbiBkZXN0cm95ZWQKKyAgICAvLyAo
c3VjaCBhcyBieSBhIHBhZ2UgdHJhbnNpdGlvbikuIFRoZSBwcmVzZW50ZXIgbWF5IGNvbnRpbnVl
IHNob3dpbmcKKyAgICAvLyB0aGUgbm90aWZpY2F0aW9uLCBidXQgbXVzdCBub3QgYXR0ZW1wdCB0
byBjYWxsIHRoZSBldmVudCBoYW5kbGVycy4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9u
T2JqZWN0RGVzdHJveWVkKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiopOworCisgICAgLy8gUmVxdWVz
dHMgdXNlciBwZXJtaXNzaW9uIHRvIHNob3cgZGVza3RvcCBub3RpZmljYXRpb25zIGZyb20gYSBw
YXJ0aWN1bGFyCisgICAgLy8gc2NyaXB0IGNvbnRleHQuIFRoZSBjYWxsYmFjayBwYXJhbWV0ZXIg
c2hvdWxkIGJlIHJ1biB3aGVuIHRoZSB1c2VyIGhhcworICAgIC8vIG1hZGUgYSBkZWNpc2lvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPik7CisKKyAgICAv
LyBDYW5jZWwgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dAorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgLy8gQ2hlY2tzIHRoZSBjdXJy
ZW50IGxldmVsIG9mIHBlcm1pc3Npb24uCisgICAgdmlydHVhbCBQZXJtaXNzaW9uIGNoZWNrUGVy
bWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKworICAgIC8vIElu
dGVyZmFjZXMgaW5oZXJpdHMgZnJvbSBOb3RpZmljYXRpb25BY2tMaXN0ZW5lcjoKKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpOworICAg
IHZpcnR1YWwgdm9pZCBvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9v
bCBpc0FsbG93ZWQpOworCitwcml2YXRlOgorICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCogbV9p
bnN0YW5jZTsKKyAgICBPd25QdHI8QmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckJsYWNrQmVycnk+IG1fcGxhdGZvcm1QcmVzZW50ZXI7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxXZWJDb3JlOjpOb3RpZmljYXRpb24+LCBXVEY6OlN0cmluZz4gTm90aWZpY2F0
aW9uTWFwOworICAgIE5vdGlmaWNhdGlvbk1hcCBtX25vdGlmaWNhdGlvbnM7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiwgUmVmUHRy
PFdlYkNvcmU6OlZvaWRDYWxsYmFjaz4gPiBQZXJtaXNzaW9uUmVxdWVzdE1hcDsKKyAgICBQZXJt
aXNzaW9uUmVxdWVzdE1hcCBtX3Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBIYXNoU2V0PFdURjo6
U3RyaW5nPiBtX2FsbG93ZWREb21haW5zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKworI2VuZGlmIC8vIE5vdGlmaWNhdGlv
blByZXNlbnRlckltcGxfaAotLSAKMS43LjYuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117108</attachid>
            <date>2011-11-29 20:33:19 -0800</date>
            <delta_ts>2011-11-30 00:09:45 -0800</delta_ts>
            <desc>Patch for notification support. V2.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12176</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSBkOGVhZjc2NDkyYjRiMGVkYThkMTlmNzllOTkwZDYwYzlkMWVkM2U5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMjkgTm92IDIwMTEgMTc6NDE6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OmdldEluc3RhbmNlKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OmNhbmNlbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5v
dGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysKIC4uLi9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCAgIHwgIDE1MiArKysrKysrKysr
KysrKysrKysrKwogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aCAgICAgfCAgIDg2ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1OSBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUyZTA1NzYuLmNjN2FmZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMjkgIFJvYmluIFFpdSAgPHJvYmlu
LnFpdUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEFkZCBub3Rp
ZmljYXRpb24gc3VwcG9ydCBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNh
dGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCisKIDIwMTEtMTEtMjYgIEpvbmF0aGFu
IERvbmcgIDxqb25hdGhhbi5kb25nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQ01h
a2VdIENsZWFuIHVwIFdlYiBJbnNwZWN0b3IgdGFyZ2V0IGluIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DTWFrZUxpc3RzQmxhY2tCZXJyeS50eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmYxZGI5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRp
b24uaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5LmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05vdGlmaWNhdGlv
blByZXNlbnRlckltcGwqIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om1faW5zdGFuY2UgPSAw
OworCitOb3RpZmljYXRpb25QcmVzZW50ZXIqIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Omlu
c3RhbmNlKCkKK3sKKyAgICBpZiAoIW1faW5zdGFuY2UpCisgICAgICAgIG1faW5zdGFuY2UgPSBu
ZXcgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworICAgIHJldHVybiBtX2luc3RhbmNlOwor
fQorCitOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KCkKK3sKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyID0gYWRvcHRQdHIoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnk6OmNyZWF0ZSh0aGlzKSk7Cit9
CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KCkKK3sKK30KKworYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpzaG93KE5vdGlmaWNh
dGlvbiogbikKK3sKKyAgICBBU1NFUlQobik7CisgICAgaWYgKE5vdGlmaWNhdGlvblByZXNlbnRl
cjo6UGVybWlzc2lvbkFsbG93ZWQgIT0gY2hlY2tQZXJtaXNzaW9uKG4tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxOb3RpZmlj
YXRpb24+IG5vdGlmaWNhdGlvbiA9IG47CisgICAgaWYgKG1fbm90aWZpY2F0aW9ucy5jb250YWlu
cyhub3RpZmljYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgdXVp
ZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBtX25vdGlmaWNhdGlvbnMuYWRk
KG5vdGlmaWNhdGlvbiwgdXVpZCk7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKG5vdGlm
aWNhdGlvbi0+aXNIVE1MKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGxvYWQgYW5kIGRpc3BsYXkg
SFRNTCBjb250ZW50CisgICAgICAgIG1lc3NhZ2UgPSBub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBzdHJpcCB0byBvbmUgbGluZQor
ICAgICAgICBtZXNzYWdlID0gbm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRpdGxlKCkgKyAiOiAi
ICsgbm90aWZpY2F0aW9uLT5jb250ZW50cygpLmJvZHkoKTsKKyAgICB9CisKKyAgICBtX3BsYXRm
b3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6c3RyaW5nKHV1aWQudXRmOCgpLmRhdGEoKSksIHN0ZDo6
c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG4pCit7
CisgICAgQVNTRVJUKG4pOworICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9
IG47CisgICAgaWYgKG1fbm90aWZpY2F0aW9ucy5jb250YWlucyhub3RpZmljYXRpb24pKSB7Cisg
ICAgICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhtX25vdGlmaWNh
dGlvbnMuZ2V0KG5vdGlmaWNhdGlvbikudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBtX25vdGlm
aWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7CisgICAgfQorfQorCit2b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRp
b24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBjYW5j
ZWwobm90aWZpY2F0aW9uKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpy
ZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMu
YWRkKGNvbnRleHQsIGNhbGxiYWNrKTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5yZXF1ZXN0
UGVybWlzc2lvbihzdGQ6OnN0cmluZyhjb250ZXh0LT51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEo
KSkpOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbihj
b25zdCBzdGQ6OnN0cmluZyYgZG9tYWluU3RyLCBib29sIGlzQWxsb3dlZCkKK3sKKyAgICBBU1NF
UlQoIWRvbWFpblN0ci5lbXB0eSgpKTsKKyAgICBTdHJpbmcgZG9tYWluID0gU3RyaW5nOjpmcm9t
VVRGOChkb21haW5TdHIuY19zdHIoKSk7CisgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5iZWdpbigpOworICAgIGZvciAoOyBpdGVy
ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0
ZXItPmZpcnN0LT51cmwoKS5ob3N0KCkgPT0gZG9tYWluKSB7CisgICAgICAgICAgICBpZiAoaXNB
bGxvd2VkKSB7CisgICAgICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluKTsK
KyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLnJlbW92ZShkb21haW4p
OworCisgICAgICAgICAgICBtX3Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUoaXRlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopCit7CisgICAgLy8gQmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBtb2RhbCBkaWFsb2cg
dG8gcmVxdWVzdCBwZXJtaXNzaW9uLCBpdCdzIHByb2JhYmx5IGltcG9zc2libGUgdG8gY2FuY2Vs
IGl0LgorfQorCitOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZv
cm1hdGlvbiBpbnRvIGZpbGUgcGVybWVuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21h
aW5zLgorICAgIC8vIFRoZSBzdWdnZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRm
b3JtUHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oKS4KKworICAgIGlmIChtX2FsbG93ZWREb21h
aW5zLmNvbnRhaW5zKGNvbnRleHQtPnVybCgpLmhvc3QoKSkpCisgICAgICAgIHJldHVybiBOb3Rp
ZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkOworICAgIHJldHVybiBOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOworCit9CisKKy8vIFRoaXMgZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgcGxhdGZvcm0gc2lkZS4KK3ZvaWQgTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgaWRT
dHIpCit7CisgICAgQVNTRVJUKCFpZFN0ci5lbXB0eSgpKTsKKyAgICBTdHJpbmcgaWQgPSBTdHJp
bmc6OmZyb21VVEY4KGlkU3RyLmNfc3RyKCkpOworICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IG1f
bm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdGVyKQorICAgICAgICBpZiAoaXRlci0+c2Vjb25kID09
IGlkICYmIGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIGl0ZXItPmZpcnN0LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgICAgICBtX25vdGlmaWNhdGlvbnMu
cmVtb3ZlKGl0ZXIpOworICAgICAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNiZWFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0
L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbF9oCisjZGVmaW5lIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGxfaAorCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSGFz
aFNldC5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmgiCisjaW5jbHVkZSAi
Tm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVy
QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsIDog
cHVibGljIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlciwgcHVibGljIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpOb3RpZmljYXRpb25BY2tMaXN0ZW5lciB7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBpbnN0YW5jZSgpOworICAgIHZpcnR1YWwgfk5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwoKTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmlj
YXRpb24gYmUgc2hvd24uCisgICAgdmlydHVhbCBib29sIHNob3coV2ViQ29yZTo6Tm90aWZpY2F0
aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiBzaG93biBiZSBjYW5jZWxlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdl
YkNvcmU6Ok5vdGlmaWNhdGlvbiopOworCisgICAgLy8gSW5mb3JtcyB0aGUgcHJlc2VudGVyIHRo
YXQgYSBXZWJDb3JlOjpOb3RpZmljYXRpb24gb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZAorICAg
IC8vIChzdWNoIGFzIGJ5IGEgcGFnZSB0cmFuc2l0aW9uKS4gVGhlIHByZXNlbnRlciBtYXkgY29u
dGludWUgc2hvd2luZworICAgIC8vIHRoZSBub3RpZmljYXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRl
bXB0IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXJzLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmlj
YXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBS
ZXF1ZXN0cyB1c2VyIHBlcm1pc3Npb24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJv
bSBhIHBhcnRpY3VsYXIKKyAgICAvLyBzY3JpcHQgY29udGV4dC4gVGhlIGNhbGxiYWNrIHBhcmFt
ZXRlciBzaG91bGQgYmUgcnVuIHdoZW4gdGhlIHVzZXIgaGFzCisgICAgLy8gbWFkZSBhIGRlY2lz
aW9uLgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+KTsKKwor
ICAgIC8vIENhbmNlbCBhbGwgb3V0c3RhbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBTY3JpcHRFeGVj
dXRpb25Db250ZXh0CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lv
bihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBDaGVja3MgdGhl
IGN1cnJlbnQgbGV2ZWwgb2YgcGVybWlzc2lvbi4KKyAgICB2aXJ0dWFsIFBlcm1pc3Npb24gY2hl
Y2tQZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworCisgICAg
Ly8gSW50ZXJmYWNlcyBpbmhlcml0cyBmcm9tIE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyOgorICAg
IHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7
CisgICAgdmlydHVhbCB2b2lkIG9uUGVybWlzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZG9tYWlu
LCBib29sIGlzQWxsb3dlZCk7CisKK3ByaXZhdGU6CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KiBtX2luc3RhbmNlOworICAgIE93blB0cjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0
aW9uUHJlc2VudGVyQmxhY2tCZXJyeT4gbV9wbGF0Zm9ybVByZXNlbnRlcjsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFdlYkNvcmU6Ok5vdGlmaWNhdGlvbj4sIFdURjo6U3RyaW5nPiBOb3Rp
ZmljYXRpb25NYXA7CisgICAgTm90aWZpY2F0aW9uTWFwIG1fbm90aWZpY2F0aW9uczsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+LCBS
ZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiA+IFBlcm1pc3Npb25SZXF1ZXN0TWFwOworICAg
IFBlcm1pc3Npb25SZXF1ZXN0TWFwIG1fcGVybWlzc2lvblJlcXVlc3RzOworICAgIEhhc2hTZXQ8
V1RGOjpTdHJpbmc+IG1fYWxsb3dlZERvbWFpbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjZW5kaWYgLy8gTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbF9oCi0tIAoxLjcuNi4xCgo=
</data>
<flag name="review"
          id="116434"
          type_id="1"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117134</attachid>
            <date>2011-11-30 00:09:03 -0800</date>
            <delta_ts>2011-11-30 00:26:00 -0800</delta_ts>
            <desc>Patch for notification support. V3.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12150</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSBkMjdmZDU4NmU0ZDA3MjgwNWFjN2MzMDFmZmQzMjIxZjI0NjllNjBhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMjkgTm92IDIwMTEgMTc6NDE6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OmdldEluc3RhbmNlKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OmNhbmNlbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5v
dGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysKIC4uLi9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCAgIHwgIDE1MCArKysrKysrKysr
KysrKysrKysrKwogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aCAgICAgfCAgIDg2ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUyZTA1NzYuLmNjN2FmZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMjkgIFJvYmluIFFpdSAgPHJvYmlu
LnFpdUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEFkZCBub3Rp
ZmljYXRpb24gc3VwcG9ydCBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNh
dGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCisKIDIwMTEtMTEtMjYgIEpvbmF0aGFu
IERvbmcgIDxqb25hdGhhbi5kb25nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQ01h
a2VdIENsZWFuIHVwIFdlYiBJbnNwZWN0b3IgdGFyZ2V0IGluIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DTWFrZUxpc3RzQmxhY2tCZXJyeS50eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBmMWQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCisKKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2luY2x1ZGUgPEV2ZW50Lmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9u
Lmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgorI2luY2x1
ZGUgPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KKyNpbmNsdWRlIDxVVUlELmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbCogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c19pbnN0YW5jZSA9IDA7
CisKK05vdGlmaWNhdGlvblByZXNlbnRlciogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5z
dGFuY2UoKQoreworICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgc19pbnN0YW5jZSA9IG5l
dyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9
CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KQoreworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXIgPSBhZG9wdFB0cihCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeTo6Y3JlYXRlKHRoaXMpKTsKK30K
KworTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KQoreworfQorCitib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3coTm90aWZpY2F0
aW9uKiBuKQoreworICAgIEFTU0VSVChuKTsKKyAgICBpZiAoTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uQWxsb3dlZCAhPSBjaGVja1Blcm1pc3Npb24obi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPE5vdGlmaWNh
dGlvbj4gbm90aWZpY2F0aW9uID0gbjsKKyAgICBpZiAobV9ub3RpZmljYXRpb25zLmNvbnRhaW5z
KG5vdGlmaWNhdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB1dWlk
ID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fbm90aWZpY2F0aW9ucy5hZGQo
bm90aWZpY2F0aW9uLCB1dWlkKTsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAobm90aWZp
Y2F0aW9uLT5pc0hUTUwoKSkgeworICAgICAgICAvLyBGSVhNRTogTG9hZCBhbmQgZGlzcGxheSBI
VE1MIGNvbnRlbnQuCisgICAgICAgIG1lc3NhZ2UgPSBub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBTdHJpcCB0aGUgY29udGVudCBp
bnRvIG9uZSBsaW5lLgorICAgICAgICBtZXNzYWdlID0gbWFrZVN0cmluZyhub3RpZmljYXRpb24t
PmNvbnRlbnRzKCkudGl0bGUoKSwgIjogIiwgbm90aWZpY2F0aW9uLT5jb250ZW50cygpLmJvZHko
KSk7CisgICAgfQorCisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+c2hvdyhzdGQ6OnN0cmluZyh1
dWlkLnV0ZjgoKS5kYXRhKCkpLCBzdGQ6OnN0cmluZyhtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpj
YW5jZWwoTm90aWZpY2F0aW9uKiBuKQoreworICAgIEFTU0VSVChuKTsKKyAgICBSZWZQdHI8Tm90
aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBuOworICAgIGlmIChtX25vdGlmaWNhdGlvbnMuY29u
dGFpbnMobm90aWZpY2F0aW9uKSkgeworICAgICAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5j
ZWwoc3RkOjpzdHJpbmcobV9ub3RpZmljYXRpb25zLmdldChub3RpZmljYXRpb24pLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwor
ICAgIH0KK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgQVNTRVJU
KG5vdGlmaWNhdGlvbik7CisgICAgY2FuY2VsKG5vdGlmaWNhdGlvbik7Cit9CisKK3ZvaWQgTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrKQorewor
ICAgIG1fcGVybWlzc2lvblJlcXVlc3RzLmFkZChjb250ZXh0LCBjYWxsYmFjayk7CisgICAgbV9w
bGF0Zm9ybVByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oc3RkOjpzdHJpbmcoY29udGV4dC0+
dXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBp
c0FsbG93ZWQpCit7CisgICAgQVNTRVJUKCFkb21haW4uZW1wdHkoKSk7CisgICAgU3RyaW5nIGRv
bWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOworICAgIFBlcm1p
c3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdGVyID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVn
aW4oKTsKKyAgICBmb3IgKDsgaXRlciAhPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5maXJzdC0+dXJsKCkuaG9zdCgpID09IGRvbWFpblN0
cmluZykgeworICAgICAgICAgICAgaWYgKGlzQWxsb3dlZCkgeworICAgICAgICAgICAgICAgIG1f
YWxsb3dlZERvbWFpbnMuYWRkKGRvbWFpblN0cmluZyk7CisgICAgICAgICAgICAgICAgaXRlci0+
c2Vjb25kLT5oYW5kbGVFdmVudCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKKworICAgICAgICAgICAg
bV9wZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2Fu
Y2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAg
IC8vIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIG1vZGFsIGRpYWxvZ3MgdG8gcmVxdWVzdCBwZXJtaXNz
aW9uLCBpdCdzIGltcG9zc2libGUgdG8gY2FuY2VsIHRoZW0uCisgICAgcmV0dXJuOworfQorCitO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1hdGlvbiBpbnRv
IGZpbGUgcGVybWVuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5zLgorICAgIC8v
IFRoZSBzdWdnZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3JtUHJlc2VudGVy
LT5jaGVja1Blcm1pc3Npb24oKS4KKyAgICBpZiAobV9hbGxvd2VkRG9tYWlucy5jb250YWlucyhj
b250ZXh0LT51cmwoKS5ob3N0KCkpKQorICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uTm90QWxsb3dlZDsKKworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBpbiBwbGF0Zm9ybSBzaWRlLgordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3sKKyAgICBBU1NFUlQoIWlk
LmVtcHR5KCkpOworICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19z
dHIoKSk7CisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRp
b25zLmJlZ2luKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdGVyLT5m
aXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBpdGVyLT5maXJz
dC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBm
YWxzZSwgdHJ1ZSkpOworICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdGVyKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTk9USUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODdkZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
X2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisKKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CisjaW5j
bHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgorI2luY2x1ZGUgPE5vdGlm
aWNhdGlvblByZXNlbnRlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNh
dGlvbkFja0xpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBpbnN0YW5jZSgpOworICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gYmUgc2hvd24uCisgICAg
dmlydHVhbCBib29sIHNob3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1
ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaG93biBiZSBj
YW5jZWxlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiop
OworCisgICAgLy8gSW5mb3JtcyB0aGUgcHJlc2VudGVyIHRoYXQgYSBXZWJDb3JlOjpOb3RpZmlj
YXRpb24gb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZAorICAgIC8vIChzdWNoIGFzIGJ5IGEgcGFn
ZSB0cmFuc2l0aW9uKS4gVGhlIHByZXNlbnRlciBtYXkgY29udGludWUgc2hvd2luZworICAgIC8v
IHRoZSBub3RpZmljYXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRlbXB0IHRvIGNhbGwgdGhlIGV2ZW50
IGhhbmRsZXJzLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQo
V2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB1c2VyIHBlcm1pc3Np
b24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3VsYXIKKyAgICAv
LyBzY3JpcHQgY29udGV4dC4gVGhlIGNhbGxiYWNrIHBhcmFtZXRlciBzaG91bGQgYmUgcnVuIHdo
ZW4gdGhlIHVzZXIgaGFzCisgICAgLy8gbWFkZSBhIGRlY2lzaW9uLgorICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+KTsKKworICAgIC8vIENhbmNlbCBhbGwgb3V0
c3RhbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgdmly
dHVhbCB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgcGVy
bWlzc2lvbi4KKyAgICB2aXJ0dWFsIFBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIEludGVyZmFjZXMgaW5oZXJpdGVk
IGZyb20gTm90aWZpY2F0aW9uQWNrTGlzdGVuZXIuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNh
dGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25Q
ZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKKwor
cHJpdmF0ZToKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwqIHNfaW5zdGFuY2U7CisgICAgT3du
UHRyPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5
PiBtX3BsYXRmb3JtUHJlc2VudGVyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxXZWJD
b3JlOjpOb3RpZmljYXRpb24+LCBTdHJpbmc+IE5vdGlmaWNhdGlvbk1hcDsKKyAgICBOb3RpZmlj
YXRpb25NYXAgbV9ub3RpZmljYXRpb25zOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiwgUmVmUHRyPFdlYkNvcmU6OlZvaWRDYWxs
YmFjaz4gPiBQZXJtaXNzaW9uUmVxdWVzdE1hcDsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcCBt
X3Blcm1pc3Npb25SZXF1ZXN0czsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FsbG93ZWREb21h
aW5zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2VuZGlmIC8vIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGxfaAotLSAK
MS43LjYuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117136</attachid>
            <date>2011-11-30 00:26:00 -0800</date>
            <delta_ts>2011-12-07 23:15:33 -0800</delta_ts>
            <desc>Patch for notification support. V4.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12150</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSBhZWFkNTk2M2I5NTRjMDZmYTNkYTQyM2E5YTIxNmY3ZGViYjAzOTFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMjkgTm92IDIwMTEgMTc6NDE6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OmdldEluc3RhbmNlKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OmNhbmNlbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5v
dGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CiogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysKIC4uLi9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCAgIHwgIDE1MCArKysrKysrKysr
KysrKysrKysrKwogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aCAgICAgfCAgIDg2ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUyZTA1NzYuLmNjN2FmZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMjkgIFJvYmluIFFpdSAgPHJvYmlu
LnFpdUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEFkZCBub3Rp
ZmljYXRpb24gc3VwcG9ydCBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNh
dGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCisKIDIwMTEtMTEtMjYgIEpvbmF0aGFu
IERvbmcgIDxqb25hdGhhbi5kb25nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQ01h
a2VdIENsZWFuIHVwIFdlYiBJbnNwZWN0b3IgdGFyZ2V0IGluIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DTWFrZUxpc3RzQmxhY2tCZXJyeS50eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBmMWQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCisKKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2luY2x1ZGUgPEV2ZW50Lmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9u
Lmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgorI2luY2x1
ZGUgPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KKyNpbmNsdWRlIDxVVUlELmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbCogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c19pbnN0YW5jZSA9IDA7
CisKK05vdGlmaWNhdGlvblByZXNlbnRlciogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5z
dGFuY2UoKQoreworICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgc19pbnN0YW5jZSA9IG5l
dyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9
CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KQoreworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXIgPSBhZG9wdFB0cihCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeTo6Y3JlYXRlKHRoaXMpKTsKK30K
KworTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KQoreworfQorCitib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3coTm90aWZpY2F0
aW9uKiBuKQoreworICAgIEFTU0VSVChuKTsKKyAgICBpZiAoTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uQWxsb3dlZCAhPSBjaGVja1Blcm1pc3Npb24obi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPE5vdGlmaWNh
dGlvbj4gbm90aWZpY2F0aW9uID0gbjsKKyAgICBpZiAobV9ub3RpZmljYXRpb25zLmNvbnRhaW5z
KG5vdGlmaWNhdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB1dWlk
ID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fbm90aWZpY2F0aW9ucy5hZGQo
bm90aWZpY2F0aW9uLCB1dWlkKTsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAobm90aWZp
Y2F0aW9uLT5pc0hUTUwoKSkgeworICAgICAgICAvLyBGSVhNRTogTG9hZCBhbmQgZGlzcGxheSBI
VE1MIGNvbnRlbnQuCisgICAgICAgIG1lc3NhZ2UgPSBub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBTdHJpcCB0aGUgY29udGVudCBp
bnRvIG9uZSBsaW5lLgorICAgICAgICBtZXNzYWdlID0gbWFrZVN0cmluZyhub3RpZmljYXRpb24t
PmNvbnRlbnRzKCkudGl0bGUoKSwgIjogIiwgbm90aWZpY2F0aW9uLT5jb250ZW50cygpLmJvZHko
KSk7CisgICAgfQorCisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+c2hvdyhzdGQ6OnN0cmluZyh1
dWlkLnV0ZjgoKS5kYXRhKCkpLCBzdGQ6OnN0cmluZyhtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpj
YW5jZWwoTm90aWZpY2F0aW9uKiBuKQoreworICAgIEFTU0VSVChuKTsKKyAgICBSZWZQdHI8Tm90
aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBuOworICAgIGlmIChtX25vdGlmaWNhdGlvbnMuY29u
dGFpbnMobm90aWZpY2F0aW9uKSkgeworICAgICAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5j
ZWwoc3RkOjpzdHJpbmcobV9ub3RpZmljYXRpb25zLmdldChub3RpZmljYXRpb24pLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwor
ICAgIH0KK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgQVNTRVJU
KG5vdGlmaWNhdGlvbik7CisgICAgY2FuY2VsKG5vdGlmaWNhdGlvbik7Cit9CisKK3ZvaWQgTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrKQorewor
ICAgIG1fcGVybWlzc2lvblJlcXVlc3RzLmFkZChjb250ZXh0LCBjYWxsYmFjayk7CisgICAgbV9w
bGF0Zm9ybVByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oc3RkOjpzdHJpbmcoY29udGV4dC0+
dXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBp
c0FsbG93ZWQpCit7CisgICAgQVNTRVJUKCFkb21haW4uZW1wdHkoKSk7CisgICAgU3RyaW5nIGRv
bWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOworICAgIFBlcm1p
c3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdGVyID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVn
aW4oKTsKKyAgICBmb3IgKDsgaXRlciAhPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5maXJzdC0+dXJsKCkuaG9zdCgpID09IGRvbWFpblN0
cmluZykgeworICAgICAgICAgICAgaWYgKGlzQWxsb3dlZCkgeworICAgICAgICAgICAgICAgIG1f
YWxsb3dlZERvbWFpbnMuYWRkKGRvbWFpblN0cmluZyk7CisgICAgICAgICAgICAgICAgaXRlci0+
c2Vjb25kLT5oYW5kbGVFdmVudCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKKworICAgICAgICAgICAg
bV9wZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2Fu
Y2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAg
IC8vIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIG1vZGFsIGRpYWxvZ3MgdG8gcmVxdWVzdCBwZXJtaXNz
aW9uLCBpdCdzIGltcG9zc2libGUgdG8gY2FuY2VsIHRoZW0uCisgICAgcmV0dXJuOworfQorCitO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1hdGlvbiBpbnRv
IGZpbGUgcGVybWVuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5zLgorICAgIC8v
IFRoZSBzdWdnZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3JtUHJlc2VudGVy
LT5jaGVja1Blcm1pc3Npb24oKS4KKyAgICBpZiAobV9hbGxvd2VkRG9tYWlucy5jb250YWlucyhj
b250ZXh0LT51cmwoKS5ob3N0KCkpKQorICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uTm90QWxsb3dlZDsKKworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBpbiBwbGF0Zm9ybSBzaWRlLgordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3sKKyAgICBBU1NFUlQoIWlk
LmVtcHR5KCkpOworICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19z
dHIoKSk7CisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRp
b25zLmJlZ2luKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdGVyLT5m
aXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBpdGVyLT5maXJz
dC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBm
YWxzZSwgdHJ1ZSkpOworICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdGVyKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTk9USUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODNiOTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
X2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisKKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CisjaW5j
bHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyLmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJl
c2VudGVyQmxhY2tCZXJyeS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNh
dGlvbkFja0xpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBpbnN0YW5jZSgpOworICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gYmUgc2hvd24uCisgICAg
dmlydHVhbCBib29sIHNob3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1
ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaG93biBiZSBj
YW5jZWxlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiop
OworCisgICAgLy8gSW5mb3JtcyB0aGUgcHJlc2VudGVyIHRoYXQgYSBXZWJDb3JlOjpOb3RpZmlj
YXRpb24gb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZAorICAgIC8vIChzdWNoIGFzIGJ5IGEgcGFn
ZSB0cmFuc2l0aW9uKS4gVGhlIHByZXNlbnRlciBtYXkgY29udGludWUgc2hvd2luZworICAgIC8v
IHRoZSBub3RpZmljYXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRlbXB0IHRvIGNhbGwgdGhlIGV2ZW50
IGhhbmRsZXJzLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQo
V2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB1c2VyIHBlcm1pc3Np
b24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3VsYXIKKyAgICAv
LyBzY3JpcHQgY29udGV4dC4gVGhlIGNhbGxiYWNrIHBhcmFtZXRlciBzaG91bGQgYmUgcnVuIHdo
ZW4gdGhlIHVzZXIgaGFzCisgICAgLy8gbWFkZSBhIGRlY2lzaW9uLgorICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+KTsKKworICAgIC8vIENhbmNlbCBhbGwgb3V0
c3RhbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgdmly
dHVhbCB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgcGVy
bWlzc2lvbi4KKyAgICB2aXJ0dWFsIFBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIEludGVyZmFjZXMgaW5oZXJpdGVk
IGZyb20gTm90aWZpY2F0aW9uQWNrTGlzdGVuZXIuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNh
dGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25Q
ZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKKwor
cHJpdmF0ZToKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwqIHNfaW5zdGFuY2U7CisgICAgT3du
UHRyPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5
PiBtX3BsYXRmb3JtUHJlc2VudGVyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxXZWJD
b3JlOjpOb3RpZmljYXRpb24+LCBTdHJpbmc+IE5vdGlmaWNhdGlvbk1hcDsKKyAgICBOb3RpZmlj
YXRpb25NYXAgbV9ub3RpZmljYXRpb25zOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiwgUmVmUHRyPFdlYkNvcmU6OlZvaWRDYWxs
YmFjaz4gPiBQZXJtaXNzaW9uUmVxdWVzdE1hcDsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcCBt
X3Blcm1pc3Npb25SZXF1ZXN0czsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FsbG93ZWREb21h
aW5zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2VuZGlmIC8vIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGxfaAotLSAK
MS43LjYuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118335</attachid>
            <date>2011-12-07 23:15:47 -0800</date>
            <delta_ts>2011-12-12 19:49:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73194-20111208151545.patch</filename>
            <type>text/plain</type>
            <size>10770</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3YjMyYTFjOTIzZjBjYmU4
MDBmNTkyYWVjYWZhZmViYmYxZjc1YTkuLjNjNDA5YTFmMzRkNzFmNzU1ODZjNjg2ZTA2Y2U0ZjU0
MmMxODJhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTItMDggIFJvYmluIFFp
dSAgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IEFkZCBub3RpZmljYXRpb24gc3VwcG9ydCBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTk0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Z2V0SW5zdGFuY2UpOgorICAg
ICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAg
ICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0ZvclBl
cm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpj
aGVja1Blcm1pc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpub3RpZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCisKIDIwMTEtMTItMDYg
IExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFVwc3Ry
ZWFtIGFib3V0OiBmZWF0dXJlIGluIFdlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0Lwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiYWZk
YmZiNmZmY2VkOGIzZTU0ZjJiMWVhMDg4OTJjZWFjMzRkODIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbC5jcHAKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlv
blByZXNlbnRlckltcGwuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjaW5jbHVk
ZSA8RXZlbnQuaD4KKyNpbmNsdWRlIDxOb3RpZmljYXRpb24uaD4KKyNpbmNsdWRlIDxOb3RpZmlj
YXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5Lmg+CisjaW5jbHVkZSA8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oPgorI2luY2x1ZGUgPFVVSUQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKiBOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsOjpzX2luc3RhbmNlID0gMDsKKworTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppbnN0YW5jZSgpCit7CisgICAgaWYgKCFz
X2luc3RhbmNlKQorICAgICAgICBzX2luc3RhbmNlID0gbmV3IE5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwoKTsKKyAgICByZXR1cm4gc19pbnN0YW5jZTsKK30KKworTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCit7CisgICAgbV9wbGF0Zm9ybVBy
ZXNlbnRlciA9IGFkb3B0UHRyKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJCbGFja0JlcnJ5OjpjcmVhdGUodGhpcykpOworfQorCitOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCit7Cit9CisKK2Jvb2wgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sK
KyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBpZiAoTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpQZXJtaXNzaW9uQWxsb3dlZCAhPSBjaGVja1Blcm1pc3Npb24obm90aWZpY2F0aW9uLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8Tm90aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOworICAgIGlmIChtX25vdGlmaWNhdGlv
bnMuY29udGFpbnMobikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB1dWlk
ID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fbm90aWZpY2F0aW9ucy5hZGQo
biwgdXVpZCk7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKG4tPmlzSFRNTCgpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBMb2FkIGFuZCBkaXNwbGF5IEhUTUwgY29udGVudC4KKyAgICAgICAg
bWVzc2FnZSA9IG4tPnVybCgpLnN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJ
WE1FOiBTdHJpcCB0aGUgY29udGVudCBpbnRvIG9uZSBsaW5lLgorICAgICAgICBtZXNzYWdlID0g
bWFrZVN0cmluZyhuLT5jb250ZW50cygpLnRpdGxlKCksICI6ICIsIG4tPmNvbnRlbnRzKCkuYm9k
eSgpKTsKKyAgICB9CisKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6c3RyaW5n
KHV1aWQudXRmOCgpLmRhdGEoKSksIHN0ZDo6c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBBU1NFUlQobm90aWZp
Y2F0aW9uKTsKKyAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOworICAg
IGlmIChtX25vdGlmaWNhdGlvbnMuY29udGFpbnMobikpIHsKKyAgICAgICAgbV9wbGF0Zm9ybVBy
ZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKG1fbm90aWZpY2F0aW9ucy5nZXQobikudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKG4pOworICAgIH0KK30K
Kwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25PYmplY3REZXN0
cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgQVNTRVJUKG5vdGlmaWNh
dGlvbik7CisgICAgY2FuY2VsKG5vdGlmaWNhdGlvbik7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIG1fcGVy
bWlzc2lvblJlcXVlc3RzLmFkZChjb250ZXh0LCBjYWxsYmFjayk7CisgICAgbV9wbGF0Zm9ybVBy
ZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oc3RkOjpzdHJpbmcoY29udGV4dC0+dXJsKCkuaG9z
dCgpLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
OjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0FsbG93ZWQp
Cit7CisgICAgQVNTRVJUKCFkb21haW4uZW1wdHkoKSk7CisgICAgU3RyaW5nIGRvbWFpblN0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOworICAgIFBlcm1pc3Npb25SZXF1
ZXN0TWFwOjppdGVyYXRvciBpdGVyID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKKyAg
ICBmb3IgKDsgaXRlciAhPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIGlmIChpdGVyLT5maXJzdC0+dXJsKCkuaG9zdCgpID09IGRvbWFpblN0cmluZykgewor
ICAgICAgICAgICAgaWYgKGlzQWxsb3dlZCkgeworICAgICAgICAgICAgICAgIG1fYWxsb3dlZERv
bWFpbnMuYWRkKGRvbWFpblN0cmluZyk7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kLT5o
YW5kbGVFdmVudCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9hbGxv
d2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKKworICAgICAgICAgICAgbV9wZXJtaXNz
aW9uUmVxdWVzdHMucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsUmVxdWVz
dHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAgIC8vIEJlY2F1
c2Ugd2UgYXJlIHVzaW5nIG1vZGFsIGRpYWxvZ3MgdG8gcmVxdWVzdCBwZXJtaXNzaW9uLCBpdCdz
IGltcG9zc2libGUgdG8gY2FuY2VsIHRoZW0uCisgICAgcmV0dXJuOworfQorCitOb3RpZmljYXRp
b25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQ
ZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gRklY
TUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1hdGlvbiBpbnRvIGZpbGUgcGVy
bWFuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5zLgorICAgIC8vIFRoZSBzdWdn
ZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3JtUHJlc2VudGVyLT5jaGVja1Bl
cm1pc3Npb24oKS4KKyAgICBpZiAobV9hbGxvd2VkRG9tYWlucy5jb250YWlucyhjb250ZXh0LT51
cmwoKS5ob3N0KCkpKQorICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJt
aXNzaW9uQWxsb3dlZDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNz
aW9uTm90QWxsb3dlZDsKKworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBwbGF0
Zm9ybSBzaWRlLgordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25D
bGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3sKKyAgICBBU1NFUlQoIWlkLmVtcHR5KCkp
OworICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSk7Cisg
ICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmJlZ2lu
KCk7CisgICAgZm9yICg7IGl0ZXIgIT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyArK2l0ZXIpIHsK
KyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdGVyLT5maXJzdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBpdGVyLT5maXJzdC0+ZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1
ZSkpOworICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdGVyKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgwODQwMTljMzNiZmE3ZGE5MjRjNGZkZWQ1NGZhNzA4MWQ5NGY2NjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
X2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisKKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKKworI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CisjaW5j
bHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyLmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJl
c2VudGVyQmxhY2tCZXJyeS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVyLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNh
dGlvbkFja0xpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBpbnN0YW5jZSgpOworICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwo
KTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gYmUgc2hvd24uCisgICAg
dmlydHVhbCBib29sIHNob3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1
ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaG93biBiZSBj
YW5jZWxlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiop
OworCisgICAgLy8gSW5mb3JtcyB0aGUgcHJlc2VudGVyIHRoYXQgYSBXZWJDb3JlOjpOb3RpZmlj
YXRpb24gb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZAorICAgIC8vIChzdWNoIGFzIGJ5IGEgcGFn
ZSB0cmFuc2l0aW9uKS4gVGhlIHByZXNlbnRlciBtYXkgY29udGludWUgc2hvd2luZworICAgIC8v
IHRoZSBub3RpZmljYXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRlbXB0IHRvIGNhbGwgdGhlIGV2ZW50
IGhhbmRsZXJzLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQo
V2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB1c2VyIHBlcm1pc3Np
b24gdG8gc2hvdyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3VsYXIKKyAgICAv
LyBzY3JpcHQgY29udGV4dC4gVGhlIGNhbGxiYWNrIHBhcmFtZXRlciBzaG91bGQgYmUgcnVuIHdo
ZW4gdGhlIHVzZXIgaGFzCisgICAgLy8gbWFkZSBhIGRlY2lzaW9uLgorICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+KTsKKworICAgIC8vIENhbmNlbCBhbGwgb3V0
c3RhbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworCisgICAgLy8gQ2hlY2tzIHRoZSBjdXJyZW50IGxldmVsIG9mIHBl
cm1pc3Npb24uCisgICAgdmlydHVhbCBQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lvbihXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBJbnRlcmZhY2VzIGluaGVyaXRl
ZCBmcm9tIE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmlj
YXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7CisgICAgdmlydHVhbCB2b2lkIG9u
UGVybWlzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZG9tYWluLCBib29sIGlzQWxsb3dlZCk7CisK
K3ByaXZhdGU6CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKiBzX2luc3RhbmNlOworICAgIE93
blB0cjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJy
eT4gbV9wbGF0Zm9ybVByZXNlbnRlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8V2Vi
Q29yZTo6Tm90aWZpY2F0aW9uPiwgU3RyaW5nPiBOb3RpZmljYXRpb25NYXA7CisgICAgTm90aWZp
Y2F0aW9uTWFwIG1fbm90aWZpY2F0aW9uczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4sIFJlZlB0cjxXZWJDb3JlOjpWb2lkQ2Fs
bGJhY2s+ID4gUGVybWlzc2lvblJlcXVlc3RNYXA7CisgICAgUGVybWlzc2lvblJlcXVlc3RNYXAg
bV9wZXJtaXNzaW9uUmVxdWVzdHM7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hbGxvd2VkRG9t
YWluczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5P
VElGSUNBVElPTlMpCisKKyNlbmRpZiAvLyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gK
</data>
<flag name="review"
          id="118050"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118752</attachid>
            <date>2011-12-12 02:09:27 -0800</date>
            <delta_ts>2011-12-12 19:44:25 -0800</delta_ts>
            <desc>Patch for notification support. V6.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12024</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSAwY2FhODdhZGUxOTYyNmVmZGNmNjI5YWI3YjE4NmQ3MzM4YzNlMDczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IE1vbiwgMTIgRGVjIDIwMTEgMTY6NTM6NTMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTQKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlci5jcHA6IEFkZGVkLgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjppbnN0YW5jZSk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGwpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OnNob3cpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
OjpjYW5jZWwpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRp
b25PYmplY3REZXN0cm95ZWQpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpy
ZXF1ZXN0UGVybWlzc2lvbik6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9u
UGVybWlzc2lvbik6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbFJl
cXVlc3RzRm9yUGVybWlzc2lvbik6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
OmNoZWNrUGVybWlzc2lvbik6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5v
dGlmaWNhdGlvbkNsaWNrZWQpOgoqIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0
aW9uUHJlc2VudGVyLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysKIC4uLi9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXIuY3BwICAgICAgIHwgIDE1NiArKysrKysrKysrKysrKysrKysrKwog
Li4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlci5oICAgICAgICAgfCAgIDg1
ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25zKCspLCAwIGRlbGV0
aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBiYWVlY2RlLi4xMjliNzNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI0IEBACisyMDExLTEyLTEyICBSb2JpbiBRaXUgIDxyb2Jpbi5xaXVAdG9yY2htb2JpbGUuY29t
LmNuPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBBZGQgbm90aWZpY2F0aW9uIHN1cHBvcnQgZm9y
IHRoZSBCbGFja0JlcnJ5IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczMTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlcklt
cGw6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3cpOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQp
OgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpyZXF1ZXN0UGVy
bWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9u
UGVybWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OmNoZWNrUGVybWlzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbkNsaWNrZWQpOgorICAgICAgICAq
IGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyLmg6IEFkZGVk
LgorCiAyMDExLTEyLTA5ICBKYWNreSBKaWFuZyAgPHpoYWppYW5nQHJpbS5jb20+CiAKICAgICAg
ICAgVXBzdHJlYW0gQmxhY2tCZXJyeSBBUEkgYmFja2luZyBzdG9yZSBmaWxlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90
aWZpY2F0aW9uUHJlc2VudGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wOWY2N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgorCisjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCisKKyNpbmNsdWRlIDxFdmVudC5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlv
bi5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnkuaD4KKyNpbmNs
dWRlIDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg+CisjaW5jbHVkZSA8VVVJRC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKworTm90aWZpY2F0
aW9uUHJlc2VudGVyKiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppbnN0YW5jZSgpCit7Cisg
ICAgc3RhdGljIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwqIHNfaW5zdGFuY2UgPSAwOworICAg
IGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsKCk7CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisKK05vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKQoreworICAgIG1fcGxh
dGZvcm1QcmVzZW50ZXIgPSBhZG9wdFB0cihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0
aW9uUHJlc2VudGVyQmxhY2tCZXJyeTo6Y3JlYXRlKHRoaXMpKTsKK30KKworTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKQoreworfQorCitib29s
IE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3coTm90aWZpY2F0aW9uKiBub3RpZmljYXRp
b24pCit7CisgICAgQVNTRVJUKG5vdGlmaWNhdGlvbik7CisgICAgQVNTRVJUKG5vdGlmaWNhdGlv
bi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoY2hlY2tQZXJtaXNzaW9uKG5v
dGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSAhPSBOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8Tm90aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOworICAgIGlmIChtX25vdGlmaWNh
dGlvbnMuY29udGFpbnMobikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB1
dWlkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fbm90aWZpY2F0aW9ucy5h
ZGQobiwgdXVpZCk7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKG4tPmlzSFRNTCgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBMb2FkIGFuZCBkaXNwbGF5IEhUTUwgY29udGVudC4KKyAgICAg
ICAgbWVzc2FnZSA9IG4tPnVybCgpLnN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEZJWE1FOiBTdHJpcCB0aGUgY29udGVudCBpbnRvIG9uZSBsaW5lLgorICAgICAgICBtZXNzYWdl
ID0gbi0+Y29udGVudHMoKS50aXRsZSgpICsgIjogIiArIG4tPmNvbnRlbnRzKCkuYm9keSgpOwor
ICAgIH0KKworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPnNob3coc3RkOjpzdHJpbmcodXVpZC51
dGY4KCkuZGF0YSgpKSwgc3RkOjpzdHJpbmcobWVzc2FnZS51dGY4KCkuZGF0YSgpKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2Vs
KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIEFTU0VSVChub3RpZmljYXRpb24p
OworICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG4gPSBub3RpZmljYXRpb247CisKKyAgICBpZiAo
IW1fbm90aWZpY2F0aW9ucy5jb250YWlucyhuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
bGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKG1fbm90aWZpY2F0aW9ucy5nZXQo
bikudXRmOCgpLmRhdGEoKSkpOworICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobik7Cit9CisK
K3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJv
eWVkKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIEFTU0VSVChub3RpZmljYXRp
b24pOworICAgIGNhbmNlbChub3RpZmljYXRpb24pOworfQorCit2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMuYWRkKGNvbnRleHQsIGNhbGxiYWNr
KTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5yZXF1ZXN0UGVybWlzc2lvbihzdGQ6OnN0cmlu
Zyhjb250ZXh0LT51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIE5vdGlm
aWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZG9t
YWluLCBib29sIGlzQWxsb3dlZCkKK3sKKyAgICBBU1NFUlQoIWRvbWFpbi5lbXB0eSgpKTsKKyAg
ICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7
CisgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVx
dWVzdHMuYmVnaW4oKTsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9wZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoaXQtPmZpcnN0LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpc0FsbG93ZWQpIHsKKyAgICAgICAg
ICAgIG1fYWxsb3dlZERvbWFpbnMuYWRkKGRvbWFpblN0cmluZyk7CisgICAgICAgICAgICBpdC0+
c2Vjb25kLT5oYW5kbGVFdmVudCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYWxs
b3dlZERvbWFpbnMucmVtb3ZlKGRvbWFpblN0cmluZyk7CisKKyAgICAgICAgbV9wZXJtaXNzaW9u
UmVxdWVzdHMucmVtb3ZlKGl0KTsKKyAgICB9Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKQoreworICAgIC8vIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIG1vZGFsIGRpYWxvZ3MgdG8gcmVx
dWVzdCBwZXJtaXNzaW9uLCBpdCdzIGltcG9zc2libGUgdG8gY2FuY2VsIHRoZW0uCisgICAgcmV0
dXJuOworfQorCitOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIC8vIEZJWE1FOiBTaG91bGQgc3Rv
cmUgdGhlIHBlcm1pc3Npb24gaW5mb3JtYXRpb24gaW50byBmaWxlIHBlcm1hbmVudGx5IGluc3Rl
YWQgb2YgaW4gbV9hbGxvd2VkRG9tYWlucy4KKyAgICAvLyBUaGUgc3VnZ2VzdGVkIHBsYWNlIHRv
IGRvIHRoaXMgaXMgaW4gbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2hlY2tQZXJtaXNzaW9uKCkuCisg
ICAgaWYgKG1fYWxsb3dlZERvbWFpbnMuY29udGFpbnMoY29udGV4dC0+dXJsKCkuaG9zdCgpKSkK
KyAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkFsbG93ZWQ7
CisgICAgcmV0dXJuIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbk5vdEFsbG93ZWQ7
CisKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gcGxhdGZvcm0gc2lkZS4KK3Zv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBz
dGQ6OnN0cmluZyYgaWQpCit7CisgICAgQVNTRVJUKCFpZC5lbXB0eSgpKTsKKyAgICBTdHJpbmcg
aWRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpOworICAgIE5vdGlmaWNhdGlv
bk1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKKyAgICBOb3RpZmlj
YXRpb25NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkU3RyaW5n
ICYmIGl0LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBp
dC0+Zmlyc3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tF
dmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUo
aXQpOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlci5oIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTVkZWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0
aW9uUHJlc2VudGVyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIE5vdGlmaWNhdGlvblByZXNlbnRlcl9oCisjZGVmaW5l
IE5vdGlmaWNhdGlvblByZXNlbnRlcl9oCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKwor
I2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0
aW9uUHJlc2VudGVyLmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJy
eS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvbkFja0xpc3RlbmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBpbnN0YW5jZSgp
OworICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKTsKKworICAgIC8vIFJl
cXVlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gYmUgc2hvd24uCisgICAgdmlydHVhbCBib29sIHNo
b3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB0aGF0IGEgbm90
aWZpY2F0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaG93biBiZSBjYW5jZWxlZC4KKyAgICB2
aXJ0dWFsIHZvaWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiopOworCisgICAgLy8gSW5m
b3JtcyB0aGUgcHJlc2VudGVyIHRoYXQgYSBXZWJDb3JlOjpOb3RpZmljYXRpb24gb2JqZWN0IGhh
cyBiZWVuIGRlc3Ryb3llZAorICAgIC8vIChzdWNoIGFzIGJ5IGEgcGFnZSB0cmFuc2l0aW9uKS4g
VGhlIHByZXNlbnRlciBtYXkgY29udGludWUgc2hvd2luZworICAgIC8vIHRoZSBub3RpZmljYXRp
b24sIGJ1dCBtdXN0IG5vdCBhdHRlbXB0IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXJzLgorICAg
IHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90aWZp
Y2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB1c2VyIHBlcm1pc3Npb24gdG8gc2hvdyBkZXNr
dG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3VsYXIKKyAgICAvLyBzY3JpcHQgY29udGV4
dC4gVGhlIGNhbGxiYWNrIHBhcmFtZXRlciBzaG91bGQgYmUgcnVuIHdoZW4gdGhlIHVzZXIgaGFz
CisgICAgLy8gbWFkZSBhIGRlY2lzaW9uLgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlz
c2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpWb2lkQ2FsbGJhY2s+KTsKKworICAgIC8vIENhbmNlbCBhbGwgb3V0c3RhbmRpbmcgcmVxdWVz
dHMgZm9yIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OworCisgICAgLy8gQ2hlY2tzIHRoZSBjdXJyZW50IGxldmVsIG9mIHBlcm1pc3Npb24uCisgICAg
dmlydHVhbCBQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CisKKyAgICAvLyBJbnRlcmZhY2VzIGluaGVyaXRlZCBmcm9tIE5vdGlmaWNh
dGlvbkFja0xpc3RlbmVyLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25DbGlja2VkKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpZCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGVybWlzc2lvbihjb25z
dCBzdGQ6OnN0cmluZyYgZG9tYWluLCBib29sIGlzQWxsb3dlZCk7CisKK3ByaXZhdGU6CisgICAg
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworCitwcml2YXRlOgorICAgIE93blB0cjxCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeT4gbV9wbGF0
Zm9ybVByZXNlbnRlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8V2ViQ29yZTo6Tm90
aWZpY2F0aW9uPiwgU3RyaW5nPiBOb3RpZmljYXRpb25NYXA7CisgICAgTm90aWZpY2F0aW9uTWFw
IG1fbm90aWZpY2F0aW9uczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8V2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4sIFJlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+ID4g
UGVybWlzc2lvblJlcXVlc3RNYXA7CisgICAgUGVybWlzc2lvblJlcXVlc3RNYXAgbV9wZXJtaXNz
aW9uUmVxdWVzdHM7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hbGxvd2VkRG9tYWluczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElP
TlMpCisKKyNlbmRpZiAvLyBOb3RpZmljYXRpb25QcmVzZW50ZXJfaAotLSAKMS43LjYuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118939</attachid>
            <date>2011-12-12 19:44:25 -0800</date>
            <delta_ts>2011-12-12 20:05:37 -0800</delta_ts>
            <desc>Patch for notification support. V7.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12088</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSAzMDI5OGM2OTkzOTI2M2VhZjU0YjZiMTc4ZGNlNTRiM2ViZWQxNDUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMTMgRGVjIDIwMTEgMTE6NDA6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTQKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKFdlYktpdDo6Tm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6aW5zdGFuY2UpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwpOgooV2ViS2l0OjpOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsOjpzaG93KToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6Y2FuY2VsKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZp
Y2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6cmVxdWVzdFBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
OjpvblBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5j
ZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpjaGVja1Blcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
Ojpub3RpZmljYXRpb25DbGlja2VkKToKKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCi0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICsrKwogLi4uL1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwICAgfCAgMTU2ICsrKysrKysrKysrKysr
KysrKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oICAg
ICB8ICAgODUgKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKyks
IDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmFlZWNkZS4uYzdmOTJjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0xMi0xMiAgUm9iaW4gUWl1ICA8cm9iaW4ucWl1
QHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNh
dGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJyeSBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
c2hvdyk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNl
bCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNh
dGlvbk9iamVjdERlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9u
Q2xpY2tlZCk6CisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgorCiAyMDExLTEyLTA5ICBKYWNreSBKaWFuZyAgPHpo
YWppYW5nQHJpbS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gQmxhY2tCZXJyeSBBUEkgYmFja2lu
ZyBzdG9yZSBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTgxYmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHAKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisj
aW5jbHVkZSA8RXZlbnQuaD4KKyNpbmNsdWRlIDxOb3RpZmljYXRpb24uaD4KKyNpbmNsdWRlIDxO
b3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5Lmg+CisjaW5jbHVkZSA8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oPgorI2luY2x1ZGUgPFVVSUQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisKK05vdGlmaWNhdGlvblByZXNlbnRlciogTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsKiBzX2luc3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5zdGFuY2Up
CisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOwor
ICAgIHJldHVybiBzX2luc3RhbmNlOworfQorCitOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCkKK3sKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyID0g
YWRvcHRQdHIoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNr
QmVycnk6OmNyZWF0ZSh0aGlzKSk7Cit9CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCkKK3sKK30KKworYm9vbCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIEFTU0VS
VChub3RpZmljYXRpb24pOworICAgIEFTU0VSVChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CisgICAgaWYgKGNoZWNrUGVybWlzc2lvbihub3RpZmljYXRpb24tPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9u
QWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPE5vdGlmaWNhdGlv
bj4gbiA9IG5vdGlmaWNhdGlvbjsKKyAgICBpZiAobV9ub3RpZmljYXRpb25zLmNvbnRhaW5zKG4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgdXVpZCA9IGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKTsKKyAgICBtX25vdGlmaWNhdGlvbnMuYWRkKG4sIHV1aWQpOworICAg
IFN0cmluZyBtZXNzYWdlOworICAgIGlmIChuLT5pc0hUTUwoKSkgeworICAgICAgICAvLyBGSVhN
RTogTG9hZCBhbmQgZGlzcGxheSBIVE1MIGNvbnRlbnQuCisgICAgICAgIG1lc3NhZ2UgPSBuLT51
cmwoKS5zdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU3RyaXAgdGhl
IGNvbnRlbnQgaW50byBvbmUgbGluZS4KKyAgICAgICAgbWVzc2FnZSA9IG4tPmNvbnRlbnRzKCku
dGl0bGUoKSArICI6ICIgKyBuLT5jb250ZW50cygpLmJvZHkoKTsKKyAgICB9CisKKyAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6c3RyaW5nKHV1aWQudXRmOCgpLmRhdGEoKSksIHN0
ZDo6c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKK3sKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBSZWZQdHI8Tm90
aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOworCisgICAgaWYgKCFtX25vdGlmaWNhdGlvbnMu
Y29udGFpbnMobikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXIt
PmNhbmNlbChzdGQ6OnN0cmluZyhtX25vdGlmaWNhdGlvbnMuZ2V0KG4pLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKG4pOworfQorCit2b2lkIE5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24q
IG5vdGlmaWNhdGlvbikKK3sKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBjYW5jZWwo
bm90aWZpY2F0aW9uKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpyZXF1
ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1f
cGVybWlzc2lvblJlcXVlc3RzLmFkZChjb250ZXh0LCBjYWxsYmFjayk7CisgICAgbV9wbGF0Zm9y
bVByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oc3RkOjpzdHJpbmcoY29udGV4dC0+dXJsKCku
aG9zdCgpLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0FsbG93
ZWQpCit7CisgICAgQVNTRVJUKCFkb21haW4uZW1wdHkoKSk7CisgICAgU3RyaW5nIGRvbWFpblN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOworICAgIFBlcm1pc3Npb25S
ZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7Cisg
ICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVybWlzc2lvblJlcXVl
c3RzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0
LT5maXJzdC0+dXJsKCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoaXNBbGxvd2VkKSB7CisgICAgICAgICAgICBtX2FsbG93ZWREb21h
aW5zLmFkZChkb21haW5TdHJpbmcpOworICAgICAgICAgICAgaXQtPnNlY29uZC0+aGFuZGxlRXZl
bnQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLnJlbW92
ZShkb21haW5TdHJpbmcpOworCisgICAgICAgIG1fcGVybWlzc2lvblJlcXVlc3RzLnJlbW92ZShp
dCk7CisgICAgfQorfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbFJl
cXVlc3RzRm9yUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICAvLyBC
ZWNhdXNlIHdlIGFyZSB1c2luZyBtb2RhbCBkaWFsb2dzIHRvIHJlcXVlc3QgcGVybWlzc2lvbiwg
aXQncyBpbXBvc3NpYmxlIHRvIGNhbmNlbCB0aGVtLgorICAgIHJldHVybjsKK30KKworTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNo
ZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEFT
U0VSVChjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHN0b3JlIHRoZSBwZXJtaXNzaW9u
IGluZm9ybWF0aW9uIGludG8gZmlsZSBwZXJtYW5lbnRseSBpbnN0ZWFkIG9mIGluIG1fYWxsb3dl
ZERvbWFpbnMuCisgICAgLy8gVGhlIHN1Z2dlc3RlZCBwbGFjZSB0byBkbyB0aGlzIGlzIGluIG1f
cGxhdGZvcm1QcmVzZW50ZXItPmNoZWNrUGVybWlzc2lvbigpLgorICAgIGlmIChtX2FsbG93ZWRE
b21haW5zLmNvbnRhaW5zKGNvbnRleHQtPnVybCgpLmhvc3QoKSkpCisgICAgICAgIHJldHVybiBO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkOworICAgIHJldHVybiBOb3Rp
ZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOworCit9CisKKy8vIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGluIHBsYXRmb3JtIHNpZGUuCit2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKQor
eworICAgIEFTU0VSVCghaWQuZW1wdHkoKSk7CisgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5n
Ojpmcm9tVVRGOChpZC5jX3N0cigpKTsKKyAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0
ID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRv
ciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVl
KSk7CisgICAgICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTQ3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gKKyNkZWZpbmUg
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
KworI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CisjaW5jbHVkZSA8Tm90aWZp
Y2F0aW9uUHJlc2VudGVyLmg+CisjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tC
ZXJyeS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5v
dGlmaWNhdGlvblByZXNlbnRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyLCBwdWJsaWMgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvbkFja0xpc3Rl
bmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBpbnN0YW5j
ZSgpOworICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKTsKKworICAgIC8v
IFJlcXVlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gYmUgc2hvd24uCisgICAgdmlydHVhbCBib29s
IHNob3coV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB0aGF0IGEg
bm90aWZpY2F0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaG93biBiZSBjYW5jZWxlZC4KKyAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiopOworCisgICAgLy8g
SW5mb3JtcyB0aGUgcHJlc2VudGVyIHRoYXQgYSBXZWJDb3JlOjpOb3RpZmljYXRpb24gb2JqZWN0
IGhhcyBiZWVuIGRlc3Ryb3llZAorICAgIC8vIChzdWNoIGFzIGJ5IGEgcGFnZSB0cmFuc2l0aW9u
KS4gVGhlIHByZXNlbnRlciBtYXkgY29udGludWUgc2hvd2luZworICAgIC8vIHRoZSBub3RpZmlj
YXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRlbXB0IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXJzLgor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uKik7CisKKyAgICAvLyBSZXF1ZXN0cyB1c2VyIHBlcm1pc3Npb24gdG8gc2hvdyBk
ZXNrdG9wIG5vdGlmaWNhdGlvbnMgZnJvbSBhIHBhcnRpY3VsYXIKKyAgICAvLyBzY3JpcHQgY29u
dGV4dC4gVGhlIGNhbGxiYWNrIHBhcmFtZXRlciBzaG91bGQgYmUgcnVuIHdoZW4gdGhlIHVzZXIg
aGFzCisgICAgLy8gbWFkZSBhIGRlY2lzaW9uLgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpWb2lkQ2FsbGJhY2s+KTsKKworICAgIC8vIENhbmNlbCBhbGwgb3V0c3RhbmRpbmcgcmVx
dWVzdHMgZm9yIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOworCisgICAgLy8gQ2hlY2tzIHRoZSBjdXJyZW50IGxldmVsIG9mIHBlcm1pc3Npb24uCisg
ICAgdmlydHVhbCBQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBJbnRlcmZhY2VzIGluaGVyaXRlZCBmcm9tIE5vdGlm
aWNhdGlvbkFja0xpc3RlbmVyLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25DbGlja2Vk
KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGVybWlzc2lvbihj
b25zdCBzdGQ6OnN0cmluZyYgZG9tYWluLCBib29sIGlzQWxsb3dlZCk7CisKK3ByaXZhdGU6Cisg
ICAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworCitwcml2YXRlOgorICAgIE93blB0cjxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeT4gbV9w
bGF0Zm9ybVByZXNlbnRlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8V2ViQ29yZTo6
Tm90aWZpY2F0aW9uPiwgU3RyaW5nPiBOb3RpZmljYXRpb25NYXA7CisgICAgTm90aWZpY2F0aW9u
TWFwIG1fbm90aWZpY2F0aW9uczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8V2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4sIFJlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+
ID4gUGVybWlzc2lvblJlcXVlc3RNYXA7CisgICAgUGVybWlzc2lvblJlcXVlc3RNYXAgbV9wZXJt
aXNzaW9uUmVxdWVzdHM7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hbGxvd2VkRG9tYWluczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNB
VElPTlMpCisKKyNlbmRpZiAvLyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gKLS0gCjEuNy42
LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118944</attachid>
            <date>2011-12-12 20:05:37 -0800</date>
            <delta_ts>2011-12-13 01:32:03 -0800</delta_ts>
            <desc>Patch for notification support. V8.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12137</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSA2ZWViN2Y5Y2U5YzQ5NWIwNjIxZGMxMjg3ZDJhZWE3OTgyZTQ5NTFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMTMgRGVjIDIwMTEgMTE6NDA6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTQKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOiBBZGRlZC4KKFdlYktpdDo6Tm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6aW5zdGFuY2UpOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6fk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwpOgooV2ViS2l0OjpOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsOjpzaG93KToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6Y2FuY2VsKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZp
Y2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6cmVxdWVzdFBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
OjpvblBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5j
ZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpjaGVja1Blcm1pc3Npb24pOgooV2ViS2l0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
Ojpub3RpZmljYXRpb25DbGlja2VkKToKKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaDogQWRkZWQuCi0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICsrKwogLi4uL1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwICAgfCAgMTU3ICsrKysrKysrKysrKysr
KysrKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oICAg
ICB8ICAgODUgKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMoKyks
IDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmFlZWNkZS4uYzdmOTJjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0xMi0xMiAgUm9iaW4gUWl1ICA8cm9iaW4ucWl1
QHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNh
dGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJyeSBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
c2hvdyk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNl
bCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNh
dGlvbk9iamVjdERlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9u
Q2xpY2tlZCk6CisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgorCiAyMDExLTEyLTA5ICBKYWNreSBKaWFuZyAgPHpo
YWppYW5nQHJpbS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gQmxhY2tCZXJyeSBBUEkgYmFja2lu
ZyBzdG9yZSBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDJiZGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHAKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisj
aW5jbHVkZSA8RXZlbnQuaD4KKyNpbmNsdWRlIDxOb3RpZmljYXRpb24uaD4KKyNpbmNsdWRlIDxO
b3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5Lmg+CisjaW5jbHVkZSA8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oPgorI2luY2x1ZGUgPFVVSUQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisKK05vdGlmaWNhdGlvblByZXNlbnRlciogTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsKiBzX2luc3RhbmNlID0gMDsKKyAgICBpZiAoIXNfaW5zdGFuY2Up
CisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOwor
ICAgIHJldHVybiBzX2luc3RhbmNlOworfQorCitOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCkKK3sKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyID0g
YWRvcHRQdHIoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNr
QmVycnk6OmNyZWF0ZSh0aGlzKSk7Cit9CisKK05vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCkKK3sKK30KKworYm9vbCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIEFTU0VS
VChub3RpZmljYXRpb24pOworICAgIEFTU0VSVChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CisgICAgaWYgKGNoZWNrUGVybWlzc2lvbihub3RpZmljYXRpb24tPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9u
QWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPE5vdGlmaWNhdGlv
bj4gbiA9IG5vdGlmaWNhdGlvbjsKKyAgICBpZiAobV9ub3RpZmljYXRpb25zLmNvbnRhaW5zKG4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgdXVpZCA9IGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKTsKKyAgICBtX25vdGlmaWNhdGlvbnMuYWRkKG4sIHV1aWQpOworICAg
IFN0cmluZyBtZXNzYWdlOworICAgIGlmIChuLT5pc0hUTUwoKSkgeworICAgICAgICAvLyBGSVhN
RTogTG9hZCBhbmQgZGlzcGxheSBIVE1MIGNvbnRlbnQuCisgICAgICAgIG1lc3NhZ2UgPSBuLT51
cmwoKS5zdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogU3RyaXAgdGhl
IGNvbnRlbnQgaW50byBvbmUgbGluZS4KKyAgICAgICAgbWVzc2FnZSA9IG4tPmNvbnRlbnRzKCku
dGl0bGUoKSArICI6ICIgKyBuLT5jb250ZW50cygpLmJvZHkoKTsKKyAgICB9CisKKyAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6c3RyaW5nKHV1aWQudXRmOCgpLmRhdGEoKSksIHN0
ZDo6c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKK3sKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBSZWZQdHI8Tm90
aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOworCisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVy
YXRvciBpdCA9IG1fbm90aWZpY2F0aW9ucy5maW5kKG4pOworICAgIGlmIChpdCA9PSBtX25vdGlm
aWNhdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGxhdGZvcm1QcmVzZW50
ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBt
X25vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpb24pCit7CisgICAgQVNTRVJUKG5vdGlmaWNhdGlvbik7CisgICAgY2FuY2VsKG5vdGlmaWNh
dGlvbik7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxWb2lkQ2Fs
bGJhY2s+IGNhbGxiYWNrKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBtX3Blcm1pc3Np
b25SZXF1ZXN0cy5hZGQoY29udGV4dCwgY2FsbGJhY2spOworICAgIG1fcGxhdGZvcm1QcmVzZW50
ZXItPnJlcXVlc3RQZXJtaXNzaW9uKHN0ZDo6c3RyaW5nKGNvbnRleHQtPnVybCgpLmhvc3QoKS51
dGY4KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25Q
ZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKQorewor
ICAgIEFTU0VSVCghZG9tYWluLmVtcHR5KCkpOworICAgIFN0cmluZyBkb21haW5TdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGRvbWFpbi5jX3N0cigpKTsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5iZWdpbigpOworICAgIFBlcm1p
c3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQo
KTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+Zmlyc3Qt
PnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKGlzQWxsb3dlZCkgeworICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQo
ZG9tYWluU3RyaW5nKTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWlu
U3RyaW5nKTsKKworICAgICAgICBtX3Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUoaXQpOworICAg
IH0KK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit7CisgICAgLy8gQmVjYXVzZSB3
ZSBhcmUgdXNpbmcgbW9kYWwgZGlhbG9ncyB0byByZXF1ZXN0IHBlcm1pc3Npb24sIGl0J3MgaW1w
b3NzaWJsZSB0byBjYW5jZWwgdGhlbS4KKyAgICByZXR1cm47Cit9CisKK05vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgLy8gRklYTUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1h
dGlvbiBpbnRvIGZpbGUgcGVybWFuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5z
LgorICAgIC8vIFRoZSBzdWdnZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3Jt
UHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oKS4KKyAgICBpZiAobV9hbGxvd2VkRG9tYWlucy5j
b250YWlucyhjb250ZXh0LT51cmwoKS5ob3N0KCkpKQorICAgICAgICByZXR1cm4gTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpQZXJtaXNzaW9uTm90QWxsb3dlZDsKKworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBpbiBwbGF0Zm9ybSBzaWRlLgordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3sKKyAgICBB
U1NFUlQoIWlkLmVtcHR5KCkpOworICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVU
RjgoaWQuY19zdHIoKSk7CisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fbm90
aWZpY2F0aW9ucy5iZWdpbigpOworICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0g
bV9ub3RpZmljYXRpb25zLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaWRTdHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgICAgIGl0LT5maXJzdC0+ZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAg
ICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElP
TlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMDk0NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpZm5kZWYgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisjZGVmaW5lIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGxfaAorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisKKyNpbmNs
dWRlIDxOb3RpZmljYXRpb25BY2tMaXN0ZW5lci5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlvblBy
ZXNlbnRlci5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnkuaD4K
KyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOb3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlciwg
cHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25BY2tMaXN0ZW5lciB7Citw
dWJsaWM6CisgICAgc3RhdGljIE5vdGlmaWNhdGlvblByZXNlbnRlciogaW5zdGFuY2UoKTsKKyAg
ICB2aXJ0dWFsIH5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CisKKyAgICAvLyBSZXF1ZXN0
cyB0aGF0IGEgbm90aWZpY2F0aW9uIGJlIHNob3duLgorICAgIHZpcnR1YWwgYm9vbCBzaG93KFdl
YkNvcmU6Ok5vdGlmaWNhdGlvbiopOworCisgICAgLy8gUmVxdWVzdHMgdGhhdCBhIG5vdGlmaWNh
dGlvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2hvd24gYmUgY2FuY2VsZWQuCisgICAgdmlydHVh
bCB2b2lkIGNhbmNlbChXZWJDb3JlOjpOb3RpZmljYXRpb24qKTsKKworICAgIC8vIEluZm9ybXMg
dGhlIHByZXNlbnRlciB0aGF0IGEgV2ViQ29yZTo6Tm90aWZpY2F0aW9uIG9iamVjdCBoYXMgYmVl
biBkZXN0cm95ZWQKKyAgICAvLyAoc3VjaCBhcyBieSBhIHBhZ2UgdHJhbnNpdGlvbikuIFRoZSBw
cmVzZW50ZXIgbWF5IGNvbnRpbnVlIHNob3dpbmcKKyAgICAvLyB0aGUgbm90aWZpY2F0aW9uLCBi
dXQgbXVzdCBub3QgYXR0ZW1wdCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVycy4KKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKFdlYkNvcmU6Ok5vdGlmaWNhdGlv
biopOworCisgICAgLy8gUmVxdWVzdHMgdXNlciBwZXJtaXNzaW9uIHRvIHNob3cgZGVza3RvcCBu
b3RpZmljYXRpb25zIGZyb20gYSBwYXJ0aWN1bGFyCisgICAgLy8gc2NyaXB0IGNvbnRleHQuIFRo
ZSBjYWxsYmFjayBwYXJhbWV0ZXIgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSB1c2VyIGhhcworICAg
IC8vIG1hZGUgYSBkZWNpc2lvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24o
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9p
ZENhbGxiYWNrPik7CisKKyAgICAvLyBDYW5jZWwgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZv
ciB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUmVx
dWVzdHNGb3JQZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwor
ICAgIC8vIENoZWNrcyB0aGUgY3VycmVudCBsZXZlbCBvZiBwZXJtaXNzaW9uLgorICAgIHZpcnR1
YWwgUGVybWlzc2lvbiBjaGVja1Blcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOworCisgICAgLy8gSW50ZXJmYWNlcyBpbmhlcml0ZWQgZnJvbSBOb3RpZmljYXRpb25B
Y2tMaXN0ZW5lci4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBz
dGQ6OnN0cmluZyYgaWQpOworICAgIHZpcnR1YWwgdm9pZCBvblBlcm1pc3Npb24oY29uc3Qgc3Rk
OjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0FsbG93ZWQpOworCitwcml2YXRlOgorICAgIE5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwoKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8QmxhY2tCZXJy
eTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnk+IG1fcGxhdGZvcm1Q
cmVzZW50ZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFdlYkNvcmU6Ok5vdGlmaWNh
dGlvbj4sIFN0cmluZz4gTm90aWZpY2F0aW9uTWFwOworICAgIE5vdGlmaWNhdGlvbk1hcCBtX25v
dGlmaWNhdGlvbnM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ+LCBSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiA+IFBlcm1p
c3Npb25SZXF1ZXN0TWFwOworICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwIG1fcGVybWlzc2lvblJl
cXVlc3RzOworCisgICAgSGFzaFNldDxTdHJpbmc+IG1fYWxsb3dlZERvbWFpbnM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKQor
CisjZW5kaWYgLy8gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCi0tIAoxLjcuNi4xCgo=
</data>
<flag name="review"
          id="118817"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118975</attachid>
            <date>2011-12-13 01:32:03 -0800</date>
            <delta_ts>2011-12-14 01:39:45 -0800</delta_ts>
            <desc>Patch for notification support. V9.</desc>
            <filename>0001-BlackBerry-Add-notification-support-for-the-BlackBer.patch</filename>
            <type>text/plain</type>
            <size>12760</size>
            <attacher name="Robin Qiu">robin.qiu</attacher>
            
              <data encoding="base64">RnJvbSAxYjljNGNjODM1N2Q4ZTc0Yjc0MGFiOWI2YjgwYWE2ODBjNTNiYTIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBRaXUgPHJvYmluLnFpdUB0b3JjaG1vYmlsZS5jb20u
Y24+CkRhdGU6IFR1ZSwgMTMgRGVjIDIwMTEgMTE6NDA6NDMgKzA4MDAKU3ViamVjdDogW1BBVENI
XSBbQmxhY2tCZXJyeV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJy
eQogcG9ydCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxOTQKClJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKQ29udHJpYnV0ZWQgYnkgVG9yY2ggdGVhbSwgdGhl
IG1haW4gY29udHJpYnV0b3IgaXMgUm9iaW4gUWl1Cjxyb2Jpbi5xaXVAdG9yY2htb2JpbGUuY29t
LmNuPi4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cy4KCiogYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCihXZWJLaXQ6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKToKKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CihXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKFdl
YktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CihXZWJLaXQ6Ok5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CihXZWJLaXQ6Ok5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToKKFdlYktpdDo6Tm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CiogYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgpUaGVyZSBpcyBhbHJl
YWR5IGEgaGVhZGVyIGZpbGU6IFNvdXJjZS9XZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uUHJlc2VudGVyLmguClRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIGl0LCBJIG5hbWUg
bXkgaGVhZGVyIGZpbGUgdG8gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC4KLS0tCiBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKysrKwog
Li4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwICAgfCAgMTU0
ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5oICAgICB8ICAgODMgKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjY1
IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaAoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmFlZWNk
ZS4uZWEzZjRlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0xMi0xMiAgUm9iaW4g
UWl1ICA8cm9iaW4ucWl1QHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJy
eV0gQWRkIG5vdGlmaWNhdGlvbiBzdXBwb3J0IGZvciB0aGUgQmxhY2tCZXJyeSBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnRyaWJ1dGVkIGJ5
IFRvcmNoIHRlYW0sIHRoZSBtYWluIGNvbnRyaWJ1dG9yIGlzIFJvYmluIFFpdQorICAgICAgICA8
cm9iaW4ucWl1QHRvcmNobW9iaWxlLmNvbS5jbj4uCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVh
bSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6On5Ob3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
c2hvdyk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNl
bCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNh
dGlvbk9iamVjdERlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6Tm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9u
Q2xpY2tlZCk6CisgICAgICAgICogYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICBUaGVyZSBpcyBhbHJlYWR5IGEgaGVh
ZGVyIGZpbGU6IFNvdXJjZS9XZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmguCisgICAgICAgIFRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIGl0LCBJIG5hbWUg
bXkgaGVhZGVyIGZpbGUgdG8gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC4KKwogMjAxMS0xMi0w
OSAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0uY29tPgogCiAgICAgICAgIFVwc3RyZWFtIEJs
YWNrQmVycnkgQVBJIGJhY2tpbmcgc3RvcmUgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ5
M2FjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCisKKyNpZiBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykKKyNpbmNsdWRlIDxFdmVudC5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlv
bi5oPgorI2luY2x1ZGUgPE5vdGlmaWNhdGlvblByZXNlbnRlckJsYWNrQmVycnkuaD4KKyNpbmNs
dWRlIDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg+CisjaW5jbHVkZSA8VVVJRC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05vdGlmaWNhdGlv
blByZXNlbnRlciogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5zdGFuY2UoKQoreworICAg
IHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKiBzX2luc3RhbmNlID0gMDsKKyAgICBp
ZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDsKKyAgICByZXR1cm4gc19pbnN0YW5jZTsKK30KKworTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCit7CisgICAgbV9wbGF0Zm9y
bVByZXNlbnRlciA9IGFkb3B0UHRyKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25Q
cmVzZW50ZXJCbGFja0JlcnJ5OjpjcmVhdGUodGhpcykpOworfQorCitOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCit7Cit9CisKK2Jvb2wgTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikK
K3sKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKKyAgICBBU1NFUlQobm90aWZpY2F0aW9uLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG4gPSBu
b3RpZmljYXRpb247CisgICAgaWYgKG1fbm90aWZpY2F0aW9ucy5jb250YWlucyhuKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoZWNrUGVybWlzc2lvbihub3RpZmljYXRpb24t
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgIT0gTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJt
aXNzaW9uQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIHV1aWQg
PSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgbV9ub3RpZmljYXRpb25zLmFkZChu
LCB1dWlkKTsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAobi0+aXNIVE1MKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IExvYWQgYW5kIGRpc3BsYXkgSFRNTCBjb250ZW50LgorICAgICAgICBt
ZXNzYWdlID0gbi0+dXJsKCkuc3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklY
TUU6IFN0cmlwIHRoZSBjb250ZW50IGludG8gb25lIGxpbmUuCisgICAgICAgIG1lc3NhZ2UgPSBu
LT5jb250ZW50cygpLnRpdGxlKCkgKyAiOiAiICsgbi0+Y29udGVudHMoKS5ib2R5KCk7CisgICAg
fQorCisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+c2hvdyhzdGQ6OnN0cmluZyh1dWlkLnV0Zjgo
KS5kYXRhKCkpLCBzdGQ6OnN0cmluZyhtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwoTm90
aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgQVNTRVJUKG5vdGlmaWNhdGlvbik7Cisg
ICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbiA9IG5vdGlmaWNhdGlvbjsKKworICAgIE5vdGlmaWNh
dGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbnMuZmluZChuKTsKKyAgICBpZiAo
aXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4KCkuZGF0
YSgpKSk7CisgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNh
dGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIEFTU0VSVChub3RpZmljYXRpb24pOworICAgIGNh
bmNlbChub3RpZmljYXRpb24pOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
OnJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoY29udGV4dCk7Cisg
ICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMuYWRkKGNvbnRleHQsIGNhbGxiYWNrKTsKKyAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5yZXF1ZXN0UGVybWlzc2lvbihzdGQ6OnN0cmluZyhjb250ZXh0LT51
cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6Om9uUGVybWlzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZG9tYWluLCBib29sIGlz
QWxsb3dlZCkKK3sKKyAgICBBU1NFUlQoIWRvbWFpbi5lbXB0eSgpKTsKKyAgICBTdHJpbmcgZG9t
YWluU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7CisgICAgUGVybWlz
c2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4o
KTsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9wZXJtaXNzaW9u
UmVxdWVzdHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoaXQtPmZpcnN0LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChpc0FsbG93ZWQpIHsKKyAgICAgICAgICAgIG1fYWxsb3dl
ZERvbWFpbnMuYWRkKGRvbWFpblN0cmluZyk7CisgICAgICAgICAgICBpdC0+c2Vjb25kLT5oYW5k
bGVFdmVudCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMu
cmVtb3ZlKGRvbWFpblN0cmluZyk7CisKKyAgICAgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMucmVt
b3ZlKGl0KTsKKyAgICB9Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2Fu
Y2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAg
IC8vIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIG1vZGFsIGRpYWxvZ3MgdG8gcmVxdWVzdCBwZXJtaXNz
aW9uLCBpdCdzIGltcG9zc2libGUgdG8gY2FuY2VsIHRoZW0uCit9CisKK05vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjaGVja1Blcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgLy8gRklYTUU6IFNob3VsZCBzdG9yZSB0aGUgcGVybWlzc2lvbiBpbmZvcm1h
dGlvbiBpbnRvIGZpbGUgcGVybWFuZW50bHkgaW5zdGVhZCBvZiBpbiBtX2FsbG93ZWREb21haW5z
LgorICAgIC8vIFRoZSBzdWdnZXN0ZWQgcGxhY2UgdG8gZG8gdGhpcyBpcyBpbiBtX3BsYXRmb3Jt
UHJlc2VudGVyLT5jaGVja1Blcm1pc3Npb24oKS4KKyAgICBpZiAobV9hbGxvd2VkRG9tYWlucy5j
b250YWlucyhjb250ZXh0LT51cmwoKS5ob3N0KCkpKQorICAgICAgICByZXR1cm4gTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uQWxsb3dlZDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpQZXJtaXNzaW9uTm90QWxsb3dlZDsKKworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBpbiBwbGF0Zm9ybSBzaWRlLgordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3sKKyAgICBB
U1NFUlQoIWlkLmVtcHR5KCkpOworICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVU
RjgoaWQuY19zdHIoKSk7CisgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fbm90
aWZpY2F0aW9ucy5iZWdpbigpOworICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0g
bV9ub3RpZmljYXRpb25zLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaWRTdHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgICAgIGl0LT5maXJzdC0+ZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAg
ICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElP
TlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45YmQ0NzVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpZm5kZWYgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCisjZGVmaW5lIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGxfaAorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisjaW5jbHVk
ZSA8Tm90aWZpY2F0aW9uQWNrTGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxOb3RpZmljYXRpb25QcmVz
ZW50ZXIuaD4KKyNpbmNsdWRlIDxOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5Lmg+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXIsIHB1
YmxpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Tm90aWZpY2F0aW9uQWNrTGlzdGVuZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXIqIGluc3RhbmNlKCk7CisgICAg
dmlydHVhbCB+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpOworCisgICAgLy8gUmVxdWVzdHMg
dGhhdCBhIG5vdGlmaWNhdGlvbiBiZSBzaG93bi4KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdyhXZWJD
b3JlOjpOb3RpZmljYXRpb24qKTsKKworICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmljYXRp
b24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHNob3duIGJlIGNhbmNlbGVkLgorICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWwoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7CisKKyAgICAvLyBJbmZvcm1zIHRo
ZSBwcmVzZW50ZXIgdGhhdCBhIFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiBvYmplY3QgaGFzIGJlZW4g
ZGVzdHJveWVkCisgICAgLy8gKHN1Y2ggYXMgYnkgYSBwYWdlIHRyYW5zaXRpb24pLiBUaGUgcHJl
c2VudGVyIG1heSBjb250aW51ZSBzaG93aW5nCisgICAgLy8gdGhlIG5vdGlmaWNhdGlvbiwgYnV0
IG11c3Qgbm90IGF0dGVtcHQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlcnMuCisgICAgdmlydHVh
bCB2b2lkIG5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChXZWJDb3JlOjpOb3RpZmljYXRpb24q
KTsKKworICAgIC8vIFJlcXVlc3RzIHVzZXIgcGVybWlzc2lvbiB0byBzaG93IGRlc2t0b3Agbm90
aWZpY2F0aW9ucyBmcm9tIGEgcGFydGljdWxhcgorICAgIC8vIHNjcmlwdCBjb250ZXh0LiBUaGUg
Y2FsbGJhY2sgcGFyYW1ldGVyIHNob3VsZCBiZSBydW4gd2hlbiB0aGUgdXNlciBoYXMKKyAgICAv
LyBtYWRlIGEgZGVjaXNpb24uCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlZvaWRD
YWxsYmFjaz4pOworCisgICAgLy8gQ2FuY2VsIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3Ig
dGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFJlcXVl
c3RzRm9yUGVybWlzc2lvbihXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAg
ICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgcGVybWlzc2lvbi4KKyAgICB2aXJ0dWFs
IFBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKKworICAgIC8vIEludGVyZmFjZXMgaW5oZXJpdGVkIGZyb20gTm90aWZpY2F0aW9uQWNr
TGlzdGVuZXIuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbkNsaWNrZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIGlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6
c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKKworcHJpdmF0ZToKKyAgICBOb3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsKCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5PiBtX3BsYXRmb3JtUHJl
c2VudGVyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpOb3RpZmljYXRp
b24+LCBTdHJpbmc+IE5vdGlmaWNhdGlvbk1hcDsKKyAgICBOb3RpZmljYXRpb25NYXAgbV9ub3Rp
ZmljYXRpb25zOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiwgUmVmUHRyPFdlYkNvcmU6OlZvaWRDYWxsYmFjaz4gPiBQZXJtaXNz
aW9uUmVxdWVzdE1hcDsKKyAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcCBtX3Blcm1pc3Npb25SZXF1
ZXN0czsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FsbG93ZWREb21haW5zOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyNl
bmRpZiAvLyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gKLS0gCjEuNy42LjEKCg==
</data>
<flag name="review"
          id="118864"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>