<?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>32884</bug_id>
          
          <creation_ts>2009-12-22 15:07:32 -0800</creation_ts>
          <short_desc>CSS2.1 Counters not updated when new elements are inserted in the DOM.</short_desc>
          <delta_ts>2010-01-15 18:14:39 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>11031</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carol Szabo">carol</reporter>
          <assigned_to name="Carol Szabo">carol</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>hamaji</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174428</commentid>
    <comment_count>0</comment_count>
      <attachid>45407</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-12-22 15:07:32 -0800</bug_when>
    <thetext>Created attachment 45407
Test Case

When new elements are inserted in the DOM that affect the values of existing counter nodes, the values of these nodes are not updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174429</commentid>
    <comment_count>1</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-12-22 15:08:01 -0800</bug_when>
    <thetext>Patch to follow soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174806</commentid>
    <comment_count>2</comment_count>
      <attachid>45474</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-12-24 13:02:20 -0800</bug_when>
    <thetext>Created attachment 45474
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174807</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-24 13:03:36 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45474 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179949</commentid>
    <comment_count>4</comment_count>
      <attachid>46393</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-12 13:03:31 -0800</bug_when>
    <thetext>Created attachment 46393
Proposed Patch; A few function name changes and performance improvements over last submission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179970</commentid>
    <comment_count>5</comment_count>
      <attachid>46393</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-12 13:51:47 -0800</bug_when>
    <thetext>Comment on attachment 46393
Proposed Patch; A few function name changes and performance improvements over last submission.

&gt; +    for (next = first;; next = next-&gt;m_nextSibling) {

Normally we put a space between the semicolons in lines like this one.

&gt; +    newChild-&gt;m_firstChild = newChild-&gt;m_lastChild = 0;

Normally we don&apos;t merge assignment statements together like this.

&gt;      newChild-&gt;m_countInParent = newChild-&gt;computeCountInParent();
&gt; +    newChild-&gt;resetRenderer(identifier);
&gt; +    first-&gt;recount(identifier);
&gt; +    return;
&gt;  }

Normally we don&apos;t have a return statement at the end of a function like this.

&gt; +    for (RenderObject* currentRenderer = object-&gt;nextInPreOrder(stayWithin); currentRenderer;currentRenderer = currentRenderer-&gt;nextInPreOrder(stayWithin)) {

Missing space after the semicolon here.

&gt; +        if (!currentRenderer-&gt;m_hasCounterNodeMap || !(currentCounter = maps.get(currentRenderer)-&gt;get(identifier.impl())))
&gt; +            continue;

I think this would be clearer with separate if statements. There&apos;s no real reason to have the assignment inside an if statement and having separate ones would make that possible.

&gt; +    // Do not delete map even if empty as this function should not be called when all counters for a renderer
&gt; +    // are deleted destroyCounterNodes should be called instead. The map may be empty only temporarely while

Typo: &quot;temporarely&quot;.

Need punctuation between &quot;deleted&quot; and &quot;destroyCounterNodes&quot;.

Is there a way to do some sort of assertion to check the assumption from this comment?

&gt; +void RenderCounter::rendererSubtreeAttached(RenderObject* renderer)
&gt; +{
&gt; +    ASSERT(renderer);
&gt; +    RenderObject* descendant = renderer;
&gt; +    do {
&gt; +        updateCounters(descendant);
&gt; +        descendant = descendant-&gt;nextInPreOrder(renderer);
&gt; +    } while (descendant);
&gt; +}
&gt;  } // namespace WebCore

At the cost of one extra null check we could write this with a for loop, which would be even clearer and easier to read.

Would be good to have a blank line before the end of the namespace.

Since this is for the commit-queue, I&apos;ll say review- so we can at least fix the typos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180017</commentid>
    <comment_count>6</comment_count>
      <attachid>46407</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-12 16:10:11 -0800</bug_when>
    <thetext>Created attachment 46407
Proposed Patch; Addressed Darin&apos;s concerns. Removed an invalid assertion and handled the case.

Darin,
Unfortunately it is not possible to check the assertion in the comment you referred to above since the map may be empty for brief periods of time, but it should be soon filled. If you want, though, I can remove the comment, delete the map and incur the performance and code size penalty, but I&apos;d like you to consider, first, the following additional information:
- in the destructor of RenderObject &quot;destroyCounters&quot; is called, which deletes the map, so as long as this stays true, the map is not leaked, it is just cashed.
- this function is only called from within the counters code which is small and should be easy to check for making the correct calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180261</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-13 09:46:26 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; - this function is only called from within the counters code which is small and
&gt; should be easy to check for making the correct calls.

Please explain further why it’s easy to check. What would I check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180265</commentid>
    <comment_count>8</comment_count>
      <attachid>46407</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-13 09:54:07 -0800</bug_when>
    <thetext>Comment on attachment 46407
Proposed Patch; Addressed Darin&apos;s concerns. Removed an invalid assertion and handled the case.

&gt; +    CounterNode* currentCounter;
&gt; +    for (RenderObject* currentRenderer = object-&gt;nextInPreOrder(stayWithin); currentRenderer; currentRenderer = currentRenderer-&gt;nextInPreOrder(stayWithin)) {
&gt; +        if (!currentRenderer-&gt;m_hasCounterNodeMap)
&gt; +            continue;
&gt; +        currentCounter = maps.get(currentRenderer)-&gt;get(identifier.impl());

There&apos;s no reason for currentCounter to be defined outside the loop. It should be defined right here where it&apos;s initialized.

&gt; +    // Do not delete map even if empty as this function should not be called when all counters for a renderer
&gt; +    // are deleted destroyCounterNodes should be called instead. The map may be empty only temporarily while
&gt; +    // old counters associated with a renderer are deleted before new ones are created.

There should be some punctuation, maybe a period or semicolon, between the word &quot;deleted&quot; and &quot;destroyCounterNodes&quot;. Without a break there, the sentence doesn&apos;t make sense.

I&apos;d like to see the fast case, no counters involved, in RenderObject::addChild be as simple as possible. At the moment it seems that adding a child always involves walking the child&apos;s subtree and does it with multiple levels of function calls. With a bit more inlining the speed impact could be reduced. Or we could make further design changes to make the cost even smaller in such cases.

I&apos;m concerned this could have a measurable effect on our core benchmarks, such as the &quot;page load test&quot; used internally at Apple and the i-Bench HTML test.

I&apos;m tempted to say review+ but I have two questions still outstanding:

    1) Have we done performance tests on non-counter pages to see what the effect of this is? Stephanie Lewis may be able to help you by doing some testing if you don&apos;t know a way to do it yourself.

    2) There&apos;s a separate stayWithin patch. Does this affect the result of the test, or is it a change that affects only performance, not corretness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180269</commentid>
    <comment_count>9</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-13 09:59:35 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; - this function is only called from within the counters code which is small and
&gt; &gt; should be easy to check for making the correct calls.
&gt; 
&gt; Please explain further why it’s easy to check. What would I check?

The idea is to grep for the function name and see that it is used only in a few places (for now 1 but 2 more are needed for 11031) and in all cases the counter node objects are destroyed, but the style attribute that drives them stays so the nodes will be recreated at the next layout or earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180270</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-13 10:04:37 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; The idea is to grep for the function name and see that it is used only in a few
&gt; places (for now 1 but 2 more are needed for 11031) and in all cases the counter
&gt; node objects are destroyed, but the style attribute that drives them stays so
&gt; the nodes will be recreated at the next layout or earlier.

If the comment was made slightly more concrete, then it would make that clear. The comment says something much more oblique. I would say something more like this:

// At the time of this writing, all callers are deleting counter nodes that will be re-created shortly.
// Specifically, DOM tree and style that caused the counters to be created have not changed.
// And worst case, the empty map does little harm and will be deleted when the RenderObject is.

The comment above isn&apos;t perfect, but there’s a greater chance later contributors will understand it, as opposed to the more abstract remarks in the patch, which are vague enough that they are hard to challenge.

By the way, I am not confident that the comment is true, and that counter nodes will always be recreated in such cases. What about things like pseudo styles that can cause the need for counters to change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180282</commentid>
    <comment_count>11</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-13 10:28:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; The idea is to grep for the function name and see that it is used only in a few
&gt; &gt; places (for now 1 but 2 more are needed for 11031) and in all cases the counter
&gt; &gt; node objects are destroyed, but the style attribute that drives them stays so
&gt; &gt; the nodes will be recreated at the next layout or earlier.
&gt; 
&gt; If the comment was made slightly more concrete, then it would make that clear.
&gt; The comment says something much more oblique. I would say something more like
&gt; this:
&gt; 
&gt; // At the time of this writing, all callers are deleting counter nodes that
&gt; will be re-created shortly.
&gt; // Specifically, DOM tree and style that caused the counters to be created have
&gt; not changed.
&gt; // And worst case, the empty map does little harm and will be deleted when the
&gt; RenderObject is.
&gt; 
&gt; The comment above isn&apos;t perfect, but there’s a greater chance later
&gt; contributors will understand it, as opposed to the more abstract remarks in the
&gt; patch, which are vague enough that they are hard to challenge.
&gt; 
&gt; By the way, I am not confident that the comment is true, and that counter nodes
&gt; will always be recreated in such cases. What about things like pseudo styles
&gt; that can cause the need for counters to change?

I&apos;ll make the changes to the comment as you suggested if you want me to. I can also add in the code necessary to delete the map if it is empty. Either case would not matter much since the function is rarely called unless somebody decides to use webkit as a text editor for a document which is mostly a huge hierarchical table of contents, or something to that effect which results in many counters, especially of the reset kind being deleted and moved and deleted again via complex DOM manipulation.
I believe that it is a close call whether to delete the map or not and as a reviewer it is yours to make. I am just providing the information so that you can decide. Upon deeper thinking I guess that one may be able to find a corner case when an empty counter map can survive needlessly until the renderer it is associated with is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180286</commentid>
    <comment_count>12</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-13 10:37:49 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 46407 [details])
&gt; &gt; +    CounterNode* currentCounter;
&gt; &gt; +    for (RenderObject* currentRenderer = object-&gt;nextInPreOrder(stayWithin); currentRenderer; currentRenderer = currentRenderer-&gt;nextInPreOrder(stayWithin)) {
&gt; &gt; +        if (!currentRenderer-&gt;m_hasCounterNodeMap)
&gt; &gt; +            continue;
&gt; &gt; +        currentCounter = maps.get(currentRenderer)-&gt;get(identifier.impl());
&gt; 
&gt; There&apos;s no reason for currentCounter to be defined outside the loop. It should
&gt; be defined right here where it&apos;s initialized.
&gt; 
&gt; &gt; +    // Do not delete map even if empty as this function should not be called when all counters for a renderer
&gt; &gt; +    // are deleted destroyCounterNodes should be called instead. The map may be empty only temporarily while
&gt; &gt; +    // old counters associated with a renderer are deleted before new ones are created.
&gt; 
&gt; There should be some punctuation, maybe a period or semicolon, between the word
&gt; &quot;deleted&quot; and &quot;destroyCounterNodes&quot;. Without a break there, the sentence
&gt; doesn&apos;t make sense.
&gt; 
&gt; I&apos;d like to see the fast case, no counters involved, in RenderObject::addChild
&gt; be as simple as possible. At the moment it seems that adding a child always
&gt; involves walking the child&apos;s subtree and does it with multiple levels of
&gt; function calls. With a bit more inlining the speed impact could be reduced. Or
&gt; we could make further design changes to make the cost even smaller in such
&gt; cases.
&gt; 
&gt; I&apos;m concerned this could have a measurable effect on our core benchmarks, such
&gt; as the &quot;page load test&quot; used internally at Apple and the i-Bench HTML test.
&gt; 
&gt; I&apos;m tempted to say review+ but I have two questions still outstanding:
&gt; 
&gt;     1) Have we done performance tests on non-counter pages to see what the
&gt; effect of this is? Stephanie Lewis may be able to help you by doing some
&gt; testing if you don&apos;t know a way to do it yourself.
&gt; 
&gt;     2) There&apos;s a separate stayWithin patch. Does this affect the result of the
&gt; test, or is it a change that affects only performance, not corretness?
I have run a performance test involving adding and removing many nodes in the most unfavorable position from javascript. collected timings with 5 digits precision. Individual timings would vary both ways so I calculated averages with and without the patch and did statistical analysis on the outputs and I was unable to prove any difference, which is expected since for non-counter nodes, there are only a few jumps and ifs to be compared with the whole effort needed for relayout or compiling and running the JS to drive the creation of the node and the insertion.
Yes, the stayWithin patch is expected to improve performance overall and a few of the outcomes for counters. I do not have a test yet where stayWithin should affect other Layout issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180288</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-13 10:47:02 -0800</bug_when>
    <thetext>My primary concern is performance in documents with no counters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180291</commentid>
    <comment_count>14</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-13 10:49:55 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; My primary concern is performance in documents with no counters.

Sorry, if I wasn&apos;t clear, my tests involved documents with no counters. For documents with counters, there is obviously a slight impact, but only when nodes with counters on them are added since the counter hierarchy needs to be maintained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180295</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-13 10:55:09 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; My primary concern is performance in documents with no counters.
&gt; 
&gt; Sorry, if I wasn&apos;t clear, my tests involved documents with no counters. For
&gt; documents with counters, there is obviously a slight impact, but only when
&gt; nodes with counters on them are added since the counter hierarchy needs to be
&gt; maintained.

Adding and removing nodes with JavaScript is probably not the best way to test performance. The normal case of loading and rendering a page is the primary thing we want to test. The RenderObject::addChild function is invoked in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181037</commentid>
    <comment_count>16</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-01-14 17:34:45 -0800</bug_when>
    <thetext>I tested the patch for performance issues on SnowLeopard and didn&apos;t come across any problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181051</commentid>
    <comment_count>17</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-14 17:59:10 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I tested the patch for performance issues on SnowLeopard and didn&apos;t come across
&gt; any problems.

Thank you very much, Stephanie, for your help.

Darin,
About the last pending issue, which is whether or not to delete the counter map in RenderCounter::destroyCounter if it is empty, what is your verdict:
A. Should I make a code change to delete the map if empty.
B. Should I change the comment to say something like this:
// The counterMap is not deleted here even if empty because we expect it to
// be reused soon. In order for a renderer to loose all its counters 
// permanently, the corresponding DOM node must be deleted at which time the 
// renderer itself will have been already deleted and with it the map and all
// the counters via RenderCounter::destroyCounters() or a style change 
// involving removal of all counter directives must occur in which case again
// RenderCounter::destroyCounters() must be called.

Once I have this information, I can submit a patch that answers all your concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181237</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-15 08:24:36 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; B. Should I change the comment to say something like this:
&gt; // The counterMap is not deleted here even if empty because we expect it to
&gt; // be reused soon. In order for a renderer to loose all its counters 
&gt; // permanently, the corresponding DOM node must be deleted at which time the 
&gt; // renderer itself will have been already deleted and with it the map and all
&gt; // the counters via RenderCounter::destroyCounters() or a style change 
&gt; // involving removal of all counter directives must occur in which case again
&gt; // RenderCounter::destroyCounters() must be called.

B.

Something like that is OK. The comment is much easier to understand, although still a little subtle.

Typo: &quot;loose&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181356</commentid>
    <comment_count>19</comment_count>
      <attachid>46708</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2010-01-15 13:30:12 -0800</bug_when>
    <thetext>Created attachment 46708
Proposed patch; Addressed Darin&apos;s concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181450</commentid>
    <comment_count>20</comment_count>
      <attachid>46708</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-15 18:14:33 -0800</bug_when>
    <thetext>Comment on attachment 46708
Proposed patch; Addressed Darin&apos;s concerns.

Clearing flags on attachment: 46708

Committed r53355: &lt;http://trac.webkit.org/changeset/53355&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181451</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-15 18:14:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>45407</attachid>
            <date>2009-12-22 15:07:32 -0800</date>
            <delta_ts>2009-12-22 15:07:32 -0800</delta_ts>
            <desc>Test Case</desc>
            <filename>adding-nodes.html</filename>
            <type>text/html</type>
            <size>2527</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIj4KPGh0bWw+
PGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQv
aHRtbDsgY2hhcnNldD1VVEYtOCI+CiAgICA8dGl0bGU+QWRkaW5nIG5vZGVzIHRoYXQgYWZmZWN0
IHRoZSBDU1MgY291bnRlciB0cmVlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0iYXV0aG9yIiBocmVm
PSJtYWlsdG86Y2Fyb2wuc3phYm9Abm9raWEuY29tIiB0aXRsZT0iQ2Fyb2wgU3phYm8iPgogICAg
PGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9nZW5lcmF0
ZS5odG1sI2NvdW50ZXJzIj4KICAgIDxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cDovL3d3dy53
My5vcmcvVFIvQ1NTMjEvZ2VuZXJhdGUuaHRtbCNwcm9wZGVmLWNvbnRlbnQiPgogICAgPGxpbmsg
cmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwj
Y291bnRlciI+CiAgICA8bWV0YSBjb250ZW50PSJkb20iIG5hbWU9ImZsYWdzIj4KICAgIDxtZXRh
IGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgogICAg
PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZh
c2NyaXB0Ij4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgYm9keSB7IHdoaXRl
LXNwYWNlOiBub3dyYXA7IH0KICAgICAgICAucmVzZXQgeyBjb3VudGVyLXJlc2V0OiBjOyB9CiAg
ICAgICAgLmluY3JlbWVudDpiZWZvcmUsIC51c2U6YmVmb3JlIHsgY29udGVudDogY291bnRlcnMo
YywgIi4iKSAiLSI7IH0KICAgICAgICAuaW5jcmVtZW50IHsgY291bnRlci1pbmNyZW1lbnQ6IGM7
IH0KICAgIDwvc3R5bGU+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJ1bigpIHsK
ICAgICAgICAgICAgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIp
OwogICAgICAgICAgICBuZXdTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKICAgICAgICAgICAgbmV3U3BhbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsImlu
Y3JlbWVudCIpOwogICAgICAgICAgICB0ZXN0RWxlbWVudC5pbnNlcnRCZWZvcmUobmV3U3BhbkVs
ZW1lbnQsIHRlc3RFbGVtZW50LmZpcnN0Q2hpbGQpOwogICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKICAgICAgICAgICAgICAgIHNwYW5MaXN0ID0gdGVz
dEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKQogICAgICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IHNwYW5MaXN0Lmxlbmd0aDsgKytpICkgewogICAgICAgICAgICAgICAgICAg
IG5ld1NwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAg
ICAgICAgICAgICAgIG5ld1NwYW5FbGVtZW50LmlubmVyVGV4dCA9CiAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQoc3Bhbkxp
c3QuaXRlbShpKS5nZXRBdHRyaWJ1dGUoImlkIikpOwogICAgICAgICAgICAgICAgICAgIGlmIChu
ZXdTcGFuRWxlbWVudC5pbm5lclRleHQubGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICAgICBu
ZXdTcGFuRWxlbWVudC5pbm5lclRleHQgPSBuZXdTcGFuRWxlbWVudC5pbm5lclRleHQgKyAiLSI7
CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hcHBlbmRDaGlsZChuZXdTcGFuRWxlbWVudCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3NjcmlwdD4KPC9oZWFk
Pjxib2R5IG9ubG9hZD0ic2V0VGltZW91dCgncnVuKCknLCAwKSI+CiAgICA8cD5UaGUgZm9sbG93
aW5nIHR3byBsaW5lcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjb250ZW50OjwvcD4KICAgIDxkaXYg
aWQ9InRlc3QiPjxzcGFuIGlkPSJwYXJlbnQiPjxzcGFuIGlkPSJyb290T25lIiBjbGFzcz0iaW5j
cmVtZW50Ii8+PC9zcGFuPjxzcGFuIGlkPSJyb290VHdvIiBjbGFzcz0icmVzZXQiPjwvc3Bhbj48
c3BhbiBpZD0icjJjMSIgY2xhc3M9InVzZSI+PC9zcGFuPjwvZGl2PgogICAgPGRpdiBpZD0icmVm
ZXJlbmNlIj4xLTItMi4wLTwvZGl2PgogICAgPGhyPgogICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CjwvYm9keT48L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45474</attachid>
            <date>2009-12-24 13:02:20 -0800</date>
            <delta_ts>2010-01-12 13:03:31 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>patchFor32884-3.patch</filename>
            <type>text/plain</type>
            <size>17072</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjU1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDktMTItMjQgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENTUzIuMSBDb3VudGVycyBub3QgdXBkYXRlZCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0
ZWQgaW4gdGhlIERPTS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyODg0CisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5v
ZGVzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIpOgorICAgICAgICBNb2RpZmllZCB0
byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIG5vZGVzIHdpdGggY2hpbGRyZW4uIE5lZWRlZCB3aGVu
IGZvcm1lcmx5IAorICAgICAgICByb290IG5vZGVzIGJlY29tZSBkZXNjZW5kYW50cyBvZiBhIG5l
dyBub2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VDb3VudGVyTm9kZSk6CisgICAgICAgIENoYW5nZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIHdoZW4gcm9vdCBjb3VudGVyIG5vZGVzIGxvb3NlIHRoZWlyIHJvb3QgCisgICAgICAg
IHN0YXR1cyBhcyBhIHJlc3VsdCBvZiBhIG5ldyByb290IGNvdW50ZXIgbm9kZSBjcmVhdGlvbi4g
CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbCk6
CisgICAgICAgIFJlZmFjdG9yZWQgbW9yZSBjb2RlIGludG8gZGVzdHJveUNvdW50ZXJOb2RlQ2hp
bGRyZW4gYW5kIHJlbmFtZWQgdGhlCisgICAgICAgIGZ1bmN0aW9uIGFjY29yZGluZyB0byBpdHMg
bmV3IGFjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZXMpOgorICAgICAgICBTaW1wbGlmaWVkIHRvIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRo
ZSBuZXcgZGVzdHJveUNvdW50ZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2RlKToKKyAgICAgICAgQWRkZWQgdG8gYWxsb3cgZm9yIHNlbGVj
dGl2ZSBjb3VudGVyTm9kZSBkZXN0cnVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
dW50ZXI6OnVwZGF0ZUNvdW50ZXJzKToKKyAgICAgICAgQWRkZWQgdG8gcmVmcmVzaCBjb3V0ZXIg
dmFsdWVzIGluIHJlc3BvbnNlIHRvIERPTSBjaGFuZ2VzLgorICAgICAgICBGb3IgcmVuZGVyZXJz
IHdpdGggbm8gYXR0YWNoZWQgY291bnRlcnMgdGhlIGV4Y2V1dGlvbiB0aW1lIG9mIHRoaXMKKyAg
ICAgICAgZnVuY3Rpb24gY2Fubm90IGJlIGRpc2Nlcm5lZCBpbiBjb21wYXJpc29uIHdpdGggdGhl
IHRpbWUgbmVlZGVkIHRvCisgICAgICAgIGFkZCBhIG5vZGUgb3IgY2hhbmdlIHRoZSBzdHlsZSBv
ZiBhIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjp1cGRhdGVDb3VudGVy
KToKKyAgICAgICAgQWxsb3dzIHVwZGF0ZXMgdG8gY291bnRlcnMgb2Ygd2l0aCBhIHNwZWNpZmlj
IGlkZW50aWZpZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHRvIHVwZGF0ZSBjb3VudGVyIHZh
bHVlcyBpZiBuZWVkZWQuCisKIDIwMDktMTItMjQgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9Db3VudGVyTm9kZS5jcHAJKHJldmlzaW9uIDUyNDU0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvQ291bnRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxNiArMjIsMTAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb3VudGVyTm9kZS5oIgogCisjaW5jbHVk
ZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKLS8vIEZJWE1FOiBUaGVyZSdzIGN1cnJlbnRseSBubyBzdHJhdGVneSBmb3Ig
Z2V0dGluZyB0aGUgY291bnRlciB0cmVlIHVwZGF0ZWQgd2hlbiBuZXcKLS8vIGVsZW1lbnRzIHdp
dGggY291bnRlci1yZXNldCBhbmQgY291bnRlci1pbmNyZW1lbnQgc3R5bGVzIGFyZSBhZGRlZCB0
byB0aGUgcmVuZGVyIHRyZWUuCi0vLyBBbHNvLCB0aGUgY29kZSBjYW4ndCBoYW5kbGUgY2hhbmdl
cyB3aGVyZSBhbiBleGlzdGluZyBub2RlIG5lZWRzIHRvIGNoYW5nZSBpbnRvIGEKLS8vICJyZXNl
dCIgbm9kZSwgb3IgZnJvbSBhICJyZXNldCIgbm9kZSBiYWNrIHRvIG5vdCBhICJyZXNldCIgbm9k
ZS4gQXMgb2YgdGhpcyB3cml0aW5nLAotLy8gYXQgbGVhc3Qgc29tZSBvZiB0aGVzZSBwcm9ibGVt
cyBtYW5pZmVzdCBhcyBmYWlsdXJlcyBpbiB0aGUgdDEyMDQtaW5jcmVtZW50IGFuZAotLy8gdDEy
MDQtcmVzZXQgdGVzdHMgaW4gdGhlIENTUyAyLjEgdGVzdCBzdWl0ZS4KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBDb3VudGVyTm9kZTo6Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvLCBib29s
IGhhc1Jlc2V0VHlwZSwgaW50IHZhbHVlKQpAQCAtMTQ0LDYgKzEzOCwxMSBAQCB2b2lkIENvdW50
ZXJOb2RlOjppbnNlcnRBZnRlcihDb3VudGVyTm9kCiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+bV9u
ZXh0U2libGluZyk7CiAgICAgQVNTRVJUKCFyZWZDaGlsZCB8fCByZWZDaGlsZC0+bV9wYXJlbnQg
PT0gdGhpcyk7CiAKKyAgICBpZiAobmV3Q2hpbGQtPm1faGFzUmVzZXRUeXBlKSB7CisgICAgICAg
IHdoaWxlIChtX2xhc3RDaGlsZCAhPSByZWZDaGlsZCkKKyAgICAgICAgICAgIFJlbmRlckNvdW50
ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShtX2xhc3RDaGlsZC0+cmVuZGVyZXIoKSwgaWRlbnRpZmll
cik7CisgICAgfQorCiAgICAgQ291bnRlck5vZGUqIG5leHQ7CiAKICAgICBpZiAocmVmQ2hpbGQp
IHsKQEAgLTE1NCwyMSArMTUzLDQ4IEBAIHZvaWQgQ291bnRlck5vZGU6Omluc2VydEFmdGVyKENv
dW50ZXJOb2QKICAgICAgICAgbV9maXJzdENoaWxkID0gbmV3Q2hpbGQ7CiAgICAgfQogCi0gICAg
aWYgKG5leHQpIHsKLSAgICAgICAgQVNTRVJUKG5leHQtPm1fcHJldmlvdXNTaWJsaW5nID09IHJl
ZkNoaWxkKTsKLSAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZDsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sYXN0Q2hpbGQgPT0gcmVmQ2hpbGQpOwotICAg
ICAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOwotICAgIH0KLQogICAgIG5ld0NoaWxkLT5tX3Bh
cmVudCA9IHRoaXM7CiAgICAgbmV3Q2hpbGQtPm1fcHJldmlvdXNTaWJsaW5nID0gcmVmQ2hpbGQ7
Ci0gICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcgPSBuZXh0OwogCisgICAgaWYgKCFuZXdDaGls
ZC0+bV9maXJzdENoaWxkIHx8IG5ld0NoaWxkLT5tX2hhc1Jlc2V0VHlwZSkgeworICAgICAgICBu
ZXdDaGlsZC0+bV9uZXh0U2libGluZyA9IG5leHQ7CisgICAgICAgIGlmIChuZXh0KSB7CisgICAg
ICAgICAgICBBU1NFUlQobmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPT0gcmVmQ2hpbGQpOworICAg
ICAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RDaGlsZCA9PSByZWZDaGlsZCk7CisgICAg
ICAgICAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOworICAgICAgICB9CisKKyAgICAgICAgbmV3
Q2hpbGQtPm1fY291bnRJblBhcmVudCA9IG5ld0NoaWxkLT5jb21wdXRlQ291bnRJblBhcmVudCgp
OworICAgICAgICBuZXdDaGlsZC0+cmVzZXRSZW5kZXJlcnMoaWRlbnRpZmllcik7CisgICAgICAg
IGlmIChuZXh0KQorICAgICAgICAgICAgbmV4dC0+cmVjb3VudChpZGVudGlmaWVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBjb2RlIGJlbG93IGhhbmRsZXMgdGhlIGNh
c2Ugd2hlbiBhIGZvcm1lcmx5IHJvb3QgaW5jcmVtZW50IGNvdW50ZXIgaXMgbG9vc2luZyBpdHMg
cm9vdCBwb3NpdGlvbgorICAgIC8vIGFuZCB0aGVyZWZvcmUgaXRzIGNoaWxkcmVuIGJlY29tZSBu
ZXh0IHNpYmxpbmdzLgorICAgIC8vIElmIHRoaXMgaGFwcGVucywgdGhlIG5vZGUgbXVzdCBiZSBp
bnNlcnRlZCBhcyBsYXN0Q2hpbGQuCisgICAgQVNTRVJUKCFuZXh0KTsKKyAgICBDb3VudGVyTm9k
ZSogbGFzdCA9IG5ld0NoaWxkLT5tX2xhc3RDaGlsZDsKKyAgICBDb3VudGVyTm9kZSogZmlyc3Qg
PSBuZXdDaGlsZC0+bV9maXJzdENoaWxkOworCisgICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcg
PSBmaXJzdDsKKyAgICBmaXJzdC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZDsKKyAgICBs
YXN0LT5tX25leHRTaWJsaW5nID0gMDsKKyAgICBBU1NFUlQobV9sYXN0Q2hpbGQgPT0gcmVmQ2hp
bGQpOworICAgIG1fbGFzdENoaWxkID0gbGFzdDsKKyAgICBmb3IgKG5leHQgPSBmaXJzdDs7IG5l
eHQgPSBuZXh0LT5tX25leHRTaWJsaW5nKSB7CisgICAgICAgIG5leHQtPm1fcGFyZW50ID0gdGhp
czsKKyAgICAgICAgaWYgKGxhc3QgPT0gbmV4dCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBuZXdDaGlsZC0+bV9maXJzdENoaWxkID0gbmV3Q2hpbGQtPm1fbGFzdENoaWxkID0gMDsK
ICAgICBuZXdDaGlsZC0+bV9jb3VudEluUGFyZW50ID0gbmV3Q2hpbGQtPmNvbXB1dGVDb3VudElu
UGFyZW50KCk7Ci0gICAgaWYgKG5leHQpCi0gICAgICAgIG5leHQtPnJlY291bnQoaWRlbnRpZmll
cik7CisgICAgbmV3Q2hpbGQtPnJlc2V0UmVuZGVyZXIoaWRlbnRpZmllcik7CisgICAgZmlyc3Qt
PnJlY291bnQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuOwogfQogCiB2b2lkIENvdW50ZXJOb2Rl
OjpyZW1vdmVDaGlsZChDb3VudGVyTm9kZSogb2xkQ2hpbGQsIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRlbnRpZmllcikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZpc2lv
biA1MjQ1NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTQsNiArMjU0LDI3IEBAIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50
ZXJOb2RlKFJlbmQKICAgICAgICAgb2JqZWN0LT5tX2hhc0NvdW50ZXJOb2RlTWFwID0gdHJ1ZTsK
ICAgICB9CiAgICAgbm9kZU1hcC0+c2V0KGlkZW50aWZpZXIuaW1wbCgpLCBuZXdOb2RlKTsKKyAg
ICBpZiAobmV3Tm9kZS0+cGFyZW50KCkgfHwgIW9iamVjdC0+bmV4dEluUHJlT3JkZXIob2JqZWN0
LT5wYXJlbnQoKSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIC8vIENoZWNraW5nIGlm
IHNvbWUgbm9kZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgY291bnRlciB0cmVlIHJvb3Qgbm9kZXMK
KyAgICAvLyBzaG91bGQgYmVjb21lIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSBub3cuCisgICAgQ291
bnRlck1hcHMmIG1hcHMgPSBjb3VudGVyTWFwcygpOworICAgIFJlbmRlck9iamVjdCogc3RheVdp
dGhpbiA9IG9iamVjdC0+cGFyZW50KCk7CisgICAgQ291bnRlck5vZGUqIGN1cnJlbnRDb3VudGVy
OworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBvYmplY3QtPm5leHRJ
blByZU9yZGVyKHN0YXlXaXRoaW4pOyBjdXJyZW50UmVuZGVyZXI7Y3VycmVudFJlbmRlcmVyID0g
Y3VycmVudFJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihzdGF5V2l0aGluKSkgeworICAgICAgICBp
ZiAoIWN1cnJlbnRSZW5kZXJlci0+bV9oYXNDb3VudGVyTm9kZU1hcCB8fCAhKGN1cnJlbnRDb3Vu
dGVyID0gbWFwcy5nZXQoY3VycmVudFJlbmRlcmVyKS0+Z2V0KGlkZW50aWZpZXIuaW1wbCgpKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1cnJlbnRDb3VudGVyLT5wYXJl
bnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld05vZGUtPmZpcnN0Q2hpbGQoKSk7CisgICAg
ICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UmVuZGVyZXIgPSBjdXJyZW50UmVuZGVyZXItPmxhc3RDaGlsZCgpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXlXaXRoaW4gIT0gY3Vy
cmVudFJlbmRlcmVyLT5wYXJlbnQoKSB8fCAhY3VycmVudENvdW50ZXItPmhhc1Jlc2V0VHlwZSgp
KQorICAgICAgICAgICAgbmV3Tm9kZS0+aW5zZXJ0QWZ0ZXIoY3VycmVudENvdW50ZXIsIG5ld05v
ZGUtPmxhc3RDaGlsZCgpLCBpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJl
ci0+bGFzdENoaWxkKCkpCisgICAgICAgICAgICBjdXJyZW50UmVuZGVyZXIgPSBjdXJyZW50UmVu
ZGVyZXItPmxhc3RDaGlsZCgpOworICAgIH0KICAgICByZXR1cm4gbmV3Tm9kZTsKIH0KIApAQCAt
MzE0LDcgKzMzNSw3IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6aW52YWxpZGF0ZShjb25zdCBBdG8K
ICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotc3RhdGljIHZv
aWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlm
aWVyLCBDb3VudGVyTm9kZSogbm9kZSkKK3N0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZVdp
dGhvdXRNYXBSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgQ291bnRlck5v
ZGUqIG5vZGUpCiB7CiAgICAgQ291bnRlck5vZGUqIHByZXZpb3VzOwogICAgIGZvciAoQ291bnRl
ck5vZGUqIGNoaWxkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsgY2hpbGQgJiYgY2hpbGQgIT0g
bm9kZTsgY2hpbGQgPSBwcmV2aW91cykgewpAQCAtMzI5LDI3ICszNTAsODYgQEAgc3RhdGljIHZv
aWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oYwogICAgICAgICB9CiAgICAgICAgIGRlbGV0
ZSBjaGlsZDsKICAgICB9CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7Cisg
ICAgICAgIGlmIChSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuID0gcmVuZGVyZXItPnZp
cnR1YWxDaGlsZHJlbigpKQorICAgICAgICAgICAgY2hpbGRyZW4tPmludmFsaWRhdGVDb3VudGVy
cyhyZW5kZXJlciwgaWRlbnRpZmllcik7CisgICAgfQorICAgIGlmIChDb3VudGVyTm9kZSogcGFy
ZW50ID0gbm9kZS0+cGFyZW50KCkpCisgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZSwg
aWRlbnRpZmllcik7CisgICAgZGVsZXRlIG5vZGU7CiB9CiAKLXZvaWQgUmVuZGVyQ291bnRlcjo6
ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG9iamVjdCkKK3ZvaWQgUmVuZGVyQ291
bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAg
IENvdW50ZXJNYXBzJiBtYXBzID0gY291bnRlck1hcHMoKTsKLSAgICBDb3VudGVyTWFwKiBtYXAg
PSBtYXBzLmdldChvYmplY3QpOwotICAgIGlmICghbWFwKQorICAgIENvdW50ZXJNYXBzOjppdGVy
YXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQocmVuZGVyZXIpOworICAgIGlmIChtYXBzSXRl
cmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1hcHMucmVtb3ZlKG9i
amVjdCk7Ci0KKyAgICBDb3VudGVyTWFwKiBtYXAgPSBtYXBzSXRlcmF0b3ItPnNlY29uZDsKICAg
ICBDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAo
Q291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBDb3VudGVyTm9kZSogbm9kZSA9IGl0LT5zZWNvbmQ7CiAgICAgICAg
IEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5maXJzdC5nZXQoKSk7Ci0gICAgICAgIGRlc3Ry
b3lDb3VudGVyTm9kZUNoaWxkcmVuKGlkZW50aWZpZXIsIG5vZGUpOwotICAgICAgICBpZiAoQ291
bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpKQotICAgICAgICAgICAgcGFyZW50LT5y
ZW1vdmVDaGlsZChub2RlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgZGVsZXRlIG5vZGU7CisgICAg
ICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIGl0LT5z
ZWNvbmQpOwogICAgIH0KLQorICAgIG1hcHMucmVtb3ZlKG1hcHNJdGVyYXRvcik7CiAgICAgZGVs
ZXRlIG1hcDsKKyAgICByZW5kZXJlci0+bV9oYXNDb3VudGVyTm9kZU1hcCA9IGZhbHNlOwogfQog
Cit2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgQ291bnRlck1h
cCogbWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOworICAgIGlmICghbWFwKQorICAg
ICAgICByZXR1cm47CisgICAgQ291bnRlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBtYXAt
PmZpbmQoaWRlbnRpZmllci5pbXBsKCkpOworICAgIGlmIChtYXBJdGVyYXRvciA9PSBtYXAtPmVu
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJl
bW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnNlY29uZCk7CisgICAgbWFwLT5yZW1vdmUo
bWFwSXRlcmF0b3IpOworICAgIC8vIERvIG5vdCBkZWxldGUgbWFwIGV2ZW4gaWYgZW1wdHkgYXMg
dGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGFsbCBjb3VudGVycyBmb3Ig
YSByZW5kZXJlcgorICAgIC8vIGFyZSBkZWxldGVkIGRlc3Ryb3lDb3VudGVyTm9kZXMgc2hvdWxk
IGJlIGNhbGxlZCBpbnN0ZWFkLiBUaGUgbWFwIG1heSBiZSBlbXB0eSBvbmx5IHRlbXBvcmFyZWx5
IHdoaWxlCisgICAgLy8gb2xkIGNvdW50ZXJzIGFzc29jaWF0ZWQgd2l0aCBhIHJlbmRlcmVyIGFy
ZSBkZWxldGVkIGJlZm9yZSBuZXcgb25lcyBhcmUgY3JlYXRlZC4KK30KKwordm9pZCBSZW5kZXJD
b3VudGVyOjp1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIEFT
U0VSVChyZW5kZXJlcik7CisgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7
CisgICAgZG8geworICAgICAgICB1cGRhdGVDb3VudGVyKGRlc2NlbmRhbnQpOworICAgICAgICBk
ZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpOworICAgIH0g
d2hpbGUgKGRlc2NlbmRhbnQpOworfQorCit2b2lkIFJlbmRlckNvdW50ZXI6OnVwZGF0ZUNvdW50
ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQocmVuZGVyZXItPnN0eWxl
KCkpOworICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIGRpcmVjdGl2ZU1hcCA9IHJlbmRl
cmVyLT5zdHlsZSgpLT5jb3VudGVyRGlyZWN0aXZlcygpOworICAgIGlmICghZGlyZWN0aXZlTWFw
KQorICAgICAgICByZXR1cm47CisgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gZGlyZWN0aXZlTWFwLT5lbmQoKTsKKyAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFw
ID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOworICAgIGlmICghY291bnRlck1hcCkgewor
ICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGly
ZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtYWtlQ291
bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIENvdW50ZXJOb2RlKiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJz
dC5nZXQoKSk7CisgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgbWFrZUNvdW50ZXJO
b2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ291bnRlck5vZGUqIG5ld1Bh
cmVudCA9IDA7CisgICAgICAgIENvdW50ZXJOb2RlKiBuZXdQcmV2aW91c1NpYmxpbmc7CisgICAg
ICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3Qu
Z2V0KCkpLCBub2RlLT5oYXNSZXNldFR5cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxp
bmcpOworICAgICAgICBDb3VudGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50KCk7CisgICAg
ICAgIGlmIChuZXdQYXJlbnQgPT0gcGFyZW50ICYmIG5ld1ByZXZpb3VzU2libGluZyA9PSBub2Rl
LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
cGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBpdC0+Zmlyc3Qu
Z2V0KCkpOworICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUsIG5ld1ByZXZpb3Vz
U2libGluZywgaXQtPmZpcnN0LmdldCgpKTsKKyAgICB9Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiA1MjQ1NCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWRlbnRpZmllcik7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVzKFJl
bmRlck9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJP
YmplY3QqLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpOworICAgIHN0YXRpYyB2b2lk
IHVwZGF0ZUNvdW50ZXJzKFJlbmRlck9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUNv
dW50ZXIoUmVuZGVyT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDUyNDU0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRD
aGlsZChSZW5kZXJPYmplY3QKICAgICAgICAgLy8gSnVzdCBhZGQgaXQuLi4KICAgICAgICAgY2hp
bGRyZW4tPmluc2VydENoaWxkTm9kZSh0aGlzLCBuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAg
IH0KLSAgICAKKyAgICBSZW5kZXJDb3VudGVyOjp1cGRhdGVDb3VudGVycyhuZXdDaGlsZCk7CiAg
ICAgaWYgKG5ld0NoaWxkLT5pc1RleHQoKSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dGV4dFRyYW5z
Zm9ybSgpID09IENBUElUQUxJWkUpIHsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRleHRU
b1RyYW5zZm9ybSA9IHRvUmVuZGVyVGV4dChuZXdDaGlsZCktPm9yaWdpbmFsVGV4dCgpOwogICAg
ICAgICBpZiAodGV4dFRvVHJhbnNmb3JtKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTI1NTIpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAw
OS0xMi0yNCAgQ2Fyb2wgU3phYm8gIDxjYXJvbC5zemFib0Bub2tpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTMi4xIENvdW50ZXJzIG5v
dCB1cGRhdGVkIHdoZW4gbmV3IGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgRE9NLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI4ODQKKworICAg
ICAgICAqIGZhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy5odG1sOiBBZGRlZC4K
KwogMjAwOS0xMi0yNCAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQGluZi51LXN6ZWdlZC5odT4KIAog
ICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5vZGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGlu
Zy1ub2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhlIGZv
bGxvd2luZyB0d28gbGluZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgY29udGVudDoKKworMS0yLTIu
MC0yLjAuMS0KKzEtMi0yLjAtMi4wLjEtCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3Vu
dGVycy9hZGRpbmctbm9kZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9jb3VudGVycy9hZGRpbmctbm9kZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8v
RU4iPgorPGh0bWw+PGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAgIDx0aXRsZT5BZGRpbmcgbm9k
ZXMgdGhhdCBhZmZlY3QgdGhlIENTUyBjb3VudGVyIHRyZWU8L3RpdGxlPgorICAgIDxsaW5rIHJl
bD0iYXV0aG9yIiBocmVmPSJtYWlsdG86Y2Fyb2wuc3phYm9Abm9raWEuY29tIiB0aXRsZT0iQ2Fy
b2wgU3phYm8iPgorICAgIDxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMjEvZ2VuZXJhdGUuaHRtbCNjb3VudGVycyI+CisgICAgPGxpbmsgcmVsPSJoZWxwIiBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9nZW5lcmF0ZS5odG1sI3Byb3BkZWYtY29u
dGVudCI+CisgICAgPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9D
U1MyMS9zeW5kYXRhLmh0bWwjY291bnRlciI+CisgICAgPG1ldGEgY29udGVudD0iZG9tIiBuYW1l
PSJmbGFncyI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250
ZW50PSJ0ZXh0L2NzcyI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlw
ZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorICAgICAgICBib2R5IHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQorICAgICAgICAucmVzZXQg
eyBjb3VudGVyLXJlc2V0OiBjOyB9CisgICAgICAgIC5pbmNyZW1lbnQ6YmVmb3JlLCAudXNlOmJl
Zm9yZSB7IGNvbnRlbnQ6IGNvdW50ZXJzKGMsICIuIikgIi0iOyB9CisgICAgICAgIC5pbmNyZW1l
bnQgeyBjb3VudGVyLWluY3JlbWVudDogYzsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW4oKSB7CisgICAgICAgICAgICB0ZXN0RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7CisgICAgICAgICAgICBuZXdTcGFu
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIG5l
d1NwYW5FbGVtZW50LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpbmNyZW1lbnQiKTsKKyAgICAgICAg
ICAgIG5ld1NwYW5FbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCJuZXdOb2RlIik7CisgICAgICAg
ICAgICB0ZXN0RWxlbWVudC5pbnNlcnRCZWZvcmUobmV3U3BhbkVsZW1lbnQsIHRlc3RFbGVtZW50
LmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpOworICAgICAgICAgICAgICAgIHNwYW5MaXN0ID0gdGVzdEVsZW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNwYW4iKQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBz
cGFuTGlzdC5sZW5ndGg7ICsraSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3U3BhbkVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgICAg
IGlkID0gc3Bhbkxpc3QuaXRlbShpKS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpZCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3BhbkVs
ZW1lbnQuaW5uZXJUZXh0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuY291bnRlclZhbHVlRm9yRWxl
bWVudEJ5SWQoaWQpOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3BhbkVsZW1lbnQuaW5u
ZXJUZXh0Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NwYW5FbGVtZW50Lmlu
bmVyVGV4dCA9IG5ld1NwYW5FbGVtZW50LmlubmVyVGV4dCArICItIjsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5hcHBlbmRDaGlsZChuZXdTcGFuRWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
dGVzdEVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlZmVyZW5jZSIpOworICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50Lmlu
bmVySFRNTCA9IHRlc3RFbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKC88Yj5hPHU+YjxcL3U+PFwv
Yj4vZywiIik7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+PGJv
ZHkgb25sb2FkPSJzZXRUaW1lb3V0KCdydW4oKScsIDApIj4KKyAgICA8cD5UaGUgZm9sbG93aW5n
IHR3byBsaW5lcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjb250ZW50OjwvcD4KKyAgICA8ZGl2IGlk
PSJ0ZXN0Ij48Yj5hPHU+YjwvdT48L2I+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJwYXJlbnQi
PjxiPmE8dT5iPC91PjwvYj48c3BhbiBpZD0icm9vdE9uZSIgY2xhc3M9ImluY3JlbWVudCIvPjxi
PmE8dT5iPC91PjwvYj48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJyb290VHdvIiBj
bGFzcz0icmVzZXQiPjxiPmE8dT5iPC91PjwvYj48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjxzcGFu
IGlkPSJyMmMxIiBjbGFzcz0idXNlIj48Yj5hPHU+YjwvdT48L2I+PHNwYW4gaWQ9Im5ycmVzZXQi
IGNsYXNzPSJyZXNldCI+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJyM2MxIiBjbGFzcz0iaW5j
cmVtZW50Ij48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjwvc3Bhbj48L3NwYW4+PC9kaXY+CisgICAg
PGRpdiBpZD0icmVmZXJlbmNlIj4xLTxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+PGI+
YTx1PmI8L3U+PC9iPjItPGI+YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj48Yj5hPHU+Yjwv
dT48L2I+PGI+YTx1PmI8L3U+PC9iPjIuMC08Yj5hPHU+YjwvdT48L2I+PGI+YTx1PmI8L3U+PC9i
PjIuMC4xLTxiPmE8dT5iPC91PjwvYj48L2Rpdj4KKyAgICA8aHI+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8L2JvZHk+PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46393</attachid>
            <date>2010-01-12 13:03:31 -0800</date>
            <delta_ts>2010-01-12 16:10:11 -0800</delta_ts>
            <desc>Proposed Patch; A few function name changes and performance improvements over last submission.</desc>
            <filename>patchFor32884-5.patch</filename>
            <type>text/plain</type>
            <size>17218</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjU1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMTItMjQgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENTUzIuMSBDb3VudGVycyBub3QgdXBkYXRlZCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0
