<?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>21546</bug_id>
          
          <creation_ts>2008-10-11 17:00:47 -0700</creation_ts>
          <short_desc>[GTK] ATK accessibility enhancements</short_desc>
          <delta_ts>2009-05-20 10:01:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>16495</dependson>
          <blocked>25531</blocked>
    
    <blocked>25413</blocked>
    
    <blocked>25414</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alp Toker">alp</reporter>
          <assigned_to name="Xan Lopez">xan.lopez</assigned_to>
          <cc>a9016009</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cosimoc</cc>
    
    <cc>david.bolter</cc>
    
    <cc>diegoe</cc>
    
    <cc>jdiggs</cc>
    
    <cc>pierre-luc.beaudoin</cc>
    
    <cc>pochu27</cc>
    
    <cc>walker.willie</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>xfdbse</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95006</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-10-11 17:00:47 -0700</bug_when>
    <thetext>The ATK accessibility code in trunk lags behind what was in the WebKit 1.0.1 release and users aren&apos;t having much success with it. We should merge the current accessibility code into WebKit SVN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95007</commentid>
    <comment_count>1</comment_count>
      <attachid>24294</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-10-11 17:09:11 -0700</bug_when>
    <thetext>Created attachment 24294
Current ATK changes

This is the WIP accessibility code (aiming to have it ready for WebKit 1.0.2).

Things that still need work:

  * Text elements need to be hidden and folded into the parent element instead of being listed individually as they are now.
  * Need support for replaced objects.
  * Need to support more accessible relations.
  * Support for more DOM events.
  * Conversion of text formatting attributes to and from ATK styles.
  * Instantiate accessible types with only the interfaces they implement.


 dom/Document.cpp                           |    2 
 page/gtk/AXObjectCacheAtk.cpp              |   73 ++
 page/gtk/AccessibilityObjectAtk.cpp        |   22 
 page/gtk/AccessibilityObjectWrapperAtk.cpp | 1025 +++++++++++++++++++++++++----
 4 files changed, 996 insertions(+), 126 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95008</commentid>
    <comment_count>2</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-10-11 17:17:28 -0700</bug_when>
    <thetext>For anyone familiar with the Mozilla accessibility implementation wondering where most of the DOM nodes have gone, I should mention that we now do hiding of redundant nodes. The aim is to represent the functionality of the page rather than its hypertext structure. Hiding is currently broken for text nodes (as I mentioned earlier).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100435</commentid>
    <comment_count>3</comment_count>
      <attachid>25529</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-11-26 13:20:48 -0800</bug_when>
    <thetext>Created attachment 25529
Use stringValue for the AtkObject::name

Minor change. According to the documentation atk_get_object_name may/should return the textual content. Do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100443</commentid>
    <comment_count>4</comment_count>
      <attachid>25534</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-11-26 13:56:08 -0800</bug_when>
    <thetext>Created attachment 25534
Create separate objects implemeting separate interfaces

This is mostly here to start discussing.

The problem:
  - AccessibilityRenderObject::textLength and selection handling is only valid for Text-Controls. When using a debug build one is running into asserts when using tools like accerciser.

First approach:
  - Create separate GType&apos;s and not everyone is implementing AtkTextInterface
    (and implemented with this patch) to not run into the asserts.

Next steps:
  - Implement AtkTextInterface on a paragraph of text around the ::stringValue
  - Some how dynamically add AtkTextInterface and other implementations of a GObject* or construct these types dynamically...

I will try to push your other patches forward as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107795</commentid>
    <comment_count>5</comment_count>
      <attachid>25529</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-30 15:32:37 -0800</bug_when>
    <thetext>Comment on attachment 25529
Use stringValue for the AtkObject::name

Landed in r40426.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108442</commentid>
    <comment_count>6</comment_count>
    <who name="Willie Walker">walker.willie</who>
    <bug_when>2009-02-05 08:21:54 -0800</bug_when>
    <thetext>Many thanks!  We hope to try to test this when our schedule eases up a little.  In the meantime, have you looked at things in Accerciser from both the hierarchy perspective as well as the event perspective?  A side-by-side comparison of the same web content shown in WebKit and Firefox might yield a lot of insight.

In addition, there&apos;s also Speclenium, which might be useful:

http://monotonous.org/specular/
http://www.youtube.com/watch?v=UHTd8c8jY8Y
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116000</commentid>
    <comment_count>7</comment_count>
      <attachid>29115</attachid>
    <who name="Alejandro Piñeiro">apinheiro</who>
    <bug_when>2009-03-31 08:08:45 -0700</bug_when>
    <thetext>Created attachment 29115
Update the first patch

When I tried to use the patch at the comment 1, this doesn&apos;t apply directly, and in the same way, it doesn&apos;t compile, so I needed to fix these problems. I suppose that it was a experimental patch. I also made the minor change suggested at comment 3. I don&apos;t apply the changes at comment 4 as they are mostly structural, but almost with no additional functionality.

In the same way I made some minor changes:

  * I commented some parts of code, to avoid &quot;not used definition&quot; compile warnings
  * I change the call to AXObjectCache-&gt;get for AXObjectCache-&gt;getOrCreate on some places. The first one was on webkitwebview.cpp, when you try to get the AccessibleObject you are wrapping. I needed to do that because the call to -&gt;get returned NULL, so no DOM tree was showed on Accerciser. I needed to do that as well in other places, in order to avoid crashes.
  * As far as I see, the only place where the cache is updated is on getOrCreate. In the same way, I think that has sense that a cache should work always in this way, checking if you have the object yet, and if not, create the object, so getOrCreate should be the most called function. Probably I&apos;m wrong, but in this case, we should add NULL checks on the -&gt;get return, as can cause crashes.
  * About the functionality, currently the position is not computed properly. You can see it easily with the Accerciser, and see that the html objects are not positionated properly (although it seems that computes properly the size). The AtkComponent implementation were added with the patch at comment 1, so probably it needs to be reviewed. I don&apos;t know if this affect to Orca or other screen readers, but should be reviewed.
  * I experiment other crashes, but I can&apos;t conclude if was again for the get/getOrCreate problem yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116850</commentid>
    <comment_count>8</comment_count>
      <attachid>29326</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 02:12:00 -0700</bug_when>
    <thetext>Created attachment 29326
a11ydynamictypes.patch

After talking with Holger, we decided the best idea to fix the types issue was to follow Mozilla and generate the right types at runtime based on the interfaces they should implement. This patch does this, based on the implementation in nsAccessibleWrap.cpp in Mozilla. It does not really improve the situation too much, but I think it&apos;s a reasonable first step to clean up the code.

Next I&apos;ll try to land Alp&apos;s patch in pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116851</commentid>
    <comment_count>9</comment_count>
      <attachid>29327</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 02:26:55 -0700</bug_when>
    <thetext>Created attachment 29327
getorcreate.patch

Push one-liner by Alejandro Piñeiro to actually create the wrapper object the first time we need it. With this we now get some stuff on Accerciser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116856</commentid>
    <comment_count>10</comment_count>
      <attachid>29327</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-08 02:56:25 -0700</bug_when>
    <thetext>Comment on attachment 29327
getorcreate.patch

Would be cool to get the a11y tests going too...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116857</commentid>
    <comment_count>11</comment_count>
      <attachid>29326</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-08 03:04:48 -0700</bug_when>
    <thetext>Comment on attachment 29326
a11ydynamictypes.patch

&gt; From d12ce0edaf1741fad1166f8ffe08c13aee86b7d2 Mon Sep 17 00:00:00 2001
&gt; From: Xan Lopez &lt;xlopez@igalia.com&gt;
&gt; Date: Wed, 8 Apr 2009 11:59:15 +0300
&gt; Subject: [PATCH] 2009-04-08  Xan Lopez  &lt;xlopez@igalia.com&gt;
&gt; 
&gt;         Reviewed by NOBODY (OOPS!).
&gt; 
&gt;         https://bugs.webkit.org/show_bug.cgi?id=21546
&gt;         [GTK] ATK accessibility enhancements
&gt; 
&gt;         Rework accessibility type generation code, based on Mozilla a11y
&gt;         implementation.

If it is based on Mozilla a11y we should include their copyright header and maybe even keep the MPL header for these parts?!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116858</commentid>
    <comment_count>12</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 03:17:16 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 29326 [review])
&gt; &gt; From d12ce0edaf1741fad1166f8ffe08c13aee86b7d2 Mon Sep 17 00:00:00 2001
&gt; &gt; From: Xan Lopez &lt;xlopez@igalia.com&gt;
&gt; &gt; Date: Wed, 8 Apr 2009 11:59:15 +0300
&gt; &gt; Subject: [PATCH] 2009-04-08  Xan Lopez  &lt;xlopez@igalia.com&gt;
&gt; &gt; 
&gt; &gt;         Reviewed by NOBODY (OOPS!).
&gt; &gt; 
&gt; &gt;         https://bugs.webkit.org/show_bug.cgi?id=21546
&gt; &gt;         [GTK] ATK accessibility enhancements
&gt; &gt; 
&gt; &gt;         Rework accessibility type generation code, based on Mozilla a11y
&gt; &gt;         implementation.
&gt; 
&gt; If it is based on Mozilla a11y we should include their copyright header and
&gt; maybe even keep the MPL header for these parts?!
&gt; 

All their code is triple licensed, so we just choose to have it as LGPL 2.1. AFAIK there&apos;s no need at all to copy the triple license header.

About putting their copyright header, it says &quot;The contens of this file...&quot; which is not true. Maybe we can add a note saying that some parts of the file are based on Mozilla code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116877</commentid>
    <comment_count>13</comment_count>
      <attachid>29335</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 07:16:48 -0700</bug_when>
    <thetext>Created attachment 29335
accobj.patch

Move two AccessibilityObject methods to their proper file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116881</commentid>
    <comment_count>14</comment_count>
      <attachid>29336</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 08:03:20 -0700</bug_when>
    <thetext>Created attachment 29336
fallbackobject.patch

Move fallback object creation to its function, as it will be used elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116885</commentid>
    <comment_count>15</comment_count>
      <attachid>29335</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-08 09:23:22 -0700</bug_when>
    <thetext>Comment on attachment 29335
accobj.patch

Maybe you should say based on work of Alp Toker? Or is this ChangeLog entry coming from him? Created by Alp Toker, Landed by ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116888</commentid>
    <comment_count>16</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-08 09:28:19 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)

&gt; All their code is triple licensed, so we just choose to have it as LGPL 2.1.
&gt; AFAIK there&apos;s no need at all to copy the triple license header.
&gt; 
&gt; About putting their copyright header, it says &quot;The contens of this file...&quot;
&gt; which is not true. Maybe we can add a note saying that some parts of the file
&gt; are based on Mozilla code.
&gt; 

Right, there are some more dimensions to it. E.g. if we improve the version they can not integrate the changes into their tree. For the Gtk Drawing code we copied their file and kept the triple license... it should allow them to pick any fixes in the future. If there isn&apos;t a strong reason not doing it I would be very happy to follow the gtk drawing approach here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116889</commentid>
    <comment_count>17</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 09:29:24 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 29335 [review])
&gt; Maybe you should say based on work of Alp Toker? Or is this ChangeLog entry
&gt; coming from him? Created by Alp Toker, Landed by ...
&gt; 

Well, in this case the code is 100% from Alp&apos;s patch, I just separated it in a single patch, so I thought it made sense to just attribute it to him in toto. I don&apos;t really know if we have specific rules about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116890</commentid>
    <comment_count>18</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-08 09:31:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; 
&gt; &gt; All their code is triple licensed, so we just choose to have it as LGPL 2.1.
&gt; &gt; AFAIK there&apos;s no need at all to copy the triple license header.
&gt; &gt; 
&gt; &gt; About putting their copyright header, it says &quot;The contens of this file...&quot;
&gt; &gt; which is not true. Maybe we can add a note saying that some parts of the file
&gt; &gt; are based on Mozilla code.
&gt; &gt; 
&gt; 
&gt; Right, there are some more dimensions to it. E.g. if we improve the version
&gt; they can not integrate the changes into their tree. For the Gtk Drawing code we
&gt; copied their file and kept the triple license... it should allow them to pick
&gt; any fixes in the future. If there isn&apos;t a strong reason not doing it I would be
&gt; very happy to follow the gtk drawing approach here.
&gt; 

Well, dunno, this is not really the same code, I&apos;m just using the same idea, so I don&apos;t think it&apos;s exactly the same situation than the GTK+ drawing code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117006</commentid>
    <comment_count>19</comment_count>
      <attachid>29360</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-09 02:45:53 -0700</bug_when>
    <thetext>Created attachment 29360
refstateset.patch

Implement AtkObject::ref_state_set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117008</commentid>
    <comment_count>20</comment_count>
      <attachid>29361</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-09 03:20:26 -0700</bug_when>
    <thetext>Created attachment 29361
componentiface.patch

Implement AtkComponent interface.

I&apos;ve modified the webcore -&gt; atk coordinates calculation in PLATFORM(GTK) to make the workaround more obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117015</commentid>
    <comment_count>21</comment_count>
      <attachid>29326</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-09 03:41:57 -0700</bug_when>
    <thetext>Comment on attachment 29326
a11ydynamictypes.patch


&gt; +static GType GetAtkInterfaceTypeFromWAIType(WAIType type)
&gt; +{
&gt; +  switch (type) {
&gt; +    case WAI_ACTION:
&gt; +      return ATK_TYPE_ACTION;
&gt; +    case WAI_STREAMABLE:
&gt; +      return ATK_TYPE_STREAMABLE_CONTENT;
&gt; +    case WAI_EDITABLE_TEXT:
&gt; +      return ATK_TYPE_EDITABLE_TEXT;
&gt; +    case WAI_TEXT:
&gt; +      return ATK_TYPE_TEXT;
&gt; +  }
&gt; +
&gt; +  return G_TYPE_INVALID;
&gt; +}

style foobar... four spaces please and the case labels should be on the same height as the switch (consult the style guide I might be wrong about the switch).


&gt; +#define WAI_TYPE_NAME_LEN (30) /* Enough for prefix + 5 hex characters (max) */
&gt; +    static char name[WAI_TYPE_NAME_LEN + 1];
&gt; +    
&gt; +    g_sprintf(name, &quot;WAIType%x&quot;, interfaceMask);
&gt; +    name[WAI_TYPE_NAME_LEN] = &apos;\0&apos;;

nice improvement.  I have no idea where W should come from AI == a11y here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117016</commentid>
    <comment_count>22</comment_count>
      <attachid>29336</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-09 03:44:07 -0700</bug_when>
    <thetext>Comment on attachment 29336
fallbackobject.patch

Okay, I know Alp is the author of the patch and you are simply splitting his patch, I think it could qualify as a reason to put Alp&apos;s name into the changelog entry (even if the description is not coming from him).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117017</commentid>
    <comment_count>23</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-09 03:45:48 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 29326 [review])
&gt; 
&gt; &gt; +static GType GetAtkInterfaceTypeFromWAIType(WAIType type)
&gt; &gt; +{
&gt; &gt; +  switch (type) {
&gt; &gt; +    case WAI_ACTION:
&gt; &gt; +      return ATK_TYPE_ACTION;
&gt; &gt; +    case WAI_STREAMABLE:
&gt; &gt; +      return ATK_TYPE_STREAMABLE_CONTENT;
&gt; &gt; +    case WAI_EDITABLE_TEXT:
&gt; &gt; +      return ATK_TYPE_EDITABLE_TEXT;
&gt; &gt; +    case WAI_TEXT:
&gt; &gt; +      return ATK_TYPE_TEXT;
&gt; &gt; +  }
&gt; &gt; +
&gt; &gt; +  return G_TYPE_INVALID;
&gt; &gt; +}
&gt; 
&gt; style foobar... four spaces please and the case labels should be on the same
&gt; height as the switch (consult the style guide I might be wrong about the
&gt; switch).
&gt; 

Yep, I fixed this in another patch.

&gt; 
&gt; &gt; +#define WAI_TYPE_NAME_LEN (30) /* Enough for prefix + 5 hex characters (max) */
&gt; &gt; +    static char name[WAI_TYPE_NAME_LEN + 1];
&gt; &gt; +    
&gt; &gt; +    g_sprintf(name, &quot;WAIType%x&quot;, interfaceMask);
&gt; &gt; +    name[WAI_TYPE_NAME_LEN] = &apos;\0&apos;;
&gt; 
&gt; nice improvement.  I have no idea where W should come from AI == a11y here?
&gt; 

WAI = WebKit Accessibility Interface. Mozilla has MAI, so we get WAI ;)
At first I was writing the whole thing, but it really is just too long IMHO, especially for API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117019</commentid>
    <comment_count>24</comment_count>
      <attachid>29360</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-09 03:47:05 -0700</bug_when>
    <thetext>Comment on attachment 29360
refstateset.patch

Logic seems to be right. I have no idea if we have TODO entries for every state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117021</commentid>
    <comment_count>25</comment_count>
      <attachid>29361</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-09 04:06:16 -0700</bug_when>
    <thetext>Comment on attachment 29361
componentiface.patch


&gt; +#if PLATFORM(GTK)
&gt; +#include &quot;HostWindow.h&quot;
&gt; +#include &lt;gtk/gtk.h&gt;
&gt; +#endif

I don&apos;t think we need this conditional.


&gt; +    if (frameView) {
&gt; +#if PLATFORM(GTK)
&gt; +        // FIXME: This is a workaround for confusing coordinate conversions
&gt; +        // that don&apos;t work in WebCore

maybe explain in which it is confusing?

&gt; +        GtkWidget* widget = frameView-&gt;hostWindow()-&gt;platformWindow();
&gt; +        GdkWindow* win = widget-&gt;window;
&gt; +        rect = frameView-&gt;contentsToWindow(rect);
&gt; +        rect.move(widget-&gt;allocation.x, widget-&gt;allocation.y);
&gt; +
&gt; +        if (coordType == ATK_XY_SCREEN) {
&gt; +            gint originX, originY;
&gt; +            gdk_window_get_origin(win, &amp;originX, &amp;originY);
&gt; +            rect.move(originX, originY);
&gt; +        }

Let us assume Atk is only used with the Gtk+ platform for now.

&gt;
&gt; +static IntPoint contentsFromAtk(AccessibilityObject* coreObject, AtkCoordType coordType, gint x, gint y)
&gt; +{
&gt; +    IntPoint pos(x, y);
&gt; +
&gt; +    FrameView* frameView = coreObject-&gt;documentFrameView();
&gt; +    if (frameView) {
&gt; +        switch (coordType) {
&gt; +        case ATK_XY_SCREEN:
&gt; +            return frameView-&gt;screenToContents(pos);
&gt; +        case ATK_XY_WINDOW:
&gt; +            return frameView-&gt;windowToContents(pos);
&gt; +        }

So the confusion is not symmetric or is this part not yet tested?

&gt; +  
&gt;    switch (type) {
&gt; -    case WAI_ACTION:
&gt; +  case WAI_ACTION:
&gt;        return ATK_TYPE_ACTION;
&gt; -    case WAI_STREAMABLE:
&gt; +  case WAI_STREAMABLE:
&gt;        return ATK_TYPE_STREAMABLE_CONTENT;
&gt; -    case WAI_EDITABLE_TEXT:
&gt; +  case WAI_EDITABLE_TEXT:
&gt;        return ATK_TYPE_EDITABLE_TEXT;
&gt; -    case WAI_TEXT:
&gt; +  case WAI_TEXT:
&gt;        return ATK_TYPE_TEXT;
&gt; +  case WAI_COMPONENT:
&gt; +      return ATK_TYPE_COMPONENT;
&gt;    }

please ix this when landing the dynamic types patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117455</commentid>
    <comment_count>26</comment_count>
      <attachid>29463</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-14 06:35:16 -0700</bug_when>
    <thetext>Created attachment 29463
statictextrole.patch

Implement AtkText interface for objects with StaticTextRole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117456</commentid>
    <comment_count>27</comment_count>
      <attachid>29464</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-14 06:35:37 -0700</bug_when>
    <thetext>Created attachment 29464
cleanup.patch

Small cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117457</commentid>
    <comment_count>28</comment_count>
      <attachid>29465</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-14 06:36:07 -0700</bug_when>
    <thetext>Created attachment 29465
atktextmethods.patch

Working implementations for AtkText::get_text and AtkText::get_character_count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117463</commentid>
    <comment_count>29</comment_count>
      <attachid>29463</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-14 07:39:50 -0700</bug_when>
    <thetext>Comment on attachment 29463
statictextrole.patch

Did you test this? Could you do a debug build before landing this and check accerciser is not causing us to hit an assert? But it looks good (so r=+ if we don&apos;t hit an assert)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117464</commentid>
    <comment_count>30</comment_count>
      <attachid>29465</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-04-14 07:44:16 -0700</bug_when>
    <thetext>Comment on attachment 29465
atktextmethods.patch

Looks like a improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117468</commentid>
    <comment_count>31</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-14 08:51:14 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 29463 [review])
&gt; Did you test this? Could you do a debug build before landing this and check
&gt; accerciser is not causing us to hit an assert? But it looks good (so r=+ if we
&gt; don&apos;t hit an assert)
&gt; 

Does not hit any ASSERT in a debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117591</commentid>
    <comment_count>32</comment_count>
      <attachid>29497</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-15 03:24:01 -0700</bug_when>
    <thetext>Created attachment 29497
atkactioninterface.patch

Only implement AtkAction when we actually have an action.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117609</commentid>
    <comment_count>33</comment_count>
      <attachid>29500</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-15 09:44:26 -0700</bug_when>
    <thetext>Created attachment 29500
atkcomponentifacev2.patch

Implement AtkComponent interface.

I have moved the screenToWindow windowToScreen code to ChromeClient, where it belongs, so there are no hacks in the accesibility wrapper now. The coordinates seem to be OK in Accerciser, both relative and absolute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117726</commentid>
    <comment_count>34</comment_count>
      <attachid>29530</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-16 01:05:01 -0700</bug_when>
    <thetext>Created attachment 29530
atkimageiface.patch

Implement AtkImage interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117740</commentid>
    <comment_count>35</comment_count>
      <attachid>29536</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-16 06:10:35 -0700</bug_when>
    <thetext>Created attachment 29536
covermoreroles.patch

Cover more WebCore role -&gt; ATK role conversions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118019</commentid>
    <comment_count>36</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-18 00:23:18 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=25529) [review]
&gt; Use stringValue for the AtkObject::name
&gt; 
&gt; Minor change. According to the documentation atk_get_object_name may/should
&gt; return the textual content. Do that.
&gt; 

Looking at the implementation of stringValue() it does not seem to me that what it returns is guaranteed to be always brief or short. Are you sure this change is OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118021</commentid>
    <comment_count>37</comment_count>
      <attachid>29600</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-18 00:57:03 -0700</bug_when>
    <thetext>Created attachment 29600
getters.patch

Do not call setters in the getters functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118093</commentid>
    <comment_count>38</comment_count>
      <attachid>29612</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-20 05:42:45 -0700</bug_when>
    <thetext>Created attachment 29612
focus.patch

Implement AtkObject::focus-event and AtkObject::state-changed:focused signal emission.

Couldn&apos;t figure out a way to do it without changing handleFocusedUIElementChanged to get as parameters the old and new focused nodes (if they exist). The parameters are unused in Mac and Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118094</commentid>
    <comment_count>39</comment_count>
      <attachid>29613</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-20 05:44:32 -0700</bug_when>
    <thetext>Created attachment 29613
focus.patch

The focus patch, with style fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118134</commentid>
    <comment_count>40</comment_count>
      <attachid>29497</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-20 11:27:48 -0700</bug_when>
    <thetext>Comment on attachment 29497
atkactioninterface.patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118139</commentid>
    <comment_count>41</comment_count>
      <attachid>29500</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-20 11:58:12 -0700</bug_when>
    <thetext>Comment on attachment 29500
atkcomponentifacev2.patch

&gt;         * page/gtk/AccessibilityObjectWrapperAtk.cpp:
&gt;         (core):
&gt; 
[...]
&gt; 
&gt;         * WebCoreSupport/ChromeClientGtk.cpp:
&gt;         (WebKit::widgetScreenPosition):
&gt;         (WebKit::ChromeClient::windowToScreen):
&gt;         (WebKit::ChromeClient::screenToWindow):

This looks good to me, too. I would split these two parts, though. I understand the WebKit/gtk changes are more general, and the code is used, for instance, in scroll view, so I&apos;d prefer if you make two commits here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118737</commentid>
    <comment_count>42</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-04-24 14:37:25 -0700</bug_when>
    <thetext>Looking at the ChangeLog, I&apos;m assuming that the above patches (with the exception of the patch referred to in comment #5) have not been committed to trunk.

If so, and given that I&apos;ve set aside time this weekend to start implementing support in Orca for WebKit, which of the above patches should I be applying? :-)

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118807</commentid>
    <comment_count>43</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-24 23:56:38 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Looking at the ChangeLog, I&apos;m assuming that the above patches (with the
&gt; exception of the patch referred to in comment #5) have not been committed to
&gt; trunk.
&gt; 
&gt; If so, and given that I&apos;ve set aside time this weekend to start implementing
&gt; support in Orca for WebKit, which of the above patches should I be applying?
&gt; :-)
&gt; 
&gt; Thanks!
&gt; 

All of them! :)

The last one is the most important though, since it implements the focus tracking (the state-changed::focus stuff we went through in the hackfest).

The same thing applies for the three patches in https://bugs.webkit.org/show_bug.cgi?id=16135, all of them should be applied.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118809</commentid>
    <comment_count>44</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-24 23:58:05 -0700</bug_when>
    <thetext>Mmm, maybe I was not clear enough. What needs to be committed is everything that has &apos;xan.lopez: review?&apos; in the Flags column. Ie, from &apos;atkimageiface.patch&apos; onwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118862</commentid>
    <comment_count>45</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-04-25 17:32:08 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Mmm, maybe I was not clear enough. What needs to be committed is everything
&gt; that has &apos;xan.lopez: review?&apos; in the Flags column. Ie, from
&gt; &apos;atkimageiface.patch&apos; onwards.
&gt; 

Awesome. That&apos;s what I thought, but with so many patches I wanted to be sure. :-)

Things are coming along quite nicely. (Thanks!!) But there are things that ultimately be implemented (e.g. exposing the levels of headings, exposing list items with ROLE_LIST_ITEM, some expected states missing from accessibles). What&apos;s the best way to proceed on filing these?

My opinion is that if we keep tacking on issues here, the list of patches will continue to grow and this bug will never get closed. :-) If we open new bugs now, it might be confusing because of the dependency of getting the patches from this bug (and possibly bug #16135 and possibly some of the newly opened bugs). So *I* think it makes sense to wait until these patches are committed and then open new bugs. But I&apos;ll do whatever you all think is best.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118890</commentid>
    <comment_count>46</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-04-26 00:24:50 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; My opinion is that if we keep tacking on issues here, the list of patches will
&gt; continue to grow and this bug will never get closed. :-) If we open new bugs
&gt; now, it might be confusing because of the dependency of getting the patches
&gt; from this bug (and possibly bug #16135 and possibly some of the newly opened
&gt; bugs). So *I* think it makes sense to wait until these patches are committed
&gt; and then open new bugs. But I&apos;ll do whatever you all think is best.

I hope we&apos;ll be able to clear the patch list in this bug pretty soon, so I don&apos;t think there&apos;s a problem in opening new bugs while this one is open. At worst I can choose not do any work on the new ones until this is done ;)

Thanks for the testing, and please make sure to open bugs for any small detail you see, the more the better.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119025</commentid>
    <comment_count>47</comment_count>
      <attachid>29530</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-27 14:26:08 -0700</bug_when>
    <thetext>Comment on attachment 29530
atkimageiface.patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119026</commentid>
    <comment_count>48</comment_count>
      <attachid>29536</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-27 14:34:07 -0700</bug_when>
    <thetext>Comment on attachment 29536
covermoreroles.patch

&gt; +    case ColumnRole:
&gt; +        //return ATK_ROLE_TABLE_COLUMN_HEADER; //?
&gt; +        return ATK_ROLE_UNKNOWN; // Matches Mozilla
[...]
&gt; +    case BusyIndicatorRole:
&gt; +        return ATK_ROLE_PROGRESS_BAR; //?
&gt; +    case ProgressIndicatorRole:
&gt; +        //return ATK_ROLE_SPIN_BUTTON; //Some confusion here in AccessibilityRenderObject.cpp
[...]
&gt; +    //case LabelRole: // TODO: add LabelRole?
&gt; +    //    return ATK_ROLE_LABEL;

The only problem I have with this patch is the comments are confusing. That TODO is about adding LabelRole to ATK, or to WebCore? If you can improve the comments, and add a small explanation to the // ? ones, that would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119027</commentid>
    <comment_count>49</comment_count>
      <attachid>29600</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-27 14:35:52 -0700</bug_when>
    <thetext>Comment on attachment 29600
getters.patch

Getters which change stuff is the kind of thing bdash likes, isn&apos;t it? =D /me hides</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119029</commentid>
    <comment_count>50</comment_count>
      <attachid>29613</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-27 14:40:41 -0700</bug_when>
    <thetext>Comment on attachment 29613
focus.patch

Interesting. Are Mac, Win, GTK+ the only ports implementing a11y up to now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119033</commentid>
    <comment_count>51</comment_count>
      <attachid>29613</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-04-27 15:10:26 -0700</bug_when>
    <thetext>Comment on attachment 29613
focus.patch

I&apos;m changing the review flag back to ?, because Xan wants to find out if there is another way to implement this, but it would be good to have input from someone from Apple, who knows this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122169</commentid>
    <comment_count>52</comment_count>
      <attachid>30510</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-05-20 08:41:40 -0700</bug_when>
    <thetext>Created attachment 30510
focussignals.patch

After talking with Chris Feizach from Apple we have agreed that instead of modifying the old method we should add a new one specific to the GTK port, so I&apos;m doing that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122171</commentid>
    <comment_count>53</comment_count>
      <attachid>30510</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-20 08:55:30 -0700</bug_when>
    <thetext>Comment on attachment 30510
focussignals.patch

&gt; @@ -110,6 +113,9 @@ namespace WebCore {
&gt;      inline void AXObjectCache::selectedChildrenChanged(RenderObject*) { }
&gt;      inline void AXObjectCache::postNotification(RenderObject*, const String&amp;) { }
&gt;      inline void AXObjectCache::postNotificationToElement(RenderObject*, const String&amp;) { }
&gt; +#if PLATFORM(GTK)
&gt; +    inline void handleFocusedUIElementChangedWithRenderers(RenderObject*, RenderObject*) { }
&gt; +#endif
&gt;  #endif

You&apos;re missing AXObjectCache:: here. I believe that won&apos;t build with ACCESSIBILITY disabled, but then again, is it even possible to build with no accessibility for GTK+? I think we don&apos;t need to provide that empty implementation at all. Otherwise good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122183</commentid>
    <comment_count>54</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-05-20 10:01:14 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (From update of attachment 30510 [review])
&gt; &gt; @@ -110,6 +113,9 @@ namespace WebCore {
&gt; &gt;      inline void AXObjectCache::selectedChildrenChanged(RenderObject*) { }
&gt; &gt;      inline void AXObjectCache::postNotification(RenderObject*, const String&amp;) { }
&gt; &gt;      inline void AXObjectCache::postNotificationToElement(RenderObject*, const String&amp;) { }
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    inline void handleFocusedUIElementChangedWithRenderers(RenderObject*, RenderObject*) { }
&gt; &gt; +#endif
&gt; &gt;  #endif
&gt; 
&gt; You&apos;re missing AXObjectCache:: here. I believe that won&apos;t build with
&gt; ACCESSIBILITY disabled, but then again, is it even possible to build with no
&gt; accessibility for GTK+? I think we don&apos;t need to provide that empty
&gt; implementation at all. Otherwise good.
&gt; 

Committed as r43920, closing!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24294</attachid>
            <date>2008-10-11 17:09:11 -0700</date>
            <delta_ts>2008-10-11 17:09:11 -0700</delta_ts>
            <desc>Current ATK changes</desc>
            <filename>nuanti-a11y-oct12.patch</filename>
            <type>text/plain</type>
            <size>51796</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM3NTEwKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjM0LDcgKzE2MzQsNyBAQCB2b2lkIERvY3VtZW50Ojpp
bXBsaWNpdENsb3NlKCkKICAgICAgICAgICAgIHZpZXcoKS0+aG9zdFdpbmRvdygpLT5wYWludCgp
OwogICAgIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAg
ICAgaWYgKGYgJiYgcmVuZGVyZXIoKSAmJiB0aGlzID09IHRvcERvY3VtZW50KCkgJiYgQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgYXhPYmplY3RDYWNoZSgp
LT5wb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KHJlbmRlcmVyKCksICJBWExvYWRDb21wbGV0ZSIp
OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAJKHJldmlz
aW9uIDM3NTEwKQorKysgV2ViQ29yZS9wYWdlL2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDE5IEBACiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKKyNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqKQogeworICAgIC8vVE9ETzogVXNlIHRvZ2dsZSByZWZzIHRvIGtl
ZXAgYSBwb29sIG9mIHJldXNhYmxlIHdyYXBwZXJzCisKICAgICB3ZWJraXRfYWNjZXNzaWJsZV9k
ZXRhY2goV0VCS0lUX0FDQ0VTU0lCTEUob2JqLT53cmFwcGVyKCkpKTsKKyAgICAvL29iai0+ZGV0
YWNoKCk7IC8vZGV0YWNoZXMgcmVjdXJzaXZlbHkKKyAgICAvL29iai0+c2V0V3JhcHBlcigwKTsg
YWxyZWFkeSBkb25lIGJ5IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaCgpPwogfQogCiB2b2lk
IEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQpA
QCAtMzcsMTYgKzQ0LDc4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nl
c3MKICAgICBnX29iamVjdF91bnJlZihhdGtPYmopOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQVhP
YmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7CisgICAgcHJpbnRmKCJwb3N0Tm90aWZpY2F0aW9uOiAlc1xu
IiwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIG5vdGlmaWNhdGlvbnMgZm9yIHRleHQgaW5wdXQgb2JqZWN0cyBh
cmUgc2VudCB0byB0aGF0IG9iamVjdAorICAgIC8vIGFsbCBvdGhlcnMgYXJlIHNlbnQgdG8gdGhl
IHRvcCBXZWJBcmVhCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGdldChy
ZW5kZXJlciktPm9ic2VydmFibGVPYmplY3QoKTsKKyAgICBpZiAoIW9iaikKKyAgICAgICAgb2Jq
ID0gZ2V0KHJlbmRlcmVyLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWVzc2FnZSA9PSAiQVhWYWx1ZUNoYW5nZWQi
KSB7CisjaWYgMAorICAgICAgICBnaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgZ2ludCBsZW5ndGgg
PSBvYmotPnRleHRMZW5ndGgoKTsKKyAgICAgICAgLy8gVE9ETzogc2lnbmFsIGRldGFpbAorICAg
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUob2JqLT53cmFwcGVyKCksICJ0ZXh0X2NoYW5nZWQ6
Omluc2VydCIsIHN0YXJ0LCBsZW5ndGgpOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChtZXNzYWdl
ID09ICJBWFNlbGVjdGVkVGV4dENoYW5nZWQiKSB7CisgICAgICAgIHByaW50ZigiZW1pdFxuIik7
CisgICAgICAgIC8vdGV4dC1jYXJldC1tb3ZlZCAoZ2ludCBuZXdfcG9zaXRpb24pCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgZmlyZWQgZnJvbSBTZWxlY3Rpb25Db250cm9sbGVyTWFj
Lm1tCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShvYmotPndyYXBwZXIoKSwgInRleHQt
c2VsZWN0aW9uLWNoYW5nZWQiKTsKKyAgICB9CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dE5vdGlmaWNhdGlvblRvRWxlbWVudChSZW5kZXJPYmplY3QqLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKKyAgICBwcmludGYoInBvc3ROb3Rp
ZmljYXRpb25Ub0VsZW1lbnQ6ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
Ly8gc2VuZCB0aGUgbm90aWZpY2F0aW9uIHRvIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpdHNlbGYs
IG5vdCBvbmUgb2YgaXRzIGFuY2VzdG9ycworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBnZXQocmVuZGVy
ZXIpOworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWVzc2FnZSA9
PSAiQVhMb2FkQ29tcGxldGUiKSB7CisgICAgICAgIHByaW50ZigiZW1pdCBsb2FkLWNvbXBsZXRl
XG4iKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBmaXJlZCBmcm9tIERvY3VtZW50
LmNwcCBNQUMKKyAgICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpF
Q1Qob2JqLT53cmFwcGVyKCkpLCBBVEtfU1RBVEVfQlVTWSwgRkFMU0UpOworICAgICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUob2JqLT53cmFwcGVyKCksICJsb2FkLWNvbXBsZXRlIik7CisgICAg
fQorCisjaWYgMAorICAgIGlmIChtZXNzYWdlID09ICJBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2Vk
IikgeworICAgICAgICBwcmludGYoImVtaXQgQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZFxuIik7
CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShvYmotPndyYXBwZXIoKSwgIiIsIG9iai0+
Zm9jdXNlZFVJRWxlbWVudCgpLT53cmFwcGVyKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8g
VE9ETzogbmVlZHMgQVRLX1NUQVRFX01BTkFHRVNfREVTQ0VOREFOVFMKKyAgICBpZiAobWVzc2Fn
ZSA9PSAiQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCIpIHsKKyAgICAgICAgcHJpbnRmKCJlbWl0
IEFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWRcbiIpOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUob2JqLT53cmFwcGVyKCksICJhY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIiwgb2JqLT5h
Y3RpdmVEZXNjZW5kYW50KCktPndyYXBwZXIoKSk7CisgICAgfQorCisgICAgLy8gVE9ETzogQ292
ZXIgdGhlIG90aGVyIGxvYWRlciBzaWduYWxzIHN1cHBvcnRlZCBieSBBdGtEb2N1bWVudC4KIH0K
IAogdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCgpCiB7
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgZmlyZWQgb25seSBpbiBNQUMKKyAgICBwcmludGYoImhh
bmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKClcbiIpOworCisgICAgLy9nX3NpZ25hbF9lbWl0
X2J5X25hbWUob2JqLT53cmFwcGVyKCksICJmb2N1c19ldmVudCIsIFRSVUUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdEF0ay5jcHAJKHJldmlzaW9uIDM3NTEwKQorKysgV2ViQ29yZS9wYWdlL2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDYg
KzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgiCiAKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNobWVudCgp
IGNvbnN0CkBAIC0yNyw0ICszMCwyMyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vz
c2liaWxpdHlJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eU9iamVjdDo6d3JhcHBlcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd3JhcHBlcjsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRXcmFwcGVyKEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQoreworICAgIGlmICh3cmFwcGVyID09
IG1fd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fd3JhcHBlcikKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV93cmFwcGVyKTsKKworICAgIG1fd3JhcHBlciA9IHdyYXBwZXI7
CisKKyAgICBpZiAobV93cmFwcGVyKQorICAgICAgICBnX29iamVjdF9yZWYobV93cmFwcGVyKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJKHJldmlzaW9uIDM3NTEwKQor
KysgV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDI3IEBACiAKICNpbmNsdWRlIDxhdGsvYXRrLmg+CiAK
KyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogZmFsbGJhY2tP
YmplY3QoKQoreworICAgIHN0YXRpYyBBWE9iamVjdENhY2hlKiBmYWxsYmFja0NhY2hlID0gbmV3
IEFYT2JqZWN0Q2FjaGUoKTsKKyAgICBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
ID0gMDsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgIG9iamVjdCA9IGZhbGxiYWNrQ2FjaGUt
PmdldChMaXN0Qm94T3B0aW9uUm9sZSk7CisgICAgICAgb2JqZWN0LT5yZWYoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gb2JqZWN0OworfQorCiAvLyBVc2VkIHRvIHByb3ZpZGUgY29uc3QgY2hhciog
cmV0dXJucy4KIHN0YXRpYyBjb25zdCBjaGFyKiByZXR1cm5TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHIpCiB7CkBAIC00NCw2ICs2Myw0MCBAQCBzdGF0aWMgY29uc3QgY2hhciogcmV0dXJuU3RyaW5n
KGNvbnN0IFN0CiAgICAgcmV0dXJuIHJldHVybmVkU3RyaW5nLmRhdGEoKTsKIH0KIAorLy8gVXNl
ZCB0byBwcm92aWRlIGNoYXIqIHJldHVybnMsIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCitz
dGF0aWMgY2hhciogY29weVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4g
Z19zdHJkdXAoc3RyLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdGF0aWMgR1NMaXN0KiBsaXN0UHJl
cGVuZChHU0xpc3QqIGxpc3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBBdGtBdHRyaWJ1dGUqIGF0dHIgPSByZWludGVycHJldF9jYXN0PEF0a0F0dHJp
YnV0ZSo+KGdfbWFsbG9jKHNpemVvZihBdGtBdHRyaWJ1dGUpKSk7CisgICAgYXR0ci0+bmFtZSA9
IGNvcHlTdHJpbmcobmFtZSk7CisgICAgYXR0ci0+dmFsdWUgPSBjb3B5U3RyaW5nKHZhbHVlKTsK
KyAgICByZXR1cm4gZ19zbGlzdF9wcmVwZW5kKGxpc3QsIGF0dHIpOworfQorCitzdGF0aWMgYm9v
bCBzZWxlY3RUZXh0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGludCBzdGFydF9w
b3MsIGludCBlbmRfcG9zKQoreworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2Vi
Q29yZQorICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFu
Z2Uoc3RhcnRfcG9zLCBlbmRfcG9zIC0gc3RhcnRfcG9zKSk7CisgICAgLy9jb3JlT2JqZWN0LT5z
ZXRTZWxlY3RlZFRleHQoU3RyaW5nKCkpOworCisgICAgY29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0
cnVlKTsKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uo
c3RhcnRfcG9zLCBlbmRfcG9zIC0gc3RhcnRfcG9zKSkpOworCisgICAgcmV0dXJuIHRydWU7IC8v
PworfQorCitzdGF0aWMgYm9vbCBzZWxlY3RUZXh0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QsIGludCBwb3MpCit7CisgICAgcmV0dXJuIHNlbGVjdFRleHQoY29yZU9iamVjdCwgcG9z
LCBwb3MpOworfQorCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShXZWJLaXRBY2Nl
c3NpYmxlKiBhY2Nlc3NpYmxlKQogewogICAgIGlmICghYWNjZXNzaWJsZSkKQEAgLTYwLDExICsx
MTMsMjYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrT2JqZQogICAgIHJl
dHVybiBjb3JlKFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCkpOwogfQogCitzdGF0aWMgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZShBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKK3sKKyAgICByZXR1
cm4gY29yZShBVEtfT0JKRUNUKGNvbXBvbmVudCkpOworfQorCiBzdGF0aWMgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZShBdGtBY3Rpb24qIGFjdGlvbikKIHsKICAgICByZXR1cm4gY29yZShBVEtf
T0JKRUNUKGFjdGlvbikpOwogfQogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShB
dGtEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChkb2N1
bWVudCkpOworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtJbWFnZSog
aW1hZ2UpCit7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChpbWFnZSkpOworfQorCiBzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtTdHJlYW1hYmxlQ29udGVudCogc3RyZWFt
YWJsZSkKIHsKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHN0cmVhbWFibGUpKTsKQEAgLTgw
LDEyICsxNDgsNzkgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdAog
ICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwogfQogCitzdGF0aWMgSW50UG9pbnQg
Y29udGVudHNGcm9tQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3Jk
VHlwZSBjb29yZF90eXBlLCBnaW50IHgsIGdpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBwb3MoeCwg
eSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJh
bWVWaWV3KCk7CisgICAgaWYgKGZyYW1lVmlldykgeworICAgICAgICBzd2l0Y2ggKGNvb3JkX3R5
cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAgICAgcmV0dXJuIGZy
YW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb3MpOworICAgICAgICBjYXNlIEFUS19YWV9XSU5E
T1c6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvcyk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcG9zOworfQorCitzdGF0aWMgdm9pZCBj
b250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlw
ZSBjb29yZF90eXBlLCBJbnRSZWN0IHJlY3QsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRo
ID0gMCwgZ2ludCogaGVpZ2h0ID0gMCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNv
cmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisKKyAgICBpZiAoZnJhbWVWaWV3KSB7Cisj
aWYgUExBVEZPUk0oR1RLKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQg
Zm9yIGNvbmZ1c2luZyBjb29yZGluYXRlIGNvbnZlcnNpb25zCisgICAgICAgIC8vIHRoYXQgZG9u
J3Qgd29yayBpbiBXZWJDb3JlCisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZnJhbWVWaWV3
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCk7CisgICAgICAgIEdka1dpbmRvdyogd2lu
ID0gd2lkZ2V0LT53aW5kb3c7CisgICAgICAgIHN3aXRjaCAoY29vcmRfdHlwZSkgeworICAgICAg
ICBjYXNlIEFUS19YWV9TQ1JFRU46CisgICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHJlY3QpOworICAgICAgICAgICAgcmVjdC5tb3ZlKHdpZGdldC0+YWxsb2Nh
dGlvbi54LCB3aWRnZXQtPmFsbG9jYXRpb24ueSk7CisgICAgICAgICAgICBnaW50IG9yaWdpblgs
IG9yaWdpblk7CisgICAgICAgICAgICBnZGtfd2luZG93X2dldF9vcmlnaW4od2luLCAmb3JpZ2lu
WCwgJm9yaWdpblkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKG9yaWdpblgsIG9yaWdpblkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAgICAgICAg
ICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgICAgICAg
ICByZWN0Lm1vdmUod2lkZ2V0LT5hbGxvY2F0aW9uLngsIHdpZGdldC0+YWxsb2NhdGlvbi55KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorICAgICAgICBzd2l0Y2ggKGNv
b3JkX3R5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAgICAgcmVj
dCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZWN0ID0gZnJhbWVW
aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmICh4KQorICAgICAgICAqeCA9IHJlY3QueCgpOwor
ICAgIGlmICh5KQorICAgICAgICAqeSA9IHJlY3QueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAg
ICAgKndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWln
aHQgPSByZWN0LmhlaWdodCgpOworfQorCiBleHRlcm4gIkMiIHsKIAogc3RhdGljIGdwb2ludGVy
IHBhcmVudF9jbGFzcyA9IE5VTEw7CiAKK3N0YXRpYyBpbnQgZ1dyYXBwZXJDb3VudCA9IDA7CisK
IHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQoQXRrT2JqZWN0KiBvYmplY3QsIGdw
b2ludGVyIGRhdGEpCiB7CisgICAgZ1dyYXBwZXJDb3VudCsrOworICAgIHByaW50ZigiZ1dyYXBw
ZXJDb3VudCsrOiAlZFxuIiwgZ1dyYXBwZXJDb3VudCk7CisKICAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19BQ0NFU1NJQkxFKG9iamVjdCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0
YSk7CiAKQEAgLTEwMCwxNiArMjM1LDQ1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxl
X2ZpbmFsaXplKEcKICAgICAvLyBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIGNsZWFyIHRoZSByZXR1
cm4gYnVmZmVyLgogICAgIHJldHVyblN0cmluZyhTdHJpbmcoKSk7CiAKKyAgICBnV3JhcHBlckNv
dW50LS07CisgICAgcHJpbnRmKCJnV3JhcHBlckNvdW50LS06ICVkXG4iLCBnV3JhcHBlckNvdW50
KTsKKwogICAgIGlmIChHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKICAg
ICAgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0K
IAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShBdGtPYmpl
Y3QqIG9iamVjdCkKIHsKKyAgICAvL05vdGU6IGF0a19vYmplY3Rfc2V0X25hbWUoKSByYWlzZXMg
YSBjaGFuZ2Ugc2lnbmFsCisKKyAgICBTdHJpbmcgY3VyclZhbHVlID0gU3RyaW5nOjpmcm9tVVRG
OChvYmplY3QtPm5hbWUpOworICAgIFN0cmluZyBuZXdWYWx1ZSA9IGNvcmUob2JqZWN0KS0+dGl0
bGUoKTsKKworICAgIGlmIChuZXdWYWx1ZSAhPSBjdXJyVmFsdWUpIHsKKyAgICAgICAgZ19mcmVl
KG9iamVjdC0+bmFtZSk7CisgICAgICAgIG9iamVjdC0+bmFtZSA9IGNvcHlTdHJpbmcobmV3VmFs
dWUpOworICAgIH0KKworICAgIHJldHVybiBvYmplY3QtPm5hbWU7CisKKyNpZiAwCisgICAgU3Ry
aW5nIGN1cnJOYW1lID0gU3RyaW5nOjpmcm9tVVRGOChvYmplY3QtPm5hbWUpOworCisgICAgaWYg
KGNvcmUob2JqZWN0KS0+dGl0bGUoKSAhPSBjdXJyTmFtZSkgeworICAgICAgICBpZiAob2JqZWN0
LT5uYW1lKQorICAgICAgICAgICAgcHJpbnRmKCJyZW5hbWUgZm9yICVkOiAnJXMnIHRvICclcydc
biIsIG9iamVjdCwgb2JqZWN0LT5uYW1lLCBjb3JlKG9iamVjdCktPnRpdGxlKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIGF0a19vYmplY3Rfc2V0X25hbWUob2JqZWN0LCBjb3JlKG9iamVjdCkt
PnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdC0+bmFt
ZTsKKyNlbmRpZgorCisjaWYgMAogICAgIC8vIFRPRE86IERlYWwgd2l0aCBsYXRlciBjaGFuZ2Vz
LgogICAgIGlmICghb2JqZWN0LT5uYW1lKQogICAgICAgICBhdGtfb2JqZWN0X3NldF9uYW1lKG9i
amVjdCwgY29yZShvYmplY3QpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBv
YmplY3QtPm5hbWU7CisjZW5kaWYKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNj
ZXNzaWJsZV9nZXRfZGVzY3JpcHRpb24oQXRrT2JqZWN0KiBvYmplY3QpCkBAIC0xMTcsMTUgKzI4
MSwyNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2dlCiAgICAgLy8g
VE9ETzogdGhlIE1vemlsbGEgTVNBQSBpbXBsZW1lbnRhdGlvbiBwcmVwZW5kcyAiRGVzY3JpcHRp
b246ICIKICAgICAvLyBTaG91bGQgd2UgZG8gdGhpcyB0b28/CiAKKyAgICBTdHJpbmcgY3VyclZh
bHVlID0gU3RyaW5nOjpmcm9tVVRGOChvYmplY3QtPmRlc2NyaXB0aW9uKTsKKyAgICBTdHJpbmcg
bmV3VmFsdWUgPSBjb3JlKG9iamVjdCktPmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOworCisg
ICAgaWYgKG5ld1ZhbHVlICE9IGN1cnJWYWx1ZSkgeworICAgICAgICBnX2ZyZWUob2JqZWN0LT5k
ZXNjcmlwdGlvbik7CisgICAgICAgIG9iamVjdC0+ZGVzY3JpcHRpb24gPSBjb3B5U3RyaW5nKG5l
d1ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqZWN0LT5kZXNjcmlwdGlvbjsKKworI2lm
IDAKICAgICAvLyBUT0RPOiBEZWFsIHdpdGggbGF0ZXIgY2hhbmdlcy4KICAgICBpZiAoIW9iamVj
dC0+ZGVzY3JpcHRpb24pCiAgICAgICAgIGF0a19vYmplY3Rfc2V0X2Rlc2NyaXB0aW9uKG9iamVj
dCwgY29yZShvYmplY3QpLT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
KTsKICAgICByZXR1cm4gb2JqZWN0LT5kZXNjcmlwdGlvbjsKKyNlbmRpZgogfQogCiBzdGF0aWMg
QXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcGFyZW50KEF0a09iamVjdCogb2JqZWN0
KQogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVQYXJlbnQgPSBjb3JlKG9iamVjdCkt
PnBhcmVudE9iamVjdCgpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVQYXJlbnQgPSBj
b3JlKG9iamVjdCktPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwogCiAgICAgaWYgKCFjb3JlUGFy
ZW50KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzNSwxOCArMzExLDM5IEBAIHN0YXRpYyBB
dGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF8KIAogc3RhdGljIGdpbnQgd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X25fY2hpbGRyZW4oQXRrT2JqZWN0KiBvYmplY3QpCiB7CisgICAgLy8gVE9E
TzogVmVyaWZ5CisgICAgaWYgKCFjb3JlKG9iamVjdCktPmlzTG9hZGVkKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gSGFjayBmb3IgZGVidWcKKyAgICAvL2lmIChjb3JlKG9iamVjdCkt
PnJvbGVWYWx1ZSgpID09IFN0YXRpY1RleHRSb2xlKQorICAgIC8vICAgIHJldHVybiAwOworI2lm
IDAKKyAgICBzd2l0Y2ggKGNvcmUob2JqZWN0KS0+cm9sZVZhbHVlKCkpIHsKKyAgICBjYXNlIExp
bmtSb2xlOgorICAgIGNhc2UgV2ViQ29yZUxpbmtSb2xlOgorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisjZW5kaWYKKwogICAgIHJldHVybiBjb3JlKG9iamVjdCktPmNoaWxkcmVuKCkuc2l6ZSgp
OwogfQogCitzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50
KEF0a09iamVjdCogb2JqZWN0KTsKKwogc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2li
bGVfcmVmX2NoaWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQogeworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGluZGV4ID49IDAsIE5VTEwpOworCiAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKIAotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGluZGV4ID49IDAsIE5VTEwpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0YXRpY19j
YXN0PHNpemVfdD4oaW5kZXgpIDwgY29yZU9iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCksIE5VTEwp
OworICAgIGlmICghY29yZU9iamVjdC0+aXNMb2FkZWQoKSkgLy9nb29kIGlkZWE/CisgICAgICAg
IHJldHVybiBOVUxMOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY29y
ZU9iamVjdC0+Y2hpbGRyZW4oKS5hdChpbmRleCkuZ2V0KCk7CisgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+JiBjaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxk
cmVuKCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRl
eCkgPCBjaGlsZHJlbi5zaXplKCksIE5VTEwpOwogCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZUNoaWxkID0gY2hpbGRyZW5baW5kZXhdLmdldCgpOwogICAgIGlmICghY29yZUNoaWxkKQog
ICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTU1LDk5ICszNTIsNDA2IEBAIHN0YXRpYyBBdGtP
YmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl8KICAgICAvL2F0a19vYmplY3Rfc2V0X3BhcmVu
dChjaGlsZCwgb2JqZWN0KTsKICAgICBnX29iamVjdF9yZWYoY2hpbGQpOwogCisgICAgLy9wcmlu
dGYoInJlcXVlc3RlZCAlZCwgYWN0dWFsOiAlZFxuIiwgaW5kZXgsIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9pbmRleF9pbl9wYXJlbnQoY2hpbGQpKTsKKwogICAgIHJldHVybiBjaGlsZDsKIH0KIAor
I2lmIDAKK3N0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9jaGlsZChBdGtP
YmplY3QqIG9iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaW5k
ZXggPj0gMCwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaW5kZXggPCBjb3JlT2Jq
ZWN0LT5jaGlsZHJlbigpLnNpemUoKSwgTlVMTCk7CisKKyAgICBpbnQgaSA9IDA7CisgICAgZm9y
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjb3JlT2JqZWN0LT5maXJzdENoaWxk
KCk7IGNvcmVDaGlsZDsgY29yZUNoaWxkID0gY29yZUNoaWxkLT5uZXh0U2libGluZygpKSB7Cisg
ICAgICAgIGlmIChjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChpID09IGluZGV4KSB7CisgICAgICAgICAgICBn
X29iamVjdF9yZWYoY29yZUNoaWxkLT53cmFwcGVyKCkpOworICAgICAgICAgICAgcmV0dXJuIGNv
cmVDaGlsZC0+d3JhcHBlcigpOworICAgICAgICAgICAgcHJpbnRmKCJyZXF1ZXN0ZWQgJWQsIGFj
dHVhbDogJWRcbiIsIGluZGV4LCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50
KGNvcmVDaGlsZC0+d3JhcHBlcigpKSk7CisgICAgICAgIH0KKworICAgICAgICBpKys7CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKwogc3RhdGljIGdpbnQgd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudChBdGtPYmplY3QqIG9iamVjdCkKIHsKLSAgICAv
LyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOworICAgIHByaW50Zigid2Via2l0X2FjY2Vzc2libGVfZ2V0X2lu
ZGV4X2luX3BhcmVudCgpICVwXG4iLCBvYmplY3QpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHBhcmVudCA9IGNvcmUob2JqZWN0KS0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisKKyAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCFwYXJlbnQtPmlzTG9h
ZGVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gPiYgY2hpbGRyZW4gPSBwYXJlbnQtPmNoaWxkcmVuKCk7CisKKyAg
ICB1bnNpZ25lZCBjb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmdldCgpID09IGNv
cmVPYmplY3QpCisgICAgICAgIC8vaWYgKGNoaWxkcmVuW2ldLT53cmFwcGVyKCkgPT0gb2JqZWN0
KQorICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBB
dGtSZWxhdGlvblNldCogd2Via2l0X2FjY2Vzc2libGVfcmVmX3JlbGF0aW9uX3NldChBdGtPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICAvL3ByaW50Zigid2Via2l0X2FjY2Vzc2libGVfcmVmX3JlbGF0
aW9uX3NldCgpICVkXG4iLCBvYmplY3QpOworCisgICAgQXRrUmVsYXRpb25TZXQqIHJlbGF0aW9u
U2V0ID0gQVRLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWZfcmVsYXRpb25fc2V0KG9i
amVjdCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0
KTsKKworICAgIEF0a1JlbGF0aW9uKiByZWxhdGlvbjsKKyAgICAvL0F0a09iamVjdCogdGFyZ2V0
c1sxXTsKKworICAgIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb25fYnlf
dHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKTsKKyAgICBpZiAocmVs
YXRpb24pCisgICAgICAgIGF0a19yZWxhdGlvbl9zZXRfcmVtb3ZlKHJlbGF0aW9uU2V0LCByZWxh
dGlvbik7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZU9iamVjdCA9IGNvcmVPYmpl
Y3QtPnRpdGxlVUlFbGVtZW50KCk7CisgICAgaWYgKHRpdGxlT2JqZWN0KSB7CisgICAgICAgIGF0
a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxB
VElPTl9MQUJFTExFRF9CWSwgdGl0bGVPYmplY3QtPndyYXBwZXIoKSk7CisjaWYgMAorICAgICAg
ICB0YXJnZXRzWzBdID0gdGl0bGVPYmplY3QtPndyYXBwZXIoKTsKKyAgICAgICAgcmVsYXRpb24g
PSBhdGtfcmVsYXRpb25fbmV3KHRhcmdldHMsIDEsIEFUS19SRUxBVElPTl9MQUJFTExFRF9CWSk7
CisgICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkKHJlbGF0aW9uU2V0LCByZWxhdGlvbik7Cisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKHJlbGF0aW9uKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJl
dHVybiByZWxhdGlvblNldDsKIH0KIAogc3RhdGljIEF0a1JvbGUgYXRrUm9sZShBY2Nlc3NpYmls
aXR5Um9sZSByb2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNhc2UgV2ViQ29yZTo6
QnV0dG9uUm9sZToKKyAgICBjYXNlIFVua25vd25Sb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JP
TEVfVU5LTk9XTjsKKyAgICBjYXNlIEJ1dHRvblJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9M
RV9QVVNIX0JVVFRPTjsKLSAgICBjYXNlIFdlYkNvcmU6OlJhZGlvQnV0dG9uUm9sZToKKyAgICBj
YXNlIFJhZGlvQnV0dG9uUm9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1JBRElPX0JVVFRP
TjsKLSAgICBjYXNlIFdlYkNvcmU6OkNoZWNrQm94Um9sZToKKyAgICBjYXNlIENoZWNrQm94Um9s
ZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NIRUNLX0JPWDsKLSAgICBjYXNlIFdlYkNvcmU6
OlNsaWRlclJvbGU6CisgICAgY2FzZSBTbGlkZXJSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JP
TEVfU0xJREVSOwotICAgIGNhc2UgV2ViQ29yZTo6VGFiR3JvdXBSb2xlOgorICAgIGNhc2UgVGFi
R3JvdXBSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfUEFHRV9UQUJfTElTVDsKLSAgICBj
YXNlIFdlYkNvcmU6OlRleHRGaWVsZFJvbGU6Ci0gICAgY2FzZSBXZWJDb3JlOjpUZXh0QXJlYVJv
bGU6Ci0gICAgY2FzZSBXZWJDb3JlOjpMaXN0TWFya2VyUm9sZToKKyAgICBjYXNlIFRleHRGaWVs
ZFJvbGU6CisgICAgY2FzZSBUZXh0QXJlYVJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9F
TlRSWTsKLSAgICBjYXNlIFdlYkNvcmU6OlN0YXRpY1RleHRSb2xlOgotICAgICAgICByZXR1cm4g
QVRLX1JPTEVfVEVYVDsgLy8/Ci0gICAgY2FzZSBXZWJDb3JlOjpPdXRsaW5lUm9sZToKKyAgICBj
YXNlIFN0YXRpY1RleHRSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKKyAgICBj
YXNlIE91dGxpbmVSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfVFJFRTsKLSAgICBjYXNl
IFdlYkNvcmU6OkNvbHVtblJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOyAv
Lz8KLSAgICBjYXNlIFdlYkNvcmU6OlJvd1JvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9M
SVNUX0lURU07Ci0gICAgY2FzZSBXZWJDb3JlOjpHcm91cFJvbGU6Ci0gICAgICAgIHJldHVybiBB
VEtfUk9MRV9VTktOT1dOOyAvLz8KLSAgICBjYXNlIFdlYkNvcmU6Okxpc3RSb2xlOgorICAgIGNh
c2UgTWVudUJhclJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VX0JBUjsKKyAgICBj
YXNlIE1lbnVSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVTsKKyAgICBjYXNlIE1l
bnVJdGVtUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlVfSVRFTTsKKyAgICBjYXNl
IENvbHVtblJvbGU6CisgICAgICAgIC8vcmV0dXJuIEFUS19ST0xFX1RBQkxFX0NPTFVNTl9IRUFE
RVI7IC8vPworICAgICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9XTjsgLy8gTWF0Y2hlcyBNb3pp
bGxhCisgICAgY2FzZSBSb3dSb2xlOgorICAgICAgICAvL3JldHVybiBBVEtfUk9MRV9UQUJMRV9S
T1dfSEVBREVSOyAvLz8KKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1RfSVRFTTsgLy8gTWF0
Y2hlcyBNb3ppbGxhCisgICAgY2FzZSBUb29sYmFyUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19S
T0xFX1RPT0xfQkFSOworICAgIGNhc2UgQnVzeUluZGljYXRvclJvbGU6CisgICAgICAgIHJldHVy
biBBVEtfUk9MRV9QUk9HUkVTU19CQVI7IC8vPworICAgIGNhc2UgUHJvZ3Jlc3NJbmRpY2F0b3JS
b2xlOgorICAgICAgICAvL3JldHVybiBBVEtfUk9MRV9TUElOX0JVVFRPTjsgLy9Tb21lIGNvbmZ1
c2lvbiBoZXJlIGluIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisgICAgICAgIHJldHVy
biBBVEtfUk9MRV9QUk9HUkVTU19CQVI7CisgICAgY2FzZSBXaW5kb3dSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfV0lORE9XOworICAgIGNhc2UgQ29tYm9Cb3hSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfQ09NQk9fQk9YOworICAgIGNhc2UgU3BsaXRHcm91cFJvbGU6CisgICAg
ICAgIHJldHVybiBBVEtfUk9MRV9TUExJVF9QQU5FOworICAgIGNhc2UgU3BsaXR0ZXJSb2xlOgor
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VQQVJBVE9SOworICAgIGNhc2UgQ29sb3JXZWxsUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTE9SX0NIT09TRVI7CisgICAgY2FzZSBMaXN0
Um9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7Ci0gICAgY2FzZSBXZWJDb3JlOjpU
YWJsZVJvbGU6CisgICAgY2FzZSBTY3JvbGxCYXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JP
TEVfU0NST0xMX0JBUjsKKyAgICBjYXNlIEdyaWRSb2xlOiAvLz8KKyAgICBjYXNlIFRhYmxlUm9s
ZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RBQkxFOwotICAgIGNhc2UgV2ViQ29yZTo6TGlu
a1JvbGU6Ci0gICAgY2FzZSBXZWJDb3JlOjpXZWJDb3JlTGlua1JvbGU6CisgICAgY2FzZSBBcHBs
aWNhdGlvblJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9BUFBMSUNBVElPTjsKKyAgICAv
L2Nhc2UgTGFiZWxSb2xlOiAvLyBUT0RPOiBhZGQgTGFiZWxSb2xlPworICAgIC8vICAgIHJldHVy
biBBVEtfUk9MRV9MQUJFTDsKKyAgICBjYXNlIEdyb3VwUm9sZToKKyAgICBjYXNlIFJhZGlvR3Jv
dXBSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfUEFORUw7CisgICAgY2FzZSBDZWxsUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RBQkxFX0NFTEw7CisgICAgY2FzZSBMaW5rUm9s
ZToKKyAgICBjYXNlIFdlYkNvcmVMaW5rUm9sZToKKyAgICBjYXNlIEltYWdlTWFwTGlua1JvbGU6
CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9MSU5LOwotICAgIGNhc2UgV2ViQ29yZTo6SW1hZ2VN
YXBSb2xlOgotICAgIGNhc2UgV2ViQ29yZTo6SW1hZ2VSb2xlOgorICAgIGNhc2UgSW1hZ2VNYXBS
b2xlOgorICAgIGNhc2UgSW1hZ2VSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfSU1BR0U7
CisgICAgY2FzZSBMaXN0TWFya2VyUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1JPV19I
RUFERVI7CisgICAgY2FzZSBXZWJBcmVhUm9sZToKKyAgICAgICAgLy9yZXR1cm4gQVRLX1JPTEVf
SFRNTF9DT05UQUlORVI7IC8vPworICAgICAgICByZXR1cm4gQVRLX1JPTEVfRE9DVU1FTlRfRlJB
TUU7CisgICAgY2FzZSBIZWFkaW5nUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0hFQURJ
Tkc7CisgICAgY2FzZSBMaXN0Qm94Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7
CisgICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJ
U1RfSVRFTTsKICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoInVucmVjb2duaXNlZCBhMTF5
IHJvbGU6ICVkXG4iLCByb2xlKTsKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047CiAg
ICAgfQogfQogCiBzdGF0aWMgQXRrUm9sZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcm9sZShBdGtP
YmplY3QqIG9iamVjdCkKIHsKKyAgICAvL2lmIChjb3JlKG9iamVjdCktPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkKKyAgICAvLyAgICByZXR1cm4gQVRLX1JPTEVfUkVEVU5EQU5UX09CSkVDVDsg
Ly8/CisKKyAgICAvLyBIYWNrIGZvciBkZWJ1ZworICAgIC8vaWYgKGNvcmUob2JqZWN0KS0+cm9s
ZVZhbHVlKCkgPT0gU3RhdGljVGV4dFJvbGUpCisgICAgLy8gICAgcmV0dXJuIEFUS19ST0xFX1JF
RFVOREFOVF9PQkpFQ1Q7CisKICAgICByZXR1cm4gYXRrUm9sZShjb3JlKG9iamVjdCktPnJvbGVW
YWx1ZSgpKTsKIH0KIAorc3RhdGljIEVsZW1lbnQqIGdldEVsZW1lbnQoQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihvYmplY3QpLT5yZW5kZXJl
cigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiAwOworICAgIE5vZGUqIG5v
ZGUgPSByZW5kZXJlci0+ZWxlbWVudCgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpOworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfYXR0cmlidXRlcyhBdGtPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworICAgIEF0a0F0dHJpYnV0ZVNl
dCogYXR0cnMgPSBOVUxMOworCisgICAgLy8gVGhpcyBpcyBoZXJlIHRvIGhlbHAgd2l0aCBkZWJ1
Z2dpbmcgb25seS4KKyAgICBpZiAoY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQorICAgICAgICBhdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAiaWdub3JlZCIsICJ0cnVlIik7
CisKKyAgICBpZiAoRWxlbWVudCogZWx0ID0gZ2V0RWxlbWVudChjb3JlT2JqZWN0KSkKKyAgICAg
ICAgYXR0cnMgPSBsaXN0UHJlcGVuZChhdHRycywgInRhZyIsIGVsdC0+dGFnTmFtZSgpKTsKKwor
ICAgIC8vIEZvciBkZWJ1Z2dpbmcKKyAgICAvL2F0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsICJh
dGstcm9sZSIsIGF0a19yb2xlX2dldF9uYW1lKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xlKG9i
amVjdCkpKTsKKyAgICAvL2F0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsICJ3ZWJjb3JlLXJvbGUi
LCBTdHJpbmc6Om51bWJlcihjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSkpOworICAgIC8vYXR0cnMg
PSBsaXN0UHJlcGVuZChhdHRycywgImlzRGF0YVRhYmxlIiwgY29yZU9iamVjdC0+aXNEYXRhVGFi
bGUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisgICAgcmV0dXJuIGF0dHJzOworfQorCitzdGF0
aWMgQXRrU3RhdGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9zdGF0ZV9zZXQoQXRrT2JqZWN0
KiBvYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUo
b2JqZWN0KTsKKyAgICBBdGtTdGF0ZVNldCogc3RhdGVTZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHBh
cmVudF9jbGFzcyktPnJlZl9zdGF0ZV9zZXQob2JqZWN0KTsKKworICAgIGlmIChjb3JlT2JqZWN0
ID09IGZhbGxiYWNrT2JqZWN0KCkpIHsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVTZXQsIEFUS19TVEFURV9ERUZVTkNUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlU2V0Owor
ICAgIH0KKworICAgIC8vIFRPRE86IFN1cHBvcnQgQVRLX1NUQVRFX09QQVFVRQorICAgIC8vYXRr
X3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9PUEFRVUUpOworCisgICAg
Ly8gVGhlc2UgdGhyZXNob2xkcyBhcmUganVzdCBhIGd1ZXNzLgorICAgIEludFJlY3QgcmVjdCA9
IGNvcmVPYmplY3QtPmVsZW1lbnRSZWN0KCk7CisgICAgaWYgKHJlY3Qud2lkdGgoKSA+IHJlY3Qu
aGVpZ2h0KCkgKiAxLjIpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0
LCBBVEtfU1RBVEVfSE9SSVpPTlRBTCk7CisgICAgZWxzZSBpZiAocmVjdC5oZWlnaHQoKSA+IHJl
Y3Qud2lkdGgoKSAqIDEuMikKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9WRVJUSUNBTCk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2Vk
KCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Q0hFQ0tFRCk7CisKKyAgICAvLyBTRU5TSVRJVkUgc2hvdWxkIGFjdHVhbGx5IGJlIHNsaWdodGx5
IGRpZmZlcmVudCB0byBFTkFCTEVELgorICAgIC8vIFNlZSB0aGUgQVRLIGRvY3MuCisgICAgaWYg
KGNvcmVPYmplY3QtPmlzRW5hYmxlZCgpKSB7CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0
YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRU5BQkxFRCk7CisgICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0VOU0lUSVZFKTsKKyAgICB9CisKKyAgICBp
ZiAoY29yZU9iamVjdC0+aXNTZWxlY3RlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9z
dGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKKworICAgIGlmIChjb3JlT2JqZWN0
LT5pc0ZvY3VzZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQs
IEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc0luZGV0ZXJtaW5h
dGUoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFU
RV9JTkRFVEVSTUlOQVRFKTsKKworICAgIGlmICghY29yZU9iamVjdC0+aXNMb2FkZWQoKSkKKyAg
ICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9CVVNZKTsK
KworICAgIC8vIElzIHRoaXMgcmlnaHQ/IEFwcGFyZW50bHkgbmVlZGVkIGZvciBhY3RpdmUtZGVz
Y2VuZGFudC1jaGFuZ2VkCisgICAgLy9pZiAoY29yZU9iamVjdC0+YWN0aXZlRGVzY2VuZGFudCgp
KQorICAgIC8vICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
TUFOQUdFU19ERVNDRU5EQU5UUyk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNNdWx0aVNlbGVj
dCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRF
X01VTFRJU0VMRUNUQUJMRSk7CisKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzT2ZmU2NyZWVuKCkp
CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0hP
V0lORyk7CisKKyAgICAvLyBBbGwgaW52aXNpYmxlIG9iamVjdHMgYXJlIGN1cnJlbnRseSBpZ25v
cmVkCisgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJ
QkxFKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc1ByZXNzZWQoKSkKKyAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9QUkVTU0VEKTsKKworICAgIGlm
IChjb3JlT2JqZWN0LT5pc0ZvY3VzZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3Rh
dGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIGlmICghY29yZU9iamVjdC0+
aXNSZWFkT25seSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwg
QVRLX1NUQVRFX0VESVRBQkxFKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Zpc2l0ZWQoKSkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJ
VEVEKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQorICAg
ICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJM
RSk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGV4dEZpZWxkUm9sZSkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TSU5H
TEVfTElORSk7CisgICAgZWxzZSBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGV4dEFy
ZWFSb2xlKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX01VTFRJX0xJTkUpOworCisgICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTEVDVEFCTEVfVEVY
VAorCisgICAgcmV0dXJuIHN0YXRlU2V0OworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNz
aWJsZV9jbGFzc19pbml0KEF0a09iamVjdENsYXNzKiBrbGFzcykKIHsKICAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgQXRrT2JqZWN0
Q2xhc3MqIGF0a19jbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwogCiAgICAgcGFyZW50
X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50KGtsYXNzKTsKIAotICAgIGtsYXNzLT5p
bml0aWFsaXplID0gd2Via2l0X2FjY2Vzc2libGVfaW5pdDsKKyAgICBhdGtfY2xhc3MtPmluaXRp
YWxpemUgPSB3ZWJraXRfYWNjZXNzaWJsZV9pbml0OworICAgIGF0a19jbGFzcy0+Z2V0X25hbWUg
PSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZTsKKyAgICBhdGtfY2xhc3MtPmdldF9kZXNjcmlw
dGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9kZXNjcmlwdGlvbjsKKyAgICBhdGtfY2xhc3Mt
PmdldF9wYXJlbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcGFyZW50OworICAgIGF0a19jbGFz
cy0+Z2V0X25fY2hpbGRyZW4gPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbl9jaGlsZHJlbjsKKyAg
ICBhdGtfY2xhc3MtPnJlZl9jaGlsZCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9jaGlsZDsKKyAg
ICBhdGtfY2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRf
aW5kZXhfaW5fcGFyZW50OworICAgIGF0a19jbGFzcy0+cmVmX3JlbGF0aW9uX3NldCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlvbl9zZXQ7CisgICAgYXRrX2NsYXNzLT5nZXRfcm9sZSA9
IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xlOworICAgIGF0a19jbGFzcy0+Z2V0X2F0dHJpYnV0
ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYXR0cmlidXRlczsKKyAgICBhdGtfY2xhc3MtPnJl
Zl9zdGF0ZV9zZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfc3RhdGVfc2V0OwogCiAgICAgZ29i
amVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfYWNjZXNzaWJsZV9maW5hbGl6ZTsKK30KKwor
Ly8gQ29tcG9uZW50CiAKLSAgICBrbGFzcy0+Z2V0X25hbWUgPSB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfbmFtZTsKLSAgICBrbGFzcy0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVf
Z2V0X2Rlc2NyaXB0aW9uOwotICAgIGtsYXNzLT5nZXRfcGFyZW50ID0gd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X3BhcmVudDsKLSAgICBrbGFzcy0+Z2V0X25fY2hpbGRyZW4gPSB3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfbl9jaGlsZHJlbjsKLSAgICBrbGFzcy0+cmVmX2NoaWxkID0gd2Via2l0X2FjY2Vz
c2libGVfcmVmX2NoaWxkOwotICAgIC8va2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJr
aXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50OwotICAgIGtsYXNzLT5nZXRfcm9sZSA9
IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xlOwotICAgIC8va2xhc3MtPmdldF9hdHRyaWJ1dGVz
ID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXM7Ci0gICAgLy9rbGFzcy0+cmVmX3N0
YXRlX3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9zdGF0ZV9zZXQ7Ci0gICAgLy9rbGFzcy0+
cmVmX3JlbGF0aW9uX3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlvbl9zZXQ7Citz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2li
bGVfYXRfcG9pbnQoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBBdGtD
b29yZFR5cGUgY29vcmRfdHlwZSkKK3sKKyAgICBJbnRQb2ludCBwb3MgPSBjb250ZW50c0Zyb21B
dGsoY29yZShjb21wb25lbnQpLCBjb29yZF90eXBlLCB4LCB5KTsKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiB0YXJnZXQgPSBjb3JlKGNvbXBvbmVudCktPmRvQWNjZXNzaWJpbGl0eUhpdFRlc3Qo
cG9zKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZ19vYmpl
Y3RfcmVmKHRhcmdldC0+d3JhcHBlcigpKTsKKyAgICByZXR1cm4gdGFyZ2V0LT53cmFwcGVyKCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50
cyhBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgs
IGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkX3R5cGUpCit7CisgICAgSW50UmVjdCBy
ZWN0ID0gY29yZShjb21wb25lbnQpLT5lbGVtZW50UmVjdCgpOworICAgIGNvbnRlbnRzVG9BdGso
Y29yZShjb21wb25lbnQpLCBjb29yZF90eXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2Zv
Y3VzKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQoreworICAgIGNvcmUoY29tcG9uZW50KS0+c2V0
Rm9jdXNlZCh0cnVlKTsKKyAgICByZXR1cm4gY29yZShjb21wb25lbnQpLT5pc0ZvY3VzZWQoKTsK
K30KKworc3RhdGljIHZvaWQgYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdChBdGtDb21wb25l
bnRJZmFjZSogaWZhY2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChpZmFjZSk7CisKKyAgICBp
ZmFjZS0+cmVmX2FjY2Vzc2libGVfYXRfcG9pbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25l
bnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQ7CisgICAgaWZhY2UtPmdldF9leHRlbnRzID0gd2Vi
a2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9leHRlbnRzOworICAgIGlmYWNlLT5ncmFiX2Zv
Y3VzID0gd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dyYWJfZm9jdXM7CiB9CiAKKy8vIEFj
dGlvbgorCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2RvX2FjdGlv
bihBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGkgPT0gMCwgRkFMU0UpOworICAgIC8vZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaSA9PSAwLCBGQUxT
RSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUoYWN0aW9uKTsK
KworICAgIGlmIChjb3JlT2JqZWN0LT5hY3Rpb25FbGVtZW50KCkpCisgICAgICAgIHN3aXRjaCAo
aSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gY29yZShhY3Rpb24pLT5w
cmVzcygpOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAvLyBUT0RPOiBzaG93IG1lbnUK
KyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgaWYgKGNvcmVPYmpl
Y3QtPmlzTWVudVJlbGF0ZWQoKSkKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2Ug
MDoKKyAgICAgICAgICAgIC8vIFRPRE86IGNhbmNlbAorICAgICAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gY29yZShhY3Rpb24pLT5wcmVz
cygpOworICAgICAgICB9CisKKyAgICAvLyBUT0RPOiBzaG91bGQgYmUgc2hvdyBtZW51PwogICAg
IHJldHVybiBjb3JlKGFjdGlvbiktPnBlcmZvcm1EZWZhdWx0QWN0aW9uKCk7CiB9CiAKIHN0YXRp
YyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbl9hY3Rpb25zKEF0a0FjdGlvbiog
YWN0aW9uKQogeworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKGFj
dGlvbik7CisKKyAgICBpZiAoY29yZU9iamVjdC0+YWN0aW9uRWxlbWVudCgpKQorICAgICAgICBy
ZXR1cm4gMjsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCisgICAgICAg
IHJldHVybiAyOworCiAgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBjb25zdCBnY2hhciogd2Vi
a2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9kZXNjcmlwdGlvbihBdGtBY3Rpb24qIGFjdGlvbiwg
Z2ludCBpKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgTlVMTCk7CisgICAg
Ly9nX3JldHVybl92YWxfaWZfZmFpbChpID09IDAsIE5VTEwpOwogICAgIC8vIFRPRE86IE5lZWQg
YSB3YXkgdG8gcHJvdmlkZS9sb2NhbGl6ZSBhY3Rpb24gZGVzY3JpcHRpb25zLgogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuICIiOwpAQCAtMjU1LDE0ICs3NTksMTUgQEAgc3RhdGlj
IGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hYwogCiBzdGF0aWMgY29uc3QgZ2NoYXIq
IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfa2V5YmluZGluZyhBdGtBY3Rpb24qIGFjdGlv
biwgZ2ludCBpKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgTlVMTCk7Cisg
ICAgLy9nX3JldHVybl92YWxfaWZfZmFpbChpID09IDAsIE5VTEwpOwogICAgIC8vIEZJWE1FOiBD
b25zdHJ1Y3QgYSBwcm9wZXIga2V5YmluZGluZyBzdHJpbmcuCiAgICAgcmV0dXJuIHJldHVyblN0
cmluZyhjb3JlKGFjdGlvbiktPmFjY2Vzc0tleSgpLnN0cmluZygpKTsKIH0KIAogc3RhdGljIGNv
bnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X25hbWUoQXRrQWN0aW9uKiBh
Y3Rpb24sIGdpbnQgaSkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChpID09IDAsIE5VTEwp
OworICAgIC8vZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaSA9PSAwLCBOVUxMKTsKKwogICAgIHJldHVy
biByZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY3Rpb25WZXJiKCkpOwogfQogCkBAIC0yODEs
MzIgKzc4Niw4MyBAQCBzdGF0aWMgdm9pZCBhdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0KEF0CiAK
IHN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtUZXh0KiB0
ZXh0LCBnaW50IHN0YXJ0X29mZnNldCwgZ2ludCBlbmRfb2Zmc2V0KQogewotICAgIFN0cmluZyBy
ZXQgPSBjb3JlKHRleHQpLT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRf
b2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSk7Ci0gICAgLy8gVE9ETzogSW50ZW50
aW9uYWxseSBjb3BpZWQ/Ci0gICAgcmV0dXJuIGdfc3RyZHVwKHJldC51dGY4KCkuZGF0YSgpKTsK
KyAgICBwcmludGYoIndlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoKSAlZCAlZFxuIiwg
c3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0KTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIFN0cmluZyByZXQ7CisjaWYgMAorICAgIHJldCA9
IGNvcmUodGV4dCktPmRvQVhTdHJpbmdGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydF9vZmZz
ZXQsIGVuZF9vZmZzZXQgLSBzdGFydF9vZmZzZXQpKTsgLy88LSBmb3IgdGV4dCBjb250cm9scyBv
bmx5CisgICAgaWYgKCFyZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY29weVN0cmluZyhy
ZXQpOworI2VuZGlmCisKKyAgICAvL3JldCA9IGNvcmUodGV4dCktPnN0cmluZ0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvcmUodGV4dCktPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxh
aW5UZXh0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSkpOwor
CisgICAgLy9QbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShzdGFydF9v
ZmZzZXQsIGVuZF9vZmZzZXQgLSBzdGFydF9vZmZzZXQpOworICAgIC8vVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gY29yZSh0ZXh0KS0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JSYW5nZSh0ZXh0UmFuZ2UpOworICAgIC8vcmV0ID0gY29yZSh0ZXh0KS0+c3RyaW5nRm9yVmlz
aWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc1JhbmdlKTsKKworICAgIC8vVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0ID0gY29yZSh0ZXh0KS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnRfb2Zm
c2V0KTsKKyAgICAvL1Zpc2libGVQb3NpdGlvbiBlbmQgPSBjb3JlKHRleHQpLT52aXNpYmxlUG9z
aXRpb25Gb3JJbmRleChlbmRfb2Zmc2V0KTsKKyAgICAvL3JldCA9IGNvcmUodGV4dCktPnN0cmlu
Z0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQp
KTsKKworI2lmIDAKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3Qt
PnZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgaW50IGJhc2UgPSBjb3JlT2JqZWN0LT5pbmRl
eEZvclZpc2libGVQb3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAgcHJpbnRmKCJiYXNlOiAlZFxu
IiwgYmFzZSk7CisgICAgcmFuZ2Uuc3RhcnQgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25G
b3JJbmRleChiYXNlICsgc3RhcnRfb2Zmc2V0KTsKKyAgICByYW5nZS5lbmQgPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChiYXNlICsgZW5kX29mZnNldCk7CisgICAgcmFuZ2Ug
PSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyhy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKKyAgICByZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdGb3JW
aXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisjZW5kaWYKKworLy8jaWYgMAorICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHJhbmdlOworICAgIHJhbmdlLnN0YXJ0ID0gY29yZU9iamVjdC0+dmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnRfb2Zmc2V0KTsKKyAgICByYW5nZS5lbmQgPSBjb3Jl
T2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChlbmRfb2Zmc2V0KTsKKyAgICByZXQgPSBj
b3JlT2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisvLyNlbmRp
ZgorCisgICAgLy9yZXQgPSBjb3JlKHRleHQpLT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb3JlKHRleHQpLT52aXNpYmxlUG9zaXRpb25SYW5nZSgpKTsKKyAgICByZXR1cm4gY29weVN0
cmluZyhyZXQpOwogfQogCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3RleHRfYWZ0ZXJfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91
bmRhcnkgYm91bmRhcnlfdHlwZSwgZ2ludCogc3RhcnRfb2Zmc2V0LCBnaW50KiBlbmRfb2Zmc2V0
KQogeworICAgIHByaW50Zigid2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hZnRlcl9v
ZmZzZXQoKVxuIik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIC8vQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgLy9WaXNpYmxlUG9zaXRpb25S
YW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlKCk7CisKKyAgICAq
c3RhcnRfb2Zmc2V0ID0gMDsKKyAgICAqZW5kX29mZnNldCA9IDA7CiAgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIHN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eV90eXBlLCBnaW50KiBzdGFydF9vZmZzZXQsIGdpbnQqIGVuZF9vZmZzZXQpCiB7CisgICAgcHJp
bnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldCgpXG4iKTsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgICpzdGFydF9vZmZzZXQgPSAwOworICAgICplbmRfb2Zm
c2V0ID0gMDsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGd1bmljaGFyIHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBw
cmludGYoIndlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQoKVxu
Iik7CisgICAgU3RyaW5nIHJldCA9IGNvcmUodGV4dCktPmRvQVhTdHJpbmdGb3JSYW5nZShQbGFp
blRleHRSYW5nZShvZmZzZXQsIDEpKTsKKyAgICByZXR1cm4gcmV0WzBdOwogfQogCiBzdGF0aWMg
Z2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldChBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5X3R5cGUsIGdp
bnQqIHN0YXJ0X29mZnNldCwgZ2ludCogZW5kX29mZnNldCkKIHsKKyAgICBwcmludGYoIndlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCgpXG4iKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIC8vQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNv
cmUodGV4dCk7CisgICAgKnN0YXJ0X29mZnNldCA9IDA7CisgICAgKmVuZF9vZmZzZXQgPSAwOwog
ICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zMTYsMTQgKzg3Miw3NyBAQCBzdGF0aWMgZ2ludCB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jCiAgICAgcmV0dXJuIGNvcmUodGV4dCktPnNlbGVj
dGlvblN0YXJ0KCk7CiB9CiAKK3N0YXRpYyBHU0xpc3QqIGxpc3RQcmVwZW5kKEdTTGlzdCogbGlz
dCwgQXRrVGV4dEF0dHJpYnV0ZSBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0
dXJuIGxpc3RQcmVwZW5kKGxpc3QsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShrZXkpLCB2
YWx1ZSk7Cit9CisKIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBz
dGFydF9vZmZzZXQsIGdpbnQqIGVuZF9vZmZzZXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gTlVMTDsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZSh0ZXh0KTsKKworI2lmIDAKKyAgICAvL0ZJWE1FOiBpbmRleEZvclZpc2libGVQb3NpdGlv
biBpcyBvbmx5IGZvciBjb250cm9scz8KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9
IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgaW50IGEgPSBjb3JlT2Jq
ZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAgaW50IGIgPSBj
b3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihyYW5nZS5lbmQpOworICAgIFBhc3NS
ZWZQdHI8UmFuZ2U+IHJyID0gbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAg
IC8vcHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgYSwgYik7CisgICAg
cHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgcnItPnN0YXJ0T2Zmc2V0
KCksIHJyLT5lbmRPZmZzZXQoKSk7CisgICAgKnN0YXJ0X29mZnNldCA9IHJyLT5zdGFydE9mZnNl
dCgpOworICAgICplbmRfb2Zmc2V0ID0gcnItPmVuZE9mZnNldCgpOworI2VuZGlmCisKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChvZmZzZXQpOworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+
c3R5bGVSYW5nZUZvclBvc2l0aW9uKHN0YXJ0KTsKKyAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJyID0gbWFrZVJhbmdl
KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAgIC8vcHJpbnRmKCJhdHRycyByYW5nZSAlZDog
JWQgJWRcbiIsIG9mZnNldCwgYSwgYik7CisgICAgcHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQg
JWRcbiIsIG9mZnNldCwgcnItPnN0YXJ0T2Zmc2V0KCksIHJyLT5lbmRPZmZzZXQoKSk7CisgICAg
KnN0YXJ0X29mZnNldCA9IHJyLT5zdGFydE9mZnNldCgpOworICAgICplbmRfb2Zmc2V0ID0gcnIt
PmVuZE9mZnNldCgpOworCisjaWYgMAorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0g
Y29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2cmFuZ2UgPSBjb3JlT2JqZWN0LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24ocmFuZ2Uuc3Rh
cnQpOworCisgICAgLy9WaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBjb3JlT2JqZWN0LT52aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChvZmZzZXQpOworICAgIC8vVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnJh
bmdlID0gY29yZU9iamVjdC0+c3R5bGVSYW5nZUZvclBvc2l0aW9uKHN0YXJ0KTsKKyAgICAvL2lu
dCBhID0gY29yZU9iamVjdC0+aW5kZXgodnJhbmdlLnN0YXJ0KTsKKyAgICAvL2ludCBiID0gY29y
ZU9iamVjdC0+aW5kZXgodnJhbmdlLmVuZCk7CisgICAgaW50IGEgPSBjb3JlT2JqZWN0LT5pbmRl
eEZvclZpc2libGVQb3NpdGlvbih2cmFuZ2Uuc3RhcnQpOworICAgIGludCBiID0gY29yZU9iamVj
dC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odnJhbmdlLmVuZCk7CisgICAgcHJpbnRmKCJhdHRy
cyByYW5nZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgYSwgYik7CisgICAgKnN0YXJ0X29mZnNldCA9
IGE7CisgICAgKmVuZF9vZmZzZXQgPSBiOworI2VuZGlmCisKKyNpZiAwCisgICAgUGxhaW5UZXh0
UmFuZ2UgcHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFN0eWxlUmFuZ2VGb3JJbmRleChvZmZzZXQp
OworICAgIHByaW50ZigiYXR0cnMgcmFuZ2UgJWQ6ICVkICVkXG4iLCBvZmZzZXQsIHByYW5nZS5z
dGFydCwgcHJhbmdlLmxlbmd0aCk7CisgICAgKnN0YXJ0X29mZnNldCA9IHByYW5nZS5zdGFydDsK
KyAgICAqZW5kX29mZnNldCA9IHByYW5nZS5zdGFydCArIHByYW5nZS5sZW5ndGg7CisjZW5kaWYK
KworICAgIC8vVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgob2Zmc2V0KTsKKyAgICAvL1Zpc2libGVQb3NpdGlvbiBzdGFydCA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KG9mZnNldCk7CisgICAgLy9UZXh0SXRlcmF0
b3IgaXQobWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24p
LmdldCgpKTsKKworICAgIC8vcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5f
YXR0cmlidXRlcygpXG4iKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJzID0gTlVMTDsKKyAg
ICBhdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjYwMCIp
OworICAgIGF0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsIEFUS19URVhUX0FUVFJfU0laRSwgIjEy
Iik7CisKKyAgICAvLypzdGFydF9vZmZzZXQgPSAwOworICAgIC8vKmVuZF9vZmZzZXQgPSAxOwor
ICAgIHJldHVybiBhdHRyczsKIH0KIAogc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQpCiB7Cisg
ICAgcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMo
KVxuIik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTMz
MSwzNyArOTUwLDI3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmwK
IHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRz
KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0
aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQogewogICAgIEludFJlY3QgZXh0
ZW50cyA9IGNvcmUodGV4dCktPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZShvZmZz
ZXQsIDEpKTsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAgICAvLyBSZXF1
aXJlcyBXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1RvU2NyZWVuKCkgdG8gYmUgaW1wbGVt
ZW50ZWQKLQotI2lmIDAKLSAgICBzd2l0Y2goY29vcmRzKSB7Ci0gICAgY2FzZSBBVEtfWFlfU0NS
RUVOOgotICAgICAgICBleHRlbnRzID0gY29yZSh0ZXh0KS0+ZG9jdW1lbnQoKS0+dmlldygpLT5j
b250ZW50c1RvU2NyZWVuKGV4dGVudHMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFUS19Y
WV9XSU5ET1c6Ci0gICAgICAgIC8vIE5vLW9wCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgKnggPSBleHRlbnRzLngoKTsKLSAgICAqeSA9IGV4dGVudHMueSgpOwotICAgICp3
aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKLSAgICAqaGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsK
KyAgICBjb250ZW50c1RvQXRrKGNvcmUodGV4dCksIGNvb3JkcywgZXh0ZW50cywgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X2NoYXJhY3Rlcl9jb3VudChBdGtUZXh0KiB0ZXh0KQogewotICAgIHJldHVybiBjb3JlKHRleHQp
LT50ZXh0TGVuZ3RoKCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNv
cmUodGV4dCk7CisKKyAgICAvL2lmICghY29yZU9iamVjdC0+aXNUZXh0KCkpCisgICAgaWYgKGNv
cmVPYmplY3QtPmlzQ29udHJvbCgpKSAvLz8/CisgICAgICAgIHJldHVybiBjb3JlT2JqZWN0LT50
ZXh0TGVuZ3RoKCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmpl
Y3QtPnZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgcHJpbnRmKCJsZW5ndGggJWRcbiIsIGNv
cmVPYmplY3QtPmxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKSk7CisgICAgcmV0
dXJuIGNvcmVPYmplY3QtPmxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKIH0K
IAogc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50
KEF0a1RleHQqIHRleHQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUgY29vcmRzKQogewot
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIEF0a0Nvb3JkVHlwZQotICAgIC8vIFRPRE86IElzIGl0IGNv
cnJlY3QgdG8gaWdub3JlIHJhbmdlLmxlbmd0aD8KLSAgICBJbnRQb2ludCBwb3MoeCwgeSk7Cisg
ICAgSW50UG9pbnQgcG9zID0gY29udGVudHNGcm9tQXRrKGNvcmUodGV4dCksIGNvb3JkcywgeCwg
eSk7CiAgICAgUGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3JlKHRleHQpLT5kb0FYUmFuZ2VGb3JQ
b3NpdGlvbihwb3MpOworICAgIC8vIFRPRE86IElzIGl0IGNvcnJlY3QgdG8gaWdub3JlIHJhbmdl
Lmxlbmd0aD8KICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CiB9CiAKQEAgLTM3Myw2ICs5ODIsOSBA
QCBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9uCiAKIHN0YXRpYyBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdp
bnQgc2VsZWN0aW9uX251bSwgZ2ludCogc3RhcnRfb2Zmc2V0LCBnaW50KiBlbmRfb2Zmc2V0KQog
eworICAgIGlmIChzZWxlY3Rpb25fbnVtICE9IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM4NSwxNCArOTk3
LDI1IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2EKIAogc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihBdGtUZXh0
KiB0ZXh0LCBnaW50IHNlbGVjdGlvbl9udW0pCiB7CisgICAgaWYgKHNlbGVjdGlvbl9udW0gIT0g
MCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gVE9ETzogVmVyaWZ5CisgICAgaWYg
KCFjb3JlKHRleHQpLT5pc1NlbGVjdGVkKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9zZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdp
bnQgc2VsZWN0aW9uX251bSwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoc2VsZWN0
aW9uX251bSAhPSAwKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBUT0RPOiBWZXJp
ZnkKKyAgICBjb3JlKHRleHQpLT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShz
dGFydF9vZmZzZXQsIGVuZF9vZmZzZXQgLSBzdGFydF9vZmZzZXQpKTsKKyAgICByZXR1cm4gVFJV
RTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0
X29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKQEAgLTQ0NCw3ICsxMDY3LDcgQEAg
c3RhdGljIHZvaWQgYXRrX3RleHRfaW50ZXJmYWNlX2luaXQoQXRrVAogICAgIGlmYWNlLT5nZXRf
cnVuX2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0cmlidXRl
czsKICAgICBpZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlczsKICAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9l
eHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHM7Ci0g
ICAgLy9pZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSA7CisgICAgLy9pZmFjZS0+Z2V0X3Jhbmdl
X2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOwogICAg
IGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
Y2hhcmFjdGVyX2NvdW50OwogICAgIGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50OwogICAgIGlmYWNlLT5nZXRfbl9z
ZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwpAQCAt
NDY3LDIzICsxMDkwLDE4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0
YWIKIAogc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRfdGV4
dF9jb250ZW50cyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCiB7
Ci0gICAgLy8gRklYTUU6IHN0cmluZyBudWxsY2hlY2s/CiAgICAgY29yZSh0ZXh0KS0+c2V0VmFs
dWUoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X2Fj
Y2Vzc2libGVfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQs
IGNvbnN0IGdjaGFyKiBzdHJpbmcsIGdpbnQgbGVuZ3RoLCBnaW50KiBwb3NpdGlvbikKIHsKLSAg
ICAvLyBGSVhNRTogc3RyaW5nIG51bGxjaGVjaz8KLQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQg
aW4gV2ViQ29yZQotICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5U
ZXh0UmFuZ2UoKnBvc2l0aW9uLCAwKSk7Ci0gICAgLy9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRl
eHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKIAogICAgIGlmICghY29yZU9iamVjdC0+ZG9j
dW1lbnQoKSB8fCAhY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29y
ZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZSgqcG9z
aXRpb24sIDApKSk7Ci0gICAgY29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBpZiAo
IXNlbGVjdFRleHQoY29yZU9iamVjdCwgKnBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBpbnNlcnRl
ZCB0ZXh0IGxlbmd0aCwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGF0IHJlcXVlc3RlZC4KICAg
ICBpZiAoY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmluc2VydFRl
eHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChTdHJpbmc6OmZyb21VVEY4KHN0cmluZyksIGZhbHNl
LCAwKSkKICAgICAgICAgKnBvc2l0aW9uICs9IGxlbmd0aDsKQEAgLTQ5MSwzMSArMTEwOSw1NCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfY29weV90ZXh0KEF0a0VkaXRhYmxlVGV4
dCogdGV4dCwgZ2ludCBzdGFydF9wb3MsIGdpbnQgZW5kX3BvcykKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQp
OworCisgICAgLy9UT0RPOgorICAgIC8vUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKTsK
KyAgICAvL3dyaXRlU2VsZWN0aW9uKHJhbmdlLCA/LCBmcmFtZSk7CisKKyAgICBpZiAoIWNvcmVP
YmplY3QtPmRvY3VtZW50KCkgfHwgIWNvcmVPYmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNlbGVjdFRleHQoY29yZU9iamVjdCwgc3RhcnRfcG9z
LCBlbmRfcG9zKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29yZU9iamVjdC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmNvcHkoKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X2Fj
Y2Vzc2libGVfZWRpdGFibGVfdGV4dF9jdXRfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdp
bnQgc3RhcnRfcG9zLCBnaW50IGVuZF9wb3MpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworICAgIGlm
ICghY29yZU9iamVjdC0+ZG9jdW1lbnQoKSB8fCAhY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc2VsZWN0VGV4dChjb3JlT2JqZWN0LCBz
dGFydF9wb3MsIGVuZF9wb3MpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb3JlT2JqZWN0LT5k
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+Y3V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQXRrRWRpdGFibGVUZXh0
KiB0ZXh0LCBnaW50IHN0YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQogewogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViQ29yZQotICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFu
Z2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRfcG9zLCBlbmRfcG9zIC0gc3RhcnRfcG9zKSk7Ci0gICAg
Ly9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoU3RyaW5nKCkpOwogCiAgICAgaWYgKCFjb3Jl
T2JqZWN0LT5kb2N1bWVudCgpIHx8ICFjb3JlT2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZShjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4
dFJhbmdlKHN0YXJ0X3BvcywgZW5kX3BvcyAtIHN0YXJ0X3BvcykpKTsKLSAgICBjb3JlT2JqZWN0
LT5zZXRGb2N1c2VkKHRydWUpOworICAgIGlmICghc2VsZWN0VGV4dChjb3JlT2JqZWN0LCBzdGFy
dF9wb3MsIGVuZF9wb3MpKQorICAgICAgICByZXR1cm47CisKICAgICBjb3JlT2JqZWN0LT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cGVyZm9ybURlbGV0ZSgpOwogfQogCiBzdGF0aWMg
dm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Bhc3RlX3RleHQoQXRrRWRpdGFi
bGVUZXh0KiB0ZXh0LCBnaW50IHBvc2l0aW9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisKKyAgICBp
ZiAoIWNvcmVPYmplY3QtPmRvY3VtZW50KCkgfHwgIWNvcmVPYmplY3QtPmRvY3VtZW50KCktPmZy
YW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNlbGVjdFRleHQoY29yZU9iamVjdCwg
cG9zaXRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBjb3JlT2JqZWN0LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+cGFzdGUoKTsKIH0KIAogc3RhdGljIHZvaWQgYXRrX2VkaXRh
YmxlX3RleHRfaW50ZXJmYWNlX2luaXQoQXRrRWRpdGFibGVUZXh0SWZhY2UqIGlmYWNlKQpAQCAt
NTMxLDYgKzExNzIsMTI5IEBAIHN0YXRpYyB2b2lkIGF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFj
ZV8KICAgICBpZmFjZS0+cGFzdGVfdGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3Rl
eHRfcGFzdGVfdGV4dDsKIH0KIAorLy8gSHlwZXJ0ZXh0CisKK0F0a0h5cGVybGluayogd2Via2l0
X2FjY2Vzc2libGVfaHlwZXJ0ZXh0X2dldF9saW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBn
aW50IGxpbmtfaW5kZXgpCit7CisgICAgaWYgKGxpbmtfaW5kZXggPCAwKQorICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
K2dpbnQgd2Via2l0X2FjY2Vzc2libGVfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEF0a0h5cGVydGV4
dCogaHlwZXJ0ZXh0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK2dpbnQgd2Via2l0X2FjY2Vzc2libGVfaHlwZXJ0ZXh0X2dldF9saW5rX2luZGV4KEF0a0h5
cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGNoYXJfaW5kZXgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGF0a19oeXBlcnRleHRfaW50
ZXJmYWNlX2luaXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoaWZhY2UpOworCisgICAgaWZhY2UtPmdldF9saW5rID0gd2Via2l0X2FjY2Vzc2libGVf
aHlwZXJ0ZXh0X2dldF9saW5rOworICAgIGlmYWNlLT5nZXRfbl9saW5rcyA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2h5cGVydGV4dF9nZXRfbl9saW5rczsKKyAgICBpZmFjZS0+Z2V0X2xpbmtfaW5kZXgg
PSB3ZWJraXRfYWNjZXNzaWJsZV9oeXBlcnRleHRfZ2V0X2xpbmtfaW5kZXg7Cit9CisKKy8vIERv
Y3VtZW50CisKKyNpZiAwCitzdGF0aWMgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9hY2Nl
c3NpYmxlX2RvY3VtZW50X2dldF9kb2N1bWVudF90eXBlKEF0a0RvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICAvLyBEZXByZWNhdGVkPworfQorCitzdGF0aWMgZ3BvaW50ZXIgd2Via2l0X2FjY2Vz
c2libGVfZG9jdW1lbnRfZ2V0X2RvY3VtZW50KEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3sKK30K
KyNlbmRpZgorCitzdGF0aWMgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxl
X2RvY3VtZW50X2dldF9kb2N1bWVudF9sb2NhbGUoQXRrRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIGlmICghY29yZShkb2N1bWVudCktPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxM
OworCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBzZWVtIHRvIGdpdmUgdGhlIHJpZ2h0IGFu
c3dlci4KKyAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUoZG9jdW1lbnQpLT5kb2N1bWVudCgp
LT5jb250ZW50TGFuZ3VhZ2UoKSk7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtp
dF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9kb2N1bWVudF9hdHRyaWJ1dGVzKEF0a0RvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJzID0gTlVMTDsKKworICAg
IGlmICghY29yZShkb2N1bWVudCktPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxMOwor
CisgICAgLy8gRklYTUU6IFByb3ZpZGUgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZXMuCisKKyAgICAv
LyBTaG91bGQgYmUgb2YgZm9ybSAndGV4dC9odG1sJworICAgIGF0dHJzID0gbGlzdFByZXBlbmQo
YXR0cnMsICJNaW1lVHlwZSIsICIiKTsKKworICAgIC8vIFNob3VsZCBiZSBvZiBmb3JtICctLy9X
M0MvL0RURCBIVE1MIDQuMDEvL0VOJworICAgIC8vaWYgKGNvcmUoZG9jdW1lbnQpLT5kb2N1bWVu
dCgpLT5kb2N0eXBlKCkpCisgICAgLy8gICAgYXR0cnMgPSBsaXN0UHJlcGVuZChhdHRycywgIlcz
Qy1kb2N0eXBlIiwgY29yZShkb2N1bWVudCktPmRvY3VtZW50KCktPmRvY3R5cGUoKS0+dG9TdHJp
bmcoKSk7CisKKyAgICAvL2F0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsICJXM0MtZG9jdHlwZSIs
IGNvcmUoZG9jdW1lbnQpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5kb2N1bWVudFR5cGVTdHJpbmco
KSk7CisKKyAgICBhdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAiRG9jVVJMIiwgY29yZShkb2N1
bWVudCktPnVybCgpKTsKKworICAgIHJldHVybiBhdHRyczsKK30KKworc3RhdGljIEdfQ09OU1Rf
UkVUVVJOIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfYXR0
cmlidXRlX3ZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0
ZV9uYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICIiOworfQorCitz
dGF0aWMgdm9pZCBhdGtfZG9jdW1lbnRfaW50ZXJmYWNlX2luaXQoQXRrRG9jdW1lbnRJZmFjZSog
aWZhY2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChpZmFjZSk7CisKKyAgICBpZmFjZS0+Z2V0
X2RvY3VtZW50X2xvY2FsZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9kb2N1bWVu
dF9sb2NhbGU7CisgICAgaWZhY2UtPmdldF9kb2N1bWVudF9hdHRyaWJ1dGVzID0gd2Via2l0X2Fj
Y2Vzc2libGVfZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2F0dHJpYnV0ZXM7CisgICAgLy9pZmFjZS0+
Z2V0X2RvY3VtZW50X2F0dHJpYnV0ZV92YWx1ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50
X2dldF9kb2N1bWVudF9hdHRyaWJ1dGVfdmFsdWU7Cit9CisKKy8vIEltYWdlCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3NpdGlvbihBdGtJbWFnZSog
aW1hZ2UsIGdpbnQqIHgsIGdpbnQqIHksIEF0a0Nvb3JkVHlwZSBjb29yZF90eXBlKQoreworICAg
IEludFJlY3QgcmVjdCA9IGNvcmUoaW1hZ2UpLT5lbGVtZW50UmVjdCgpOworICAgIGNvbnRlbnRz
VG9BdGsoY29yZShpbWFnZSksIGNvb3JkX3R5cGUsIHJlY3QsIHgsIHkpOworfQorCitzdGF0aWMg
R19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9k
ZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIHJldHVyblN0cmluZyhj
b3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2Vfc2l6ZShBdGtJbWFnZSogaW1hZ2Us
IGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCit7CisgICAgSW50U2l6ZSBzaXplID0gY29yZShp
bWFnZSktPnNpemUoKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHNpemUud2lk
dGgoKTsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsK
K30KKworc3RhdGljIHZvaWQgYXRrX2ltYWdlX2ludGVyZmFjZV9pbml0KEF0a0ltYWdlSWZhY2Uq
IGlmYWNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaWZhY2UpOworCisgICAgaWZhY2UtPmdl
dF9pbWFnZV9wb3NpdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3Np
dGlvbjsKKyAgICBpZmFjZS0+Z2V0X2ltYWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2li
bGVfaW1hZ2VfZ2V0X2ltYWdlX2Rlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfaW1hZ2Vfc2l6
ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9zaXplOworfQorCiAvLyBTdHJl
YW1hYmxlQ29udGVudAogCiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxl
X2NvbnRlbnRfZ2V0X25fbWltZV90eXBlcyhBdGtTdHJlYW1hYmxlQ29udGVudCogc3RyZWFtYWJs
ZSkKQEAgLTU4NSwxNiArMTM0OSwxOSBAQCBHVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlw
ZSgpCiAgICAgICAgICAgICBOVUxMIC8qIHZhbHVlIHRhYmxlICovCiAgICAgICAgIH07CiAKLSAg
ICAgICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoQVRLX1RZUEVfT0JKRUNULCAiV2Vi
S2l0QWNjZXNzaWJsZSIsICZ0aW5mbywgc3RhdGljX2Nhc3Q8R1R5cGVGbGFncz4oMCkpOworICAg
ICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gYXRrX2NvbXBvbmVudF9pbmZvID0KKyAg
ICAgICAgeworICAgICAgICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgYXRrX2NvbXBvbmVudF9p
bnRlcmZhY2VfaW5pdCwKKyAgICAgICAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxM
LAorICAgICAgICAgICAgTlVMTAorICAgICAgICB9OwogCi0gICAgICAgIC8vIFRPRE86IE9ubHkg
aW1wbGVtZW50IGludGVyZmFjZXMgd2hlbiBuZWNlc3NhcnksIG5vdCBmb3IgYWxsIG9iamVjdHMu
CiAgICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBhdGtfYWN0aW9uX2luZm8gPQog
ICAgICAgICB7CiAgICAgICAgICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBhdGtfYWN0aW9uX2lu
dGVyZmFjZV9pbml0LAogICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEws
CiAgICAgICAgICAgICBOVUxMCiAgICAgICAgIH07Ci0gICAgICAgIGdfdHlwZV9hZGRfaW50ZXJm
YWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9BQ1RJT04sICZhdGtfYWN0aW9uX2luZm8pOwogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBhdGtfdGV4dF9pbmZvID0KICAgICAg
ICAgewpAQCAtNjAyLDcgKzEzNjksNiBAQCBHVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlw
ZSgpCiAgICAgICAgICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwKICAgICAgICAg
ICAgIE5VTEwKICAgICAgICAgfTsKLSAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGlj
KHR5cGUsIEFUS19UWVBFX1RFWFQsICZhdGtfdGV4dF9pbmZvKTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgR0ludGVyZmFjZUluZm8gYXRrX2VkaXRhYmxlX3RleHRfaW5mbyA9CiAgICAgICAgIHsK
QEAgLTYxMCw3ICsxMzc2LDI3IEBAIEdUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKCkK
ICAgICAgICAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxMLAogICAgICAgICAgICAg
TlVMTAogICAgICAgICB9OwotICAgICAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWModHlw
ZSwgQVRLX1RZUEVfRURJVEFCTEVfVEVYVCwgJmF0a19lZGl0YWJsZV90ZXh0X2luZm8pOworCisg
ICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBhdGtfaHlwZXJ0ZXh0X2luZm8gPQor
ICAgICAgICB7CisgICAgICAgICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBhdGtfaHlwZXJ0ZXh0
X2ludGVyZmFjZV9pbml0LAorICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5V
TEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IEdJbnRlcmZhY2VJbmZvIGF0a19kb2N1bWVudF9pbmZvID0KKyAgICAgICAgeworICAgICAgICAg
ICAgKEdJbnRlcmZhY2VJbml0RnVuYykgYXRrX2RvY3VtZW50X2ludGVyZmFjZV9pbml0LAorICAg
ICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCisgICAgICAgICAgICBOVUxM
CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIGF0a19p
bWFnZV9pbmZvID0KKyAgICAgICAgeworICAgICAgICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykg
YXRrX2ltYWdlX2ludGVyZmFjZV9pbml0LAorICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6
ZUZ1bmMpIE5VTEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgIH07CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIGF0a19zdHJlYW1hYmxlX2NvbnRlbnRfaW5mbyA9CiAg
ICAgICAgIHsKQEAgLTYxOCwxMyArMTQwNCwyNiBAQCBHVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfdHlwZSgpCiAgICAgICAgICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwKICAg
ICAgICAgICAgIE5VTEwKICAgICAgICAgfTsKLSAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vf
c3RhdGljKHR5cGUsIEFUS19UWVBFX1NUUkVBTUFCTEVfQ09OVEVOVCwgJmF0a19zdHJlYW1hYmxl
X2NvbnRlbnRfaW5mbyk7CisKKyAgICAgICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMo
QVRLX1RZUEVfT0JKRUNULCAiV2ViS2l0QWNjZXNzaWJsZSIsICZ0aW5mbywgc3RhdGljX2Nhc3Q8
R1R5cGVGbGFncz4oMCkpOworCisgICAgICAgIC8vIFRPRE86IE9ubHkgaW1wbGVtZW50IGludGVy
ZmFjZXMgd2hlbiBuZWNlc3NhcnksIG5vdCBmb3IgYWxsIG9iamVjdHMuCisgICAgICAgIGdfdHlw
ZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9DT01QT05FTlQsICZhdGtfY29t
cG9uZW50X2luZm8pOworICAgICAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWModHlwZSwg
QVRLX1RZUEVfQUNUSU9OLCAmYXRrX2FjdGlvbl9pbmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9p
bnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX1RFWFQsICZhdGtfdGV4dF9pbmZvKTsKKyAg
ICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX0VESVRBQkxF
X1RFWFQsICZhdGtfZWRpdGFibGVfdGV4dF9pbmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRl
cmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX0hZUEVSVEVYVCwgJmF0a19oeXBlcnRleHRfaW5m
byk7CisgICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9E
T0NVTUVOVCwgJmF0a19kb2N1bWVudF9pbmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZh
Y2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX0lNQUdFLCAmYXRrX2ltYWdlX2luZm8pOworICAgICAg
ICAvL2dfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9TVFJFQU1BQkxF
X0NPTlRFTlQsICZhdGtfc3RyZWFtYWJsZV9jb250ZW50X2luZm8pOwogICAgIH0KKwogICAgIHJl
dHVybiB0eXBlOwogfQogCiBXZWJLaXRBY2Nlc3NpYmxlKiB3ZWJraXRfYWNjZXNzaWJsZV9uZXco
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CiAgICAgR1R5cGUgdHlwZSA9IFdFQktJVF9UWVBFX0FDQ0VTU0lCTEU7CiAgICAgQXRrT2Jq
ZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX29iamVjdF9uZXcodHlwZSwg
TlVMTCkpOwogICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIGNvcmVPYmplY3QpOwpA
QCAtNjM2LDExICsxNDM1LDkgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0X2FjY2Vzc2li
bGVfZwogICAgIHJldHVybiBhY2Nlc3NpYmxlLT5tX29iamVjdDsKIH0KIAotLy8gRklYTUU6IFJl
bW92ZSB0aGlzIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KLXN0YXRpYyBBWE9iamVjdENhY2hlKiBm
YWxsYmFja0NhY2hlID0gbmV3IEFYT2JqZWN0Q2FjaGUoKTsKLQogdm9pZCB3ZWJraXRfYWNjZXNz
aWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKIHsKKyAgICBwcmludGYo
IndlYmtpdF9hY2Nlc3NpYmxlX2RldGFjaCgpICVwXG4iLCBhY2Nlc3NpYmxlKTsKICAgICBBU1NF
UlQoYWNjZXNzaWJsZS0+bV9vYmplY3QpOwogCiAgICAgLy8gV2UgcmVwbGFjZSB0aGUgV2ViQ29y
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdpdGggYSBmYWxsYmFjayBvYmplY3QgdGhhdApAQCAtNjQ4
LDI5ICsxNDQ1LDExIEBAIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZGV0YWNoKFdlYktpdEFjY2UK
ICAgICAvLyBkZXRhY2htZW50LgogCiAgICAgLy8gRklYTUU6IFVzaW5nIGZhbGxiYWNrQ2FjaGUt
PmdldChMaXN0Qm94T3B0aW9uUm9sZSkgaXMgYSBoYWNrLgotICAgIGFjY2Vzc2libGUtPm1fb2Jq
ZWN0ID0gZmFsbGJhY2tDYWNoZS0+Z2V0KExpc3RCb3hPcHRpb25Sb2xlKTsKLX0KLQotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgYWNjZXNzaWJsZS0+bV9vYmplY3QgPSBmYWxsYmFja09i
amVjdCgpOwogCi0vLyBBY2Nlc3NpYmlsaXR5T2JqZWN0IGltcGxlbWVudGF0aW9ucwotCi1BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eU9iamVjdDo6d3JhcHBlcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fd3JhcHBlcjsKKyAgICAvLyBUT0RPOiBWZXJpZnkgdGhpcyBp
cyB0aGUgcmlnaHQgdGltZSB0byBub3RpZnkKKyAgICAvLyBTbG93IT8KKyAgICAvL2F0a19vYmpl
Y3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShBVEtfT0JKRUNUKGFjY2Vzc2libGUpLCBBVEtfU1RBVEVf
REVGVU5DVCwgVFJVRSk7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0V3JhcHBl
cihBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlcikKLXsKLSAgICBpZiAobV93cmFw
cGVyKQotICAgICAgICBnX29iamVjdF91bnJlZihtX3dyYXBwZXIpOwotCi0gICAgbV93cmFwcGVy
ID0gd3JhcHBlcjsKLQotICAgIGlmIChtX3dyYXBwZXIpCi0gICAgICAgIGdfb2JqZWN0X3JlZiht
X3dyYXBwZXIpOwogfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25529</attachid>
            <date>2008-11-26 13:20:48 -0800</date>
            <delta_ts>2009-01-30 15:32:37 -0800</delta_ts>
            <desc>Use stringValue for the AtkObject::name</desc>
            <filename>0005--Gtk-Use-AccessibilityObject-stringValue-for-the.patch</filename>
            <type>text/plain</type>
            <size>1264</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSAyNDA1MDNiYjU1NjVkMWM2YTRlMTY2ZTBiYjYyMmMzNDlkNTQ0NDFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFdlZCwgMjYgTm92IDIwMDggMjA6NTg6MTUgKzAxMDAKU3ViamVjdDog
W1BBVENIXSBbR3RrK10gVXNlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ1ZhbHVlIGZvciB0
aGUgQXRrT2JqZWN0IG5hbWUKCiAgICBodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvYXRr
L3N0YWJsZS9BdGtUZXh0Lmh0bWwgaXMgc2F5aW5nIHRoZQogICAgZm9sbG93aW5nOiAiQXRrT2Jq
ZWN0cyB3aG9zZSB0ZXh0IGNvbnRlbnQgaXMgc2ltcGxlLCB1bmF0dHJpYnV0ZWQsIGFuZCB2ZXJ5
CiAgICBicmllZiBtYXkgZXhwb3NlIHRoYXQgY29udGVudCB2aWEgYXRrX29iamVjdF9nZXRfbmFt
ZSBpbnN0ZWFkIgoKICAgIEZvbGxvdyB0aGF0IGFuZCBleHBvc2UgdGhlIGNvbnRlbnQgdXNpbmcg
YXRrX29iamVjdF9nZXRfbmFtZS4KLS0tCiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcCB8ICAgIDIgKy0KIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRp
b25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggYzFhNDA1ZS4uZDVlY2YzNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
QEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9uYW1lKEF0a09iamVjdCogb2JqZWN0KQogewogICAgIC8vIFRPRE86IERlYWwgd2l0aCBs
YXRlciBjaGFuZ2VzLgogICAgIGlmICghb2JqZWN0LT5uYW1lKQotICAgICAgICBhdGtfb2JqZWN0
X3NldF9uYW1lKG9iamVjdCwgY29yZShvYmplY3QpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBhdGtfb2JqZWN0X3NldF9uYW1lKG9iamVjdCwgY29yZShvYmplY3QpLT5zdHJpbmdW
YWx1ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBvYmplY3QtPm5hbWU7CiB9CiAKLS0g
CjEuNS42LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25534</attachid>
            <date>2008-11-26 13:56:08 -0800</date>
            <delta_ts>2009-04-08 02:12:00 -0700</delta_ts>
            <desc>Create separate objects implemeting separate interfaces</desc>
            <filename>0006--Gtk-Currently-we-can-not-always-implement-AtkText.patch</filename>
            <type>text/plain</type>
            <size>8836</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSAwNTdmZTBlNmYxOTkyOGM1ZTk4ZTE3NGRkNDU5OTVmYTgxYzljZWQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFdlZCwgMjYgTm92IDIwMDggMjA6NTk6NTQgKzAxMDAKU3ViamVjdDog
W1BBVENIXSBbR3RrK10gQ3VycmVudGx5IHdlIGNhbiBub3QgYWx3YXlzIGltcGxlbWVudCBBdGtU
ZXh0SW50ZXJmYWNlCgogICAgV2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
QXRrVGV4dEludGVyZmFjZSB0byBhbHdheXMKICAgIGNhbGwgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dGV4dExlbmd0aCgpIHdlIHdpbGwgcnVuIGludG8gYXNzZXJ0aW9ucwogICAgaW4gdGhlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QgaW1wbGVtZW50YXRpb24uCgogICAgVGhpcyBwYXRjaCBpcyBv
bmx5IGltcGxlbWVudGluZyBBdGtUZXh0SW50ZXJmYWNlIGZvciB3cmFwcGVkCiAgICBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0cyB0aGF0IGFyZSBUZXh0Q29udHJvbHMuIEltcGxlbWVudAogICAg
QXRrRWRpdFRleHRJbnRlcmZhY2Ugd2hlbiB0aGUgUmVuZGVyT2JqZWN0IGlzIGFsc28gcmVhZC93
cml0ZS4KCiAgICBJZiB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aGUgQXRrVGV4dEludGVyZmFjZSB3
ZSBuZWVkIHRvIGhhdmUKICAgIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgZ29pbmcgdGhyb3Vn
aCB0aGUgOjpzdHJpbmdWYWx1ZSBjb2RlCiAgICBwYXRoIGFuZCBpcyBlbXVsYXRpbmcgdGhlIG90
aGVyIGJpdHMuCi0tLQogV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgfCAgIDcwICsrKysrKysrKysrKysrKysrLS0KIFdlYkNvcmUvcGFnZS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCAgIHwgICA1NCArKysrKysrKysrKysrKysKIDIg
ZmlsZXMgY2hhbmdlZCwgMTE2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAg
Yi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRl
eCBkNWVjZjM1Li42YzE5NGIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtNTg5LDcgKzU4OSw2IEBAIEdUeXBlIHdlYmtp
dF9hY2Nlc3NpYmxlX2dldF90eXBlKCkKIAogICAgICAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVy
X3N0YXRpYyhBVEtfVFlQRV9PQkpFQ1QsICJXZWJLaXRBY2Nlc3NpYmxlIiwgJnRpbmZvLCBzdGF0
aWNfY2FzdDxHVHlwZUZsYWdzPigwKSk7CiAKLSAgICAgICAgLy8gVE9ETzogT25seSBpbXBsZW1l
bnQgaW50ZXJmYWNlcyB3aGVuIG5lY2Vzc2FyeSwgbm90IGZvciBhbGwgb2JqZWN0cy4KICAgICAg
ICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIGF0a19hY3Rpb25faW5mbyA9CiAgICAgICAg
IHsKICAgICAgICAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGF0a19hY3Rpb25faW50ZXJmYWNl
X2luaXQsCkBAIC01OTgsNiArNTk3LDM4IEBAIEdUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90
eXBlKCkKICAgICAgICAgfTsKICAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5
cGUsIEFUS19UWVBFX0FDVElPTiwgJmF0a19hY3Rpb25faW5mbyk7CiAKKyAgICAgICAgc3RhdGlj
IGNvbnN0IEdJbnRlcmZhY2VJbmZvIGF0a19zdHJlYW1hYmxlX2NvbnRlbnRfaW5mbyA9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGF0a19zdHJlYW1hYmxlX2Nv
bnRlbnRfaW50ZXJmYWNlX2luaXQsCisgICAgICAgICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKyAgICAgICAgZ190eXBlX2Fk
ZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX1NUUkVBTUFCTEVfQ09OVEVOVCwgJmF0
a19zdHJlYW1hYmxlX2NvbnRlbnRfaW5mbyk7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK0dUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3R5cGUoKQoreworICAgIHN0YXRp
YyBHVHlwZSB0eXBlID0gMDsKKworICAgIGlmICghdHlwZSkgeworICAgICAgICBzdGF0aWMgY29u
c3QgR1R5cGVJbmZvIHRpbmZvID0geworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2li
bGVUZXh0Q2xhc3MpLAorICAgICAgICAgICAgKEdCYXNlSW5pdEZ1bmMpTlVMTCwKKyAgICAgICAg
ICAgIChHQmFzZUZpbmFsaXplRnVuYylOVUxMLAorICAgICAgICAgICAgKEdDbGFzc0luaXRGdW5j
KU5VTEwsCisgICAgICAgICAgICAoR0NsYXNzRmluYWxpemVGdW5jKU5VTEwsCisgICAgICAgICAg
ICBOVUxMLCAvKiBjbGFzcyBkYXRhICovCisgICAgICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNz
aWJsZVRleHQpLCAvKiBpbnN0YW5jZSBzaXplICovCisgICAgICAgICAgICAwLCAvKiBuYiBwcmVh
bGxvY3MgKi8KKyAgICAgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYylOVUxMLAorICAgICAgICAg
ICAgTlVMTCAvKiB2YWx1ZSB0YWJsZSAqLworICAgICAgICB9OworCisgICAgICAgIHR5cGUgPSBn
X3R5cGVfcmVnaXN0ZXJfc3RhdGljKFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUsICJXZWJLaXRBY2Nl
c3NpYmxlVGV4dCIsICZ0aW5mbywgc3RhdGljX2Nhc3Q8R1R5cGVGbGFncz4oMCkpOworCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBhdGtfdGV4dF9pbmZvID0KICAgICAgICAg
ewogICAgICAgICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgYXRrX3RleHRfaW50ZXJmYWNlX2lu
aXQsCkBAIC02MDUsNyArNjM2LDMxIEBAIEdUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBl
KCkKICAgICAgICAgICAgIE5VTEwKICAgICAgICAgfTsKICAgICAgICAgZ190eXBlX2FkZF9pbnRl
cmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX1RFWFQsICZhdGtfdGV4dF9pbmZvKTsKKyAgICB9
CiAKKyAgICByZXR1cm4gdHlwZTsKK30KKworCitHVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0
YWJsZV90ZXh0X2dldF90eXBlKCkKK3sKKyAgICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7CisKKyAg
ICBpZiAoIXR5cGUpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyB0aW5mbyA9IHsK
KyAgICAgICAgICAgIHNpemVvZihXZWJLaXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q2xhc3MpLAor
ICAgICAgICAgICAgKEdCYXNlSW5pdEZ1bmMpTlVMTCwKKyAgICAgICAgICAgIChHQmFzZUZpbmFs
aXplRnVuYylOVUxMLAorICAgICAgICAgICAgKEdDbGFzc0luaXRGdW5jKU5VTEwsCisgICAgICAg
ICAgICAoR0NsYXNzRmluYWxpemVGdW5jKU5VTEwsCisgICAgICAgICAgICBOVUxMLCAvKiBjbGFz
cyBkYXRhICovCisgICAgICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dCksIC8qIGluc3RhbmNlIHNpemUgKi8KKyAgICAgICAgICAgIDAsIC8qIG5iIHByZWFsbG9jcyAq
LworICAgICAgICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKU5VTEwsCisgICAgICAgICAgICBOVUxM
IC8qIHZhbHVlIHRhYmxlICovCisgICAgICAgIH07CisKKyAgICAgICAgdHlwZSA9IGdfdHlwZV9y
ZWdpc3Rlcl9zdGF0aWMoV0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9URVhULCAiV2ViS2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dCIsICZ0aW5mbywgc3RhdGljX2Nhc3Q8R1R5cGVGbGFncz4oMCkpOwog
ICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gYXRrX2VkaXRhYmxlX3RleHRfaW5m
byA9CiAgICAgICAgIHsKICAgICAgICAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGF0a19lZGl0
YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0LApAQCAtNjE0LDIwICs2NjksMTkgQEAgR1R5cGUgd2Vi
a2l0X2FjY2Vzc2libGVfZ2V0X3R5cGUoKQogICAgICAgICB9OwogICAgICAgICBnX3R5cGVfYWRk
X2ludGVyZmFjZV9zdGF0aWModHlwZSwgQVRLX1RZUEVfRURJVEFCTEVfVEVYVCwgJmF0a19lZGl0
YWJsZV90ZXh0X2luZm8pOwogCi0gICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBh
dGtfc3RyZWFtYWJsZV9jb250ZW50X2luZm8gPQotICAgICAgICB7Ci0gICAgICAgICAgICAoR0lu
dGVyZmFjZUluaXRGdW5jKSBhdGtfc3RyZWFtYWJsZV9jb250ZW50X2ludGVyZmFjZV9pbml0LAot
ICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCi0gICAgICAgICAgICBO
VUxMCi0gICAgICAgIH07Ci0gICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBl
LCBBVEtfVFlQRV9TVFJFQU1BQkxFX0NPTlRFTlQsICZhdGtfc3RyZWFtYWJsZV9jb250ZW50X2lu
Zm8pOwogICAgIH0KKwogICAgIHJldHVybiB0eXBlOwogfQogCiBXZWJLaXRBY2Nlc3NpYmxlKiB3
ZWJraXRfYWNjZXNzaWJsZV9uZXcoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsK
ICAgICBHVHlwZSB0eXBlID0gV0VCS0lUX1RZUEVfQUNDRVNTSUJMRTsKKworICAgIC8vIE9rYXkg
d2UgY2FuIHN1cHBvcnQKKyAgICBpZiAoY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkgJiYgY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQorICAgICAgICB0eXBlID0g
Y29yZU9iamVjdC0+aXNSZWFkT25seSgpID8gV0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9URVhUIDog
V0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9FRElUQUJMRV9URVhUOworCiAgICAgQXRrT2JqZWN0KiBv
YmplY3QgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX29iamVjdF9uZXcodHlwZSwgTlVMTCkp
OwogICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIGNvcmVPYmplY3QpOwogICAgIHJl
dHVybiBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIGIvV2ViQ29yZS9wYWdlL2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCmluZGV4IGVjZmI5OWUuLjVjMjA1MzUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
aAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsNiArMjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdfQkVH
SU5fREVDTFMKIAorLyoqCisgKiBXZWJLaXRBY2Nlc3NpYmxlIGJhc2UgdHlwZS4gSW1wbGVtZW50
aW5nIEF0a0FjdGlvbiwgQXRrU3RyZWFtYWJsZUNvbnRlbnQKKyAqLwogI2RlZmluZSBXRUJLSVRf
VFlQRV9BQ0NFU1NJQkxFICAgICAgICAgICAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90
eXBlICgpKQogI2RlZmluZSBXRUJLSVRfQUNDRVNTSUJMRShvYmopICAgICAgICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfQUNDRVNTSUJM
RSwgV2ViS2l0QWNjZXNzaWJsZSkpCiAjZGVmaW5lIFdFQktJVF9BQ0NFU1NJQkxFX0NMQVNTKGts
YXNzKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9U
WVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGVDbGFzcykpCkBAIC01Nyw2ICs2MSw1NiBA
QCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYWNj
ZXNzaWJpbGl0eV9vYmplY3QgKFdlYktpdAogCiB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFj
aCAoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSk7CiAKKworLyoqCisgKiBXZWJLaXRBY2Nl
c3NpYmxlVGV4dCBiYXNlIHR5cGUgYWRkaXRpb25hbGx5IGltcGxlbWVudGluZyBBdGtUZXh0Cisg
Ki8KKyNkZWZpbmUgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9URVhUICAgICAgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfQUNDRVNTSUJM
RV9URVhUKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2Jq
KSwgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9URVhULCBXZWJLaXRBY2Nlc3NpYmxlVGV4dCkpCisj
ZGVmaW5lIFdFQktJVF9BQ0NFU1NJQkxFX1RFWFRfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEVfVEVYVCwgV2Vi
S2l0QWNjZXNzaWJsZVRleHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19BQ0NFU1NJQkxFX1RF
WFQob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJL
SVRfVFlQRV9BQ0NFU1NJQkxFX1RFWFQpKQorI2RlZmluZSBXRUJLSVRfSVNfQUNDRVNTSUJMRV9U
RVhUX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJL
SVRfVFlQRV9BQ0NFU1NJQkxFX1RFWFQpKQorI2RlZmluZSBXRUJLSVRfQUNDRVNTSUJMRV9URVhU
X0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJL
SVRfVFlQRV9BQ0NFU1NJQkxFX1RFWFQsIFdlYktpdEFjY2Vzc2libGVUZXh0Q2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZVRleHQgICAgICAgICAgICBXZWJLaXRBY2Nl
c3NpYmxlVGV4dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlVGV4dENsYXNzICAg
ICAgIFdlYktpdEFjY2Vzc2libGVUZXh0Q2xhc3M7CisKK3N0cnVjdCBfV2ViS2l0QWNjZXNzaWJs
ZVRleHQKK3sKKyAgICBXZWJLaXRBY2Nlc3NpYmxlIHBhcmVudDsKK307CisKK3N0cnVjdCBfV2Vi
S2l0QWNjZXNzaWJsZVRleHRDbGFzcworeworICAgIFdlYktpdEFjY2Vzc2libGVDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90eXBlICh2
b2lkKSBHX0dOVUNfQ09OU1Q7CisKKy8qKgorICogV2ViS2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dCBiYXNlIHR5cGUgYWRkaXRpb25hbGx5IGltcGxlbWVudGluZyBBdGtFZGl0YWJsZVRleHQKKyAq
LworI2RlZmluZSBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFX0VESVRBQkxFX1RFWFQgICAgICAgICAg
ICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IFdFQktJVF9BQ0NFU1NJQkxFX0VESVRBQkxFX1RFWFQob2JqKSAgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFX0VESVRB
QkxFX1RFWFQsIFdlYktpdEFjY2Vzc2libGVFZGl0YWJsZVRleHQpKQorI2RlZmluZSBXRUJLSVRf
QUNDRVNTSUJMRV9FRElUQUJMRV9URVhUX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFX0VESVRBQkxFX1RFWFQs
IFdlYktpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19B
Q0NFU1NJQkxFX0VESVRBQkxFX1RFWFQob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFX0VESVRBQkxFX1RFWFQpKQor
I2RlZmluZSBXRUJLSVRfSVNfQUNDRVNTSUJMRV9FRElUQUJMRV9URVhUX0NMQVNTKGtsYXNzKSAg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxF
X0VESVRBQkxFX1RFWFQpKQorI2RlZmluZSBXRUJLSVRfQUNDRVNTSUJMRV9FRElUQUJMRV9URVhU
X0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJL
SVRfVFlQRV9BQ0NFU1NJQkxFX0VESVRBQkxFX1RFWFQsIFdlYktpdEFjY2Vzc2libGVFZGl0YWJs
ZVRleHRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0ICAgICAgICAgICAgV2ViS2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q2xhc3MgICAgICAgV2ViS2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dENsYXNzOworCitzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVFZGl0YWJs
ZVRleHQKK3sKKyAgICBXZWJLaXRBY2Nlc3NpYmxlVGV4dCBwYXJlbnQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRDbGFzcworeworICAgIFdlYktpdEFjY2Vzc2li
bGVUZXh0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2FjY2Vzc2libGVf
ZWRpdGFibGVfdGV4dF9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOwogR19FTkRfREVDTFMK
IAogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrX2gKLS0gCjEuNS42LjMK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29115</attachid>
            <date>2009-03-31 08:08:45 -0700</date>
            <delta_ts>2009-03-31 08:08:45 -0700</delta_ts>
            <desc>Update the first patch</desc>
            <filename>provisional.patch</filename>
            <type>text/plain</type>
            <size>54513</size>
            <attacher name="Alejandro Piñeiro">apinheiro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAppbmRleCA1ZmIxMTdmLi5iZGIyNmViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNjM2LDcgKzE2
MzYsNyBAQCB2b2lkIERvY3VtZW50OjppbXBsaWNpdENsb3NlKCkKICAgICAgICAgICAgIHZpZXco
KS0+aG9zdFdpbmRvdygpLT5wYWludCgpOwogICAgIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAgICAgaWYgKGYgJiYgcmVuZGVyZXIoKSAmJiB0aGlzID09
IHRvcERvY3VtZW50KCkgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkK
ICAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KHJlbmRl
cmVyKCksICJBWExvYWRDb21wbGV0ZSIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bh
Z2UvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcAppbmRleCAzNTM1Y2YxLi4xM2FhZWRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ndGsvQVhPYmpl
Y3RDYWNoZUF0ay5jcHAKQEAgLTIyLDEyICsyMiwxOSBAQAogCiAjaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eU9iamVjdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iaikKIHsKKyAgICAvL1RPRE86IFVzZSB0b2dnbGUgcmVmcyB0
byBrZWVwIGEgcG9vbCBvZiByZXVzYWJsZSB3cmFwcGVycworCiAgICAgd2Via2l0X2FjY2Vzc2li
bGVfZGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKG9iai0+d3JhcHBlcigpKSk7CisgICAgLy9vYmot
PmRldGFjaCgpOyAvL2RldGFjaGVzIHJlY3Vyc2l2ZWx5CisgICAgLy9vYmotPnNldFdyYXBwZXIo
MCk7IGFscmVhZHkgZG9uZSBieSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2goKT8KIH0KIAog
dm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aikKQEAgLTM3LDE2ICs0NCw3OCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQogICAgIGdfb2JqZWN0X3VucmVmKGF0a09iaik7CiB9
CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBTdHJpbmcmKQordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKKyAgICBwcmludGYo
InBvc3ROb3RpZmljYXRpb246ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
aWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gbm90aWZpY2F0aW9ucyBm
b3IgdGV4dCBpbnB1dCBvYmplY3RzIGFyZSBzZW50IHRvIHRoYXQgb2JqZWN0CisgICAgLy8gYWxs
IG90aGVycyBhcmUgc2VudCB0byB0aGUgdG9wIFdlYkFyZWEKKyAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gb2JqID0gZ2V0T3JDcmVhdGUocmVuZGVyZXIpLT5vYnNlcnZhYmxlT2JqZWN0
KCk7CisgICAgaWYgKCFvYmopCisgICAgICAgIG9iaiA9IGdldChyZW5kZXJlci0+ZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKSk7CisKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1lc3NhZ2UgPT0gIkFYVmFsdWVDaGFuZ2VkIikgeworI2lmIDAKKyAgICAgICAgZ2ludCBz
dGFydCA9IDA7CisgICAgICAgIGdpbnQgbGVuZ3RoID0gb2JqLT50ZXh0TGVuZ3RoKCk7CisgICAg
ICAgIC8vIFRPRE86IHNpZ25hbCBkZXRhaWwKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG9iai0+d3JhcHBlcigpLCAidGV4dF9jaGFuZ2VkOjppbnNlcnQiLCBzdGFydCwgbGVuZ3RoKTsK
KyNlbmRpZgorICAgIH0gZWxzZSBpZiAobWVzc2FnZSA9PSAiQVhTZWxlY3RlZFRleHRDaGFuZ2Vk
IikgeworICAgICAgICBwcmludGYoImVtaXRcbiIpOworICAgICAgICAvL3RleHQtY2FyZXQtbW92
ZWQgKGdpbnQgbmV3X3Bvc2l0aW9uKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGZp
cmVkIGZyb20gU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQorICAgICAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUob2JqLT53cmFwcGVyKCksICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIik7CisgICAg
fQogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb25Ub0VsZW1lbnQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlm
aWNhdGlvblRvRWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7CisgICAgcHJpbnRmKCJwb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50OiAlc1xuIiwg
bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiB0
byB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaXRzZWxmLCBub3Qgb25lIG9mIGl0cyBhbmNlc3RvcnMK
KyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8QWNjZXNz
aWJpbGl0eU9iamVjdD4gb2JqID0gZ2V0KHJlbmRlcmVyKTsKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1lc3NhZ2UgPT0gIkFYTG9hZENvbXBsZXRlIikgeworICAg
ICAgICBwcmludGYoImVtaXQgbG9hZC1jb21wbGV0ZVxuIik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG9ubHkgZmlyZWQgZnJvbSBEb2N1bWVudC5jcHAgTUFDCisgICAgICAgIGF0a19vYmpl
Y3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShBVEtfT0JKRUNUKG9iai0+d3JhcHBlcigpKSwgQVRLX1NU
QVRFX0JVU1ksIEZBTFNFKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9iai0+d3Jh
cHBlcigpLCAibG9hZC1jb21wbGV0ZSIpOworICAgIH0KKworI2lmIDAKKyAgICBpZiAobWVzc2Fn
ZSA9PSAiQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCIpIHsKKyAgICAgICAgcHJpbnRmKCJlbWl0
IEFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWRcbiIpOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUob2JqLT53cmFwcGVyKCksICIiLCBvYmotPmZvY3VzZWRVSUVsZW1lbnQoKS0+d3JhcHBl
cigpKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFRPRE86IG5lZWRzIEFUS19TVEFURV9NQU5B
R0VTX0RFU0NFTkRBTlRTCisgICAgaWYgKG1lc3NhZ2UgPT0gIkFYRm9jdXNlZFVJRWxlbWVudENo
YW5nZWQiKSB7CisgICAgICAgIHByaW50ZigiZW1pdCBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2Vk
XG4iKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9iai0+d3JhcHBlcigpLCAiYWN0
aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIsIG9iai0+YWN0aXZlRGVzY2VuZGFudCgpLT53cmFwcGVy
KCkpOworICAgIH0KKworICAgIC8vIFRPRE86IENvdmVyIHRoZSBvdGhlciBsb2FkZXIgc2lnbmFs
cyBzdXBwb3J0ZWQgYnkgQXRrRG9jdW1lbnQuCiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGZp
cmVkIG9ubHkgaW4gTUFDCisgICAgcHJpbnRmKCJoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdl
ZCgpXG4iKTsKKworICAgIC8vZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9iai0+d3JhcHBlcigpLCAi
Zm9jdXNfZXZlbnQiLCBUUlVFKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNv
cmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKaW5kZXggMTcxMDAyNy4uYjdl
NzgwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRr
LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjIsNiArMjMsOCBAQAogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQogCisj
aW5jbHVkZSA8YXRrL2F0ay5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdApAQCAt
MjksNiArMzIsMjUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdu
b3JlQXR0YWNobWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eU9iamVjdDo6d3JhcHBlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd3JhcHBlcjsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
ZXRXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQoreworICAgIGlm
ICh3cmFwcGVyID09IG1fd3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fd3Jh
cHBlcikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV93cmFwcGVyKTsKKworICAgIG1fd3JhcHBl
ciA9IHdyYXBwZXI7CisKKyAgICBpZiAobV93cmFwcGVyKQorICAgICAgICBnX29iamVjdF9yZWYo
bV93cmFwcGVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSEFW
RShBQ0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCA4NGYzZDM0Li5mMTZkODhhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9X
ZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMzYs
OCArMzYsMjcgQEAKIAogI2luY2x1ZGUgPGF0ay9hdGsuaD4KIAorI2lmIFBMQVRGT1JNKEdUSykK
KyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisK
KyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
K3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmYWxsYmFja09iamVjdCgpCit7CisgICAgc3Rh
dGljIEFYT2JqZWN0Q2FjaGUqIGZhbGxiYWNrQ2FjaGUgPSBuZXcgQVhPYmplY3RDYWNoZSgpOwor
ICAgIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSAwOworICAgIGlmICghb2Jq
ZWN0KSB7CisgICAgICAgb2JqZWN0ID0gZmFsbGJhY2tDYWNoZS0+Z2V0T3JDcmVhdGUoTGlzdEJv
eE9wdGlvblJvbGUpOworICAgICAgIG9iamVjdC0+cmVmKCk7CisgICAgfQorCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKwogLy8gVXNlZCB0byBwcm92aWRlIGNvbnN0IGNoYXIqIHJldHVybnMuCiBz
dGF0aWMgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQogewpAQCAt
NDYsNiArNjUsNDAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHJldHVyblN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cikKICAgICByZXR1cm4gcmV0dXJuZWRTdHJpbmcuZGF0YSgpOwogfQogCisvLyBVc2Vk
IHRvIHByb3ZpZGUgY2hhciogcmV0dXJucywgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KK3N0
YXRpYyBjaGFyKiBjb3B5U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBn
X3N0cmR1cChzdHIudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyBHU0xpc3QqIGxpc3RQcmVw
ZW5kKEdTTGlzdCogbGlzdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQoreworICAgIEF0a0F0dHJpYnV0ZSogYXR0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXRrQXR0cmli
dXRlKj4oZ19tYWxsb2Moc2l6ZW9mKEF0a0F0dHJpYnV0ZSkpKTsKKyAgICBhdHRyLT5uYW1lID0g
Y29weVN0cmluZyhuYW1lKTsKKyAgICBhdHRyLT52YWx1ZSA9IGNvcHlTdHJpbmcodmFsdWUpOwor
ICAgIHJldHVybiBnX3NsaXN0X3ByZXBlbmQobGlzdCwgYXR0cik7Cit9CisKK3N0YXRpYyBib29s
IHNlbGVjdFRleHQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgaW50IHN0YXJ0X3Bv
cywgaW50IGVuZF9wb3MpCit7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJD
b3JlCisgICAgLy9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5n
ZShzdGFydF9wb3MsIGVuZF9wb3MgLSBzdGFydF9wb3MpKTsKKyAgICAvL2NvcmVPYmplY3QtPnNl
dFNlbGVjdGVkVGV4dChTdHJpbmcoKSk7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRGb2N1c2VkKHRy
dWUpOworICAgIGlmICghY29yZU9iamVjdC0+aXNGb2N1c2VkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZShz
dGFydF9wb3MsIGVuZF9wb3MgLSBzdGFydF9wb3MpKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsgLy8/
Cit9CisKK3N0YXRpYyBib29sIHNlbGVjdFRleHQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCwgaW50IHBvcykKK3sKKyAgICByZXR1cm4gc2VsZWN0VGV4dChjb3JlT2JqZWN0LCBwb3Ms
IHBvcyk7Cit9CisKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKFdlYktpdEFjY2Vz
c2libGUqIGFjY2Vzc2libGUpCiB7CiAgICAgaWYgKCFhY2Nlc3NpYmxlKQpAQCAtNjIsMTYgKzEx
NSwzMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtPYmplY3QqIG9iamVj
dCkKICAgICByZXR1cm4gY29yZShXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpKTsKIH0KIAorc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7
CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChjb21wb25lbnQpKTsKK30KKwogc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgcmV0dXJu
IGNvcmUoQVRLX09CSkVDVChhY3Rpb24pKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmUoQXRrU3RyZWFtYWJsZUNvbnRlbnQqIHN0cmVhbWFibGUpCitzdGF0aWMgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZShBdGtEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
IGNvcmUoQVRLX09CSkVDVChzdHJlYW1hYmxlKSk7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVD
VChkb2N1bWVudCkpOwogfQogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtJ
bWFnZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChpbWFnZSkpOworfQor
CisvLyBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtTdHJlYW1hYmxlQ29udGVu
dCogc3RyZWFtYWJsZSkKKy8vIHsKKy8vICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHN0cmVh
bWFibGUpKTsKKy8vIH0KKwogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVGV4
dCogdGV4dCkKIHsKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRleHQpKTsKQEAgLTgyLDEy
ICsxNTAsNzkgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVU
ZXh0KiB0ZXh0KQogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwogfQogCitzdGF0
aWMgSW50UG9pbnQgY29udGVudHNGcm9tQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QsIEF0a0Nvb3JkVHlwZSBjb29yZF90eXBlLCBnaW50IHgsIGdpbnQgeSkKK3sKKyAgICBJbnRQ
b2ludCBwb3MoeCwgeSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3Qt
PmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgaWYgKGZyYW1lVmlldykgeworICAgICAgICBzd2l0
Y2ggKGNvb3JkX3R5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb3MpOworICAgICAgICBjYXNl
IEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcG9zOworfQorCitz
dGF0aWMgdm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qs
IEF0a0Nvb3JkVHlwZSBjb29yZF90eXBlLCBJbnRSZWN0IHJlY3QsIGdpbnQqIHgsIGdpbnQqIHks
IGdpbnQqIHdpZHRoID0gMCwgZ2ludCogaGVpZ2h0ID0gMCkKK3sKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisKKyAgICBpZiAoZnJh
bWVWaWV3KSB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHdvcmthcm91bmQgZm9yIGNvbmZ1c2luZyBjb29yZGluYXRlIGNvbnZlcnNpb25zCisgICAgICAg
IC8vIHRoYXQgZG9uJ3Qgd29yayBpbiBXZWJDb3JlCisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0
ID0gZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCk7CisgICAgICAgIEdk
a1dpbmRvdyogd2luID0gd2lkZ2V0LT53aW5kb3c7CisgICAgICAgIHN3aXRjaCAoY29vcmRfdHlw
ZSkgeworICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46CisgICAgICAgICAgICByZWN0ID0gZnJh
bWVWaWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgICAgICAgICAgcmVjdC5tb3ZlKHdp
ZGdldC0+YWxsb2NhdGlvbi54LCB3aWRnZXQtPmFsbG9jYXRpb24ueSk7CisgICAgICAgICAgICBn
aW50IG9yaWdpblgsIG9yaWdpblk7CisgICAgICAgICAgICBnZGtfd2luZG93X2dldF9vcmlnaW4o
d2luLCAmb3JpZ2luWCwgJm9yaWdpblkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKG9yaWdpblgs
IG9yaWdpblkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRP
VzoKKyAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7
CisgICAgICAgICAgICByZWN0Lm1vdmUod2lkZ2V0LT5hbGxvY2F0aW9uLngsIHdpZGdldC0+YWxs
b2NhdGlvbi55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorICAgICAg
ICBzd2l0Y2ggKGNvb3JkX3R5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAg
ICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICBy
ZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmICh4KQorICAgICAgICAqeCA9
IHJlY3QueCgpOworICAgIGlmICh5KQorICAgICAgICAqeSA9IHJlY3QueSgpOworICAgIGlmICh3
aWR0aCkKKyAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisg
ICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOworfQorCiBleHRlcm4gIkMiIHsKIAogc3Rh
dGljIGdwb2ludGVyIHBhcmVudF9jbGFzcyA9IE5VTEw7CiAKK3N0YXRpYyBpbnQgZ1dyYXBwZXJD
b3VudCA9IDA7CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQoQXRrT2JqZWN0
KiBvYmplY3QsIGdwb2ludGVyIGRhdGEpCiB7CisgICAgZ1dyYXBwZXJDb3VudCsrOworICAgIHBy
aW50ZigiZ1dyYXBwZXJDb3VudCsrOiAlZFxuIiwgZ1dyYXBwZXJDb3VudCk7CisKICAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19BQ0NFU1NJQkxFKG9iamVjdCkpOwogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoZGF0YSk7CiAKQEAgLTEwMiwxNiArMjM3LDQ1IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9hY2Nlc3NpYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICAvLyBUaGlzIGlzIGEg
Z29vZCB0aW1lIHRvIGNsZWFyIHRoZSByZXR1cm4gYnVmZmVyLgogICAgIHJldHVyblN0cmluZyhT
dHJpbmcoKSk7CiAKKyAgICBnV3JhcHBlckNvdW50LS07CisgICAgcHJpbnRmKCJnV3JhcHBlckNv
dW50LS06ICVkXG4iLCBnV3JhcHBlckNvdW50KTsKKwogICAgIGlmIChHX09CSkVDVF9DTEFTUyhw
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKICAgICAgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRf
YWNjZXNzaWJsZV9nZXRfbmFtZShBdGtPYmplY3QqIG9iamVjdCkKIHsKLSAgICAvLyBUT0RPOiBE
ZWFsIHdpdGggbGF0ZXIgY2hhbmdlcy4KLSAgICBpZiAoIW9iamVjdC0+bmFtZSkKLSAgICAgICAg
YXRrX29iamVjdF9zZXRfbmFtZShvYmplY3QsIGNvcmUob2JqZWN0KS0+c3RyaW5nVmFsdWUoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gb2JqZWN0LT5uYW1lOworICAvL05vdGU6IGF0a19v
YmplY3Rfc2V0X25hbWUoKSByYWlzZXMgYSBjaGFuZ2Ugc2lnbmFsCisKKyAgU3RyaW5nIGN1cnJW
YWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgob2JqZWN0LT5uYW1lKTsKKyAgU3RyaW5nIG5ld1ZhbHVl
ICA9IGNvcmUob2JqZWN0KS0+dGl0bGUoKTsKKworICBpZiAobmV3VmFsdWUgIT0gY3VyclZhbHVl
KSB7CisgICAgZ19mcmVlKG9iamVjdC0+bmFtZSk7CisgICAgb2JqZWN0LT5uYW1lID0gY29weVN0
cmluZyhuZXdWYWx1ZSk7CisgIH0KKworICByZXR1cm4gb2JqZWN0LT5uYW1lOworCisjaWYgMAor
ICBTdHJpbmcgY3Vyck5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KG9iamVjdC0+bmFtZSk7CisKKyAg
aWYgKGNvcmUob2JqZWN0KS0+dGl0bGUoKSAhPSBjdXJyTmFtZSkgeworICAgIGlmIChvYmplY3Qt
Pm5hbWUpCisgICAgICBwcmludGYoInJlbmFtZSBmb3IgJWQ6ICclcycgdG8gJyVzJ1xuIiwgb2Jq
ZWN0LCBvYmplY3QtPm5hbWUsIGNvcmUob2JqZWN0KS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBhdGtfb2JqZWN0X3NldF9uYW1lKG9iamVjdCwgY29yZShvYmplY3QpLT50aXRsZSgpLnV0
ZjgoKS5kYXRhKCkpOworICB9CisKKyAgcmV0dXJuIG9iamVjdC0+bmFtZTsKKyNlbmRpZgorCisj
aWYgMAorICAvLyBUT0RPOiBEZWFsIHdpdGggbGF0ZXIgY2hhbmdlcy4KKyAgaWYgKCFvYmplY3Qt
Pm5hbWUpCisgICAgYXRrX29iamVjdF9zZXRfbmFtZShvYmplY3QsIGNvcmUob2JqZWN0KS0+dGl0
bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgcmV0dXJuIG9iamVjdC0+bmFtZTsKKyNlbmRpZgogfQog
CiBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9kZXNjcmlwdGlvbihB
dGtPYmplY3QqIG9iamVjdCkKQEAgLTExOSwxNSArMjgzLDI3IEBAIHN0YXRpYyBjb25zdCBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9uKEF0a09iamVjdCogb2JqZWN0KQog
ICAgIC8vIFRPRE86IHRoZSBNb3ppbGxhIE1TQUEgaW1wbGVtZW50YXRpb24gcHJlcGVuZHMgIkRl
c2NyaXB0aW9uOiAiCiAgICAgLy8gU2hvdWxkIHdlIGRvIHRoaXMgdG9vPwogCisgICAgU3RyaW5n
IGN1cnJWYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgob2JqZWN0LT5kZXNjcmlwdGlvbik7CisgICAg
U3RyaW5nIG5ld1ZhbHVlID0gY29yZShvYmplY3QpLT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KTsKKworICAgIGlmIChuZXdWYWx1ZSAhPSBjdXJyVmFsdWUpIHsKKyAgICAgICAgZ19mcmVlKG9i
amVjdC0+ZGVzY3JpcHRpb24pOworICAgICAgICBvYmplY3QtPmRlc2NyaXB0aW9uID0gY29weVN0
cmluZyhuZXdWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdC0+ZGVzY3JpcHRpb247
CisKKyNpZiAwCiAgICAgLy8gVE9ETzogRGVhbCB3aXRoIGxhdGVyIGNoYW5nZXMuCiAgICAgaWYg
KCFvYmplY3QtPmRlc2NyaXB0aW9uKQogICAgICAgICBhdGtfb2JqZWN0X3NldF9kZXNjcmlwdGlv
bihvYmplY3QsIGNvcmUob2JqZWN0KS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgcmV0dXJuIG9iamVjdC0+ZGVzY3JpcHRpb247CisjZW5kaWYKIH0KIAog
c3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X3BhcmVudChBdGtPYmplY3Qq
IG9iamVjdCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlUGFyZW50ID0gY29yZShv
YmplY3QpLT5wYXJlbnRPYmplY3QoKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlUGFy
ZW50ID0gY29yZShvYmplY3QpLT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKIAogICAgIGlmICgh
Y29yZVBhcmVudCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzcsMTggKzMxMywzOSBAQCBz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcGFyZW50KEF0a09iamVjdCog
b2JqZWN0KQogCiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbl9jaGlsZHJlbihB
dGtPYmplY3QqIG9iamVjdCkKIHsKKyAgICAvLyBUT0RPOiBWZXJpZnkKKyAgICBpZiAoIWNvcmUo
b2JqZWN0KS0+aXNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBIYWNrIGZv
ciBkZWJ1ZworICAgIC8vaWYgKGNvcmUob2JqZWN0KS0+cm9sZVZhbHVlKCkgPT0gU3RhdGljVGV4
dFJvbGUpCisgICAgLy8gICAgcmV0dXJuIDA7CisjaWYgMAorICAgIHN3aXRjaCAoY29yZShvYmpl
Y3QpLT5yb2xlVmFsdWUoKSkgeworICAgIGNhc2UgTGlua1JvbGU6CisgICAgY2FzZSBXZWJDb3Jl
TGlua1JvbGU6CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJu
IGNvcmUob2JqZWN0KS0+Y2hpbGRyZW4oKS5zaXplKCk7CiB9CiAKK3N0YXRpYyBnaW50IHdlYmtp
dF9hY2Nlc3NpYmxlX2dldF9pbmRleF9pbl9wYXJlbnQoQXRrT2JqZWN0KiBvYmplY3QpOworCiBz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfY2hpbGQoQXRrT2JqZWN0KiBv
YmplY3QsIGdpbnQgaW5kZXgpCiB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaW5kZXggPj0g
MCwgTlVMTCk7CisKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShv
YmplY3QpOwogCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaW5kZXggPj0gMCwgTlVMTCk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBjb3Jl
T2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKSwgTlVMTCk7CisgICAgaWYgKCFjb3JlT2JqZWN0LT5p
c0xvYWRlZCgpKSAvL2dvb2QgaWRlYT8KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjb3JlT2JqZWN0LT5jaGlsZHJlbigpLmF0KGlu
ZGV4KS5nZXQoKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
ID4mIGNoaWxkcmVuID0gY29yZU9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IGNoaWxkcmVuLnNpemUoKSwgTlVM
TCk7CiAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGlsZHJlbltpbmRl
eF0uZ2V0KCk7CiAgICAgaWYgKCFjb3JlQ2hpbGQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBA
IC0xNTcsOTkgKzM1NCw0MDYgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVf
cmVmX2NoaWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQogICAgIC8vYXRrX29iamVj
dF9zZXRfcGFyZW50KGNoaWxkLCBvYmplY3QpOwogICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7CiAK
KyAgICAvL3ByaW50ZigicmVxdWVzdGVkICVkLCBhY3R1YWw6ICVkXG4iLCBpbmRleCwgd2Via2l0
X2FjY2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudChjaGlsZCkpOworCiAgICAgcmV0dXJuIGNo
aWxkOwogfQogCisjaWYgMAorc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfcmVm
X2NoaWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChpbmRleCA+PSAwLCBOVUxMKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpbmRl
eCA8IGNvcmVPYmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpLCBOVUxMKTsKKworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVDaGlsZCA9IGNvcmVPYmplY3Qt
PmZpcnN0Q2hpbGQoKTsgY29yZUNoaWxkOyBjb3JlQ2hpbGQgPSBjb3JlQ2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKKyAgICAgICAgaWYgKGNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3JlZihjb3JlQ2hpbGQtPndyYXBwZXIoKSk7CisgICAgICAgICAg
ICByZXR1cm4gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgICAgICAgICBwcmludGYoInJlcXVl
c3RlZCAlZCwgYWN0dWFsOiAlZFxuIiwgaW5kZXgsIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9pbmRl
eF9pbl9wYXJlbnQoY29yZUNoaWxkLT53cmFwcGVyKCkpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGkrKzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCiBzdGF0aWMgZ2lu
dCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50KEF0a09iamVjdCogb2JqZWN0
KQogewotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkLgotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcHJpbnRmKCJ3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50KCkgJXBcbiIsIG9iamVjdCk7CisKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gY29yZShvYmplY3QpLT5wYXJlbnRPYmplY3RVbmlnbm9yZWQo
KTsKKworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIXBh
cmVudC0+aXNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+JiBjaGlsZHJlbiA9IHBhcmVudC0+Y2hpbGRy
ZW4oKTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAoY2hpbGRyZW5baV0u
Z2V0KCkgPT0gY29yZU9iamVjdCkKKyAgICAgICAgLy9pZiAoY2hpbGRyZW5baV0tPndyYXBwZXIo
KSA9PSBvYmplY3QpCisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgIHJldHVybiAtMTsKK30K
Kworc3RhdGljIEF0a1JlbGF0aW9uU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25f
c2V0KEF0a09iamVjdCogb2JqZWN0KQoreworICAgIC8vcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJs
ZV9yZWZfcmVsYXRpb25fc2V0KCkgJWRcbiIsIG9iamVjdCk7CisKKyAgICBBdGtSZWxhdGlvblNl
dCogcmVsYXRpb25TZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlZl9yZWxh
dGlvbl9zZXQob2JqZWN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZShvYmplY3QpOworCisgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uOworICAgIC8vQXRrT2Jq
ZWN0KiB0YXJnZXRzWzFdOworCisgICAgcmVsYXRpb24gPSBhdGtfcmVsYXRpb25fc2V0X2dldF9y
ZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlkpOwor
ICAgIGlmIChyZWxhdGlvbikKKyAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9yZW1vdmUocmVsYXRp
b25TZXQsIHJlbGF0aW9uKTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHRpdGxlT2JqZWN0
ID0gY29yZU9iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKyAgICBpZiAodGl0bGVPYmplY3QpIHsK
KyAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25fYnlfdHlwZShyZWxhdGlvblNl
dCwgQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZLCB0aXRsZU9iamVjdC0+d3JhcHBlcigpKTsKKyNp
ZiAwCisgICAgICAgIHRhcmdldHNbMF0gPSB0aXRsZU9iamVjdC0+d3JhcHBlcigpOworICAgICAg
ICByZWxhdGlvbiA9IGF0a19yZWxhdGlvbl9uZXcodGFyZ2V0cywgMSwgQVRLX1JFTEFUSU9OX0xB
QkVMTEVEX0JZKTsKKyAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGQocmVsYXRpb25TZXQsIHJl
bGF0aW9uKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocmVsYXRpb24pOworI2VuZGlmCisgICAg
fQorCisgICAgcmV0dXJuIHJlbGF0aW9uU2V0OwogfQogCiBzdGF0aWMgQXRrUm9sZSBhdGtSb2xl
KEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgY2Fz
ZSBXZWJDb3JlOjpCdXR0b25Sb2xlOgorICAgIGNhc2UgVW5rbm93blJvbGU6CisgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9VTktOT1dOOworICAgIGNhc2UgQnV0dG9uUm9sZToKICAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1BVU0hfQlVUVE9OOwotICAgIGNhc2UgV2ViQ29yZTo6UmFkaW9CdXR0b25S
b2xlOgorICAgIGNhc2UgUmFkaW9CdXR0b25Sb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVf
UkFESU9fQlVUVE9OOwotICAgIGNhc2UgV2ViQ29yZTo6Q2hlY2tCb3hSb2xlOgorICAgIGNhc2Ug
Q2hlY2tCb3hSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfQ0hFQ0tfQk9YOwotICAgIGNh
c2UgV2ViQ29yZTo6U2xpZGVyUm9sZToKKyAgICBjYXNlIFNsaWRlclJvbGU6CiAgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9TTElERVI7Ci0gICAgY2FzZSBXZWJDb3JlOjpUYWJHcm91cFJvbGU6Cisg
ICAgY2FzZSBUYWJHcm91cFJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9QQUdFX1RBQl9M
SVNUOwotICAgIGNhc2UgV2ViQ29yZTo6VGV4dEZpZWxkUm9sZToKLSAgICBjYXNlIFdlYkNvcmU6
OlRleHRBcmVhUm9sZToKLSAgICBjYXNlIFdlYkNvcmU6Okxpc3RNYXJrZXJSb2xlOgorICAgIGNh
c2UgVGV4dEZpZWxkUm9sZToKKyAgICBjYXNlIFRleHRBcmVhUm9sZToKICAgICAgICAgcmV0dXJu
IEFUS19ST0xFX0VOVFJZOwotICAgIGNhc2UgV2ViQ29yZTo6U3RhdGljVGV4dFJvbGU6Ci0gICAg
ICAgIHJldHVybiBBVEtfUk9MRV9URVhUOyAvLz8KLSAgICBjYXNlIFdlYkNvcmU6Ok91dGxpbmVS
b2xlOgorICAgIGNhc2UgU3RhdGljVGV4dFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9U
RVhUOworICAgIGNhc2UgT3V0bGluZVJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9UUkVF
OwotICAgIGNhc2UgV2ViQ29yZTo6Q29sdW1uUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xF
X1VOS05PV047IC8vPwotICAgIGNhc2UgV2ViQ29yZTo6Um93Um9sZToKLSAgICAgICAgcmV0dXJu
IEFUS19ST0xFX0xJU1RfSVRFTTsKLSAgICBjYXNlIFdlYkNvcmU6Okdyb3VwUm9sZToKLSAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047IC8vPwotICAgIGNhc2UgV2ViQ29yZTo6TGlzdFJv
bGU6CisgICAgY2FzZSBNZW51QmFyUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlVf
QkFSOworICAgIGNhc2UgTWVudVJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VOwor
ICAgIGNhc2UgTWVudUl0ZW1Sb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVV9JVEVN
OworICAgIGNhc2UgQ29sdW1uUm9sZToKKyAgICAgICAgLy9yZXR1cm4gQVRLX1JPTEVfVEFCTEVf
Q09MVU1OX0hFQURFUjsgLy8/CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOyAvLyBN
YXRjaGVzIE1vemlsbGEKKyAgICBjYXNlIFJvd1JvbGU6CisgICAgICAgIC8vcmV0dXJuIEFUS19S
T0xFX1RBQkxFX1JPV19IRUFERVI7IC8vPworICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElTVF9J
VEVNOyAvLyBNYXRjaGVzIE1vemlsbGEKKyAgICBjYXNlIFRvb2xiYXJSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfVE9PTF9CQVI7CisgICAgY2FzZSBCdXN5SW5kaWNhdG9yUm9sZToKKyAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1BST0dSRVNTX0JBUjsgLy8/CisgICAgY2FzZSBQcm9ncmVz
c0luZGljYXRvclJvbGU6CisgICAgICAgIC8vcmV0dXJuIEFUS19ST0xFX1NQSU5fQlVUVE9OOyAv
L1NvbWUgY29uZnVzaW9uIGhlcmUgaW4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKyAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1BST0dSRVNTX0JBUjsKKyAgICBjYXNlIFdpbmRvd1JvbGU6
CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9XSU5ET1c7CisgICAgY2FzZSBDb21ib0JveFJvbGU6
CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9DT01CT19CT1g7CisgICAgY2FzZSBTcGxpdEdyb3Vw
Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NQTElUX1BBTkU7CisgICAgY2FzZSBTcGxp
dHRlclJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9TRVBBUkFUT1I7CisgICAgY2FzZSBD
b2xvcldlbGxSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfQ09MT1JfQ0hPT1NFUjsKKyAg
ICBjYXNlIExpc3RSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElTVDsKLSAgICBjYXNl
IFdlYkNvcmU6OlRhYmxlUm9sZToKKyAgICBjYXNlIFNjcm9sbEJhclJvbGU6CisgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9TQ1JPTExfQkFSOworICAgIGNhc2UgR3JpZFJvbGU6IC8vPworICAgIGNh
c2UgVGFibGVSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEFCTEU7Ci0gICAgY2FzZSBX
ZWJDb3JlOjpMaW5rUm9sZToKLSAgICBjYXNlIFdlYkNvcmU6OldlYkNvcmVMaW5rUm9sZToKKyAg
ICBjYXNlIEFwcGxpY2F0aW9uUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0FQUExJQ0FU
SU9OOworICAgIC8vY2FzZSBMYWJlbFJvbGU6IC8vIFRPRE86IGFkZCBMYWJlbFJvbGU/CisgICAg
Ly8gICAgcmV0dXJuIEFUS19ST0xFX0xBQkVMOworICAgIGNhc2UgR3JvdXBSb2xlOgorICAgIGNh
c2UgUmFkaW9Hcm91cFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9QQU5FTDsKKyAgICBj
YXNlIENlbGxSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEFCTEVfQ0VMTDsKKyAgICBj
YXNlIExpbmtSb2xlOgorICAgIGNhc2UgV2ViQ29yZUxpbmtSb2xlOgorICAgIGNhc2UgSW1hZ2VN
YXBMaW5rUm9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJTks7Ci0gICAgY2FzZSBXZWJD
b3JlOjpJbWFnZU1hcFJvbGU6Ci0gICAgY2FzZSBXZWJDb3JlOjpJbWFnZVJvbGU6CisgICAgY2Fz
ZSBJbWFnZU1hcFJvbGU6CisgICAgY2FzZSBJbWFnZVJvbGU6CiAgICAgICAgIHJldHVybiBBVEtf
Uk9MRV9JTUFHRTsKKyAgICBjYXNlIExpc3RNYXJrZXJSb2xlOgorICAgICAgICByZXR1cm4gQVRL
X1JPTEVfUk9XX0hFQURFUjsKKyAgICBjYXNlIFdlYkFyZWFSb2xlOgorICAgICAgICAvL3JldHVy
biBBVEtfUk9MRV9IVE1MX0NPTlRBSU5FUjsgLy8/CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9E
T0NVTUVOVF9GUkFNRTsKKyAgICBjYXNlIEhlYWRpbmdSb2xlOgorICAgICAgICByZXR1cm4gQVRL
X1JPTEVfSEVBRElORzsKKyAgICBjYXNlIExpc3RCb3hSb2xlOgorICAgICAgICByZXR1cm4gQVRL
X1JPTEVfTElTVDsKKyAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgorICAgICAgICByZXR1cm4g
QVRLX1JPTEVfTElTVF9JVEVNOwogICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigidW5yZWNv
Z25pc2VkIGExMXkgcm9sZTogJWRcbiIsIHJvbGUpOwogICAgICAgICByZXR1cm4gQVRLX1JPTEVf
VU5LTk9XTjsKICAgICB9CiB9CiAKIHN0YXRpYyBBdGtSb2xlIHdlYmtpdF9hY2Nlc3NpYmxlX2dl
dF9yb2xlKEF0a09iamVjdCogb2JqZWN0KQogeworICAgIC8vaWYgKGNvcmUob2JqZWN0KS0+YWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgIC8vICAgIHJldHVybiBBVEtfUk9MRV9SRURVTkRB
TlRfT0JKRUNUOyAvLz8KKworICAgIC8vIEhhY2sgZm9yIGRlYnVnCisgICAgLy9pZiAoY29yZShv
YmplY3QpLT5yb2xlVmFsdWUoKSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAvLyAgICByZXR1cm4g
QVRLX1JPTEVfUkVEVU5EQU5UX09CSkVDVDsKKwogICAgIHJldHVybiBhdGtSb2xlKGNvcmUob2Jq
ZWN0KS0+cm9sZVZhbHVlKCkpOwogfQogCitzdGF0aWMgRWxlbWVudCogZ2V0RWxlbWVudChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG9iamVj
dCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSk7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtp
dF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQoreworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisgICAgQXRrQXR0
cmlidXRlU2V0KiBhdHRycyA9IE5VTEw7CisKKyAgICAvLyBUaGlzIGlzIGhlcmUgdG8gaGVscCB3
aXRoIGRlYnVnZ2luZyBvbmx5LgorICAgIGlmIChjb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpCisgICAgICAgIGF0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsICJpZ25vcmVkIiwg
InRydWUiKTsKKworICAgIGlmIChFbGVtZW50KiBlbHQgPSBnZXRFbGVtZW50KGNvcmVPYmplY3Qp
KQorICAgICAgICBhdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAidGFnIiwgZWx0LT50YWdOYW1l
KCkpOworCisgICAgLy8gRm9yIGRlYnVnZ2luZworICAgIC8vYXR0cnMgPSBsaXN0UHJlcGVuZChh
dHRycywgImF0ay1yb2xlIiwgYXRrX3JvbGVfZ2V0X25hbWUod2Via2l0X2FjY2Vzc2libGVfZ2V0
X3JvbGUob2JqZWN0KSkpOworICAgIC8vYXR0cnMgPSBsaXN0UHJlcGVuZChhdHRycywgIndlYmNv
cmUtcm9sZSIsIFN0cmluZzo6bnVtYmVyKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpKSk7CisgICAg
Ly9hdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAiaXNEYXRhVGFibGUiLCBjb3JlT2JqZWN0LT5p
c0RhdGFUYWJsZSgpID8gInRydWUiIDogImZhbHNlIik7CisKKyAgICByZXR1cm4gYXR0cnM7Cit9
CisKK3N0YXRpYyBBdGtTdGF0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfcmVmX3N0YXRlX3NldChB
dGtPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZShvYmplY3QpOworICAgIEF0a1N0YXRlU2V0KiBzdGF0ZVNldCA9IEFUS19PQkpFQ1Rf
Q0xBU1MocGFyZW50X2NsYXNzKS0+cmVmX3N0YXRlX3NldChvYmplY3QpOworCisgICAgaWYgKGNv
cmVPYmplY3QgPT0gZmFsbGJhY2tPYmplY3QoKSkgeworICAgICAgICBhdGtfc3RhdGVfc2V0X2Fk
ZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0RFRlVOQ1QpOworICAgICAgICByZXR1cm4gc3Rh
dGVTZXQ7CisgICAgfQorCisgICAgLy8gVE9ETzogU3VwcG9ydCBBVEtfU1RBVEVfT1BBUVVFCisg
ICAgLy9hdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX09QQVFVRSk7
CisKKyAgICAvLyBUaGVzZSB0aHJlc2hvbGRzIGFyZSBqdXN0IGEgZ3Vlc3MuCisgICAgSW50UmVj
dCByZWN0ID0gY29yZU9iamVjdC0+ZWxlbWVudFJlY3QoKTsKKyAgICBpZiAocmVjdC53aWR0aCgp
ID4gcmVjdC5oZWlnaHQoKSAqIDEuMikKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVTZXQsIEFUS19TVEFURV9IT1JJWk9OVEFMKTsKKyAgICBlbHNlIGlmIChyZWN0LmhlaWdo
dCgpID4gcmVjdC53aWR0aCgpICogMS4yKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0
ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1ZFUlRJQ0FMKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5p
c0NoZWNrZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFU
S19TVEFURV9DSEVDS0VEKTsKKworICAgIC8vIFNFTlNJVElWRSBzaG91bGQgYWN0dWFsbHkgYmUg
c2xpZ2h0bHkgZGlmZmVyZW50IHRvIEVOQUJMRUQuCisgICAgLy8gU2VlIHRoZSBBVEsgZG9jcy4K
KyAgICBpZiAoY29yZU9iamVjdC0+aXNFbmFibGVkKCkpIHsKKyAgICAgICAgYXRrX3N0YXRlX3Nl
dF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TRU5TSVRJVkUpOworICAgIH0K
KworICAgIGlmIChjb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkpCisgICAgICAgIGF0a19zdGF0ZV9z
ZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0VMRUNURUQpOworCisgICAgaWYgKGNv
cmVPYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShz
dGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzSW5k
ZXRlcm1pbmF0ZSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwg
QVRLX1NUQVRFX0lOREVURVJNSU5BVEUpOworCisgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0xvYWRl
ZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRF
X0JVU1kpOworCisgICAgLy8gSXMgdGhpcyByaWdodD8gQXBwYXJlbnRseSBuZWVkZWQgZm9yIGFj
dGl2ZS1kZXNjZW5kYW50LWNoYW5nZWQKKyAgICAvL2lmIChjb3JlT2JqZWN0LT5hY3RpdmVEZXNj
ZW5kYW50KCkpCisgICAgLy8gICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFU
S19TVEFURV9NQU5BR0VTX0RFU0NFTkRBTlRTKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc011
bHRpU2VsZWN0KCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBB
VEtfU1RBVEVfTVVMVElTRUxFQ1RBQkxFKTsKKworICAgIGlmICghY29yZU9iamVjdC0+aXNPZmZT
Y3JlZW4oKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19T
VEFURV9TSE9XSU5HKTsKKworICAgIC8vIEFsbCBpbnZpc2libGUgb2JqZWN0cyBhcmUgY3VycmVu
dGx5IGlnbm9yZWQKKyAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX1ZJU0lCTEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzUHJlc3NlZCgpKQorICAgICAg
ICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1BSRVNTRUQpOwor
CisgICAgaWYgKGNvcmVPYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0
X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworCisgICAgaWYgKCFjb3Jl
T2JqZWN0LT5pc1JlYWRPbmx5KCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0
YXRlU2V0LCBBVEtfU1RBVEVfRURJVEFCTEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzVmlz
aXRlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX1ZJU0lURUQpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRl
KCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Rk9DVVNBQkxFKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUZXh0Rmll
bGRSb2xlKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX1NJTkdMRV9MSU5FKTsKKyAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9
PSBUZXh0QXJlYVJvbGUpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0
LCBBVEtfU1RBVEVfTVVMVElfTElORSk7CisKKyAgICAvLyBUT0RPOiBBVEtfU1RBVEVfU0VMRUNU
QUJMRV9URVhUCisKKyAgICByZXR1cm4gc3RhdGVTZXQ7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtp
dF9hY2Nlc3NpYmxlX2NsYXNzX2luaXQoQXRrT2JqZWN0Q2xhc3MqIGtsYXNzKQogewogICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBB
dGtPYmplY3RDbGFzcyogYXRrX2NsYXNzID0gQVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7CiAKICAg
ICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoa2xhc3MpOwogCi0gICAg
a2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRfYWNjZXNzaWJsZV9pbml0OworICAgIGF0a19jbGFz
cy0+aW5pdGlhbGl6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQ7CisgICAgYXRrX2NsYXNzLT5n
ZXRfbmFtZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lOworICAgIGF0a19jbGFzcy0+Z2V0
X2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9uOworICAgIGF0
a19jbGFzcy0+Z2V0X3BhcmVudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9wYXJlbnQ7CisgICAg
YXRrX2NsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uX2NoaWxk
cmVuOworICAgIGF0a19jbGFzcy0+cmVmX2NoaWxkID0gd2Via2l0X2FjY2Vzc2libGVfcmVmX2No
aWxkOworICAgIGF0a19jbGFzcy0+Z2V0X2luZGV4X2luX3BhcmVudCA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9pbmRleF9pbl9wYXJlbnQ7CisgICAgYXRrX2NsYXNzLT5yZWZfcmVsYXRpb25fc2V0
ID0gd2Via2l0X2FjY2Vzc2libGVfcmVmX3JlbGF0aW9uX3NldDsKKyAgICBhdGtfY2xhc3MtPmdl
dF9yb2xlID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X3JvbGU7CisgICAgYXRrX2NsYXNzLT5nZXRf
YXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzOworICAgIGF0a19j
bGFzcy0+cmVmX3N0YXRlX3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9zdGF0ZV9zZXQ7CiAK
ICAgICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ZpbmFsaXpl
OworfQorCisvLyBDb21wb25lbnQKKworc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2li
bGVfY29tcG9uZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50KEF0a0NvbXBvbmVudCogY29tcG9u
ZW50LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkX3R5cGUpCit7CisgICAgSW50
UG9pbnQgcG9zID0gY29udGVudHNGcm9tQXRrKGNvcmUoY29tcG9uZW50KSwgY29vcmRfdHlwZSwg
eCwgeSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25lbnQp
LT5kb0FjY2Vzc2liaWxpdHlIaXRUZXN0KHBvcyk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAg
IHJldHVybiBOVUxMOworICAgIGdfb2JqZWN0X3JlZih0YXJnZXQtPndyYXBwZXIoKSk7CisgICAg
cmV0dXJuIHRhcmdldC0+d3JhcHBlcigpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNz
aWJsZV9jb21wb25lbnRfZ2V0X2V4dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQq
IHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29y
ZF90eXBlKQoreworICAgIEludFJlY3QgcmVjdCA9IGNvcmUoY29tcG9uZW50KS0+ZWxlbWVudFJl
Y3QoKTsKKyAgICBjb250ZW50c1RvQXRrKGNvcmUoY29tcG9uZW50KSwgY29vcmRfdHlwZSwgcmVj
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNj
ZXNzaWJsZV9jb21wb25lbnRfZ3JhYl9mb2N1cyhBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKK3sK
KyAgICBjb3JlKGNvbXBvbmVudCktPnNldEZvY3VzZWQodHJ1ZSk7CisgICAgcmV0dXJuIGNvcmUo
Y29tcG9uZW50KS0+aXNGb2N1c2VkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0a19jb21wb25lbnRf
aW50ZXJmYWNlX2luaXQoQXRrQ29tcG9uZW50SWZhY2UqIGlmYWNlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoaWZhY2UpOwogCi0gICAga2xhc3MtPmdldF9uYW1lID0gd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X25hbWU7Ci0gICAga2xhc3MtPmdldF9kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9kZXNjcmlwdGlvbjsKLSAgICBrbGFzcy0+Z2V0X3BhcmVudCA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2dldF9wYXJlbnQ7Ci0gICAga2xhc3MtPmdldF9uX2NoaWxkcmVuID0gd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X25fY2hpbGRyZW47Ci0gICAga2xhc3MtPnJlZl9jaGlsZCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3JlZl9jaGlsZDsKLSAgICAvL2tsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0g
d2Via2l0X2FjY2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudDsKLSAgICBrbGFzcy0+Z2V0X3Jv
bGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcm9sZTsKLSAgICAvL2tsYXNzLT5nZXRfYXR0cmli
dXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzOwotICAgIC8va2xhc3MtPnJl
Zl9zdGF0ZV9zZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfc3RhdGVfc2V0OwotICAgIC8va2xh
c3MtPnJlZl9yZWxhdGlvbl9zZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25fc2V0
OworICAgIGlmYWNlLT5yZWZfYWNjZXNzaWJsZV9hdF9wb2ludCA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludDsKKyAgICBpZmFjZS0+Z2V0X2V4dGVu
dHMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ2V0X2V4dGVudHM7CisgICAgaWZhY2Ut
PmdyYWJfZm9jdXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ3JhYl9mb2N1czsKIH0K
IAorLy8gQWN0aW9uCisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25f
ZG9fYWN0aW9uKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50IGkpCiB7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoaSA9PSAwLCBGQUxTRSk7CisgICAgLy9nX3JldHVybl92YWxfaWZfZmFpbChpID09
IDAsIEZBTFNFKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShh
Y3Rpb24pOworCisgICAgaWYgKGNvcmVPYmplY3QtPmFjdGlvbkVsZW1lbnQoKSkKKyAgICAgICAg
c3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybiBjb3JlKGFj
dGlvbiktPnByZXNzKCk7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIC8vIFRPRE86IHNo
b3cgbWVudQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICBpZiAo
Y29yZU9iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAg
ICAgY2FzZSAwOgorICAgICAgICAgICAgLy8gVE9ETzogY2FuY2VsCisgICAgICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiBjb3JlKGFjdGlv
biktPnByZXNzKCk7CisgICAgICAgIH0KKworICAgIC8vIFRPRE86IHNob3VsZCBiZSBzaG93IG1l
bnU/CiAgICAgcmV0dXJuIGNvcmUoYWN0aW9uKS0+cGVyZm9ybURlZmF1bHRBY3Rpb24oKTsKIH0K
IAogc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9uX2FjdGlvbnMoQXRr
QWN0aW9uKiBhY3Rpb24pCiB7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUoYWN0aW9uKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5hY3Rpb25FbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiAyOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzTWVudVJlbGF0ZWQoKSkK
KyAgICAgICAgcmV0dXJuIDI7CisKICAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGNvbnN0IGdj
aGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2Rlc2NyaXB0aW9uKEF0a0FjdGlvbiog
YWN0aW9uLCBnaW50IGkpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaSA9PSAwLCBOVUxM
KTsKKyAgICAvL2dfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgTlVMTCk7CiAgICAgLy8gVE9E
TzogTmVlZCBhIHdheSB0byBwcm92aWRlL2xvY2FsaXplIGFjdGlvbiBkZXNjcmlwdGlvbnMuCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gIiI7CkBAIC0yNTcsMTQgKzc2MSwxNSBA
QCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfZGVzY3Jp
cHRpb24oQXRrQWN0aW9uKiBhY3Rpb24sCiAKIHN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfYWN0aW9uX2dldF9rZXliaW5kaW5nKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50IGkp
CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaSA9PSAwLCBOVUxMKTsKKyAgICAvL2dfcmV0
dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgTlVMTCk7CiAgICAgLy8gRklYTUU6IENvbnN0cnVjdCBh
IHByb3BlciBrZXliaW5kaW5nIHN0cmluZy4KICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUo
YWN0aW9uKS0+YWNjZXNzS2V5KCkuc3RyaW5nKCkpOwogfQogCiBzdGF0aWMgY29uc3QgZ2NoYXIq
IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbmFtZShBdGtBY3Rpb24qIGFjdGlvbiwgZ2lu
dCBpKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgTlVMTCk7CisgICAgLy9n
X3JldHVybl92YWxfaWZfZmFpbChpID09IDAsIE5VTEwpOworCiAgICAgcmV0dXJuIHJldHVyblN0
cmluZyhjb3JlKGFjdGlvbiktPmFjdGlvblZlcmIoKSk7CiB9CiAKQEAgLTI4MywzMiArNzg4LDgz
IEBAIHN0YXRpYyB2b2lkIGF0a19hY3Rpb25faW50ZXJmYWNlX2luaXQoQXRrQWN0aW9uSWZhY2Uq
IGlmYWNlKQogCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQo
QXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKIHsKLSAg
ICBTdHJpbmcgcmV0ID0gY29yZSh0ZXh0KS0+ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJh
bmdlKHN0YXJ0X29mZnNldCwgZW5kX29mZnNldCAtIHN0YXJ0X29mZnNldCkpOwotICAgIC8vIFRP
RE86IEludGVudGlvbmFsbHkgY29waWVkPwotICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgp
LmRhdGEoKSk7CisgICAgcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KCkg
JWQgJWRcbiIsIHN0YXJ0X29mZnNldCwgZW5kX29mZnNldCk7CisKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBTdHJpbmcgcmV0OworI2lmIDAK
KyAgICByZXQgPSBjb3JlKHRleHQpLT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uo
c3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSk7IC8vPC0gZm9yIHRleHQg
Y29udHJvbHMgb25seQorICAgIGlmICghcmV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNv
cHlTdHJpbmcocmV0KTsKKyNlbmRpZgorCisgICAgLy9yZXQgPSBjb3JlKHRleHQpLT5zdHJpbmdG
b3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb3JlKHRleHQpLT52aXNpYmxlUG9zaXRpb25SYW5nZUZv
clJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0X29mZnNldCwgZW5kX29mZnNldCAtIHN0YXJ0X29m
ZnNldCkpKTsKKworICAgIC8vUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gUGxhaW5UZXh0UmFu
Z2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KTsKKyAgICAvL1Zpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IGNvcmUodGV4dCktPnZpc2libGVQb3Np
dGlvblJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKKyAgICAvL3JldCA9IGNvcmUodGV4dCktPnN0
cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7CisKKyAgICAvL1Zp
c2libGVQb3NpdGlvbiBzdGFydCA9IGNvcmUodGV4dCktPnZpc2libGVQb3NpdGlvbkZvckluZGV4
KHN0YXJ0X29mZnNldCk7CisgICAgLy9WaXNpYmxlUG9zaXRpb24gZW5kID0gY29yZSh0ZXh0KS0+
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kX29mZnNldCk7CisgICAgLy9yZXQgPSBjb3JlKHRl
eHQpLT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShz
dGFydCwgZW5kKSk7CisKKyNpZiAwCisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBj
b3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIGludCBiYXNlID0gY29yZU9i
amVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOworICAgIHByaW50Zigi
YmFzZTogJWRcbiIsIGJhc2UpOworICAgIHJhbmdlLnN0YXJ0ID0gY29yZU9iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uRm9ySW5kZXgoYmFzZSArIHN0YXJ0X29mZnNldCk7CisgICAgcmFuZ2UuZW5kID0g
Y29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoYmFzZSArIGVuZF9vZmZzZXQpOwor
ICAgIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQ
b3NpdGlvbnMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgcmV0ID0gY29yZU9iamVjdC0+
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpOworI2VuZGlmCisKKy8vI2lmIDAK
KyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5zdGFydCA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0X29mZnNldCk7CisgICAgcmFuZ2Uu
ZW5kID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kX29mZnNldCk7Cisg
ICAgcmV0ID0gY29yZU9iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2Up
OworLy8jZW5kaWYKKworICAgIC8vcmV0ID0gY29yZSh0ZXh0KS0+c3RyaW5nRm9yVmlzaWJsZVBv
c2l0aW9uUmFuZ2UoY29yZSh0ZXh0KS0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSk7CisgICAgcmV0
dXJuIGNvcHlTdHJpbmcocmV0KTsKIH0KIAogc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwg
QXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5X3R5cGUsIGdpbnQqIHN0YXJ0X29mZnNldCwgZ2ludCog
ZW5kX29mZnNldCkKIHsKKyAgICBwcmludGYoIndlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3Rl
eHRfYWZ0ZXJfb2Zmc2V0KClcbiIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICAvL0Fj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIC8vVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgp
OworCisgICAgKnN0YXJ0X29mZnNldCA9IDA7CisgICAgKmVuZF9vZmZzZXQgPSAwOwogICAgIHJl
dHVybiBOVUxMOwogfQogCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3RleHRfYXRfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRh
cnkgYm91bmRhcnlfdHlwZSwgZ2ludCogc3RhcnRfb2Zmc2V0LCBnaW50KiBlbmRfb2Zmc2V0KQog
eworICAgIHByaW50Zigid2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQo
KVxuIik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAqc3RhcnRfb2Zmc2V0ID0gMDsKKyAg
ICAqZW5kX29mZnNldCA9IDA7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBndW5pY2hh
ciB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRfb2Zmc2V0KEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRf
b2Zmc2V0KClcbiIpOworICAgIFN0cmluZyByZXQgPSBjb3JlKHRleHQpLT5kb0FYU3RyaW5nRm9y
UmFuZ2UoUGxhaW5UZXh0UmFuZ2Uob2Zmc2V0LCAxKSk7CisgICAgcmV0dXJuIHJldFswXTsKIH0K
IAogc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9v
ZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eV90eXBlLCBnaW50KiBzdGFydF9vZmZzZXQsIGdpbnQqIGVuZF9vZmZzZXQpCiB7CisgICAgcHJp
bnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQoKVxuIik7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvL0FjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKHRleHQpOworICAgICpzdGFydF9vZmZzZXQgPSAwOworICAgICplbmRfb2Zm
c2V0ID0gMDsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMzE4LDE0ICs4NzQsNzcgQEAgc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQq
IHRleHQpCiAgICAgcmV0dXJuIGNvcmUodGV4dCktPnNlbGVjdGlvblN0YXJ0KCk7CiB9CiAKK3N0
YXRpYyBHU0xpc3QqIGxpc3RQcmVwZW5kKEdTTGlzdCogbGlzdCwgQXRrVGV4dEF0dHJpYnV0ZSBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIGxpc3RQcmVwZW5kKGxpc3Qs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShrZXkpLCB2YWx1ZSk7Cit9CisKIHN0YXRpYyBB
dGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVz
KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydF9vZmZzZXQsIGdpbnQqIGVu
ZF9vZmZzZXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTlVMTDsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworI2lmIDAK
KyAgICAvL0ZJWE1FOiBpbmRleEZvclZpc2libGVQb3NpdGlvbiBpcyBvbmx5IGZvciBjb250cm9s
cz8KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQ
b3NpdGlvblJhbmdlKCk7CisgICAgaW50IGEgPSBjb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQ
b3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAgaW50IGIgPSBjb3JlT2JqZWN0LT5pbmRleEZvclZp
c2libGVQb3NpdGlvbihyYW5nZS5lbmQpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJyID0gbWFr
ZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAgIC8vcHJpbnRmKCJhdHRycyByYW5n
ZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgYSwgYik7CisgICAgcHJpbnRmKCJhdHRycyByYW5nZSAl
ZDogJWQgJWRcbiIsIG9mZnNldCwgcnItPnN0YXJ0T2Zmc2V0KCksIHJyLT5lbmRPZmZzZXQoKSk7
CisgICAgKnN0YXJ0X29mZnNldCA9IHJyLT5zdGFydE9mZnNldCgpOworICAgICplbmRfb2Zmc2V0
ID0gcnItPmVuZE9mZnNldCgpOworI2VuZGlmCisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQg
PSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChvZmZzZXQpOworICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+c3R5bGVSYW5nZUZvclBvc2l0aW9u
KHN0YXJ0KTsKKyAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJyID0gbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5l
bmQpOworICAgIC8vcHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgYSwg
Yik7CisgICAgcHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQgJWRcbiIsIG9mZnNldCwgcnItPnN0
YXJ0T2Zmc2V0KCksIHJyLT5lbmRPZmZzZXQoKSk7CisgICAgKnN0YXJ0X29mZnNldCA9IHJyLT5z
dGFydE9mZnNldCgpOworICAgICplbmRfb2Zmc2V0ID0gcnItPmVuZE9mZnNldCgpOworCisjaWYg
MAorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBv
c2l0aW9uUmFuZ2UoKTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cmFuZ2UgPSBjb3JlT2Jq
ZWN0LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOworCisgICAgLy9WaXNpYmxl
UG9zaXRpb24gc3RhcnQgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChvZmZz
ZXQpOworICAgIC8vVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnJhbmdlID0gY29yZU9iamVjdC0+c3R5
bGVSYW5nZUZvclBvc2l0aW9uKHN0YXJ0KTsKKyAgICAvL2ludCBhID0gY29yZU9iamVjdC0+aW5k
ZXgodnJhbmdlLnN0YXJ0KTsKKyAgICAvL2ludCBiID0gY29yZU9iamVjdC0+aW5kZXgodnJhbmdl
LmVuZCk7CisgICAgaW50IGEgPSBjb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbih2
cmFuZ2Uuc3RhcnQpOworICAgIGludCBiID0gY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9z
aXRpb24odnJhbmdlLmVuZCk7CisgICAgcHJpbnRmKCJhdHRycyByYW5nZSAlZDogJWQgJWRcbiIs
IG9mZnNldCwgYSwgYik7CisgICAgKnN0YXJ0X29mZnNldCA9IGE7CisgICAgKmVuZF9vZmZzZXQg
PSBiOworI2VuZGlmCisKKyNpZiAwCisgICAgUGxhaW5UZXh0UmFuZ2UgcHJhbmdlID0gY29yZU9i
amVjdC0+ZG9BWFN0eWxlUmFuZ2VGb3JJbmRleChvZmZzZXQpOworICAgIHByaW50ZigiYXR0cnMg
cmFuZ2UgJWQ6ICVkICVkXG4iLCBvZmZzZXQsIHByYW5nZS5zdGFydCwgcHJhbmdlLmxlbmd0aCk7
CisgICAgKnN0YXJ0X29mZnNldCA9IHByYW5nZS5zdGFydDsKKyAgICAqZW5kX29mZnNldCA9IHBy
YW5nZS5zdGFydCArIHByYW5nZS5sZW5ndGg7CisjZW5kaWYKKworICAgIC8vVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0ID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zmc2V0KTsK
KyAgICAvL1Zpc2libGVQb3NpdGlvbiBzdGFydCA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvckluZGV4KG9mZnNldCk7CisgICAgLy9UZXh0SXRlcmF0b3IgaXQobWFrZVJhbmdlKHN0YXJ0
VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmdldCgpKTsKKworICAgIC8vcHJp
bnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0cmlidXRlcygpXG4iKTsKKyAg
ICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJzID0gTlVMTDsKKyAgICBhdHRycyA9IGxpc3RQcmVwZW5k
KGF0dHJzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjYwMCIpOworICAgIGF0dHJzID0gbGlzdFBy
ZXBlbmQoYXR0cnMsIEFUS19URVhUX0FUVFJfU0laRSwgIjEyIik7CisKKyAgICAvLypzdGFydF9v
ZmZzZXQgPSAwOworICAgIC8vKmVuZF9vZmZzZXQgPSAxOworICAgIHJldHVybiBhdHRyczsKIH0K
IAogc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVm
YXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQpCiB7CisgICAgcHJpbnRmKCJ3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoKVxuIik7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTMzMywzNyArOTUyLDI3IEBAIHN0YXRp
YyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2RlZmF1bHRfYXR0
cmlidXRlcyhBdGtUZXh0KiB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwg
Z2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykK
IHsKICAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlKHRleHQpLT5kb0FYQm91bmRzRm9yUmFuZ2Uo
UGxhaW5UZXh0UmFuZ2Uob2Zmc2V0LCAxKSk7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgQXRrQ29v
cmRUeXBlCi0gICAgLy8gUmVxdWlyZXMgV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1Nj
cmVlbigpIHRvIGJlIGltcGxlbWVudGVkCi0KLSNpZiAwCi0gICAgc3dpdGNoKGNvb3Jkcykgewot
ICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAgICAgICAgZXh0ZW50cyA9IGNvcmUodGV4dCktPmRv
Y3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihleHRlbnRzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBVEtfWFlfV0lORE9XOgotICAgICAgICAvLyBOby1vcAotICAgICAgICBi
cmVhazsKLSAgICB9Ci0jZW5kaWYKLQotICAgICp4ID0gZXh0ZW50cy54KCk7Ci0gICAgKnkgPSBl
eHRlbnRzLnkoKTsKLSAgICAqd2lkdGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAgKmhlaWdodCA9
IGV4dGVudHMuaGVpZ2h0KCk7CisgICAgY29udGVudHNUb0F0ayhjb3JlKHRleHQpLCBjb29yZHMs
IGV4dGVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBzdGF0aWMgZ2ludCB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQoQXRrVGV4dCogdGV4dCkKIHsKLSAg
ICByZXR1cm4gY29yZSh0ZXh0KS0+dGV4dExlbmd0aCgpOworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworCisgICAgLy9pZiAoIWNvcmVPYmplY3QtPmlz
VGV4dCgpKQorICAgIGlmIChjb3JlT2JqZWN0LT5pc0NvbnRyb2woKSkgLy8/PworICAgICAgICBy
ZXR1cm4gY29yZU9iamVjdC0+dGV4dExlbmd0aCgpOworCisgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIHByaW50
ZigibGVuZ3RoICVkXG4iLCBjb3JlT2JqZWN0LT5sZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShyYW5nZSkpOworICAgIHJldHVybiBjb3JlT2JqZWN0LT5sZW5ndGhGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShyYW5nZSk7CiB9CiAKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X29mZnNldF9hdF9wb2ludChBdGtUZXh0KiB0ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKIHsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAg
ICAvLyBUT0RPOiBJcyBpdCBjb3JyZWN0IHRvIGlnbm9yZSByYW5nZS5sZW5ndGg/Ci0gICAgSW50
UG9pbnQgcG9zKHgsIHkpOworICAgIEludFBvaW50IHBvcyA9IGNvbnRlbnRzRnJvbUF0ayhjb3Jl
KHRleHQpLCBjb29yZHMsIHgsIHkpOwogICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZSh0
ZXh0KS0+ZG9BWFJhbmdlRm9yUG9zaXRpb24ocG9zKTsKKyAgICAvLyBUT0RPOiBJcyBpdCBjb3Jy
ZWN0IHRvIGlnbm9yZSByYW5nZS5sZW5ndGg/CiAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogfQog
CkBAIC0zNzUsNiArOTg0LDkgQEAgc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfbl9zZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCiAKIHN0YXRpYyBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9u
X251bSwgZ2ludCogc3RhcnRfb2Zmc2V0LCBnaW50KiBlbmRfb2Zmc2V0KQogeworICAgIGlmIChz
ZWxlY3Rpb25fbnVtICE9IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM4NywxNCArOTk5LDI1IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4dCog
dGV4dCwgZ2ludCBzdGFydF9vCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25fbnVtKQog
eworICAgIGlmIChzZWxlY3Rpb25fbnVtICE9IDApCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIC8vIFRPRE86IFZlcmlmeQorICAgIGlmICghY29yZSh0ZXh0KS0+aXNTZWxlY3RlZCgpKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBGQUxTRTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0
X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbl9udW0sIGdpbnQgc3RhcnRf
b2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gRkFMU0U7CisgICAgaWYgKHNlbGVjdGlvbl9udW0gIT0gMCkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgLy8gVE9ETzogVmVyaWZ5CisgICAgY29yZSh0ZXh0KS0+c2V0U2VsZWN0
ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3Rh
cnRfb2Zmc2V0KSk7CisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBv
ZmZzZXQpCkBAIC00NDYsNyArMTA2OSw3IEBAIHN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFj
ZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRl
cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzOwogICAgIGlmYWNl
LT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVm
YXVsdF9hdHRyaWJ1dGVzOwogICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50czsKLSAgICAvL2lmYWNlLT5n
ZXRfcmFuZ2VfZXh0ZW50cyA9IDsKKyAgICAvL2lmYWNlLT5nZXRfcmFuZ2VfZXh0ZW50cyA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHM7CiAgICAgaWZhY2UtPmdldF9j
aGFyYWN0ZXJfY291bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291
bnQ7CiAgICAgaWZhY2UtPmdldF9vZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQ7CiAgICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9uX3NlbGVjdGlvbnM7CkBAIC00NjksMjMgKzEwOTIs
MTggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0
X3J1bl9hdHRyaWJ1dGVzKEF0a0VkaXRhYmxlVGUKIAogc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vz
c2libGVfZWRpdGFibGVfdGV4dF9zZXRfdGV4dF9jb250ZW50cyhBdGtFZGl0YWJsZVRleHQqIHRl
eHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCiB7Ci0gICAgLy8gRklYTUU6IHN0cmluZyBudWxsY2hl
Y2s/CiAgICAgY29yZSh0ZXh0KS0+c2V0VmFsdWUoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsK
IH0KIAogc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9pbnNlcnRf
dGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcsIGdpbnQgbGVu
Z3RoLCBnaW50KiBwb3NpdGlvbikKIHsKLSAgICAvLyBGSVhNRTogc3RyaW5nIG51bGxjaGVjaz8K
LQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAg
IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZQotICAgIC8vY29yZU9iamVjdC0+
c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2UoKnBvc2l0aW9uLCAwKSk7Ci0gICAg
Ly9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsK
IAogICAgIGlmICghY29yZU9iamVjdC0+ZG9jdW1lbnQoKSB8fCAhY29yZU9iamVjdC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvcmVPYmplY3QtPnNldFNlbGVj
dGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JSYW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKSk7Ci0gICAgY29yZU9iamVjdC0+
c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBpZiAoIXNlbGVjdFRleHQoY29yZU9iamVjdCwgKnBvc2l0
aW9uKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgcG9z
aXRpb24gdG8gdGhlIGFjdHVhbCBpbnNlcnRlZCB0ZXh0IGxlbmd0aCwgd2hpY2ggbWF5IGJlIGxl
c3MgdGhhbiB0aGF0IHJlcXVlc3RlZC4KICAgICBpZiAoY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChTdHJp
bmc6OmZyb21VVEY4KHN0cmluZyksIGZhbHNlLCAwKSkKICAgICAgICAgKnBvc2l0aW9uICs9IGxl
bmd0aDsKQEAgLTQ5MywzMSArMTExMSw1NCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJs
ZV9lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgYwogCiBz
dGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2NvcHlfdGV4dChBdGtF
ZGl0YWJsZVRleHQqIHRleHQsIGdpbnQgc3RhcnRfcG9zLCBnaW50IGVuZF9wb3MpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZSh0ZXh0KTsKKworICAgIC8vVE9ETzoKKyAgICAvL1Bhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0
ZWJvYXJkKCk7CisgICAgLy93cml0ZVNlbGVjdGlvbihyYW5nZSwgPywgZnJhbWUpOworCisgICAg
aWYgKCFjb3JlT2JqZWN0LT5kb2N1bWVudCgpIHx8ICFjb3JlT2JqZWN0LT5kb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzZWxlY3RUZXh0KGNvcmVPYmplY3Qs
IHN0YXJ0X3BvcywgZW5kX3BvcykpCisgICAgICAgIHJldHVybjsKKworICAgIGNvcmVPYmplY3Qt
PmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5jb3B5KCk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfY3V0X3RleHQoQXRrRWRpdGFibGVUZXh0
KiB0ZXh0LCBnaW50IHN0YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7
CisKKyAgICBpZiAoIWNvcmVPYmplY3QtPmRvY3VtZW50KCkgfHwgIWNvcmVPYmplY3QtPmRvY3Vt
ZW50KCktPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNlbGVjdFRleHQoY29y
ZU9iamVjdCwgc3RhcnRfcG9zLCBlbmRfcG9zKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29y
ZU9iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmN1dCgpOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2RlbGV0ZV90ZXh0KEF0a0Vk
aXRhYmxlVGV4dCogdGV4dCwgZ2ludCBzdGFydF9wb3MsIGdpbnQgZW5kX3BvcykKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICAvLyBGSVhN
RTogTm90IGltcGxlbWVudGVkIGluIFdlYkNvcmUKLSAgICAvL2NvcmVPYmplY3QtPnNldFNlbGVj
dGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0X3BvcywgZW5kX3BvcyAtIHN0YXJ0X3Bv
cykpOwotICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KFN0cmluZygpKTsKIAogICAg
IGlmICghY29yZU9iamVjdC0+ZG9jdW1lbnQoKSB8fCAhY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5n
ZShQbGFpblRleHRSYW5nZShzdGFydF9wb3MsIGVuZF9wb3MgLSBzdGFydF9wb3MpKSk7Ci0gICAg
Y29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBpZiAoIXNlbGVjdFRleHQoY29yZU9i
amVjdCwgc3RhcnRfcG9zLCBlbmRfcG9zKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgY29yZU9i
amVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnBlcmZvcm1EZWxldGUoKTsKIH0K
IAogc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9wYXN0ZV90ZXh0
KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgZ2ludCBwb3NpdGlvbikKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQp
OworCisgICAgaWYgKCFjb3JlT2JqZWN0LT5kb2N1bWVudCgpIHx8ICFjb3JlT2JqZWN0LT5kb2N1
bWVudCgpLT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzZWxlY3RUZXh0KGNv
cmVPYmplY3QsIHBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29yZU9iamVjdC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnBhc3RlKCk7CiB9CiAKIHN0YXRpYyB2b2lk
IGF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0KEF0a0VkaXRhYmxlVGV4dElmYWNlKiBp
ZmFjZSkKQEAgLTUzMyw2ICsxMTc0LDEyOSBAQCBzdGF0aWMgdm9pZCBhdGtfZWRpdGFibGVfdGV4
dF9pbnRlcmZhY2VfaW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2Ut
PnBhc3RlX3RleHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Bhc3RlX3RleHQ7
CiB9CiAKKy8vIEh5cGVydGV4dAorCitBdGtIeXBlcmxpbmsqIHdlYmtpdF9hY2Nlc3NpYmxlX2h5
cGVydGV4dF9nZXRfbGluayhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZ2ludCBsaW5rX2luZGV4
KQoreworICAgIGlmIChsaW5rX2luZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBOVUxMOworfQorCitnaW50IHdlYmtpdF9h
Y2Nlc3NpYmxlX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitnaW50IHdlYmtp
dF9hY2Nlc3NpYmxlX2h5cGVydGV4dF9nZXRfbGlua19pbmRleChBdGtIeXBlcnRleHQqIGh5cGVy
dGV4dCwgZ2ludCBjaGFyX2luZGV4KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBhdGtfaHlwZXJ0ZXh0X2ludGVyZmFjZV9pbml0KEF0
a0h5cGVydGV4dElmYWNlKiBpZmFjZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKGlmYWNlKTsK
KworICAgIGlmYWNlLT5nZXRfbGluayA9IHdlYmtpdF9hY2Nlc3NpYmxlX2h5cGVydGV4dF9nZXRf
bGluazsKKyAgICBpZmFjZS0+Z2V0X25fbGlua3MgPSB3ZWJraXRfYWNjZXNzaWJsZV9oeXBlcnRl
eHRfZ2V0X25fbGlua3M7CisgICAgaWZhY2UtPmdldF9saW5rX2luZGV4ID0gd2Via2l0X2FjY2Vz
c2libGVfaHlwZXJ0ZXh0X2dldF9saW5rX2luZGV4OworfQorCisvLyBEb2N1bWVudAorCisjaWYg
MAorc3RhdGljIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVu
dF9nZXRfZG9jdW1lbnRfdHlwZShBdGtEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgLy8gRGVw
cmVjYXRlZD8KK30KKworc3RhdGljIGdwb2ludGVyIHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50
X2dldF9kb2N1bWVudChBdGtEb2N1bWVudCogZG9jdW1lbnQpCit7Cit9CisjZW5kaWYKKworc3Rh
dGljIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRf
ZG9jdW1lbnRfbG9jYWxlKEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIWNvcmUo
ZG9jdW1lbnQpLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBnaXZlIHRoZSByaWdodCBhbnN3ZXIuCisgICAgcmV0
dXJuIHJldHVyblN0cmluZyhjb3JlKGRvY3VtZW50KS0+ZG9jdW1lbnQoKS0+Y29udGVudExhbmd1
YWdlKCkpOworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9k
b2N1bWVudF9nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyhBdGtEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRycyA9IE5VTEw7CisKKyAgICBpZiAoIWNvcmUoZG9j
dW1lbnQpLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8vIEZJWE1F
OiBQcm92aWRlIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGVzLgorCisgICAgLy8gU2hvdWxkIGJlIG9m
IGZvcm0gJ3RleHQvaHRtbCcKKyAgICBhdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAiTWltZVR5
cGUiLCAiIik7CisKKyAgICAvLyBTaG91bGQgYmUgb2YgZm9ybSAnLS8vVzNDLy9EVEQgSFRNTCA0
LjAxLy9FTicKKyAgICAvL2lmIChjb3JlKGRvY3VtZW50KS0+ZG9jdW1lbnQoKS0+ZG9jdHlwZSgp
KQorICAgIC8vICAgIGF0dHJzID0gbGlzdFByZXBlbmQoYXR0cnMsICJXM0MtZG9jdHlwZSIsIGNv
cmUoZG9jdW1lbnQpLT5kb2N1bWVudCgpLT5kb2N0eXBlKCktPnRvU3RyaW5nKCkpOworCisgICAg
Ly9hdHRycyA9IGxpc3RQcmVwZW5kKGF0dHJzLCAiVzNDLWRvY3R5cGUiLCBjb3JlKGRvY3VtZW50
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9jdW1lbnRUeXBlU3RyaW5nKCkpOworCisgICAgYXR0
cnMgPSBsaXN0UHJlcGVuZChhdHRycywgIkRvY1VSTCIsIGNvcmUoZG9jdW1lbnQpLT51cmwoKSk7
CisKKyAgICByZXR1cm4gYXR0cnM7Cit9CisKKy8vIHN0YXRpYyBHX0NPTlNUX1JFVFVSTiBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2F0dHJpYnV0ZV92YWx1
ZShBdGtEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVfbmFtZSkKKy8v
IHsKKy8vICAgICBub3RJbXBsZW1lbnRlZCgpOworLy8gICAgIHJldHVybiAiIjsKKy8vIH0KKwor
c3RhdGljIHZvaWQgYXRrX2RvY3VtZW50X2ludGVyZmFjZV9pbml0KEF0a0RvY3VtZW50SWZhY2Uq
IGlmYWNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaWZhY2UpOworCisgICAgaWZhY2UtPmdl
dF9kb2N1bWVudF9sb2NhbGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfZG9jdW1l
bnRfbG9jYWxlOworICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX2RvY3VtZW50X2dldF9kb2N1bWVudF9hdHRyaWJ1dGVzOworICAgIC8vaWZhY2Ut
PmdldF9kb2N1bWVudF9hdHRyaWJ1dGVfdmFsdWUgPSB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVu
dF9nZXRfZG9jdW1lbnRfYXR0cmlidXRlX3ZhbHVlOworfQorCisvLyBJbWFnZQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2VfcG9zaXRpb24oQXRrSW1hZ2Uq
IGltYWdlLCBnaW50KiB4LCBnaW50KiB5LCBBdGtDb29yZFR5cGUgY29vcmRfdHlwZSkKK3sKKyAg
ICBJbnRSZWN0IHJlY3QgPSBjb3JlKGltYWdlKS0+ZWxlbWVudFJlY3QoKTsKKyAgICBjb250ZW50
c1RvQXRrKGNvcmUoaW1hZ2UpLCBjb29yZF90eXBlLCByZWN0LCB4LCB5KTsKK30KKworc3RhdGlj
IEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2Vf
ZGVzY3JpcHRpb24oQXRrSW1hZ2UqIGltYWdlKQoreworICAgIHJldHVybiByZXR1cm5TdHJpbmco
Y29yZShpbWFnZSktPmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX3NpemUoQXRrSW1hZ2UqIGltYWdl
LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KQoreworICAgIEludFNpemUgc2l6ZSA9IGNvcmUo
aW1hZ2UpLT5zaXplKCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzaXplLndp
ZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7
Cit9CisKK3N0YXRpYyB2b2lkIGF0a19pbWFnZV9pbnRlcmZhY2VfaW5pdChBdGtJbWFnZUlmYWNl
KiBpZmFjZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKGlmYWNlKTsKKworICAgIGlmYWNlLT5n
ZXRfaW1hZ2VfcG9zaXRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2VfcG9z
aXRpb247CisgICAgaWZhY2UtPmdldF9pbWFnZV9kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2ltYWdlX2dldF9pbWFnZV9kZXNjcmlwdGlvbjsKKyAgICBpZmFjZS0+Z2V0X2ltYWdlX3Np
emUgPSB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2Vfc2l6ZTsKK30KKwogLy8gU3Ry
ZWFtYWJsZUNvbnRlbnQKIAogc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfc3RyZWFtYWJs
ZV9jb250ZW50X2dldF9uX21pbWVfdHlwZXMoQXRrU3RyZWFtYWJsZUNvbnRlbnQqIHN0cmVhbWFi
bGUpCkBAIC01NTksMTUgKzEzMjMsMTUgQEAgc3RhdGljIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3
ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxlX2NvbnRlbnRfZ2V0X3VyaShBdGtTdHIKICAgICBy
ZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgYXRrX3N0cmVhbWFibGVfY29udGVudF9pbnRl
cmZhY2VfaW5pdChBdGtTdHJlYW1hYmxlQ29udGVudElmYWNlKiBpZmFjZSkKLXsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKGlmYWNlKTsKKy8vIHN0YXRpYyB2b2lkIGF0a19zdHJlYW1hYmxlX2NvbnRl
bnRfaW50ZXJmYWNlX2luaXQoQXRrU3RyZWFtYWJsZUNvbnRlbnRJZmFjZSogaWZhY2UpCisvLyB7
CisvLyAgICAgZ19yZXR1cm5faWZfZmFpbChpZmFjZSk7CiAKLSAgICBpZmFjZS0+Z2V0X25fbWlt
ZV90eXBlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3N0cmVhbWFibGVfY29udGVudF9nZXRfbl9taW1l
X3R5cGVzOwotICAgIGlmYWNlLT5nZXRfbWltZV90eXBlID0gd2Via2l0X2FjY2Vzc2libGVfc3Ry
ZWFtYWJsZV9jb250ZW50X2dldF9taW1lX3R5cGU7Ci0gICAgaWZhY2UtPmdldF9zdHJlYW0gPSB3
ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxlX2NvbnRlbnRfZ2V0X3N0cmVhbTsKLSAgICBpZmFj
ZS0+Z2V0X3VyaSA9IHdlYmtpdF9hY2Nlc3NpYmxlX3N0cmVhbWFibGVfY29udGVudF9nZXRfdXJp
OwotfQorLy8gICAgIGlmYWNlLT5nZXRfbl9taW1lX3R5cGVzID0gd2Via2l0X2FjY2Vzc2libGVf
c3RyZWFtYWJsZV9jb250ZW50X2dldF9uX21pbWVfdHlwZXM7CisvLyAgICAgaWZhY2UtPmdldF9t
aW1lX3R5cGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxlX2NvbnRlbnRfZ2V0X21pbWVf
dHlwZTsKKy8vICAgICBpZmFjZS0+Z2V0X3N0cmVhbSA9IHdlYmtpdF9hY2Nlc3NpYmxlX3N0cmVh
bWFibGVfY29udGVudF9nZXRfc3RyZWFtOworLy8gICAgIGlmYWNlLT5nZXRfdXJpID0gd2Via2l0
X2FjY2Vzc2libGVfc3RyZWFtYWJsZV9jb250ZW50X2dldF91cmk7CisvLyB9CiAKIEdUeXBlIHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKCkKIHsKQEAgLTU4NywxNiArMTM1MSwxOSBAQCBHVHlw
ZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlwZSgpCiAgICAgICAgICAgICBOVUxMIC8qIHZhbHVl
IHRhYmxlICovCiAgICAgICAgIH07CiAKLSAgICAgICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9z
dGF0aWMoQVRLX1RZUEVfT0JKRUNULCAiV2ViS2l0QWNjZXNzaWJsZSIsICZ0aW5mbywgc3RhdGlj
X2Nhc3Q8R1R5cGVGbGFncz4oMCkpOworICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUlu
Zm8gYXRrX2NvbXBvbmVudF9pbmZvID0KKyAgICAgICAgeworICAgICAgICAgICAgKEdJbnRlcmZh
Y2VJbml0RnVuYykgYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdCwKKyAgICAgICAgICAgIChH
SW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxMLAorICAgICAgICAgICAgTlVMTAorICAgICAgICB9
OwogCi0gICAgICAgIC8vIFRPRE86IE9ubHkgaW1wbGVtZW50IGludGVyZmFjZXMgd2hlbiBuZWNl
c3NhcnksIG5vdCBmb3IgYWxsIG9iamVjdHMuCiAgICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJm
YWNlSW5mbyBhdGtfYWN0aW9uX2luZm8gPQogICAgICAgICB7CiAgICAgICAgICAgICAoR0ludGVy
ZmFjZUluaXRGdW5jKSBhdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0LAogICAgICAgICAgICAgKEdJ
bnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCiAgICAgICAgICAgICBOVUxMCiAgICAgICAgIH07
Ci0gICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9BQ1RJ
T04sICZhdGtfYWN0aW9uX2luZm8pOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNl
SW5mbyBhdGtfdGV4dF9pbmZvID0KICAgICAgICAgewpAQCAtNjA0LDcgKzEzNzEsNiBAQCBHVHlw
ZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlwZSgpCiAgICAgICAgICAgICAoR0ludGVyZmFjZUZp
bmFsaXplRnVuYykgTlVMTCwKICAgICAgICAgICAgIE5VTEwKICAgICAgICAgfTsKLSAgICAgICAg
Z190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX1RFWFQsICZhdGtfdGV4
dF9pbmZvKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gYXRrX2VkaXRh
YmxlX3RleHRfaW5mbyA9CiAgICAgICAgIHsKQEAgLTYxMiwyMSArMTM3OCw1NCBAQCBHVHlwZSB3
ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlwZSgpCiAgICAgICAgICAgICAoR0ludGVyZmFjZUZpbmFs
aXplRnVuYykgTlVMTCwKICAgICAgICAgICAgIE5VTEwKICAgICAgICAgfTsKLSAgICAgICAgZ190
eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX0VESVRBQkxFX1RFWFQsICZh
dGtfZWRpdGFibGVfdGV4dF9pbmZvKTsKIAotICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFj
ZUluZm8gYXRrX3N0cmVhbWFibGVfY29udGVudF9pbmZvID0KKyAgICAgICAgc3RhdGljIGNvbnN0
IEdJbnRlcmZhY2VJbmZvIGF0a19oeXBlcnRleHRfaW5mbyA9CisgICAgICAgIHsKKyAgICAgICAg
ICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGF0a19oeXBlcnRleHRfaW50ZXJmYWNlX2luaXQsCisg
ICAgICAgICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwKKyAgICAgICAgICAgIE5V
TEwKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gYXRr
X2RvY3VtZW50X2luZm8gPQorICAgICAgICB7CisgICAgICAgICAgICAoR0ludGVyZmFjZUluaXRG
dW5jKSBhdGtfZG9jdW1lbnRfaW50ZXJmYWNlX2luaXQsCisgICAgICAgICAgICAoR0ludGVyZmFj
ZUZpbmFsaXplRnVuYykgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKworICAg
ICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gYXRrX2ltYWdlX2luZm8gPQogICAgICAg
ICB7Ci0gICAgICAgICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBhdGtfc3RyZWFtYWJsZV9jb250
ZW50X2ludGVyZmFjZV9pbml0LAorICAgICAgICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgYXRr
X2ltYWdlX2ludGVyZmFjZV9pbml0LAogICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1
bmMpIE5VTEwsCiAgICAgICAgICAgICBOVUxMCiAgICAgICAgIH07Ci0gICAgICAgIGdfdHlwZV9h
ZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9TVFJFQU1BQkxFX0NPTlRFTlQsICZh
dGtfc3RyZWFtYWJsZV9jb250ZW50X2luZm8pOworCisvLyAgICAgICAgIHN0YXRpYyBjb25zdCBH
SW50ZXJmYWNlSW5mbyBhdGtfc3RyZWFtYWJsZV9jb250ZW50X2luZm8gPQorLy8gICAgICAgICB7
CisvLyAgICAgICAgICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBhdGtfc3RyZWFtYWJsZV9jb250
ZW50X2ludGVyZmFjZV9pbml0LAorLy8gICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1
bmMpIE5VTEwsCisvLyAgICAgICAgICAgICBOVUxMCisvLyAgICAgICAgIH07CisKKyAgICAgICAg
dHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoQVRLX1RZUEVfT0JKRUNULCAiV2ViS2l0QWNj
ZXNzaWJsZSIsICZ0aW5mbywgc3RhdGljX2Nhc3Q8R1R5cGVGbGFncz4oMCkpOworCisgICAgICAg
IC8vIFRPRE86IE9ubHkgaW1wbGVtZW50IGludGVyZmFjZXMgd2hlbiBuZWNlc3NhcnksIG5vdCBm
b3IgYWxsIG9iamVjdHMuCisgICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBl
LCBBVEtfVFlQRV9DT01QT05FTlQsICZhdGtfY29tcG9uZW50X2luZm8pOworICAgICAgICBnX3R5
cGVfYWRkX2ludGVyZmFjZV9zdGF0aWModHlwZSwgQVRLX1RZUEVfQUNUSU9OLCAmYXRrX2FjdGlv
bl9pbmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19U
WVBFX1RFWFQsICZhdGtfdGV4dF9pbmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vf
c3RhdGljKHR5cGUsIEFUS19UWVBFX0VESVRBQkxFX1RFWFQsICZhdGtfZWRpdGFibGVfdGV4dF9p
bmZvKTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBF
X0hZUEVSVEVYVCwgJmF0a19oeXBlcnRleHRfaW5mbyk7CisgICAgICAgIGdfdHlwZV9hZGRfaW50
ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9ET0NVTUVOVCwgJmF0a19kb2N1bWVudF9pbmZv
KTsKKyAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5cGUsIEFUS19UWVBFX0lN
QUdFLCAmYXRrX2ltYWdlX2luZm8pOworICAgICAgICAvL2dfdHlwZV9hZGRfaW50ZXJmYWNlX3N0
YXRpYyh0eXBlLCBBVEtfVFlQRV9TVFJFQU1BQkxFX0NPTlRFTlQsICZhdGtfc3RyZWFtYWJsZV9j
b250ZW50X2luZm8pOwogICAgIH0KKwogICAgIHJldHVybiB0eXBlOwogfQogCiBXZWJLaXRBY2Nl
c3NpYmxlKiB3ZWJraXRfYWNjZXNzaWJsZV9uZXcoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCkKIHsKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CiAgICAgR1R5cGUgdHlwZSA9IFdFQktJ
VF9UWVBFX0FDQ0VTU0lCTEU7CiAgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxB
dGtPYmplY3QqPihnX29iamVjdF9uZXcodHlwZSwgTlVMTCkpOwogICAgIGF0a19vYmplY3RfaW5p
dGlhbGl6ZShvYmplY3QsIGNvcmVPYmplY3QpOwpAQCAtNjM4LDExICsxNDM3LDkgQEAgQWNjZXNz
aWJpbGl0eU9iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0
KFdlYktpdEFjY2Vzc2libGUKICAgICByZXR1cm4gYWNjZXNzaWJsZS0+bV9vYmplY3Q7CiB9CiAK
LS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBzdGF0aWMgaW5pdGlhbGl6YXRpb24uCi1zdGF0aWMgQVhP
YmplY3RDYWNoZSogZmFsbGJhY2tDYWNoZSA9IG5ldyBBWE9iamVjdENhY2hlKCk7Ci0KIHZvaWQg
d2Via2l0X2FjY2Vzc2libGVfZGV0YWNoKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCiB7
CisgICAgcHJpbnRmKCJ3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goKSAlcFxuIiwgYWNjZXNzaWJs
ZSk7CiAgICAgQVNTRVJUKGFjY2Vzc2libGUtPm1fb2JqZWN0KTsKIAogICAgIC8vIFdlIHJlcGxh
Y2UgdGhlIFdlYkNvcmUgQWNjZXNzaWJpbGl0eU9iamVjdCB3aXRoIGEgZmFsbGJhY2sgb2JqZWN0
IHRoYXQKQEAgLTY1MCwzMSArMTQ0NywxMyBAQCB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFj
aChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQogICAgIC8vIGRldGFjaG1lbnQuCiAKICAg
ICAvLyBGSVhNRTogVXNpbmcgZmFsbGJhY2tDYWNoZS0+Z2V0KExpc3RCb3hPcHRpb25Sb2xlKSBp
cyBhIGhhY2suCi0gICAgYWNjZXNzaWJsZS0+bV9vYmplY3QgPSBmYWxsYmFja0NhY2hlLT5nZXRP
ckNyZWF0ZShMaXN0Qm94T3B0aW9uUm9sZSk7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGFjY2Vzc2libGUtPm1fb2JqZWN0ID0gZmFsbGJhY2tPYmplY3QgKCk7CiAKLS8vIEFj
Y2Vzc2liaWxpdHlPYmplY3QgaW1wbGVtZW50YXRpb25zCi0KLUFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyKiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp3cmFwcGVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93cmFwcGVyOworICAgIC8vIFRPRE86IFZlcmlmeSB0aGlzIGlzIHRoZSByaWdodCB0aW1l
IHRvIG5vdGlmeQorICAgIC8vIFNsb3cgPworICAgIC8vIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRl
X2NoYW5nZShBVEtfT0JKRUNUKGFjY2Vzc2libGUpLCBBVEtfU1RBVEVfREVGVU5DVCwgVFJVRSk7
CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0V3JhcHBlcihBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciogd3JhcHBlcikKLXsKLSAgICBpZiAobV93cmFwcGVyKQotICAgICAgICBn
X29iamVjdF91bnJlZihtX3dyYXBwZXIpOwotCi0gICAgbV93cmFwcGVyID0gd3JhcHBlcjsKLQot
ICAgIGlmIChtX3dyYXBwZXIpCi0gICAgICAgIGdfb2JqZWN0X3JlZihtX3dyYXBwZXIpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkp
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGQ2YTBkNTQuLmZmNWU0NzUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC05NTUsNyArOTU1LDcgQEAgc3RhdGlj
IEF0a09iamVjdCogd2Via2l0X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKEd0a1dpZGdldCogd2lk
Z2V0KQogICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVBY2Nlc3NpYmxlID0gZG9jLT5heE9iamVjdENhY2hlKCktPmdldChk
b2MtPnJlbmRlcmVyKCkpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVBY2Nlc3NpYmxl
ID0gZG9jLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGRvYy0+cmVuZGVyZXIoKSk7CiAg
ICAgaWYgKCFjb3JlQWNjZXNzaWJsZSB8fCAhY29yZUFjY2Vzc2libGUtPndyYXBwZXIoKSkKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29326</attachid>
            <date>2009-04-08 02:12:00 -0700</date>
            <delta_ts>2009-04-20 11:01:28 -0700</delta_ts>
            <desc>a11ydynamictypes.patch</desc>
            <filename>a11ydynamictypes.patch</filename>
            <type>text/plain</type>
            <size>11917</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBkMTJjZTBlZGFmMTc0MWZhZDExNjZmOGZmZTA4YzEzYWVlODZiN2QyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDggQXByIDIwMDkgMTE6NTk6MTUgKzAzMDAKU3ViamVjdDogW1BBVENIXSAyMDA5LTA0LTA4
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTU0NgogICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cwoK
ICAgICAgICBSZXdvcmsgYWNjZXNzaWJpbGl0eSB0eXBlIGdlbmVyYXRpb24gY29kZSwgYmFzZWQg
b24gTW96aWxsYSBhMTF5CiAgICAgICAgaW1wbGVtZW50YXRpb24uCgogICAgICAgIEhhdmUgb25l
IGJhc2UgYTExeSB0eXBlLCBhbmQgZ2VuZXJhdGUgZGVyaXZlZCB0eXBlcyB0aGF0IGltcGxlbWVu
dAogICAgICAgIG9ubHkgdGhlIG5lY2Vzc2FyeSBpbnRlcmZhY2VzIGF0IHJ1bnRpbWUsIGJhc2Vk
IG9uIHRoZSBzcGVjaWZpYwogICAgICAgIG9iamVjdCB3ZSBhcmUgd3JhcHBpbmcuIFRoaXMgYWxs
b3dzIHRvIHNhdmUgYSBsb3Qgb2YgY29kZSB3aGlsZQogICAgICAgIGNvdmVyaW5nIGFsbCBwb3Nz
aWJsZSBjYXNlcy4KCiAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHA6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDE3ICsrCiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmNwcCB8ICAyMzUgKysrKysrKysrKysrKy0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl
ZCwgMTY5IGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI1MGU2Yy4uMmMyYjYwNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAwOS0wNC0wOCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CisgICAgICAgIFtHVEtdIEFU
SyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cworCisgICAgICAgIFJld29yayBhY2Nlc3NpYmls
aXR5IHR5cGUgZ2VuZXJhdGlvbiBjb2RlLCBiYXNlZCBvbiBNb3ppbGxhIGExMXkKKyAgICAgICAg
aW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgSGF2ZSBvbmUgYmFzZSBhMTF5IHR5cGUsIGFuZCBn
ZW5lcmF0ZSBkZXJpdmVkIHR5cGVzIHRoYXQgaW1wbGVtZW50CisgICAgICAgIG9ubHkgdGhlIG5l
Y2Vzc2FyeSBpbnRlcmZhY2VzIGF0IHJ1bnRpbWUsIGJhc2VkIG9uIHRoZSBzcGVjaWZpYworICAg
ICAgICBvYmplY3Qgd2UgYXJlIHdyYXBwaW5nLiBUaGlzIGFsbG93cyB0byBzYXZlIGEgbG90IG9m
IGNvZGUgd2hpbGUKKyAgICAgICAgY292ZXJpbmcgYWxsIHBvc3NpYmxlIGNhc2VzLgorCisgICAg
ICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorCiAyMDA5
LTA0LTA3ICBtaWdnaWxpbiAgPG1yLmRpZ2dpbGluQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBLZXZpbiBPbGxpdmllci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggODRmM2QzNC4uYWU3MTg4YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKICNpbmNsdWRlIDxh
dGsvYXRrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODQsMjggKzg3LDYgQEAgc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVUZXh0KiB0ZXh0KQogCiBleHRlcm4g
IkMiIHsKIAotc3RhdGljIGdwb2ludGVyIHBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQoQXRrT2JqZWN0KiBvYmplY3QsIGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQUNDRVNTSUJMRShvYmplY3Qp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOwotCi0gICAgaWYgKEFUS19PQkpFQ1RfQ0xB
U1MocGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZSkKLSAgICAgICAgQVRLX09CSkVDVF9DTEFTUyhw
YXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKG9iamVjdCwgZGF0YSk7Ci0KLSAgICBXRUJLSVRfQUND
RVNTSUJMRShvYmplY3QpLT5tX29iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QWNjZXNzaWJpbGl0
eU9iamVjdCo+KGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBj
bGVhciB0aGUgcmV0dXJuIGJ1ZmZlci4KLSAgICByZXR1cm5TdHJpbmcoU3RyaW5nKCkpOwotCi0g
ICAgaWYgKEdfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmZpbmFsaXplKQotICAgICAgICBH
X09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCiBzdGF0
aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lKEF0a09iamVjdCogb2Jq
ZWN0KQogewogICAgIC8vIFRPRE86IERlYWwgd2l0aCBsYXRlciBjaGFuZ2VzLgpAQCAtMjE0LDI2
ICsxOTUsNzAgQEAgc3RhdGljIEF0a1JvbGUgd2Via2l0X2FjY2Vzc2libGVfZ2V0X3JvbGUoQXRr
T2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIGF0a1JvbGUoY29yZShvYmplY3QpLT5yb2xlVmFs
dWUoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2NsYXNzX2luaXQoQXRr
T2JqZWN0Q2xhc3MqIGtsYXNzKQorc3RhdGljIGdwb2ludGVyIHdlYmtpdF9hY2Nlc3NpYmxlX3Bh
cmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQo
QXRrT2JqZWN0KiBvYmplY3QsIGdwb2ludGVyIGRhdGEpCiB7Ci0gICAgR09iamVjdENsYXNzKiBn
b2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0FDQ0VTU0lCTEUob2JqZWN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChk
YXRhKTsKIAotICAgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChrbGFz
cyk7CisgICAgaWYgKEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2Ns
YXNzKS0+aW5pdGlhbGl6ZSkKKyAgICAgICAgQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNz
aWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKG9iamVjdCwgZGF0YSk7CiAKLSAgICBrbGFz
cy0+aW5pdGlhbGl6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQ7CisgICAgV0VCS0lUX0FDQ0VT
U0lCTEUob2JqZWN0KS0+bV9vYmplY3QgPSByZWludGVycHJldF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPihkYXRhKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gY2xl
YXIgdGhlIHJldHVybiBidWZmZXIuCisgICAgcmV0dXJuU3RyaW5nKFN0cmluZygpKTsKKworICAg
IGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5maW5h
bGl6ZSkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2li
bGVfY2xhc3NfaW5pdChBdGtPYmplY3RDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICB3ZWJraXRfYWNj
ZXNzaWJsZV9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoa2xhc3MpOwog
Ci0gICAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfYWNjZXNzaWJsZV9maW5hbGl6
ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2FjY2Vzc2libGVfZmluYWxp
emU7CiAKKyAgICBrbGFzcy0+aW5pdGlhbGl6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQ7CiAg
ICAga2xhc3MtPmdldF9uYW1lID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWU7CiAgICAga2xh
c3MtPmdldF9kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9kZXNjcmlwdGlvbjsK
ICAgICBrbGFzcy0+Z2V0X3BhcmVudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9wYXJlbnQ7CiAg
ICAga2xhc3MtPmdldF9uX2NoaWxkcmVuID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X25fY2hpbGRy
ZW47CiAgICAga2xhc3MtPnJlZl9jaGlsZCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9jaGlsZDsK
LSAgICAvL2tsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0
X2luZGV4X2luX3BhcmVudDsKICAgICBrbGFzcy0+Z2V0X3JvbGUgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfcm9sZTsKLSAgICAvL2tsYXNzLT5nZXRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9hdHRyaWJ1dGVzOwotICAgIC8va2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRf
YWNjZXNzaWJsZV9yZWZfc3RhdGVfc2V0OwotICAgIC8va2xhc3MtPnJlZl9yZWxhdGlvbl9zZXQg
PSB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25fc2V0OworfQorCitHVHlwZQord2Via2l0
X2FjY2Vzc2libGVfZ2V0X3R5cGUodm9pZCkKK3sKKyAgICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUg
dHlwZV92b2xhdGlsZSA9IDA7CisKKyAgICBpZiAoZ19vbmNlX2luaXRfZW50ZXIoJnR5cGVfdm9s
YXRpbGUpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gdGluZm8gPSB7CisgICAg
ICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNzaWJsZUNsYXNzKSwKKyAgICAgICAgICAgIChHQmFz
ZUluaXRGdW5jKU5VTEwsCisgICAgICAgICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpTlVMTCwKKyAg
ICAgICAgICAgIChHQ2xhc3NJbml0RnVuYyl3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0LAor
ICAgICAgICAgICAgKEdDbGFzc0ZpbmFsaXplRnVuYylOVUxMLAorICAgICAgICAgICAgTlVMTCwg
LyogY2xhc3MgZGF0YSAqLworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGUpLCAv
KiBpbnN0YW5jZSBzaXplICovCisgICAgICAgICAgICAwLCAvKiBuYiBwcmVhbGxvY3MgKi8KKyAg
ICAgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYylOVUxMLAorICAgICAgICAgICAgTlVMTCAvKiB2
YWx1ZSB0YWJsZSAqLworICAgICAgICB9OworCisgICAgICAgIEdUeXBlIHR5cGUgPSBnX3R5cGVf
cmVnaXN0ZXJfc3RhdGljKEFUS19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIldlYktpdEFjY2Vzc2libGUiLCAmdGluZm8sIEdUeXBlRmxh
Z3MoMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmdHlwZV92b2xhdGlsZSwgdHlwZSk7
CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVfdm9sYXRpbGU7CiB9CiAKIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZG9fYWN0aW9uKEF0a0FjdGlvbiogYWN0aW9uLCBn
aW50IGkpCkBAIC01NjksNjcgKzU5NCwxMTEgQEAgc3RhdGljIHZvaWQgYXRrX3N0cmVhbWFibGVf
Y29udGVudF9pbnRlcmZhY2VfaW5pdChBdGtTdHJlYW1hYmxlQ29udGVudElmYWNlKiBpZmEKICAg
ICBpZmFjZS0+Z2V0X3VyaSA9IHdlYmtpdF9hY2Nlc3NpYmxlX3N0cmVhbWFibGVfY29udGVudF9n
ZXRfdXJpOwogfQogCi1HVHlwZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlwZSgpCi17Ci0gICAg
c3RhdGljIEdUeXBlIHR5cGUgPSAwOwotCi0gICAgaWYgKCF0eXBlKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBHVHlwZUluZm8gdGluZm8gPSB7Ci0gICAgICAgICAgICBzaXplb2YoV2ViS2l0QWNj
ZXNzaWJsZUNsYXNzKSwKLSAgICAgICAgICAgIChHQmFzZUluaXRGdW5jKU5VTEwsCi0gICAgICAg
ICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpTlVMTCwKLSAgICAgICAgICAgIChHQ2xhc3NJbml0RnVu
Yyl3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0LAotICAgICAgICAgICAgKEdDbGFzc0ZpbmFs
aXplRnVuYylOVUxMLAotICAgICAgICAgICAgTlVMTCwgLyogY2xhc3MgZGF0YSAqLwotICAgICAg
ICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGUpLCAvKiBpbnN0YW5jZSBzaXplICovCi0gICAg
ICAgICAgICAwLCAvKiBuYiBwcmVhbGxvY3MgKi8KLSAgICAgICAgICAgIChHSW5zdGFuY2VJbml0
RnVuYylOVUxMLAotICAgICAgICAgICAgTlVMTCAvKiB2YWx1ZSB0YWJsZSAqLwotICAgICAgICB9
OwotCi0gICAgICAgIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljKEFUS19UWVBFX09CSkVD
VCwgIldlYktpdEFjY2Vzc2libGUiLCAmdGluZm8sIHN0YXRpY19jYXN0PEdUeXBlRmxhZ3M+KDAp
KTsKLQotICAgICAgICAvLyBUT0RPOiBPbmx5IGltcGxlbWVudCBpbnRlcmZhY2VzIHdoZW4gbmVj
ZXNzYXJ5LCBub3QgZm9yIGFsbCBvYmplY3RzLgotICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVy
ZmFjZUluZm8gYXRrX2FjdGlvbl9pbmZvID0KLSAgICAgICAgewotICAgICAgICAgICAgKEdJbnRl
cmZhY2VJbml0RnVuYykgYXRrX2FjdGlvbl9pbnRlcmZhY2VfaW5pdCwKLSAgICAgICAgICAgIChH
SW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxMLAotICAgICAgICAgICAgTlVMTAotICAgICAgICB9
OwotICAgICAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWModHlwZSwgQVRLX1RZUEVfQUNU
SU9OLCAmYXRrX2FjdGlvbl9pbmZvKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFj
ZUluZm8gYXRrX3RleHRfaW5mbyA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIChHSW50ZXJmYWNl
SW5pdEZ1bmMpIGF0a190ZXh0X2ludGVyZmFjZV9pbml0LAotICAgICAgICAgICAgKEdJbnRlcmZh
Y2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCi0gICAgICAgICAgICBOVUxMCi0gICAgICAgIH07Ci0gICAg
ICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLCBBVEtfVFlQRV9URVhULCAmYXRr
X3RleHRfaW5mbyk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIGF0a19l
ZGl0YWJsZV90ZXh0X2luZm8gPQotICAgICAgICB7Ci0gICAgICAgICAgICAoR0ludGVyZmFjZUlu
aXRGdW5jKSBhdGtfZWRpdGFibGVfdGV4dF9pbnRlcmZhY2VfaW5pdCwKLSAgICAgICAgICAgIChH
SW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxMLAotICAgICAgICAgICAgTlVMTAotICAgICAgICB9
OwotICAgICAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWModHlwZSwgQVRLX1RZUEVfRURJ
VEFCTEVfVEVYVCwgJmF0a19lZGl0YWJsZV90ZXh0X2luZm8pOworc3RhdGljIGNvbnN0IEdJbnRl
cmZhY2VJbmZvIEF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7CisgICAgeyhHSW50ZXJm
YWNlSW5pdEZ1bmMpYXRrX2FjdGlvbl9pbnRlcmZhY2VfaW5pdCwKKyAgICAgKEdJbnRlcmZhY2VG
aW5hbGl6ZUZ1bmMpIE5VTEwsIE5VTEx9LAorICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a19z
dHJlYW1hYmxlX2NvbnRlbnRfaW50ZXJmYWNlX2luaXQsCisgICAgIChHSW50ZXJmYWNlRmluYWxp
emVGdW5jKSBOVUxMLCBOVUxMfSwKKyAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfZWRpdGFi
bGVfdGV4dF9pbnRlcmZhY2VfaW5pdCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5V
TEwsIE5VTEx9LAorICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a190ZXh0X2ludGVyZmFjZV9p
bml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0KK307CisKK2Vu
dW0gV0FJVHlwZSB7CisgICAgV0FJX0FDVElPTiwKKyAgICBXQUlfU1RSRUFNQUJMRSwKKyAgICBX
QUlfRURJVEFCTEVfVEVYVCwKKyAgICBXQUlfVEVYVAorfTsKKworc3RhdGljIEdUeXBlIEdldEF0
a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShXQUlUeXBlIHR5cGUpCit7CisgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgV0FJX0FDVElPTjoKKyAgICAgIHJldHVybiBBVEtfVFlQRV9BQ1RJT047
CisgICAgY2FzZSBXQUlfU1RSRUFNQUJMRToKKyAgICAgIHJldHVybiBBVEtfVFlQRV9TVFJFQU1B
QkxFX0NPTlRFTlQ7CisgICAgY2FzZSBXQUlfRURJVEFCTEVfVEVYVDoKKyAgICAgIHJldHVybiBB
VEtfVFlQRV9FRElUQUJMRV9URVhUOworICAgIGNhc2UgV0FJX1RFWFQ6CisgICAgICByZXR1cm4g
QVRLX1RZUEVfVEVYVDsKKyAgfQorCisgIHJldHVybiBHX1RZUEVfSU5WQUxJRDsKK30KKworc3Rh
dGljIGd1aW50MTYgZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCkKK3sKKyAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSAwOworCisgICAg
Ly8gQWN0aW9uIGFuZCBTdHJlYW1hYmxlIGFyZSBhbHdheXMgc3VwcG9ydGVkIChGSVhNRTogU2hv
dWxkIHRoZXk/KQorICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfQUNUSU9OOworICAgIGlu
dGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfU1RSRUFNQUJMRTsKKworICAgIC8vIFRleHQgJiBFZGl0
YWJsZSBUZXh0CisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpICYmIGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoY29yZU9i
amVjdC0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdB
SV9URVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwg
V0FJX0VESVRBQkxFX1RFWFQ7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBjb25zdCBHSW50ZXJm
YWNlSW5mbyBhdGtfc3RyZWFtYWJsZV9jb250ZW50X2luZm8gPQotICAgICAgICB7Ci0gICAgICAg
ICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBhdGtfc3RyZWFtYWJsZV9jb250ZW50X2ludGVyZmFj
ZV9pbml0LAotICAgICAgICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCi0gICAg
ICAgICAgICBOVUxMCi0gICAgICAgIH07Ci0gICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0
YXRpYyh0eXBlLCBBVEtfVFlQRV9TVFJFQU1BQkxFX0NPTlRFTlQsICZhdGtfc3RyZWFtYWJsZV9j
b250ZW50X2luZm8pOworICAgIHJldHVybiBpbnRlcmZhY2VNYXNrOworfQorCitzdGF0aWMgY29u
c3QgY2hhciogZ2V0VW5pcXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNl
TWFzaykKK3sKKyNkZWZpbmUgV0FJX1RZUEVfTkFNRV9MRU4gKDMwKSAvKiBFbm91Z2ggZm9yIHBy
ZWZpeCArIDUgaGV4IGNoYXJhY3RlcnMgKG1heCkgKi8KKyAgICBzdGF0aWMgY2hhciBuYW1lW1dB
SV9UWVBFX05BTUVfTEVOICsgMV07CisgICAgCisgICAgZ19zcHJpbnRmKG5hbWUsICJXQUlUeXBl
JXgiLCBpbnRlcmZhY2VNYXNrKTsKKyAgICBuYW1lW1dBSV9UWVBFX05BTUVfTEVOXSA9ICdcMCc7
CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyBHVHlwZSBnZXRBY2Nlc3NpYmls
aXR5VHlwZUZyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHR5cGVJbmZvID0geworICAgICAgICBzaXplb2YoV2Vi
S2l0QWNjZXNzaWJsZUNsYXNzKSwKKyAgICAgICAgKEdCYXNlSW5pdEZ1bmMpIE5VTEwsCisgICAg
ICAgIChHQmFzZUZpbmFsaXplRnVuYykgTlVMTCwKKyAgICAgICAgKEdDbGFzc0luaXRGdW5jKSBO
VUxMLAorICAgICAgICAoR0NsYXNzRmluYWxpemVGdW5jKSBOVUxMLAorICAgICAgICBOVUxMLCAv
KiBjbGFzcyBkYXRhICovCisgICAgICAgIHNpemVvZihXZWJLaXRBY2Nlc3NpYmxlKSwgLyogaW5z
dGFuY2Ugc2l6ZSAqLworICAgICAgICAwLCAvKiBuYiBwcmVhbGxvY3MgKi8KKyAgICAgICAgKEdJ
bnN0YW5jZUluaXRGdW5jKSBOVUxMLAorICAgICAgICBOVUxMIC8qIHZhbHVlIHRhYmxlICovCisg
ICAgfTsKKworICAgIGd1aW50MTYgaW50ZXJmYWNlTWFzayA9IGdldEludGVyZmFjZU1hc2tGcm9t
T2JqZWN0KGNvcmVPYmplY3QpOworICAgIGNvbnN0IGNoYXIqIGF0a1R5cGVOYW1lID0gZ2V0VW5p
cXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKGludGVyZmFjZU1hc2spOworICAgIEdUeXBlIHR5cGUg
PSBnX3R5cGVfZnJvbV9uYW1lKGF0a1R5cGVOYW1lKTsKKyAgICBpZiAodHlwZSkKKyAgICAgICAg
cmV0dXJuIHR5cGU7CisKKyAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyhXRUJLSVRf
VFlQRV9BQ0NFU1NJQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0a1R5
cGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXBlSW5mbywgR1R5
cGVGbGFncygwKSk7CisgICAgZm9yIChndWludCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhBdGtJ
bnRlcmZhY2VzSW5pdEZ1bmN0aW9ucyk7IGkrKykgeworICAgICAgICBpZiAoaW50ZXJmYWNlTWFz
ayAmICgxIDw8IGkpKQorICAgICAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljKHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QXRrSW50ZXJm
YWNlVHlwZUZyb21XQUlUeXBlKHN0YXRpY19jYXN0PFdBSVR5cGU+KGkpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnNb
aV0pOwogICAgIH0KKwogICAgIHJldHVybiB0eXBlOwogfQogCiBXZWJLaXRBY2Nlc3NpYmxlKiB3
ZWJraXRfYWNjZXNzaWJsZV9uZXcoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsK
LSAgICBHVHlwZSB0eXBlID0gV0VCS0lUX1RZUEVfQUNDRVNTSUJMRTsKKyAgICBHVHlwZSB0eXBl
ID0gZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0KGNvcmVPYmplY3QpOwogICAgIEF0a09i
amVjdCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4oZ19vYmplY3RfbmV3KHR5cGUs
IE5VTEwpKTsKKwogICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIGNvcmVPYmplY3Qp
OworCiAgICAgcmV0dXJuIFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7CiB9CiAKLS0gCjEuNi4y
LjIKCg==
</data>
<flag name="review"
          id="14572"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29327</attachid>
            <date>2009-04-08 02:26:55 -0700</date>
            <delta_ts>2009-04-20 11:01:31 -0700</delta_ts>
            <desc>getorcreate.patch</desc>
            <filename>getorcreate.patch</filename>
            <type>text/plain</type>
            <size>2066</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA4ZGY3ZDZmMjY5ZWQxMWUwYmM2M2QyODlkYWE0MTZiN2ZhYzEwODdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDggQXByIDIwMDkgMTI6MjU6NDMgKzAzMDAKU3ViamVjdDogW1BBVENIXSA9P3V0Zi04P3E/
MjAwOS0wNC0wOD0yMD0yMEFsZWphbmRybz0yMFBpPUMzPUIxZWlybz0yMD0yMDxhcGluaGVpcm9A
aWdhbGlhLmNvbT4/PQpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkg
ZW5oYW5jZW1lbnRzCgogICAgICAgIFVzZSBnZXRPckNyZWF0ZSBpbnN0ZWFkIG9mIGp1c3QgZ2V0
LCBhcyB3ZSBuZWVkIHRvIGFjdHVhbGx5IGNyZWF0ZQogICAgICAgIHRoZSB3cmFwcGVyIG9iamVj
dCB0aGUgZmlyc3QgdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCiAgICAgICAgKiB3ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHA6Ci0tLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgfCAgIDEyICsrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAgfCAgICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwppbmRleCBlNzFlNmJjLi5hZjNkZDRjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDA5LTA0LTA4ICBBbGVqYW5kcm8gUGnDsWVpcm8gIDxhcGluaGVpcm9AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDYKKyAgICAgICAgW0dUS10gQVRLIGFj
Y2Vzc2liaWxpdHkgZW5oYW5jZW1lbnRzCisKKyAgICAgICAgVXNlIGdldE9yQ3JlYXRlIGluc3Rl
YWQgb2YganVzdCBnZXQsIGFzIHdlIG5lZWQgdG8gYWN0dWFsbHkgY3JlYXRlCisgICAgICAgIHRo
ZSB3cmFwcGVyIG9iamVjdCB0aGUgZmlyc3QgdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4K
KworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKwogMjAwOS0wNC0wNiAgR3Vz
dGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAog
ICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAppbmRleCA2MWMxY2I1Li4wMDRkMGUzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcApAQCAtOTU2LDcgKzk1Niw3IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF93
ZWJfdmlld19nZXRfYWNjZXNzaWJsZShHdGtXaWRnZXQqIHdpZGdldCkKICAgICBpZiAoIWRvYykK
ICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQWNj
ZXNzaWJsZSA9IGRvYy0+YXhPYmplY3RDYWNoZSgpLT5nZXQoZG9jLT5yZW5kZXJlcigpKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQWNjZXNzaWJsZSA9IGRvYy0+YXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShkb2MtPnJlbmRlcmVyKCkpOwogICAgIGlmICghY29yZUFjY2Vzc2li
bGUgfHwgIWNvcmVBY2Nlc3NpYmxlLT53cmFwcGVyKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwog
Ci0tIAoxLjYuMi4yCgo=
</data>
<flag name="review"
          id="14573"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29335</attachid>
            <date>2009-04-08 07:16:48 -0700</date>
            <delta_ts>2009-04-20 11:02:47 -0700</delta_ts>
            <desc>accobj.patch</desc>
            <filename>accobj.patch</filename>
            <type>text/plain</type>
            <size>3528</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAzYWZhMTNlZDUwMWJjM2ZlYzcwMjQwYWE0Nzc3ZWQ5YTdiNmYyMjI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDggQXByIDIwMDkgMTc6MTU6MjYgKzAzMDAKU3ViamVjdDogW1BBVENIXSAyMDA5LTA0LTA4
ICBBbHAgVG9rZXIgIDxhbHBAbnVhbnRpLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTU0NgogICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cwoKICAg
ICAgICBNb3ZlIEFjY2Vzc2liaWxpdHlPYmplY3QgbWV0aG9kcyB0byB0aGVpciBmaWxlLgoKICAg
ICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwOgogICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp3cmFwcGVyKToKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2V0V3JhcHBlcik6CiAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKysrKysrKwogV2ViQ29yZS9w
YWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCAgICAgICAgfCAgIDIyICsrKysrKysr
KysrKysrKysrKysrCiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcCB8ICAgMjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzYg
aW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYWYzNzMzLi45NWE3NmVmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDA5LTA0LTA4ICBBbHAgVG9rZXIgIDxhbHBAbnVhbnRpLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDYKKyAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2li
aWxpdHkgZW5oYW5jZW1lbnRzCisKKyAgICAgICAgTW92ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IG1l
dGhvZHMgdG8gdGhlaXIgZmlsZS4KKworICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6d3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRXcmFwcGVy
KToKKyAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6
CisKIDIwMDktMDQtMDggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0
ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdEF0ay5jcHAKaW5kZXggMTcxMDAyNy4uODU0ODE2ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNiArMjEs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKIAorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI5LDYgKzMyLDI1IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OndyYXBwZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3dyYXBwZXI7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0V3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciogd3JhcHBlcikKK3sKKyAgICBpZiAod3JhcHBlciA9PSBtX3dyYXBwZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3dyYXBwZXIpCisgICAgICAgIGdfb2JqZWN0X3VucmVm
KG1fd3JhcHBlcik7CisKKyAgICBtX3dyYXBwZXIgPSB3cmFwcGVyOworCisgICAgaWYgKG1fd3Jh
cHBlcikKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fd3JhcHBlcik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2Vi
Q29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggYWU3
MTg4Yy4uOWQ3ZTI5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAgLTcyNCwyNiArNzI0LDQgQEAgdm9pZCB3ZWJraXRfYWNj
ZXNzaWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKIAogfQogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFjY2Vzc2liaWxpdHlPYmplY3QgaW1wbGVtZW50YXRpb25z
Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp3cmFw
cGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93cmFwcGVyOwotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBw
ZXIpCi17Ci0gICAgaWYgKG1fd3JhcHBlcikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93cmFw
cGVyKTsKLQotICAgIG1fd3JhcHBlciA9IHdyYXBwZXI7Ci0KLSAgICBpZiAobV93cmFwcGVyKQot
ICAgICAgICBnX29iamVjdF9yZWYobV93cmFwcGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQotLSAKMS42LjIuMgoK
</data>
<flag name="review"
          id="14577"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29336</attachid>
            <date>2009-04-08 08:03:20 -0700</date>
            <delta_ts>2009-04-20 11:03:48 -0700</delta_ts>
            <desc>fallbackobject.patch</desc>
            <filename>fallbackobject.patch</filename>
            <type>text/plain</type>
            <size>3077</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBhZDAyMmU5Mzg2M2I2M2M3ZWEzMGY4Mjc3ZjI0NzQ1YTczM2JjYWQxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDggQXByIDIwMDkgMTc6NTg6MDcgKzAzMDAKU3ViamVjdDogW1BBVENIXSAyMDA5LTA0LTA4
ICBBbHAgVG9rZXIgIDxhbHBAbnVhbnRpLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTU0NgogICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cwoKICAg
ICAgICBNb3ZlIGZhbGxiYWNrIG9iamVjdCBjcmVhdGlvbiB0byBpdHMgb3duIGZ1bmN0aW9uLCBh
cyBpdCB3aWxsIGJlCiAgICAgICAgdXNlZCBpbiBzZXZlcmFsIHBsYWNlcy4KCiAgICAgICAgKiBw
YWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAgICAgICAgKGZhbGxi
YWNrT2JqZWN0KToKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTMgKysrKysrKysrKysrKwogV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgfCAgIDIwICsrKysrKysrKysrKysrLS0tLS0tCiAy
IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NWE3NmVm
Li44NTEyMTQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtNSw2ICs1LDE5IEBACiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU0NgogICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBl
bmhhbmNlbWVudHMKIAorICAgICAgICBNb3ZlIGZhbGxiYWNrIG9iamVjdCBjcmVhdGlvbiB0byBp
dHMgb3duIGZ1bmN0aW9uLCBhcyBpdCB3aWxsIGJlCisgICAgICAgIHVzZWQgaW4gc2V2ZXJhbCBw
bGFjZXMuCisKKyAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHA6CisgICAgICAgIChmYWxsYmFja09iamVjdCk6CisKKzIwMDktMDQtMDggIEFscCBUb2tl
ciAgPGFscEBudWFudGkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0
NgorICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMKKwogICAgICAg
ICBNb3ZlIEFjY2Vzc2liaWxpdHlPYmplY3QgbWV0aG9kcyB0byB0aGVpciBmaWxlLgogCiAgICAg
ICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNv
cmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDlkN2Uy
OTUuLjIxZmE4MWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCkBAIC00MSw2ICs0MSwxOSBAQAogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAorc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZhbGxiYWNrT2JqZWN0KCkK
K3sKKyAgICBzdGF0aWMgQVhPYmplY3RDYWNoZSogZmFsbGJhY2tDYWNoZSA9IG5ldyBBWE9iamVj
dENhY2hlKCk7CisgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IDA7Cisg
ICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgLy8gRklYTUU6IHVzaW5nIGZhbGxiYWNrQ2FjaGUt
PmdldE9yQ3JlYXRlKExpc3RCb3hPcHRpb25Sb2xlKSBpcyBhIGhhY2sKKyAgICAgICAgb2JqZWN0
ID0gZmFsbGJhY2tDYWNoZS0+Z2V0T3JDcmVhdGUoTGlzdEJveE9wdGlvblJvbGUpOworICAgICAg
ICBvYmplY3QtPnJlZigpOworICAgIH0KKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKIC8vIFVz
ZWQgdG8gcHJvdmlkZSBjb25zdCBjaGFyKiByZXR1cm5zLgogc3RhdGljIGNvbnN0IGNoYXIqIHJl
dHVyblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKIHsKQEAgLTcwNyw5ICs3MjAsNiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYWNjZXNzaWJpbGl0eV9vYmpl
Y3QoV2ViS2l0QWNjZXNzaWJsZQogICAgIHJldHVybiBhY2Nlc3NpYmxlLT5tX29iamVjdDsKIH0K
IAotLy8gRklYTUU6IFJlbW92ZSB0aGlzIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KLXN0YXRpYyBB
WE9iamVjdENhY2hlKiBmYWxsYmFja0NhY2hlID0gbmV3IEFYT2JqZWN0Q2FjaGUoKTsKLQogdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkK
IHsKICAgICBBU1NFUlQoYWNjZXNzaWJsZS0+bV9vYmplY3QpOwpAQCAtNzE3LDkgKzcyNyw3IEBA
IHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZGV0YWNoKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2li
bGUpCiAgICAgLy8gV2UgcmVwbGFjZSB0aGUgV2ViQ29yZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdp
dGggYSBmYWxsYmFjayBvYmplY3QgdGhhdAogICAgIC8vIHByb3ZpZGVzIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb25zIHRvIGF2b2lkIHJlcGV0aXRpdmUgbnVsbC1jaGVja2luZyBhZnRlcgogICAgIC8v
IGRldGFjaG1lbnQuCi0KLSAgICAvLyBGSVhNRTogVXNpbmcgZmFsbGJhY2tDYWNoZS0+Z2V0KExp
c3RCb3hPcHRpb25Sb2xlKSBpcyBhIGhhY2suCi0gICAgYWNjZXNzaWJsZS0+bV9vYmplY3QgPSBm
YWxsYmFja0NhY2hlLT5nZXRPckNyZWF0ZShMaXN0Qm94T3B0aW9uUm9sZSk7CisgICAgYWNjZXNz
aWJsZS0+bV9vYmplY3QgPSBmYWxsYmFja09iamVjdCgpOwogfQogCiB9Ci0tIAoxLjYuMi4yCgo=
</data>
<flag name="review"
          id="14578"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29360</attachid>
            <date>2009-04-09 02:45:53 -0700</date>
            <delta_ts>2009-04-20 11:04:02 -0700</delta_ts>
            <desc>refstateset.patch</desc>
            <filename>refstateset.patch</filename>
            <type>text/plain</type>
            <size>4525</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA0MTZhMzAyMzg4M2Y0NDQ2MGIyNWJkMmRkMTViZGFlYzgwMDU2ZmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
aHUsIDkgQXByIDIwMDkgMTI6NDQ6MTAgKzAzMDAKU3ViamVjdDogW1BBVENIXSAyMDA5LTA0LTA5
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTU0NgogICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cwoK
ICAgICAgICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEFscCBUb2tlci4KCiAgICAgICAgSW1wbGVtZW50
IEF0a09iamVjdDo6cmVmX3N0YXRlX3NldC4gU3RpbGwgcXVpdGUgYSBmZXcgc3RhdGVzIG5vdAog
ICAgICAgIGltcGxlbWVudGVkLgoKICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTQgKysrKwogV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrCiAyIGZp
bGVzIGNoYW5nZWQsIDg2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NTEyMTQxLi42
ODc5YzI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA0LTA5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDYKKyAgICAgICAg
W0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1lbnRzCisKKyAgICAgICAgQmFzZWQgb24g
YSBwYXRjaCBieSBBbHAgVG9rZXIuCisKKyAgICAgICAgSW1wbGVtZW50IEF0a09iamVjdDo6cmVm
X3N0YXRlX3NldC4gU3RpbGwgcXVpdGUgYSBmZXcgc3RhdGVzIG5vdAorICAgICAgICBpbXBsZW1l
bnRlZC4KKworICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcDoKKwogMjAwOS0wNC0wOCAgQWxwIFRva2VyICA8YWxwQG51YW50aS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvcGFnZS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDIxZmE4MWUuLmM2MDBhZmMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwCkBAIC0yMDgsOCArMjA4LDc5IEBAIHN0YXRpYyBBdGtSb2xlIHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9yb2xlKEF0a09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBhdGtSb2xlKGNvcmUo
b2JqZWN0KS0+cm9sZVZhbHVlKCkpOwogfQogCitzdGF0aWMgdm9pZCBzZXRBdGtTdGF0ZVNldEZy
b21Db3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a1N0YXRlU2V0
KiBzdGF0ZVNldCkKK3sKKyAgICAvLyBQbGVhc2Uga2VlcCB0aGUgc3RhdGUgbGlzdCBpbiBhbHBo
YWJldGljYWwgb3JkZXIKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc0NoZWNrZWQoKSkKKyAgICAg
ICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9DSEVDS0VEKTsK
KworICAgIGlmICghY29yZU9iamVjdC0+aXNSZWFkT25seSgpKQorICAgICAgICBhdGtfc3RhdGVf
c2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0VESVRBQkxFKTsKKworICAgIGlmIChj
b3JlT2JqZWN0LT5pc0VuYWJsZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVTZXQsIEFUS19TVEFURV9FTkFCTEVEKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5jYW5T
ZXRGb2N1c0F0dHJpYnV0ZSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0
ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNGb2N1
c2VkKCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfRk9DVVNFRCk7CisKKyAgICAvLyBUT0RPOiBBVEtfU1RBVEVfSE9SSVpPTlRBTAorCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0
X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0lOREVURVJNSU5BVEUpOworCisgICAgaWYg
KGNvcmVPYmplY3QtPmlzTXVsdGlTZWxlY3QoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRf
c3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFCTEUpOworCisgICAgLy8gVE9E
TzogQVRLX1NUQVRFX09QQVFVRQorCisgICAgaWYgKGNvcmVPYmplY3QtPmlzUHJlc3NlZCgpKQor
ICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1BSRVNT
RUQpOworCisgICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTEVDVEFCTEVfVEVYVAorCisgICAgLy8g
VE9ETzogQVRLX1NUQVRFX1NFTlNJVElWRQorCisgICAgaWYgKGNvcmVPYmplY3QtPmlzU2VsZWN0
ZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFU
RV9TRUxFQ1RFRCk7CisKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzT2ZmU2NyZWVuKCkpCisgICAg
ICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0hPV0lORyk7
CisKKyAgICAvLyBNdXR1YWxseSBleGNsdXNpdmUsIHNvIHdlIGdyb3VwIHRoZXNlIHR3bworICAg
IGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUZXh0RmllbGRSb2xlKQorICAgICAgICBh
dGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NJTkdMRV9MSU5FKTsK
KyAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUZXh0QXJlYVJvbGUpCisg
ICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfTVVMVElf
TElORSk7CisKKyAgICAvLyBUT0RPOiBBVEtfU1RBVEVfU0VOU0lUSVZFCisKKyAgICAvLyBUT0RP
OiBBVEtfU1RBVEVfVkVSVElDQUwKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Zpc2l0ZWQoKSkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJ
VEVEKTsKK30KKwogc3RhdGljIGdwb2ludGVyIHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFz
cyA9IE5VTEw7CiAKK3N0YXRpYyBBdGtTdGF0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfcmVmX3N0
YXRlX3NldChBdGtPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBdGtTdGF0ZVNldCogc3RhdGVTZXQg
PSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPnJlZl9z
dGF0ZV9zZXQob2JqZWN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZShvYmplY3QpOworCisgICAgaWYgKGNvcmVPYmplY3QgPT0gZmFsbGJhY2tPYmplY3QoKSkg
eworICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0RF
RlVOQ1QpOworICAgICAgICByZXR1cm4gc3RhdGVTZXQ7CisgICAgfQorCisgICAgc2V0QXRrU3Rh
dGVTZXRGcm9tQ29yZU9iamVjdChjb3JlT2JqZWN0LCBzdGF0ZVNldCk7CisKKyAgICByZXR1cm4g
c3RhdGVTZXQ7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQoQXRrT2Jq
ZWN0KiBvYmplY3QsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQUNDRVNTSUJMRShvYmplY3QpKTsKQEAgLTI0NSw2ICszMTYsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0KEF0a09iamVjdENsYXNzKiBrbGFzcykKICAg
ICBrbGFzcy0+Z2V0X25fY2hpbGRyZW4gPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbl9jaGlsZHJl
bjsKICAgICBrbGFzcy0+cmVmX2NoaWxkID0gd2Via2l0X2FjY2Vzc2libGVfcmVmX2NoaWxkOwog
ICAgIGtsYXNzLT5nZXRfcm9sZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xlOworICAgIGts
YXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfcmVmX3N0YXRlX3NldDsKIH0K
IAogR1R5cGUKLS0gCjEuNi4yLjIKCg==
</data>
<flag name="review"
          id="14594"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29361</attachid>
            <date>2009-04-09 03:20:26 -0700</date>
            <delta_ts>2009-04-15 09:44:26 -0700</delta_ts>
            <desc>componentiface.patch</desc>
            <filename>componentiface.patch</filename>
            <type>text/plain</type>
            <size>6766</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBkNmJkYTM1ODI5YWQ2M2YzMjBjNGE4ZmE1Mjk5Mjg4YjhlY2M0ODYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
aHUsIDkgQXByIDIwMDkgMTM6MDg6NTMgKzAzMDAKU3ViamVjdDogW1BBVENIXSAyMDA5LTA0LTA5
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTU0NgogICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cwoK
ICAgICAgICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEFscCBUb2tlci4KCiAgICAgICAgSW1wbGVtZW50
IEF0a0NvbXBvbmVudCBpbnRlcmZhY2UuCgogICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAgICAgIChjb3JlKToKLS0tCiBXZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKysrCiBXZWJDb3Jl
L3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCB8ICAxMTYgKysrKysr
KysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyksIDYgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2ODc5YzI4Li4yYmIxNmE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNyw2ICs3LDIwIEBACiAKICAgICAgICAgQmFz
ZWQgb24gYSBwYXRjaCBieSBBbHAgVG9rZXIuCiAKKyAgICAgICAgSW1wbGVtZW50IEF0a0NvbXBv
bmVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHA6CisgICAgICAgIChjb3JlKToKKworMjAwOS0wNC0wOSAgWGFuIExvcGV6
ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTQ2CisgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cworCisgICAg
ICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgQWxwIFRva2VyLgorCiAgICAgICAgIEltcGxlbWVudCBB
dGtPYmplY3Q6OnJlZl9zdGF0ZV9zZXQuIFN0aWxsIHF1aXRlIGEgZmV3IHN0YXRlcyBub3QKICAg
ICAgICAgaW1wbGVtZW50ZWQuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggYzYwMGFmYy4uNmQ4MzA4OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAg
LTM5LDYgKzM5LDExIEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdsaWIvZ3ByaW50
Zi5oPgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHN0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmYWxsYmFja09iamVjdCgpCkBAIC05OCw2ICsxMDMs
MTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVUZXh0KiB0
ZXh0KQogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwogfQogCitzdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKK3sKKyAgICBy
ZXR1cm4gY29yZShBVEtfT0JKRUNUKGNvbXBvbmVudCkpOworfQorCiBleHRlcm4gIkMiIHsKIAog
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShBdGtPYmplY3Qq
IG9iamVjdCkKQEAgLTY3OSw2ICs2ODksOTIgQEAgc3RhdGljIHZvaWQgYXRrX3N0cmVhbWFibGVf
Y29udGVudF9pbnRlcmZhY2VfaW5pdChBdGtTdHJlYW1hYmxlQ29udGVudElmYWNlKiBpZmEKICAg
ICBpZmFjZS0+Z2V0X3VyaSA9IHdlYmtpdF9hY2Nlc3NpYmxlX3N0cmVhbWFibGVfY29udGVudF9n
ZXRfdXJpOwogfQogCitzdGF0aWMgdm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUsIEludFJlY3QgcmVjdCwgZ2lu
dCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGggPSAwLCBnaW50KiBoZWlnaHQgPSAwKQoreworICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsK
KworICAgIGlmIChmcmFtZVZpZXcpIHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgY29uZnVzaW5nIGNvb3JkaW5hdGUgY29udmVy
c2lvbnMKKyAgICAgICAgLy8gdGhhdCBkb24ndCB3b3JrIGluIFdlYkNvcmUKKyAgICAgICAgR3Rr
V2lkZ2V0KiB3aWRnZXQgPSBmcmFtZVZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3co
KTsKKyAgICAgICAgR2RrV2luZG93KiB3aW4gPSB3aWRnZXQtPndpbmRvdzsKKyAgICAgICAgcmVj
dCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICAgICAgcmVjdC5tb3Zl
KHdpZGdldC0+YWxsb2NhdGlvbi54LCB3aWRnZXQtPmFsbG9jYXRpb24ueSk7CisKKyAgICAgICAg
aWYgKGNvb3JkVHlwZSA9PSBBVEtfWFlfU0NSRUVOKSB7CisgICAgICAgICAgICBnaW50IG9yaWdp
blgsIG9yaWdpblk7CisgICAgICAgICAgICBnZGtfd2luZG93X2dldF9vcmlnaW4od2luLCAmb3Jp
Z2luWCwgJm9yaWdpblkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKG9yaWdpblgsIG9yaWdpblkp
OworICAgICAgICB9CisjZWxzZQorICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgICAg
ICBjYXNlIEFUS19YWV9TQ1JFRU46CisgICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250
ZW50c1RvU2NyZWVuKHJlY3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRL
X1hZX1dJTkRPVzoKKyAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5k
b3cocmVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
CisgICAgaWYgKHgpCisgICAgICAgICp4ID0gcmVjdC54KCk7CisgICAgaWYgKHkpCisgICAgICAg
ICp5ID0gcmVjdC55KCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSByZWN0Lndp
ZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
Cit9CisKK3N0YXRpYyBJbnRQb2ludCBjb250ZW50c0Zyb21BdGsoQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgZ2ludCB4LCBnaW50IHkpCit7
CisgICAgSW50UG9pbnQgcG9zKHgsIHkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBj
b3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIGlmIChmcmFtZVZpZXcpIHsKKyAg
ICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgor
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb3MpOworICAg
ICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT53
aW5kb3dUb0NvbnRlbnRzKHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcG9z
OworfQorCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVm
X2FjY2Vzc2libGVfYXRfcG9pbnQoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQgeCwgZ2lu
dCB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQoreworICAgIEludFBvaW50IHBvcyA9IGNvbnRl
bnRzRnJvbUF0ayhjb3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgeCwgeSk7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25lbnQpLT5kb0FjY2Vzc2liaWxpdHlI
aXRUZXN0KHBvcyk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBOVUxMOworICAg
IGdfb2JqZWN0X3JlZih0YXJnZXQtPndyYXBwZXIoKSk7CisgICAgcmV0dXJuIHRhcmdldC0+d3Jh
cHBlcigpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ2V0
X2V4dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQq
IHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCit7CisgICAgSW50
UmVjdCByZWN0ID0gY29yZShjb21wb25lbnQpLT5lbGVtZW50UmVjdCgpOworICAgIGNvbnRlbnRz
VG9BdGsoY29yZShjb21wb25lbnQpLCBjb29yZFR5cGUsIHJlY3QsIHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dy
YWJfZm9jdXMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgY29yZShjb21wb25lbnQp
LT5zZXRGb2N1c2VkKHRydWUpOworICAgIHJldHVybiBjb3JlKGNvbXBvbmVudCktPmlzRm9jdXNl
ZCgpOworfQorCitzdGF0aWMgdm9pZCBhdGtfY29tcG9uZW50X2ludGVyZmFjZV9pbml0KEF0a0Nv
bXBvbmVudElmYWNlICppZmFjZSkKK3sKKyAgICBpZmFjZS0+cmVmX2FjY2Vzc2libGVfYXRfcG9p
bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQ7
CisgICAgaWZhY2UtPmdldF9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dl
dF9leHRlbnRzOworICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0gd2Via2l0X2FjY2Vzc2libGVfY29t
cG9uZW50X2dyYWJfZm9jdXM7Cit9CisKIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJ
bnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0
a19hY3Rpb25faW50ZXJmYWNlX2luaXQsCiAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSBO
VUxMLCBOVUxMfSwKQEAgLTY4NywyNyArNzgzLDMyIEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNl
SW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHsoR0ludGVyZmFjZUlu
aXRGdW5jKWF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFj
ZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0sCiAgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRr
X3RleHRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxM
LCBOVUxMfQorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0sCisgICAg
eyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdCwKKyAgICAg
KEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsIE5VTEx9LAogfTsKIAogZW51bSBXQUlUeXBl
IHsKICAgICBXQUlfQUNUSU9OLAogICAgIFdBSV9TVFJFQU1BQkxFLAogICAgIFdBSV9FRElUQUJM
RV9URVhULAotICAgIFdBSV9URVhUCisgICAgV0FJX1RFWFQsCisgICAgV0FJX0NPTVBPTkVOVAog
fTsKIAogc3RhdGljIEdUeXBlIEdldEF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShXQUlUeXBl
IHR5cGUpCiB7CiAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV0FJX0FDVElPTjoKKyAgY2Fz
ZSBXQUlfQUNUSU9OOgogICAgICAgcmV0dXJuIEFUS19UWVBFX0FDVElPTjsKLSAgICBjYXNlIFdB
SV9TVFJFQU1BQkxFOgorICBjYXNlIFdBSV9TVFJFQU1BQkxFOgogICAgICAgcmV0dXJuIEFUS19U
WVBFX1NUUkVBTUFCTEVfQ09OVEVOVDsKLSAgICBjYXNlIFdBSV9FRElUQUJMRV9URVhUOgorICBj
YXNlIFdBSV9FRElUQUJMRV9URVhUOgogICAgICAgcmV0dXJuIEFUS19UWVBFX0VESVRBQkxFX1RF
WFQ7Ci0gICAgY2FzZSBXQUlfVEVYVDoKKyAgY2FzZSBXQUlfVEVYVDoKICAgICAgIHJldHVybiBB
VEtfVFlQRV9URVhUOworICBjYXNlIFdBSV9DT01QT05FTlQ6CisgICAgICByZXR1cm4gQVRLX1RZ
UEVfQ09NUE9ORU5UOwogICB9CiAKICAgcmV0dXJuIEdfVFlQRV9JTlZBTElEOwpAQCAtNzE3LDYg
KzgxOCw5IEBAIHN0YXRpYyBndWludDE2IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiB7CiAgICAgZ3VpbnQxNiBpbnRlcmZhY2VNYXNr
ID0gMDsKIAorICAgIC8vIENvbXBvbmVudCBpbnRlcmZhY2UgaXMgYWx3YXlzIHN1cHBvcnRlZAor
ICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfQ09NUE9ORU5UOworCiAgICAgLy8gQWN0aW9u
IGFuZCBTdHJlYW1hYmxlIGFyZSBhbHdheXMgc3VwcG9ydGVkIChGSVhNRTogU2hvdWxkIHRoZXk/
KQogICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfQUNUSU9OOwogICAgIGludGVyZmFjZU1h
c2sgfD0gMSA8PCBXQUlfU1RSRUFNQUJMRTsKLS0gCjEuNi4yLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29463</attachid>
            <date>2009-04-14 06:35:16 -0700</date>
            <delta_ts>2009-04-20 11:08:16 -0700</delta_ts>
            <desc>statictextrole.patch</desc>
            <filename>statictextrole.patch</filename>
            <type>text/plain</type>
            <size>2040</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAzM2Q4ZDE0MzlmNjFkYWIzYjlmZDFkNzE2NmUzODc0ZTY4OWU2MjE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE0IEFwciAyMDA5IDEzOjI4OjU1ICswMzAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIDIwMDkt
MDQtMTQgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1l
bnRzCgogICAgICAgIEFsc28gaW1wbGVtZW50IHRleHQgaW50ZXJmYWNlIGZvciBTdGF0aWNUZXh0
Um9sZSwgd2hpY2ggY292ZXJzCiAgICAgICAgbW9zdCBvZiB0aGUgdGV4dCBpbiB3ZWIgcGFnZXMu
CgogICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAxMiArKysrKysrKysrKysKIFdlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuY3BwIHwgICAgNSArKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZjFhZGIzNy4uYzhjMzY3OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAw
OS0wNC0xNCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTQ2CisgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVu
aGFuY2VtZW50cworCisgICAgICAgIEFsc28gaW1wbGVtZW50IHRleHQgaW50ZXJmYWNlIGZvciBT
dGF0aWNUZXh0Um9sZSwgd2hpY2ggY292ZXJzCisgICAgICAgIG1vc3Qgb2YgdGhlIHRleHQgaW4g
d2ViIHBhZ2VzLgorCisgICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwOgorCiAyMDA5LTA0LTEzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBDYW1lcm9uIFp3YXJpY2guCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUv
cGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDcyNjU0ZDgu
LjIyZjhkNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCkBAIC03MzEsNiArNzMxLDExIEBAIHN0YXRpYyBndWludDE2IGdldElu
dGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAg
ICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9TVFJFQU1BQkxFOwogCiAgICAgLy8gVGV4dCAm
IEVkaXRhYmxlIFRleHQKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gY29yZU9iamVjdC0+
cm9sZVZhbHVlKCk7CisKKyAgICBpZiAocm9sZSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAgICAg
aW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOworCiAgICAgaWYgKGNvcmVPYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpICYmIGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2wo
KSkgewogICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNSZWFkT25seSgpKQogICAgICAgICAgICAg
aW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOwotLSAKMS42LjIuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29464</attachid>
            <date>2009-04-14 06:35:37 -0700</date>
            <delta_ts>2009-04-20 11:05:15 -0700</delta_ts>
            <desc>cleanup.patch</desc>
            <filename>cleanup.patch</filename>
            <type>text/plain</type>
            <size>5124</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBjOGMxY2UwMDRhYTJmMTg1NmQ2ZmExOTUzZmJmYWIyOTgwZDQ3OGJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE0IEFwciAyMDA5IDE0OjI2OjU4ICswMzAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIDIwMDkt
MDQtMTQgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1l
bnRzCgogICAgICAgIFJlbW92ZSBzb21lIGRlYWQgY29kZSBhbmQgZ19yZXR1cm5faWZfZmFpbCBm
cm9tIHN0YXRpYyBmdW5jdGlvbnMuCgogICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxMSArKysrKysKIFdlYkNvcmUvcGFnZS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIHwgICAzOSAtLS0tLS0tLS0tLS0tLS0tLS0tLQog
MiBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM4YzM2
NzkuLmI2ZTNhMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC01LDYgKzUsMTcgQEAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5
IGVuaGFuY2VtZW50cwogCisgICAgICAgIFJlbW92ZSBzb21lIGRlYWQgY29kZSBhbmQgZ19yZXR1
cm5faWZfZmFpbCBmcm9tIHN0YXRpYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisKKzIwMDktMDQtMTQgIFhhbiBMb3Bl
eiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTU0NgorICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMKKwogICAg
ICAgICBBbHNvIGltcGxlbWVudCB0ZXh0IGludGVyZmFjZSBmb3IgU3RhdGljVGV4dFJvbGUsIHdo
aWNoIGNvdmVycwogICAgICAgICBtb3N0IG9mIHRoZSB0ZXh0IGluIHdlYiBwYWdlcy4KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHAgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApp
bmRleCAyMmY4ZDU4Li4wZWE0NjAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMjkyLDkgKzI5Miw2IEBAIHN0YXRpYyBB
dGtTdGF0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfcmVmX3N0YXRlX3NldChBdGtPYmplY3QqIG9i
amVjdCkKIAogc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfaW5pdChBdGtPYmplY3QqIG9i
amVjdCwgZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19B
Q0NFU1NJQkxFKG9iamVjdCkpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7Ci0KICAgICBp
ZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0
aWFsaXplKQogICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVu
dF9jbGFzcyktPmluaXRpYWxpemUob2JqZWN0LCBkYXRhKTsKIApAQCAtMzg5LDggKzM4Niw2IEBA
IHN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9uYW1lKEF0
a0FjdGlvbiogYWN0aW9uLCBnaW50IGkpCiAKIHN0YXRpYyB2b2lkIGF0a19hY3Rpb25faW50ZXJm
YWNlX2luaXQoQXRrQWN0aW9uSWZhY2UqIGlmYWNlKQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
aWZhY2UpOwotCiAgICAgaWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlv
bl9kb19hY3Rpb247CiAgICAgaWZhY2UtPmdldF9uX2FjdGlvbnMgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9hY3Rpb25fZ2V0X25fYWN0aW9uczsKICAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Vi
a2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9kZXNjcmlwdGlvbjsKQEAgLTUyNSwzNyArNTIwLDgg
QEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNl
dChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnMKICAgICByZXR1cm4gVFJVRTsKIH0KIAotI2lmIDAK
LS8vIFNpZ25hbCBoYW5kbGVycwotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF90
ZXh0X2NoYW5nZWQoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3NpdGlvbiwgZ2ludCBsZW5ndGgpCi17
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfdGV4dF9jYXJldF9tb3Zl
ZChBdGtUZXh0KiB0ZXh0LCBnaW50IGxvY2F0aW9uKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X3RleHRfc2VsZWN0aW9uX2NoYW5nZWQoQXRrVGV4dCogdGV4dCkK
LXsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF90ZXh0X2F0dHJpYnV0
ZXNfY2hhbmdlZChBdGtUZXh0KiB0ZXh0KQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRf
b2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQsIEF0a0Nvb3JkVHlwZSBjb29yZF90eXBlLCBBdGtUZXh0
UmVjdGFuZ2xlKiByZWN0KQotewotfQotCi1zdGF0aWMgQXRrVGV4dFJhbmdlKiogd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfYm91bmRlZF9yYW5nZXMoQXRrVGV4dCogdGV4dCwgQXRrVGV4dFJl
Y3RhbmdsZSogcmVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkX3R5cGUsIEF0a1RleHRDbGlwVHlwZSB4
X2NsaXBfdHlwZSwgQXRrVGV4dENsaXBUeXBlIHlfY2xpcF90eXBlKQotewotfQotI2VuZGlmCi0K
IHN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2Up
CiB7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChpZmFjZSk7Ci0KICAgICBpZmFjZS0+Z2V0X3RleHQg
PSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0OwogICAgIGlmYWNlLT5nZXRfdGV4dF9h
ZnRlcl9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dDsKICAgICBpZmFjZS0+Z2V0X3RleHRfYXRfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQ7CkBAIC01NjUsNyArNTMxLDYgQEAgc3RhdGljIHZvaWQgYXRr
X3RleHRfaW50ZXJmYWNlX2luaXQoQXRrVGV4dElmYWNlKiBpZmFjZSkKICAgICBpZmFjZS0+Z2V0
X3J1bl9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVuX2F0dHJpYnV0
ZXM7CiAgICAgaWZhY2UtPmdldF9kZWZhdWx0X2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXM7CiAgICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJf
ZXh0ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzOwot
ICAgIC8vaWZhY2UtPmdldF9yYW5nZV9leHRlbnRzID0gOwogICAgIGlmYWNlLT5nZXRfY2hhcmFj
dGVyX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50Owog
ICAgIGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfb2Zmc2V0X2F0X3BvaW50OwogICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwpAQCAtNjQxLDggKzYwNiw2IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfcGFzdGVfdGV4dChBdGtF
ZGl0YWJsZVRleHQqIHRleHQsIGdpCiAKIHN0YXRpYyB2b2lkIGF0a19lZGl0YWJsZV90ZXh0X2lu
dGVyZmFjZV9pbml0KEF0a0VkaXRhYmxlVGV4dElmYWNlKiBpZmFjZSkKIHsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKGlmYWNlKTsKLQogICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJpYnV0ZXMgPSB3ZWJr
aXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3NldF9ydW5fYXR0cmlidXRlczsKICAgICBpZmFj
ZS0+c2V0X3RleHRfY29udGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Nl
dF90ZXh0X2NvbnRlbnRzOwogICAgIGlmYWNlLT5pbnNlcnRfdGV4dCA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQ7CkBAIC02ODAsOCArNjQzLDYgQEAgc3RhdGlj
IEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxlX2NvbnRl
bnRfZ2V0X3VyaShBdGtTdHIKIAogc3RhdGljIHZvaWQgYXRrX3N0cmVhbWFibGVfY29udGVudF9p
bnRlcmZhY2VfaW5pdChBdGtTdHJlYW1hYmxlQ29udGVudElmYWNlKiBpZmFjZSkKIHsKLSAgICBn
X3JldHVybl9pZl9mYWlsKGlmYWNlKTsKLQogICAgIGlmYWNlLT5nZXRfbl9taW1lX3R5cGVzID0g
d2Via2l0X2FjY2Vzc2libGVfc3RyZWFtYWJsZV9jb250ZW50X2dldF9uX21pbWVfdHlwZXM7CiAg
ICAgaWZhY2UtPmdldF9taW1lX3R5cGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9zdHJlYW1hYmxlX2Nv
bnRlbnRfZ2V0X21pbWVfdHlwZTsKICAgICBpZmFjZS0+Z2V0X3N0cmVhbSA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3N0cmVhbWFibGVfY29udGVudF9nZXRfc3RyZWFtOwotLSAKMS42LjIuMgoK
</data>
<flag name="review"
          id="14675"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29465</attachid>
            <date>2009-04-14 06:36:07 -0700</date>
            <delta_ts>2009-04-20 11:05:31 -0700</delta_ts>
            <desc>atktextmethods.patch</desc>
            <filename>atktextmethods.patch</filename>
            <type>text/plain</type>
            <size>3361</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA3M2I3Y2QxYmMwYjBlZTFlMzc2OTQwYmRiYzNhM2NiNDJiNDQxYTAwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE0IEFwciAyMDA5IDE2OjI2OjAxICswMzAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIDIwMDkt
MDQtMTQgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1l
bnRzCgogICAgICAgIEFkZCBhIHByb3BlciBpbXBsZW1lbnRhdGlvbiBvZiBBdGtUZXh0OjpnZXRf
dGV4dCBhbmQKICAgICAgICBBdGtUZXh0OjpnZXRfY2hhcmFjdGVyX2NvdW50LCB3aGljaCB0YWtl
cyBpbnRvIGFjY291bnQgbm9uCiAgICAgICAgVGV4dENvbnRyb2wgdGV4dC4gV2l0aCB0aGlzIHRo
ZSAnVGV4dCcgZmllbGQgaW4gQWNjZXJjaXNlcidzCiAgICAgICAgSW50ZXJmYWNlIFZpZXdlciBp
cyBmaWxsZWQgY29ycmVjdGx5LgoKICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTQgKysrKysrKysrKysrKwogV2ViQ29yZS9wYWdlL2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgfCAgIDIxICsrKysrKysrKysrKysrKyst
LS0KIDIgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI2
ZTNhMTcuLjhjYjQ0N2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjAgQEAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmls
aXR5IGVuaGFuY2VtZW50cwogCisgICAgICAgIEFkZCBhIHByb3BlciBpbXBsZW1lbnRhdGlvbiBv
ZiBBdGtUZXh0OjpnZXRfdGV4dCBhbmQKKyAgICAgICAgQXRrVGV4dDo6Z2V0X2NoYXJhY3Rlcl9j
b3VudCwgd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IG5vbgorICAgICAgICBUZXh0Q29udHJvbCB0
ZXh0LiBXaXRoIHRoaXMgdGhlICdUZXh0JyBmaWVsZCBpbiBBY2NlcmNpc2VyJ3MKKyAgICAgICAg
SW50ZXJmYWNlIFZpZXdlciBpcyBmaWxsZWQgY29ycmVjdGx5LgorCisgICAgICAgICogcGFnZS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorCisyMDA5LTA0LTE0ICBYYW4g
TG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE1NDYKKyAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1lbnRzCisK
ICAgICAgICAgUmVtb3ZlIHNvbWUgZGVhZCBjb2RlIGFuZCBnX3JldHVybl9pZl9mYWlsIGZyb20g
c3RhdGljIGZ1bmN0aW9ucy4KIAogICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggMGVhNDYwMy4uMjg5MGM0MCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIv
V2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAgLTM5
NSwxMCArMzk1LDE4IEBAIHN0YXRpYyB2b2lkIGF0a19hY3Rpb25faW50ZXJmYWNlX2luaXQoQXRr
QWN0aW9uSWZhY2UqIGlmYWNlKQogCiAvLyBUZXh0CiAKLXN0YXRpYyBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X29mZnNldCwg
Z2ludCBlbmRfb2Zmc2V0KQorc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dl
dF90ZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQog
ewotICAgIFN0cmluZyByZXQgPSBjb3JlKHRleHQpLT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5U
ZXh0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSk7Ci0gICAg
Ly8gVE9ETzogSW50ZW50aW9uYWxseSBjb3BpZWQ/CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgU3RyaW5nIHJldDsKKyAgICB1bnNpZ25lZCBz
dGFydCA9IHN0YXJ0T2Zmc2V0OworICAgIGludCBsZW5ndGggPSBlbmRPZmZzZXQgLSBzdGFydE9m
ZnNldDsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJl
dCA9IGNvcmVPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydCwg
bGVuZ3RoKSk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJF
bGVtZW50KCkuc3Vic3RyaW5nKHN0YXJ0LCBsZW5ndGgpOworCiAgICAgcmV0dXJuIGdfc3RyZHVw
KHJldC51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtNDY5LDcgKzQ3NywxMiBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZgogCiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9j
aGFyYWN0ZXJfY291bnQoQXRrVGV4dCogdGV4dCkKIHsKLSAgICByZXR1cm4gY29yZSh0ZXh0KS0+
dGV4dExlbmd0aCgpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAg
cmV0dXJuIGNvcmVPYmplY3QtPnRleHRMZW5ndGgoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7CiB9CiAKIHN0YXRpYyBn
aW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBdGtUZXh0KiB0
ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkcykKLS0gCjEuNi4yLjIKCg==
</data>
<flag name="review"
          id="14676"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29497</attachid>
            <date>2009-04-15 03:24:01 -0700</date>
            <delta_ts>2009-04-21 00:06:32 -0700</delta_ts>
            <desc>atkactioninterface.patch</desc>
            <filename>atkactioninterface.patch</filename>
            <type>text/plain</type>
            <size>2045</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA0ZWM1N2M2NzRhMzQ4OTA5MWQyYjA3OWFlNDMxMDhhZGY2ZTQ2YjQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDE1IEFwciAyMDA5IDEzOjIxOjM1ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0x
NSAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgT25seSBpbXBsZW1lbnQgQXRrQWN0aW9uIGludGVyZmFjZSBpZiB3ZSBhY3R1YWxs
eSBoYXZlIGFuIGFjdGlvbi4KCiAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHA6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCB8ICAgIDcgKysrKystLQogMiBmaWxlcyBjaGFu
Z2VkLCAxNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc5NjgwNy4uMmVhZTljMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAwOS0wNC0xNSAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CisgICAgICAgIFtHVEtdIEFU
SyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cworCisgICAgICAgIE9ubHkgaW1wbGVtZW50IEF0
a0FjdGlvbiBpbnRlcmZhY2UgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBhY3Rpb24uCisKKyAgICAg
ICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisKIDIwMDkt
MDQtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1
YmJlci1zdGFtcGVkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0
ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCAyODkwYzQwLi4zZTY1NzAxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcApAQCAtNzAwLDEwICs3MDAsMTMgQEAgc3RhdGljIGd1aW50MTYgZ2V0SW50ZXJmYWNlTWFz
a0Zyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsKICAgICBndWlu
dDE2IGludGVyZmFjZU1hc2sgPSAwOwogCi0gICAgLy8gQWN0aW9uIGFuZCBTdHJlYW1hYmxlIGFy
ZSBhbHdheXMgc3VwcG9ydGVkIChGSVhNRTogU2hvdWxkIHRoZXk/KQotICAgIGludGVyZmFjZU1h
c2sgfD0gMSA8PCBXQUlfQUNUSU9OOworICAgIC8vIFN0cmVhbWFibGUgaXMgYWx3YXlzIHN1cHBv
cnRlZCAoRklYTUU6IFRoaXMgaXMgd3JvbmcpCiAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdB
SV9TVFJFQU1BQkxFOwogCisgICAgLy8gQWN0aW9uCisgICAgaWYgKCFjb3JlT2JqZWN0LT5hY3Rp
b25WZXJiKCkuaXNFbXB0eSgpKQorICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0FD
VElPTjsKKwogICAgIC8vIFRleHQgJiBFZGl0YWJsZSBUZXh0CiAgICAgQWNjZXNzaWJpbGl0eVJv
bGUgcm9sZSA9IGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpOwogCi0tIAoxLjYuMi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29500</attachid>
            <date>2009-04-15 09:44:26 -0700</date>
            <delta_ts>2009-04-21 00:05:44 -0700</delta_ts>
            <desc>atkcomponentifacev2.patch</desc>
            <filename>atkcomponentifacev2.patch</filename>
            <type>text/plain</type>
            <size>8806</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBlNzA0ODg4OTY2NjgyMWU1YWVmODNhYzBkZmQyZjcyM2MzZjFhOWViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDE1IEFwciAyMDA5IDE5OjQwOjI2ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQ29yZToK
CjIwMDktMDQtMTUgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5o
YW5jZW1lbnRzCgogICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgQWxwIFRva2VyLgoKICAgICAg
ICBJbXBsZW1lbnQgQXRrQ29tcG9uZW50IGludGVyZmFjZS4KCiAgICAgICAgKiBwYWdlL2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAgICAgICAgKGNvcmUpOgoKV2ViS2l0
L2d0azoKCjIwMDktMDQtMTUgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxp
dHkgZW5oYW5jZW1lbnRzCgogICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgQWxwIFRva2VyLgoK
ICAgICAgICBJbXBsZW1lbnQgQXRrQ29tcG9uZW50IGludGVyZmFjZS4KCiAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgogICAgICAgIChXZWJLaXQ6OndpZGdldFNj
cmVlblBvc2l0aW9uKToKICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OndpbmRvd1RvU2Ny
ZWVuKToKICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnNjcmVlblRvV2luZG93KToKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTQgKysrCiBXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNw
cCB8ICAgODggKysrKysrKysrKysrKysrKysrKy0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysrCiBXZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgICAgICB8ICAgMzAgKysrKysrLQogNCBmaWxlcyBj
aGFuZ2VkLCAxNDIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJlYWU5YzAuLmYwY2Uy
MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC01LDYgKzUsMjAgQEAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTQ2CiAgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2Vt
ZW50cwogCisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgQWxwIFRva2VyLgorCisgICAgICAg
IEltcGxlbWVudCBBdGtDb21wb25lbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogcGFnZS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAoY29yZSk6CisKKzIw
MDktMDQtMTUgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU0NgorICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBl
bmhhbmNlbWVudHMKKwogICAgICAgICBPbmx5IGltcGxlbWVudCBBdGtBY3Rpb24gaW50ZXJmYWNl
IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4gYWN0aW9uLgogCiAgICAgICAgICogcGFnZS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ3Rr
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCAzZTY1NzAxLi43MDkyYTc4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcApAQCAtMTA3LDYgKzEwNywxMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZShBdGtFZGl0YWJsZVRleHQqIHRleHQpCiAgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0
ZXh0KSk7CiB9CiAKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0NvbXBvbmVu
dCogY29tcG9uZW50KQoreworICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QoY29tcG9uZW50KSk7
Cit9CisKIGV4dGVybiAiQyIgewogCiBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9uYW1lKEF0a09iamVjdCogb2JqZWN0KQpAQCAtNjYyLDYgKzY2Nyw3NyBAQCBzdGF0
aWMgdm9pZCBhdGtfc3RyZWFtYWJsZV9jb250ZW50X2ludGVyZmFjZV9pbml0KEF0a1N0cmVhbWFi
bGVDb250ZW50SWZhY2UqIGlmYQogICAgIGlmYWNlLT5nZXRfdXJpID0gd2Via2l0X2FjY2Vzc2li
bGVfc3RyZWFtYWJsZV9jb250ZW50X2dldF91cmk7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbnRlbnRz
VG9BdGsoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrQ29vcmRUeXBlIGNvb3Jk
VHlwZSwgSW50UmVjdCByZWN0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCA9IDAsIGdp
bnQqIGhlaWdodCA9IDApCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlT2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpOworCisgICAgaWYgKGZyYW1lVmlldykgeworICAgICAgICBz
d2l0Y2ggKGNvb3JkVHlwZSkgeworICAgICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAg
ICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKKyAgICAgICAgICAgIHJlY3Qg
PSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVjdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4KQorICAgICAgICAqeCA9IHJlY3QueCgpOwor
ICAgIGlmICh5KQorICAgICAgICAqeSA9IHJlY3QueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAg
ICAgKndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWln
aHQgPSByZWN0LmhlaWdodCgpOworfQorCitzdGF0aWMgSW50UG9pbnQgYXRrVG9Db250ZW50cyhB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlLCBn
aW50IHgsIGdpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBwb3MoeCwgeSk7CisKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgaWYg
KGZyYW1lVmlldykgeworICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgICAgICBjYXNl
IEFUS19YWV9TQ1JFRU46CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5zY3JlZW5Ub0Nv
bnRlbnRzKHBvcyk7CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAgICAgICAgICAgIHJl
dHVybiBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9zKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3Np
YmxlX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBdGtDb21wb25lbnQqIGNvbXBv
bmVudCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCit7CisgICAgSW50
UG9pbnQgcG9zID0gYXRrVG9Db250ZW50cyhjb3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgeCwg
eSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25lbnQpLT5k
b0FjY2Vzc2liaWxpdHlIaXRUZXN0KHBvcyk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIGdfb2JqZWN0X3JlZih0YXJnZXQtPndyYXBwZXIoKSk7CisgICAgcmV0
dXJuIHRhcmdldC0+d3JhcHBlcigpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJs
ZV9jb21wb25lbnRfZ2V0X2V4dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQqIHgs
IGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZFR5
cGUpCit7CisgICAgSW50UmVjdCByZWN0ID0gY29yZShjb21wb25lbnQpLT5lbGVtZW50UmVjdCgp
OworICAgIGNvbnRlbnRzVG9BdGsoY29yZShjb21wb25lbnQpLCBjb29yZFR5cGUsIHJlY3QsIHgs
IHksIHdpZHRoLCBoZWlnaHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfY29tcG9uZW50X2dyYWJfZm9jdXMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAg
Y29yZShjb21wb25lbnQpLT5zZXRGb2N1c2VkKHRydWUpOworICAgIHJldHVybiBjb3JlKGNvbXBv
bmVudCktPmlzRm9jdXNlZCgpOworfQorCitzdGF0aWMgdm9pZCBhdGtfY29tcG9uZW50X2ludGVy
ZmFjZV9pbml0KEF0a0NvbXBvbmVudElmYWNlICppZmFjZSkKK3sKKyAgICBpZmFjZS0+cmVmX2Fj
Y2Vzc2libGVfYXRfcG9pbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vz
c2libGVfYXRfcG9pbnQ7CisgICAgaWZhY2UtPmdldF9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2li
bGVfY29tcG9uZW50X2dldF9leHRlbnRzOworICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0gd2Via2l0
X2FjY2Vzc2libGVfY29tcG9uZW50X2dyYWJfZm9jdXM7Cit9CisKIHN0YXRpYyBjb25zdCBHSW50
ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHsoR0ludGVy
ZmFjZUluaXRGdW5jKWF0a19hY3Rpb25faW50ZXJmYWNlX2luaXQsCiAgICAgIChHSW50ZXJmYWNl
RmluYWxpemVGdW5jKSBOVUxMLCBOVUxMfSwKQEAgLTY3MCwxNCArNzQ2LDE3IEBAIHN0YXRpYyBj
b25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAg
IHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0LAog
ICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0sCiAgICAgeyhHSW50ZXJm
YWNlSW5pdEZ1bmMpYXRrX3RleHRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmlu
YWxpemVGdW5jKSBOVUxMLCBOVUxMfQorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVM
TCwgTlVMTH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2NvbXBvbmVudF9pbnRlcmZh
Y2VfaW5pdCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIE5VTEwsIE5VTEx9LAogfTsK
IAogZW51bSBXQUlUeXBlIHsKICAgICBXQUlfQUNUSU9OLAogICAgIFdBSV9TVFJFQU1BQkxFLAog
ICAgIFdBSV9FRElUQUJMRV9URVhULAotICAgIFdBSV9URVhUCisgICAgV0FJX1RFWFQsCisgICAg
V0FJX0NPTVBPTkVOVAogfTsKIAogc3RhdGljIEdUeXBlIEdldEF0a0ludGVyZmFjZVR5cGVGcm9t
V0FJVHlwZShXQUlUeXBlIHR5cGUpCkBAIC02OTEsNiArNzcwLDggQEAgc3RhdGljIEdUeXBlIEdl
dEF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShXQUlUeXBlIHR5cGUpCiAgICAgICByZXR1cm4g
QVRLX1RZUEVfRURJVEFCTEVfVEVYVDsKICAgY2FzZSBXQUlfVEVYVDoKICAgICAgIHJldHVybiBB
VEtfVFlQRV9URVhUOworICBjYXNlIFdBSV9DT01QT05FTlQ6CisgICAgICByZXR1cm4gQVRLX1RZ
UEVfQ09NUE9ORU5UOwogICB9CiAKICAgcmV0dXJuIEdfVFlQRV9JTlZBTElEOwpAQCAtNzAzLDYg
Kzc4NCw5IEBAIHN0YXRpYyBndWludDE2IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgLy8gU3RyZWFtYWJsZSBpcyBhbHdheXMg
c3VwcG9ydGVkIChGSVhNRTogVGhpcyBpcyB3cm9uZykKICAgICBpbnRlcmZhY2VNYXNrIHw9IDEg
PDwgV0FJX1NUUkVBTUFCTEU7CiAKKyAgICAvLyBDb21wb25lbnQgaW50ZXJmYWNlIGlzIGFsd2F5
cyBzdXBwb3J0ZWQKKyAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0NPTVBPTkVOVDsKKwog
ICAgIC8vIEFjdGlvbgogICAgIGlmICghY29yZU9iamVjdC0+YWN0aW9uVmVyYigpLmlzRW1wdHko
KSkKICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9BQ1RJT047CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDg0ZDI5
NDUuLjVkYWUwNWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDQtMTUgIFhhbiBMb3BleiAg
PHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0
NgorICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMKKworICAgICAg
ICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEFscCBUb2tlci4KKworICAgICAgICBJbXBsZW1lbnQgQXRr
Q29tcG9uZW50IGludGVyZmFjZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OndpZGdldFNjcmVlblBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50Ojp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudDo6c2NyZWVuVG9XaW5kb3cpOgorCiAyMDA5LTA0LTE0ICBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBndGstZG9jIGNvbnRyb2wgYW5kIGJhc2Ugc2dtbCBm
aWxlcyBmb3IgMS4xLjUuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHAKaW5kZXggNWUzZmVhZC4uODU2NTJiMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtMzM0LDE2ICszMzQsMzggQEAgdm9pZCBD
aHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYg
cmVjdFRvU2Nyb2xsLCBjb24KICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3koaW52YWxpZFJlZ2lvbik7
CiB9CiAKKy8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoZSBXTSBk
ZWNvcmF0aW9ucworc3RhdGljIEludFBvaW50IHdpZGdldFNjcmVlblBvc2l0aW9uKEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwod2lkZ2V0KTsKKyAgICBpbnQgd2lkZ2V0WCA9IDAsIHdpZGdldFkgPSAwOworCisgICAg
Z3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB3aW5kb3csIDAsIDAsICZ3
aWRnZXRYLCAmd2lkZ2V0WSk7CisKKyAgICBJbnRQb2ludCByZXN1bHQod2lkZ2V0WCwgd2lkZ2V0
WSk7CisgICAgaW50IG9yaWdpblgsIG9yaWdpblk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2lu
KHdpbmRvdy0+d2luZG93LCAmb3JpZ2luWCwgJm9yaWdpblkpOworICAgIHJlc3VsdC5tb3ZlKG9y
aWdpblgsIG9yaWdpblkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSW50UmVjdCBDaHJv
bWVDbGllbnQ6OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVjdDsKKyAgICBJbnRSZWN0IHJlc3Vs
dChyZWN0KTsKKyAgICBJbnRQb2ludCBzY3JlZW5Qb3NpdGlvbiA9IHdpZGdldFNjcmVlblBvc2l0
aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgcmVzdWx0Lm1vdmUoc2NyZWVuUG9zaXRp
b24ueCgpLCBzY3JlZW5Qb3NpdGlvbi55KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
SW50UG9pbnQgQ2hyb21lQ2xpZW50OjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcG9pbnQ7Cisg
ICAgSW50UG9pbnQgcmVzdWx0KHBvaW50KTsKKyAgICBJbnRQb2ludCBzY3JlZW5Qb3NpdGlvbiA9
IHdpZGdldFNjcmVlblBvc2l0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgcmVzdWx0
Lm1vdmUoLXNjcmVlblBvc2l0aW9uLngoKSwgLXNjcmVlblBvc2l0aW9uLnkoKSk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBQbGF0Zm9ybVdpZGdldCBDaHJvbWVDbGllbnQ6OnBsYXRmb3Jt
V2luZG93KCkgY29uc3QKLS0gCjEuNi4yLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29530</attachid>
            <date>2009-04-16 01:05:01 -0700</date>
            <delta_ts>2009-04-27 14:34:57 -0700</delta_ts>
            <desc>atkimageiface.patch</desc>
            <filename>atkimageiface.patch</filename>
            <type>text/plain</type>
            <size>4154</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAyMTc0NmY2MDZmOGQxODMyZjllMzcxMzJmMWYyY2Y5NmM1Nzg1ZTBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
aHUsIDE2IEFwciAyMDA5IDEwOjUxOjMwICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0x
NiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBieSBBbHAgVG9rZXIuCgogICAgICAgIEltcGxlbWVu
dCBBdGtJbWFnZSBpbnRlcmZhY2UuCgogICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxMyArKysrKysKIFdlYkNvcmUvcGFnZS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIHwgICA0NiArKysrKysrKysrKysrKysrKysrLQog
MiBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFiMDA5
ZS4uYzdlODRiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wNC0xNiAgWGFuIExvcGV6ICA8eGxvcGV6
QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CisgICAg
ICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmlsaXR5IGVuaGFuY2VtZW50cworCisgICAgICAgIEJhc2Vk
IG9uIGEgcGF0Y2ggYnkgQWxwIFRva2VyLgorCisgICAgICAgIEltcGxlbWVudCBBdGtJbWFnZSBp
bnRlcmZhY2UuCisKKyAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHA6CisKIDIwMDktMDQtMTUgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL3Bh
Z2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCA3MDkyYTc4Li4w
NTdiOTQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmNwcApAQCAtMTEyLDYgKzExMiwxMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZShBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKICAgICByZXR1cm4gY29yZShBVEtf
T0JKRUNUKGNvbXBvbmVudCkpOwogfQogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZShBdGtJbWFnZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChpbWFnZSkp
OworfQorCiBleHRlcm4gIkMiIHsKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfbmFtZShBdGtPYmplY3QqIG9iamVjdCkKQEAgLTczOCw2ICs3NDMsMzYgQEAgc3Rh
dGljIHZvaWQgYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdChBdGtDb21wb25lbnRJZmFjZSAq
aWZhY2UpCiAgICAgaWZhY2UtPmdyYWJfZm9jdXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25l
bnRfZ3JhYl9mb2N1czsKIH0KIAorLy8gSW1hZ2UKKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vz
c2libGVfaW1hZ2VfZ2V0X2ltYWdlX3Bvc2l0aW9uKEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogeCwg
Z2ludCogeSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBj
b3JlKGltYWdlKS0+ZWxlbWVudFJlY3QoKTsKKyAgICBjb250ZW50c1RvQXRrKGNvcmUoaW1hZ2Up
LCBjb29yZFR5cGUsIHJlY3QsIHgsIHkpOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtp
dF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9kZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2Up
Cit7CisgICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9n
ZXRfaW1hZ2Vfc2l6ZShBdGtJbWFnZSogaW1hZ2UsIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQp
Cit7CisgICAgSW50U2l6ZSBzaXplID0gY29yZShpbWFnZSktPnNpemUoKTsKKworICAgIGlmICh3
aWR0aCkKKyAgICAgICAgKndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisg
ICAgICAgICpoZWlnaHQgPSBzaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgdm9pZCBhdGtfaW1h
Z2VfaW50ZXJmYWNlX2luaXQoQXRrSW1hZ2VJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmdl
dF9pbWFnZV9wb3NpdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3Np
dGlvbjsKKyAgICBpZmFjZS0+Z2V0X2ltYWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2li
bGVfaW1hZ2VfZ2V0X2ltYWdlX2Rlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfaW1hZ2Vfc2l6
ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9zaXplOworfQorCiBzdGF0aWMg
Y29uc3QgR0ludGVyZmFjZUluZm8gQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnNbXSA9IHsKICAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0LAogICAgICAo
R0ludGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0sCkBAIC03NDksNiArNzg0LDggQEAg
c3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIEF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10g
PSB7CiAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSBOVUxMLCBOVUxMfSwKICAgICB7KEdJ
bnRlcmZhY2VJbml0RnVuYylhdGtfY29tcG9uZW50X2ludGVyZmFjZV9pbml0LAogICAgICAoR0lu
dGVyZmFjZUZpbmFsaXplRnVuYykgTlVMTCwgTlVMTH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1
bmMpYXRrX2ltYWdlX2ludGVyZmFjZV9pbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgTlVMTCwgTlVMTH0KIH07CiAKIGVudW0gV0FJVHlwZSB7CkBAIC03NTYsNyArNzkzLDggQEAg
ZW51bSBXQUlUeXBlIHsKICAgICBXQUlfU1RSRUFNQUJMRSwKICAgICBXQUlfRURJVEFCTEVfVEVY
VCwKICAgICBXQUlfVEVYVCwKLSAgICBXQUlfQ09NUE9ORU5UCisgICAgV0FJX0NPTVBPTkVOVCwK
KyAgICBXQUlfSU1BR0UKIH07CiAKIHN0YXRpYyBHVHlwZSBHZXRBdGtJbnRlcmZhY2VUeXBlRnJv
bVdBSVR5cGUoV0FJVHlwZSB0eXBlKQpAQCAtNzcyLDYgKzgxMCw4IEBAIHN0YXRpYyBHVHlwZSBH
ZXRBdGtJbnRlcmZhY2VUeXBlRnJvbVdBSVR5cGUoV0FJVHlwZSB0eXBlKQogICAgICAgcmV0dXJu
IEFUS19UWVBFX1RFWFQ7CiAgIGNhc2UgV0FJX0NPTVBPTkVOVDoKICAgICAgIHJldHVybiBBVEtf
VFlQRV9DT01QT05FTlQ7CisgIGNhc2UgV0FJX0lNQUdFOgorICAgICAgcmV0dXJuIEFUS19UWVBF
X0lNQUdFOwogICB9CiAKICAgcmV0dXJuIEdfVFlQRV9JTlZBTElEOwpAQCAtODA0LDYgKzg0NCwx
MCBAQCBzdGF0aWMgZ3VpbnQxNiBnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8
IFdBSV9FRElUQUJMRV9URVhUOwogICAgIH0KIAorICAgIC8vIEltYWdlCisgICAgaWYgKGNvcmVP
YmplY3QtPmlzSW1hZ2UoKSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9JTUFH
RTsKKwogICAgIHJldHVybiBpbnRlcmZhY2VNYXNrOwogfQogCi0tIAoxLjYuMi4yCgo=
</data>
<flag name="review"
          id="14728"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29536</attachid>
            <date>2009-04-16 06:10:35 -0700</date>
            <delta_ts>2009-04-27 14:56:13 -0700</delta_ts>
            <desc>covermoreroles.patch</desc>
            <filename>covermoreroles.patch</filename>
            <type>text/plain</type>
            <size>5154</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA3MDhkYWRiNzk4ZDk5NDM5NTAxZTRkNGMwNTdlYWI0NDI1NjExOGQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
aHUsIDE2IEFwciAyMDA5IDE2OjA4OjMyICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0x
NiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBieSBBbHAgVG9rZXIuCgogICAgICAgIENvdmVyIG1v
cmUgV2ViQ29yZSByb2xlIC0+IEFUSyByb2xlIGNvbnZlcnNpb25zLgoKICAgICAgICAqIHBhZ2Uv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKLS0tCiBXZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKysrCiBXZWJDb3Jl
L3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCB8ICAgOTQgKysrKysr
KysrKysrKysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKSwgMjMgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBjN2U4NGJlLi5hZWM4ZmY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNyw2ICs3LDE5IEBACiAKICAgICAgICAgQmFz
ZWQgb24gYSBwYXRjaCBieSBBbHAgVG9rZXIuCiAKKyAgICAgICAgQ292ZXIgbW9yZSBXZWJDb3Jl
IHJvbGUgLT4gQVRLIHJvbGUgY29udmVyc2lvbnMuCisKKyAgICAgICAgKiBwYWdlL2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisKKzIwMDktMDQtMTYgIFhhbiBMb3BleiAg
PHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0
NgorICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMKKworICAgICAg
ICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEFscCBUb2tlci4KKwogICAgICAgICBJbXBsZW1lbnQgQXRr
SW1hZ2UgaW50ZXJmYWNlLgogCiAgICAgICAgICogcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCAwNTdiOTQ4Li5mMTIwMjVlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9X
ZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMTgz
LDQwICsxODMsODggQEAgc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfZ2V0X2luZGV4X2lu
X3BhcmVudChBdGtPYmplY3QqIG9iamVjdCkKIHN0YXRpYyBBdGtSb2xlIGF0a1JvbGUoQWNjZXNz
aWJpbGl0eVJvbGUgcm9sZSkKIHsKICAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIFdlYkNv
cmU6OkJ1dHRvblJvbGU6CisgICAgY2FzZSBVbmtub3duUm9sZToKKyAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1VOS05PV047CisgICAgY2FzZSBCdXR0b25Sb2xlOgogICAgICAgICByZXR1cm4gQVRL
X1JPTEVfUFVTSF9CVVRUT047Ci0gICAgY2FzZSBXZWJDb3JlOjpSYWRpb0J1dHRvblJvbGU6Cisg
ICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9SQURJT19C
VVRUT047Ci0gICAgY2FzZSBXZWJDb3JlOjpDaGVja0JveFJvbGU6CisgICAgY2FzZSBDaGVja0Jv
eFJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9DSEVDS19CT1g7Ci0gICAgY2FzZSBXZWJD
b3JlOjpTbGlkZXJSb2xlOgorICAgIGNhc2UgU2xpZGVyUm9sZToKICAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1NMSURFUjsKLSAgICBjYXNlIFdlYkNvcmU6OlRhYkdyb3VwUm9sZToKKyAgICBjYXNl
IFRhYkdyb3VwUm9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q7Ci0g
ICAgY2FzZSBXZWJDb3JlOjpUZXh0RmllbGRSb2xlOgotICAgIGNhc2UgV2ViQ29yZTo6VGV4dEFy
ZWFSb2xlOgotICAgIGNhc2UgV2ViQ29yZTo6TGlzdE1hcmtlclJvbGU6CisgICAgY2FzZSBUZXh0
RmllbGRSb2xlOgorICAgIGNhc2UgVGV4dEFyZWFSb2xlOgogICAgICAgICByZXR1cm4gQVRLX1JP
TEVfRU5UUlk7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdGF0aWNUZXh0Um9sZToKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1RFWFQ7IC8vPwotICAgIGNhc2UgV2ViQ29yZTo6T3V0bGluZVJvbGU6Cisg
ICAgY2FzZSBTdGF0aWNUZXh0Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RFWFQ7Cisg
ICAgY2FzZSBPdXRsaW5lUm9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RSRUU7Ci0gICAg
Y2FzZSBXZWJDb3JlOjpDb2x1bW5Sb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9X
TjsgLy8/Ci0gICAgY2FzZSBXZWJDb3JlOjpSb3dSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JP
TEVfTElTVF9JVEVNOwotICAgIGNhc2UgV2ViQ29yZTo6R3JvdXBSb2xlOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfVU5LTk9XTjsgLy8/Ci0gICAgY2FzZSBXZWJDb3JlOjpMaXN0Um9sZToKKyAg
ICBjYXNlIE1lbnVCYXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVV9CQVI7Cisg
ICAgY2FzZSBNZW51Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlU7CisgICAgY2Fz
ZSBNZW51SXRlbVJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VX0lURU07CisgICAg
Y2FzZSBDb2x1bW5Sb2xlOgorICAgICAgICAvL3JldHVybiBBVEtfUk9MRV9UQUJMRV9DT0xVTU5f
SEVBREVSOyAvLz8KKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047IC8vIE1hdGNoZXMg
TW96aWxsYQorICAgIGNhc2UgUm93Um9sZToKKyAgICAgICAgLy9yZXR1cm4gQVRLX1JPTEVfVEFC
TEVfUk9XX0hFQURFUjsgLy8/CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9MSVNUX0lURU07IC8v
IE1hdGNoZXMgTW96aWxsYQorICAgIGNhc2UgVG9vbGJhclJvbGU6CisgICAgICAgIHJldHVybiBB
VEtfUk9MRV9UT09MX0JBUjsKKyAgICBjYXNlIEJ1c3lJbmRpY2F0b3JSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfUFJPR1JFU1NfQkFSOyAvLz8KKyAgICBjYXNlIFByb2dyZXNzSW5kaWNh
dG9yUm9sZToKKyAgICAgICAgLy9yZXR1cm4gQVRLX1JPTEVfU1BJTl9CVVRUT047IC8vU29tZSBj
b25mdXNpb24gaGVyZSBpbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfUFJPR1JFU1NfQkFSOworICAgIGNhc2UgV2luZG93Um9sZToKKyAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX1dJTkRPVzsKKyAgICBjYXNlIENvbWJvQm94Um9sZToKKyAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX0NPTUJPX0JPWDsKKyAgICBjYXNlIFNwbGl0R3JvdXBSb2xlOgor
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfU1BMSVRfUEFORTsKKyAgICBjYXNlIFNwbGl0dGVyUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NFUEFSQVRPUjsKKyAgICBjYXNlIENvbG9yV2Vs
bFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9DT0xPUl9DSE9PU0VSOworICAgIGNhc2Ug
TGlzdFJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9MSVNUOwotICAgIGNhc2UgV2ViQ29y
ZTo6VGFibGVSb2xlOgorICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKKyAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1NDUk9MTF9CQVI7CisgICAgY2FzZSBHcmlkUm9sZTogLy8/CisgICAgY2FzZSBUYWJs
ZVJvbGU6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJMRTsKLSAgICBjYXNlIFdlYkNvcmU6
OkxpbmtSb2xlOgotICAgIGNhc2UgV2ViQ29yZTo6V2ViQ29yZUxpbmtSb2xlOgorICAgIGNhc2Ug
QXBwbGljYXRpb25Sb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVBQTElDQVRJT047Cisg
ICAgLy9jYXNlIExhYmVsUm9sZTogLy8gVE9ETzogYWRkIExhYmVsUm9sZT8KKyAgICAvLyAgICBy
ZXR1cm4gQVRLX1JPTEVfTEFCRUw7CisgICAgY2FzZSBHcm91cFJvbGU6CisgICAgY2FzZSBSYWRp
b0dyb3VwUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBTkVMOworICAgIGNhc2UgQ2Vs
bFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJMRV9DRUxMOworICAgIGNhc2UgTGlu
a1JvbGU6CisgICAgY2FzZSBXZWJDb3JlTGlua1JvbGU6CisgICAgY2FzZSBJbWFnZU1hcExpbmtS
b2xlOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElOSzsKLSAgICBjYXNlIFdlYkNvcmU6Oklt
YWdlTWFwUm9sZToKLSAgICBjYXNlIFdlYkNvcmU6OkltYWdlUm9sZToKKyAgICBjYXNlIEltYWdl
TWFwUm9sZToKKyAgICBjYXNlIEltYWdlUm9sZToKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0lN
QUdFOworICAgIGNhc2UgTGlzdE1hcmtlclJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9S
T1dfSEVBREVSOworICAgIGNhc2UgV2ViQXJlYVJvbGU6CisgICAgICAgIC8vcmV0dXJuIEFUS19S
T0xFX0hUTUxfQ09OVEFJTkVSOyAvLz8KKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0RPQ1VNRU5U
X0ZSQU1FOworICAgIGNhc2UgSGVhZGluZ1JvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9I
RUFESU5HOworICAgIGNhc2UgTGlzdEJveFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9M
SVNUOworICAgIGNhc2UgTGlzdEJveE9wdGlvblJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9M
RV9MSVNUX0lURU07CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05P
V047CiAgICAgfQotLSAKMS42LjIuMgoK
</data>
<flag name="review"
          id="14731"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29600</attachid>
            <date>2009-04-18 00:57:03 -0700</date>
            <delta_ts>2009-04-27 14:40:38 -0700</delta_ts>
            <desc>getters.patch</desc>
            <filename>getters.patch</filename>
            <type>text/plain</type>
            <size>2553</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBhYzBkNzAwODExYWVmMTgzMDU2M2MzMDQ4ZGViMTQ5ZDdhM2I0MWIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBT
YXQsIDE4IEFwciAyMDA5IDEwOjU0OjAxICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0x
OCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgRG8gbm90IGNhbGwgQVRLIHNldHRlcnMgaW4gdGhlIGdldHRlcnMsIGp1c3QgcmV0
dXJuIHRoZQogICAgICAgIHZhbHVlLiBBbW9uZyBvdGhlciB0aGluZ3MgY2FsbGluZyB0aGUgc2V0
dGVyIHdpbGwgZW1pdCB0aGUgbm90aWZ5CiAgICAgICAgc2lnbmFsLCB3aGljaCBpcyB3cm9uZy4K
CiAgICAgICAgKiBwYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6Ci0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDEzICsrKysrKysrKysrKysKIFdlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuY3BwIHwgICAxMSArKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNl
cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDIzOTI3Yy4uYTIzOTc1MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAwOS0wNC0xOCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQ2CisgICAgICAgIFtHVEtdIEFUSyBhY2Nlc3NpYmls
aXR5IGVuaGFuY2VtZW50cworCisgICAgICAgIERvIG5vdCBjYWxsIEFUSyBzZXR0ZXJzIGluIHRo
ZSBnZXR0ZXJzLCBqdXN0IHJldHVybiB0aGUKKyAgICAgICAgdmFsdWUuIEFtb25nIG90aGVyIHRo
aW5ncyBjYWxsaW5nIHRoZSBzZXR0ZXIgd2lsbCBlbWl0IHRoZSBub3RpZnkKKyAgICAgICAgc2ln
bmFsLCB3aGljaCBpcyB3cm9uZy4KKworICAgICAgICAqIHBhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcDoKKwogMjAwOS0wNC0xNiAgWGFuIExvcGV6ICA8eGxvcGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBi
L1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4
IGYxMjAyNWUuLjcyMTQ5YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xMjEsMjEgKzEyMSwxNCBAQCBleHRlcm4gIkMi
IHsKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShBdGtP
YmplY3QqIG9iamVjdCkKIHsKLSAgICAvLyBUT0RPOiBEZWFsIHdpdGggbGF0ZXIgY2hhbmdlcy4K
LSAgICBpZiAoIW9iamVjdC0+bmFtZSkKLSAgICAgICAgYXRrX29iamVjdF9zZXRfbmFtZShvYmpl
Y3QsIGNvcmUob2JqZWN0KS0+c3RyaW5nVmFsdWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1
cm4gb2JqZWN0LT5uYW1lOworICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZShvYmplY3QpLT5z
dHJpbmdWYWx1ZSgpKTsKIH0KIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfZGVzY3JpcHRpb24oQXRrT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gVE9ETzogdGhl
IE1vemlsbGEgTVNBQSBpbXBsZW1lbnRhdGlvbiBwcmVwZW5kcyAiRGVzY3JpcHRpb246ICIKICAg
ICAvLyBTaG91bGQgd2UgZG8gdGhpcyB0b28/Ci0KLSAgICAvLyBUT0RPOiBEZWFsIHdpdGggbGF0
ZXIgY2hhbmdlcy4KLSAgICBpZiAoIW9iamVjdC0+ZGVzY3JpcHRpb24pCi0gICAgICAgIGF0a19v
YmplY3Rfc2V0X2Rlc2NyaXB0aW9uKG9iamVjdCwgY29yZShvYmplY3QpLT5hY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gb2JqZWN0LT5kZXNjcmlw
dGlvbjsKKyAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUob2JqZWN0KS0+YWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKCkpOwogfQogCiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfcGFyZW50KEF0a09iamVjdCogb2JqZWN0KQotLSAKMS42LjIuMgoK
</data>
<flag name="review"
          id="14783"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29612</attachid>
            <date>2009-04-20 05:42:45 -0700</date>
            <delta_ts>2009-04-20 05:44:32 -0700</delta_ts>
            <desc>focus.patch</desc>
            <filename>focus.patch</filename>
            <type>text/plain</type>
            <size>6822</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBiYzE3ZWY2ZGZiYzM2YTI0M2VkYTRmYjljZWZiYjE1ZjdhNGE3NDkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBN
b24sIDIwIEFwciAyMDA5IDE1OjQwOjM3ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0y
MCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgSW1wbGVtZW50IEF0a09iamVjdDo6Zm9jdXMtZXZlbnQgYW5kCiAgICAgICAgQXRr
T2JqZWN0OjpzdGF0ZS1jaGFuZ2VkOmZvY3VzZWQgc2lnbmFsIGVtaXNzaW9uLgoKICAgICAgICBD
b3VsZG4ndCBmaWd1cmUgb3V0IGEgd2F5IHRvIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcKICAgICAg
ICBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCB0byBnZXQgYXMgcGFyYW1ldGVycyB0aGUg
b2xkIGFuZCBuZXcKICAgICAgICBmb2N1c2VkIG5vZGVzIChpZiB0aGV5IGV4aXN0KS4gVGhlIHBh
cmFtZXRlcnMgYXJlIHVudXNlZCBpbiBNYWMKICAgICAgICBhbmQgV2luZG93cy4KCiAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgogICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Rm9jdXNl
ZE5vZGUpOgogICAgICAgICogcGFnZS9BWE9iamVjdENhY2hlLmg6CiAgICAgICAgKiBwYWdlL2d0
ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQpOgogICAgICAgICogcGFnZS9tYWMvQVhPYmpl
Y3RDYWNoZU1hYy5tbToKICAgICAgICAqIHBhZ2Uvd2luL0FYT2JqZWN0Q2FjaGVXaW4uY3BwOgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrKysrKysr
KysrKysrKysrKysrKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAgIHwg
ICAxNSArKysrKysrKysrKystLS0KIFdlYkNvcmUvcGFnZS9BWE9iamVjdENhY2hlLmggICAgICAg
ICAgfCAgICA0ICsrLS0KIFdlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgfCAg
IDEyICsrKysrKysrKysrLQogV2ViQ29yZS9wYWdlL21hYy9BWE9iamVjdENhY2hlTWFjLm1tICB8
ICAgIDIgKy0KIFdlYkNvcmUvcGFnZS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAgfCAgICAyICst
CiA2IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YmI2
ZWE1Li4zMzhkOTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA5LTA0LTIwICBYYW4gTG9wZXogIDx4bG9w
ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDYKKyAg
ICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1lbnRzCisKKyAgICAgICAgSW1w
bGVtZW50IEF0a09iamVjdDo6Zm9jdXMtZXZlbnQgYW5kCisgICAgICAgIEF0a09iamVjdDo6c3Rh
dGUtY2hhbmdlZDpmb2N1c2VkIHNpZ25hbCBlbWlzc2lvbi4KKworICAgICAgICBDb3VsZG4ndCBm
aWd1cmUgb3V0IGEgd2F5IHRvIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAgICAgaGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQgdG8gZ2V0IGFzIHBhcmFtZXRlcnMgdGhlIG9sZCBhbmQg
bmV3CisgICAgICAgIGZvY3VzZWQgbm9kZXMgKGlmIHRoZXkgZXhpc3QpLiBUaGUgcGFyYW1ldGVy
cyBhcmUgdW51c2VkIGluIE1hYworICAgICAgICBhbmQgV2luZG93cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Rm9jdXNlZE5v
ZGUpOgorICAgICAgICAqIHBhZ2UvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAqIHBhZ2UvZ3Rr
L0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW06CisgICAgICAgICogcGFnZS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHA6
CisKIDIwMDktMDQtMTggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNkZmY2YTQuLmE0MTA0
YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTI1NzMsOSArMjU3MywxOCBAQCBib29sIERvY3VtZW50OjpzZXRG
b2N1c2VkTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlKQogICAgICAgICB9CiAg
ICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmb2N1c0NoYW5nZUJsb2NrZWQgJiYg
bV9mb2N1c2VkTm9kZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQot
ICAgICAgICBheE9iamVjdENhY2hlKCktPmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKCk7
CisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorICAgIGlmICghZm9jdXNDaGFuZ2VCbG9ja2VkICYm
IG1fZm9jdXNlZE5vZGUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIG9sZEZvY3VzZWROb2RlUmVuZGVyZXIgPSAwOworICAg
ICAgICBSZW5kZXJPYmplY3QqIG5ld0ZvY3VzZWROb2RlUmVuZGVyZXIgPSAwOworCisgICAgICAg
IGlmIChvbGRGb2N1c2VkTm9kZSkKKyAgICAgICAgICAgIG9sZEZvY3VzZWROb2RlUmVuZGVyZXIg
PSBvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKG5ld0ZvY3Vz
ZWROb2RlKQorICAgICAgICAgICAgbmV3Rm9jdXNlZE5vZGVSZW5kZXJlciA9IG5ld0ZvY3VzZWRO
b2RlLmdldCgpLT5yZW5kZXJlcigpOworCisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+aGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQob2xkRm9jdXNlZE5vZGVSZW5kZXJlciwgbmV3Rm9jdXNl
ZE5vZGVSZW5kZXJlcik7CisgICAgfQogI2VuZGlmCiAKIFNldEZvY3VzZWROb2RlRG9uZToKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BWE9iamVjdENhY2hlLmggYi9XZWJDb3JlL3BhZ2UvQVhP
YmplY3RDYWNoZS5oCmluZGV4IDRmZDZkYzMuLjJhYWIzNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9BWE9iamVjdENhY2hlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0FYT2JqZWN0Q2FjaGUuaApA
QCAtNzksNyArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2VsZWN0
ZWRDaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgaGFuZGxlQWN0
aXZlRGVzY2VuZGFudENoYW5nZWQoUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgaGFuZGxl
QXJpYVJvbGVDaGFuZ2VkKFJlbmRlck9iamVjdCopOwotICAgICAgICB2b2lkIGhhbmRsZUZvY3Vz
ZWRVSUVsZW1lbnRDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNlZFVJRWxlbWVu
dENoYW5nZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IHRydWU7
IH0KICAgICAgICAgc3RhdGljIHZvaWQgZW5hYmxlRW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNz
aWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0g
dHJ1ZTsgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgIUhBVkUoQUNDRVNTSUJJTElUWSkKICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KICAgICBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5nZWQoUmVuZGVyT2Jq
ZWN0KikgeyB9Ci0gICAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJ
RWxlbWVudENoYW5nZWQoKSB7IH0KKyAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5k
bGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqKSB7
IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqKSB7IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hX
cmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVj
dENhY2hlOjpzZWxlY3RlZENoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9XZWJDb3JlL3Bh
Z2UvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IDM1MzVjZjEuLjhkMmEwMmEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysrIGIvV2ViQ29y
ZS9wYWdlL2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtNDUsOCArNDUsMTggQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KFJlbmRlck9iamVjdCosIGNv
bnN0IFN0cmluZyYpCiB7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJ
RWxlbWVudENoYW5nZWQoKQordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVGb2N1c2VkVUlFbGVt
ZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqIG9sZEZvY3VzZWROb2RlLCBSZW5kZXJPYmplY3QqIG5l
d0ZvY3VzZWROb2RlKQogeworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvbGRPYmpl
Y3QgPSBnZXRPckNyZWF0ZShvbGRGb2N1c2VkTm9kZSk7CisgICAgaWYgKG9sZE9iamVjdCkgewor
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKG9sZE9iamVjdC0+d3JhcHBlcigpLCAiZm9j
dXMtZXZlbnQiLCBmYWxzZSk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAob2xkT2Jq
ZWN0LT53cmFwcGVyKCksICJzdGF0ZS1jaGFuZ2UiLCAiZm9jdXNlZCIsIGZhbHNlKTsKKyAgICB9
CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG5ld09iamVjdCA9IGdldE9yQ3JlYXRl
KG5ld0ZvY3VzZWROb2RlKTsKKyAgICBpZiAobmV3T2JqZWN0KSB7CisgICAgICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSAobmV3T2JqZWN0LT53cmFwcGVyKCksICJmb2N1cy1ldmVudCIsIHRydWUp
OworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKG5ld09iamVjdC0+d3JhcHBlcigpLCAi
c3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCB0cnVlKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvQVhPYmplY3RDYWNoZU1h
Yy5tbSBiL1dlYkNvcmUvcGFnZS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCA5MzZkOWRl
Li4xNzI1Njc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC04MSw3ICs4
MSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvblRvRWxlbWVudChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJpCiAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zdE5v
dGlmaWNhdGlvbihvYmotPndyYXBwZXIoKSwgbWVzc2FnZSk7CiB9CiAKLXZvaWQgQVhPYmplY3RD
YWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoKQordm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmpl
Y3QqKQogewogICAgIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGFjY2Vzc2li
aWxpdHlIYW5kbGVGb2N1c0NoYW5nZWRdOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL3dp
bi9BWE9iamVjdENhY2hlV2luLmNwcCBiL1dlYkNvcmUvcGFnZS93aW4vQVhPYmplY3RDYWNoZVdp
bi5jcHAKaW5kZXggZGEzMGFjNS4uMmJmZDEyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3dp
bi9BWE9iamVjdENhY2hlV2luLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uvd2luL0FYT2JqZWN0Q2Fj
aGVXaW4uY3BwCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlm
aWNhdGlvblRvRWxlbWVudChSZW5kZXJPYmplY3QqLCBjb25zdCBTdHJpbmcmKQogewogfQogCi12
b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKCkKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyT2JqZWN0KikKIHsKIH0KIAotLSAKMS42LjIuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29613</attachid>
            <date>2009-04-20 05:44:32 -0700</date>
            <delta_ts>2009-05-20 08:41:40 -0700</delta_ts>
            <desc>focus.patch</desc>
            <filename>focus.patch</filename>
            <type>text/plain</type>
            <size>6818</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA5ZjhjYWFjMzA1MzVmN2FjYTE2ZTExOWIzYmE2MWZmMzgxNzZmNjU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBN
b24sIDIwIEFwciAyMDA5IDE1OjQwOjM3ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNC0y
MCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1NDYKICAgICAgICBbR1RLXSBBVEsgYWNjZXNzaWJpbGl0eSBlbmhhbmNlbWVudHMK
CiAgICAgICAgSW1wbGVtZW50IEF0a09iamVjdDo6Zm9jdXMtZXZlbnQgYW5kCiAgICAgICAgQXRr
T2JqZWN0OjpzdGF0ZS1jaGFuZ2VkOmZvY3VzZWQgc2lnbmFsIGVtaXNzaW9uLgoKICAgICAgICBD
b3VsZG4ndCBmaWd1cmUgb3V0IGEgd2F5IHRvIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcKICAgICAg
ICBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCB0byBnZXQgYXMgcGFyYW1ldGVycyB0aGUg
b2xkIGFuZCBuZXcKICAgICAgICBmb2N1c2VkIG5vZGVzIChpZiB0aGV5IGV4aXN0KS4gVGhlIHBh
cmFtZXRlcnMgYXJlIHVudXNlZCBpbiBNYWMKICAgICAgICBhbmQgV2luZG93cy4KCiAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgogICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Rm9jdXNl
ZE5vZGUpOgogICAgICAgICogcGFnZS9BWE9iamVjdENhY2hlLmg6CiAgICAgICAgKiBwYWdlL2d0
ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQpOgogICAgICAgICogcGFnZS9tYWMvQVhPYmpl
Y3RDYWNoZU1hYy5tbToKICAgICAgICAqIHBhZ2Uvd2luL0FYT2JqZWN0Q2FjaGVXaW4uY3BwOgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrKysrKysr
KysrKysrKysrKysrKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAgIHwg
ICAxNSArKysrKysrKysrKystLS0KIFdlYkNvcmUvcGFnZS9BWE9iamVjdENhY2hlLmggICAgICAg
ICAgfCAgICA0ICsrLS0KIFdlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgfCAg
IDEyICsrKysrKysrKysrLQogV2ViQ29yZS9wYWdlL21hYy9BWE9iamVjdENhY2hlTWFjLm1tICB8
ICAgIDIgKy0KIFdlYkNvcmUvcGFnZS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAgfCAgICAyICst
CiA2IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YmI2
ZWE1Li4zMzhkOTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA5LTA0LTIwICBYYW4gTG9wZXogIDx4bG9w
ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDYKKyAg
ICAgICAgW0dUS10gQVRLIGFjY2Vzc2liaWxpdHkgZW5oYW5jZW1lbnRzCisKKyAgICAgICAgSW1w
bGVtZW50IEF0a09iamVjdDo6Zm9jdXMtZXZlbnQgYW5kCisgICAgICAgIEF0a09iamVjdDo6c3Rh
dGUtY2hhbmdlZDpmb2N1c2VkIHNpZ25hbCBlbWlzc2lvbi4KKworICAgICAgICBDb3VsZG4ndCBm
aWd1cmUgb3V0IGEgd2F5IHRvIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAgICAgaGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQgdG8gZ2V0IGFzIHBhcmFtZXRlcnMgdGhlIG9sZCBhbmQg
bmV3CisgICAgICAgIGZvY3VzZWQgbm9kZXMgKGlmIHRoZXkgZXhpc3QpLiBUaGUgcGFyYW1ldGVy
cyBhcmUgdW51c2VkIGluIE1hYworICAgICAgICBhbmQgV2luZG93cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Rm9jdXNlZE5v
ZGUpOgorICAgICAgICAqIHBhZ2UvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAqIHBhZ2UvZ3Rr
L0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW06CisgICAgICAgICogcGFnZS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHA6
CisKIDIwMDktMDQtMTggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNkZmY2YTQuLmE0MTA0
YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTI1NzMsOSArMjU3MywxOCBAQCBib29sIERvY3VtZW50OjpzZXRG
b2N1c2VkTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld0ZvY3VzZWROb2RlKQogICAgICAgICB9CiAg
ICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmb2N1c0NoYW5nZUJsb2NrZWQgJiYg
bV9mb2N1c2VkTm9kZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQot
ICAgICAgICBheE9iamVjdENhY2hlKCktPmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKCk7
CisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorICAgIGlmICghZm9jdXNDaGFuZ2VCbG9ja2VkICYm
IG1fZm9jdXNlZE5vZGUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIG9sZEZvY3VzZWROb2RlUmVuZGVyZXIgPSAwOworICAg
ICAgICBSZW5kZXJPYmplY3QqIG5ld0ZvY3VzZWROb2RlUmVuZGVyZXIgPSAwOworCisgICAgICAg
IGlmIChvbGRGb2N1c2VkTm9kZSkKKyAgICAgICAgICAgIG9sZEZvY3VzZWROb2RlUmVuZGVyZXIg
PSBvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKG5ld0ZvY3Vz
ZWROb2RlKQorICAgICAgICAgICAgbmV3Rm9jdXNlZE5vZGVSZW5kZXJlciA9IG5ld0ZvY3VzZWRO
b2RlLmdldCgpLT5yZW5kZXJlcigpOworCisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+aGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQob2xkRm9jdXNlZE5vZGVSZW5kZXJlciwgbmV3Rm9jdXNl
ZE5vZGVSZW5kZXJlcik7CisgICAgfQogI2VuZGlmCiAKIFNldEZvY3VzZWROb2RlRG9uZToKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BWE9iamVjdENhY2hlLmggYi9XZWJDb3JlL3BhZ2UvQVhP
YmplY3RDYWNoZS5oCmluZGV4IDRmZDZkYzMuLjJhYWIzNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9BWE9iamVjdENhY2hlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0FYT2JqZWN0Q2FjaGUuaApA
QCAtNzksNyArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2VsZWN0
ZWRDaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgaGFuZGxlQWN0
aXZlRGVzY2VuZGFudENoYW5nZWQoUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgaGFuZGxl
QXJpYVJvbGVDaGFuZ2VkKFJlbmRlck9iamVjdCopOwotICAgICAgICB2b2lkIGhhbmRsZUZvY3Vz
ZWRVSUVsZW1lbnRDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNlZFVJRWxlbWVu
dENoYW5nZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKSB7IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IHRydWU7
IH0KICAgICAgICAgc3RhdGljIHZvaWQgZW5hYmxlRW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNz
aWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0g
dHJ1ZTsgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgIUhBVkUoQUNDRVNTSUJJTElUWSkKICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KICAgICBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5nZWQoUmVuZGVyT2Jq
ZWN0KikgeyB9Ci0gICAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJ
RWxlbWVudENoYW5nZWQoKSB7IH0KKyAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5k
bGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqKSB7
IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqKSB7IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hX
cmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVj
dENhY2hlOjpzZWxlY3RlZENoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9XZWJDb3JlL3Bh
Z2UvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IDM1MzVjZjEuLjczOTcwYjUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysrIGIvV2ViQ29y
ZS9wYWdlL2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtNDUsOCArNDUsMTggQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KFJlbmRlck9iamVjdCosIGNv
bnN0IFN0cmluZyYpCiB7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJ
RWxlbWVudENoYW5nZWQoKQordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVGb2N1c2VkVUlFbGVt
ZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqIG9sZEZvY3VzZWROb2RlLCBSZW5kZXJPYmplY3QqIG5l
d0ZvY3VzZWROb2RlKQogeworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvbGRPYmpl
Y3QgPSBnZXRPckNyZWF0ZShvbGRGb2N1c2VkTm9kZSk7CisgICAgaWYgKG9sZE9iamVjdCkgewor
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUob2xkT2JqZWN0LT53cmFwcGVyKCksICJmb2N1
cy1ldmVudCIsIGZhbHNlKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9sZE9iamVj
dC0+d3JhcHBlcigpLCAic3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCBmYWxzZSk7CisgICAgfQor
ICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmplY3QgPSBnZXRPckNyZWF0ZShu
ZXdGb2N1c2VkTm9kZSk7CisgICAgaWYgKG5ld09iamVjdCkgeworICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobmV3T2JqZWN0LT53cmFwcGVyKCksICJmb2N1cy1ldmVudCIsIHRydWUpOwor
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobmV3T2JqZWN0LT53cmFwcGVyKCksICJzdGF0
ZS1jaGFuZ2UiLCAiZm9jdXNlZCIsIHRydWUpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9BWE9iamVjdENhY2hlTWFjLm1t
IGIvV2ViQ29yZS9wYWdlL21hYy9BWE9iamVjdENhY2hlTWFjLm1tCmluZGV4IDkzNmQ5ZGUuLjE3
MjU2NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQor
KysgYi9XZWJDb3JlL3BhZ2UvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KQEAgLTgxLDcgKzgxLDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uVG9FbGVtZW50KFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IFN0cmkKICAgICBOU0FjY2Vzc2liaWxpdHlQb3N0Tm90aWZp
Y2F0aW9uKG9iai0+d3JhcHBlcigpLCBtZXNzYWdlKTsKIH0KIAotdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCgpCit2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCop
CiB7CiAgICAgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gYWNjZXNzaWJpbGl0
eUhhbmRsZUZvY3VzQ2hhbmdlZF07CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uvd2luL0FY
T2JqZWN0Q2FjaGVXaW4uY3BwIGIvV2ViQ29yZS9wYWdlL3dpbi9BWE9iamVjdENhY2hlV2luLmNw
cAppbmRleCBkYTMwYWM1Li4yYmZkMTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uvd2luL0FY
T2JqZWN0Q2FjaGVXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS93aW4vQVhPYmplY3RDYWNoZVdp
bi5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0
aW9uVG9FbGVtZW50KFJlbmRlck9iamVjdCosIGNvbnN0IFN0cmluZyYpCiB7CiB9CiAKLXZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoKQordm9pZCBBWE9i
amVjdENhY2hlOjpoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZChSZW5kZXJPYmplY3QqLCBS
ZW5kZXJPYmplY3QqKQogewogfQogCi0tIAoxLjYuMi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30510</attachid>
            <date>2009-05-20 08:41:40 -0700</date>
            <delta_ts>2009-05-20 08:55:30 -0700</delta_ts>
            <desc>focussignals.patch</desc>
            <filename>focussignals.patch</filename>
            <type>text/plain</type>
            <size>5550</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAwZjcyMTRjYWJlNDZlMzBhYzVjODA5ZjI0ODFiMWEzYmVkMDg3MjA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBX
ZWQsIDIwIE1heSAyMDA5IDE4OjM5OjIzICswMzAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wNS0y
MCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBJbXBsZW1lbnQgQXRrT2JqZWN0Ojpmb2N1cy1ldmVudCBh
bmQKICAgICAgICBBdGtPYmplY3Q6OnN0YXRlLWNoYW5nZWQ6Zm9jdXNlZCBzaWduYWwgZW1pc3Np
b24uCgogICAgICAgIEFkZHMgYSBuZXcgaGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWRXaXRo
UmVuZGVyZXJzLCBvbmx5IGluIHRoZQogICAgICAgIEdUSyBwb3J0LCBjYWxsZWQgYXQgdGhlIHNh
bWUgcG9pbnQgdGhhbgogICAgICAgIGhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkIGJ1dCB3
aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgb2xkIGFuZAogICAgICAgIHRoZSBuZXdseSBmb2N1c2Vk
IFJlbmRlck9iamVjdHMuIFdlIG5lZWQgdGhpcywgc2luY2UgdGhlIEFUSwogICAgICAgIHNpZ25h
bHMgcmVxdWlyZSB1cyB0byBwYXNzIHRoZSBvYmplY3RzIGludm9sdmVkIGluIHRoZSBmb2N1cwog
ICAgICAgIGNoYW5nZSBhcyBhcmd1bWVudHMuCgogICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRr
LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxl
bWVudENoYW5nZWRXaXRoUmVuZGVyZXJzKToKICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGb2N1c2VkTm9kZSk6Ci0tLQogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggICAgICAgICAg
fCAgICA2ICsrKysrKwogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRr
LmNwcCB8ICAgMTQgKysrKysrKysrKysrKysKIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEyICsrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1
MiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwYWQ4Yi4uZjZiYjAxMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSwyNSBAQAogMjAwOS0wNS0yMCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEF0
a09iamVjdDo6Zm9jdXMtZXZlbnQgYW5kCisgICAgICAgIEF0a09iamVjdDo6c3RhdGUtY2hhbmdl
ZDpmb2N1c2VkIHNpZ25hbCBlbWlzc2lvbi4KKworICAgICAgICBBZGRzIGEgbmV3IGhhbmRsZUZv
Y3VzZWRVSUVsZW1lbnRDaGFuZ2VkV2l0aFJlbmRlcmVycywgb25seSBpbiB0aGUKKyAgICAgICAg
R1RLIHBvcnQsIGNhbGxlZCBhdCB0aGUgc2FtZSBwb2ludCB0aGFuCisgICAgICAgIGhhbmRsZUZv
Y3VzZWRVSUVsZW1lbnRDaGFuZ2VkIGJ1dCB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgb2xkIGFu
ZAorICAgICAgICB0aGUgbmV3bHkgZm9jdXNlZCBSZW5kZXJPYmplY3RzLiBXZSBuZWVkIHRoaXMs
IHNpbmNlIHRoZSBBVEsKKyAgICAgICAgc2lnbmFscyByZXF1aXJlIHVzIHRvIHBhc3MgdGhlIG9i
amVjdHMgaW52b2x2ZWQgaW4gdGhlIGZvY3VzCisgICAgICAgIGNoYW5nZSBhcyBhcmd1bWVudHMu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkV2l0aFJlbmRlcmVy
cyk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRGb2N1c2VkTm9kZSk6CisKKzIwMDktMDUtMjAgIFhhbiBMb3BleiAgPHhsb3BlekBp
Z2FsaWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEphbiBBbG9uem8uCiAKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1NDE0CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCAxNjZlNTU4Li40Mjc3M2M0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTgwLDYgKzgwLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKFJlbmRl
ck9iamVjdCopOwogICAgICAgICB2b2lkIGhhbmRsZUFyaWFSb2xlQ2hhbmdlZChSZW5kZXJPYmpl
Y3QqKTsKICAgICAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCgpOworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAgICAgdm9pZCBoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdl
ZFdpdGhSZW5kZXJlcnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0Kik7CisjZW5kaWYKICAg
ICAgICAgc3RhdGljIHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlF
bmFibGVkID0gdHJ1ZTsgfQogICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVFbmhhbmNlZFVzZXJJ
bnRlcmZhY2VBY2Nlc3NpYmlsaXR5KCkgeyBnQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVy
ZmFjZUVuYWJsZWQgPSB0cnVlOyB9CiAgICAgICAgIApAQCAtMTEwLDYgKzExMyw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpzZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KICAgICBpbmxpbmUgdm9pZCBBWE9iamVj
dENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFN0cmluZyYpIHsg
fQogICAgIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb25Ub0VsZW1l
bnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJikgeyB9CisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIGlubGluZSB2b2lkIGhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkV2l0aFJlbmRlcmVy
cyhSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqKSB7IH0KKyNlbmRpZgogI2VuZGlmCiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4
IDM1MzVjZjEuLjllMWU0YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QVhPYmplY3RDYWNoZUF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9i
amVjdENhY2hlQXRrLmNwcApAQCAtNDksNCArNDksMTggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpo
YW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCgpCiB7CiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWRXaXRoUmVuZGVyZXJzKFJlbmRlck9iamVj
dCogb2xkRm9jdXNlZFJlbmRlciwgUmVuZGVyT2JqZWN0KiBuZXdGb2N1c2VkUmVuZGVyKQorewor
ICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvbGRPYmplY3QgPSBnZXRPckNyZWF0ZShv
bGRGb2N1c2VkUmVuZGVyKTsKKyAgICBpZiAob2xkT2JqZWN0KSB7CisgICAgICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShvbGRPYmplY3QtPndyYXBwZXIoKSwgImZvY3VzLWV2ZW50IiwgZmFsc2Up
OworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUob2xkT2JqZWN0LT53cmFwcGVyKCksICJz
dGF0ZS1jaGFuZ2UiLCAiZm9jdXNlZCIsIGZhbHNlKTsKKyAgICB9CisgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IG5ld09iamVjdCA9IGdldE9yQ3JlYXRlKG5ld0ZvY3VzZWRSZW5kZXIp
OworICAgIGlmIChuZXdPYmplY3QpIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG5l
d09iamVjdC0+d3JhcHBlcigpLCAiZm9jdXMtZXZlbnQiLCB0cnVlKTsKKyAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG5ld09iamVjdC0+d3JhcHBlcigpLCAic3RhdGUtY2hhbmdlIiwgImZv
Y3VzZWQiLCB0cnVlKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCA3OGIyZThiLi4zNjJkZDE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yNTk0LDYgKzI1OTQsMTgg
QEAgYm9vbCBEb2N1bWVudDo6c2V0Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBuZXdGb2N1
c2VkTm9kZSkKICNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShDSFJPTUlVTSkKICAgICBp
ZiAoIWZvY3VzQ2hhbmdlQmxvY2tlZCAmJiBtX2ZvY3VzZWROb2RlICYmIEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+aGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAo
IWZvY3VzQ2hhbmdlQmxvY2tlZCAmJiBtX2ZvY3VzZWROb2RlICYmIEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvbGRGb2N1c2Vk
UmVuZGVyZXIgPSAwOworICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0ZvY3VzZWRSZW5kZXJlciA9
IDA7CisKKyAgICAgICAgaWYgKG9sZEZvY3VzZWROb2RlKQorICAgICAgICAgICAgb2xkRm9jdXNl
ZFJlbmRlcmVyID0gb2xkRm9jdXNlZE5vZGUuZ2V0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIGlm
IChuZXdGb2N1c2VkTm9kZSkKKyAgICAgICAgICAgIG5ld0ZvY3VzZWRSZW5kZXJlciA9IG5ld0Zv
Y3VzZWROb2RlLmdldCgpLT5yZW5kZXJlcigpOworCisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWRXaXRoUmVuZGVyZXJzKG9sZEZvY3VzZWRSZW5k
ZXJlciwgbmV3Rm9jdXNlZFJlbmRlcmVyKTsKKyAgICB9CiAjZW5kaWYKIAogU2V0Rm9jdXNlZE5v
ZGVEb25lOgotLSAKMS42LjIuMgoK
</data>
<flag name="review"
          id="15410"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>