<?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>16814</bug_id>
          
          <creation_ts>2008-01-10 00:51:19 -0800</creation_ts>
          <short_desc>Give plugin a chance to handle ActiveX objects</short_desc>
          <delta_ts>2008-12-08 16:36:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://adv.jxnews.com.cn/2007/wqlyj/video.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rui Jiang">rjiang</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>gwilson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66728</commentid>
    <comment_count>0</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-01-10 00:51:19 -0800</bug_when>
    <thetext>The current WebKit converts OBJECT tag with well-known classids (e.g., Windows Media Player) to corresponding plugin-ins. e.g.: 

&lt;object classid=&quot;clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6&quot; width=&quot;280&quot;
height=&quot;280&quot; id=&quot;WMP&quot;&gt;
      &lt;param name=&quot;Name&quot; value=&quot;WMP1&quot; /&gt;
      &lt;param name=&quot;autoStart&quot; value=&quot;1&quot; /&gt;
      &lt;param name=&quot;defaultFrame&quot; value=&quot;false&quot; /&gt;
      &lt;param name=&quot;URL&quot;
value=&quot;http://adv.jxnews.com.cn/2007/wqlyj/videos/video.wmv&quot; /&gt;
      &lt;param name=&quot;stretchToFit&quot; value=&quot;1&quot; /&gt;
    &lt;/object&gt;

in RenderPartObject.cpp, it will map the class id to service type: application/x-mplayer2 then try to load the media player plugin to handle it.

However, this may not be always the way users wanted. There has been some ActiveX plugin which could handle the ActiveX object better. If we just map the type to application/x-oleobject and let the Activex plugin handle it, we may have better rendering. e.g., the URL given works well in FireFox with the npActiveX.dll plugin downloaded from http://forums.mozine.cn/index.php?showtopic=2350. While it doesn&apos;t work in Safari.

If we could add some #ifdef to turn on/off whether we want to do th mapping, that would be great.

Another smaller problem I see is, it maps unknown ActiveX class id to type : application/x-activex-handler. While usually it&apos;s application/x-oleobject in most other places I see. Shall we make it more like others?

I have made some tentative changes and will upload the patch later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66795</commentid>
    <comment_count>1</comment_count>
      <attachid>18374</attachid>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-01-10 13:46:20 -0800</bug_when>
    <thetext>Created attachment 18374
Patch for the proposed change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66956</commentid>
    <comment_count>2</comment_count>
      <attachid>18374</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-01-11 13:04:39 -0800</bug_when>
    <thetext>Comment on attachment 18374
Patch for the proposed change

I like the general idea of this patch. However, it would be better if you could check that a plug-in exists that can handle &quot;application/x-oleobject&quot; before setting the service type. 

There is a PlugInInfoStore method called supportsMIMEType that can be used for this. I don&apos;t think it has been implemented on Windows though, so you would have to do that (just have it call PluginDatabaseWin::isMIMETypeRegistered).

Come to think of it, we might want to always check that there is a plug-in available that supports a MIME type before mapping a classid to that MIME type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67247</commentid>
    <comment_count>3</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-01-14 12:00:25 -0800</bug_when>
    <thetext>Thanks for the comment. That makes very good sense. How about change the logic to:

If application/x-oleobject handler is not available:
  Try to convert to other types as possible.
Else
  Depends on ActiveX type, have the option to do conversion or not.

This will give maximum freedom as to control which ActiveX type shall we convert. While based on available plugins, we will try to render the content as much as possible.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87553</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-01 01:10:29 -0700</bug_when>
    <thetext>Curious what ever happened to this patch?  Looks like Rui might have been waiting for Anders&apos; &quot;ack&quot; of his comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88003</commentid>
    <comment_count>5</comment_count>
      <attachid>22688</attachid>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-08-06 16:48:05 -0700</bug_when>
    <thetext>Created attachment 22688
Patch that allow custom build WebKit to handle ActiveX objects differently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88004</commentid>
    <comment_count>6</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-08-06 16:57:51 -0700</bug_when>
    <thetext>I submitted a new patch, which also fixes:

--The original mapClassIdToServiceType function is case sensitive. However CLSID s are supposed to be case-insensitive. Fixed.
--If there is an embed tag inside an object, it will always use properties of the embed tag. This is not desired when we have an ActiveX handler, that it should only use the properties of object tag and param tags.
--Another fix is to change the service type from application/x-activex-handler to application/x-oleobject because the latter is used much more often in the world, while the former is never seen (by me).

Could any review the new patch and comment? Thanks.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88022</commentid>
    <comment_count>7</comment_count>
      <attachid>22688</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 22:40:48 -0700</bug_when>
    <thetext>Comment on attachment 22688
Patch that allow custom build WebKit to handle ActiveX objects differently

I assume Rui meant to mark this for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89404</commentid>
    <comment_count>8</comment_count>
    <who name="Glenn Wilson">gwilson</who>
    <bug_when>2008-08-26 11:44:02 -0700</bug_when>
    <thetext>Is this patch ready to go?  I was going to add a test reduction/layout test for this, but I wasn&apos;t sure how to do that with the #ifndefs.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89569</commentid>
    <comment_count>9</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-08-27 17:24:29 -0700</bug_when>
    <thetext>
Thanks for looking at this issue. The patch ready to go. If you don&apos;t make any #defs, it should behave pretty much the same as before, except:

--CLSIDs are now case-insensitive
--Unmapped ActiveX Object will have service type &quot;application/x-oleobject&quot;.

If you define DISABLE_ACTIVEX_TYPE_CONVERSION_MPLAYER2, for Windows Media player object it will not try to map it to &quot;application/x-mplayer2&quot; plugin. Thus if you have a plugin that can handle ActiveX Object, that plugin will be created and initialize wmp control instead.

e.g.: 

&lt;object classid=&quot;clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95&quot; id=&quot;mmsplayer&quot; width=&quot;310&quot; height=&quot;65&quot;&gt; 
  &lt;PARAM NAME=&quot;FileName&quot; VALUE=&quot;abc.mp3&quot;&gt; 
  &lt;PARAM NAME=&quot;autoStart&quot; VALUE=&quot;-1&quot;&gt;
&lt;/object&gt;

With the definition of DISABLE_ACTIVEX_TYPE_CONVERSION_MPLAYER2, this object won&apos;t be rendered by plugin type &quot;application/x-mplayer2&quot;. Instead, it will be rendered by plugin type &quot;application/x-oleobject&quot;. 