ZWQgaW4gdGhlIERPTS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyODg0CisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5v
ZGVzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIpOgorICAgICAgICBNb2RpZmllZCB0
byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIG5vZGVzIHdpdGggY2hpbGRyZW4uIE5lZWRlZCB3aGVu
IGZvcm1lcmx5IAorICAgICAgICByb290IG5vZGVzIGJlY29tZSBkZXNjZW5kYW50cyBvZiBhIG5l
dyBub2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VDb3VudGVyTm9kZSk6CisgICAgICAgIENoYW5nZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIHdoZW4gcm9vdCBjb3VudGVyIG5vZGVzIGxvb3NlIHRoZWlyIHJvb3QgCisgICAgICAg
IHN0YXR1cyBhcyBhIHJlc3VsdCBvZiBhIG5ldyByb290IGNvdW50ZXIgbm9kZSBjcmVhdGlvbi4g
CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbCk6
CisgICAgICAgIFJlZmFjdG9yZWQgbW9yZSBjb2RlIGludG8gZGVzdHJveUNvdW50ZXJOb2RlQ2hp
bGRyZW4gYW5kIHJlbmFtZWQgdGhlCisgICAgICAgIGZ1bmN0aW9uIGFjY29yZGluZyB0byBpdHMg
bmV3IGFjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZXMpOgorICAgICAgICBTaW1wbGlmaWVkIHRvIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRo
ZSBuZXcgZGVzdHJveUNvdW50ZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2RlKToKKyAgICAgICAgQWRkZWQgdG8gYWxsb3cgZm9yIHNlbGVj
dGl2ZSBjb3VudGVyTm9kZSBkZXN0cnVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKToKKyAgICAgICAgQWRkZWQgdG8gcmVmcmVz
aCBjb3V0ZXIgdmFsdWVzIGluIHJlc3BvbnNlIHRvIERPTSBjaGFuZ2VzLgorICAgICAgICBGb3Ig
cmVuZGVyZXJzIHdpdGggbm8gYXR0YWNoZWQgY291bnRlcnMgdGhlIGV4ZWN1dGlvbiB0aW1lIG9m
IHRoaXMKKyAgICAgICAgZnVuY3Rpb24gY2Fubm90IGJlIGRpc2Nlcm5lZCBpbiBjb21wYXJpc29u
IHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvCisgICAgICAgIGFkZCBhIG5vZGUgb3IgY2hhbmdlIHRo
ZSBzdHlsZSBvZiBhIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVycyk6Cisg
ICAgICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuIFVwZGF0
ZXMgdGhlIGNvdW50ZXJzCisgICAgICAgIGF0dGFjaGVkIHRvIGEgUmVuZGVyZXIgaW4gcmVzcG9u
c2UgdG8gdGhlIHJlbmRlcmVyIG9yIGl0cyBhbmNlc3RvcnMKKyAgICAgICAgYmVpbmcgYXR0YWNo
ZWQgdG8gdGhlIHJlbmRlcmVyIHRyZWUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHRvIHVwZGF0
ZSBjb3VudGVyIHZhbHVlcyBpZiBuZWVkZWQuCisKIDIwMDktMTItMjQgIEplc3NpZSBCZXJsaW4g
IDxqYmVybGluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVp
bi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAJKHJldmlzaW9uIDUyNDU0KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwx
NiArMjIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb3VudGVyTm9kZS5o
IgogCisjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLS8vIEZJWE1FOiBUaGVyZSdzIGN1cnJlbnRseSBubyBz
dHJhdGVneSBmb3IgZ2V0dGluZyB0aGUgY291bnRlciB0cmVlIHVwZGF0ZWQgd2hlbiBuZXcKLS8v
IGVsZW1lbnRzIHdpdGggY291bnRlci1yZXNldCBhbmQgY291bnRlci1pbmNyZW1lbnQgc3R5bGVz
IGFyZSBhZGRlZCB0byB0aGUgcmVuZGVyIHRyZWUuCi0vLyBBbHNvLCB0aGUgY29kZSBjYW4ndCBo
YW5kbGUgY2hhbmdlcyB3aGVyZSBhbiBleGlzdGluZyBub2RlIG5lZWRzIHRvIGNoYW5nZSBpbnRv
IGEKLS8vICJyZXNldCIgbm9kZSwgb3IgZnJvbSBhICJyZXNldCIgbm9kZSBiYWNrIHRvIG5vdCBh
ICJyZXNldCIgbm9kZS4gQXMgb2YgdGhpcyB3cml0aW5nLAotLy8gYXQgbGVhc3Qgc29tZSBvZiB0
aGVzZSBwcm9ibGVtcyBtYW5pZmVzdCBhcyBmYWlsdXJlcyBpbiB0aGUgdDEyMDQtaW5jcmVtZW50
IGFuZAotLy8gdDEyMDQtcmVzZXQgdGVzdHMgaW4gdGhlIENTUyAyLjEgdGVzdCBzdWl0ZS4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb3VudGVyTm9kZTo6Q291bnRlck5vZGUoUmVuZGVyT2Jq
ZWN0KiBvLCBib29sIGhhc1Jlc2V0VHlwZSwgaW50IHZhbHVlKQpAQCAtMTQ0LDYgKzEzOCwxMSBA
QCB2b2lkIENvdW50ZXJOb2RlOjppbnNlcnRBZnRlcihDb3VudGVyTm9kCiAgICAgQVNTRVJUKCFu
ZXdDaGlsZC0+bV9uZXh0U2libGluZyk7CiAgICAgQVNTRVJUKCFyZWZDaGlsZCB8fCByZWZDaGls
ZC0+bV9wYXJlbnQgPT0gdGhpcyk7CiAKKyAgICBpZiAobmV3Q2hpbGQtPm1faGFzUmVzZXRUeXBl
KSB7CisgICAgICAgIHdoaWxlIChtX2xhc3RDaGlsZCAhPSByZWZDaGlsZCkKKyAgICAgICAgICAg
IFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShtX2xhc3RDaGlsZC0+cmVuZGVyZXIo
KSwgaWRlbnRpZmllcik7CisgICAgfQorCiAgICAgQ291bnRlck5vZGUqIG5leHQ7CiAKICAgICBp
ZiAocmVmQ2hpbGQpIHsKQEAgLTE1NCwyMSArMTUzLDQ4IEBAIHZvaWQgQ291bnRlck5vZGU6Omlu
c2VydEFmdGVyKENvdW50ZXJOb2QKICAgICAgICAgbV9maXJzdENoaWxkID0gbmV3Q2hpbGQ7CiAg
ICAgfQogCi0gICAgaWYgKG5leHQpIHsKLSAgICAgICAgQVNTRVJUKG5leHQtPm1fcHJldmlvdXNT
aWJsaW5nID09IHJlZkNoaWxkKTsKLSAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBu
ZXdDaGlsZDsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sYXN0Q2hpbGQgPT0gcmVm
Q2hpbGQpOwotICAgICAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOwotICAgIH0KLQogICAgIG5l
d0NoaWxkLT5tX3BhcmVudCA9IHRoaXM7CiAgICAgbmV3Q2hpbGQtPm1fcHJldmlvdXNTaWJsaW5n
ID0gcmVmQ2hpbGQ7Ci0gICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcgPSBuZXh0OwogCisgICAg
aWYgKCFuZXdDaGlsZC0+bV9maXJzdENoaWxkIHx8IG5ld0NoaWxkLT5tX2hhc1Jlc2V0VHlwZSkg
eworICAgICAgICBuZXdDaGlsZC0+bV9uZXh0U2libGluZyA9IG5leHQ7CisgICAgICAgIGlmIChu
ZXh0KSB7CisgICAgICAgICAgICBBU1NFUlQobmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPT0gcmVm
Q2hpbGQpOworICAgICAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RDaGlsZCA9PSByZWZD
aGlsZCk7CisgICAgICAgICAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOworICAgICAgICB9CisK
KyAgICAgICAgbmV3Q2hpbGQtPm1fY291bnRJblBhcmVudCA9IG5ld0NoaWxkLT5jb21wdXRlQ291
bnRJblBhcmVudCgpOworICAgICAgICBuZXdDaGlsZC0+cmVzZXRSZW5kZXJlcnMoaWRlbnRpZmll
cik7CisgICAgICAgIGlmIChuZXh0KQorICAgICAgICAgICAgbmV4dC0+cmVjb3VudChpZGVudGlm
aWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBjb2RlIGJlbG93IGhh
bmRsZXMgdGhlIGNhc2Ugd2hlbiBhIGZvcm1lcmx5IHJvb3QgaW5jcmVtZW50IGNvdW50ZXIgaXMg
bG9vc2luZyBpdHMgcm9vdCBwb3NpdGlvbgorICAgIC8vIGFuZCB0aGVyZWZvcmUgaXRzIGNoaWxk
cmVuIGJlY29tZSBuZXh0IHNpYmxpbmdzLgorICAgIC8vIElmIHRoaXMgaGFwcGVucywgdGhlIG5v
ZGUgbXVzdCBiZSBpbnNlcnRlZCBhcyBsYXN0Q2hpbGQuCisgICAgQVNTRVJUKCFuZXh0KTsKKyAg
ICBDb3VudGVyTm9kZSogbGFzdCA9IG5ld0NoaWxkLT5tX2xhc3RDaGlsZDsKKyAgICBDb3VudGVy
Tm9kZSogZmlyc3QgPSBuZXdDaGlsZC0+bV9maXJzdENoaWxkOworCisgICAgbmV3Q2hpbGQtPm1f
bmV4dFNpYmxpbmcgPSBmaXJzdDsKKyAgICBmaXJzdC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdD
aGlsZDsKKyAgICBsYXN0LT5tX25leHRTaWJsaW5nID0gMDsKKyAgICBBU1NFUlQobV9sYXN0Q2hp
bGQgPT0gcmVmQ2hpbGQpOworICAgIG1fbGFzdENoaWxkID0gbGFzdDsKKyAgICBmb3IgKG5leHQg
PSBmaXJzdDs7IG5leHQgPSBuZXh0LT5tX25leHRTaWJsaW5nKSB7CisgICAgICAgIG5leHQtPm1f
cGFyZW50ID0gdGhpczsKKyAgICAgICAgaWYgKGxhc3QgPT0gbmV4dCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBuZXdDaGlsZC0+bV9maXJzdENoaWxkID0gbmV3Q2hpbGQtPm1fbGFz
dENoaWxkID0gMDsKICAgICBuZXdDaGlsZC0+bV9jb3VudEluUGFyZW50ID0gbmV3Q2hpbGQtPmNv
bXB1dGVDb3VudEluUGFyZW50KCk7Ci0gICAgaWYgKG5leHQpCi0gICAgICAgIG5leHQtPnJlY291
bnQoaWRlbnRpZmllcik7CisgICAgbmV3Q2hpbGQtPnJlc2V0UmVuZGVyZXIoaWRlbnRpZmllcik7
CisgICAgZmlyc3QtPnJlY291bnQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuOwogfQogCiB2b2lk
IENvdW50ZXJOb2RlOjpyZW1vdmVDaGlsZChDb3VudGVyTm9kZSogb2xkQ2hpbGQsIGNvbnN0IEF0
b21pY1N0cmluZyYgaWRlbnRpZmllcikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
dW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCShyZXZpc2lvbiA1MjQ1NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDI3IEBAIHN0YXRpYyBDb3VudGVyTm9k
ZSogbWFrZUNvdW50ZXJOb2RlKFJlbmQKICAgICAgICAgb2JqZWN0LT5tX2hhc0NvdW50ZXJOb2Rl
TWFwID0gdHJ1ZTsKICAgICB9CiAgICAgbm9kZU1hcC0+c2V0KGlkZW50aWZpZXIuaW1wbCgpLCBu
ZXdOb2RlKTsKKyAgICBpZiAobmV3Tm9kZS0+cGFyZW50KCkgfHwgIW9iamVjdC0+bmV4dEluUHJl
T3JkZXIob2JqZWN0LT5wYXJlbnQoKSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIC8v
IENoZWNraW5nIGlmIHNvbWUgbm9kZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgY291bnRlciB0cmVl
IHJvb3Qgbm9kZXMKKyAgICAvLyBzaG91bGQgYmVjb21lIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSBu
b3cuCisgICAgQ291bnRlck1hcHMmIG1hcHMgPSBjb3VudGVyTWFwcygpOworICAgIFJlbmRlck9i
amVjdCogc3RheVdpdGhpbiA9IG9iamVjdC0+cGFyZW50KCk7CisgICAgQ291bnRlck5vZGUqIGN1
cnJlbnRDb3VudGVyOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBv
YmplY3QtPm5leHRJblByZU9yZGVyKHN0YXlXaXRoaW4pOyBjdXJyZW50UmVuZGVyZXI7Y3VycmVu
dFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihzdGF5V2l0aGluKSkg
eworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+bV9oYXNDb3VudGVyTm9kZU1hcCB8fCAh
KGN1cnJlbnRDb3VudGVyID0gbWFwcy5nZXQoY3VycmVudFJlbmRlcmVyKS0+Z2V0KGlkZW50aWZp
ZXIuaW1wbCgpKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1cnJlbnRD
b3VudGVyLT5wYXJlbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld05vZGUtPmZpcnN0Q2hp
bGQoKSk7CisgICAgICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyLT5sYXN0Q2hpbGQoKSkKKyAg
ICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyZXIgPSBjdXJyZW50UmVuZGVyZXItPmxhc3RDaGls
ZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXlX
aXRoaW4gIT0gY3VycmVudFJlbmRlcmVyLT5wYXJlbnQoKSB8fCAhY3VycmVudENvdW50ZXItPmhh
c1Jlc2V0VHlwZSgpKQorICAgICAgICAgICAgbmV3Tm9kZS0+aW5zZXJ0QWZ0ZXIoY3VycmVudENv
dW50ZXIsIG5ld05vZGUtPmxhc3RDaGlsZCgpLCBpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGN1
cnJlbnRSZW5kZXJlci0+bGFzdENoaWxkKCkpCisgICAgICAgICAgICBjdXJyZW50UmVuZGVyZXIg
PSBjdXJyZW50UmVuZGVyZXItPmxhc3RDaGlsZCgpOworICAgIH0KICAgICByZXR1cm4gbmV3Tm9k
ZTsKIH0KIApAQCAtMzE0LDcgKzMzNSw3IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6aW52YWxpZGF0
ZShjb25zdCBBdG8KICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0K
IAotc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oY29uc3QgQXRvbWljU3Ry
aW5nJiBpZGVudGlmaWVyLCBDb3VudGVyTm9kZSogbm9kZSkKK3N0YXRpYyB2b2lkIGRlc3Ryb3lD
b3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmll
ciwgQ291bnRlck5vZGUqIG5vZGUpCiB7CiAgICAgQ291bnRlck5vZGUqIHByZXZpb3VzOwogICAg
IGZvciAoQ291bnRlck5vZGUqIGNoaWxkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsgY2hpbGQg
JiYgY2hpbGQgIT0gbm9kZTsgY2hpbGQgPSBwcmV2aW91cykgewpAQCAtMzI5LDI3ICszNTAsODgg
QEAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oYwogICAgICAgICB9CiAg
ICAgICAgIGRlbGV0ZSBjaGlsZDsKICAgICB9CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci0+ZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCgpKSB7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuID0g
cmVuZGVyZXItPnZpcnR1YWxDaGlsZHJlbigpKQorICAgICAgICAgICAgY2hpbGRyZW4tPmludmFs
aWRhdGVDb3VudGVycyhyZW5kZXJlciwgaWRlbnRpZmllcik7CisgICAgfQorICAgIGlmIChDb3Vu
dGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50KCkpCisgICAgICAgIHBhcmVudC0+cmVtb3Zl
Q2hpbGQobm9kZSwgaWRlbnRpZmllcik7CisgICAgZGVsZXRlIG5vZGU7CiB9CiAKLXZvaWQgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG9iamVjdCkKK3Zv
aWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewogICAgIENvdW50ZXJNYXBzJiBtYXBzID0gY291bnRlck1hcHMoKTsKLSAgICBDb3Vu
dGVyTWFwKiBtYXAgPSBtYXBzLmdldChvYmplY3QpOwotICAgIGlmICghbWFwKQorICAgIENvdW50
ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQocmVuZGVyZXIpOworICAg
IGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1h
cHMucmVtb3ZlKG9iamVjdCk7Ci0KKyAgICBDb3VudGVyTWFwKiBtYXAgPSBtYXBzSXRlcmF0b3It
PnNlY29uZDsKICAgICBDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OwogICAgIGZvciAoQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDb3VudGVyTm9kZSogbm9kZSA9IGl0LT5zZWNv
bmQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5maXJzdC5nZXQoKSk7Ci0g
ICAgICAgIGRlc3Ryb3lDb3VudGVyTm9kZUNoaWxkcmVuKGlkZW50aWZpZXIsIG5vZGUpOwotICAg
ICAgICBpZiAoQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpKQotICAgICAgICAg
ICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgZGVsZXRl
IG5vZGU7CisgICAgICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50
aWZpZXIsIGl0LT5zZWNvbmQpOwogICAgIH0KLQorICAgIG1hcHMucmVtb3ZlKG1hcHNJdGVyYXRv
cik7CiAgICAgZGVsZXRlIG1hcDsKKyAgICByZW5kZXJlci0+bV9oYXNDb3VudGVyTm9kZU1hcCA9
IGZhbHNlOworfQorCit2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpCit7Cisg
ICAgQ291bnRlck1hcCogbWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOworICAgIGlm
ICghbWFwKQorICAgICAgICByZXR1cm47CisgICAgQ291bnRlck1hcDo6aXRlcmF0b3IgbWFwSXRl
cmF0b3IgPSBtYXAtPmZpbmQoaWRlbnRpZmllci5pbXBsKCkpOworICAgIGlmIChtYXBJdGVyYXRv
ciA9PSBtYXAtPmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgZGVzdHJveUNvdW50ZXJOb2Rl
V2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnNlY29uZCk7CisgICAg
bWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOworICAgIC8vIERvIG5vdCBkZWxldGUgbWFwIGV2ZW4g
aWYgZW1wdHkgYXMgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGFsbCBj
b3VudGVycyBmb3IgYSByZW5kZXJlcgorICAgIC8vIGFyZSBkZWxldGVkIGRlc3Ryb3lDb3VudGVy
Tm9kZXMgc2hvdWxkIGJlIGNhbGxlZCBpbnN0ZWFkLiBUaGUgbWFwIG1heSBiZSBlbXB0eSBvbmx5
IHRlbXBvcmFyZWx5IHdoaWxlCisgICAgLy8gb2xkIGNvdW50ZXJzIGFzc29jaWF0ZWQgd2l0aCBh
IHJlbmRlcmVyIGFyZSBkZWxldGVkIGJlZm9yZSBuZXcgb25lcyBhcmUgY3JlYXRlZC4KK30KKwor
CitzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorewor
ICAgIEFTU0VSVChyZW5kZXJlci0+c3R5bGUoKSk7CisgICAgY29uc3QgQ291bnRlckRpcmVjdGl2
ZU1hcCogZGlyZWN0aXZlTWFwID0gcmVuZGVyZXItPnN0eWxlKCktPmNvdW50ZXJEaXJlY3RpdmVz
KCk7CisgICAgaWYgKCFkaXJlY3RpdmVNYXApCisgICAgICAgIHJldHVybjsKKyAgICBDb3VudGVy
RGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwor
ICAgIGlmICghcmVuZGVyZXItPm1faGFzQ291bnRlck5vZGVNYXApIHsKKyAgICAgICAgZm9yIChD
b3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIENvdW50ZXJNYXAqIGNvdW50ZXJNYXAgPSBjb3VudGVyTWFwcygpLmdl
dChyZW5kZXJlcik7CisgICAgQVNTRVJUKGNvdW50ZXJNYXApOworICAgIGZvciAoQ291bnRlckRp
cmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDb3VudGVyTm9kZSogbm9kZSA9IGNvdW50ZXJNYXAt
PmdldChpdC0+Zmlyc3QuZ2V0KCkpOworICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSks
IGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENvdW50
ZXJOb2RlKiBuZXdQYXJlbnQgPSAwOworICAgICAgICBDb3VudGVyTm9kZSogbmV3UHJldmlvdXNT
aWJsaW5nOworICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNTdHJp
bmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3
UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBh
cmVudCgpOworICAgICAgICBpZiAobmV3UGFyZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1Np
YmxpbmcgPT0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKHBhcmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9k
ZSwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2Rl
LCBuZXdQcmV2aW91c1NpYmxpbmcsIGl0LT5maXJzdC5nZXQoKSk7CisgICAgfQogfQogCit2b2lk
IFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCit7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBSZW5kZXJPYmplY3QqIGRlc2Nl
bmRhbnQgPSByZW5kZXJlcjsKKyAgICBkbyB7CisgICAgICAgIHVwZGF0ZUNvdW50ZXJzKGRlc2Nl
bmRhbnQpOworICAgICAgICBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIo
cmVuZGVyZXIpOworICAgIH0gd2hpbGUgKGRlc2NlbmRhbnQpOworfQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNpb24gNTI0NTQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDggQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIGlkZW50aWZpZXIpOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2Rl
cyhSZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGUoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMg
dm9pZCByZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqKTsKIAogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNTI0NTQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsNyArMzA1LDcgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdAogICAgICAgICAvLyBKdXN0
IGFkZCBpdC4uLgogICAgICAgICBjaGlsZHJlbi0+aW5zZXJ0Q2hpbGROb2RlKHRoaXMsIG5ld0No
aWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQotICAgIAorICAgIFJlbmRlckNvdW50ZXI6OnJlbmRl
cmVyU3VidHJlZUF0dGFjaGVkKG5ld0NoaWxkKTsKICAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dCgp
ICYmIG5ld0NoaWxkLT5zdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgPT0gQ0FQSVRBTElaRSkgewog
ICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0gdG9SZW5kZXJUZXh0
KG5ld0NoaWxkKS0+b3JpZ2luYWxUZXh0KCk7CiAgICAgICAgIGlmICh0ZXh0VG9UcmFuc2Zvcm0p
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1MjU1MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTI0ICBDYXJvbCBTemFibyAgPGNh
cm9sLnN6YWJvQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDU1MyLjEgQ291bnRlcnMgbm90IHVwZGF0ZWQgd2hlbiBuZXcgZWxlbWVu
dHMgYXJlIGluc2VydGVkIGluIHRoZSBET00uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMjg4NAorCisgICAgICAgICogZmFzdC9jc3MvY291bnRlcnMv
YWRkaW5nLW5vZGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvY291
bnRlcnMvYWRkaW5nLW5vZGVzLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEyLTI0ICBBbmRyYXMgQmVj
c2kgIDxhYmVjc2lAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5
IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvYWRk
aW5nLW5vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9jb3VudGVycy9hZGRpbmctbm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5vZGVzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBzaG91bGQg
aGF2ZSB0aGUgc2FtZSBjb250ZW50OgorCisxLTItMi4wLTIuMC4xLQorMS0yLTIuMC0yLjAuMS0K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvYWRkaW5n
LW5vZGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiI+Cis8aHRtbD48aGVhZD4KKyAgICA8
bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD1VVEYtOCI+CisgICAgPHRpdGxlPkFkZGluZyBub2RlcyB0aGF0IGFmZmVjdCB0aGUgQ1NTIGNv
dW50ZXIgdHJlZTwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJhdXRob3IiIGhyZWY9Im1haWx0bzpj
YXJvbC5zemFib0Bub2tpYS5jb20iIHRpdGxlPSJDYXJvbCBTemFibyI+CisgICAgPGxpbmsgcmVs
PSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9nZW5lcmF0ZS5odG1sI2Nv
dW50ZXJzIj4KKyAgICA8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RS
L0NTUzIxL2dlbmVyYXRlLmh0bWwjcHJvcGRlZi1jb250ZW50Ij4KKyAgICA8bGluayByZWw9Imhl
bHAiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNjb3VudGVy
Ij4KKyAgICA8bWV0YSBjb250ZW50PSJkb20iIG5hbWU9ImZsYWdzIj4KKyAgICA8bWV0YSBodHRw
LWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKyAgICA8bWV0
YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkgeyB3aGl0ZS1z
cGFjZTogbm93cmFwOyB9CisgICAgICAgIC5yZXNldCB7IGNvdW50ZXItcmVzZXQ6IGM7IH0KKyAg
ICAgICAgLmluY3JlbWVudDpiZWZvcmUsIC51c2U6YmVmb3JlIHsgY29udGVudDogY291bnRlcnMo
YywgIi4iKSAiLSI7IH0KKyAgICAgICAgLmluY3JlbWVudCB7IGNvdW50ZXItaW5jcmVtZW50OiBj
OyB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHJ1bigpIHsKKyAgICAgICAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRlc3QiKTsKKyAgICAgICAgICAgIG5ld1NwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgbmV3U3BhbkVsZW1lbnQuc2V0QXR0cmlidXRl
KCJjbGFzcyIsImluY3JlbWVudCIpOworICAgICAgICAgICAgbmV3U3BhbkVsZW1lbnQuc2V0QXR0
cmlidXRlKCJpZCIsIm5ld05vZGUiKTsKKyAgICAgICAgICAgIHRlc3RFbGVtZW50Lmluc2VydEJl
Zm9yZShuZXdTcGFuRWxlbWVudCwgdGVzdEVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgY29u
c29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgICAgICAgICAg
ICAgc3Bhbkxpc3QgPSB0ZXN0RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpCisg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYW5MaXN0Lmxlbmd0aDsgKytpICkgewor
ICAgICAgICAgICAgICAgICAgICBuZXdTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWQgPSBzcGFuTGlzdC5pdGVtKGkpLmdl
dEF0dHJpYnV0ZSgiaWQiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdTcGFuRWxlbWVudC5pbm5lclRleHQgPSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5jb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChuZXdTcGFuRWxlbWVudC5pbm5lclRleHQubGVuZ3RoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3U3BhbkVsZW1lbnQuaW5uZXJUZXh0ID0gbmV3U3BhbkVsZW1lbnQu
aW5uZXJUZXh0ICsgIi0iOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxk
KG5ld1NwYW5FbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVz
dEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVmZXJlbmNlIik7
CisgICAgICAgICAgICAgICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGVzdEVsZW1lbnQuaW5u
ZXJIVE1MLnJlcGxhY2UoLzxiPmE8dT5iPFwvdT48XC9iPi9nLCIiKTsKKyAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD48Ym9keSBvbmxvYWQ9InNldFRpbWVvdXQoJ3J1
bigpJywgMCkiPgorICAgIDxwPlRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHNob3VsZCBoYXZlIHRo
ZSBzYW1lIGNvbnRlbnQ6PC9wPgorICAgIDxkaXYgaWQ9InRlc3QiPjxiPmE8dT5iPC91PjwvYj48
Yj5hPHU+YjwvdT48L2I+PHNwYW4gaWQ9InBhcmVudCI+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlk
PSJyb290T25lIiBjbGFzcz0iaW5jcmVtZW50Ii8+PGI+YTx1PmI8L3U+PC9iPjwvc3Bhbj48Yj5h
PHU+YjwvdT48L2I+PHNwYW4gaWQ9InJvb3RUd28iIGNsYXNzPSJyZXNldCI+PGI+YTx1PmI8L3U+
PC9iPjwvc3Bhbj48Yj5hPHU+YjwvdT48L2I+PHNwYW4gaWQ9InIyYzEiIGNsYXNzPSJ1c2UiPjxi
PmE8dT5iPC91PjwvYj48c3BhbiBpZD0ibnJyZXNldCIgY2xhc3M9InJlc2V0Ij48Yj5hPHU+Yjwv
dT48L2I+PHNwYW4gaWQ9InIzYzEiIGNsYXNzPSJpbmNyZW1lbnQiPjwvc3Bhbj48Yj5hPHU+Yjwv
dT48L2I+PC9zcGFuPjwvc3Bhbj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJyZWZlcmVuY2UiPjEtPGI+
YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+Mi08Yj5hPHU+Yjwv
dT48L2I+PGI+YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+Mi4w
LTxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+Mi4wLjEtPGI+YTx1PmI8L3U+PC9iPjwv
ZGl2PgorICAgIDxocj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT48L2h0
bWw+Cg==
</data>
<flag name="review"
          id="28637"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46407</attachid>
            <date>2010-01-12 16:10:11 -0800</date>
            <delta_ts>2010-01-15 13:30:12 -0800</delta_ts>
            <desc>Proposed Patch; Addressed Darin&apos;s concerns. Removed an invalid assertion and handled the case.</desc>
            <filename>patchFor32884-6.patch</filename>
            <type>text/plain</type>
            <size>17988</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjU1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMTItMjQgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENTUzIuMSBDb3VudGVycyBub3QgdXBkYXRlZCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0
