<?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>31213</bug_id>
          
          <creation_ts>2009-11-06 14:51:06 -0800</creation_ts>
          <short_desc>The CounterNode class does not support all methods necessary to efficiently update the counter tree as needed per CSS2.1</short_desc>
          <delta_ts>2009-11-13 12:56:21 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Carol Szabo">carol</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161253</commentid>
    <comment_count>0</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-11-06 14:51:06 -0800</bug_when>
    <thetext>I would like to add these methods to the CounterNode in support of a larger patch that makes the counter tree update able in response to DOM changes (see bug 11031).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161641</commentid>
    <comment_count>1</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-11-09 10:42:20 -0800</bug_when>
    <thetext>In addition to tree navigation methods for non-recursive tree traversal, methods are added to support precise renderer tree updates when the Counter tree changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161643</commentid>
    <comment_count>2</comment_count>
      <attachid>42766</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-11-09 10:48:21 -0800</bug_when>
    <thetext>Created attachment 42766
Proposed patch

I know this patch in itself does not bring much benefit, but it is the first step towards implementing fully CSS2.1 counters. The only reason it is submitted by itself is to reduce the size of the bigger change that fixes 11031 and all problems with standard CSS2.1 counter tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161838</commentid>
    <comment_count>3</comment_count>
      <attachid>42766</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-09 16:57:44 -0800</bug_when>
    <thetext>Comment on attachment 42766
Proposed patch