(In reply to comment #8)
&gt; Is this patch ready to go?  I was going to add a test reduction/layout test for
&gt; this, but I wasn&apos;t sure how to do that with the #ifndefs.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89580</commentid>
    <comment_count>10</comment_count>
      <attachid>22688</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 18:07:47 -0700</bug_when>
    <thetext>Comment on attachment 22688
Patch that allow custom build WebKit to handle ActiveX objects differently

Another way to do this would be to  have this code ask the platform via PluginInfoStore.h or a similar abstraction.  That would allow platforms which do or don&apos;t have these plugins to override these mappings at runtime, which is probably more useful (As then you can test for the presence of the plugin) instead of using a compile-time check.

Also, &quot;ShouldUseEmbedForObject&quot; is not following WebKit-style naming conventions.  WebKit style asks that we use camelCase such as: &quot;shouldUseEmbedForObject()&quot;

Also, we generally try to use early-returns instead of long ifs, which would mean this function would become:

if (!attributes)
    return true;
for (... ) {
   ...

Again, I think that this is probably better suited as a platform-specific question, which means we should add a function to PluginInfoStore.h which answers this question on a per-platform basis.

Looking forward to Anders&apos; thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89582</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 18:15:21 -0700</bug_when>
    <thetext>I think this would really be as simple as just moving mapClassIdToServiceType from being a static-inline in that file to being in PluginInfoStore.h (Again Anders can provide greater clarity as to where this function should actually end up).

The name could be something like:

bool findFallbackServiceTypeForClassId(classId, serviceType);

returning true would indicate that a service type was found for that class ID on that platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89602</commentid>
    <comment_count>12</comment_count>
      <attachid>22688</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-08-27 21:33:04 -0700</bug_when>
    <thetext>Comment on attachment 22688
Patch that allow custom build WebKit to handle ActiveX objects differently

&gt;-    if (classId.contains(&quot;D27CDB6E-AE6D-11cf-96B8-444553540000&quot;))
&gt;+#ifndef DISABLE_ACTIVEX_TYPE_CONVERSION_FLASH

In WebCore we tend to not use #ifndef DISABLE_... Instead, we use the 

feature macros from 

http://trac.webkit.org/browser/trunk/JavaScriptCore/wtf/Platform.h#L29

I also think that this chain of ifs could perhaps be refactored into a static HashMap?  

&gt;+// To decide whether we should use the embed tag inside the object tag or not.
&gt;+static bool ShouldUseEmbedForObject(HTMLObjectElement* o)
&gt;+{

Like Eric said, this is not how we name methods. How about something like

shouldUseNestedEmbedIfExists (not sure exactly)


&gt;       // If we still don&apos;t have a type, try to map from a specific CLASSID to a type.
&gt;-      if (serviceType.isEmpty() &amp;&amp; !o-&gt;classId().isEmpty())
&gt;+      // However, if we have the embed tag we shouldn&apos;t do so because the outer object
&gt;+      // may be converted to application/x-oleobject, while we are not getting the paramaters

Typo here, should be &quot;parameters&quot;.

Overall, I think the patch is definitely a step in the right direction, and I don&apos;t think we need to move it to another file just yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89676</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-28 14:07:17 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 22688 [edit])
So I agree that this should move to a HashMap.  Your suggestion was that each of these additions to the hashmap could be controlled by these ifdefs.

So it would look something like this: (pseudocode)

static inline void mapClassIdToServiceType(const String&amp; classId, String&amp; serviceType)
{

   static HashMap&lt;String, String, CaseFoldingHash&gt;* serviceTypeFallbackForClassId = 0;
   if (! serviceTypeFallbackForClassId) {
       serviceTypeFallbackForClassId = new HashMap&lt;String, String, CaseFoldingHash&gt;;
#if ENABLE(PLATFORM_HANDLES_FLASH_CLASS_ID)
       serviceTypeFallbackForClassId-&gt;add(&quot;D27CDB6E-AE6D-11cf-96B8-444553540000&quot;, &quot;application/x-shockwave-flash&quot;);
#endif
...
    }
    serviceType = serviceTypeFallbackForClassId-&gt;get(classId);
}

One problem with that approach is that the current version uses &quot;contains&quot; and this would use &quot;equals&quot; for comparing the class-ids.  I&apos;m not sure if we care?

I&apos;m also not sure why we&apos;d want to add 4 #ifdefs instead of just moving this out into a separate file where platforms could decide these mappings at runtime.  But I&apos;m comfortable w/ either solution, really, just looking for something long-term.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97607</commentid>
    <comment_count>14</comment_count>
      <attachid>24892</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-04 12:34:58 -0800</bug_when>
    <thetext>Created attachment 24892
patch v3

Attempting to resurrect this patch since Rui is busy.

Preliminary warning: I don&apos;t know anything about OBJECT or EMBED tags, or this code, so I&apos;m liable to do stupid things.

This makes the following changes over the previous patch:
* Uses a HashMap instead of a series of conditionals.
* Checks isMIMETypeSupported() before adding a mapping from ActiveX-&gt;NPAPI.
* Simplifies and expands logic on when not to proceed into nested EMBEDs.  I think the previous logic was too specific.  I explained my rationale in a comment.
* Removes the addition of the &quot;!embed&quot; check to the call to mapClassIdToServiceType().  I am not sure this is correct.  My logic is, the only cases where this makes a difference are OBJECT tags with classIds that don&apos;t map to a well-known plugin, that have nested EMBEDs.  This seems rare and when it does happen I feel like we ought to be able to get the service type from the object.  However, Rui told me privately that he&apos;s seen cases in the wild of code that has an outer OBJECT with a RealAudio classId, containing a nested EMBED with a .wma.  If the RealAudio plugin doesn&apos;t handle .wma, then Rui&apos;s patch would probably work better than mine.  But I wonder if there&apos;s anything consistent that makes sense when authors do this kind of thing.

This patch has not been tested (at all).  I&apos;m not precisely sure how to write a layout test for it, but I haven&apos;t even smoketested things.  Sample URLs of pages in the wild affected by this code would probably be useful?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97608</commentid>
    <comment_count>15</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-04 12:37:10 -0800</bug_when>
    <thetext>Forgot one change.  I switched the raw #ifdefs to using ENABLE macros.

Like Eric I&apos;m rather uncomfortable with adding four more ENABLE_xxx macros for this stuff.  Is there some other way this could be done?  Perhaps add another param to isMIMETypeSupported, or a parallel function call, that lets the port specify whether it wants specific MIME types converted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97639</commentid>
    <comment_count>16</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-11-04 17:38:35 -0800</bug_when>
    <thetext>The only concern with the hashmap in mapClassIdToServiceType is, when user dynamically refreshes the plugin store, we won&apos;t be able to refresh the hashmap here. Plain comparison seems OK to me since we have only a small set of ids to worry about.

shouldUseChildEmbedOfObject seems to be a better approach than my previous patch.

I agree create a platform specific function shouldUseNestedEmbedIfExists would be better than ifdefs...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97643</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-04 21:22:00 -0800</bug_when>
    <thetext>We don&apos;t need a platform-specific function for deciding if we should use a nested embed so much as for deciding if we should do the classId type conversion (the ENABLE_xxx macros).

I&apos;m not sure I understand the issue with &quot;dynamically refreshing the plugin store&quot;.  You&apos;re concerned that this code will be called before all the plugins are loaded and then again after?  (I didn&apos;t think Chromium or Safari supported on-the-fly plugin additions.)

One way to address this without losing the hashmap, if it&apos;s a concern, would be to pull the isSupportedMIMEType() calls out from inside the hash population, and instead place them after the call to retrieve things from the map -- so we first get the MIME type regardless, but then check whether we actually support it.  This would probably be better anyway in the sense of making the code shorter and having fewer copies of hardcoded MIME type strings.  I&apos;ll try and do that in the next version of the patch (not happening this week, I&apos;m on vacation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97644</commentid>
    <comment_count>18</comment_count>
    <who name="Rui Jiang">rjiang</who>
    <bug_when>2008-11-04 21:36:39 -0800</bug_when>
    <thetext>In Chrome we do refresh Plugin Store. The default plugin (which is responsible for plugin installation) will do this after a successful installation of a new plugin. The change you proposed seems good for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98569</commentid>
    <comment_count>19</comment_count>
      <attachid>25111</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-12 18:02:34 -0800</bug_when>
    <thetext>Created attachment 25111
patch v4

Check supported MIME types after pulling things out of the map instead of before.  This is shorter and supports the plugin-DB-refreshed-on-the-fly case.

Remove the ENABLEs for everything but wmplayer.  Chromium only needs that one and no one else needs any of these so why add more than we need to?  It just clutters the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98571</commentid>
    <comment_count>20</comment_count>
      <attachid>25112</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-12 18:05:40 -0800</bug_when>
    <thetext>Created attachment 25112
patch v5

I am an idiot and managed to leave in the &quot;!embed&quot; check in both previous patches despite claiming to have removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99394</commentid>
    <comment_count>21</comment_count>
      <attachid>25292</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-19 17:14:46 -0800</bug_when>
    <thetext>Created attachment 25292
patch v6

Finally had a chance to do some local testing.  Need to add &quot;clsid:&quot; on all the classids now that we&apos;re using string comparison instead of substring search.  Verified in MSDN and by testing IE that this will work (we won&apos;t miss cases that IE would accept).

Local testing of a variant of this patch in Chromium seems to do what we want there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100416</commentid>
    <comment_count>22</comment_count>
      <attachid>25522</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-26 11:04:14 -0800</bug_when>
    <thetext>Created attachment 25522
updated patch v6

Updated patch to latest trunk (no changes, just trying to get it out of my local tree to work on something else).

Opening review to all because andersca seems to have died.  Or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100417</commentid>
    <comment_count>23</comment_count>
      <attachid>25522</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-11-26 11:21:18 -0800</bug_when>
    <thetext>Comment on attachment 25522
updated patch v6

Sorry for not looking at this earlier!

Looks great! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100448</commentid>
    <comment_count>24</comment_count>
      <attachid>25537</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-26 14:27:45 -0800</bug_when>
    <thetext>Created attachment 25537
patch v7

Gah.  The plugin interface has changed, which I found out when this got test-compiled before checkin.  Now, at least on Mac, we need to go through PluginData (which is scoped to a page) instead of the global PluginInfoStore.

The key thing I want to know here is whether, by the time we reach this code, the Frame&apos;s Page or the Page&apos;s PluginData can be NULL.  If so, I need to check these instead of blindly dereffing them like this patch does.  However I kinda think they can&apos;t be NULL here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100449</commentid>
    <comment_count>25</comment_count>
      <attachid>25538</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-26 14:36:12 -0800</bug_when>
    <thetext>Created attachment 25538
patch v8

I&apos;m stupid, fix a trivial compile error.

I forgot to mention that in the last patch I made whitespace-only changes to fix one of the functions being two-space indented, and remove a bunch of whitespace from blank lines, hence the larger diff -- there weren&apos;t functional changes beyond the PluginData change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100453</commentid>
    <comment_count>26</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-26 14:51:07 -0800</bug_when>
    <thetext>I have just noticed there&apos;s a PluginDatabase class too, which, if it does what I want, would avoid the hassle of creating a PluginData* object on the page everywhere, and be more like the original code I wrote (which I think was better).  I can&apos;t wade through the mess of different plugin interfaces here.  Could someone chime in and tell me what the One True Way is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100500</commentid>
    <comment_count>27</comment_count>
      <attachid>25547</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-26 18:45:29 -0800</bug_when>
    <thetext>Created attachment 25547
patch v9

This fixes a crash that could happen with the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101039</commentid>
    <comment_count>28</comment_count>
      <attachid>25522</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-02 12:26:05 -0800</bug_when>
    <thetext>Comment on attachment 25522
updated patch v6

clearing r+ on this patch to remove it from the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101566</commentid>
    <comment_count>29</comment_count>
      <attachid>25547</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-12-05 14:20:47 -0800</bug_when>
    <thetext>Comment on attachment 25547
patch v9

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101889</commentid>
    <comment_count>30</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-12-08 16:36:25 -0800</bug_when>
    <thetext>Committed in r39115.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18374</attachid>
            <date>2008-01-10 13:46:20 -0800</date>
            <delta_ts>2008-08-06 22:40:57 -0700</delta_ts>
            <desc>Patch for the proposed change</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3885</size>
            <attacher name="Rui Jiang">rjiang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI5MzY1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDEt
MTAgIFJ1aSBKaWFuZyAgPHJqaWFuZ0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY4MTQKKworICAgICAgICAtIEFkZCAjaWZkZWYgdG8gYWxsb3cgY3VzdG9tIGJ1
aWx0IFdlYktpdCB0byBoYW5kbGUgQWN0aXZlWCBkaWZmZXJlbnRseS4KKyAgICAgICAgLSBDaGFu
Z2VkIHRoZSBBY3RpdmVYIHNlcnZpY2UgdHlwZSBmcm9tICJhcHBsaWNhdGlvbi94LWFjdGl2ZXgt
aGFuZGxlciIKKyAgICAgICAgdG8gImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0IgorICAgICAgICAt
IG1hcCBjbGFzc2lkIHRvIHNlcnZpY2UgdHlwZSBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gZW1iZWQg
dGFiLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6Om1hcENsYXNzSWRUb1NlcnZpY2VUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6CisK
IDIwMDgtMDEtMTAgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4sIFNhbSwgYW5kIEFkYW0uCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclBh
cnRPYmplY3QuY3BwCShyZXZpc2lvbiAyOTMzOCkKKysrIHJlbmRlcmluZy9SZW5kZXJQYXJ0T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMjQgKzg4LDQ2IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHkKIHsKICAgICAvLyBJdCBpcyBBY3RpdmVYLCBidXQg
dGhlIG5zcGx1Z2luIHN5c3RlbSBoYW5kbGluZwogICAgIC8vIHNob3VsZCBhbHNvIHdvcmssIHRo
YXQncyB3aHkgd2UgZG9uJ3Qgb3ZlcnJpZGUgdGhlCi0gICAgLy8gc2VydmljZVR5cGUgd2l0aCBh
cHBsaWNhdGlvbi94LWFjdGl2ZXgtaGFuZGxlcgorICAgIC8vIHNlcnZpY2VUeXBlIHdpdGggYXBw
bGljYXRpb24veC1vbGVvYmplY3QKICAgICAvLyBidXQgbGV0IHRoZSBLVHJhZGVyIGluIGtodG1s
cGFydDo6Y3JlYXRlUGFydCgpIGRldGVjdAogICAgIC8vIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZTog
bGF1bmNoIHdpdGggYWN0aXZleCB2aWV3ZXIgb3IKICAgICAvLyB3aXRoIG5zcGx1Z2ludmlld2Vy
IChOaWtvKQotICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdDREI2RS1BRTZELTExY2YtOTZC
OC00NDQ1NTM1NDAwMDAiKSkKKyNpZm5kZWYgRElTQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lP
Tl9GTEFTSAorICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdDREI2RS1BRTZELTExY2YtOTZC
OC00NDQ1NTM1NDAwMDAiLCBmYWxzZSkpIHsKICAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFpbnMo
IkNGQ0RBQTAzLThCRTQtMTFjZi1CODRCLTAwMjBBRkJCQ0NGQSIpKQorICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisjaWZuZGVmIERJU0FCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05f
UkVBTEFVRElPCisgICAgaWYgKGNsYXNzSWQuY29udGFpbnMoIkNGQ0RBQTAzLThCRTQtMTFjZi1C
ODRCLTAwMjBBRkJCQ0NGQSIsIGZhbHNlKSkgewogICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhdWRp
by94LXBuLXJlYWxhdWRpby1wbHVnaW4iOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFpbnMo
IjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2QiIpKQorICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisjaWZuZGVmIERJU0FCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05f
UVVJQ0tUSU1FCisgICAgaWYgKGNsYXNzSWQuY29udGFpbnMoIjAyQkYyNUQ1LThDMTctNEIyMy1C
QzgwLUQzNDg4QUJEREM2QiIsIGZhbHNlKSkgewogICAgICAgICBzZXJ2aWNlVHlwZSA9ICJ2aWRl
by9xdWlja3RpbWUiOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFpbnMoIjE2NkIxQkNBLTNG
OUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIpKQorICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisjaWZuZGVmIERJU0FCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fRElSRUNUT1IKKyAg
ICBpZiAoY2xhc3NJZC5jb250YWlucygiMTY2QjFCQ0EtM0Y5Qy0xMUNGLTgwNzUtNDQ0NTUzNTQw
MDAwIiwgZmFsc2UpKSB7CiAgICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtZGly
ZWN0b3IiOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFpbnMoIjZCRjUyQTUyLTM5NEEtMTFk
My1CMTUzLTAwQzA0Rjc5RkFBNiIpKQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisj
aWZuZGVmIERJU0FCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fTVBMQVlFUjIKKyAgICBpZiAo
Y2xhc3NJZC5jb250YWlucygiNkJGNTJBNTItMzk0QS0xMWQzLUIxNTMtMDBDMDRGNzlGQUE2Iiwg
ZmFsc2UpKSB7CiAgICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtbXBsYXllcjIi
OwotICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkKLSAgICAgICAgLy8gV2UgaGF2ZSBh
IGNsc2lkLCBtZWFucyB0aGlzIGlzIGFjdGl2ZXggKE5pa28pCi0gICAgICAgIHNlcnZpY2VUeXBl
ID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgogICAgIC8vIFRPRE86IGFkZCBtb3JlIHBsdWdpbnMgaGVyZQorCisgICAgaWYg
KCFjbGFzc0lkLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5z
IHRoaXMgaXMgYWN0aXZleCAoTmlrbykKKyAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRp
b24veC1vbGVvYmplY3QiOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRh
dGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQpAQCAtMjAyLDcgKzIy
NCwxMCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgICAgICB9
CiAgICAgICAKICAgICAgIC8vIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSB0eXBlLCB0cnkgdG8g
bWFwIGZyb20gYSBzcGVjaWZpYyBDTEFTU0lEIHRvIGEgdHlwZS4KLSAgICAgIGlmIChzZXJ2aWNl
VHlwZS5pc0VtcHR5KCkgJiYgIW8tPm1fY2xhc3NJZC5pc0VtcHR5KCkpCisgICAgICAvLyBIb3dl
dmVyLCBpZiB3ZSBoYXZlIHRoZSBlbWJlZCB0YWcgd2Ugc2hvdWxkbid0IGRvIHNvIGJlY2F1c2Ug
dGhlIG91dGVyIG9iamVjdAorICAgICAgLy8gbWF5IGJlIGNvbnZlcnRlZCB0byBhcHBsaWNhdGlv
bi94LW9sZW9iamVjdCwgd2hpbGUgd2UgYXJlIG5vdCBnZXR0aW5nIHRoZSBwYXJhbWF0ZXJzCisg
ICAgICAvLyBpbmNsdWRpbmcgY2xhc3NpZCBldGMgZm9yIHRoZSBvdXRlciBvYmplY3QuCisgICAg
ICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFvLT5tX2NsYXNzSWQuaXNFbXB0eSgpICYm
ICFlbWJlZCkKICAgICAgICAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5tX2NsYXNzSWQs
IHNlcnZpY2VUeXBlKTsKICAgICAgIAogICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQo
KSwgdXJsKSkK
</data>
<flag name="review"
          id="8026"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22688</attachid>
            <date>2008-08-06 16:48:05 -0700</date>
            <delta_ts>2008-11-04 12:34:58 -0800</delta_ts>
            <desc>Patch that allow custom build WebKit to handle ActiveX objects differently</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6113</size>
            <attacher name="Rui Jiang">rjiang</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTYxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDgtMDgtMDYgIFJ1aSBKaWFuZyAgPHJqaWFuZ0BnbWFpbC5jb20+
CisKKyAgICAgICAgQlVHIDE2ODE0OiBHaXZlIHBsdWdpbiBhIGNoYW5jZSB0byBoYW5kbGUgQWN0
aXZlWCBvYmplY3RzCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY4MTQ+CisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNob3VsZFVz
ZUVtYmVkRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVw
ZGF0ZVdpZGdldCk6CisKIDIwMDgtMDgtMDUgIERhdmlkIEQuIEtpbHplciAgPGRka2lsemVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdWcgMjAwMzg6IFJFR1JFU1NJT04gKHIzNTE1MSk6IENhbid0
IHBvc3QgY29tbWVudHMgb24gZmxpY2tyLmNvbQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM1NTgxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDI2ICs3OSw2OSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5CiB7CiAgICAgLy8gSXQgaXMgQWN0
aXZlWCwgYnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKICAgICAvLyBzaG91bGQgYWxz
byB3b3JrLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQotICAgIC8vIHNlcnZpY2VU
eXBlIHdpdGggYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIKKyAgICAvLyBzZXJ2aWNlVHlw
ZSB3aXRoIGFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0CiAgICAgLy8gYnV0IGxldCB0aGUgS1RyYWRl
ciBpbiBraHRtbHBhcnQ6OmNyZWF0ZVBhcnQoKSBkZXRlY3QKICAgICAvLyB0aGUgdXNlcidzIHBy
ZWZlcmVuY2U6IGxhdW5jaCB3aXRoIGFjdGl2ZXggdmlld2VyIG9yCiAgICAgLy8gd2l0aCBuc3Bs
dWdpbnZpZXdlciAoTmlrbykKLSAgICBpZiAoY2xhc3NJZC5jb250YWlucygiRDI3Q0RCNkUtQUU2
RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIikpCisjaWZuZGVmIERJU0FCTEVfQUNUSVZFWF9UWVBF
X0NPTlZFUlNJT05fRkxBU0gKKyAgICBpZiAoY2xhc3NJZC5jb250YWlucygiRDI3Q0RCNkUtQUU2
RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwgZmFsc2UpKSB7CiAgICAgICAgIHNlcnZpY2VUeXBl
ID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKLSAgICBlbHNlIGlmIChjbGFzc0lk
LmNvbnRhaW5zKCJDRkNEQUEwMy04QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkNDRkEiKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX0FDVElWRVhfVFlQRV9D
T05WRVJTSU9OX1JFQUxBVURJTworICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJDRkNEQUEwMy04
QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkNDRkEiLCBmYWxzZSkpIHsKICAgICAgICAgc2VydmljZVR5
cGUgPSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIjsKLSAgICBlbHNlIGlmIChjbGFzc0lk
LmNvbnRhaW5zKCIwMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX0FDVElWRVhfVFlQRV9D
T05WRVJTSU9OX1FVSUNLVElNRQorICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIwMkJGMjVENS04
QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCBmYWxzZSkpIHsKICAgICAgICAgc2VydmljZVR5
cGUgPSAidmlkZW8vcXVpY2t0aW1lIjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIx
NjZCMUJDQS0zRjlDLTExQ0YtODA3NS00NDQ1NTM1NDAwMDAiKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX0RJ
UkVDVE9SCisgICAgaWYgKGNsYXNzSWQuY29udGFpbnMoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1
LTQ0NDU1MzU0MDAwMCIsIGZhbHNlKSkgewogICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNh
dGlvbi94LWRpcmVjdG9yIjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCI2QkY1MkE1
Mi0zOTRBLTExZDMtQjE1My0wMEMwNEY3OUZBQTYiKSkKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX01QTEFZRVIy
CisgICAgaWYgKGNsYXNzSWQuY29udGFpbnMoIjZCRjUyQTUyLTM5NEEtMTFkMy1CMTUzLTAwQzA0
Rjc5RkFBNiIsIGZhbHNlKSB8fAorICAgICAgICBjbGFzc0lkLmNvbnRhaW5zKCIyMkQ2RjMxMi1C
MEY2LTExRDAtOTRBQi0wMDgwQzc0QzdFOTUiLCBmYWxzZSkpIHsKICAgICAgICAgc2VydmljZVR5
cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVyMiI7Ci0gICAgZWxzZSBpZiAoIWNsYXNzSWQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBjbHNpZCwgbWVhbnMgdGhpcyBpcyBBY3Rp
dmUgWCAoTmlrbykKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1hY3RpdmV4
LWhhbmRsZXIiOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgLy8gVE9ETzog
YWRkIG1vcmUgcGx1Z2lucyBoZXJlCisKKyAgICBpZiAoIWNsYXNzSWQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIFdlIGhhdmUgYSBjbHNpZCwgbWVhbnMgdGhpcyBpcyBhY3RpdmV4IChOaWtvKQor
ICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7CiAgICAgfQog
fQogCisvLyBUbyBkZWNpZGUgd2hldGhlciB3ZSBzaG91bGQgdXNlIHRoZSBlbWJlZCB0YWcgaW5z
aWRlIHRoZSBvYmplY3QgdGFnIG9yIG5vdC4KK3N0YXRpYyBib29sIFNob3VsZFVzZUVtYmVkRm9y
T2JqZWN0KEhUTUxPYmplY3RFbGVtZW50KiBvKQoreworI2lmZGVmIERJU0FCTEVfQUNUSVZFWF9U
WVBFX0NPTlZFUlNJT05fTVBMQVlFUjIKKyAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBv
LT5hdHRyaWJ1dGVzKCk7CisgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAg
ICAgaWYgKGl0LT5uYW1lKCkubG9jYWxOYW1lKCkuZG9tU3RyaW5nKCkuZm9sZENhc2UoKSA9PSAi
Y2xhc3NpZCIpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHdpbmRvd3MgbWVkaWEgcGxh
eWVyIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSgpLmNvbnRhaW5zKCI2QkY1
MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMwNEY3OUZBQTYiLCBmYWxzZSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgaXQtPnZhbHVlKCkuY29udGFpbnMoIjIyRDZGMzEyLUIwRjYtMTFEMC05NEFCLTAw
ODBDNzRDN0U5NSIsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIAorICAgIHJldHVybiB0cnVl
OworfQorCiB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sIG9ubHlDcmVh
dGVOb25OZXRzY2FwZVBsdWdpbnMpCiB7CiAgIFN0cmluZyB1cmw7CkBAIC0xMTYsMTUgKzE1OSwx
NyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgICAgICAgIHJl
dHVybjsKICAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVEIHRhZy4KICAgICAgIEhUTUxF
bWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKLSAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBvLT5maXJz
dENoaWxkKCk7IGNoaWxkOykgewotICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShlbWJl
ZFRhZykpIHsKLSAgICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVt
ZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2VuZCBpbnRvIG5lc3RlZCBP
QkpFQ1QgdGFncwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+
dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVzY2VuZCAoRU1CRURzIG1heSBi
ZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQotICAgICAgfQorICAgICAgaWYgKFNob3VsZFVzZUVtYmVk
Rm9yT2JqZWN0KG8pKSB7CisgICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG8tPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7KSB7CisgICAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShlbWJl
ZFRhZykpIHsKKyAgICAgICAgICAgICAgICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVk
RWxlbWVudCo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2Nl
bmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgY2hpbGQgPSBjaGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndp
c2UgZGVzY2VuZCAoRU1CRURzIG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQorICAgICAgICAg
IH0KKyAgICAgIH0gICAgICAKICAgICAgIAogICAgICAgLy8gVXNlIHRoZSBhdHRyaWJ1dGVzIGZy
b20gdGhlIEVNQkVEIHRhZyBpbnN0ZWFkIG9mIHRoZSBPQkpFQ1QgdGFnIGluY2x1ZGluZyBXSURU
SCBhbmQgSEVJR0hULgogICAgICAgSFRNTEVsZW1lbnQgKmVtYmVkT3JPYmplY3Q7CkBAIC0xOTMs
NyArMjM4LDEwIEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wKICAg
ICAgIH0KICAgICAgIAogICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUsIHRy
eSB0byBtYXAgZnJvbSBhIHNwZWNpZmljIENMQVNTSUQgdG8gYSB0eXBlLgotICAgICAgaWYgKHNl
cnZpY2VUeXBlLmlzRW1wdHkoKSAmJiAhby0+Y2xhc3NJZCgpLmlzRW1wdHkoKSkKKyAgICAgIC8v
IEhvd2V2ZXIsIGlmIHdlIGhhdmUgdGhlIGVtYmVkIHRhZyB3ZSBzaG91bGRuJ3QgZG8gc28gYmVj
YXVzZSB0aGUgb3V0ZXIgb2JqZWN0CisgICAgICAvLyBtYXkgYmUgY29udmVydGVkIHRvIGFwcGxp
Y2F0aW9uL3gtb2xlb2JqZWN0LCB3aGlsZSB3ZSBhcmUgbm90IGdldHRpbmcgdGhlIHBhcmFtYXRl
cnMKKyAgICAgIC8vIGluY2x1ZGluZyBjbGFzc2lkIGV0YyBmb3IgdGhlIG91dGVyIG9iamVjdC4K
KyAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgIW8tPmNsYXNzSWQoKS5pc0VtcHR5
KCkgJiYgIWVtYmVkKQogICAgICAgICAgIG1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKG8tPmNsYXNz
SWQoKSwgc2VydmljZVR5cGUpOwogICAgICAgCiAgICAgICBpZiAoIWlzVVJMQWxsb3dlZChkb2N1
bWVudCgpLCB1cmwpKQo=
</data>
<flag name="review"
          id="10055"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24892</attachid>
            <date>2008-11-04 12:34:58 -0800</date>
            <delta_ts>2008-11-12 18:02:34 -0800</delta_ts>
            <desc>patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8328</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MTA5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMDQgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gb24gYSBwZXItcGx1Z2luIGJhc2lzLgorICAgICAgICBJbXByb3ZlIGhhbmRs
aW5nIG9mIG1pc2NlbGxhbmVvdXMgQWN0aXZlWCBvYmplY3RzLgorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6IEFkZCB5ZXQgbW9yZSBFTkFCTEUoLi4uKXMuCisKIDIwMDgtMTEtMDQgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRj
aGVyLgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDM4MDgxKQorKysgSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsMjYg
QEAKICNkZWZpbmUgRU5BQkxFX1BBTl9TQ1JPTExJTkcgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5l
ZChFTkFCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fRkxBU0gpCisjZGVmaW5lIEVOQUJMRV9B
Q1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9GTEFTSCAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVO
QUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9SRUFMQVVESU8pCisjZGVmaW5lIEVOQUJMRV9B
Q1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9SRUFMQVVESU8gMQorI2VuZGlmCisKKyNpZiAhZGVmaW5l
ZChFTkFCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fUVVJQ0tUSU1FKQorI2RlZmluZSBFTkFC
TEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fUVVJQ0tUSU1FIDEKKyNlbmRpZgorCisjaWYgIWRl
ZmluZWQoRU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX0RJUkVDVE9SKQorI2RlZmluZSBF
TkFCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fRElSRUNUT1IgMQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChFTkFCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fV01QTEFZRVIpCisjZGVmaW5l
IEVOQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUiAxCisjZW5kaWYKKwogLyog
VXNlIHRoZSBRdFhtbFN0cmVhbVJlYWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MVG9rZW5pemVy
ICovCiAjaWYgUExBVEZPUk0oUVQpCiAjaWYgIUVOQUJMRShYU0xUKQpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MTA5
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAor
MjAwOC0xMS0wNCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE0CisgICAgICAgIEFsbG93IHBvcnRzIHRvIGRp
c2FibGUgQWN0aXZlWC0+TlBBUEkgY29udmVyc2lvbiBvbiBhIHBlci1wbHVnaW4gYmFzaXMuCisg
ICAgICAgIEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91
bGRVc2VDaGlsZEVtYmVkT2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9i
amVjdDo6dXBkYXRlV2lkZ2V0KToKKwogMjAwOC0xMS0wNCAgSmFuIE1pY2hhZWwgQWxvbnpvICA8
am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXguIE5vdCByZXZpZXdlZC4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZpc2lvbiAzODA4
MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03NywyNiArNzgsNTEgQEAgc3RhdGljIGJvb2wgaXNVUkxBbGxvd2VkKERvY3VtZW50
KiBkb2MsIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoY29u
c3QgU3RyaW5nJiBjbGFzc0lkLCBTdHJpbmcmIHNlcnZpY2VUeXBlKQogewotICAgIC8vIEl0IGlz
IEFjdGl2ZVgsIGJ1dCB0aGUgbnNwbHVnaW4gc3lzdGVtIGhhbmRsaW5nCi0gICAgLy8gc2hvdWxk
IGFsc28gd29yaywgdGhhdCdzIHdoeSB3ZSBkb24ndCBvdmVycmlkZSB0aGUKLSAgICAvLyBzZXJ2
aWNlVHlwZSB3aXRoIGFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyCi0gICAgLy8gYnV0IGxl
dCB0aGUgS1RyYWRlciBpbiBraHRtbHBhcnQ6OmNyZWF0ZVBhcnQoKSBkZXRlY3QKLSAgICAvLyB0
aGUgdXNlcidzIHByZWZlcmVuY2U6IGxhdW5jaCB3aXRoIGFjdGl2ZXggdmlld2VyIG9yCi0gICAg
Ly8gd2l0aCBuc3BsdWdpbnZpZXdlciAoTmlrbykKLSAgICBpZiAoY2xhc3NJZC5jb250YWlucygi
RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIikpCi0gICAgICAgIHNlcnZpY2VU
eXBlID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKLSAgICBlbHNlIGlmIChjbGFz
c0lkLmNvbnRhaW5zKCJDRkNEQUEwMy04QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkNDRkEiKSkKLSAg
ICAgICAgc2VydmljZVR5cGUgPSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIjsKLSAgICBl
bHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIwMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFC
RERDNkIiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAidmlkZW8vcXVpY2t0aW1lIjsKLSAgICBl
bHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIxNjZCMUJDQS0zRjlDLTExQ0YtODA3NS00NDQ1NTM1
NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1kaXJlY3RvciI7
Ci0gICAgZWxzZSBpZiAoY2xhc3NJZC5jb250YWlucygiNkJGNTJBNTItMzk0QS0xMWQzLUIxNTMt
MDBDMDRGNzlGQUE2IikpCi0gICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtbXBs
YXllcjIiOwotICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBX
ZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgQWN0aXZlIFggKE5pa28pCi0gICAgICAgIHNl
cnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gU2VydmljZVR5cGVIYXNo
TWFwOworICAgIHN0YXRpYyBTZXJ2aWNlVHlwZUhhc2hNYXAqIHNlcnZpY2VUeXBlRmFsbGJhY2tG
b3JDbGFzc0lkID0gMDsKKyAgICBpZiAoIXNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkKSB7
CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkID0gbmV3IFNlcnZpY2VUeXBl
SGFzaE1hcDsKKyNpZiBFTkFCTEUoQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fRkxBU0gpCisgICAg
ICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoImFwcGxpY2F0aW9uL3gt
c2hvY2t3YXZlLWZsYXNoIikpCisgICAgICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xh
c3NJZC0+YWRkKCJEMjdDREI2RS1BRTZELTExQ0YtOTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giKTsKKyNlbmRpZgorI2lmIEVOQUJMRShBQ1RJVkVYX1RZ
UEVfQ09OVkVSU0lPTl9SRUFMQVVESU8pCisgICAgICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1
cHBvcnRzTUlNRVR5cGUoImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpKQorICAg
ICAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiQ0ZDREFBMDMtOEJF
NC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIp
OworI2VuZGlmCisjaWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1FVSUNLVElNRSkK
KyAgICAgICAgaWYgKFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSgidmlkZW8vcXVp
Y2t0aW1lIikpCisgICAgICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRk
KCIwMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8vcXVpY2t0aW1l
Iik7CisjZW5kaWYKKyNpZiBFTkFCTEUoQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fRElSRUNUT1Ip
CisgICAgICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoImFwcGxpY2F0
aW9uL3gtZGlyZWN0b3IiKSkKKyAgICAgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFz
c0lkLT5hZGQoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNh
dGlvbi94LWRpcmVjdG9yIik7CisjZW5kaWYKKyNpZiBFTkFCTEUoQUNUSVZFWF9UWVBFX0NPTlZF
UlNJT05fV01QTEFZRVIpCisgICAgICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlN
RVR5cGUoImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiKSkgeworICAgICAgICAgICAgc2VydmljZVR5
cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiNkJGNTJBNTItMzk0QS0xMUQzLUIxNTMtMDBDMDRG
NzlGQUE2IiwgImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiKTsKKyAgICAgICAgICAgIHNlcnZpY2VU
eXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQoIjIyRDZGMzEyLUIwRjYtMTFEMC05NEFCLTAwODBD
NzRDN0U5NSIsICJhcHBsaWNhdGlvbi94LW1wbGF5ZXIyIik7CisjZW5kaWYKKyAgICAgICAgfQog
ICAgIH0KKworICAgIHNlcnZpY2VUeXBlID0gc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQt
PmdldChjbGFzc0lkKTsKKyAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFjbGFzc0lk
LmlzRW1wdHkoKSAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoImFwcGxpY2F0
aW9uL3gtb2xlb2JqZWN0IikpCisgICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gt
b2xlb2JqZWN0IjsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlQ2hpbGRFbWJlZE9mT2JqZWN0
KEhUTUxPYmplY3RFbGVtZW50KiBvKQoreworICAgIC8vIEFuIE9CSkVDVCB0YWcgd2l0aCBhIGNs
YXNzSWQgaXMgc29tZSBraW5kIG9mIEFjdGl2ZVggY29udHJvbC4gIFRoZSBtb3N0CisgICAgLy8g
Y29tbW9uIGNvbnRyb2xzIGhhdmUgcGFyYWxsZWwgcGx1Z2luIHZlcnNpb25zIGFuZCB0aHVzIHBv
c3NpYmx5IG5lc3RlZAorICAgIC8vIEVNQkVEIHRhZ3MuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0
aGUgT0JKRUNUJ3MgY2xhc3NJZCBzaG91bGQgbWFwIHRvIHNvbWUKKyAgICAvLyBrbm93biBwbHVn
aW4gTUlNRSB0eXBlLiAgSWYgaXQgZG9lc24ndCwgZWl0aGVyIHRoZSBjb250cm9sIGlzIHVubGlr
ZWx5IHRvCisgICAgLy8gaGF2ZSBhIHBhcmFsbGVsIHBsdWdpbiBpbXBsZW1lbnRhdGlvbiAoc28g
dGhlcmUncyBubyBwb2ludCBsb29raW5nCisgICAgLy8gaW5zaWRlKSwgb3Igd2UndmUgcHVycG9z
ZWZ1bGx5IGRpc2FibGVkIGNvbnZlcnNpb24gZm9yIHRoaXMgY2xhc3NJZCwgaW4KKyAgICAvLyB3
aGljaCBjYXNlIHdlIHdhbnQgdG8gdXNlIHRoZSBBY3RpdmVYIE9CSkVDVCBpbnN0ZWFkIG9mIHRo
ZSBFTUJFRCBhbnl3YXkuCisgICAgU3RyaW5nIHNlcnZpY2VUeXBlOworICAgIG1hcENsYXNzSWRU
b1NlcnZpY2VUeXBlKG8tPmNsYXNzSWQoKSwgc2VydmljZVR5cGUpOworICAgIHJldHVybiBzZXJ2
aWNlVHlwZSAhPSAiYXBwbGljYXRpb24veC1vbGVvYmplY3QiOwogfQogCiB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMp
CkBAIC0xMTYsMTQgKzE0MiwxNiBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdl
dChib29sCiAgICAgICAgIHJldHVybjsKICAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVE
IHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKLSAgICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNoaWxkOykgewotICAgICAgICAgIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsKLSAgICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNf
Y2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAg
ICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVz
Y2VuZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVz
Y2VuZCAoRU1CRURzIG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQorICAgICAgaWYgKHNob3Vs
ZFVzZUNoaWxkRW1iZWRPZk9iamVjdChvKSkgeworICAgICAgICAgIGZvciAoTm9kZSogY2hpbGQg
PSBvLT5maXJzdENoaWxkKCk7IGNoaWxkOykgeworICAgICAgICAgICAgICBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUoZW1iZWRUYWcpKSB7CisgICAgICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19j
YXN0PEhUTUxFbWJlZEVsZW1lbnQqPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQor
ICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAv
LyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVkIE9CSkVDVCB0YWdzCisgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7
ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBtYXkgYmUgaW5zaWRlIENPTU1FTlQgdGFn
cykKKyAgICAgICAgICB9CiAgICAgICB9CiAgICAgICAKICAgICAgIC8vIFVzZSB0aGUgYXR0cmli
dXRlcyBmcm9tIHRoZSBFTUJFRCB0YWcgaW5zdGVhZCBvZiB0aGUgT0JKRUNUIHRhZyBpbmNsdWRp
bmcgV0lEVEggYW5kIEhFSUdIVC4KQEAgLTE5Myw3ICsyMjEsNyBAQCB2b2lkIFJlbmRlclBhcnRP
YmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgICAgICB9CiAgICAgICAKICAgICAgIC8vIElmIHdl
IHN0aWxsIGRvbid0IGhhdmUgYSB0eXBlLCB0cnkgdG8gbWFwIGZyb20gYSBzcGVjaWZpYyBDTEFT
U0lEIHRvIGEgdHlwZS4KLSAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgIW8tPmNs
YXNzSWQoKS5pc0VtcHR5KCkpCisgICAgICBpZiAoIWVtYmVkICYmIHNlcnZpY2VUeXBlLmlzRW1w
dHkoKSkKICAgICAgICAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCksIHNl
cnZpY2VUeXBlKTsKICAgICAgIAogICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQoKSwg
dXJsKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25111</attachid>
            <date>2008-11-12 18:02:34 -0800</date>
            <delta_ts>2008-11-12 18:05:40 -0800</delta_ts>
            <desc>patch v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7345</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MzUyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMTIgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0xMiAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzgzNTIpCisrKyBKYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDYgKzQwOSwxMCBAQAog
I2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVO
QUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUgRU5BQkxFX0FD
VElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBVc2UgdGhlIFF0
WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KICNpZiBQ
TEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzgzNTIpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA4LTExLTEy
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlzYWJsZSBBY3Rp
dmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAgIEltcHJvdmUg
aGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXBDbGFz
c0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VDaGlsZEVtYmVk
T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KToKKwogMjAwOC0xMS0xMiAgQWxwIFRva2VyICA8YWxwQG51YW50aS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4ZXMgZm9yIHIzODM0Ni4gRmxvYXRRdWFkLmNwcCBpcyBtaXNzaW5nOgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4MzUyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVn
aW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTc3LDI2ICs3OCwzOSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRv
YywgCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBT
dHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7Ci0gICAgLy8gSXQgaXMgQWN0
aXZlWCwgYnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKLSAgICAvLyBzaG91bGQgYWxz
byB3b3JrLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQotICAgIC8vIHNlcnZpY2VU
eXBlIHdpdGggYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIKLSAgICAvLyBidXQgbGV0IHRo
ZSBLVHJhZGVyIGluIGtodG1scGFydDo6Y3JlYXRlUGFydCgpIGRldGVjdAotICAgIC8vIHRoZSB1
c2VyJ3MgcHJlZmVyZW5jZTogbGF1bmNoIHdpdGggYWN0aXZleCB2aWV3ZXIgb3IKLSAgICAvLyB3
aXRoIG5zcGx1Z2ludmlld2VyIChOaWtvKQotICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdD
REI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUg
PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giOwotICAgIGVsc2UgaWYgKGNsYXNzSWQu
Y29udGFpbnMoIkNGQ0RBQTAzLThCRTQtMTFjZi1CODRCLTAwMjBBRkJCQ0NGQSIpKQotICAgICAg
ICBzZXJ2aWNlVHlwZSA9ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iOwotICAgIGVsc2Ug
aWYgKGNsYXNzSWQuY29udGFpbnMoIjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2
QiIpKQotICAgICAgICBzZXJ2aWNlVHlwZSA9ICJ2aWRlby9xdWlja3RpbWUiOwotICAgIGVsc2Ug
aWYgKGNsYXNzSWQuY29udGFpbnMoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAw
MCIpKQotICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIjsKLSAg
ICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCI2QkY1MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMw
NEY3OUZBQTYiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVy
MiI7Ci0gICAgZWxzZSBpZiAoIWNsYXNzSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIGhh
dmUgYSBjbHNpZCwgbWVhbnMgdGhpcyBpcyBBY3RpdmUgWCAoTmlrbykKLSAgICAgICAgc2Vydmlj
ZVR5cGUgPSAiYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIiOworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBTZXJ2aWNlVHlwZUhhc2hNYXA7
CisgICAgc3RhdGljIFNlcnZpY2VUeXBlSGFzaE1hcCogc2VydmljZVR5cGVGYWxsYmFja0ZvckNs
YXNzSWQgPSAwOworICAgIGlmICghc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQpIHsKKyAg
ICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSBuZXcgU2VydmljZVR5cGVIYXNo
TWFwOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJEMjdDREI2
RS1BRTZELTExQ0YtOTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUt
Zmxhc2giKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiQ0ZD
REFBMDMtOEJFNC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVhbGF1ZGlv
LXBsdWdpbiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCIw
MkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQoIjE2NkIxQkNBLTNG
OUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIik7Cisj
aWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSKQorICAgICAgICBzZXJ2
aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCI2QkY1MkE1Mi0zOTRBLTExRDMtQjE1My0w
MEMwNEY3OUZBQTYiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOworICAgICAgICBzZXJ2aWNl
VHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCIyMkQ2RjMxMi1CMEY2LTExRDAtOTRBQi0wMDgw
Qzc0QzdFOTUiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOworI2VuZGlmCiAgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nIGZhbGxiYWNrU2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZUZhbGxiYWNr
Rm9yQ2xhc3NJZC0+Z2V0KGNsYXNzSWQpOworICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUoZmFsbGJhY2tTZXJ2aWNlVHlwZSkpCisgICAgICAgIHNlcnZpY2VUeXBlID0g
ZmFsbGJhY2tTZXJ2aWNlVHlwZTsKKyAgICBlbHNlIGlmICghY2xhc3NJZC5pc0VtcHR5KCkgJiYg
UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVj
dCIpKQorICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUNoaWxkRW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxl
bWVudCogbykKK3sKKyAgICAvLyBBbiBPQkpFQ1QgdGFnIHdpdGggYSBjbGFzc0lkIGlzIHNvbWUg
a2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBUaGUgbW9zdAorICAgIC8vIGNvbW1vbiBjb250cm9s
cyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJzaW9ucyBhbmQgdGh1cyBwb3NzaWJseSBuZXN0ZWQK
KyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIE9CSkVDVCdzIGNs
YXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisgICAgLy8ga25vd24gcGx1Z2luIE1JTUUgdHlwZS4g
IElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUgY29udHJvbCBpcyB1bmxpa2VseSB0bworICAgIC8v
IGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1wbGVtZW50YXRpb24gKHNvIHRoZXJlJ3Mgbm8gcG9p
bnQgbG9va2luZworICAgIC8vIGluc2lkZSksIG9yIHdlJ3ZlIHB1cnBvc2VmdWxseSBkaXNhYmxl
ZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNzSWQsIGluCisgICAgLy8gd2hpY2ggY2FzZSB3ZSB3
YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpFQ1QgaW5zdGVhZCBvZiB0aGUgRU1CRUQgYW55d2F5
LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKKyAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShv
LT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlKTsKKyAgICByZXR1cm4gc2VydmljZVR5cGUgIT0gImFw
cGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0KIAogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRh
dGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQpAQCAtMTE2LDE0ICsx
MzAsMTYgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAg
ICByZXR1cm47CiAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBI
VE1MRW1iZWRFbGVtZW50KiBlbWJlZCA9IDA7Ci0gICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpKSB7Ci0gICAgICAgICAgICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVk
RWxlbWVudCo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNl
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0
ZWQgT0JKRUNUIHRhZ3MKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBt
YXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykKKyAgICAgIGlmIChzaG91bGRVc2VDaGlsZEVtYmVk
T2ZPYmplY3QobykpIHsKKyAgICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDspIHsKKyAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVk
VGFnKSkgeworICAgICAgICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50Kj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAg
ICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2Vu
ZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lz
ZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAg
fQogICAgICAgfQogICAgICAgCiAgICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUg
RU1CRUQgdGFnIGluc3RlYWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBI
RUlHSFQuCkBAIC0xOTMsNyArMjA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVX
aWRnZXQoYm9vbAogICAgICAgfQogICAgICAgCiAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBo
YXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUu
Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkKCkuaXNFbXB0
eSgpKQorICAgICAgaWYgKCFlbWJlZCAmJiBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZCgpLCBzZXJ2aWNlVHlwZSk7CiAg
ICAgICAKICAgICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25112</attachid>
            <date>2008-11-12 18:05:40 -0800</date>
            <delta_ts>2008-11-19 17:14:46 -0800</delta_ts>
            <desc>patch v5</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7335</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MzUyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMTIgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0xMiAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzgzNTIpCisrKyBKYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDYgKzQwOSwxMCBAQAog
I2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVO
QUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUgRU5BQkxFX0FD
VElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBVc2UgdGhlIFF0
WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KICNpZiBQ
TEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzgzNTIpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA4LTExLTEy
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlzYWJsZSBBY3Rp
dmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAgIEltcHJvdmUg
aGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXBDbGFz
c0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VDaGlsZEVtYmVk
T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KToKKwogMjAwOC0xMS0xMiAgQWxwIFRva2VyICA8YWxwQG51YW50aS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4ZXMgZm9yIHIzODM0Ni4gRmxvYXRRdWFkLmNwcCBpcyBtaXNzaW5nOgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4MzUyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVn
aW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTc3LDI2ICs3OCwzOSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRv
YywgCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBT
dHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7Ci0gICAgLy8gSXQgaXMgQWN0
aXZlWCwgYnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKLSAgICAvLyBzaG91bGQgYWxz
byB3b3JrLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQotICAgIC8vIHNlcnZpY2VU
eXBlIHdpdGggYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIKLSAgICAvLyBidXQgbGV0IHRo
ZSBLVHJhZGVyIGluIGtodG1scGFydDo6Y3JlYXRlUGFydCgpIGRldGVjdAotICAgIC8vIHRoZSB1
c2VyJ3MgcHJlZmVyZW5jZTogbGF1bmNoIHdpdGggYWN0aXZleCB2aWV3ZXIgb3IKLSAgICAvLyB3
aXRoIG5zcGx1Z2ludmlld2VyIChOaWtvKQotICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdD
REI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUg
PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giOwotICAgIGVsc2UgaWYgKGNsYXNzSWQu
Y29udGFpbnMoIkNGQ0RBQTAzLThCRTQtMTFjZi1CODRCLTAwMjBBRkJCQ0NGQSIpKQotICAgICAg
ICBzZXJ2aWNlVHlwZSA9ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iOwotICAgIGVsc2Ug
aWYgKGNsYXNzSWQuY29udGFpbnMoIjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2
QiIpKQotICAgICAgICBzZXJ2aWNlVHlwZSA9ICJ2aWRlby9xdWlja3RpbWUiOwotICAgIGVsc2Ug
aWYgKGNsYXNzSWQuY29udGFpbnMoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAw
MCIpKQotICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIjsKLSAg
ICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCI2QkY1MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMw
NEY3OUZBQTYiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVy
MiI7Ci0gICAgZWxzZSBpZiAoIWNsYXNzSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIGhh
dmUgYSBjbHNpZCwgbWVhbnMgdGhpcyBpcyBBY3RpdmUgWCAoTmlrbykKLSAgICAgICAgc2Vydmlj
ZVR5cGUgPSAiYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIiOworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBTZXJ2aWNlVHlwZUhhc2hNYXA7
CisgICAgc3RhdGljIFNlcnZpY2VUeXBlSGFzaE1hcCogc2VydmljZVR5cGVGYWxsYmFja0ZvckNs
YXNzSWQgPSAwOworICAgIGlmICghc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQpIHsKKyAg
ICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSBuZXcgU2VydmljZVR5cGVIYXNo
TWFwOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJEMjdDREI2
RS1BRTZELTExQ0YtOTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUt
Zmxhc2giKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiQ0ZD
REFBMDMtOEJFNC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVhbGF1ZGlv
LXBsdWdpbiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCIw
MkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQoIjE2NkIxQkNBLTNG
OUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIik7Cisj
aWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSKQorICAgICAgICBzZXJ2
aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCI2QkY1MkE1Mi0zOTRBLTExRDMtQjE1My0w
MEMwNEY3OUZBQTYiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOworICAgICAgICBzZXJ2aWNl
VHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCIyMkQ2RjMxMi1CMEY2LTExRDAtOTRBQi0wMDgw
Qzc0QzdFOTUiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOworI2VuZGlmCiAgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nIGZhbGxiYWNrU2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZUZhbGxiYWNr
Rm9yQ2xhc3NJZC0+Z2V0KGNsYXNzSWQpOworICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUoZmFsbGJhY2tTZXJ2aWNlVHlwZSkpCisgICAgICAgIHNlcnZpY2VUeXBlID0g
ZmFsbGJhY2tTZXJ2aWNlVHlwZTsKKyAgICBlbHNlIGlmICghY2xhc3NJZC5pc0VtcHR5KCkgJiYg
UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVj
dCIpKQorICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUNoaWxkRW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxl
bWVudCogbykKK3sKKyAgICAvLyBBbiBPQkpFQ1QgdGFnIHdpdGggYSBjbGFzc0lkIGlzIHNvbWUg
a2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBUaGUgbW9zdAorICAgIC8vIGNvbW1vbiBjb250cm9s
cyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJzaW9ucyBhbmQgdGh1cyBwb3NzaWJseSBuZXN0ZWQK
KyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIE9CSkVDVCdzIGNs
YXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisgICAgLy8ga25vd24gcGx1Z2luIE1JTUUgdHlwZS4g
IElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUgY29udHJvbCBpcyB1bmxpa2VseSB0bworICAgIC8v
IGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1wbGVtZW50YXRpb24gKHNvIHRoZXJlJ3Mgbm8gcG9p
bnQgbG9va2luZworICAgIC8vIGluc2lkZSksIG9yIHdlJ3ZlIHB1cnBvc2VmdWxseSBkaXNhYmxl
ZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNzSWQsIGluCisgICAgLy8gd2hpY2ggY2FzZSB3ZSB3
YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpFQ1QgaW5zdGVhZCBvZiB0aGUgRU1CRUQgYW55d2F5
LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKKyAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShv
LT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlKTsKKyAgICByZXR1cm4gc2VydmljZVR5cGUgIT0gImFw
cGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0KIAogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRh
dGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQpAQCAtMTE2LDE0ICsx
MzAsMTYgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAg
ICByZXR1cm47CiAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBI
VE1MRW1iZWRFbGVtZW50KiBlbWJlZCA9IDA7Ci0gICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpKSB7Ci0gICAgICAgICAgICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVk
RWxlbWVudCo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNl
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0
ZWQgT0JKRUNUIHRhZ3MKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBt
YXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykKKyAgICAgIGlmIChzaG91bGRVc2VDaGlsZEVtYmVk
T2ZPYmplY3QobykpIHsKKyAgICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDspIHsKKyAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVk
VGFnKSkgeworICAgICAgICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50Kj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAg
ICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2Vu
ZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lz
ZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAg
fQogICAgICAgfQogICAgICAgCiAgICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUg
RU1CRUQgdGFnIGluc3RlYWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBI
RUlHSFQuCkBAIC0xOTMsNyArMjA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVX
aWRnZXQoYm9vbAogICAgICAgfQogICAgICAgCiAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBo
YXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUu
Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkKCkuaXNFbXB0
eSgpKQorICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgICBtYXBDbGFz
c0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlKTsKICAgICAgIAogICAg
ICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQoKSwgdXJsKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25292</attachid>
            <date>2008-11-19 17:14:46 -0800</date>
            <delta_ts>2008-11-26 11:04:14 -0800</delta_ts>
            <desc>patch v6</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7365</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg2MDYpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0xMS0xOSAgUGV0ZXIg
S2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2ODE0CisgICAgICAgIEFsbG93IHBvcnRzIHRvIGRpc2FibGUgQWN0aXZlWC0+TlBB
UEkgY29udmVyc2lvbiBmb3IgTWVkaWEgUGxheWVyLgorICAgICAgICBJbXByb3ZlIGhhbmRsaW5n
IG9mIG1pc2NlbGxhbmVvdXMgQWN0aXZlWCBvYmplY3RzLgorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6IEFkZCBhbm90aGVyIEVOQUJMRSguLi4pLgorCiAyMDA4LTExLTE5ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAzODYwNikKKysrIEphdmFT
Y3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNiArNDIxLDEw
IEBACiAjZGVmaW5lIEVOQUJMRV9QQU5fU0NST0xMSU5HIDEKICNlbmRpZgogCisjaWYgIWRlZmlu
ZWQoRU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSKQorI2RlZmluZSBFTkFC
TEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fV01QTEFZRVIgMQorI2VuZGlmCisKIC8qIFVzZSB0
aGUgUXRYbWxTdHJlYW1SZWFkZXIgaW1wbGVtZW50YXRpb24gZm9yIFhNTFRva2VuaXplciAqLwog
I2lmIFBMQVRGT1JNKFFUKQogI2lmICFFTkFCTEUoWFNMVCkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjA2KQor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAw
OC0xMS0xOSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE0CisgICAgICAgIEFsbG93IHBvcnRzIHRvIGRpc2Fi
bGUgQWN0aXZlWC0+TlBBUEkgY29udmVyc2lvbiBmb3IgTWVkaWEgUGxheWVyLgorICAgICAgICBJ
bXByb3ZlIGhhbmRsaW5nIG9mIG1pc2NlbGxhbmVvdXMgQWN0aXZlWCBvYmplY3RzLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bWFwQ2xhc3NJZFRvU2VydmljZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlQ2hp
bGRFbWJlZE9mT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVw
ZGF0ZVdpZGdldCk6CisKIDIwMDgtMTEtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4NjA2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5JbmZv
U3RvcmUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3
LDI2ICs3OCwzOSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgCiAK
IHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcm
IGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7Ci0gICAgLy8gSXQgaXMgQWN0aXZlWCwg
YnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKLSAgICAvLyBzaG91bGQgYWxzbyB3b3Jr
LCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQotICAgIC8vIHNlcnZpY2VUeXBlIHdp
dGggYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIKLSAgICAvLyBidXQgbGV0IHRoZSBLVHJh
ZGVyIGluIGtodG1scGFydDo6Y3JlYXRlUGFydCgpIGRldGVjdAotICAgIC8vIHRoZSB1c2VyJ3Mg
cHJlZmVyZW5jZTogbGF1bmNoIHdpdGggYWN0aXZleCB2aWV3ZXIgb3IKLSAgICAvLyB3aXRoIG5z
cGx1Z2ludmlld2VyIChOaWtvKQotICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdDREI2RS1B
RTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBw
bGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFp
bnMoIkNGQ0RBQTAzLThCRTQtMTFjZi1CODRCLTAwMjBBRkJCQ0NGQSIpKQotICAgICAgICBzZXJ2
aWNlVHlwZSA9ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iOwotICAgIGVsc2UgaWYgKGNs
YXNzSWQuY29udGFpbnMoIjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2QiIpKQot
ICAgICAgICBzZXJ2aWNlVHlwZSA9ICJ2aWRlby9xdWlja3RpbWUiOwotICAgIGVsc2UgaWYgKGNs
YXNzSWQuY29udGFpbnMoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIpKQot
ICAgICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIjsKLSAgICBlbHNl
IGlmIChjbGFzc0lkLmNvbnRhaW5zKCI2QkY1MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMwNEY3OUZB
QTYiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVyMiI7Ci0g
ICAgZWxzZSBpZiAoIWNsYXNzSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBj
bHNpZCwgbWVhbnMgdGhpcyBpcyBBY3RpdmUgWCAoTmlrbykKLSAgICAgICAgc2VydmljZVR5cGUg
PSAiYXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIiOworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBTZXJ2aWNlVHlwZUhhc2hNYXA7CisgICAg
c3RhdGljIFNlcnZpY2VUeXBlSGFzaE1hcCogc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQg
PSAwOworICAgIGlmICghc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQpIHsKKyAgICAgICAg
c2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSBuZXcgU2VydmljZVR5cGVIYXNoTWFwOwor
ICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDpEMjdDREI2
RS1BRTZELTExQ0YtOTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUt
Zmxhc2giKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiY2xz
aWQ6Q0ZDREFBMDMtOEJFNC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVh
bGF1ZGlvLXBsdWdpbiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+
YWRkKCJjbHNpZDowMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8v
cXVpY2t0aW1lIik7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQo
ImNsc2lkOjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNhdGlv
bi94LWRpcmVjdG9yIik7CisjaWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExB
WUVSKQorICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDo2
QkY1MkE1Mi0zOTRBLTExRDMtQjE1My0wMEMwNEY3OUZBQTYiLCAiYXBwbGljYXRpb24veC1tcGxh
eWVyMiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNp
ZDoyMkQ2RjMxMi1CMEY2LTExRDAtOTRBQi0wMDgwQzc0QzdFOTUiLCAiYXBwbGljYXRpb24veC1t
cGxheWVyMiIpOworI2VuZGlmCiAgICAgfQorCisgICAgY29uc3QgU3RyaW5nIGZhbGxiYWNrU2Vy
dmljZVR5cGUgPSBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+Z2V0KGNsYXNzSWQpOwor
ICAgIGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoZmFsbGJhY2tTZXJ2aWNl
VHlwZSkpCisgICAgICAgIHNlcnZpY2VUeXBlID0gZmFsbGJhY2tTZXJ2aWNlVHlwZTsKKyAgICBl
bHNlIGlmICghY2xhc3NJZC5pc0VtcHR5KCkgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01J
TUVUeXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCIpKQorICAgICAgICBzZXJ2aWNlVHlwZSA9
ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUNo
aWxkRW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxlbWVudCogbykKK3sKKyAgICAvLyBBbiBPQkpF
Q1QgdGFnIHdpdGggYSBjbGFzc0lkIGlzIHNvbWUga2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBU
aGUgbW9zdAorICAgIC8vIGNvbW1vbiBjb250cm9scyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJz
aW9ucyBhbmQgdGh1cyBwb3NzaWJseSBuZXN0ZWQKKyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhp
cyBpcyB0aGUgY2FzZSwgdGhlIE9CSkVDVCdzIGNsYXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisg
ICAgLy8ga25vd24gcGx1Z2luIE1JTUUgdHlwZS4gIElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUg
Y29udHJvbCBpcyB1bmxpa2VseSB0bworICAgIC8vIGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1w
bGVtZW50YXRpb24gKHNvIHRoZXJlJ3Mgbm8gcG9pbnQgbG9va2luZworICAgIC8vIGluc2lkZSks
IG9yIHdlJ3ZlIHB1cnBvc2VmdWxseSBkaXNhYmxlZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNz
SWQsIGluCisgICAgLy8gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpF
Q1QgaW5zdGVhZCBvZiB0aGUgRU1CRUQgYW55d2F5LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsK
KyAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlKTsK
KyAgICByZXR1cm4gc2VydmljZVR5cGUgIT0gImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0K
IAogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9u
TmV0c2NhcGVQbHVnaW5zKQpAQCAtMTE2LDE0ICsxMzAsMTYgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAgICByZXR1cm47CiAgICAgICAvLyBDaGVjayBm
b3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZCA9IDA7
Ci0gICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAg
ICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7Ci0gICAgICAgICAgICAg
IGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KGNoaWxkKTsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAg
ICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKLSAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAg
Ly8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBtYXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykK
KyAgICAgIGlmIChzaG91bGRVc2VDaGlsZEVtYmVkT2ZPYmplY3QobykpIHsKKyAgICAgICAgICBm
b3IgKE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKKyAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAgICAgICAgICAgICAgICAg
ZW1iZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4oY2hpbGQpOworICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05h
bWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2VuZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncwor
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2
ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGlu
c2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAgfQogICAgICAgfQogICAgICAgCiAgICAgICAv
LyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1CRUQgdGFnIGluc3RlYWQgb2YgdGhlIE9C
SkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlHSFQuCkBAIC0xOTMsNyArMjA5LDcgQEAg
dm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAgfQogICAgICAg
CiAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9t
IGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUuCi0gICAgICBpZiAoc2VydmljZVR5cGUuaXNF
bXB0eSgpICYmICFvLT5jbGFzc0lkKCkuaXNFbXB0eSgpKQorICAgICAgaWYgKHNlcnZpY2VUeXBl
LmlzRW1wdHkoKSkKICAgICAgICAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lk
KCksIHNlcnZpY2VUeXBlKTsKICAgICAgIAogICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1l
bnQoKSwgdXJsKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25522</attachid>
            <date>2008-11-26 11:04:14 -0800</date>
            <delta_ts>2008-12-02 12:26:05 -0800</delta_ts>
            <desc>updated patch v6</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7362</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4Nzg1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMjYgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0yNSAgQ2FtZXJvbiBad2Fy
aWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzg3ODUpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQz
OSwxMCBAQAogI2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEVOQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUg
RU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBV
c2UgdGhlIFF0WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIg
Ki8KICNpZiBQTEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg3ODUp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA4LTExLTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlz
YWJsZSBBY3RpdmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAg
IEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VD
aGlsZEVtYmVkT2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6
dXBkYXRlV2lkZ2V0KToKKwogMjAwOC0xMS0yNiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5JbmZvU3Rv
cmUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDI2
ICs3OCwzOSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgCiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIGNs
YXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7Ci0gICAgLy8gSXQgaXMgQWN0aXZlWCwgYnV0
IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKLSAgICAvLyBzaG91bGQgYWxzbyB3b3JrLCB0
aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQotICAgIC8vIHNlcnZpY2VUeXBlIHdpdGgg
YXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIKLSAgICAvLyBidXQgbGV0IHRoZSBLVHJhZGVy
IGluIGtodG1scGFydDo6Y3JlYXRlUGFydCgpIGRldGVjdAotICAgIC8vIHRoZSB1c2VyJ3MgcHJl
ZmVyZW5jZTogbGF1bmNoIHdpdGggYWN0aXZleCB2aWV3ZXIgb3IKLSAgICAvLyB3aXRoIG5zcGx1
Z2ludmlld2VyIChOaWtvKQotICAgIGlmIChjbGFzc0lkLmNvbnRhaW5zKCJEMjdDREI2RS1BRTZE
LTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giOwotICAgIGVsc2UgaWYgKGNsYXNzSWQuY29udGFpbnMo
IkNGQ0RBQTAzLThCRTQtMTFjZi1CODRCLTAwMjBBRkJCQ0NGQSIpKQotICAgICAgICBzZXJ2aWNl
VHlwZSA9ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iOwotICAgIGVsc2UgaWYgKGNsYXNz
SWQuY29udGFpbnMoIjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2QiIpKQotICAg
ICAgICBzZXJ2aWNlVHlwZSA9ICJ2aWRlby9xdWlja3RpbWUiOwotICAgIGVsc2UgaWYgKGNsYXNz
SWQuY29udGFpbnMoIjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIpKQotICAg
ICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LWRpcmVjdG9yIjsKLSAgICBlbHNlIGlm
IChjbGFzc0lkLmNvbnRhaW5zKCI2QkY1MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMwNEY3OUZBQTYi
KSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVyMiI7Ci0gICAg
ZWxzZSBpZiAoIWNsYXNzSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBjbHNp
ZCwgbWVhbnMgdGhpcyBpcyBBY3RpdmUgWCAoTmlrbykKLSAgICAgICAgc2VydmljZVR5cGUgPSAi
YXBwbGljYXRpb24veC1hY3RpdmV4LWhhbmRsZXIiOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBTZXJ2aWNlVHlwZUhhc2hNYXA7CisgICAgc3Rh
dGljIFNlcnZpY2VUeXBlSGFzaE1hcCogc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSAw
OworICAgIGlmICghc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQpIHsKKyAgICAgICAgc2Vy
dmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSBuZXcgU2VydmljZVR5cGVIYXNoTWFwOworICAg
ICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDpEMjdDREI2RS1B
RTZELTExQ0YtOTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxh
c2giKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiY2xzaWQ6
Q0ZDREFBMDMtOEJFNC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVhbGF1
ZGlvLXBsdWdpbiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRk
KCJjbHNpZDowMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8vcXVp
Y2t0aW1lIik7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQoImNs
c2lkOjE2NkIxQkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNhdGlvbi94
LWRpcmVjdG9yIik7CisjaWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVS
KQorICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDo2QkY1
MkE1Mi0zOTRBLTExRDMtQjE1My0wMEMwNEY3OUZBQTYiLCAiYXBwbGljYXRpb24veC1tcGxheWVy
MiIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDoy
MkQ2RjMxMi1CMEY2LTExRDAtOTRBQi0wMDgwQzc0QzdFOTUiLCAiYXBwbGljYXRpb24veC1tcGxh
eWVyMiIpOworI2VuZGlmCiAgICAgfQorCisgICAgY29uc3QgU3RyaW5nIGZhbGxiYWNrU2Vydmlj
ZVR5cGUgPSBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+Z2V0KGNsYXNzSWQpOworICAg
IGlmIChQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoZmFsbGJhY2tTZXJ2aWNlVHlw
ZSkpCisgICAgICAgIHNlcnZpY2VUeXBlID0gZmFsbGJhY2tTZXJ2aWNlVHlwZTsKKyAgICBlbHNl
IGlmICghY2xhc3NJZC5pc0VtcHR5KCkgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCIpKQorICAgICAgICBzZXJ2aWNlVHlwZSA9ICJh
cHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUNoaWxk
RW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxlbWVudCogbykKK3sKKyAgICAvLyBBbiBPQkpFQ1Qg
dGFnIHdpdGggYSBjbGFzc0lkIGlzIHNvbWUga2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBUaGUg
bW9zdAorICAgIC8vIGNvbW1vbiBjb250cm9scyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJzaW9u
cyBhbmQgdGh1cyBwb3NzaWJseSBuZXN0ZWQKKyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhpcyBp
cyB0aGUgY2FzZSwgdGhlIE9CSkVDVCdzIGNsYXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisgICAg
Ly8ga25vd24gcGx1Z2luIE1JTUUgdHlwZS4gIElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUgY29u
dHJvbCBpcyB1bmxpa2VseSB0bworICAgIC8vIGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1wbGVt
ZW50YXRpb24gKHNvIHRoZXJlJ3Mgbm8gcG9pbnQgbG9va2luZworICAgIC8vIGluc2lkZSksIG9y
IHdlJ3ZlIHB1cnBvc2VmdWxseSBkaXNhYmxlZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNzSWQs
IGluCisgICAgLy8gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpFQ1Qg
aW5zdGVhZCBvZiB0aGUgRU1CRUQgYW55d2F5LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKKyAg
ICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlKTsKKyAg
ICByZXR1cm4gc2VydmljZVR5cGUgIT0gImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0KIAog
dm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0
c2NhcGVQbHVnaW5zKQpAQCAtMTE2LDE0ICsxMzAsMTYgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0
Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAgICByZXR1cm47CiAgICAgICAvLyBDaGVjayBmb3Ig
YSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZCA9IDA7Ci0g
ICAgICBmb3IgKE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAgICAg
ICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7Ci0gICAgICAgICAgICAgIGVt
YmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KGNoaWxkKTsKLSAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpKQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAg
IC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKLSAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAgLy8g
T3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBtYXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykKKyAg
ICAgIGlmIChzaG91bGRVc2VDaGlsZEVtYmVkT2ZPYmplY3QobykpIHsKKyAgICAgICAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKKyAgICAgICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAgICAgICAgICAgICAgICAgZW1i
ZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4oY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2VuZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncworICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJz
ZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lk
ZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAgfQogICAgICAgfQogICAgICAgCiAgICAgICAvLyBV
c2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1CRUQgdGFnIGluc3RlYWQgb2YgdGhlIE9CSkVD
VCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlHSFQuCkBAIC0xOTMsNyArMjA5LDcgQEAgdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgICAgfQogICAgICAgCiAg
ICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEg
c3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUuCi0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0
eSgpICYmICFvLT5jbGFzc0lkKCkuaXNFbXB0eSgpKQorICAgICAgaWYgKHNlcnZpY2VUeXBlLmlz
RW1wdHkoKSkKICAgICAgICAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCks
IHNlcnZpY2VUeXBlKTsKICAgICAgIAogICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQo
KSwgdXJsKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25537</attachid>
            <date>2008-11-26 14:27:45 -0800</date>
            <delta_ts>2008-11-26 14:36:12 -0800</delta_ts>
            <desc>patch v7</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19669</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4Nzg1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMjYgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0yNSAgQ2FtZXJvbiBad2Fy
aWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzg3ODUpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQz
OSwxMCBAQAogI2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEVOQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUg
RU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBV
c2UgdGhlIFF0WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIg
Ki8KICNpZiBQTEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg3ODUp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA4LTExLTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlz
YWJsZSBBY3RpdmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAg
IEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VD
aGlsZEVtYmVkT2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6
dXBkYXRlV2lkZ2V0KToKKwogMjAwOC0xMS0yNiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NSwxODMgKzc2
LDE5OSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlw
ZShjb25zdCBTdHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCitzdGF0aWMgaW5s
aW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiBjbGFzc0lkLCBT
dHJpbmcmIHNlcnZpY2VUeXBlLCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKQogewotICAgIC8vIEl0
IGlzIEFjdGl2ZVgsIGJ1dCB0aGUgbnNwbHVnaW4gc3lzdGVtIGhhbmRsaW5nCi0gICAgLy8gc2hv
dWxkIGFsc28gd29yaywgdGhhdCdzIHdoeSB3ZSBkb24ndCBvdmVycmlkZSB0aGUKLSAgICAvLyBz
ZXJ2aWNlVHlwZSB3aXRoIGFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyCi0gICAgLy8gYnV0
IGxldCB0aGUgS1RyYWRlciBpbiBraHRtbHBhcnQ6OmNyZWF0ZVBhcnQoKSBkZXRlY3QKLSAgICAv
LyB0aGUgdXNlcidzIHByZWZlcmVuY2U6IGxhdW5jaCB3aXRoIGFjdGl2ZXggdmlld2VyIG9yCi0g
ICAgLy8gd2l0aCBuc3BsdWdpbnZpZXdlciAoTmlrbykKLSAgICBpZiAoY2xhc3NJZC5jb250YWlu
cygiRDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIikpCi0gICAgICAgIHNlcnZp
Y2VUeXBlID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKLSAgICBlbHNlIGlmIChj
bGFzc0lkLmNvbnRhaW5zKCJDRkNEQUEwMy04QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkNDRkEiKSkK
LSAgICAgICAgc2VydmljZVR5cGUgPSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIjsKLSAg
ICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIwMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4
OEFCRERDNkIiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAidmlkZW8vcXVpY2t0aW1lIjsKLSAg
ICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIxNjZCMUJDQS0zRjlDLTExQ0YtODA3NS00NDQ1
NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1kaXJlY3Rv
ciI7Ci0gICAgZWxzZSBpZiAoY2xhc3NJZC5jb250YWlucygiNkJGNTJBNTItMzk0QS0xMWQzLUIx
NTMtMDBDMDRGNzlGQUE2IikpCi0gICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gt
bXBsYXllcjIiOwotICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkgewotICAgICAgICAv
LyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgQWN0aXZlIFggKE5pa28pCi0gICAgICAg
IHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gU2VydmljZVR5cGVI
YXNoTWFwOworICAgIHN0YXRpYyBTZXJ2aWNlVHlwZUhhc2hNYXAqIHNlcnZpY2VUeXBlRmFsbGJh
Y2tGb3JDbGFzc0lkID0gMDsKKyAgICBpZiAoIXNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lk
KSB7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkID0gbmV3IFNlcnZpY2VU
eXBlSGFzaE1hcDsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgi
Y2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMUNGLTk2QjgtNDQ0NTUzNTQwMDAwIiwgImFwcGxpY2F0aW9u
L3gtc2hvY2t3YXZlLWZsYXNoIik7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFz
c0lkLT5hZGQoImNsc2lkOkNGQ0RBQTAzLThCRTQtMTFDRi1CODRCLTAwMjBBRkJCQ0NGQSIsICJh
dWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFj
a0ZvckNsYXNzSWQtPmFkZCgiY2xzaWQ6MDJCRjI1RDUtOEMxNy00QjIzLUJDODAtRDM0ODhBQkRE
QzZCIiwgInZpZGVvL3F1aWNrdGltZSIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9y
Q2xhc3NJZC0+YWRkKCJjbHNpZDoxNjZCMUJDQS0zRjlDLTExQ0YtODA3NS00NDQ1NTM1NDAwMDAi
LCAiYXBwbGljYXRpb24veC1kaXJlY3RvciIpOworI2lmIEVOQUJMRShBQ1RJVkVYX1RZUEVfQ09O
VkVSU0lPTl9XTVBMQVlFUikKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQt
PmFkZCgiY2xzaWQ6NkJGNTJBNTItMzk0QS0xMUQzLUIxNTMtMDBDMDRGNzlGQUE2IiwgImFwcGxp
Y2F0aW9uL3gtbXBsYXllcjIiKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNz
SWQtPmFkZCgiY2xzaWQ6MjJENkYzMTItQjBGNi0xMUQwLTk0QUItMDA4MEM3NEM3RTk1IiwgImFw
cGxpY2F0aW9uL3gtbXBsYXllcjIiKTsKKyNlbmRpZgogICAgIH0KKworICAgIGNvbnN0IFN0cmlu
ZyBmYWxsYmFja1NlcnZpY2VUeXBlID0gc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmdl
dChjbGFzc0lkKTsKKyAgICBpZiAocGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZShmYWxsYmFj
a1NlcnZpY2VUeXBlKSkKKyAgICAgICAgc2VydmljZVR5cGUgPSBmYWxsYmFja1NlcnZpY2VUeXBl
OworICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0
c01pbWVUeXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCIpKQorICAgICAgICBzZXJ2aWNlVHlw
ZSA9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFVz
ZUNoaWxkRW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxlbWVudCogbywgUGx1Z2luRGF0YSogcGx1
Z2luRGF0YSkKK3sKKyAgICAvLyBBbiBPQkpFQ1QgdGFnIHdpdGggYSBjbGFzc0lkIGlzIHNvbWUg
a2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBUaGUgbW9zdAorICAgIC8vIGNvbW1vbiBjb250cm9s
cyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJzaW9ucyBhbmQgdGh1cyBwb3NzaWJseSBuZXN0ZWQK
KyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIE9CSkVDVCdzIGNs
YXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisgICAgLy8ga25vd24gcGx1Z2luIE1JTUUgdHlwZS4g
IElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUgY29udHJvbCBpcyB1bmxpa2VseSB0bworICAgIC8v
IGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1wbGVtZW50YXRpb24gKHNvIHRoZXJlJ3Mgbm8gcG9p
bnQgbG9va2luZworICAgIC8vIGluc2lkZSksIG9yIHdlJ3ZlIHB1cnBvc2VmdWxseSBkaXNhYmxl
ZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNzSWQsIGluCisgICAgLy8gd2hpY2ggY2FzZSB3ZSB3
YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpFQ1QgaW5zdGVhZCBvZiB0aGUgRU1CRUQgYW55d2F5
LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKKyAgICBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShv
LT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlLCBwbHVnaW5EYXRhKTsKKyAgICByZXR1cm4gc2Vydmlj
ZVR5cGUgIT0gImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0KIAogdm9pZCBSZW5kZXJQYXJ0
T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQog
ewotICBTdHJpbmcgdXJsOwotICBTdHJpbmcgc2VydmljZVR5cGU7Ci0gIFZlY3RvcjxTdHJpbmc+
IHBhcmFtTmFtZXM7Ci0gIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwotICBGcmFtZSogZnJh
bWUgPSBtX3ZpZXctPmZyYW1lKCk7Ci0gIAotICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpIHsKLQotICAgICAgSFRNTE9iamVjdEVsZW1lbnQqIG8gPSBzdGF0aWNfY2FzdDxI
VE1MT2JqZWN0RWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0KLSAgICAgIG8tPnNldE5lZWRXaWRnZXRV
cGRhdGUoZmFsc2UpOwotICAgICAgaWYgKCFvLT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVEIHRhZy4K
LSAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKLSAgICAgIGZvciAoTm9kZSogY2hp
bGQgPSBvLT5maXJzdENoaWxkKCk7IGNoaWxkOykgewotICAgICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShlbWJlZFRhZykpIHsKLSAgICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNfY2FzdDxI
VE1MRW1iZWRFbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9IGVsc2UgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2VuZCBp
bnRvIG5lc3RlZCBPQkpFQ1QgdGFncwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVzY2VuZCAo
RU1CRURzIG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQotICAgICAgfQotICAgICAgCi0gICAg
ICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1CRUQgdGFnIGluc3RlYWQgb2YgdGhl
IE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlHSFQuCi0gICAgICBIVE1MRWxlbWVu
dCAqZW1iZWRPck9iamVjdDsKLSAgICAgIGlmIChlbWJlZCkgewotICAgICAgICAgIGVtYmVkT3JP
YmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsKLSAgICAgICAgICB1cmwgPSBlbWJlZC0+dXJs
KCk7Ci0gICAgICAgICAgc2VydmljZVR5cGUgPSBlbWJlZC0+c2VydmljZVR5cGUoKTsKLSAgICAg
IH0gZWxzZQotICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKilvOwotICAg
ICAgCi0gICAgICAvLyBJZiB0aGVyZSB3YXMgbm8gVVJMIG9yIHR5cGUgZGVmaW5lZCBpbiBFTUJF
RCwgdHJ5IHRoZSBPQkpFQ1QgdGFnLgotICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgdXJsID0gby0+dXJsKCk7Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKQotICAg
ICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGUoKTsKLSAgICAgIAotICAgICAgSGFz
aFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRpbmdIYXNoPiB1bmlxdWVQYXJhbU5hbWVzOwotICAg
ICAgCi0gICAgICAvLyBTY2FuIHRoZSBQQVJBTSBjaGlsZHJlbi4KLSAgICAgIC8vIEdldCB0aGUg
VVJMIGFuZCB0eXBlIGZyb20gdGhlIHBhcmFtcyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgdGhl
bS4KLSAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXJhbXMgaWYgdGhlcmUg
aXMgbm8gRU1CRUQgdGFnLgotICAgICAgTm9kZSAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7Ci0g
ICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0
eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1U
YWcpKSB7Ci0gICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxI
VE1MUGFyYW1FbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAt
Pm5hbWUoKTsKLSAgICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJzcmMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAibW92aWUiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY29kZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJ1cmwiKSkpCi0gICAgICAgICAgICAgICAgICB1cmwgPSBwLT52YWx1ZSgpOwotICAgICAg
ICAgICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJ0eXBlIikpIHsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gcC0+dmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgIGludCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7Ci0g
ICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgIHNl
cnZpY2VUeXBlID0gc2VydmljZVR5cGUubGVmdChwb3MpOwotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChuYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICBwYXJhbU5hbWVzLmFwcGVuZChwLT5uYW1lKCkpOwotICAgICAgICAgICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgICAK
LSAgICAgIC8vIFdoZW4gT0JKRUNUIGlzIHVzZWQgZm9yIGFuIGFwcGxldCB2aWEgU3VuJ3MgSmF2
YSBwbHVnaW4sIHRoZSBDT0RFQkFTRSBhdHRyaWJ1dGUgaW4gdGhlIHRhZwotICAgICAgLy8gcG9p
bnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2ZVggY29tcG9uZW50KSB3aGls
ZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcwotICAgICAgLy8gaW4gYSBQQVJBTSB0YWcu
IFNlZSA8aHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9wbHVnaW4vMS4yL2RvY3MvdGFncy5o
dG1sPi4gVGhpcyBtZWFucwotICAgICAgLy8gd2UgaGF2ZSB0byBleHBsaWNpdGx5IHN1cHByZXNz
IHRoZSB0YWcncyBDT0RFQkFTRSBhdHRyaWJ1dGUgaWYgdGhlcmUgaXMgbm9uZSBpbiBhIFBBUkFN
LAotICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4gd2lsbCBtaXNpbnRlcnByZXQgaXQuIFs0
MDA0NTMxXQotICAgICAgU3RyaW5nIGNvZGViYXNlOwotICAgICAgaWYgKCFlbWJlZCAmJiBNSU1F
VHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShzZXJ2aWNlVHlwZSkpIHsKLSAgICAg
ICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7Ci0gICAgICAgICAgdW5pcXVlUGFyYW1OYW1lcy5h
ZGQoY29kZWJhc2UuaW1wbCgpKTsgLy8gcHJldGVuZCB3ZSBmb3VuZCBpdCBpbiBhIFBBUkFNIGFs
cmVhZHkKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBvZiBl
aXRoZXIgdGhlIEVNQkVEIHRhZyBvciBPQkpFQ1QgdGFnIGludG8gYXJyYXlzLCBidXQgZG9uJ3Qg
b3ZlcnJpZGUgUEFSQU0gdmFsdWVzLgotICAgICAgTmFtZWRBdHRyTWFwKiBhdHRyaWJ1dGVzID0g
ZW1iZWRPck9iamVjdC0+YXR0cmlidXRlcygpOwotICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRlcy0+YXR0cmlidXRl
SXRlbShpKTsKLSAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gaXQtPm5h
bWUoKS5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAgaWYgKGVtYmVkIHx8ICF1bmlxdWVQYXJh
bU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgewotICAgICAgICAgICAgICAgICAgcGFyYW1O
YW1lcy5hcHBlbmQobmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICBwYXJhbVZhbHVl
cy5hcHBlbmQoaXQtPnZhbHVlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEg
dHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUuCi0gICAg
ICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgIG1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKG8tPmNsYXNzSWQoKSwgc2VydmljZVR5
cGUpOwotICAgICAgCi0gICAgICBpZiAoIWlzVVJMQWxsb3dlZChkb2N1bWVudCgpLCB1cmwpKQor
ICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIHNlcnZpY2VUeXBlOworICAgIFZlY3RvcjxTdHJp
bmc+IHBhcmFtTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7CisgICAgRnJh
bWUqIGZyYW1lID0gbV92aWV3LT5mcmFtZSgpOworCisgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50KiBvID0gc3RhdGlj
X2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVtZW50KCkpOworCisgICAgICAgIG8tPnNldE5l
ZWRXaWRnZXRVcGRhdGUoZmFsc2UpOworICAgICAgICBpZiAoIW8tPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKICAgICAgICAgICByZXR1cm47CiAKLSAgICAgIC8vIEZpbmQgb3V0IGlmIHdl
IHN1cHBvcnQgZmFsbGJhY2sgY29udGVudC4KLSAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0g
ZmFsc2U7Ci0gICAgICBmb3IgKE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAm
JiAhbV9oYXNGYWxsYmFja0NvbnRlbnQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
LSAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkgfHwgLy8gRGlzY291
bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgotICAgICAgICAgICAgICAoY2hpbGQtPmlzVGV4dE5vZGUo
KSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgp
KSkKLSAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwotICAgICAgfQot
ICAgICAgCi0gICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucykgewotICAgICAg
ICAgIEtVUkwgY29tcGxldGVkVVJMOwotICAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh1
cmwpOworICAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCisgICAgICAgIEhU
TUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKKyAgICAgICAgY29uc3QgUGx1Z2luRGF0YSogcGx1
Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFVzZUNoaWxkRW1iZWRPZk9iamVjdChvLCBwbHVnaW5EYXRhKSkgeworICAgICAgICAgICAgZm9y
IChOb2RlKiBjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAgICAgICAgICAgICAgICAg
ICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihjaGlsZCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVkIE9CSkVD
VCB0YWdzCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJF
RHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1CRUQgdGFnIGluc3Rl
YWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlHSFQuCisgICAgICAg
IEhUTUxFbGVtZW50ICplbWJlZE9yT2JqZWN0OworICAgICAgICBpZiAoZW1iZWQpIHsKKyAgICAg
ICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsKKyAgICAgICAgICAg
IHVybCA9IGVtYmVkLT51cmwoKTsKKyAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gZW1iZWQtPnNl
cnZpY2VUeXBlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1iZWRPck9iamVjdCA9
IChIVE1MRWxlbWVudCAqKW87CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIFVSTCBvciB0
eXBlIGRlZmluZWQgaW4gRU1CRUQsIHRyeSB0aGUgT0JKRUNUIHRhZy4KKyAgICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkpCisgICAgICAgICAgICB1cmwgPSBvLT51cmwoKTsKKyAgICAgICAgaWYgKHNl
cnZpY2VUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2Vydmlj
ZVR5cGUoKTsKKworICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNlRm9sZGluZ0hhc2g+
IHVuaXF1ZVBhcmFtTmFtZXM7CisKKyAgICAgICAgLy8gU2NhbiB0aGUgUEFSQU0gY2hpbGRyZW4u
CisgICAgICAgIC8vIEdldCB0aGUgVVJMIGFuZCB0eXBlIGZyb20gdGhlIHBhcmFtcyBpZiB3ZSBk
b24ndCBhbHJlYWR5IGhhdmUgdGhlbS4KKyAgICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZy
b20gdGhlIHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCisgICAgICAgIE5vZGUgKmNo
aWxkID0gby0+Zmlyc3RDaGlsZCgpOworICAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0Vt
cHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKKyAgICAgICAgICAg
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIHsKKyAgICAgICAgICAgICAgICBIVE1M
UGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAodXJsLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNyYyIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVybCIpKSkKKyAgICAgICAg
ICAgICAgICAgICAgdXJsID0gcC0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0eXBlIikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCgiOyIpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocG9zICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUg
PSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHVuaXF1ZVBhcmFtTmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1OYW1lcy5hcHBlbmQocC0+bmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXaGVuIE9CSkVDVCBpcyB1c2VkIGZvciBhbiBhcHBsZXQgdmlhIFN1bidz
IEphdmEgcGx1Z2luLCB0aGUgQ09ERUJBU0UgYXR0cmlidXRlIGluIHRoZSB0YWcKKyAgICAgICAg
Ly8gcG9pbnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2ZVggY29tcG9uZW50
KSB3aGlsZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcworICAgICAgICAvLyBpbiBhIFBB
UkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3BsdWdpbi8xLjIvZG9j
cy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHdlIGhhdmUgdG8gZXhwbGljaXRs
eSBzdXBwcmVzcyB0aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRlIGlmIHRoZXJlIGlzIG5vbmUg
aW4gYSBQQVJBTSwKKyAgICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4gd2lsbCBtaXNpbnRl
cnByZXQgaXQuIFs0MDA0NTMxXQorICAgICAgICBTdHJpbmcgY29kZWJhc2U7CisgICAgICAgIGlm
ICghZW1iZWQgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoc2Vydmlj
ZVR5cGUpKSB7CisgICAgICAgICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7CisgICAgICAgICAg
ICB1bmlxdWVQYXJhbU5hbWVzLmFkZChjb2RlYmFzZS5pbXBsKCkpOyAvLyBwcmV0ZW5kIHdlIGZv
dW5kIGl0IGluIGEgUEFSQU0gYWxyZWFkeQorICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAg
IGlmIChmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50VHlwZShjb21wbGV0
ZWRVUkwsIHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4pCi0gICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgYm9vbCBzdWNjZXNzID0g
ZnJhbWUtPmxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgQXRvbWljU3RyaW5nKG8t
Pm5hbWUoKSksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gICAgICBp
ZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCi0gICAgICAgICAgby0+cmVuZGVy
RmFsbGJhY2tDb250ZW50KCk7Ci0gIH0gZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKGVt
YmVkVGFnKSkgewotICAgICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxF
bWJlZEVsZW1lbnQqPihlbGVtZW50KCkpOwotICAgICAgby0+c2V0TmVlZFdpZGdldFVwZGF0ZShm
YWxzZSk7Ci0gICAgICB1cmwgPSBvLT51cmwoKTsKLSAgICAgIHNlcnZpY2VUeXBlID0gby0+c2Vy
dmljZVR5cGUoKTsKKyAgICAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBvZiBlaXRoZXIgdGhl
IEVNQkVEIHRhZyBvciBPQkpFQ1QgdGFnIGludG8gYXJyYXlzLCBidXQgZG9uJ3Qgb3ZlcnJpZGUg
UEFSQU0gdmFsdWVzLgorICAgICAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBlbWJlZE9y
T2JqZWN0LT5hdHRyaWJ1dGVzKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJ
dGVtKGkpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGl0LT5u
YW1lKCkubG9jYWxOYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVtYmVkIHx8ICF1bmlxdWVQ
YXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgeworICAgICAgICAgICAgICAgICAgICBw
YXJhbU5hbWVzLmFwcGVuZChuYW1lLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYg
c2VydmljZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIGlmICghaXNV
UkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgCi0g
ICAgICAvLyBhZGQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBlbWJlZCBvYmplY3QKLSAgICAg
IE5hbWVkQXR0ck1hcCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKLSAgICAgIGlmIChhKSB7Ci0gICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGEtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAg
ICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCkuc3RyaW5nKCkpOwot
ICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuc3RyaW5nKCkpOwot
ICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKG9ubHlDcmVhdGVOb25OZXRz
Y2FwZVBsdWdpbnMpIHsKLSAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAgICAgICAgICBp
ZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgIGNvbXBsZXRlZFVSTCA9IGZyYW1lLT5s
b2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBz
ZXJ2aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQotICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIG8tPmdldEF0dHJpYnV0ZShuYW1lQXR0ciks
IHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gIH0KKyAgICAgICAgLy8g
SWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUsIHRyeSB0byBtYXAgZnJvbSBhIHNwZWNpZmlj
IENMQVNTSUQgdG8gYSB0eXBlLgorICAgICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZCgpLCBzZXJ2aWNl
VHlwZSwgcGx1Z2luRGF0YSk7CisKKyAgICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQo
KSwgdXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGaW5kIG91dCBpZiB3
ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCisgICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50
ID0gZmFsc2U7CisgICAgICAgIGZvciAoTm9kZSAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNo
aWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhh
c1RhZ05hbWUoZW1iZWRUYWcpICYmICFjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIHx8IC8v
IERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICAgICAgICAoY2hpbGQtPmlz
VGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hp
dGVzcGFjZSgpKSkKKyAgICAgICAgICAgICAgICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9IHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucykg
eworICAgICAgICAgICAgS1VSTCBjb21wbGV0ZWRVUkw7CisgICAgICAgICAgICBpZiAoIXVybC5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJhbWUtPmxvYWRlcigp
LT5jb21wbGV0ZVVSTCh1cmwpOworCisgICAgICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBzZXJ2aWNlVHlwZSkgPT0g
T2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVz
dE9iamVjdCh0aGlzLCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkpLCBzZXJ2aWNlVHlwZSwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNG
YWxsYmFja0NvbnRlbnQpCisgICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsK
KyAgICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsKKyAgICAg
ICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihl
bGVtZW50KCkpOworICAgICAgICBvLT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKKyAgICAg
ICAgdXJsID0gby0+dXJsKCk7CisgICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGUo
KTsKKworICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50
KCksIHVybCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gYWRkIGFsbCBhdHRy
aWJ1dGVzIHNldCBvbiB0aGUgZW1iZWQgb2JqZWN0CisgICAgICAgIE5hbWVkQXR0ck1hcCogYSA9
IG8tPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgQXR0
cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICAgICAgcGFyYW1O
YW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVn
aW5zKSB7CisgICAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKKyAgICAgICAgICAgIGlmICgh
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRVUkwgPSBmcmFtZS0+bG9h
ZGVyKCktPmNvbXBsZXRlVVJMKHVybCk7CisKKyAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50VHlwZShjb21wbGV0ZWRVUkwsIHNlcnZpY2VUeXBl
KSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIH0KKworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnJlcXVlc3RPYmplY3Qo
dGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojps
YXlvdXQoKQpAQCAtMjY2LDcgKzI4Myw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6bGF5b3V0
KCkKIAogICAgIGlmICghbV93aWRnZXQgJiYgbV92aWV3KQogICAgICAgICBtX3ZpZXctPmFkZFdp
ZGdldFRvVXBkYXRlKHRoaXMpOwotICAgIAorCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25538</attachid>
            <date>2008-11-26 14:36:12 -0800</date>
            <delta_ts>2008-11-26 18:45:29 -0800</delta_ts>
            <desc>patch v8</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19681</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4Nzg1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMjYgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0yNSAgQ2FtZXJvbiBad2Fy
aWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzg3ODUpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQz
OSwxMCBAQAogI2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEVOQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUg
RU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBV
c2UgdGhlIFF0WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIg
Ki8KICNpZiBQTEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg3ODUp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA4LTExLTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlz
YWJsZSBBY3RpdmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAg
IEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VD
aGlsZEVtYmVkT2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6
dXBkYXRlV2lkZ2V0KToKKwogMjAwOC0xMS0yNiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NSwxODMgKzc2
LDE5OSBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlw
ZShjb25zdCBTdHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCitzdGF0aWMgaW5s
aW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiBjbGFzc0lkLCBT
dHJpbmcmIHNlcnZpY2VUeXBlLCBjb25zdCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKQogewotICAg
IC8vIEl0IGlzIEFjdGl2ZVgsIGJ1dCB0aGUgbnNwbHVnaW4gc3lzdGVtIGhhbmRsaW5nCi0gICAg
Ly8gc2hvdWxkIGFsc28gd29yaywgdGhhdCdzIHdoeSB3ZSBkb24ndCBvdmVycmlkZSB0aGUKLSAg
ICAvLyBzZXJ2aWNlVHlwZSB3aXRoIGFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyCi0gICAg
Ly8gYnV0IGxldCB0aGUgS1RyYWRlciBpbiBraHRtbHBhcnQ6OmNyZWF0ZVBhcnQoKSBkZXRlY3QK
LSAgICAvLyB0aGUgdXNlcidzIHByZWZlcmVuY2U6IGxhdW5jaCB3aXRoIGFjdGl2ZXggdmlld2Vy
IG9yCi0gICAgLy8gd2l0aCBuc3BsdWdpbnZpZXdlciAoTmlrbykKLSAgICBpZiAoY2xhc3NJZC5j
b250YWlucygiRDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIikpCi0gICAgICAg
IHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKLSAgICBlbHNl
IGlmIChjbGFzc0lkLmNvbnRhaW5zKCJDRkNEQUEwMy04QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkND
RkEiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2lu
IjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIwMkJGMjVENS04QzE3LTRCMjMtQkM4
MC1EMzQ4OEFCRERDNkIiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAidmlkZW8vcXVpY2t0aW1l
IjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIxNjZCMUJDQS0zRjlDLTExQ0YtODA3
NS00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1k
aXJlY3RvciI7Ci0gICAgZWxzZSBpZiAoY2xhc3NJZC5jb250YWlucygiNkJGNTJBNTItMzk0QS0x
MWQzLUIxNTMtMDBDMDRGNzlGQUE2IikpCi0gICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0
aW9uL3gtbXBsYXllcjIiOwotICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgQWN0aXZlIFggKE5pa28pCi0g
ICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gU2Vydmlj
ZVR5cGVIYXNoTWFwOworICAgIHN0YXRpYyBTZXJ2aWNlVHlwZUhhc2hNYXAqIHNlcnZpY2VUeXBl
RmFsbGJhY2tGb3JDbGFzc0lkID0gMDsKKyAgICBpZiAoIXNlcnZpY2VUeXBlRmFsbGJhY2tGb3JD
bGFzc0lkKSB7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkID0gbmV3IFNl
cnZpY2VUeXBlSGFzaE1hcDsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQt
PmFkZCgiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMUNGLTk2QjgtNDQ0NTUzNTQwMDAwIiwgImFwcGxp
Y2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIik7CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tG
b3JDbGFzc0lkLT5hZGQoImNsc2lkOkNGQ0RBQTAzLThCRTQtMTFDRi1CODRCLTAwMjBBRkJCQ0NG
QSIsICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKTsKKyAgICAgICAgc2VydmljZVR5cGVG
YWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiY2xzaWQ6MDJCRjI1RDUtOEMxNy00QjIzLUJDODAtRDM0
ODhBQkREQzZCIiwgInZpZGVvL3F1aWNrdGltZSIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxi
YWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDoxNjZCMUJDQS0zRjlDLTExQ0YtODA3NS00NDQ1NTM1
NDAwMDAiLCAiYXBwbGljYXRpb24veC1kaXJlY3RvciIpOworI2lmIEVOQUJMRShBQ1RJVkVYX1RZ
UEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNs
YXNzSWQtPmFkZCgiY2xzaWQ6NkJGNTJBNTItMzk0QS0xMUQzLUIxNTMtMDBDMDRGNzlGQUE2Iiwg
ImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiKTsKKyAgICAgICAgc2VydmljZVR5cGVGYWxsYmFja0Zv
ckNsYXNzSWQtPmFkZCgiY2xzaWQ6MjJENkYzMTItQjBGNi0xMUQwLTk0QUItMDA4MEM3NEM3RTk1
IiwgImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiKTsKKyNlbmRpZgogICAgIH0KKworICAgIGNvbnN0
IFN0cmluZyBmYWxsYmFja1NlcnZpY2VUeXBlID0gc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNz
SWQtPmdldChjbGFzc0lkKTsKKyAgICBpZiAocGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZShm
YWxsYmFja1NlcnZpY2VUeXBlKSkKKyAgICAgICAgc2VydmljZVR5cGUgPSBmYWxsYmFja1NlcnZp
Y2VUeXBlOworICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSAmJiBwbHVnaW5EYXRhLT5z
dXBwb3J0c01pbWVUeXBlKCJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCIpKQorICAgICAgICBzZXJ2
aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7Cit9CisKK3N0YXRpYyBib29sIHNo
b3VsZFVzZUNoaWxkRW1iZWRPZk9iamVjdChIVE1MT2JqZWN0RWxlbWVudCogbywgY29uc3QgUGx1
Z2luRGF0YSogcGx1Z2luRGF0YSkKK3sKKyAgICAvLyBBbiBPQkpFQ1QgdGFnIHdpdGggYSBjbGFz
c0lkIGlzIHNvbWUga2luZCBvZiBBY3RpdmVYIGNvbnRyb2wuICBUaGUgbW9zdAorICAgIC8vIGNv
bW1vbiBjb250cm9scyBoYXZlIHBhcmFsbGVsIHBsdWdpbiB2ZXJzaW9ucyBhbmQgdGh1cyBwb3Nz
aWJseSBuZXN0ZWQKKyAgICAvLyBFTUJFRCB0YWdzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhl
IE9CSkVDVCdzIGNsYXNzSWQgc2hvdWxkIG1hcCB0byBzb21lCisgICAgLy8ga25vd24gcGx1Z2lu
IE1JTUUgdHlwZS4gIElmIGl0IGRvZXNuJ3QsIGVpdGhlciB0aGUgY29udHJvbCBpcyB1bmxpa2Vs
eSB0bworICAgIC8vIGhhdmUgYSBwYXJhbGxlbCBwbHVnaW4gaW1wbGVtZW50YXRpb24gKHNvIHRo
ZXJlJ3Mgbm8gcG9pbnQgbG9va2luZworICAgIC8vIGluc2lkZSksIG9yIHdlJ3ZlIHB1cnBvc2Vm
dWxseSBkaXNhYmxlZCBjb252ZXJzaW9uIGZvciB0aGlzIGNsYXNzSWQsIGluCisgICAgLy8gd2hp
Y2ggY2FzZSB3ZSB3YW50IHRvIHVzZSB0aGUgQWN0aXZlWCBPQkpFQ1QgaW5zdGVhZCBvZiB0aGUg
RU1CRUQgYW55d2F5LgorICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKKyAgICBtYXBDbGFzc0lkVG9T
ZXJ2aWNlVHlwZShvLT5jbGFzc0lkKCksIHNlcnZpY2VUeXBlLCBwbHVnaW5EYXRhKTsKKyAgICBy
ZXR1cm4gc2VydmljZVR5cGUgIT0gImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0IjsKIH0KIAogdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2Nh
cGVQbHVnaW5zKQogewotICBTdHJpbmcgdXJsOwotICBTdHJpbmcgc2VydmljZVR5cGU7Ci0gIFZl
Y3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7Ci0gIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwot
ICBGcmFtZSogZnJhbWUgPSBtX3ZpZXctPmZyYW1lKCk7Ci0gIAotICBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLQotICAgICAgSFRNTE9iamVjdEVsZW1lbnQqIG8gPSBz
dGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGVsZW1lbnQoKSk7Ci0KLSAgICAgIG8tPnNl
dE5lZWRXaWRnZXRVcGRhdGUoZmFsc2UpOwotICAgICAgaWYgKCFvLT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxk
IEVNQkVEIHRhZy4KLSAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKLSAgICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNoaWxkOykgewotICAgICAgICAgIGlm
IChjaGlsZC0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsKLSAgICAgICAgICAgICAgZW1iZWQgPSBz
dGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0g
ICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9u
J3QgZGVzY2VuZCBpbnRvIG5lc3RlZCBPQkpFQ1QgdGFncwotICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgY2hpbGQgPSBjaGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndp
c2UgZGVzY2VuZCAoRU1CRURzIG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQotICAgICAgfQot
ICAgICAgCi0gICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1CRUQgdGFnIGlu
c3RlYWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlHSFQuCi0gICAg
ICBIVE1MRWxlbWVudCAqZW1iZWRPck9iamVjdDsKLSAgICAgIGlmIChlbWJlZCkgewotICAgICAg
ICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsKLSAgICAgICAgICB1cmwg
PSBlbWJlZC0+dXJsKCk7Ci0gICAgICAgICAgc2VydmljZVR5cGUgPSBlbWJlZC0+c2VydmljZVR5
cGUoKTsKLSAgICAgIH0gZWxzZQotICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1l
bnQgKilvOwotICAgICAgCi0gICAgICAvLyBJZiB0aGVyZSB3YXMgbm8gVVJMIG9yIHR5cGUgZGVm
aW5lZCBpbiBFTUJFRCwgdHJ5IHRoZSBPQkpFQ1QgdGFnLgotICAgICAgaWYgKHVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgdXJsID0gby0+dXJsKCk7Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNF
bXB0eSgpKQotICAgICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGUoKTsKLSAgICAg
IAotICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRpbmdIYXNoPiB1bmlxdWVQYXJh
bU5hbWVzOwotICAgICAgCi0gICAgICAvLyBTY2FuIHRoZSBQQVJBTSBjaGlsZHJlbi4KLSAgICAg
IC8vIEdldCB0aGUgVVJMIGFuZCB0eXBlIGZyb20gdGhlIHBhcmFtcyBpZiB3ZSBkb24ndCBhbHJl
YWR5IGhhdmUgdGhlbS4KLSAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXJh
bXMgaWYgdGhlcmUgaXMgbm8gRU1CRUQgdGFnLgotICAgICAgTm9kZSAqY2hpbGQgPSBvLT5maXJz
dENoaWxkKCk7Ci0gICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkgfHwgc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmhhc1Rh
Z05hbWUocGFyYW1UYWcpKSB7Ci0gICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnQqIHAgPSBz
dGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICBTdHJp
bmcgbmFtZSA9IHAtPm5hbWUoKTsKLSAgICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1l
LCAibW92aWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY29kZSIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJ1cmwiKSkpCi0gICAgICAgICAgICAgICAgICB1cmwgPSBwLT52YWx1
ZSgpOwotICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJ0eXBlIikpIHsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gcC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgIGludCBwb3MgPSBzZXJ2aWNlVHlwZS5m
aW5kKCI7Iik7Ci0gICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKQotICAgICAgICAgICAg
ICAgICAgICAgIHNlcnZpY2VUeXBlID0gc2VydmljZVR5cGUubGVmdChwb3MpOwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChuYW1lLmltcGwoKSk7Ci0gICAg
ICAgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwLT5uYW1lKCkpOwotICAgICAgICAgICAg
ICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICB9Ci0gICAgICAKLSAgICAgIC8vIFdoZW4gT0JKRUNUIGlzIHVzZWQgZm9yIGFuIGFwcGxldCB2
aWEgU3VuJ3MgSmF2YSBwbHVnaW4sIHRoZSBDT0RFQkFTRSBhdHRyaWJ1dGUgaW4gdGhlIHRhZwot
ICAgICAgLy8gcG9pbnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2ZVggY29t
cG9uZW50KSB3aGlsZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcwotICAgICAgLy8gaW4g
YSBQQVJBTSB0YWcuIFNlZSA8aHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9wbHVnaW4vMS4y
L2RvY3MvdGFncy5odG1sPi4gVGhpcyBtZWFucwotICAgICAgLy8gd2UgaGF2ZSB0byBleHBsaWNp
dGx5IHN1cHByZXNzIHRoZSB0YWcncyBDT0RFQkFTRSBhdHRyaWJ1dGUgaWYgdGhlcmUgaXMgbm9u
ZSBpbiBhIFBBUkFNLAotICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4gd2lsbCBtaXNpbnRl
cnByZXQgaXQuIFs0MDA0NTMxXQotICAgICAgU3RyaW5nIGNvZGViYXNlOwotICAgICAgaWYgKCFl
bWJlZCAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShzZXJ2aWNlVHlw
ZSkpIHsKLSAgICAgICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7Ci0gICAgICAgICAgdW5pcXVl
UGFyYW1OYW1lcy5hZGQoY29kZWJhc2UuaW1wbCgpKTsgLy8gcHJldGVuZCB3ZSBmb3VuZCBpdCBp
biBhIFBBUkFNIGFscmVhZHkKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gVHVybiB0aGUgYXR0
cmlidXRlcyBvZiBlaXRoZXIgdGhlIEVNQkVEIHRhZyBvciBPQkpFQ1QgdGFnIGludG8gYXJyYXlz
LCBidXQgZG9uJ3Qgb3ZlcnJpZGUgUEFSQU0gdmFsdWVzLgotICAgICAgTmFtZWRBdHRyTWFwKiBh
dHRyaWJ1dGVzID0gZW1iZWRPck9iamVjdC0+YXR0cmlidXRlcygpOwotICAgICAgaWYgKGF0dHJp
YnV0ZXMpIHsKLSAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRl
cy0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lID0gaXQtPm5hbWUoKS5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgICAgaWYgKGVtYmVkIHx8
ICF1bmlxdWVQYXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgewotICAgICAgICAgICAg
ICAgICAgcGFyYW1OYW1lcy5hcHBlbmQobmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAg
ICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvLyBJZiB3ZSBzdGlsbCBk
b24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBh
IHR5cGUuCi0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkKCku
aXNFbXB0eSgpKQotICAgICAgICAgIG1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKG8tPmNsYXNzSWQo
KSwgc2VydmljZVR5cGUpOwotICAgICAgCi0gICAgICBpZiAoIWlzVVJMQWxsb3dlZChkb2N1bWVu
dCgpLCB1cmwpKQorICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIHNlcnZpY2VUeXBlOworICAg
IFZlY3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1
ZXM7CisgICAgRnJhbWUqIGZyYW1lID0gbV92aWV3LT5mcmFtZSgpOworCisgICAgaWYgKGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50
KiBvID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVtZW50KCkpOworCisgICAg
ICAgIG8tPnNldE5lZWRXaWRnZXRVcGRhdGUoZmFsc2UpOworICAgICAgICBpZiAoIW8tPmlzRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICByZXR1cm47CiAKLSAgICAgIC8vIEZp
bmQgb3V0IGlmIHdlIHN1cHBvcnQgZmFsbGJhY2sgY29udGVudC4KLSAgICAgIG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gZmFsc2U7Ci0gICAgICBmb3IgKE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGls
ZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxsYmFja0NvbnRlbnQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGls
ZC0+aGFzVGFnTmFtZShlbWJlZFRhZykgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkg
fHwgLy8gRGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgotICAgICAgICAgICAgICAoY2hpbGQt
PmlzVGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5
V2hpdGVzcGFjZSgpKSkKLSAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSB0cnVl
OwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lu
cykgewotICAgICAgICAgIEtVUkwgY29tcGxldGVkVVJMOwotICAgICAgICAgIGlmICghdXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJhbWUtPmxvYWRlcigpLT5j
b21wbGV0ZVVSTCh1cmwpOworICAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcu
CisgICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKKyAgICAgICAgY29uc3QgUGx1
Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFVzZUNoaWxkRW1iZWRPZk9iamVjdChvLCBwbHVnaW5EYXRhKSkgeworICAg
ICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAgICAg
ICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8g
bmVzdGVkIE9CSkVDVCB0YWdzCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBk
ZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1C
RUQgdGFnIGluc3RlYWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlH
SFQuCisgICAgICAgIEhUTUxFbGVtZW50ICplbWJlZE9yT2JqZWN0OworICAgICAgICBpZiAoZW1i
ZWQpIHsKKyAgICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsK
KyAgICAgICAgICAgIHVybCA9IGVtYmVkLT51cmwoKTsKKyAgICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gZW1iZWQtPnNlcnZpY2VUeXBlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1i
ZWRPck9iamVjdCA9IChIVE1MRWxlbWVudCAqKW87CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2Fz
IG5vIFVSTCBvciB0eXBlIGRlZmluZWQgaW4gRU1CRUQsIHRyeSB0aGUgT0JKRUNUIHRhZy4KKyAg
ICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICB1cmwgPSBvLT51cmwoKTsKKyAg
ICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gby0+c2VydmljZVR5cGUoKTsKKworICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNl
Rm9sZGluZ0hhc2g+IHVuaXF1ZVBhcmFtTmFtZXM7CisKKyAgICAgICAgLy8gU2NhbiB0aGUgUEFS
QU0gY2hpbGRyZW4uCisgICAgICAgIC8vIEdldCB0aGUgVVJMIGFuZCB0eXBlIGZyb20gdGhlIHBh
cmFtcyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgdGhlbS4KKyAgICAgICAgLy8gR2V0IHRoZSBh
dHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCisgICAg
ICAgIE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOworICAgICAgICB3aGlsZSAoY2hpbGQg
JiYgKHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIHsKKyAgICAgICAg
ICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dCo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgInNyYyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVybCIp
KSkKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcC0+dmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0
eXBlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwLT52YWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCgiOyIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQocC0+bmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIE9CSkVDVCBpcyB1c2VkIGZvciBhbiBhcHBs
ZXQgdmlhIFN1bidzIEphdmEgcGx1Z2luLCB0aGUgQ09ERUJBU0UgYXR0cmlidXRlIGluIHRoZSB0
YWcKKyAgICAgICAgLy8gcG9pbnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2
ZVggY29tcG9uZW50KSB3aGlsZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcworICAgICAg
ICAvLyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3Bs
dWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHdlIGhhdmUg
dG8gZXhwbGljaXRseSBzdXBwcmVzcyB0aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRlIGlmIHRo
ZXJlIGlzIG5vbmUgaW4gYSBQQVJBTSwKKyAgICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4g
d2lsbCBtaXNpbnRlcnByZXQgaXQuIFs0MDA0NTMxXQorICAgICAgICBTdHJpbmcgY29kZWJhc2U7
CisgICAgICAgIGlmICghZW1iZWQgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlN
RVR5cGUoc2VydmljZVR5cGUpKSB7CisgICAgICAgICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7
CisgICAgICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChjb2RlYmFzZS5pbXBsKCkpOyAvLyBw
cmV0ZW5kIHdlIGZvdW5kIGl0IGluIGEgUEFSQU0gYWxyZWFkeQorICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50
VHlwZShjb21wbGV0ZWRVUkwsIHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQ
bHVnaW4pCi0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgYm9v
bCBzdWNjZXNzID0gZnJhbWUtPmxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgQXRv
bWljU3RyaW5nKG8tPm5hbWUoKSksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7Ci0gICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCi0gICAgICAg
ICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Ci0gIH0gZWxzZSBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSkgewotICAgICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRp
Y19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihlbGVtZW50KCkpOwotICAgICAgby0+c2V0TmVlZFdp
ZGdldFVwZGF0ZShmYWxzZSk7Ci0gICAgICB1cmwgPSBvLT51cmwoKTsKLSAgICAgIHNlcnZpY2VU
eXBlID0gby0+c2VydmljZVR5cGUoKTsKKyAgICAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBv
ZiBlaXRoZXIgdGhlIEVNQkVEIHRhZyBvciBPQkpFQ1QgdGFnIGludG8gYXJyYXlzLCBidXQgZG9u
J3Qgb3ZlcnJpZGUgUEFSQU0gdmFsdWVzLgorICAgICAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0
ZXMgPSBlbWJlZE9yT2JqZWN0LT5hdHRyaWJ1dGVzKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVu
Z3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVz
LT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSA9IGl0LT5uYW1lKCkubG9jYWxOYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVtYmVk
IHx8ICF1bmlxdWVQYXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChuYW1lLnN0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgaWYgKHVybC5p
c0VtcHR5KCkgJiYgc2VydmljZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgIHJldHVybjsKLSAg
ICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCi0gICAgICAgICAgcmV0dXJu
OwotICAgICAgCi0gICAgICAvLyBhZGQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBlbWJlZCBv
YmplY3QKLSAgICAgIE5hbWVkQXR0ck1hcCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKLSAgICAgIGlm
IChhKSB7Ci0gICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGEtPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7
Ci0gICAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCku
c3RyaW5nKCkpOwotICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCku
c3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKG9ubHlD
cmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpIHsKLSAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsK
LSAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgIGNvbXBsZXRlZFVS
TCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKLSAgICAgICAgICAKLSAgICAg
ICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29t
cGxldGVkVVJMLCBzZXJ2aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQot
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIG8tPmdldEF0dHJpYnV0
ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gIH0K
KyAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUsIHRyeSB0byBtYXAgZnJv
bSBhIHNwZWNpZmljIENMQVNTSUQgdG8gYSB0eXBlLgorICAgICAgICBpZiAoc2VydmljZVR5cGUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJ
ZCgpLCBzZXJ2aWNlVHlwZSwgcGx1Z2luRGF0YSk7CisKKyAgICAgICAgaWYgKCFpc1VSTEFsbG93
ZWQoZG9jdW1lbnQoKSwgdXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBG
aW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCisgICAgICAgIG1faGFzRmFs
bGJhY2tDb250ZW50ID0gZmFsc2U7CisgICAgICAgIGZvciAoTm9kZSAqY2hpbGQgPSBvLT5maXJz
dENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAm
JiAhY2hpbGQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpICYmICFjaGlsZC0+aGFzVGFnTmFtZShwYXJh
bVRhZykpIHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICAgICAg
ICAoY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKKyAgICAgICAgICAgICAgICBtX2hhc0ZhbGxiYWNrQ29u
dGVudCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNj
YXBlUGx1Z2lucykgeworICAgICAgICAgICAgS1VSTCBjb21wbGV0ZWRVUkw7CisgICAgICAgICAg
ICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJh
bWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh1cmwpOworCisgICAgICAgICAgICBpZiAoZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBzZXJ2
aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2Fk
ZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkpLCBz
ZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgICAgICBpZiAoIXN1Y2Nl
c3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCisgICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFj
a0NvbnRlbnQoKTsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShlbWJlZFRh
ZykpIHsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJl
ZEVsZW1lbnQqPihlbGVtZW50KCkpOworICAgICAgICBvLT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZh
bHNlKTsKKyAgICAgICAgdXJsID0gby0+dXJsKCk7CisgICAgICAgIHNlcnZpY2VUeXBlID0gby0+
c2VydmljZVR5cGUoKTsKKworICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2aWNlVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNVUkxBbGxv
d2VkKGRvY3VtZW50KCksIHVybCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
YWRkIGFsbCBhdHRyaWJ1dGVzIHNldCBvbiB0aGUgZW1iZWQgb2JqZWN0CisgICAgICAgIE5hbWVk
QXR0ck1hcCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbmx5Q3JlYXRlTm9u
TmV0c2NhcGVQbHVnaW5zKSB7CisgICAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKKyAgICAg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRVUkwg
PSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHVybCk7CisKKyAgICAgICAgICAgIGlmIChm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50VHlwZShjb21wbGV0ZWRVUkws
IHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4pCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIH0KKworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnJl
cXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNl
VHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJQ
YXJ0T2JqZWN0OjpsYXlvdXQoKQpAQCAtMjY2LDcgKzI4Myw3IEBAIHZvaWQgUmVuZGVyUGFydE9i
amVjdDo6bGF5b3V0KCkKIAogICAgIGlmICghbV93aWRnZXQgJiYgbV92aWV3KQogICAgICAgICBt
X3ZpZXctPmFkZFdpZGdldFRvVXBkYXRlKHRoaXMpOwotICAgIAorCiAgICAgc2V0TmVlZHNMYXlv
dXQoZmFsc2UpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25547</attachid>
            <date>2008-11-26 18:45:29 -0800</date>
            <delta_ts>2008-12-05 14:20:47 -0800</delta_ts>
            <desc>patch v9</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19852</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4Nzg1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMjYgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjgxNAorICAgICAgICBBbGxvdyBwb3J0cyB0byBkaXNhYmxlIEFjdGl2ZVgtPk5QQVBJ
IGNvbnZlcnNpb24gZm9yIE1lZGlhIFBsYXllci4KKyAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBv
ZiBtaXNjZWxsYW5lb3VzIEFjdGl2ZVggb2JqZWN0cy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOiBBZGQgYW5vdGhlciBFTkFCTEUoLi4uKS4KKwogMjAwOC0xMS0yNSAgQ2FtZXJvbiBad2Fy
aWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMzg3ODUpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQz
OSwxMCBAQAogI2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEVOQUJMRV9BQ1RJVkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUikKKyNkZWZpbmUg
RU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKKyNlbmRpZgorCiAvKiBV
c2UgdGhlIFF0WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIg
Ki8KICNpZiBQTEFURk9STShRVCkKICNpZiAhRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg3ODUp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA4LTExLTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQKKyAgICAgICAgQWxsb3cgcG9ydHMgdG8gZGlz
YWJsZSBBY3RpdmVYLT5OUEFQSSBjb252ZXJzaW9uIGZvciBNZWRpYSBQbGF5ZXIuCisgICAgICAg
IEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzY2VsbGFuZW91cyBBY3RpdmVYIG9iamVjdHMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VD
aGlsZEVtYmVkT2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6
dXBkYXRlV2lkZ2V0KToKKwogMjAwOC0xMS0yNiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NSwxODMgKzc2
LDIwNCBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlw
ZShjb25zdCBTdHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCitzdGF0aWMgaW5s
aW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiBjbGFzc0lkLCBT
dHJpbmcmIHNlcnZpY2VUeXBlLCBjb25zdCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKQogewotICAg
IC8vIEl0IGlzIEFjdGl2ZVgsIGJ1dCB0aGUgbnNwbHVnaW4gc3lzdGVtIGhhbmRsaW5nCi0gICAg
Ly8gc2hvdWxkIGFsc28gd29yaywgdGhhdCdzIHdoeSB3ZSBkb24ndCBvdmVycmlkZSB0aGUKLSAg
ICAvLyBzZXJ2aWNlVHlwZSB3aXRoIGFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyCi0gICAg
Ly8gYnV0IGxldCB0aGUgS1RyYWRlciBpbiBraHRtbHBhcnQ6OmNyZWF0ZVBhcnQoKSBkZXRlY3QK
LSAgICAvLyB0aGUgdXNlcidzIHByZWZlcmVuY2U6IGxhdW5jaCB3aXRoIGFjdGl2ZXggdmlld2Vy
IG9yCi0gICAgLy8gd2l0aCBuc3BsdWdpbnZpZXdlciAoTmlrbykKLSAgICBpZiAoY2xhc3NJZC5j
b250YWlucygiRDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIikpCi0gICAgICAg
IHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKLSAgICBlbHNl
IGlmIChjbGFzc0lkLmNvbnRhaW5zKCJDRkNEQUEwMy04QkU0LTExY2YtQjg0Qi0wMDIwQUZCQkND
RkEiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2lu
IjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIwMkJGMjVENS04QzE3LTRCMjMtQkM4
MC1EMzQ4OEFCRERDNkIiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAidmlkZW8vcXVpY2t0aW1l
IjsKLSAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCIxNjZCMUJDQS0zRjlDLTExQ0YtODA3
NS00NDQ1NTM1NDAwMDAiKSkKLSAgICAgICAgc2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1k
aXJlY3RvciI7Ci0gICAgZWxzZSBpZiAoY2xhc3NJZC5jb250YWlucygiNkJGNTJBNTItMzk0QS0x
MWQzLUIxNTMtMDBDMDRGNzlGQUE2IikpCi0gICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0
aW9uL3gtbXBsYXllcjIiOwotICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgQWN0aXZlIFggKE5pa28pCi0g
ICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKKyAg
ICAvLyBSZXR1cm4gZWFybHkgaWYgY2xhc3NJZCBpcyBlbXB0eSAoc2luY2Ugd2Ugd29uJ3QgZG8g
YW55dGhpbmcgYmVsb3cpLgorICAgIC8vIEZ1cnRoZXJtb3JlLCBpZiBjbGFzc0lkIGlzIG51bGws
IGNhbGxpbmcgZ2V0KCkgYmVsb3cgd2lsbCBjcmFzaC4KKyAgICBpZiAoY2xhc3NJZC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
ZywgQ2FzZUZvbGRpbmdIYXNoPiBTZXJ2aWNlVHlwZUhhc2hNYXA7CisgICAgc3RhdGljIFNlcnZp
Y2VUeXBlSGFzaE1hcCogc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQgPSAwOworICAgIGlm
ICghc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQpIHsKKyAgICAgICAgc2VydmljZVR5cGVG
YWxsYmFja0ZvckNsYXNzSWQgPSBuZXcgU2VydmljZVR5cGVIYXNoTWFwOworICAgICAgICBzZXJ2
aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDpEMjdDREI2RS1BRTZELTExQ0Yt
OTZCOC00NDQ1NTM1NDAwMDAiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKTsKKyAg
ICAgICAgc2VydmljZVR5cGVGYWxsYmFja0ZvckNsYXNzSWQtPmFkZCgiY2xzaWQ6Q0ZDREFBMDMt
OEJFNC0xMUNGLUI4NEItMDAyMEFGQkJDQ0ZBIiwgImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdp
biIpOworICAgICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDow
MkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkIiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgICAgIHNlcnZpY2VUeXBlRmFsbGJhY2tGb3JDbGFzc0lkLT5hZGQoImNsc2lkOjE2NkIx
QkNBLTNGOUMtMTFDRi04MDc1LTQ0NDU1MzU0MDAwMCIsICJhcHBsaWNhdGlvbi94LWRpcmVjdG9y
Iik7CisjaWYgRU5BQkxFKEFDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSKQorICAgICAg
ICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDo2QkY1MkE1Mi0zOTRB
LTExRDMtQjE1My0wMEMwNEY3OUZBQTYiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOworICAg
ICAgICBzZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+YWRkKCJjbHNpZDoyMkQ2RjMxMi1C
MEY2LTExRDAtOTRBQi0wMDgwQzc0QzdFOTUiLCAiYXBwbGljYXRpb24veC1tcGxheWVyMiIpOwor
I2VuZGlmCiAgICAgfQorCisgICAgY29uc3QgU3RyaW5nIGZhbGxiYWNrU2VydmljZVR5cGUgPSBz
ZXJ2aWNlVHlwZUZhbGxiYWNrRm9yQ2xhc3NJZC0+Z2V0KGNsYXNzSWQpOworICAgIGlmIChwbHVn
aW5EYXRhLT5zdXBwb3J0c01pbWVUeXBlKGZhbGxiYWNrU2VydmljZVR5cGUpKQorICAgICAgICBz
ZXJ2aWNlVHlwZSA9IGZhbGxiYWNrU2VydmljZVR5cGU7CisgICAgZWxzZSBpZiAocGx1Z2luRGF0
YS0+c3VwcG9ydHNNaW1lVHlwZSgiYXBwbGljYXRpb24veC1vbGVvYmplY3QiKSkKKyAgICAgICAg
c2VydmljZVR5cGUgPSAiYXBwbGljYXRpb24veC1vbGVvYmplY3QiOworfQorCitzdGF0aWMgYm9v
bCBzaG91bGRVc2VDaGlsZEVtYmVkT2ZPYmplY3QoSFRNTE9iamVjdEVsZW1lbnQqIG8sIGNvbnN0
IFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEpCit7CisgICAgLy8gQW4gT0JKRUNUIHRhZyB3aXRoIGEg
Y2xhc3NJZCBpcyBzb21lIGtpbmQgb2YgQWN0aXZlWCBjb250cm9sLiAgVGhlIG1vc3QKKyAgICAv
LyBjb21tb24gY29udHJvbHMgaGF2ZSBwYXJhbGxlbCBwbHVnaW4gdmVyc2lvbnMgYW5kIHRodXMg
cG9zc2libHkgbmVzdGVkCisgICAgLy8gRU1CRUQgdGFncy4gIElmIHRoaXMgaXMgdGhlIGNhc2Us
IHRoZSBPQkpFQ1QncyBjbGFzc0lkIHNob3VsZCBtYXAgdG8gc29tZQorICAgIC8vIGtub3duIHBs
dWdpbiBNSU1FIHR5cGUuICBJZiBpdCBkb2Vzbid0LCBlaXRoZXIgdGhlIGNvbnRyb2wgaXMgdW5s
aWtlbHkgdG8KKyAgICAvLyBoYXZlIGEgcGFyYWxsZWwgcGx1Z2luIGltcGxlbWVudGF0aW9uIChz
byB0aGVyZSdzIG5vIHBvaW50IGxvb2tpbmcKKyAgICAvLyBpbnNpZGUpLCBvciB3ZSd2ZSBwdXJw
b3NlZnVsbHkgZGlzYWJsZWQgY29udmVyc2lvbiBmb3IgdGhpcyBjbGFzc0lkLCBpbgorICAgIC8v
IHdoaWNoIGNhc2Ugd2Ugd2FudCB0byB1c2UgdGhlIEFjdGl2ZVggT0JKRUNUIGluc3RlYWQgb2Yg
dGhlIEVNQkVEIGFueXdheS4KKyAgICBTdHJpbmcgc2VydmljZVR5cGU7CisgICAgbWFwQ2xhc3NJ
ZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZCgpLCBzZXJ2aWNlVHlwZSwgcGx1Z2luRGF0YSk7Cisg
ICAgcmV0dXJuIHNlcnZpY2VUeXBlICE9ICJhcHBsaWNhdGlvbi94LW9sZW9iamVjdCI7CiB9CiAK
IHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wgb25seUNyZWF0ZU5vbk5l
dHNjYXBlUGx1Z2lucykKIHsKLSAgU3RyaW5nIHVybDsKLSAgU3RyaW5nIHNlcnZpY2VUeXBlOwot
ICBWZWN0b3I8U3RyaW5nPiBwYXJhbU5hbWVzOwotICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVl
czsKLSAgRnJhbWUqIGZyYW1lID0gbV92aWV3LT5mcmFtZSgpOwotICAKLSAgaWYgKGVsZW1lbnQo
KS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcg
c2VydmljZVR5cGU7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1OYW1lczsKKyAgICBWZWN0b3I8
U3RyaW5nPiBwYXJhbVZhbHVlczsKKyAgICBGcmFtZSogZnJhbWUgPSBtX3ZpZXctPmZyYW1lKCk7
CiAKLSAgICAgIEhUTUxPYmplY3RFbGVtZW50KiBvID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVs
ZW1lbnQqPihlbGVtZW50KCkpOworICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkgeworICAgICAgICBIVE1MT2JqZWN0RWxlbWVudCogbyA9IHN0YXRpY19jYXN0PEhUTUxP
YmplY3RFbGVtZW50Kj4oZWxlbWVudCgpKTsKIAotICAgICAgby0+c2V0TmVlZFdpZGdldFVwZGF0
ZShmYWxzZSk7Ci0gICAgICBpZiAoIW8tPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgLy8gQ2hlY2sgZm9yIGEgY2hpbGQgRU1CRUQgdGFnLgotICAg
ICAgSFRNTEVtYmVkRWxlbWVudCogZW1iZWQgPSAwOwotICAgICAgZm9yIChOb2RlKiBjaGlsZCA9
IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Ci0gICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKGVtYmVkVGFnKSkgewotICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxF
bWJlZEVsZW1lbnQqPihjaGlsZCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0g
ZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8g
bmVzdGVkIE9CSkVDVCB0YWdzCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJF
RHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCi0gICAgICB9Ci0gICAgICAKLSAgICAgIC8v
IFVzZSB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBFTUJFRCB0YWcgaW5zdGVhZCBvZiB0aGUgT0JK
RUNUIHRhZyBpbmNsdWRpbmcgV0lEVEggYW5kIEhFSUdIVC4KLSAgICAgIEhUTUxFbGVtZW50ICpl
bWJlZE9yT2JqZWN0OwotICAgICAgaWYgKGVtYmVkKSB7Ci0gICAgICAgICAgZW1iZWRPck9iamVj
dCA9IChIVE1MRWxlbWVudCAqKWVtYmVkOwotICAgICAgICAgIHVybCA9IGVtYmVkLT51cmwoKTsK
LSAgICAgICAgICBzZXJ2aWNlVHlwZSA9IGVtYmVkLT5zZXJ2aWNlVHlwZSgpOwotICAgICAgfSBl
bHNlCi0gICAgICAgICAgZW1iZWRPck9iamVjdCA9IChIVE1MRWxlbWVudCAqKW87Ci0gICAgICAK
LSAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBVUkwgb3IgdHlwZSBkZWZpbmVkIGluIEVNQkVELCB0
cnkgdGhlIE9CSkVDVCB0YWcuCi0gICAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICB1
cmwgPSBvLT51cmwoKTsKLSAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgc2VydmljZVR5cGUgPSBvLT5zZXJ2aWNlVHlwZSgpOwotICAgICAgCi0gICAgICBIYXNoU2V0
PFN0cmluZ0ltcGwqLCBDYXNlRm9sZGluZ0hhc2g+IHVuaXF1ZVBhcmFtTmFtZXM7Ci0gICAgICAK
LSAgICAgIC8vIFNjYW4gdGhlIFBBUkFNIGNoaWxkcmVuLgotICAgICAgLy8gR2V0IHRoZSBVUkwg
YW5kIHR5cGUgZnJvbSB0aGUgcGFyYW1zIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSB0aGVtLgot
ICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBpcyBu
byBFTUJFRCB0YWcuCi0gICAgICBOb2RlICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsKLSAgICAg
IHdoaWxlIChjaGlsZCAmJiAodXJsLmlzRW1wdHkoKSB8fCBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkg
fHwgIWVtYmVkKSkgewotICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykp
IHsKLSAgICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PEhUTUxQ
YXJhbUVsZW1lbnQqPihjaGlsZCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcC0+bmFt
ZSgpOwotICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgInNyYyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
InVybCIpKSkKLSAgICAgICAgICAgICAgICAgIHVybCA9IHAtPnZhbHVlKCk7Ci0gICAgICAgICAg
ICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
InR5cGUiKSkgewotICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwLT52YWx1ZSgpOwot
ICAgICAgICAgICAgICAgICAgaW50IHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoIjsiKTsKLSAgICAg
ICAgICAgICAgICAgIGlmIChwb3MgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgc2Vydmlj
ZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgaWYgKCFlbWJlZCAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
IHVuaXF1ZVBhcmFtTmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgIHBh
cmFtTmFtZXMuYXBwZW5kKHAtPm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICBwYXJhbVZhbHVl
cy5hcHBlbmQocC0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAg
ICAgLy8gV2hlbiBPQkpFQ1QgaXMgdXNlZCBmb3IgYW4gYXBwbGV0IHZpYSBTdW4ncyBKYXZhIHBs
dWdpbiwgdGhlIENPREVCQVNFIGF0dHJpYnV0ZSBpbiB0aGUgdGFnCi0gICAgICAvLyBwb2ludHMg
dG8gdGhlIEphdmEgcGx1Z2luIGl0c2VsZiAoYW4gQWN0aXZlWCBjb21wb25lbnQpIHdoaWxlIHRo
ZSBhY3R1YWwgYXBwbGV0IENPREVCQVNFIGlzCi0gICAgICAvLyBpbiBhIFBBUkFNIHRhZy4gU2Vl
IDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3BsdWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+
LiBUaGlzIG1lYW5zCi0gICAgICAvLyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc3VwcHJlc3MgdGhl
IHRhZydzIENPREVCQVNFIGF0dHJpYnV0ZSBpZiB0aGVyZSBpcyBub25lIGluIGEgUEFSQU0sCi0g
ICAgICAvLyBlbHNlIG91ciBKYXZhIHBsdWdpbiB3aWxsIG1pc2ludGVycHJldCBpdC4gWzQwMDQ1
MzFdCi0gICAgICBTdHJpbmcgY29kZWJhc2U7Ci0gICAgICBpZiAoIWVtYmVkICYmIE1JTUVUeXBl
UmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKHNlcnZpY2VUeXBlKSkgewotICAgICAgICAg
IGNvZGViYXNlID0gImNvZGViYXNlIjsKLSAgICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChj
b2RlYmFzZS5pbXBsKCkpOyAvLyBwcmV0ZW5kIHdlIGZvdW5kIGl0IGluIGEgUEFSQU0gYWxyZWFk
eQotICAgICAgfQotICAgICAgCi0gICAgICAvLyBUdXJuIHRoZSBhdHRyaWJ1dGVzIG9mIGVpdGhl
ciB0aGUgRU1CRUQgdGFnIG9yIE9CSkVDVCB0YWcgaW50byBhcnJheXMsIGJ1dCBkb24ndCBvdmVy
cmlkZSBQQVJBTSB2YWx1ZXMuCi0gICAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBlbWJl
ZE9yT2JqZWN0LT5hdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVt
KGkpOwotICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBpdC0+bmFtZSgp
LmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgICBpZiAoZW1iZWQgfHwgIXVuaXF1ZVBhcmFtTmFt
ZXMuY29udGFpbnMobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICBwYXJhbU5hbWVz
LmFwcGVuZChuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFw
cGVuZChpdC0+dmFsdWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSB0eXBl
LCB0cnkgdG8gbWFwIGZyb20gYSBzcGVjaWZpYyBDTEFTU0lEIHRvIGEgdHlwZS4KLSAgICAgIGlm
IChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgIW8tPmNsYXNzSWQoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZCgpLCBzZXJ2aWNlVHlwZSk7
Ci0gICAgICAKLSAgICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCisgICAg
ICAgIG8tPnNldE5lZWRXaWRnZXRVcGRhdGUoZmFsc2UpOworICAgICAgICBpZiAoIW8tPmlzRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICByZXR1cm47CiAKLSAgICAgIC8vIEZp
bmQgb3V0IGlmIHdlIHN1cHBvcnQgZmFsbGJhY2sgY29udGVudC4KLSAgICAgIG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gZmFsc2U7Ci0gICAgICBmb3IgKE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGls
ZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxsYmFja0NvbnRlbnQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGls
ZC0+aGFzVGFnTmFtZShlbWJlZFRhZykgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkg
fHwgLy8gRGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgotICAgICAgICAgICAgICAoY2hpbGQt
PmlzVGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5
V2hpdGVzcGFjZSgpKSkKLSAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSB0cnVl
OwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lu
cykgewotICAgICAgICAgIEtVUkwgY29tcGxldGVkVVJMOwotICAgICAgICAgIGlmICghdXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJhbWUtPmxvYWRlcigpLT5j
b21wbGV0ZVVSTCh1cmwpOworICAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcu
CisgICAgICAgIEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkID0gMDsKKyAgICAgICAgY29uc3QgUGx1
Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFVzZUNoaWxkRW1iZWRPZk9iamVjdChvLCBwbHVnaW5EYXRhKSkgeworICAg
ICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAgICAg
ICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8g
bmVzdGVkIE9CSkVDVCB0YWdzCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBk
ZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRU1C
RUQgdGFnIGluc3RlYWQgb2YgdGhlIE9CSkVDVCB0YWcgaW5jbHVkaW5nIFdJRFRIIGFuZCBIRUlH
SFQuCisgICAgICAgIEhUTUxFbGVtZW50ICplbWJlZE9yT2JqZWN0OworICAgICAgICBpZiAoZW1i
ZWQpIHsKKyAgICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsK
KyAgICAgICAgICAgIHVybCA9IGVtYmVkLT51cmwoKTsKKyAgICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gZW1iZWQtPnNlcnZpY2VUeXBlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1i
ZWRPck9iamVjdCA9IChIVE1MRWxlbWVudCAqKW87CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2Fz
IG5vIFVSTCBvciB0eXBlIGRlZmluZWQgaW4gRU1CRUQsIHRyeSB0aGUgT0JKRUNUIHRhZy4KKyAg
ICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICB1cmwgPSBvLT51cmwoKTsKKyAg
ICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gby0+c2VydmljZVR5cGUoKTsKKworICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNl
Rm9sZGluZ0hhc2g+IHVuaXF1ZVBhcmFtTmFtZXM7CisKKyAgICAgICAgLy8gU2NhbiB0aGUgUEFS
QU0gY2hpbGRyZW4uCisgICAgICAgIC8vIEdldCB0aGUgVVJMIGFuZCB0eXBlIGZyb20gdGhlIHBh
cmFtcyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgdGhlbS4KKyAgICAgICAgLy8gR2V0IHRoZSBh
dHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCisgICAg
ICAgIE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOworICAgICAgICB3aGlsZSAoY2hpbGQg
JiYgKHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIHsKKyAgICAgICAg
ICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dCo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgInNyYyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVybCIp
KSkKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcC0+dmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0
eXBlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwLT52YWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCgiOyIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQocC0+bmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIE9CSkVDVCBpcyB1c2VkIGZvciBhbiBhcHBs
ZXQgdmlhIFN1bidzIEphdmEgcGx1Z2luLCB0aGUgQ09ERUJBU0UgYXR0cmlidXRlIGluIHRoZSB0
YWcKKyAgICAgICAgLy8gcG9pbnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2
ZVggY29tcG9uZW50KSB3aGlsZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcworICAgICAg
ICAvLyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3Bs
dWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHdlIGhhdmUg
dG8gZXhwbGljaXRseSBzdXBwcmVzcyB0aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRlIGlmIHRo
ZXJlIGlzIG5vbmUgaW4gYSBQQVJBTSwKKyAgICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4g
d2lsbCBtaXNpbnRlcnByZXQgaXQuIFs0MDA0NTMxXQorICAgICAgICBTdHJpbmcgY29kZWJhc2U7
CisgICAgICAgIGlmICghZW1iZWQgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlN
RVR5cGUoc2VydmljZVR5cGUpKSB7CisgICAgICAgICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7
CisgICAgICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChjb2RlYmFzZS5pbXBsKCkpOyAvLyBw
cmV0ZW5kIHdlIGZvdW5kIGl0IGluIGEgUEFSQU0gYWxyZWFkeQorICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50
VHlwZShjb21wbGV0ZWRVUkwsIHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQ
bHVnaW4pCi0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgYm9v
bCBzdWNjZXNzID0gZnJhbWUtPmxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgQXRv
bWljU3RyaW5nKG8tPm5hbWUoKSksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7Ci0gICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCi0gICAgICAg
ICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Ci0gIH0gZWxzZSBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSkgewotICAgICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRp
Y19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihlbGVtZW50KCkpOwotICAgICAgby0+c2V0TmVlZFdp
ZGdldFVwZGF0ZShmYWxzZSk7Ci0gICAgICB1cmwgPSBvLT51cmwoKTsKLSAgICAgIHNlcnZpY2VU
eXBlID0gby0+c2VydmljZVR5cGUoKTsKKyAgICAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBv
ZiBlaXRoZXIgdGhlIEVNQkVEIHRhZyBvciBPQkpFQ1QgdGFnIGludG8gYXJyYXlzLCBidXQgZG9u
J3Qgb3ZlcnJpZGUgUEFSQU0gdmFsdWVzLgorICAgICAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0
ZXMgPSBlbWJlZE9yT2JqZWN0LT5hdHRyaWJ1dGVzKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVu
Z3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVz
LT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSA9IGl0LT5uYW1lKCkubG9jYWxOYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVtYmVk
IHx8ICF1bmlxdWVQYXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChuYW1lLnN0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgaWYgKHVybC5p
c0VtcHR5KCkgJiYgc2VydmljZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgIHJldHVybjsKLSAg
ICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCi0gICAgICAgICAgcmV0dXJu
OwotICAgICAgCi0gICAgICAvLyBhZGQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBlbWJlZCBv
YmplY3QKLSAgICAgIE5hbWVkQXR0ck1hcCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKLSAgICAgIGlm
IChhKSB7Ci0gICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGEtPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7
Ci0gICAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCku
c3RyaW5nKCkpOwotICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCku
c3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKG9ubHlD
cmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpIHsKLSAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsK
LSAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgIGNvbXBsZXRlZFVS
TCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKLSAgICAgICAgICAKLSAgICAg
ICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29t
cGxldGVkVVJMLCBzZXJ2aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQot
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIG8tPmdldEF0dHJpYnV0
ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gIH0K
KyAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUsIHRyeSB0byBtYXAgZnJv
bSBhIHNwZWNpZmljIENMQVNTSUQgdG8gYSB0eXBlLgorICAgICAgICBpZiAoc2VydmljZVR5cGUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJ
ZCgpLCBzZXJ2aWNlVHlwZSwgcGx1Z2luRGF0YSk7CisKKyAgICAgICAgaWYgKCFpc1VSTEFsbG93
ZWQoZG9jdW1lbnQoKSwgdXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBG
aW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCisgICAgICAgIG1faGFzRmFs
bGJhY2tDb250ZW50ID0gZmFsc2U7CisgICAgICAgIGZvciAoTm9kZSAqY2hpbGQgPSBvLT5maXJz
dENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAm
JiAhY2hpbGQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpICYmICFjaGlsZC0+aGFzVGFnTmFtZShwYXJh
bVRhZykpIHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICAgICAg
ICAoY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKKyAgICAgICAgICAgICAgICBtX2hhc0ZhbGxiYWNrQ29u
dGVudCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNj
YXBlUGx1Z2lucykgeworICAgICAgICAgICAgS1VSTCBjb21wbGV0ZWRVUkw7CisgICAgICAgICAg
ICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJh
bWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh1cmwpOworCisgICAgICAgICAgICBpZiAoZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBzZXJ2
aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2Fk
ZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkpLCBz
ZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgICAgICBpZiAoIXN1Y2Nl
c3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCisgICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFj
a0NvbnRlbnQoKTsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShlbWJlZFRh
ZykpIHsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJl
ZEVsZW1lbnQqPihlbGVtZW50KCkpOworICAgICAgICBvLT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZh
bHNlKTsKKyAgICAgICAgdXJsID0gby0+dXJsKCk7CisgICAgICAgIHNlcnZpY2VUeXBlID0gby0+
c2VydmljZVR5cGUoKTsKKworICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2aWNlVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNVUkxBbGxv
d2VkKGRvY3VtZW50KCksIHVybCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
YWRkIGFsbCBhdHRyaWJ1dGVzIHNldCBvbiB0aGUgZW1iZWQgb2JqZWN0CisgICAgICAgIE5hbWVk
QXR0ck1hcCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbmx5Q3JlYXRlTm9u
TmV0c2NhcGVQbHVnaW5zKSB7CisgICAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKKyAgICAg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRVUkwg
PSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHVybCk7CisKKyAgICAgICAgICAgIGlmIChm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50VHlwZShjb21wbGV0ZWRVUkws
IHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4pCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIH0KKworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnJl
cXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNl
VHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJQ
YXJ0T2JqZWN0OjpsYXlvdXQoKQpAQCAtMjY2LDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyUGFydE9i
amVjdDo6bGF5b3V0KCkKIAogICAgIGlmICghbV93aWRnZXQgJiYgbV92aWV3KQogICAgICAgICBt
X3ZpZXctPmFkZFdpZGdldFRvVXBkYXRlKHRoaXMpOwotICAgIAorCiAgICAgc2V0TmVlZHNMYXlv
dXQoZmFsc2UpOwogfQogCg==
</data>
<flag name="review"
          id="11883"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>