ZWQgaW4gdGhlIERPTS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyODg0CisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5v
ZGVzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIpOgorICAgICAgICBNb2RpZmllZCB0
byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIG5vZGVzIHdpdGggY2hpbGRyZW4uIE5lZWRlZCB3aGVu
IGZvcm1lcmx5IAorICAgICAgICByb290IG5vZGVzIGJlY29tZSBkZXNjZW5kYW50cyBvZiBhIG5l
dyBub2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VDb3VudGVyTm9kZSk6CisgICAgICAgIENoYW5nZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIHdoZW4gcm9vdCBjb3VudGVyIG5vZGVzIGxvb3NlIHRoZWlyIHJvb3QgCisgICAgICAg
IHN0YXR1cyBhcyBhIHJlc3VsdCBvZiBhIG5ldyByb290IGNvdW50ZXIgbm9kZSBjcmVhdGlvbi4g
CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbCk6
CisgICAgICAgIFJlZmFjdG9yZWQgbW9yZSBjb2RlIGludG8gZGVzdHJveUNvdW50ZXJOb2RlQ2hp
bGRyZW4gYW5kIHJlbmFtZWQgdGhlCisgICAgICAgIGZ1bmN0aW9uIGFjY29yZGluZyB0byBpdHMg
bmV3IGFjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZXMpOgorICAgICAgICBTaW1wbGlmaWVkIHRvIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRo
ZSBuZXcgZGVzdHJveUNvdW50ZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2RlKToKKyAgICAgICAgQWRkZWQgdG8gYWxsb3cgZm9yIHNlbGVj
dGl2ZSBjb3VudGVyTm9kZSBkZXN0cnVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKToKKyAgICAgICAgQWRkZWQgdG8gcmVmcmVz
aCBjb3V0ZXIgdmFsdWVzIGluIHJlc3BvbnNlIHRvIERPTSBjaGFuZ2VzLgorICAgICAgICBGb3Ig
cmVuZGVyZXJzIHdpdGggbm8gYXR0YWNoZWQgY291bnRlcnMgdGhlIGV4ZWN1dGlvbiB0aW1lIG9m
IHRoaXMKKyAgICAgICAgZnVuY3Rpb24gY2Fubm90IGJlIGRpc2Nlcm5lZCBpbiBjb21wYXJpc29u
IHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvCisgICAgICAgIGFkZCBhIG5vZGUgb3IgY2hhbmdlIHRo
ZSBzdHlsZSBvZiBhIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVycyk6Cisg
ICAgICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuIFVwZGF0
ZXMgdGhlIGNvdW50ZXJzCisgICAgICAgIGF0dGFjaGVkIHRvIGEgUmVuZGVyZXIgaW4gcmVzcG9u
c2UgdG8gdGhlIHJlbmRlcmVyIG9yIGl0cyBhbmNlc3RvcnMKKyAgICAgICAgYmVpbmcgYXR0YWNo
ZWQgdG8gdGhlIHJlbmRlcmVyIHRyZWUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHRvIHVwZGF0
ZSBjb3VudGVyIHZhbHVlcyBpZiBuZWVkZWQuCisKIDIwMDktMTItMjQgIEplc3NpZSBCZXJsaW4g
IDxqYmVybGluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVp
bi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAJKHJldmlzaW9uIDUyNDU0KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwx
NiArMjIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb3VudGVyTm9kZS5o
IgogCisjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLS8vIEZJWE1FOiBUaGVyZSdzIGN1cnJlbnRseSBubyBz
dHJhdGVneSBmb3IgZ2V0dGluZyB0aGUgY291bnRlciB0cmVlIHVwZGF0ZWQgd2hlbiBuZXcKLS8v
IGVsZW1lbnRzIHdpdGggY291bnRlci1yZXNldCBhbmQgY291bnRlci1pbmNyZW1lbnQgc3R5bGVz
IGFyZSBhZGRlZCB0byB0aGUgcmVuZGVyIHRyZWUuCi0vLyBBbHNvLCB0aGUgY29kZSBjYW4ndCBo
YW5kbGUgY2hhbmdlcyB3aGVyZSBhbiBleGlzdGluZyBub2RlIG5lZWRzIHRvIGNoYW5nZSBpbnRv
IGEKLS8vICJyZXNldCIgbm9kZSwgb3IgZnJvbSBhICJyZXNldCIgbm9kZSBiYWNrIHRvIG5vdCBh
ICJyZXNldCIgbm9kZS4gQXMgb2YgdGhpcyB3cml0aW5nLAotLy8gYXQgbGVhc3Qgc29tZSBvZiB0
aGVzZSBwcm9ibGVtcyBtYW5pZmVzdCBhcyBmYWlsdXJlcyBpbiB0aGUgdDEyMDQtaW5jcmVtZW50
IGFuZAotLy8gdDEyMDQtcmVzZXQgdGVzdHMgaW4gdGhlIENTUyAyLjEgdGVzdCBzdWl0ZS4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb3VudGVyTm9kZTo6Q291bnRlck5vZGUoUmVuZGVyT2Jq
ZWN0KiBvLCBib29sIGhhc1Jlc2V0VHlwZSwgaW50IHZhbHVlKQpAQCAtMTQ0LDYgKzEzOCwxMSBA
QCB2b2lkIENvdW50ZXJOb2RlOjppbnNlcnRBZnRlcihDb3VudGVyTm9kCiAgICAgQVNTRVJUKCFu
ZXdDaGlsZC0+bV9uZXh0U2libGluZyk7CiAgICAgQVNTRVJUKCFyZWZDaGlsZCB8fCByZWZDaGls
ZC0+bV9wYXJlbnQgPT0gdGhpcyk7CiAKKyAgICBpZiAobmV3Q2hpbGQtPm1faGFzUmVzZXRUeXBl
KSB7CisgICAgICAgIHdoaWxlIChtX2xhc3RDaGlsZCAhPSByZWZDaGlsZCkKKyAgICAgICAgICAg
IFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShtX2xhc3RDaGlsZC0+cmVuZGVyZXIo
KSwgaWRlbnRpZmllcik7CisgICAgfQorCiAgICAgQ291bnRlck5vZGUqIG5leHQ7CiAKICAgICBp
ZiAocmVmQ2hpbGQpIHsKQEAgLTE1NCwyMSArMTUzLDU3IEBAIHZvaWQgQ291bnRlck5vZGU6Omlu
c2VydEFmdGVyKENvdW50ZXJOb2QKICAgICAgICAgbV9maXJzdENoaWxkID0gbmV3Q2hpbGQ7CiAg
ICAgfQogCi0gICAgaWYgKG5leHQpIHsKLSAgICAgICAgQVNTRVJUKG5leHQtPm1fcHJldmlvdXNT
aWJsaW5nID09IHJlZkNoaWxkKTsKLSAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBu
ZXdDaGlsZDsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sYXN0Q2hpbGQgPT0gcmVm
Q2hpbGQpOwotICAgICAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOwotICAgIH0KLQogICAgIG5l
d0NoaWxkLT5tX3BhcmVudCA9IHRoaXM7CiAgICAgbmV3Q2hpbGQtPm1fcHJldmlvdXNTaWJsaW5n
ID0gcmVmQ2hpbGQ7Ci0gICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcgPSBuZXh0OwogCi0gICAg
bmV3Q2hpbGQtPm1fY291bnRJblBhcmVudCA9IG5ld0NoaWxkLT5jb21wdXRlQ291bnRJblBhcmVu
dCgpOworICAgIGlmICghbmV3Q2hpbGQtPm1fZmlyc3RDaGlsZCB8fCBuZXdDaGlsZC0+bV9oYXNS
ZXNldFR5cGUpIHsKKyAgICAgICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcgPSBuZXh0OworICAg
ICAgICBpZiAobmV4dCkgeworICAgICAgICAgICAgQVNTRVJUKG5leHQtPm1fcHJldmlvdXNTaWJs
aW5nID09IHJlZkNoaWxkKTsKKyAgICAgICAgICAgIG5leHQtPm1fcHJldmlvdXNTaWJsaW5nID0g
bmV3Q2hpbGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0Q2hp
bGQgPT0gcmVmQ2hpbGQpOworICAgICAgICAgICAgbV9sYXN0Q2hpbGQgPSBuZXdDaGlsZDsKKyAg
ICAgICAgfQorCisgICAgICAgIG5ld0NoaWxkLT5tX2NvdW50SW5QYXJlbnQgPSBuZXdDaGlsZC0+
Y29tcHV0ZUNvdW50SW5QYXJlbnQoKTsKKyAgICAgICAgbmV3Q2hpbGQtPnJlc2V0UmVuZGVyZXJz
KGlkZW50aWZpZXIpOworICAgICAgICBpZiAobmV4dCkKKyAgICAgICAgICAgIG5leHQtPnJlY291
bnQoaWRlbnRpZmllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgY29k
ZSBiZWxvdyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gYSBmb3JtZXJseSByb290IGluY3JlbWVudCBj
b3VudGVyIGlzIGxvb3NpbmcgaXRzIHJvb3QgcG9zaXRpb24KKyAgICAvLyBhbmQgdGhlcmVmb3Jl
IGl0cyBjaGlsZHJlbiBiZWNvbWUgbmV4dCBzaWJsaW5ncy4KKyAgICBDb3VudGVyTm9kZSogbGFz
dCA9IG5ld0NoaWxkLT5tX2xhc3RDaGlsZDsKKyAgICBDb3VudGVyTm9kZSogZmlyc3QgPSBuZXdD
aGlsZC0+bV9maXJzdENoaWxkOworCisgICAgbmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcgPSBmaXJz
dDsKKyAgICBmaXJzdC0+bV9wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZDsKKyAgICAvLyBUaGUg
Y2FzZSB3aGVuIHRoZSBvcmlnaW5hbCBuZXh0IHNpYmxpbmcgb2YgdGhlIGluc2VydGVkIG5vZGUg
YmVjb21lcyBhIGNoaWxkIG9mCisgICAgLy8gb25lIG9mIHRoZSBmb3JtZXIgY2hpbGRyZW4gb2Yg
dGhlIGluc2VydGVkIG5vZGUgaXMgbm90IGhhbmRsZWQgYXMgaXQgaXMgYmVsaWV2ZWQKKyAgICAv
LyB0byBiZSBpbXBvc3NpYmxlIHNpbmNlOgorICAgIC8vIDEuIGlmIHRoZSBpbmNyZW1lbnQgY291
bnRlciBub2RlIGxvc3QgaXQncyByb290IHBvc2l0aW9uIGFzIGEgcmVzdWx0IG9mIGFub3RoZXIK
KyAgICAvLyAgICBjb3VudGVyIG5vZGUgYmVpbmcgY3JlYXRlZCwgaXQgd2lsbCBiZSBpbnNlcnRl
ZCBhcyB0aGUgbGFzdCBjaGlsZCBzbyBuZXh0IGlzIG51bGwuCisgICAgLy8gMi4gaWYgdGhlIGlu
Y3JlbWVudCBjb3VudGVyIG5vZGUgbG9zdCBpdCdzIHJvb3QgcG9zaXRpb24gYXMgYSByZXN1bHQg
b2YgYSByZW5kZXJlciBiZWluZworICAgIC8vICAgIGluc2VydGVkIGludG8gdGhlIGRvY3VtZW50
J3MgcmVuZGVyIHRyZWUsIGFsbCBpdHMgZm9ybWVyIGNoaWxkcmVuIGNvdW50ZXJzIGFyZSBhdHRh
Y2hlZAorICAgIC8vICAgIHRvIGNoaWxkcmVuIG9mIHRoZSBpbnNlcnRlZCByZW5kZXJlciBhbmQg
aGVuY2UgY2Fubm90IGJlIGluIHNjb3BlIGZvciBjb3VudGVyIG5vZGVzCisgICAgLy8gICAgYXR0
YWNoZWQgdG8gcmVuZGVyZXJzIHRoYXQgd2VyZSBhbHJlYWR5IGluIHRoZSBkb2N1bWVudCdzIHJl
bmRlciB0cmVlLgorICAgIGxhc3QtPm1fbmV4dFNpYmxpbmcgPSBuZXh0OwogICAgIGlmIChuZXh0
KQotICAgICAgICBuZXh0LT5yZWNvdW50KGlkZW50aWZpZXIpOworICAgICAgICBuZXh0LT5tX3By
ZXZpb3VzU2libGluZyA9IGxhc3Q7CisgICAgZWxzZQorICAgICAgICBtX2xhc3RDaGlsZCA9IGxh
c3Q7CisgICAgZm9yIChuZXh0ID0gZmlyc3Q7IDsgbmV4dCA9IG5leHQtPm1fbmV4dFNpYmxpbmcp
IHsKKyAgICAgICAgbmV4dC0+bV9wYXJlbnQgPSB0aGlzOworICAgICAgICBpZiAobGFzdCA9PSBu
ZXh0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG5ld0NoaWxkLT5tX2ZpcnN0Q2hp
bGQgPSAwOworICAgIG5ld0NoaWxkLT5tX2xhc3RDaGlsZCA9IDA7CisgICAgbmV3Q2hpbGQtPm1f
Y291bnRJblBhcmVudCA9IG5ld0NoaWxkLT5jb21wdXRlQ291bnRJblBhcmVudCgpOworICAgIG5l
d0NoaWxkLT5yZXNldFJlbmRlcmVyKGlkZW50aWZpZXIpOworICAgIGZpcnN0LT5yZWNvdW50KGlk
ZW50aWZpZXIpOwogfQogCiB2b2lkIENvdW50ZXJOb2RlOjpyZW1vdmVDaGlsZChDb3VudGVyTm9k
ZSogb2xkQ2hpbGQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZpc2lvbiA1MjQ1NCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDMw
IEBAIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmQKICAgICAgICAgb2Jq
ZWN0LT5tX2hhc0NvdW50ZXJOb2RlTWFwID0gdHJ1ZTsKICAgICB9CiAgICAgbm9kZU1hcC0+c2V0
KGlkZW50aWZpZXIuaW1wbCgpLCBuZXdOb2RlKTsKKyAgICBpZiAobmV3Tm9kZS0+cGFyZW50KCkg
fHwgIW9iamVjdC0+bmV4dEluUHJlT3JkZXIob2JqZWN0LT5wYXJlbnQoKSkpCisgICAgICAgIHJl
dHVybiBuZXdOb2RlOworICAgIC8vIENoZWNraW5nIGlmIHNvbWUgbm9kZXMgdGhhdCB3ZXJlIHBy
ZXZpb3VzbHkgY291bnRlciB0cmVlIHJvb3Qgbm9kZXMKKyAgICAvLyBzaG91bGQgYmVjb21lIGNo
aWxkcmVuIG9mIHRoaXMgbm9kZSBub3cuCisgICAgQ291bnRlck1hcHMmIG1hcHMgPSBjb3VudGVy
TWFwcygpOworICAgIFJlbmRlck9iamVjdCogc3RheVdpdGhpbiA9IG9iamVjdC0+cGFyZW50KCk7
CisgICAgQ291bnRlck5vZGUqIGN1cnJlbnRDb3VudGVyOworICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50UmVuZGVyZXIgPSBvYmplY3QtPm5leHRJblByZU9yZGVyKHN0YXlXaXRoaW4pOyBj
dXJyZW50UmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+bmV4dElu
UHJlT3JkZXIoc3RheVdpdGhpbikpIHsKKyAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPm1f
aGFzQ291bnRlck5vZGVNYXApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVu
dENvdW50ZXIgPSBtYXBzLmdldChjdXJyZW50UmVuZGVyZXIpLT5nZXQoaWRlbnRpZmllci5pbXBs
KCkpOworICAgICAgICBpZiAoIWN1cnJlbnRDb3VudGVyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjdXJyZW50Q291bnRlci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVChuZXdOb2RlLT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRSZW5k
ZXJlci0+bGFzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gY3Vy
cmVudFJlbmRlcmVyLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdGF5V2l0aGluICE9IGN1cnJlbnRSZW5kZXJlci0+cGFyZW50KCkg
fHwgIWN1cnJlbnRDb3VudGVyLT5oYXNSZXNldFR5cGUoKSkKKyAgICAgICAgICAgIG5ld05vZGUt
Pmluc2VydEFmdGVyKGN1cnJlbnRDb3VudGVyLCBuZXdOb2RlLT5sYXN0Q2hpbGQoKSwgaWRlbnRp
Zmllcik7CisgICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXItPmxhc3RDaGlsZCgpKQorICAgICAg
ICAgICAgY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyLT5sYXN0Q2hpbGQoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIG5ld05vZGU7CiB9CiAKQEAgLTMxNCw3ICszMzgsNyBAQCB2b2lkIFJl
bmRlckNvdW50ZXI6OmludmFsaWRhdGUoY29uc3QgQXRvCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZUNo
aWxkcmVuKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgQ291bnRlck5vZGUqIG5vZGUp
CitzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChjb25zdCBB
dG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIENvdW50ZXJOb2RlKiBub2RlKQogewogICAgIENvdW50
ZXJOb2RlKiBwcmV2aW91czsKICAgICBmb3IgKENvdW50ZXJOb2RlKiBjaGlsZCA9IG5vZGUtPmxh
c3REZXNjZW5kYW50KCk7IGNoaWxkICYmIGNoaWxkICE9IG5vZGU7IGNoaWxkID0gcHJldmlvdXMp
IHsKQEAgLTMyOSwyNyArMzUzLDg1IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZUNo
aWxkcmVuKGMKICAgICAgICAgfQogICAgICAgICBkZWxldGUgY2hpbGQ7CiAgICAgfQorICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXItPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgeworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHJlbmRlcmVyLT52aXJ0dWFsQ2hpbGRyZW4oKSkKKyAgICAg
ICAgICAgIGNoaWxkcmVuLT5pbnZhbGlkYXRlQ291bnRlcnMocmVuZGVyZXIsIGlkZW50aWZpZXIp
OworICAgIH0KKyAgICBpZiAoQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpKQor
ICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlkZW50aWZpZXIpOworICAgIGRlbGV0
ZSBub2RlOwogfQogCi12b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCit2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBDb3VudGVyTWFwcyYgbWFwcyA9IGNv
dW50ZXJNYXBzKCk7Ci0gICAgQ291bnRlck1hcCogbWFwID0gbWFwcy5nZXQob2JqZWN0KTsKLSAg
ICBpZiAoIW1hcCkKKyAgICBDb3VudGVyTWFwczo6aXRlcmF0b3IgbWFwc0l0ZXJhdG9yID0gbWFw
cy5maW5kKHJlbmRlcmVyKTsKKyAgICBpZiAobWFwc0l0ZXJhdG9yID09IG1hcHMuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtYXBzLnJlbW92ZShvYmplY3QpOwotCisgICAgQ291bnRlck1h
cCogbWFwID0gbWFwc0l0ZXJhdG9yLT5zZWNvbmQ7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ291bnRl
ck5vZGUqIG5vZGUgPSBpdC0+c2Vjb25kOwogICAgICAgICBBdG9taWNTdHJpbmcgaWRlbnRpZmll
cihpdC0+Zmlyc3QuZ2V0KCkpOwotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihp
ZGVudGlmaWVyLCBub2RlKTsKLSAgICAgICAgaWYgKENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2Rl
LT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWRlbnRp
Zmllcik7Ci0gICAgICAgIGRlbGV0ZSBub2RlOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVX
aXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+c2Vjb25kKTsKICAgICB9Ci0KKyAgICBt
YXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIGRlbGV0ZSBtYXA7CisgICAgcmVuZGVyZXIt
Pm1faGFzQ291bnRlck5vZGVNYXAgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJDb3VudGVyOjpk
ZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZGVudGlmaWVyKQoreworICAgIENvdW50ZXJNYXAqIG1hcCA9IGNvdW50ZXJNYXBzKCku
Z2V0KHJlbmRlcmVyKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIENvdW50
ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgp
KTsKKyAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0
ZXJhdG9yLT5zZWNvbmQpOworICAgIG1hcC0+cmVtb3ZlKG1hcEl0ZXJhdG9yKTsKKyAgICAvLyBE
byBub3QgZGVsZXRlIG1hcCBldmVuIGlmIGVtcHR5IGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5v
dCBiZSBjYWxsZWQgd2hlbiBhbGwgY291bnRlcnMgZm9yIGEgcmVuZGVyZXIKKyAgICAvLyBhcmUg
ZGVsZXRlZCBkZXN0cm95Q291bnRlck5vZGVzIHNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZC4gVGhl
IG1hcCBtYXkgYmUgZW1wdHkgb25seSB0ZW1wb3JhcmlseSB3aGlsZQorICAgIC8vIG9sZCBjb3Vu
dGVycyBhc3NvY2lhdGVkIHdpdGggYSByZW5kZXJlciBhcmUgZGVsZXRlZCBiZWZvcmUgbmV3IG9u
ZXMgYXJlIGNyZWF0ZWQuCit9CisKKworc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQocmVuZGVyZXItPnN0eWxlKCkpOworICAg
IGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIGRpcmVjdGl2ZU1hcCA9IHJlbmRlcmVyLT5zdHls
ZSgpLT5jb3VudGVyRGlyZWN0aXZlcygpOworICAgIGlmICghZGlyZWN0aXZlTWFwKQorICAgICAg
ICByZXR1cm47CisgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
ZGlyZWN0aXZlTWFwLT5lbmQoKTsKKyAgICBpZiAoIXJlbmRlcmVyLT5tX2hhc0NvdW50ZXJOb2Rl
TWFwKSB7CisgICAgICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSks
IGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3VudGVyTWFwKiBjb3VudGVy
TWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOworICAgIEFTU0VSVChjb3VudGVyTWFw
KTsKKyAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGly
ZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ291bnRlck5v
ZGUqIG5vZGUgPSBjb3VudGVyTWFwLT5nZXQoaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgaWYg
KCFub2RlKSB7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0
cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBDb3VudGVyTm9kZSogbmV3UGFyZW50ID0gMDsKKyAgICAgICAgQ291
bnRlck5vZGUqIG5ld1ByZXZpb3VzU2libGluZzsKKyAgICAgICAgZmluZFBsYWNlRm9yQ291bnRl
cihyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSksIG5vZGUtPmhhc1Jlc2V0
VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1ByZXZpb3VzU2libGluZyk7CisgICAgICAgIENvdW50ZXJO
b2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKG5ld1BhcmVudCA9PSBw
YXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICBw
YXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIG5ld1Bh
cmVudC0+aW5zZXJ0QWZ0ZXIobm9kZSwgbmV3UHJldmlvdXNTaWJsaW5nLCBpdC0+Zmlyc3QuZ2V0
KCkpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN1YnRyZWVBdHRh
Y2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBk
ZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50
LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCisgICAgICAgIHVwZGF0ZUNvdW50ZXJzKGRlc2Nl
bmRhbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ291bnRlci5oCShyZXZpc2lvbiA1MjQ1NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnZhbGlkYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcik7CiAKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCopOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJPYmplY3QqLCBjb25zdCBBdG9taWNTdHJp
bmcmIGlkZW50aWZpZXIpOworICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3VidHJlZUF0dGFjaGVk
KFJlbmRlck9iamVjdCopOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiA1MjQ1NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0CiAgICAgICAgIC8vIEp1c3QgYWRkIGl0Li4uCiAgICAgICAgIGNoaWxkcmVu
LT5pbnNlcnRDaGlsZE5vZGUodGhpcywgbmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICB9Ci0g
ICAgCisgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQp
OwogICAgIGlmIChuZXdDaGlsZC0+aXNUZXh0KCkgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnRleHRU
cmFuc2Zvcm0oKSA9PSBDQVBJVEFMSVpFKSB7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0
ZXh0VG9UcmFuc2Zvcm0gPSB0b1JlbmRlclRleHQobmV3Q2hpbGQpLT5vcmlnaW5hbFRleHQoKTsK
ICAgICAgICAgaWYgKHRleHRUb1RyYW5zZm9ybSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyNTUyKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMDktMTItMjQgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzIuMSBDb3VudGVy
cyBub3QgdXBkYXRlZCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIERPTS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyODg0CisK
KyAgICAgICAgKiBmYXN0L2Nzcy9jb3VudGVycy9hZGRpbmctbm9kZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9jb3VudGVycy9hZGRpbmctbm9kZXMuaHRtbDogQWRk
ZWQuCisKIDIwMDktMTItMjQgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUBpbmYudS1zemVnZWQuaHU+
CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9hZGRpbmctbm9kZXMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9h
ZGRpbmctbm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1Ro
ZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGNvbnRlbnQ6CisKKzEt
Mi0yLjAtMi4wLjEtCisxLTItMi4wLTIuMC4xLQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
Y291bnRlcnMvYWRkaW5nLW5vZGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvY291bnRlcnMvYWRkaW5nLW5vZGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9hZGRpbmctbm9kZXMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQu
MDEvL0VOIj4KKzxodG1sPjxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw
ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKyAgICA8dGl0bGU+QWRkaW5n
IG5vZGVzIHRoYXQgYWZmZWN0IHRoZSBDU1MgY291bnRlciB0cmVlPC90aXRsZT4KKyAgICA8bGlu
ayByZWw9ImF1dGhvciIgaHJlZj0ibWFpbHRvOmNhcm9sLnN6YWJvQG5va2lhLmNvbSIgdGl0bGU9
IkNhcm9sIFN6YWJvIj4KKyAgICA8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnL1RSL0NTUzIxL2dlbmVyYXRlLmh0bWwjY291bnRlcnMiPgorICAgIDxsaW5rIHJlbD0iaGVs
cCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvZ2VuZXJhdGUuaHRtbCNwcm9wZGVm
LWNvbnRlbnQiPgorICAgIDxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMjEvc3luZGF0YS5odG1sI2NvdW50ZXIiPgorICAgIDxtZXRhIGNvbnRlbnQ9ImRvbSIg
bmFtZT0iZmxhZ3MiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIg
Y29udGVudD0idGV4dC9jc3MiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0
LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCI+CisgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKyAgICAgICAgYm9keSB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0KKyAgICAgICAgLnJl
c2V0IHsgY291bnRlci1yZXNldDogYzsgfQorICAgICAgICAuaW5jcmVtZW50OmJlZm9yZSwgLnVz
ZTpiZWZvcmUgeyBjb250ZW50OiBjb3VudGVycyhjLCAiLiIpICItIjsgfQorICAgICAgICAuaW5j
cmVtZW50IHsgY291bnRlci1pbmNyZW1lbnQ6IGM7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuKCkgeworICAgICAgICAgICAgdGVzdEVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpOworICAgICAgICAgICAgbmV3
U3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAg
ICBuZXdTcGFuRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaW5jcmVtZW50Iik7CisgICAg
ICAgICAgICBuZXdTcGFuRWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIiwibmV3Tm9kZSIpOworICAg
ICAgICAgICAgdGVzdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5ld1NwYW5FbGVtZW50LCB0ZXN0RWxl
bWVudC5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKTsKKyAgICAgICAgICAgICAgICBzcGFuTGlzdCA9IHRlc3RFbGVtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJzcGFuIikKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgc3Bhbkxpc3QubGVuZ3RoOyArK2kgKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1NwYW5F
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAg
ICAgICBpZCA9IHNwYW5MaXN0Lml0ZW0oaSkuZ2V0QXR0cmlidXRlKCJpZCIpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Nw
YW5FbGVtZW50LmlubmVyVGV4dCA9IGxheW91dFRlc3RDb250cm9sbGVyLmNvdW50ZXJWYWx1ZUZv
ckVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1NwYW5FbGVtZW50
LmlubmVyVGV4dC5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdTcGFuRWxlbWVu
dC5pbm5lclRleHQgPSBuZXdTcGFuRWxlbWVudC5pbm5lclRleHQgKyAiLSI7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobmV3U3BhbkVsZW1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKHRlc3RFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAgICB0ZXN0RWxlbWVu
dC5pbm5lckhUTUwgPSB0ZXN0RWxlbWVudC5pbm5lckhUTUwucmVwbGFjZSgvPGI+YTx1PmI8XC91
PjxcL2I+L2csIiIpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFk
Pjxib2R5IG9ubG9hZD0ic2V0VGltZW91dCgncnVuKCknLCAwKSI+CisgICAgPHA+VGhlIGZvbGxv
d2luZyB0d28gbGluZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgY29udGVudDo8L3A+CisgICAgPGRp
diBpZD0idGVzdCI+PGI+YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj48c3BhbiBpZD0icGFy
ZW50Ij48Yj5hPHU+YjwvdT48L2I+PHNwYW4gaWQ9InJvb3RPbmUiIGNsYXNzPSJpbmNyZW1lbnQi
Lz48Yj5hPHU+YjwvdT48L2I+PC9zcGFuPjxiPmE8dT5iPC91PjwvYj48c3BhbiBpZD0icm9vdFR3
byIgY2xhc3M9InJlc2V0Ij48Yj5hPHU+YjwvdT48L2I+PC9zcGFuPjxiPmE8dT5iPC91PjwvYj48
c3BhbiBpZD0icjJjMSIgY2xhc3M9InVzZSI+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJucnJl
c2V0IiBjbGFzcz0icmVzZXQiPjxiPmE8dT5iPC91PjwvYj48c3BhbiBpZD0icjNjMSIgY2xhc3M9
ImluY3JlbWVudCI+PC9zcGFuPjxiPmE8dT5iPC91PjwvYj48L3NwYW4+PC9zcGFuPjwvZGl2Pgor
ICAgIDxkaXYgaWQ9InJlZmVyZW5jZSI+MS08Yj5hPHU+YjwvdT48L2I+PGI+YTx1PmI8L3U+PC9i
PjxiPmE8dT5iPC91PjwvYj4yLTxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+PGI+YTx1
PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj4yLjAtPGI+YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91
PjwvYj4yLjAuMS08Yj5hPHU+YjwvdT48L2I+PC9kaXY+CisgICAgPGhyPgorICAgIDxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46708</attachid>
            <date>2010-01-15 13:30:12 -0800</date>
            <delta_ts>2010-01-15 18:14:32 -0800</delta_ts>
            <desc>Proposed patch; Addressed Darin&apos;s concerns.</desc>
            <filename>patchFor32884-2.patch</filename>
            <type>text/plain</type>
            <size>18440</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzMzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDEtMTUgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENTUzIuMSBDb3VudGVycyBub3QgdXBkYXRlZCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0