&gt; +    CounterNode* next;
&gt; +    if (!(next = m_nextSibling)) {

This seems unnecessarily strange. How about this instead?

    CounterNode* next = m_nextSibling;
    if (next)
        return next;

I don&apos;t understand why some of these member functions are calling functions like firstChild() while others are getting at data members directly. I suggest having everything get at data members directly.

&gt; +void CounterNode::resetRenderer(const AtomicString* identifier) const

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; +    if (m_renderer &amp;&amp; !m_renderer-&gt;documentBeingDestroyed()) {
&gt; +        if (RenderObjectChildList* children = m_renderer-&gt;virtualChildren())
&gt; +            children-&gt;invalidateCounters(m_renderer, identifier);
&gt; +    }

We normally prefer the early return style rather than nested ifs.

    if (!m_renderer)
        return;

Etc.

&gt; +void CounterNode::resetRenderers(const AtomicString* identifier) const

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; +{
&gt; +    resetRenderer(identifier);
&gt; +    for (const CounterNode* child = m_firstChild; child ; child = child-&gt;nextInPreOrder(this))
&gt; +        child-&gt;resetRenderer(identifier);
&gt; +}

I suggest calling the local variable &quot;node&quot; instead of &quot;child&quot;, and initializing it to &quot;this&quot; rather than m_firstChild. That way you won&apos;t have to have the first call to resetRenderer.

Please remove the space before the semicolon.

&gt; +void CounterNode::recount(const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; -void CounterNode::insertAfter(CounterNode* newChild, CounterNode* refChild)
&gt; +void CounterNode::insertAfter(CounterNode* newChild, CounterNode* refChild, const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; -void CounterNode::removeChild(CounterNode* oldChild)
&gt; +void CounterNode::removeChild(CounterNode* oldChild, const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; -void RenderCounter::invalidate()
&gt; +void RenderCounter::invalidate(const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead. You can overload with a separate function for invalidating everything. Or give it a different name such as invalidateAllIdentifiers.

&gt; -    m_counterNode = 0;
&gt; -    setNeedsLayoutAndPrefWidthsRecalc();
&gt; +    if (!identifier || m_counter.identifier() == *identifier) {
&gt; +        m_counterNode = 0;
&gt; +        setNeedsLayoutAndPrefWidthsRecalc();
&gt; +    }

We normally use early return.

&gt; -static void destroyCounterNodeChildren(AtomicStringImpl* identifier, CounterNode* node)
&gt; +static void destroyCounterNodeChildren(const AtomicString* identifier, CounterNode* node)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; -    void invalidate();
&gt; +    void invalidate(const AtomicString* identifier = 0);

I think this should be two different functions. Maybe overloads of the same name.

&gt; -static void invalidateCountersInContainer(RenderObject* container)
&gt; +static void invalidateCountersInContainer(RenderObject* container, const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; +    //Sometimes the counter is attached directly on the container.
&gt; +    if (container-&gt;isCounter()) {
&gt; +        toRenderCounter(container)-&gt;invalidate(identifier);
&gt; +        return;
&gt; +    }

Is the above change a bug fix? If so, where is the test for this?

You should add a space after the &quot;//&quot;.

&gt; -void RenderObjectChildList::invalidateCounters(RenderObject* owner)
&gt; +void RenderObjectChildList::invalidateCounters(RenderObject* owner, const AtomicString* identifier)

I&apos;d like this function to take a const AtomicString&amp; instead.

&gt; -    void invalidateCounters(RenderObject* owner);
&gt; +    void invalidateCounters(RenderObject* owner, const AtomicString* identifier = 0);

Do we really need the special behavior here for identifier of 0?

If it is important to have a large set of functions that work only on a single identifier or possible on multiple identifiers, then I suppose we can live with a pointer, but then it seems that AtomicStringImpl* is better than const AtomicString* and I am sorry I suggested changing it.

review- because there are a few things to change here -- if I am wrong about the pointer thing, you can just set me straight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162346</commentid>
    <comment_count>4</comment_count>
      <attachid>42925</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-11-10 22:25:28 -0800</bug_when>
    <thetext>Created attachment 42925
Proposed Patch

This patch addresses Darin&apos;s coding style concerns.
Regarding the code that appears to be a bug fix in RenderObjectChildren.cpp, the reason why I did not attach a test case for that code is because the code does not fix any bugs since it is not properly called yet for DOM changes, where it would be important, the test case that this code contributes to fixing is part of the fix for 11031 for which this change is a prerequisite. Until that code is committed, my code only fixes a dangling reference for some test case, but it has no visible impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163382</commentid>
    <comment_count>5</comment_count>
      <attachid>42925</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 11:37:36 -0800</bug_when>
    <thetext>Comment on attachment 42925
Proposed Patch

Rejecting patch 42925 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11621 test cases.
http/tests/xmlhttprequest/access-control-and-redirects.html -&gt; crashed

Exiting early after 1 failures. 9148 tests run.
461.20s total testing time

9147 test cases (99%) succeeded
1 test case (&lt;1%) crashed
5 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163423</commentid>
    <comment_count>6</comment_count>
      <attachid>42925</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 12:09:00 -0800</bug_when>
    <thetext>Comment on attachment 42925
Proposed Patch

Added the crash report to bug 31461.  Let&apos;s spin again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163434</commentid>
    <comment_count>7</comment_count>
      <attachid>42925</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 12:21:53 -0800</bug_when>
    <thetext>Comment on attachment 42925
Proposed Patch

Clearing flags on attachment: 42925

Committed r50960: &lt;http://trac.webkit.org/changeset/50960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163435</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 12:21:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163453</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 12:44:02 -0800</bug_when>
    <thetext>This broke the leopard Debug build.  Working on a fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163457</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 12:56:21 -0800</bug_when>
    <thetext>Fixed build:
Committed r50966: &lt;http://trac.webkit.org/changeset/50966&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42766</attachid>
            <date>2009-11-09 10:48:21 -0800</date>
            <delta_ts>2009-11-10 22:25:28 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patchFor31213-1.patch</filename>
            <type>text/plain</type>
            <size>16460</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDY2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMTEtMDkgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBDb3VudGVyTm9kZSBjbGFzcyBpcyBtaXNzaW5nIHNvbWUgYmFzaWMgdHJlZSBuYXZpZ2F0
aW9uIG1ldGhvZHMgY29tbW9uIGluIG90aGVyIFdlYktpdCB0cmVlcyBzdWNoIGFzIHRoZSByZW5k
ZXJpbmcgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzEyMTMKKyAgICAgICAgQWRkZWQgdHJlZSBuYXZpZ2F0aW9uIG1ldGhvZHMgdGhhdCBwZXJt
aXQgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEKKyAgICAgICAgY291bnRlciBmZWF0dXJl
IHdpdGhvdXQgdXNpbmcgcmVjdXJzaW9uIHByb3BvcnRpb25hbCB0byB0aGUgY291bnRlcgorICAg
ICAgICB0cmVlIGRlcHRoLgorICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBJIGRpZCBub3Qg
ZmluZCBhbnkgYnVnIHRoYXQgaXMgZml4ZWQgYnkgdGhpcworICAgICAgICBjb21taXQgeWV0LCB0
aGlzIGp1c3QgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgcGF0Y2ggZm9yIDExMDMxIGFuZAorICAg
ICAgICBoZWxwcyByZXNwb25kIHRvIHNvbWUgY29uY2VybnMgcmVnYXJkaW5nIHRoYXQgcGF0Y2gu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q291bnRlck5vZGU6OkNvdW50ZXJOb2RlKToKKworICAgICAgICAoV2ViQ29yZTo6Q291bnRl
ck5vZGU6Om5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpD
b3VudGVyTm9kZTo6bmV4dEluUHJlT3JkZXIpOgorICAgICAgICBBZGRlZCB0byBzdXBwb3J0IG5v
bi1yZWN1cnNpdmUgdHJlZSB0cmF2ZXJzYWwgbmVjZXNzYXJ5IGZvcgorICAgICAgICBlZmZpY2ll
bnQgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEgY291bnRlcnMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkNvdW50ZXJOb2RlOjpsYXN0RGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpD
b3VudGVyTm9kZTo6cHJldmlvdXNJblByZU9yZGVyKToKKyAgICAgICAgTW92ZWQgdGhpcyBtZXRo
b2RzIHN1Y2ggdGhhdCB0aGV5IG9jY3VweSBhIHBsYWNlIHNpbWlsYXIgdG8gdGhhdCBvZgorICAg
ICAgICBpZGVudGljYWxseSBuYW1lZCBtZXRob2RzIG9uIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBh
bGxvd3MgZm9yIHRoZWlyCisgICAgICAgIGJyb2FkZXIgdXNlIG5lZWRlZCBpbiBmdWxsIGltcGxl
bWVudGF0aW9uIG9mIENTUzIuMSBjb3VudGVycy4KKworICAgICAgICAoV2ViQ29yZTo6Q291bnRl
ck5vZGU6OnJlc2V0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRlck5vZGU6OnJl
c2V0UmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjpyZWNvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjppbnNlcnRBZnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb3VudGVyTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHN1Y2gg
dGhhdCBpbnNlcnRpb24vcmVtb3ZhbCBvZiBhIGNvdW50ZXIsIHRyaWdnZXJzIG5vdCBvbmx5Cisg
ICAgICAgIHJlY2FsY3VsYXRpb24gb2YgUHJlZml4V2lkdGhzLCBidXQgYWxzbyByZWFzc2VzbWVu
dCBvZiB2YWx1ZXMgaW4KKyAgICAgICAgY291bnRlciBub2Rlcy4gVGhpcyBpcyB0aGUgYmFzaXMg
ZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEKKyAgICAgICAgY291bnRlcnMuIEl0IGRvZXMg
bm90IGNoYW5nZSBjdXJyZW50IGJlaGF2aW9yIGJ5IG11Y2ggYmVjYXVzZSBvZgorICAgICAgICBj
aGFuZ2VzIG5lZWRlZCB0byB0aGUgcmVjYWxjdWxhdGlvbiBhbGdvcml0aG0sIGJ1dCB0aG9zZSBh
cmUgY29tbWluZworICAgICAgICBpbiB0aGUgcGF0Y2ggZm9yIDExMDMxLgorICAgICAgICAoV2Vi
Q29yZTo6c2hvd1RyZWVBbmRNYXJrKToKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5vZGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb3VudGVyKToKKyAgICAgICAgT25seSBjaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gcHJl
cGFyZSBmb3IgaW1wbGVtZW50YXRpb24gb2YgRGFyaW4KKyAgICAgICAgQWRsZXIncyByZWNvbW1l
bmRhdGlvbiBmb3IgdGhlIHBhdGNoIHRvIDExMDMxLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJDb3VudGVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lDb3VudGVy
Tm9kZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lD
b3VudGVyTm9kZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppbnZhbGlkYXRlQ291bnRlcnNJbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3RDaGlsZExpc3Q6OmludmFsaWRhdGVDb3VudGVycyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5oOgorICAgICAgICBBZGRlZCB0aGUgYWJpbGl0
eSB0byByZXN0cmljdCBpbnZhbGlkYXRpb24gdG8gY291bnRlcnMgd2l0aCBhIGdpdmVuCisgICAg
ICAgIGlkZW50aWZpZXIuCisgICAgICAgIEFsc28gaW52YWxpZGF0ZWQgY291bnRlcnMgdGhhdCBh
cmUgb24gdGhlIGNoaWxkIGNvbnRhaW5lciBpdHNlbGYKKyAgICAgICAgd2hpY2ggd2VyZSBtaXNz
ZWQgYnkgdGhlIHByZXZpb3VzIGFsZ29yaXRobSwgYnV0IHdlcmUgYSB2YWxpZCBjYXNlLgorCiAy
MDA5LTExLTA5ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCShyZXZpc2lvbiA1
MDU3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNTkgQEAgQ291bnRlck5vZGU6OkNvdW50ZXJOb2RlKFJlbmRlck9iamVj
dCogbwogICAgICwgbV9uZXh0U2libGluZygwKQogICAgICwgbV9maXJzdENoaWxkKDApCiAgICAg
LCBtX2xhc3RDaGlsZCgwKQoteyAgIAoreworfQorCitDb3VudGVyTm9kZSogQ291bnRlck5vZGU6
Om5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbihjb25zdCBDb3VudGVyTm9kZSogc3RheVdpdGhp
bikgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIENvdW50ZXJOb2RlKiBuZXh0OworICAgIGlmICghKG5leHQgPSBtX25leHRTaWJs
aW5nKSkgeworICAgICAgICBuZXh0ID0gbV9wYXJlbnQ7CisgICAgICAgIHdoaWxlIChuZXh0ICYm
ICFuZXh0LT5tX25leHRTaWJsaW5nKSB7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBzdGF5V2l0
aGluKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgbmV4dCA9IG5leHQt
PnBhcmVudCgpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXh0KQorICAgICAgICAgICAgbmV4
dCA9IG5leHQtPm1fbmV4dFNpYmxpbmc7CisgICAgfQorCisgICAgcmV0dXJuIG5leHQ7Cit9CisK
K0NvdW50ZXJOb2RlKiBDb3VudGVyTm9kZTo6bmV4dEluUHJlT3JkZXIoY29uc3QgQ291bnRlck5v
ZGUqIHN0YXlXaXRoaW4pIGNvbnN0Cit7CisgICAgaWYgKENvdW50ZXJOb2RlKiBuZXh0ID0gZmly
c3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gbmV4dDsKKworICAgIHJldHVybiBuZXh0SW5QcmVP
cmRlckFmdGVyQ2hpbGRyZW4oc3RheVdpdGhpbik7Cit9CisKK0NvdW50ZXJOb2RlKiBDb3VudGVy
Tm9kZTo6bGFzdERlc2NlbmRhbnQoKSBjb25zdAoreworICAgIENvdW50ZXJOb2RlKiBsYXN0ID0g
bV9sYXN0Q2hpbGQ7CisgICAgaWYgKCFsYXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHdo
aWxlIChDb3VudGVyTm9kZSogbGFzdENoaWxkID0gbGFzdC0+bV9sYXN0Q2hpbGQpCisgICAgICAg
IGxhc3QgPSBsYXN0Q2hpbGQ7CisKKyAgICByZXR1cm4gbGFzdDsKK30KKworQ291bnRlck5vZGUq
IENvdW50ZXJOb2RlOjpwcmV2aW91c0luUHJlT3JkZXIoKSBjb25zdAoreworICAgIENvdW50ZXJO
b2RlKiBwcmV2aW91cyA9IG1fcHJldmlvdXNTaWJsaW5nOworICAgIGlmICghcHJldmlvdXMpCisg
ICAgICAgIHJldHVybiBtX3BhcmVudDsKKworICAgIHdoaWxlIChDb3VudGVyTm9kZSogbGFzdENo
aWxkID0gcHJldmlvdXMtPm1fbGFzdENoaWxkKQorICAgICAgICBwcmV2aW91cyA9IGxhc3RDaGls
ZDsKKworICAgIHJldHVybiBwcmV2aW91czsKIH0KIAogaW50IENvdW50ZXJOb2RlOjpjb21wdXRl
Q291bnRJblBhcmVudCgpIGNvbnN0CkBAIC01OCw3ICsxMTAsMjMgQEAgaW50IENvdW50ZXJOb2Rl
Ojpjb21wdXRlQ291bnRJblBhcmVudCgpIAogICAgIHJldHVybiBtX3BhcmVudC0+bV92YWx1ZSAr
IGluY3JlbWVudDsKIH0KIAotdm9pZCBDb3VudGVyTm9kZTo6cmVjb3VudCgpCisKK3ZvaWQgQ291
bnRlck5vZGU6OnJlc2V0UmVuZGVyZXIoY29uc3QgQXRvbWljU3RyaW5nKiBpZGVudGlmaWVyKSBj
b25zdAoreworICAgIGlmIChtX3JlbmRlcmVyICYmICFtX3JlbmRlcmVyLT5kb2N1bWVudEJlaW5n
RGVzdHJveWVkKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRy
ZW4gPSBtX3JlbmRlcmVyLT52aXJ0dWFsQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgIGNoaWxkcmVu
LT5pbnZhbGlkYXRlQ291bnRlcnMobV9yZW5kZXJlciwgaWRlbnRpZmllcik7CisgICAgfQorfQor
Cit2b2lkIENvdW50ZXJOb2RlOjpyZXNldFJlbmRlcmVycyhjb25zdCBBdG9taWNTdHJpbmcqIGlk
ZW50aWZpZXIpIGNvbnN0Cit7CisgICAgcmVzZXRSZW5kZXJlcihpZGVudGlmaWVyKTsKKyAgICBm
b3IgKGNvbnN0IENvdW50ZXJOb2RlKiBjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQgOyBjaGls
ZCA9IGNoaWxkLT5uZXh0SW5QcmVPcmRlcih0aGlzKSkKKyAgICAgICAgY2hpbGQtPnJlc2V0UmVu
ZGVyZXIoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgQ291bnRlck5vZGU6OnJlY291bnQoY29uc3Qg
QXRvbWljU3RyaW5nKiBpZGVudGlmaWVyKQogewogICAgIGZvciAoQ291bnRlck5vZGUqIGMgPSB0
aGlzOyBjOyBjID0gYy0+bV9uZXh0U2libGluZykgewogICAgICAgICBpbnQgb2xkQ291bnQgPSBj
LT5tX2NvdW50SW5QYXJlbnQ7CkBAIC02NiwxOCArMTM0LDExIEBAIHZvaWQgQ291bnRlck5vZGU6
OnJlY291bnQoKQogICAgICAgICBpZiAob2xkQ291bnQgPT0gbmV3Q291bnQpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgYy0+bV9jb3VudEluUGFyZW50ID0gbmV3Q291bnQ7Ci0gICAgICAg
IC8vIG1fcmVuZGVyZXIgY29udGFpbnMgdGhlIHBhcmVudCBvZiB0aGUgcmVuZGVyIG5vZGUKLSAg
ICAgICAgLy8gY29ycmVzcG9uZGluZyB0byBhIENvdW50ZXJOb2RlLiBMZXQncyBmaW5kIHRoZSBj
b3VudGVyCi0gICAgICAgIC8vIGNoaWxkIGFuZCBtYWtlIHRoaXMgcmUtbGF5b3V0LgotICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogbyA9IGMtPm1fcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgbzsg
byA9IG8tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBpZiAoIW8tPmRvY3VtZW50QmVpbmdE
ZXN0cm95ZWQoKSAmJiBvLT5pc0NvdW50ZXIoKSkgewotICAgICAgICAgICAgICAgIG8tPnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICBjLT5yZXNldFJlbmRlcmVycyhpZGVudGlmaWVyKTsKICAg
ICB9CiB9CiAKLXZvaWQgQ291bnRlck5vZGU6Omluc2VydEFmdGVyKENvdW50ZXJOb2RlKiBuZXdD
aGlsZCwgQ291bnRlck5vZGUqIHJlZkNoaWxkKQordm9pZCBDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0
ZXIoQ291bnRlck5vZGUqIG5ld0NoaWxkLCBDb3VudGVyTm9kZSogcmVmQ2hpbGQsIGNvbnN0IEF0
b21pY1N0cmluZyogaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgIEFT
U0VSVCghbmV3Q2hpbGQtPm1fcGFyZW50KTsKQEAgLTEwOSwxMCArMTcwLDEwIEBAIHZvaWQgQ291
bnRlck5vZGU6Omluc2VydEFmdGVyKENvdW50ZXJOb2QKIAogICAgIG5ld0NoaWxkLT5tX2NvdW50
SW5QYXJlbnQgPSBuZXdDaGlsZC0+Y29tcHV0ZUNvdW50SW5QYXJlbnQoKTsKICAgICBpZiAobmV4
dCkKLSAgICAgICAgbmV4dC0+cmVjb3VudCgpOworICAgICAgICBuZXh0LT5yZWNvdW50KGlkZW50
aWZpZXIpOwogfQogCi12b2lkIENvdW50ZXJOb2RlOjpyZW1vdmVDaGlsZChDb3VudGVyTm9kZSog
b2xkQ2hpbGQpCit2b2lkIENvdW50ZXJOb2RlOjpyZW1vdmVDaGlsZChDb3VudGVyTm9kZSogb2xk
Q2hpbGQsIGNvbnN0IEF0b21pY1N0cmluZyogaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQob2xk
Q2hpbGQpOwogICAgIEFTU0VSVCghb2xkQ2hpbGQtPm1fZmlyc3RDaGlsZCk7CkBAIC0xMzEsNDcg
KzE5MiwyNyBAQCB2b2lkIENvdW50ZXJOb2RlOjpyZW1vdmVDaGlsZChDb3VudGVyTm9kCiAgICAg
ICAgIEFTU0VSVChtX2ZpcnN0Q2hpbGQgPT0gb2xkQ2hpbGQpOwogICAgICAgICBtX2ZpcnN0Q2hp
bGQgPSBuZXh0OwogICAgIH0KLSAgICAKKwogICAgIGlmIChuZXh0KQogICAgICAgICBuZXh0LT5t
X3ByZXZpb3VzU2libGluZyA9IHByZXY7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX2xh
c3RDaGlsZCA9PSBvbGRDaGlsZCk7CiAgICAgICAgIG1fbGFzdENoaWxkID0gcHJldjsKICAgICB9
Ci0gICAgCisKICAgICBpZiAobmV4dCkKLSAgICAgICAgbmV4dC0+cmVjb3VudCgpOworICAgICAg
ICBuZXh0LT5yZWNvdW50KGlkZW50aWZpZXIpOwogfQogCiAjaWZuZGVmIE5ERUJVRwogCi1zdGF0
aWMgY29uc3QgQ291bnRlck5vZGUqIG5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbihjb25zdCBD
b3VudGVyTm9kZSogbm9kZSkKLXsKLSAgICBDb3VudGVyTm9kZSogbmV4dCA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7Ci0gICAgaWYgKCFuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBub2RlLT5wYXJlbnQo
KTsKLSAgICAgICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAg
ICAgICBuZXh0ID0gbmV4dC0+cGFyZW50KCk7Ci0gICAgICAgIGlmIChuZXh0KQotICAgICAgICAg
ICAgbmV4dCA9IG5leHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBuZXh0Owot
fQotCi1zdGF0aWMgY29uc3QgQ291bnRlck5vZGUqIG5leHRJblByZU9yZGVyKGNvbnN0IENvdW50
ZXJOb2RlKiBub2RlKQotewotICAgIGlmIChDb3VudGVyTm9kZSogY2hpbGQgPSBub2RlLT5maXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICByZXR1cm4gbmV4dEluUHJlT3Jk
ZXJBZnRlckNoaWxkcmVuKG5vZGUpOwotfQotCiBzdGF0aWMgdm9pZCBzaG93VHJlZUFuZE1hcmso
Y29uc3QgQ291bnRlck5vZGUqIG5vZGUpCiB7CiAgICAgY29uc3QgQ291bnRlck5vZGUqIHJvb3Qg
PSBub2RlOwogICAgIHdoaWxlIChyb290LT5wYXJlbnQoKSkKICAgICAgICAgcm9vdCA9IHJvb3Qt
PnBhcmVudCgpOwogCi0gICAgZm9yIChjb25zdCBDb3VudGVyTm9kZSogYyA9IHJvb3Q7IGM7IGMg
PSBuZXh0SW5QcmVPcmRlcihjKSkgeworICAgIGZvciAoY29uc3QgQ291bnRlck5vZGUqIGMgPSBy
b290OyBjOyBjID0gYy0+bmV4dEluUHJlT3JkZXIoKSkgewogICAgICAgICBpZiAoYyA9PSBub2Rl
KQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIqIik7CiAgICAgICAgIGZvciAoY29uc3Qg
Q291bnRlck5vZGUqIGQgPSBjOyBkICYmIGQgIT0gcm9vdDsgZCA9IGQtPnBhcmVudCgpKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9Db3VudGVyTm9kZS5oCShyZXZpc2lvbiA1MDU3NikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL0NvdW50ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiAKIGNsYXNzIENvdW50ZXJOb2RlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTUx
LDEzICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQ291bnRlck5vZGUqIG5leHRTaWJsaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0U2libGluZzsgfQogICAgIENvdW50ZXJOb2RlKiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgQ291bnRlck5vZGUqIGxhc3RD
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgQ291bnRlck5vZGUqIGxh
c3REZXNjZW5kYW50KCkgY29uc3Q7CisgICAgQ291bnRlck5vZGUqIHByZXZpb3VzSW5QcmVPcmRl
cigpIGNvbnN0OworICAgIENvdW50ZXJOb2RlKiBuZXh0SW5QcmVPcmRlcihjb25zdCBDb3VudGVy
Tm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OworICAgIENvdW50ZXJOb2RlKiBuZXh0SW5QcmVP
cmRlckFmdGVyQ2hpbGRyZW4oY29uc3QgQ291bnRlck5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25z
dDsKIAotICAgIHZvaWQgaW5zZXJ0QWZ0ZXIoQ291bnRlck5vZGUqIG5ld0NoaWxkLCBDb3VudGVy
Tm9kZSogYmVmb3JlQ2hpbGQpOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoQ291bnRlck5vZGUqKTsK
KyAgICB2b2lkIGluc2VydEFmdGVyKENvdW50ZXJOb2RlKiBuZXdDaGlsZCwgQ291bnRlck5vZGUq
IGJlZm9yZUNoaWxkLCBjb25zdCBBdG9taWNTdHJpbmcqIGlkZW50aWZpZXIpOworICAgIHZvaWQg
cmVtb3ZlQ2hpbGQoQ291bnRlck5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcqIGlkZW50aWZpZXIp
OwogCiBwcml2YXRlOgogICAgIGludCBjb21wdXRlQ291bnRJblBhcmVudCgpIGNvbnN0OwotICAg
IHZvaWQgcmVjb3VudCgpOworICAgIHZvaWQgcmVjb3VudChjb25zdCBBdG9taWNTdHJpbmcqIGlk
ZW50aWZpZXIpOworICAgIHZvaWQgcmVzZXRSZW5kZXJlcihjb25zdCBBdG9taWNTdHJpbmcqIGlk
ZW50aWZpZXIpIGNvbnN0OworICAgIHZvaWQgcmVzZXRSZW5kZXJlcnMoY29uc3QgQXRvbWljU3Ry
aW5nKiBpZGVudGlmaWVyKSBjb25zdDsKIAogICAgIGJvb2wgbV9pc1Jlc2V0OwogICAgIGludCBt
X3ZhbHVlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHJldmlzaW9uIDUw
NTc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDMwICs1Myw2IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBwcmV2aW91
c1NpYmwKICAgICByZXR1cm4gb2JqZWN0LT5wYXJlbnQoKTsKIH0KIAotc3RhdGljIENvdW50ZXJO
b2RlKiBsYXN0RGVzY2VuZGFudChDb3VudGVyTm9kZSogbm9kZSkKLXsKLSAgICBDb3VudGVyTm9k
ZSogbGFzdCA9IG5vZGUtPmxhc3RDaGlsZCgpOwotICAgIGlmICghbGFzdCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICB3aGlsZSAoQ291bnRlck5vZGUqIGxhc3RDaGlsZCA9IGxhc3QtPmxhc3RD
aGlsZCgpKQotICAgICAgICBsYXN0ID0gbGFzdENoaWxkOwotCi0gICAgcmV0dXJuIGxhc3Q7Ci19
Ci0KLXN0YXRpYyBDb3VudGVyTm9kZSogcHJldmlvdXNJblByZU9yZGVyKENvdW50ZXJOb2RlKiBu
b2RlKQotewotICAgIENvdW50ZXJOb2RlKiBwcmV2aW91cyA9IG5vZGUtPnByZXZpb3VzU2libGlu
ZygpOwotICAgIGlmICghcHJldmlvdXMpCi0gICAgICAgIHJldHVybiBub2RlLT5wYXJlbnQoKTsK
LQotICAgIHdoaWxlIChDb3VudGVyTm9kZSogbGFzdENoaWxkID0gcHJldmlvdXMtPmxhc3RDaGls
ZCgpKQotICAgICAgICBwcmV2aW91cyA9IGxhc3RDaGlsZDsKLQotICAgIHJldHVybiBwcmV2aW91
czsKLX0KLQogc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IEF0b21pY1N0cmluZyYgY291bnRlck5hbWUsIGJvb2wmIGlzUmVzZXQsIGludCYgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CkBAIC0yMDQsNyArMTgwLDcgQEAgc3RhdGljIENvdW50
ZXJOb2RlKiBjb3VudGVyKFJlbmRlck9iamVjdAogICAgIENvdW50ZXJOb2RlKiBuZXdOb2RlOwog
ICAgIGlmIChmaW5kUGxhY2VGb3JDb3VudGVyKG9iamVjdCwgY291bnRlck5hbWUsIGlzUmVzZXQs
IG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKSkgewogICAgICAgICBuZXdOb2RlID0gbmV3
IENvdW50ZXJOb2RlKG9iamVjdCwgaXNSZXNldCwgdmFsdWUpOwotICAgICAgICBuZXdQYXJlbnQt
Pmluc2VydEFmdGVyKG5ld05vZGUsIG5ld1ByZXZpb3VzU2libGluZyk7CisgICAgICAgIG5ld1Bh
cmVudC0+aW5zZXJ0QWZ0ZXIobmV3Tm9kZSwgbmV3UHJldmlvdXNTaWJsaW5nLCAmY291bnRlck5h
bWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1ha2UgYSByZXNldCBub2RlIGZvciBjb3Vu
dGVycyB0aGF0IGFyZW4ndCBpbnNpZGUgYW4gZXhpc3RpbmcgcmVzZXQgbm9kZS4KICAgICAgICAg
bmV3Tm9kZSA9IG5ldyBDb3VudGVyTm9kZShvYmplY3QsIHRydWUsIHZhbHVlKTsKQEAgLTI3Miwy
NCArMjQ4LDI2IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6Y2FsY1ByZWZXaWR0aHMoaW50IGwKICAg
ICBSZW5kZXJUZXh0OjpjYWxjUHJlZldpZHRocyhsZWFkKTsKIH0KIAotdm9pZCBSZW5kZXJDb3Vu
dGVyOjppbnZhbGlkYXRlKCkKK3ZvaWQgUmVuZGVyQ291bnRlcjo6aW52YWxpZGF0ZShjb25zdCBB
dG9taWNTdHJpbmcqIGlkZW50aWZpZXIpCiB7Ci0gICAgbV9jb3VudGVyTm9kZSA9IDA7Ci0gICAg
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgaWYgKCFpZGVudGlmaWVy
IHx8IG1fY291bnRlci5pZGVudGlmaWVyKCkgPT0gKmlkZW50aWZpZXIpIHsKKyAgICAgICAgbV9j
b3VudGVyTm9kZSA9IDA7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOworICAgIH0KIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4o
QXRvbWljU3RyaW5nSW1wbCogaWRlbnRpZmllciwgQ291bnRlck5vZGUqIG5vZGUpCitzdGF0aWMg
dm9pZCBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihjb25zdCBBdG9taWNTdHJpbmcqIGlkZW50
aWZpZXIsIENvdW50ZXJOb2RlKiBub2RlKQogewogICAgIENvdW50ZXJOb2RlKiBwcmV2aW91czsK
LSAgICBmb3IgKENvdW50ZXJOb2RlKiBjaGlsZCA9IGxhc3REZXNjZW5kYW50KG5vZGUpOyBjaGls
ZCAmJiBjaGlsZCAhPSBub2RlOyBjaGlsZCA9IHByZXZpb3VzKSB7Ci0gICAgICAgIHByZXZpb3Vz
ID0gcHJldmlvdXNJblByZU9yZGVyKGNoaWxkKTsKLSAgICAgICAgY2hpbGQtPnBhcmVudCgpLT5y
ZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmdldChjaGls
ZC0+cmVuZGVyZXIoKSktPmdldChpZGVudGlmaWVyKSA9PSBjaGlsZCk7Ci0gICAgICAgIGNvdW50
ZXJNYXBzKCkuZ2V0KGNoaWxkLT5yZW5kZXJlcigpKS0+cmVtb3ZlKGlkZW50aWZpZXIpOworICAg
IGZvciAoQ291bnRlck5vZGUqIGNoaWxkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsgY2hpbGQg
JiYgY2hpbGQgIT0gbm9kZTsgY2hpbGQgPSBwcmV2aW91cykgeworICAgICAgICBwcmV2aW91cyA9
IGNoaWxkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsKKyAgICAgICAgY2hpbGQtPnBhcmVudCgpLT5y
ZW1vdmVDaGlsZChjaGlsZCwgaWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVChjb3VudGVyTWFw
cygpLmdldChjaGlsZC0+cmVuZGVyZXIoKSktPmdldChpZGVudGlmaWVyLT5pbXBsKCkpID09IGNo
aWxkKTsKKyAgICAgICAgY291bnRlck1hcHMoKS5nZXQoY2hpbGQtPnJlbmRlcmVyKCkpLT5yZW1v
dmUoaWRlbnRpZmllci0+aW1wbCgpKTsKICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+
ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3RDaGls
ZExpc3QqIGNoaWxkcmVuID0gY2hpbGQtPnJlbmRlcmVyKCktPnZpcnR1YWxDaGlsZHJlbigpOwog
ICAgICAgICAgICAgaWYgKGNoaWxkcmVuKQotICAgICAgICAgICAgICAgIGNoaWxkcmVuLT5pbnZh
bGlkYXRlQ291bnRlcnMoY2hpbGQtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgIGNoaWxk
cmVuLT5pbnZhbGlkYXRlQ291bnRlcnMoY2hpbGQtPnJlbmRlcmVyKCksIGlkZW50aWZpZXIpOwog
ICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBjaGlsZDsKICAgICB9CkBAIC0zMDYsOSArMjg0LDEw
IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcygKICAgICBDb3VudGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoQ291bnRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBDb3VudGVyTm9kZSogbm9kZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGRlc3Ryb3lD
b3VudGVyTm9kZUNoaWxkcmVuKGl0LT5maXJzdC5nZXQoKSwgbm9kZSk7CisgICAgICAgIEF0b21p
Y1N0cmluZyBpZGVudGlmaWVyKGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIGRlc3Ryb3lDb3Vu
dGVyTm9kZUNoaWxkcmVuKCZpZGVudGlmaWVyLCBub2RlKTsKICAgICAgICAgaWYgKENvdW50ZXJO
b2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHBhcmVudC0+cmVtb3Zl
Q2hpbGQobm9kZSk7CisgICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUsICZpZGVu
dGlmaWVyKTsKICAgICAgICAgZGVsZXRlIG5vZGU7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiA1MDU3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBSZW5k
ZXJDb3VudGVyIDogcHVibGljIFJlbmRlclRleHQgCiBwdWJsaWM6CiAgICAgUmVuZGVyQ291bnRl
cihEb2N1bWVudCosIGNvbnN0IENvdW50ZXJDb250ZW50Jik7CiAKLSAgICB2b2lkIGludmFsaWRh
dGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgQXRvbWljU3RyaW5nKiBpZGVudGlmaWVy
ID0gMCk7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVj
dCopOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5j
cHAJKHJldmlzaW9uIDUwNTc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDI0ICsyNzEsMjkgQEAgc3RhdGljIFJl
bmRlck9iamVjdCogZmluZEJlZm9yZUFmdGVyUGFyZQogICAgIHJldHVybiBiZWZvcmVBZnRlclBh
cmVudDsKIH0KIAotc3RhdGljIHZvaWQgaW52YWxpZGF0ZUNvdW50ZXJzSW5Db250YWluZXIoUmVu
ZGVyT2JqZWN0KiBjb250YWluZXIpCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQ291bnRlcnNJbkNv
bnRhaW5lcihSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgY29uc3QgQXRvbWljU3RyaW5nKiBpZGVu
dGlmaWVyKQogewogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm47CiAgICAgY29u
dGFpbmVyID0gZmluZEJlZm9yZUFmdGVyUGFyZW50KGNvbnRhaW5lcik7CiAgICAgaWYgKCFjb250
YWluZXIpCiAgICAgICAgIHJldHVybjsKKyAgICAvL1NvbWV0aW1lcyB0aGUgY291bnRlciBpcyBh
dHRhY2hlZCBkaXJlY3RseSBvbiB0aGUgY29udGFpbmVyLgorICAgIGlmIChjb250YWluZXItPmlz
Q291bnRlcigpKSB7CisgICAgICAgIHRvUmVuZGVyQ291bnRlcihjb250YWluZXIpLT5pbnZhbGlk
YXRlKGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjb250ZW50ID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7IGNvbnRlbnQ7IGNvbnRl
bnQgPSBjb250ZW50LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjb250ZW50LT5pc0Nv
dW50ZXIoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyQ291bnRlcihjb250ZW50KS0+aW52YWxpZGF0
ZSgpOworICAgICAgICAgICAgdG9SZW5kZXJDb3VudGVyKGNvbnRlbnQpLT5pbnZhbGlkYXRlKGlk
ZW50aWZpZXIpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OmludmFs
aWRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIG93bmVyKQordm9pZCBSZW5kZXJPYmplY3RDaGls
ZExpc3Q6OmludmFsaWRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIG93bmVyLCBjb25zdCBBdG9t
aWNTdHJpbmcqIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFvd25lci0+ZG9jdW1lbnRCZWlu
Z0Rlc3Ryb3llZCgpKTsKLSAgICBpbnZhbGlkYXRlQ291bnRlcnNJbkNvbnRhaW5lcihiZWZvcmVB
ZnRlckNvbnRhaW5lcihvd25lciwgQkVGT1JFKSk7Ci0gICAgaW52YWxpZGF0ZUNvdW50ZXJzSW5D
b250YWluZXIoYmVmb3JlQWZ0ZXJDb250YWluZXIob3duZXIsIEFGVEVSKSk7CisgICAgaW52YWxp
ZGF0ZUNvdW50ZXJzSW5Db250YWluZXIoYmVmb3JlQWZ0ZXJDb250YWluZXIob3duZXIsIEJFRk9S
RSksIGlkZW50aWZpZXIpOworICAgIGludmFsaWRhdGVDb3VudGVyc0luQ29udGFpbmVyKGJlZm9y
ZUFmdGVyQ29udGFpbmVyKG93bmVyLCBBRlRFUiksIGlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJl
bmRlck9iamVjdENoaWxkTGlzdDo6dXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50KFJlbmRlck9iamVj
dCogb3duZXIsIFBzZXVkb0lkIHR5cGUsIFJlbmRlck9iamVjdCogc3R5bGVkT2JqZWN0KQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgJKHJldmlzaW9uIDUw
NTc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBBdG9taWNTdHJpbmc7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKIGNsYXNzIFJlbmRlck9iamVj
dENoaWxkTGlzdCB7CkBAIC01NSw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2VydENo
aWxkTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZSwgYm9vbCBmdWxsSW5zZXJ0ID0gdHJ1ZSk7CiAKICAgICB2b2lkIHVwZGF0
ZUJlZm9yZUFmdGVyQ29udGVudChSZW5kZXJPYmplY3QqIG93bmVyLCBQc2V1ZG9JZCB0eXBlLCBS
ZW5kZXJPYmplY3QqIHN0eWxlZE9iamVjdCA9IDApOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvdW50
ZXJzKFJlbmRlck9iamVjdCogb3duZXIpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvdW50ZXJzKFJl
bmRlck9iamVjdCogb3duZXIsIGNvbnN0IEF0b21pY1N0cmluZyogaWRlbnRpZmllciA9IDApOwog
CiBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCogbV9maXJzdENoaWxkOwo=
</data>
<flag name="review"
          id="24335"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42925</attachid>
            <date>2009-11-10 22:25:28 -0800</date>
            <delta_ts>2009-11-13 12:21:53 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>patchFor31213-3.patch</filename>
            <type>text/plain</type>
            <size>16967</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDc4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMTEtMDkgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBDb3VudGVyTm9kZSBjbGFzcyBpcyBtaXNzaW5nIHNvbWUgYmFzaWMgdHJlZSBuYXZpZ2F0
aW9uIG1ldGhvZHMgY29tbW9uIGluIG90aGVyIFdlYktpdCB0cmVlcyBzdWNoIGFzIHRoZSByZW5k
ZXJpbmcgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzEyMTMKKyAgICAgICAgQWRkZWQgdHJlZSBuYXZpZ2F0aW9uIG1ldGhvZHMgdGhhdCBwZXJt
aXQgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEKKyAgICAgICAgY291bnRlciBmZWF0dXJl
IHdpdGhvdXQgdXNpbmcgcmVjdXJzaW9uIHByb3BvcnRpb25hbCB0byB0aGUgY291bnRlcgorICAg
ICAgICB0cmVlIGRlcHRoLgorICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBJIGRpZCBub3Qg
ZmluZCBhbnkgYnVnIHRoYXQgaXMgZml4ZWQgYnkgdGhpcworICAgICAgICBjb21taXQgeWV0LCB0
aGlzIGp1c3QgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgcGF0Y2ggZm9yIDExMDMxIGFuZAorICAg
ICAgICBoZWxwcyByZXNwb25kIHRvIHNvbWUgY29uY2VybnMgcmVnYXJkaW5nIHRoYXQgcGF0Y2gu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q291bnRlck5vZGU6OkNvdW50ZXJOb2RlKToKKworICAgICAgICAoV2ViQ29yZTo6Q291bnRl
ck5vZGU6Om5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpD
b3VudGVyTm9kZTo6bmV4dEluUHJlT3JkZXIpOgorICAgICAgICBBZGRlZCB0byBzdXBwb3J0IG5v
bi1yZWN1cnNpdmUgdHJlZSB0cmF2ZXJzYWwgbmVjZXNzYXJ5IGZvcgorICAgICAgICBlZmZpY2ll
bnQgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEgY291bnRlcnMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkNvdW50ZXJOb2RlOjpsYXN0RGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpD
b3VudGVyTm9kZTo6cHJldmlvdXNJblByZU9yZGVyKToKKyAgICAgICAgTW92ZWQgdGhpcyBtZXRo
b2RzIHN1Y2ggdGhhdCB0aGV5IG9jY3VweSBhIHBsYWNlIHNpbWlsYXIgdG8gdGhhdCBvZgorICAg
ICAgICBpZGVudGljYWxseSBuYW1lZCBtZXRob2RzIG9uIHRoZSByZW5kZXIgdHJlZS4gVGhpcyBh
bGxvd3MgZm9yIHRoZWlyCisgICAgICAgIGJyb2FkZXIgdXNlIG5lZWRlZCBpbiBmdWxsIGltcGxl
bWVudGF0aW9uIG9mIENTUzIuMSBjb3VudGVycy4KKworICAgICAgICAoV2ViQ29yZTo6Q291bnRl
ck5vZGU6OnJlc2V0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRlck5vZGU6OnJl
c2V0UmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjpyZWNvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjppbnNlcnRBZnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb3VudGVyTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICBDaGFuZ2VkIHN1Y2gg
dGhhdCBpbnNlcnRpb24vcmVtb3ZhbCBvZiBhIGNvdW50ZXIsIHRyaWdnZXJzIG5vdCBvbmx5Cisg
ICAgICAgIHJlY2FsY3VsYXRpb24gb2YgUHJlZml4V2lkdGhzLCBidXQgYWxzbyByZWFzc2VzbWVu
dCBvZiB2YWx1ZXMgaW4KKyAgICAgICAgY291bnRlciBub2Rlcy4gVGhpcyBpcyB0aGUgYmFzaXMg
ZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBDU1MyLjEKKyAgICAgICAgY291bnRlcnMuIEl0IGRvZXMg
bm90IGNoYW5nZSBjdXJyZW50IGJlaGF2aW9yIGJ5IG11Y2ggYmVjYXVzZSBvZgorICAgICAgICBj
aGFuZ2VzIG5lZWRlZCB0byB0aGUgcmVjYWxjdWxhdGlvbiBhbGdvcml0aG0sIGJ1dCB0aG9zZSBh
cmUgY29tbWluZworICAgICAgICBpbiB0aGUgcGF0Y2ggZm9yIDExMDMxLgorICAgICAgICAoV2Vi
Q29yZTo6c2hvd1RyZWVBbmRNYXJrKToKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5vZGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb3VudGVyKToKKyAgICAgICAgT25seSBjaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gcHJl
cGFyZSBmb3IgaW1wbGVtZW50YXRpb24gb2YgRGFyaW4KKyAgICAgICAgQWRsZXIncyByZWNvbW1l
bmRhdGlvbiBmb3IgdGhlIHBhdGNoIHRvIDExMDMxLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJDb3VudGVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lDb3VudGVy
Tm9kZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lD
b3VudGVyTm9kZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppbnZhbGlkYXRlQ291bnRlcnNJbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3RDaGlsZExpc3Q6OmludmFsaWRhdGVDb3VudGVycyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5oOgorICAgICAgICBBZGRlZCB0aGUgYWJpbGl0
eSB0byByZXN0cmljdCBpbnZhbGlkYXRpb24gdG8gY291bnRlcnMgd2l0aCBhIGdpdmVuCisgICAg
ICAgIGlkZW50aWZpZXIuCisgICAgICAgIEFsc28gaW52YWxpZGF0ZWQgY291bnRlcnMgdGhhdCBh
cmUgb24gdGhlIGNoaWxkIGNvbnRhaW5lciBpdHNlbGYKKyAgICAgICAgd2hpY2ggd2VyZSBtaXNz
ZWQgYnkgdGhlIHByZXZpb3VzIGFsZ29yaXRobSwgYnV0IHdlcmUgYSB2YWxpZCBjYXNlLgorCiAy
MDA5LTExLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgZml4IENocm9taXVtIGJ1aWxkIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzUwNzYwLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAkocmV2
aXNpb24gNTA3ODMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDU4IEBAIENvdW50ZXJOb2RlOjpDb3VudGVyTm9kZShSZW5k
ZXJPYmplY3QqIG8KICAgICAsIG1fbmV4dFNpYmxpbmcoMCkKICAgICAsIG1fZmlyc3RDaGlsZCgw
KQogICAgICwgbV9sYXN0Q2hpbGQoMCkKLXsgICAKK3sKK30KKworQ291bnRlck5vZGUqIENvdW50
ZXJOb2RlOjpuZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oY29uc3QgQ291bnRlck5vZGUqIHN0
YXlXaXRoaW4pIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBDb3VudGVyTm9kZSogbmV4dCA9IG1fbmV4dFNpYmxpbmc7CisgICAg
aWYgKG5leHQpCisgICAgICAgIHJldHVybiBuZXh0OworICAgIG5leHQgPSBtX3BhcmVudDsKKyAg
ICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+bV9uZXh0U2libGluZykgeworICAgICAgICBpZiAobmV4
dCA9PSBzdGF5V2l0aGluKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIG5leHQgPSBu
ZXh0LT5tX3BhcmVudDsKKyAgICB9CisgICAgaWYgKG5leHQpCisgICAgICAgIHJldHVybiBuZXh0
LT5tX25leHRTaWJsaW5nOworICAgIHJldHVybiAwOworfQorCitDb3VudGVyTm9kZSogQ291bnRl
ck5vZGU6Om5leHRJblByZU9yZGVyKGNvbnN0IENvdW50ZXJOb2RlKiBzdGF5V2l0aGluKSBjb25z
dAoreworICAgIGlmIChDb3VudGVyTm9kZSogbmV4dCA9IG1fZmlyc3RDaGlsZCkKKyAgICAgICAg
cmV0dXJuIG5leHQ7CisKKyAgICByZXR1cm4gbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKHN0
YXlXaXRoaW4pOworfQorCitDb3VudGVyTm9kZSogQ291bnRlck5vZGU6Omxhc3REZXNjZW5kYW50
KCkgY29uc3QKK3sKKyAgICBDb3VudGVyTm9kZSogbGFzdCA9IG1fbGFzdENoaWxkOworICAgIGlm
ICghbGFzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB3aGlsZSAoQ291bnRlck5vZGUqIGxh
c3RDaGlsZCA9IGxhc3QtPm1fbGFzdENoaWxkKQorICAgICAgICBsYXN0ID0gbGFzdENoaWxkOwor
CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK0NvdW50ZXJOb2RlKiBDb3VudGVyTm9kZTo6cHJldmlv
dXNJblByZU9yZGVyKCkgY29uc3QKK3sKKyAgICBDb3VudGVyTm9kZSogcHJldmlvdXMgPSBtX3By
ZXZpb3VzU2libGluZzsKKyAgICBpZiAoIXByZXZpb3VzKQorICAgICAgICByZXR1cm4gbV9wYXJl
bnQ7CisKKyAgICB3aGlsZSAoQ291bnRlck5vZGUqIGxhc3RDaGlsZCA9IHByZXZpb3VzLT5tX2xh
c3RDaGlsZCkKKyAgICAgICAgcHJldmlvdXMgPSBsYXN0Q2hpbGQ7CisKKyAgICByZXR1cm4gcHJl
dmlvdXM7CiB9CiAKIGludCBDb3VudGVyTm9kZTo6Y29tcHV0ZUNvdW50SW5QYXJlbnQoKSBjb25z
dApAQCAtNTYsMjYgKzEwNywzNyBAQCBpbnQgQ291bnRlck5vZGU6OmNvbXB1dGVDb3VudEluUGFy
ZW50KCkgCiAgICAgcmV0dXJuIG1fcGFyZW50LT5tX3ZhbHVlICsgaW5jcmVtZW50OwogfQogCi12
b2lkIENvdW50ZXJOb2RlOjpyZWNvdW50KCkKKwordm9pZCBDb3VudGVyTm9kZTo6cmVzZXRSZW5k
ZXJlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuID0gbV9y
ZW5kZXJlci0+dmlydHVhbENoaWxkcmVuKCkpCisgICAgICAgIGNoaWxkcmVuLT5pbnZhbGlkYXRl
Q291bnRlcnMobV9yZW5kZXJlciwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgQ291bnRlck5vZGU6
OnJlc2V0UmVuZGVyZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikgY29uc3QKK3sK
KyAgICBjb25zdCBDb3VudGVyTm9kZSogbm9kZSA9IHRoaXM7CisgICAgZG8geworICAgICAgICBu
b2RlLT5yZXNldFJlbmRlcmVyKGlkZW50aWZpZXIpOworICAgICAgICBub2RlID0gbm9kZS0+bmV4
dEluUHJlT3JkZXIodGhpcyk7CisgICAgfSB3aGlsZSAobm9kZSk7Cit9CisKK3ZvaWQgQ291bnRl
ck5vZGU6OnJlY291bnQoY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKQogewotICAgIGZv
ciAoQ291bnRlck5vZGUqIGMgPSB0aGlzOyBjOyBjID0gYy0+bV9uZXh0U2libGluZykgewotICAg
ICAgICBpbnQgb2xkQ291bnQgPSBjLT5tX2NvdW50SW5QYXJlbnQ7Ci0gICAgICAgIGludCBuZXdD
b3VudCA9IGMtPmNvbXB1dGVDb3VudEluUGFyZW50KCk7CisgICAgZm9yIChDb3VudGVyTm9kZSog
bm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5tX25leHRTaWJsaW5nKSB7CisgICAgICAg
IGludCBvbGRDb3VudCA9IG5vZGUtPm1fY291bnRJblBhcmVudDsKKyAgICAgICAgaW50IG5ld0Nv
dW50ID0gbm9kZS0+Y29tcHV0ZUNvdW50SW5QYXJlbnQoKTsKICAgICAgICAgaWYgKG9sZENvdW50
ID09IG5ld0NvdW50KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGMtPm1fY291bnRJblBh
cmVudCA9IG5ld0NvdW50OwotICAgICAgICAvLyBtX3JlbmRlcmVyIGNvbnRhaW5zIHRoZSBwYXJl
bnQgb2YgdGhlIHJlbmRlciBub2RlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gYSBDb3Vu
dGVyTm9kZS4gTGV0J3MgZmluZCB0aGUgY291bnRlcgotICAgICAgICAvLyBjaGlsZCBhbmQgbWFr
ZSB0aGlzIHJlLWxheW91dC4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG8gPSBjLT5tX3Jl
bmRlcmVyLT5maXJzdENoaWxkKCk7IG87IG8gPSBvLT5uZXh0U2libGluZygpKQotICAgICAgICAg
ICAgaWYgKCFvLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgby0+aXNDb3VudGVyKCkpIHsK
LSAgICAgICAgICAgICAgICBvLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgbm9kZS0+bV9j
b3VudEluUGFyZW50ID0gbmV3Q291bnQ7CisgICAgICAgIG5vZGUtPnJlc2V0UmVuZGVyZXJzKGlk
ZW50aWZpZXIpOwogICAgIH0KIH0KIAotdm9pZCBDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIoQ291
bnRlck5vZGUqIG5ld0NoaWxkLCBDb3VudGVyTm9kZSogcmVmQ2hpbGQpCit2b2lkIENvdW50ZXJO
b2RlOjppbnNlcnRBZnRlcihDb3VudGVyTm9kZSogbmV3Q2hpbGQsIENvdW50ZXJOb2RlKiByZWZD
aGlsZCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChuZXdD
aGlsZCk7CiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+bV9wYXJlbnQpOwpAQCAtMTA3LDYyICsxNjks
NDIgQEAgdm9pZCBDb3VudGVyTm9kZTo6aW5zZXJ0QWZ0ZXIoQ291bnRlck5vZAogCiAgICAgbmV3
Q2hpbGQtPm1fY291bnRJblBhcmVudCA9IG5ld0NoaWxkLT5jb21wdXRlQ291bnRJblBhcmVudCgp
OwogICAgIGlmIChuZXh0KQotICAgICAgICBuZXh0LT5yZWNvdW50KCk7CisgICAgICAgIG5leHQt
PnJlY291bnQoaWRlbnRpZmllcik7CiB9CiAKLXZvaWQgQ291bnRlck5vZGU6OnJlbW92ZUNoaWxk
KENvdW50ZXJOb2RlKiBvbGRDaGlsZCkKK3ZvaWQgQ291bnRlck5vZGU6OnJlbW92ZUNoaWxkKENv
dW50ZXJOb2RlKiBvbGRDaGlsZCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKQogewog
ICAgIEFTU0VSVChvbGRDaGlsZCk7CiAgICAgQVNTRVJUKCFvbGRDaGlsZC0+bV9maXJzdENoaWxk
KTsKICAgICBBU1NFUlQoIW9sZENoaWxkLT5tX2xhc3RDaGlsZCk7CiAKICAgICBDb3VudGVyTm9k
ZSogbmV4dCA9IG9sZENoaWxkLT5tX25leHRTaWJsaW5nOwotICAgIENvdW50ZXJOb2RlKiBwcmV2
ID0gb2xkQ2hpbGQtPm1fcHJldmlvdXNTaWJsaW5nOworICAgIENvdW50ZXJOb2RlKiBwcmV2aW91
cyA9IG9sZENoaWxkLT5tX3ByZXZpb3VzU2libGluZzsKIAogICAgIG9sZENoaWxkLT5tX25leHRT
aWJsaW5nID0gMDsKICAgICBvbGRDaGlsZC0+bV9wcmV2aW91c1NpYmxpbmcgPSAwOwogICAgIG9s
ZENoaWxkLT5tX3BhcmVudCA9IDA7CiAKLSAgICBpZiAocHJldikgCi0gICAgICAgIHByZXYtPm1f
bmV4dFNpYmxpbmcgPSBuZXh0OworICAgIGlmIChwcmV2aW91cykgCisgICAgICAgIHByZXZpb3Vz
LT5tX25leHRTaWJsaW5nID0gbmV4dDsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fZmly
c3RDaGlsZCA9PSBvbGRDaGlsZCk7CiAgICAgICAgIG1fZmlyc3RDaGlsZCA9IG5leHQ7CiAgICAg
fQotICAgIAorCiAgICAgaWYgKG5leHQpCi0gICAgICAgIG5leHQtPm1fcHJldmlvdXNTaWJsaW5n
ID0gcHJldjsKKyAgICAgICAgbmV4dC0+bV9wcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91czsKICAg
ICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fbGFzdENoaWxkID09IG9sZENoaWxkKTsKLSAgICAg
ICAgbV9sYXN0Q2hpbGQgPSBwcmV2OworICAgICAgICBtX2xhc3RDaGlsZCA9IHByZXZpb3VzOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChuZXh0KQotICAgICAgICBuZXh0LT5yZWNvdW50KCk7Cisg
ICAgICAgIG5leHQtPnJlY291bnQoaWRlbnRpZmllcik7CiB9CiAKICNpZm5kZWYgTkRFQlVHCiAK
LXN0YXRpYyBjb25zdCBDb3VudGVyTm9kZSogbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKGNv
bnN0IENvdW50ZXJOb2RlKiBub2RlKQotewotICAgIENvdW50ZXJOb2RlKiBuZXh0ID0gbm9kZS0+
bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAoIW5leHQpIHsKLSAgICAgICAgbmV4dCA9IG5vZGUtPnBh
cmVudCgpOwotICAgICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgICAgIG5leHQgPSBuZXh0LT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKG5leHQpCi0gICAg
ICAgICAgICBuZXh0ID0gbmV4dC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5l
eHQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb3VudGVyTm9kZSogbmV4dEluUHJlT3JkZXIoY29uc3Qg
Q291bnRlck5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKENvdW50ZXJOb2RlKiBjaGlsZCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBuZXh0SW5Q
cmVPcmRlckFmdGVyQ2hpbGRyZW4obm9kZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNob3dUcmVlQW5k
TWFyayhjb25zdCBDb3VudGVyTm9kZSogbm9kZSkKIHsKICAgICBjb25zdCBDb3VudGVyTm9kZSog
cm9vdCA9IG5vZGU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmgJKHJldmlzaW9uIDUwNzgz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0b21pY1N0cmlu
ZzsKIGNsYXNzIFJlbmRlck9iamVjdDsKIAogY2xhc3MgQ291bnRlck5vZGUgOiBwdWJsaWMgTm9u
Y29weWFibGUgewpAQCAtNTEsMTMgKzUyLDE5IEBAIHB1YmxpYzoKICAgICBDb3VudGVyTm9kZSog
bmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHRTaWJsaW5nOyB9CiAgICAgQ291bnRl
ck5vZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICBD
b3VudGVyTm9kZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0KKyAg
ICBDb3VudGVyTm9kZSogbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKKyAgICBDb3VudGVyTm9kZSog
cHJldmlvdXNJblByZU9yZGVyKCkgY29uc3Q7CisgICAgQ291bnRlck5vZGUqIG5leHRJblByZU9y
ZGVyKGNvbnN0IENvdW50ZXJOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAgQ291bnRl
ck5vZGUqIG5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbihjb25zdCBDb3VudGVyTm9kZSogc3Rh
eVdpdGhpbiA9IDApIGNvbnN0OwogCi0gICAgdm9pZCBpbnNlcnRBZnRlcihDb3VudGVyTm9kZSog
bmV3Q2hpbGQsIENvdW50ZXJOb2RlKiBiZWZvcmVDaGlsZCk7Ci0gICAgdm9pZCByZW1vdmVDaGls
ZChDb3VudGVyTm9kZSopOworICAgIHZvaWQgaW5zZXJ0QWZ0ZXIoQ291bnRlck5vZGUqIG5ld0No
aWxkLCBDb3VudGVyTm9kZSogYmVmb3JlQ2hpbGQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRp
Zmllcik7CisgICAgdm9pZCByZW1vdmVDaGlsZChDb3VudGVyTm9kZSosIGNvbnN0IEF0b21pY1N0
cmluZyYgaWRlbnRpZmllcik7CiAKIHByaXZhdGU6CiAgICAgaW50IGNvbXB1dGVDb3VudEluUGFy
ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCByZWNvdW50KCk7CisgICAgdm9pZCByZWNvdW50KGNvbnN0
IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCByZXNldFJlbmRlcmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7CisgICAgdm9pZCByZXNldFJlbmRlcmVy
cyhjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpIGNvbnN0OwogCiAgICAgYm9vbCBtX2lz
UmVzZXQ7CiAgICAgaW50IG1fdmFsdWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAkocmV2aXNpb24gNTA3ODMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMzAgKzUzLDYgQEAgc3RhdGljIGlubGluZSBSZW5k
ZXJPYmplY3QqIHByZXZpb3VzU2libAogICAgIHJldHVybiBvYmplY3QtPnBhcmVudCgpOwogfQog
Ci1zdGF0aWMgQ291bnRlck5vZGUqIGxhc3REZXNjZW5kYW50KENvdW50ZXJOb2RlKiBub2RlKQot
ewotICAgIENvdW50ZXJOb2RlKiBsYXN0ID0gbm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgaWYgKCFs
YXN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHdoaWxlIChDb3VudGVyTm9kZSogbGFzdENo
aWxkID0gbGFzdC0+bGFzdENoaWxkKCkpCi0gICAgICAgIGxhc3QgPSBsYXN0Q2hpbGQ7Ci0KLSAg
ICByZXR1cm4gbGFzdDsKLX0KLQotc3RhdGljIENvdW50ZXJOb2RlKiBwcmV2aW91c0luUHJlT3Jk
ZXIoQ291bnRlck5vZGUqIG5vZGUpCi17Ci0gICAgQ291bnRlck5vZGUqIHByZXZpb3VzID0gbm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKCFwcmV2aW91cykKLSAgICAgICAgcmV0dXJu
IG5vZGUtPnBhcmVudCgpOwotCi0gICAgd2hpbGUgKENvdW50ZXJOb2RlKiBsYXN0Q2hpbGQgPSBw
cmV2aW91cy0+bGFzdENoaWxkKCkpCi0gICAgICAgIHByZXZpb3VzID0gbGFzdENoaWxkOwotCi0g
ICAgcmV0dXJuIHByZXZpb3VzOwotfQotCiBzdGF0aWMgYm9vbCBwbGFuQ291bnRlcihSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5nJiBjb3VudGVyTmFtZSwgYm9vbCYgaXNS
ZXNldCwgaW50JiB2YWx1ZSkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKQEAgLTIwNCw3ICsxODAs
NyBAQCBzdGF0aWMgQ291bnRlck5vZGUqIGNvdW50ZXIoUmVuZGVyT2JqZWN0CiAgICAgQ291bnRl
ck5vZGUqIG5ld05vZGU7CiAgICAgaWYgKGZpbmRQbGFjZUZvckNvdW50ZXIob2JqZWN0LCBjb3Vu
dGVyTmFtZSwgaXNSZXNldCwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpKSB7CiAgICAg
ICAgIG5ld05vZGUgPSBuZXcgQ291bnRlck5vZGUob2JqZWN0LCBpc1Jlc2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIG5ld1BhcmVudC0+aW5zZXJ0QWZ0ZXIobmV3Tm9kZSwgbmV3UHJldmlvdXNTaWJsaW5n
KTsKKyAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihuZXdOb2RlLCBuZXdQcmV2aW91c1Np
YmxpbmcsIGNvdW50ZXJOYW1lKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBNYWtlIGEgcmVz
ZXQgbm9kZSBmb3IgY291bnRlcnMgdGhhdCBhcmVuJ3QgaW5zaWRlIGFuIGV4aXN0aW5nIHJlc2V0
IG5vZGUuCiAgICAgICAgIG5ld05vZGUgPSBuZXcgQ291bnRlck5vZGUob2JqZWN0LCB0cnVlLCB2
YWx1ZSk7CkBAIC0yNzIsMjQgKzI0OCwyNiBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OmNhbGNQcmVm
V2lkdGhzKGludCBsCiAgICAgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMobGVhZCk7CiB9CiAK
LXZvaWQgUmVuZGVyQ291bnRlcjo6aW52YWxpZGF0ZSgpCit2b2lkIFJlbmRlckNvdW50ZXI6Omlu
dmFsaWRhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKQogeworICAgIGlmIChtX2Nv
dW50ZXIuaWRlbnRpZmllcigpICE9IGlkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKICAgICBt
X2NvdW50ZXJOb2RlID0gMDsKICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oQXRvbWljU3Ry
aW5nSW1wbCogaWRlbnRpZmllciwgQ291bnRlck5vZGUqIG5vZGUpCitzdGF0aWMgdm9pZCBkZXN0
cm95Q291bnRlck5vZGVDaGlsZHJlbihjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIENv
dW50ZXJOb2RlKiBub2RlKQogewogICAgIENvdW50ZXJOb2RlKiBwcmV2aW91czsKLSAgICBmb3Ig
KENvdW50ZXJOb2RlKiBjaGlsZCA9IGxhc3REZXNjZW5kYW50KG5vZGUpOyBjaGlsZCAmJiBjaGls
ZCAhPSBub2RlOyBjaGlsZCA9IHByZXZpb3VzKSB7Ci0gICAgICAgIHByZXZpb3VzID0gcHJldmlv
dXNJblByZU9yZGVyKGNoaWxkKTsKLSAgICAgICAgY2hpbGQtPnBhcmVudCgpLT5yZW1vdmVDaGls
ZChjaGlsZCk7Ci0gICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmdldChjaGlsZC0+cmVuZGVy
ZXIoKSktPmdldChpZGVudGlmaWVyKSA9PSBjaGlsZCk7Ci0gICAgICAgIGNvdW50ZXJNYXBzKCku
Z2V0KGNoaWxkLT5yZW5kZXJlcigpKS0+cmVtb3ZlKGlkZW50aWZpZXIpOworICAgIGZvciAoQ291
bnRlck5vZGUqIGNoaWxkID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsgY2hpbGQgJiYgY2hpbGQg
IT0gbm9kZTsgY2hpbGQgPSBwcmV2aW91cykgeworICAgICAgICBwcmV2aW91cyA9IGNoaWxkLT5w
cmV2aW91c0luUHJlT3JkZXIoKTsKKyAgICAgICAgY2hpbGQtPnBhcmVudCgpLT5yZW1vdmVDaGls
ZChjaGlsZCwgaWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmdldChj
aGlsZC0+cmVuZGVyZXIoKSktPmdldChpZGVudGlmaWVyLT5pbXBsKCkpID09IGNoaWxkKTsKKyAg
ICAgICAgY291bnRlck1hcHMoKS5nZXQoY2hpbGQtPnJlbmRlcmVyKCkpLT5yZW1vdmUoaWRlbnRp
Zmllci5pbXBsKCkpOwogICAgICAgICBpZiAoIWNoaWxkLT5yZW5kZXJlcigpLT5kb2N1bWVudEJl
aW5nRGVzdHJveWVkKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hp
bGRyZW4gPSBjaGlsZC0+cmVuZGVyZXIoKS0+dmlydHVhbENoaWxkcmVuKCk7CiAgICAgICAgICAg
ICBpZiAoY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgY2hpbGRyZW4tPmludmFsaWRhdGVDb3Vu
dGVycyhjaGlsZC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4tPmludmFs
aWRhdGVDb3VudGVycyhjaGlsZC0+cmVuZGVyZXIoKSwgaWRlbnRpZmllcik7CiAgICAgICAgIH0K
ICAgICAgICAgZGVsZXRlIGNoaWxkOwogICAgIH0KQEAgLTMwNiw5ICsyODQsMTAgQEAgdm9pZCBS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKAogICAgIENvdW50ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChDb3VudGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENv
dW50ZXJOb2RlKiBub2RlID0gaXQtPnNlY29uZDsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2Rl
Q2hpbGRyZW4oaXQtPmZpcnN0LmdldCgpLCBub2RlKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGlk
ZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlQ2hp
bGRyZW4oaWRlbnRpZmllciwgbm9kZSk7CiAgICAgICAgIGlmIChDb3VudGVyTm9kZSogcGFyZW50
ID0gbm9kZS0+cGFyZW50KCkpCi0gICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUp
OworICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZGVudGlmaWVyKTsKICAg
ICAgICAgZGVsZXRlIG5vZGU7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5oCShyZXZpc2lvbiA1MDc4MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsMTEgQEAgY2xhc3MgUmVuZGVyQ291bnRlciA6
IHB1YmxpYyBSZW5kZXJUZXh0IAogcHVibGljOgogICAgIFJlbmRlckNvdW50ZXIoRG9jdW1lbnQq
LCBjb25zdCBDb3VudGVyQ29udGVudCYpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAg
Ly8gUmVtb3ZlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBDb3VudGVyTm9kZSBhc3NvY2lhdGVkIHdp
dGggdGhpcyByZW5kZXJlcgorICAgIC8vIGlmIGl0cyBpZGVudGlmaWVyIG1hdGNoZXMgdGhlIGFy
Z3VtZW50LgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjYXVzZSBhIGNvdW50ZXIgZGlzcGxheSB1
cGRhdGUgd2hlbiB0aGUgQ291bnRlck5vZGUKKyAgICAvLyB0cmVlIGZvciBpZGVudGlmaWVyIGNo
YW5nZXMuCisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmll
cik7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCop
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAJ
KHJldmlzaW9uIDUwNzgzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDI0ICsyNzEsMjkgQEAgc3RhdGljIFJlbmRl
ck9iamVjdCogZmluZEJlZm9yZUFmdGVyUGFyZQogICAgIHJldHVybiBiZWZvcmVBZnRlclBhcmVu
dDsKIH0KIAotc3RhdGljIHZvaWQgaW52YWxpZGF0ZUNvdW50ZXJzSW5Db250YWluZXIoUmVuZGVy
T2JqZWN0KiBjb250YWluZXIpCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQ291bnRlcnNJbkNvbnRh
aW5lcihSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlm
aWVyKQogewogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm47CiAgICAgY29udGFp
bmVyID0gZmluZEJlZm9yZUFmdGVyUGFyZW50KGNvbnRhaW5lcik7CiAgICAgaWYgKCFjb250YWlu
ZXIpCiAgICAgICAgIHJldHVybjsKKyAgICAvLyBTb21ldGltZXMgdGhlIGNvdW50ZXIgaXMgYXR0
YWNoZWQgZGlyZWN0bHkgb24gdGhlIGNvbnRhaW5lci4KKyAgICBpZiAoY29udGFpbmVyLT5pc0Nv
dW50ZXIoKSkgeworICAgICAgICB0b1JlbmRlckNvdW50ZXIoY29udGFpbmVyKS0+aW52YWxpZGF0
ZShpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBmb3IgKFJlbmRlck9i
amVjdCogY29udGVudCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjb250ZW50OyBjb250ZW50
ID0gY29udGVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY29udGVudC0+aXNDb3Vu
dGVyKCkpCi0gICAgICAgICAgICB0b1JlbmRlckNvdW50ZXIoY29udGVudCktPmludmFsaWRhdGUo
KTsKKyAgICAgICAgICAgIHRvUmVuZGVyQ291bnRlcihjb250ZW50KS0+aW52YWxpZGF0ZShpZGVu
dGlmaWVyKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnZhbGlk
YXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiBvd25lcikKK3ZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0OjppbnZhbGlkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghb3duZXItPmRvY3VtZW50QmVpbmdE
ZXN0cm95ZWQoKSk7Ci0gICAgaW52YWxpZGF0ZUNvdW50ZXJzSW5Db250YWluZXIoYmVmb3JlQWZ0
ZXJDb250YWluZXIob3duZXIsIEJFRk9SRSkpOwotICAgIGludmFsaWRhdGVDb3VudGVyc0luQ29u
dGFpbmVyKGJlZm9yZUFmdGVyQ29udGFpbmVyKG93bmVyLCBBRlRFUikpOworICAgIGludmFsaWRh
dGVDb3VudGVyc0luQ29udGFpbmVyKGJlZm9yZUFmdGVyQ29udGFpbmVyKG93bmVyLCBCRUZPUkUp
LCBpZGVudGlmaWVyKTsKKyAgICBpbnZhbGlkYXRlQ291bnRlcnNJbkNvbnRhaW5lcihiZWZvcmVB
ZnRlckNvbnRhaW5lcihvd25lciwgQUZURVIpLCBpZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW5k
ZXJPYmplY3RDaGlsZExpc3Q6OnVwZGF0ZUJlZm9yZUFmdGVyQ29udGVudChSZW5kZXJPYmplY3Qq
IG93bmVyLCBQc2V1ZG9JZCB0eXBlLCBSZW5kZXJPYmplY3QqIHN0eWxlZE9iamVjdCkKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5oCShyZXZpc2lvbiA1MDc4
MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
QXRvbWljU3RyaW5nOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogCiBjbGFzcyBSZW5kZXJPYmplY3RD
aGlsZExpc3QgewpAQCAtNTUsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmUsIGJvb2wgZnVsbEluc2VydCA9IHRydWUpOwogCiAgICAgdm9pZCB1cGRhdGVC
ZWZvcmVBZnRlckNvbnRlbnQoUmVuZGVyT2JqZWN0KiBvd25lciwgUHNldWRvSWQgdHlwZSwgUmVu
ZGVyT2JqZWN0KiBzdHlsZWRPYmplY3QgPSAwKTsKLSAgICB2b2lkIGludmFsaWRhdGVDb3VudGVy
cyhSZW5kZXJPYmplY3QqIG93bmVyKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb3VudGVycyhSZW5k
ZXJPYmplY3QqIG93bmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIpOwogCiBwcml2
YXRlOgogICAgIFJlbmRlck9iamVjdCogbV9maXJzdENoaWxkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>