ZWQgaW4gdGhlIERPTS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyODg0CisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5v
ZGVzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIpOgorICAgICAgICBNb2RpZmllZCB0
byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIG5vZGVzIHdpdGggY2hpbGRyZW4uIE5lZWRlZCB3aGVu
IGZvcm1lcmx5IAorICAgICAgICByb290IG5vZGVzIGJlY29tZSBkZXNjZW5kYW50cyBvZiBhIG5l
dyBub2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VDb3VudGVyTm9kZSk6CisgICAgICAgIENoYW5nZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIHdoZW4gcm9vdCBjb3VudGVyIG5vZGVzIGxvc2UgdGhlaXIgcm9vdCAKKyAgICAgICAg
c3RhdHVzIGFzIGEgcmVzdWx0IG9mIGEgbmV3IHJvb3QgY291bnRlciBub2RlIGNyZWF0aW9uLiAK
KyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKToK
KyAgICAgICAgUmVmYWN0b3JlZCBtb3JlIGNvZGUgaW50byBkZXN0cm95Q291bnRlck5vZGVDaGls
ZHJlbiBhbmQgcmVuYW1lZCB0aGUKKyAgICAgICAgZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGl0cyBu
ZXcgYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50
ZXJOb2Rlcyk6CisgICAgICAgIFNpbXBsaWZpZWQgdG8gc2hhcmUgbW9yZSBjb2RlIHdpdGggdGhl
IG5ldyBkZXN0cm95Q291bnRlck5vZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICBBZGRlZCB0byBhbGxvdyBmb3Igc2VsZWN0
aXZlIGNvdW50ZXJOb2RlIGRlc3RydWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291
bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQpOgorICAgICAgICBBZGRlZCB0byByZWZyZXNo
IGNvdW50ZXIgdmFsdWVzIGluIHJlc3BvbnNlIHRvIERPTSBjaGFuZ2VzLgorICAgICAgICBGb3Ig
cmVuZGVyZXJzIHdpdGggbm8gYXR0YWNoZWQgY291bnRlcnMgdGhlIGV4ZWN1dGlvbiB0aW1lIG9m
IHRoaXMKKyAgICAgICAgZnVuY3Rpb24gY2Fubm90IGJlIGRpc2Nlcm5lZCBpbiBjb21wYXJpc29u
IHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvCisgICAgICAgIGFkZCBhIG5vZGUgb3IgY2hhbmdlIHRo
ZSBzdHlsZSBvZiBhIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVycyk6Cisg
ICAgICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuIFVwZGF0
ZXMgdGhlIGNvdW50ZXJzCisgICAgICAgIGF0dGFjaGVkIHRvIGEgUmVuZGVyZXIgaW4gcmVzcG9u
c2UgdG8gdGhlIHJlbmRlcmVyIG9yIGl0cyBhbmNlc3RvcnMKKyAgICAgICAgYmVpbmcgYXR0YWNo
ZWQgdG8gdGhlIHJlbmRlcmVyIHRyZWUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHRvIHVwZGF0
ZSBjb3VudGVyIHZhbHVlcyBpZiBuZWVkZWQuCisKIDIwMTAtMDEtMTUgIE5hdGUgQ2hhcGluICA8
amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXpr
b3YuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCShyZXZpc2lvbiA1MzMzNikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
MTYgKzIyLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ291bnRlck5vZGUu
aCIKIAorI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKICNpbmNsdWRlIDxzdGRpby5oPgogCi0vLyBGSVhNRTogVGhlcmUncyBjdXJyZW50bHkgbm8g
c3RyYXRlZ3kgZm9yIGdldHRpbmcgdGhlIGNvdW50ZXIgdHJlZSB1cGRhdGVkIHdoZW4gbmV3Ci0v
LyBlbGVtZW50cyB3aXRoIGNvdW50ZXItcmVzZXQgYW5kIGNvdW50ZXItaW5jcmVtZW50IHN0eWxl
cyBhcmUgYWRkZWQgdG8gdGhlIHJlbmRlciB0cmVlLgotLy8gQWxzbywgdGhlIGNvZGUgY2FuJ3Qg
aGFuZGxlIGNoYW5nZXMgd2hlcmUgYW4gZXhpc3Rpbmcgbm9kZSBuZWVkcyB0byBjaGFuZ2UgaW50
byBhCi0vLyAicmVzZXQiIG5vZGUsIG9yIGZyb20gYSAicmVzZXQiIG5vZGUgYmFjayB0byBub3Qg
YSAicmVzZXQiIG5vZGUuIEFzIG9mIHRoaXMgd3JpdGluZywKLS8vIGF0IGxlYXN0IHNvbWUgb2Yg
dGhlc2UgcHJvYmxlbXMgbWFuaWZlc3QgYXMgZmFpbHVyZXMgaW4gdGhlIHQxMjA0LWluY3JlbWVu
dCBhbmQKLS8vIHQxMjA0LXJlc2V0IHRlc3RzIGluIHRoZSBDU1MgMi4xIHRlc3Qgc3VpdGUuCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ291bnRlck5vZGU6OkNvdW50ZXJOb2RlKFJlbmRlck9i
amVjdCogbywgYm9vbCBoYXNSZXNldFR5cGUsIGludCB2YWx1ZSkKQEAgLTE0MCw2ICsxMzQsMTEg
QEAgdm9pZCBDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIoQ291bnRlck5vZAogICAgIEFTU0VSVCgh
bmV3Q2hpbGQtPm1fbmV4dFNpYmxpbmcpOwogICAgIEFTU0VSVCghcmVmQ2hpbGQgfHwgcmVmQ2hp
bGQtPm1fcGFyZW50ID09IHRoaXMpOwogCisgICAgaWYgKG5ld0NoaWxkLT5tX2hhc1Jlc2V0VHlw
ZSkgeworICAgICAgICB3aGlsZSAobV9sYXN0Q2hpbGQgIT0gcmVmQ2hpbGQpCisgICAgICAgICAg
ICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUobV9sYXN0Q2hpbGQtPnJlbmRlcmVy
KCksIGlkZW50aWZpZXIpOworICAgIH0KKwogICAgIENvdW50ZXJOb2RlKiBuZXh0OwogCiAgICAg
aWYgKHJlZkNoaWxkKSB7CkBAIC0xNTAsMjEgKzE0OSw1NyBAQCB2b2lkIENvdW50ZXJOb2RlOjpp
bnNlcnRBZnRlcihDb3VudGVyTm9kCiAgICAgICAgIG1fZmlyc3RDaGlsZCA9IG5ld0NoaWxkOwog
ICAgIH0KIAotICAgIGlmIChuZXh0KSB7Ci0gICAgICAgIEFTU0VSVChuZXh0LT5tX3ByZXZpb3Vz
U2libGluZyA9PSByZWZDaGlsZCk7Ci0gICAgICAgIG5leHQtPm1fcHJldmlvdXNTaWJsaW5nID0g
bmV3Q2hpbGQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdENoaWxkID09IHJl
ZkNoaWxkKTsKLSAgICAgICAgbV9sYXN0Q2hpbGQgPSBuZXdDaGlsZDsKLSAgICB9Ci0KICAgICBu
ZXdDaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwogICAgIG5ld0NoaWxkLT5tX3ByZXZpb3VzU2libGlu
ZyA9IHJlZkNoaWxkOwotICAgIG5ld0NoaWxkLT5tX25leHRTaWJsaW5nID0gbmV4dDsKIAotICAg
IG5ld0NoaWxkLT5tX2NvdW50SW5QYXJlbnQgPSBuZXdDaGlsZC0+Y29tcHV0ZUNvdW50SW5QYXJl
bnQoKTsKKyAgICBpZiAoIW5ld0NoaWxkLT5tX2ZpcnN0Q2hpbGQgfHwgbmV3Q2hpbGQtPm1faGFz
UmVzZXRUeXBlKSB7CisgICAgICAgIG5ld0NoaWxkLT5tX25leHRTaWJsaW5nID0gbmV4dDsKKyAg
ICAgICAgaWYgKG5leHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0LT5tX3ByZXZpb3VzU2li
bGluZyA9PSByZWZDaGlsZCk7CisgICAgICAgICAgICBuZXh0LT5tX3ByZXZpb3VzU2libGluZyA9
IG5ld0NoaWxkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fbGFzdENo
aWxkID09IHJlZkNoaWxkKTsKKyAgICAgICAgICAgIG1fbGFzdENoaWxkID0gbmV3Q2hpbGQ7Cisg
ICAgICAgIH0KKworICAgICAgICBuZXdDaGlsZC0+bV9jb3VudEluUGFyZW50ID0gbmV3Q2hpbGQt
PmNvbXB1dGVDb3VudEluUGFyZW50KCk7CisgICAgICAgIG5ld0NoaWxkLT5yZXNldFJlbmRlcmVy
cyhpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKG5leHQpCisgICAgICAgICAgICBuZXh0LT5yZWNv
dW50KGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGNv
ZGUgYmVsb3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIGEgZm9ybWVybHkgcm9vdCBpbmNyZW1lbnQg
Y291bnRlciBpcyBsb29zaW5nIGl0cyByb290IHBvc2l0aW9uCisgICAgLy8gYW5kIHRoZXJlZm9y
ZSBpdHMgY2hpbGRyZW4gYmVjb21lIG5leHQgc2libGluZ3MuCisgICAgQ291bnRlck5vZGUqIGxh
c3QgPSBuZXdDaGlsZC0+bV9sYXN0Q2hpbGQ7CisgICAgQ291bnRlck5vZGUqIGZpcnN0ID0gbmV3
Q2hpbGQtPm1fZmlyc3RDaGlsZDsKKworICAgIG5ld0NoaWxkLT5tX25leHRTaWJsaW5nID0gZmly
c3Q7CisgICAgZmlyc3QtPm1fcHJldmlvdXNTaWJsaW5nID0gbmV3Q2hpbGQ7CisgICAgLy8gVGhl
IGNhc2Ugd2hlbiB0aGUgb3JpZ2luYWwgbmV4dCBzaWJsaW5nIG9mIHRoZSBpbnNlcnRlZCBub2Rl
IGJlY29tZXMgYSBjaGlsZCBvZgorICAgIC8vIG9uZSBvZiB0aGUgZm9ybWVyIGNoaWxkcmVuIG9m
IHRoZSBpbnNlcnRlZCBub2RlIGlzIG5vdCBoYW5kbGVkIGFzIGl0IGlzIGJlbGlldmVkCisgICAg
Ly8gdG8gYmUgaW1wb3NzaWJsZSBzaW5jZToKKyAgICAvLyAxLiBpZiB0aGUgaW5jcmVtZW50IGNv
dW50ZXIgbm9kZSBsb3N0IGl0J3Mgcm9vdCBwb3NpdGlvbiBhcyBhIHJlc3VsdCBvZiBhbm90aGVy
CisgICAgLy8gICAgY291bnRlciBub2RlIGJlaW5nIGNyZWF0ZWQsIGl0IHdpbGwgYmUgaW5zZXJ0
ZWQgYXMgdGhlIGxhc3QgY2hpbGQgc28gbmV4dCBpcyBudWxsLgorICAgIC8vIDIuIGlmIHRoZSBp
bmNyZW1lbnQgY291bnRlciBub2RlIGxvc3QgaXQncyByb290IHBvc2l0aW9uIGFzIGEgcmVzdWx0
IG9mIGEgcmVuZGVyZXIgYmVpbmcKKyAgICAvLyAgICBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVu
dCdzIHJlbmRlciB0cmVlLCBhbGwgaXRzIGZvcm1lciBjaGlsZHJlbiBjb3VudGVycyBhcmUgYXR0
YWNoZWQKKyAgICAvLyAgICB0byBjaGlsZHJlbiBvZiB0aGUgaW5zZXJ0ZWQgcmVuZGVyZXIgYW5k
IGhlbmNlIGNhbm5vdCBiZSBpbiBzY29wZSBmb3IgY291bnRlciBub2RlcworICAgIC8vICAgIGF0
dGFjaGVkIHRvIHJlbmRlcmVycyB0aGF0IHdlcmUgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQncyBy
ZW5kZXIgdHJlZS4KKyAgICBsYXN0LT5tX25leHRTaWJsaW5nID0gbmV4dDsKICAgICBpZiAobmV4
dCkKLSAgICAgICAgbmV4dC0+cmVjb3VudChpZGVudGlmaWVyKTsKKyAgICAgICAgbmV4dC0+bV9w
cmV2aW91c1NpYmxpbmcgPSBsYXN0OworICAgIGVsc2UKKyAgICAgICAgbV9sYXN0Q2hpbGQgPSBs
YXN0OworICAgIGZvciAobmV4dCA9IGZpcnN0OyA7IG5leHQgPSBuZXh0LT5tX25leHRTaWJsaW5n
KSB7CisgICAgICAgIG5leHQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgaWYgKGxhc3QgPT0g
bmV4dCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBuZXdDaGlsZC0+bV9maXJzdENo
aWxkID0gMDsKKyAgICBuZXdDaGlsZC0+bV9sYXN0Q2hpbGQgPSAwOworICAgIG5ld0NoaWxkLT5t
X2NvdW50SW5QYXJlbnQgPSBuZXdDaGlsZC0+Y29tcHV0ZUNvdW50SW5QYXJlbnQoKTsKKyAgICBu
ZXdDaGlsZC0+cmVzZXRSZW5kZXJlcihpZGVudGlmaWVyKTsKKyAgICBmaXJzdC0+cmVjb3VudChp
ZGVudGlmaWVyKTsKIH0KIAogdm9pZCBDb3VudGVyTm9kZTo6cmVtb3ZlQ2hpbGQoQ291bnRlck5v
ZGUqIG9sZENoaWxkLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkocmV2aXNpb24gNTMzMzYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCwy
OSBAQCBzdGF0aWMgQ291bnRlck5vZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kCiAgICAgICAgIG9i
amVjdC0+bV9oYXNDb3VudGVyTm9kZU1hcCA9IHRydWU7CiAgICAgfQogICAgIG5vZGVNYXAtPnNl
dChpZGVudGlmaWVyLmltcGwoKSwgbmV3Tm9kZSk7CisgICAgaWYgKG5ld05vZGUtPnBhcmVudCgp
IHx8ICFvYmplY3QtPm5leHRJblByZU9yZGVyKG9iamVjdC0+cGFyZW50KCkpKQorICAgICAgICBy
ZXR1cm4gbmV3Tm9kZTsKKyAgICAvLyBDaGVja2luZyBpZiBzb21lIG5vZGVzIHRoYXQgd2VyZSBw
cmV2aW91c2x5IGNvdW50ZXIgdHJlZSByb290IG5vZGVzCisgICAgLy8gc2hvdWxkIGJlY29tZSBj
aGlsZHJlbiBvZiB0aGlzIG5vZGUgbm93LgorICAgIENvdW50ZXJNYXBzJiBtYXBzID0gY291bnRl
ck1hcHMoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4gPSBvYmplY3QtPnBhcmVudCgp
OworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBvYmplY3QtPm5leHRJ
blByZU9yZGVyKHN0YXlXaXRoaW4pOyBjdXJyZW50UmVuZGVyZXI7IGN1cnJlbnRSZW5kZXJlciA9
IGN1cnJlbnRSZW5kZXJlci0+bmV4dEluUHJlT3JkZXIoc3RheVdpdGhpbikpIHsKKyAgICAgICAg
aWYgKCFjdXJyZW50UmVuZGVyZXItPm1faGFzQ291bnRlck5vZGVNYXApCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQ291bnRlck5vZGUqIGN1cnJlbnRDb3VudGVyID0gbWFwcy5nZXQo
Y3VycmVudFJlbmRlcmVyKS0+Z2V0KGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgaWYgKCFj
dXJyZW50Q291bnRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY3VycmVu
dENvdW50ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV3Tm9kZS0+Zmlyc3RD
aGlsZCgpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXItPmxhc3RDaGlsZCgpKQor
ICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+bGFzdENo
aWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3Rh
eVdpdGhpbiAhPSBjdXJyZW50UmVuZGVyZXItPnBhcmVudCgpIHx8ICFjdXJyZW50Q291bnRlci0+
aGFzUmVzZXRUeXBlKCkpCisgICAgICAgICAgICBuZXdOb2RlLT5pbnNlcnRBZnRlcihjdXJyZW50
Q291bnRlciwgbmV3Tm9kZS0+bGFzdENoaWxkKCksIGlkZW50aWZpZXIpOworICAgICAgICBpZiAo
Y3VycmVudFJlbmRlcmVyLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJl
ciA9IGN1cnJlbnRSZW5kZXJlci0+bGFzdENoaWxkKCk7CisgICAgfQogICAgIHJldHVybiBuZXdO
b2RlOwogfQogCkBAIC0zMTQsNyArMzM3LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjppbnZhbGlk
YXRlKGNvbnN0IEF0bwogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
fQogCi1zdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihjb25zdCBBdG9taWNT
dHJpbmcmIGlkZW50aWZpZXIsIENvdW50ZXJOb2RlKiBub2RlKQorc3RhdGljIHZvaWQgZGVzdHJv
eUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlm
aWVyLCBDb3VudGVyTm9kZSogbm9kZSkKIHsKICAgICBDb3VudGVyTm9kZSogcHJldmlvdXM7CiAg
ICAgZm9yIChDb3VudGVyTm9kZSogY2hpbGQgPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOyBjaGls
ZCAmJiBjaGlsZCAhPSBub2RlOyBjaGlsZCA9IHByZXZpb3VzKSB7CkBAIC0zMjksMjcgKzM1Miw5
MiBAQCBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihjCiAgICAgICAgIH0K
ICAgICAgICAgZGVsZXRlIGNoaWxkOwogICAgIH0KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLT5kb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4g
PSByZW5kZXJlci0+dmlydHVhbENoaWxkcmVuKCkpCisgICAgICAgICAgICBjaGlsZHJlbi0+aW52
YWxpZGF0ZUNvdW50ZXJzKHJlbmRlcmVyLCBpZGVudGlmaWVyKTsKKyAgICB9CisgICAgaWYgKENv
dW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKSkKKyAgICAgICAgcGFyZW50LT5yZW1v
dmVDaGlsZChub2RlLCBpZGVudGlmaWVyKTsKKyAgICBkZWxldGUgbm9kZTsKIH0KIAotdm9pZCBS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCogb2JqZWN0KQor
dm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgQ291bnRlck1hcHMmIG1hcHMgPSBjb3VudGVyTWFwcygpOwotICAgIENv
dW50ZXJNYXAqIG1hcCA9IG1hcHMuZ2V0KG9iamVjdCk7Ci0gICAgaWYgKCFtYXApCisgICAgQ291
bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJdGVyYXRvciA9IG1hcHMuZmluZChyZW5kZXJlcik7Cisg
ICAgaWYgKG1hcHNJdGVyYXRvciA9PSBtYXBzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bWFwcy5yZW1vdmUob2JqZWN0KTsKLQorICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRv
ci0+c2Vjb25kOwogICAgIENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5k
KCk7CiAgICAgZm9yIChDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENvdW50ZXJOb2RlKiBub2RlID0gaXQtPnNl
Y29uZDsKICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsK
LSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oaWRlbnRpZmllciwgbm9kZSk7Ci0g
ICAgICAgIGlmIChDb3VudGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50KCkpCi0gICAgICAg
ICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlkZW50aWZpZXIpOwotICAgICAgICBkZWxl
dGUgbm9kZTsKKyAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRl
bnRpZmllciwgaXQtPnNlY29uZCk7CiAgICAgfQotCisgICAgbWFwcy5yZW1vdmUobWFwc0l0ZXJh
dG9yKTsKICAgICBkZWxldGUgbWFwOworICAgIHJlbmRlcmVyLT5tX2hhc0NvdW50ZXJOb2RlTWFw
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKK3sK
KyAgICBDb3VudGVyTWFwKiBtYXAgPSBjb3VudGVyTWFwcygpLmdldChyZW5kZXJlcik7CisgICAg
aWYgKCFtYXApCisgICAgICAgIHJldHVybjsKKyAgICBDb3VudGVyTWFwOjppdGVyYXRvciBtYXBJ
dGVyYXRvciA9IG1hcC0+ZmluZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgaWYgKG1hcEl0ZXJh
dG9yID09IG1hcC0+ZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBkZXN0cm95Q291bnRlck5v
ZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBtYXBJdGVyYXRvci0+c2Vjb25kKTsKKyAg
ICBtYXAtPnJlbW92ZShtYXBJdGVyYXRvcik7CisgICAgLy8gV2UgZG8gbm90IGRlbGV0ZSAibWFw
IiBoZXJlIGV2ZW4gaWYgZW1wdHkgYmVjYXVzZSB3ZSBleHBlY3QgdG8gcmV1c2UKKyAgICAvLyBp
dCBzb29uLiBJbiBvcmRlciBmb3IgYSByZW5kZXJlciB0byBsb3NlIGFsbCBpdHMgY291bnRlcnMg
cGVybWFuZW50bHksCisgICAgLy8gYSBzdHlsZSBjaGFuZ2UgZm9yIHRoZSByZW5kZXJlciBpbnZv
bHZpbmcgcmVtb3ZhbCBvZiBhbGwgY291bnRlcgorICAgIC8vIGRpcmVjdGl2ZXMgbXVzdCBvY2N1
ciwgaW4gd2hpY2ggY2FzZSwgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcygpCisg
ICAgLy8gbXVzdCBiZSBjYWxsZWQuCisgICAgLy8gVGhlIGRlc3RydWN0aW9uIG9mIHRoZSBSZW5k
ZXJlciAocG9zc2libHkgY2F1c2VkIGJ5IHRoZSByZW1vdmFsIG9mIGl0cyAKKyAgICAvLyBhc3Nv
Y2lhdGVkIERPTSBub2RlKSBpcyB0aGUgb3RoZXIgY2FzZSB0aGF0IGxlYWRzIHRvIHRoZSBwZXJt
YW5lbnQKKyAgICAvLyBkZXN0cnVjdGlvbiBvZiBhbGwgY291bnRlcnMgYXR0YWNoZWQgdG8gYSBS
ZW5kZXJlci4gSW4gdGhpcyBjYXNlCisgICAgLy8gUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50
ZXJOb2RlcygpIG11c3QgYmUgYW5kIGlzIG5vdyBjYWxsZWQsIHRvby4KKyAgICAvLyBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKCkgaGFuZGxlcyBkZXN0cnVjdGlvbiBvZiB0aGUg
Y291bnRlcgorICAgIC8vIG1hcCBhc3NvY2lhdGVkIHdpdGggYSByZW5kZXJlciwgc28gdGhlcmUg
aXMgbm8gcmlzayBpbiBsZWFraW5nIHRoZSBtYXAuCit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZUNv
dW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKHJlbmRlcmVyLT5z
dHlsZSgpKTsKKyAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBkaXJlY3RpdmVNYXAgPSBy
ZW5kZXJlci0+c3R5bGUoKS0+Y291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBpZiAoIWRpcmVjdGl2
ZU1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGRpcmVjdGl2ZU1hcC0+ZW5kKCk7CisgICAgaWYgKCFyZW5kZXJlci0+bV9o
YXNDb3VudGVyTm9kZU1hcCkgeworICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+
Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ291bnRl
ck1hcCogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KHJlbmRlcmVyKTsKKyAgICBBU1NF
UlQoY291bnRlck1hcCk7CisgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIENvdW50ZXJOb2RlKiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7
CisgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ291bnRlck5vZGUqIG5ld1BhcmVudCA9IDA7
CisgICAgICAgIENvdW50ZXJOb2RlKiBuZXdQcmV2aW91c1NpYmxpbmc7CisgICAgICAgIGZpbmRQ
bGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBu
b2RlLT5oYXNSZXNldFR5cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICBDb3VudGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50KCk7CisgICAgICAgIGlmIChu
ZXdQYXJlbnQgPT0gcGFyZW50ICYmIG5ld1ByZXZpb3VzU2libGluZyA9PSBub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocGFyZW50KQor
ICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBpdC0+Zmlyc3QuZ2V0KCkpOwor
ICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUsIG5ld1ByZXZpb3VzU2libGluZywg
aXQtPmZpcnN0LmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVy
ZXJTdWJ0cmVlQXR0YWNoZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50
ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQorICAgICAgICB1cGRhdGVD
b3VudGVycyhkZXNjZW5kYW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNpb24gNTMzMzYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAg
cHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZp
ZXIpOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3Qq
KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiwgY29u
c3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCByZW5kZXJlclN1
YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gNTMzMzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdAogICAgICAgICAvLyBKdXN0IGFkZCBpdC4uLgogICAg
ICAgICBjaGlsZHJlbi0+aW5zZXJ0Q2hpbGROb2RlKHRoaXMsIG5ld0NoaWxkLCBiZWZvcmVDaGls
ZCk7CiAgICAgfQotICAgIAorICAgIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFj
aGVkKG5ld0NoaWxkKTsKICAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dCgpICYmIG5ld0NoaWxkLT5z
dHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgPT0gQ0FQSVRBTElaRSkgewogICAgICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0gdG9SZW5kZXJUZXh0KG5ld0NoaWxkKS0+b3Jp
Z2luYWxUZXh0KCk7CiAgICAgICAgIGlmICh0ZXh0VG9UcmFuc2Zvcm0pCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1MzMzNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDEwLTAxLTE1ICBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
U1MyLjEgQ291bnRlcnMgbm90IHVwZGF0ZWQgd2hlbiBuZXcgZWxlbWVudHMgYXJlIGluc2VydGVk
IGluIHRoZSBET00uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjg4NAorCisgICAgICAgICogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5vZGVzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5v
ZGVzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAxLTE1ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvYWRkaW5nLW5vZGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGlu
Zy1ub2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhlIGZv
bGxvd2luZyB0d28gbGluZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgY29udGVudDoKKworMS0yLTIu
MC0yLjAuMS0KKzEtMi0yLjAtMi4wLjEtCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3Vu
dGVycy9hZGRpbmctbm9kZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9jb3VudGVycy9hZGRpbmctbm9kZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2NvdW50ZXJzL2FkZGluZy1ub2Rlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8v
RU4iPgorPGh0bWw+PGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAgIDx0aXRsZT5BZGRpbmcgbm9k
ZXMgdGhhdCBhZmZlY3QgdGhlIENTUyBjb3VudGVyIHRyZWU8L3RpdGxlPgorICAgIDxsaW5rIHJl
bD0iYXV0aG9yIiBocmVmPSJtYWlsdG86Y2Fyb2wuc3phYm9Abm9raWEuY29tIiB0aXRsZT0iQ2Fy
b2wgU3phYm8iPgorICAgIDxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMjEvZ2VuZXJhdGUuaHRtbCNjb3VudGVycyI+CisgICAgPGxpbmsgcmVsPSJoZWxwIiBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9nZW5lcmF0ZS5odG1sI3Byb3BkZWYtY29u
dGVudCI+CisgICAgPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9D
U1MyMS9zeW5kYXRhLmh0bWwjY291bnRlciI+CisgICAgPG1ldGEgY29udGVudD0iZG9tIiBuYW1l
PSJmbGFncyI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250
ZW50PSJ0ZXh0L2NzcyI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlw
ZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorICAgICAgICBib2R5IHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQorICAgICAgICAucmVzZXQg
eyBjb3VudGVyLXJlc2V0OiBjOyB9CisgICAgICAgIC5pbmNyZW1lbnQ6YmVmb3JlLCAudXNlOmJl
Zm9yZSB7IGNvbnRlbnQ6IGNvdW50ZXJzKGMsICIuIikgIi0iOyB9CisgICAgICAgIC5pbmNyZW1l
bnQgeyBjb3VudGVyLWluY3JlbWVudDogYzsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW4oKSB7CisgICAgICAgICAgICB0ZXN0RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7CisgICAgICAgICAgICBuZXdTcGFu
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIG5l
d1NwYW5FbGVtZW50LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpbmNyZW1lbnQiKTsKKyAgICAgICAg
ICAgIG5ld1NwYW5FbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCJuZXdOb2RlIik7CisgICAgICAg
ICAgICB0ZXN0RWxlbWVudC5pbnNlcnRCZWZvcmUobmV3U3BhbkVsZW1lbnQsIHRlc3RFbGVtZW50
LmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpOworICAgICAgICAgICAgICAgIHNwYW5MaXN0ID0gdGVzdEVsZW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNwYW4iKQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBz
cGFuTGlzdC5sZW5ndGg7ICsraSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3U3BhbkVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgICAg
IGlkID0gc3Bhbkxpc3QuaXRlbShpKS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpZCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3BhbkVs
ZW1lbnQuaW5uZXJUZXh0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuY291bnRlclZhbHVlRm9yRWxl
bWVudEJ5SWQoaWQpOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3BhbkVsZW1lbnQuaW5u
ZXJUZXh0Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NwYW5FbGVtZW50Lmlu
bmVyVGV4dCA9IG5ld1NwYW5FbGVtZW50LmlubmVyVGV4dCArICItIjsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5hcHBlbmRDaGlsZChuZXdTcGFuRWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
dGVzdEVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlZmVyZW5jZSIpOworICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50Lmlu
bmVySFRNTCA9IHRlc3RFbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKC88Yj5hPHU+YjxcL3U+PFwv
Yj4vZywiIik7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+PGJv
ZHkgb25sb2FkPSJzZXRUaW1lb3V0KCdydW4oKScsIDApIj4KKyAgICA8cD5UaGUgZm9sbG93aW5n
IHR3byBsaW5lcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjb250ZW50OjwvcD4KKyAgICA8ZGl2IGlk
PSJ0ZXN0Ij48Yj5hPHU+YjwvdT48L2I+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJwYXJlbnQi
PjxiPmE8dT5iPC91PjwvYj48c3BhbiBpZD0icm9vdE9uZSIgY2xhc3M9ImluY3JlbWVudCIvPjxi
PmE8dT5iPC91PjwvYj48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJyb290VHdvIiBj
bGFzcz0icmVzZXQiPjxiPmE8dT5iPC91PjwvYj48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjxzcGFu
IGlkPSJyMmMxIiBjbGFzcz0idXNlIj48Yj5hPHU+YjwvdT48L2I+PHNwYW4gaWQ9Im5ycmVzZXQi
IGNsYXNzPSJyZXNldCI+PGI+YTx1PmI8L3U+PC9iPjxzcGFuIGlkPSJyM2MxIiBjbGFzcz0iaW5j
cmVtZW50Ij48L3NwYW4+PGI+YTx1PmI8L3U+PC9iPjwvc3Bhbj48L3NwYW4+PC9kaXY+CisgICAg
PGRpdiBpZD0icmVmZXJlbmNlIj4xLTxiPmE8dT5iPC91PjwvYj48Yj5hPHU+YjwvdT48L2I+PGI+
YTx1PmI8L3U+PC9iPjItPGI+YTx1PmI8L3U+PC9iPjxiPmE8dT5iPC91PjwvYj48Yj5hPHU+Yjwv
dT48L2I+PGI+YTx1PmI8L3U+PC9iPjIuMC08Yj5hPHU+YjwvdT48L2I+PGI+YTx1PmI8L3U+PC9i
PjIuMC4xLTxiPmE8dT5iPC91PjwvYj48L2Rpdj4KKyAgICA8aHI+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8L2JvZHk+PC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>