<?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>52464</bug_id>
          
          <creation_ts>2011-01-14 11:58:11 -0800</creation_ts>
          <short_desc>Remove event forwarding logic from input[type=range], simplify event flow and thumb positioning logic.</short_desc>
          <delta_ts>2011-03-16 10:01:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>53634</dependson>
    
    <dependson>53691</dependson>
    
    <dependson>56059</dependson>
    
    <dependson>56469</dependson>
          <blocked>44907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>darin</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>334480</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-14 11:58:11 -0800</bug_when>
    <thetext>Remove event forwarding logic from input[type=range], simplify event flow and thumb positioning logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334496</commentid>
    <comment_count>1</comment_count>
      <attachid>78977</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-14 12:15:28 -0800</bug_when>
    <thetext>Created attachment 78977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334499</commentid>
    <comment_count>2</comment_count>
      <attachid>78977</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-14 12:20:22 -0800</bug_when>
    <thetext>Comment on attachment 78977
Patch

Do css-transformed sliders still work correctly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334510</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-14 12:28:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 78977 [details])
&gt; Do css-transformed sliders still work correctly?

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334522</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-14 12:38:48 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Remove event forwarding logic from input[type=range], simplify event flow and thumb positioning logic.

I&apos;ve been thinking if the next step here is just positioning the thumb with CSS and simply changing the corresponding coordinates in SliderThumbElement::setPosition. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335877</commentid>
    <comment_count>5</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 09:53:32 -0800</bug_when>
    <thetext>Created attachment 79287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335881</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 09:55:24 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=79287) [details]
&gt; Patch

I noticed there was an friend decl which is now unnecessary. Patch updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335905</commentid>
    <comment_count>7</comment_count>
      <attachid>79287</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-18 10:18:53 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:111
&gt; +    ASSERT(input);
&gt; +    ASSERT(input-&gt;renderer());
&gt; +    ASSERT(renderer());
&gt; +
&gt; +    if (!input-&gt;renderer() || !renderer())
&gt; +        return;

A couple minor thoughts on this. It’s a little strange to assert three things but only check two at runtime.

Checking for a 0 renderer often indicates that a function is suitable for calling only when layout and style calculation is up to date. That makes such functions dangerous. They can’t be called, for example, from JavaScript, which can’t guarantee layout and style is up to date. I think the event handlers that call this function may need to trigger layout and style calculation explicitly unless there’s some guarantee these have already occurred. Otherwise there can be bugs where a script changes the state of a document and the dispatches an event immediately when the renderer is in a bad state.

Also, this function later assumes both renderers are of class RenderBox, but it does not assert that nor check it at runtime outside an assertion. Is there a guarantee that we can’t get a different renderer class? If we did, renderBox() would return 0.

I think it would be better to put the two renderers into local variables and use those rather than repeatedly refetching them. In fact, each call to renderBox() redoes the runtime type check!

It’s possible none of this applies because the element is hidden from script inside a shadow tree. Not sure.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:122
&gt; +        position = offset.y() - renderBox()-&gt;height() / 2;

I think the rounding here rounds in the vertical down direction and we normally round in the vertical up direction.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:126
&gt; +        position = offset.x() - renderBox()-&gt;width() / 2;

I think the rounding here rounds to the right and we normally round to the left.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:140
&gt; +    // FIXME: This is no longer being set from renderer. Consider updating the
&gt; +    // method name.

I’d do this comment on a single line.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:151
&gt; +    if (Frame* frame = document()-&gt;frame()) {
&gt; +        frame-&gt;eventHandler()-&gt;setCapturingMouseEventsNode(this);
&gt; +        m_inDragMode = true;
&gt; +    }

What if some code moves the thumb element between documents while it’s being dragged? Will everything turn out OK?

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:163
&gt; +    if (renderer())
&gt; +        renderer()-&gt;setNeedsLayout(true);

Why? This code needs a why comment. What change causes the need for a layout? The m_inDragMode change? If so, it’s surprising that there is no need to do this in startDragging.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:185
&gt; +        // FIXME: Ideally, we should setDefaultHandled here, but we need to fall
&gt; +        // through to keep MediaInputControlElement bits working. Add it once
&gt; +        // MediaElement is refactored to use shadow DOM.

But only if we are dragging. I don’t think we’d need that if the element got a mouse up that did not trigger dragging. Or maybe there is no such thing.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:189
&gt; +        dragTo(mouseEvent-&gt;absoluteLocation());
&gt; +        event-&gt;setDefaultHandled();

It seems wrong to set default handled on the mouse move event when we are just getting events about the mouse passing over the element and not during dragging.

Separately, I’m also not sure that we ever want to set default handled for mouse move, since a move doesn’t really need to be “consumed” the way other events are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335933</commentid>
    <comment_count>8</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 10:51:03 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

Thanks for the review. I think I need to look into questions your raise.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:111
&gt;&gt; +        return;
&gt; 
&gt; A couple minor thoughts on this. It’s a little strange to assert three things but only check two at runtime.
&gt; 
&gt; Checking for a 0 renderer often indicates that a function is suitable for calling only when layout and style calculation is up to date. That makes such functions dangerous. They can’t be called, for example, from JavaScript, which can’t guarantee layout and style is up to date. I think the event handlers that call this function may need to trigger layout and style calculation explicitly unless there’s some guarantee these have already occurred. Otherwise there can be bugs where a script changes the state of a document and the dispatches an event immediately when the renderer is in a bad state.
&gt; 
&gt; Also, this function later assumes both renderers are of class RenderBox, but it does not assert that nor check it at runtime outside an assertion. Is there a guarantee that we can’t get a different renderer class? If we did, renderBox() would return 0.
&gt; 
&gt; I think it would be better to put the two renderers into local variables and use those rather than repeatedly refetching them. In fact, each call to renderBox() redoes the runtime type check!
&gt; 
&gt; It’s possible none of this applies because the element is hidden from script inside a shadow tree. Not sure.

Thanks for looking closely at this. You are right, I need to study this more closely.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:122
&gt;&gt; +        position = offset.y() - renderBox()-&gt;height() / 2;
&gt; 
&gt; I think the rounding here rounds in the vertical down direction and we normally round in the vertical up direction.

I moved these as-is from RenderSlider::positionForOffset. I&apos;ll look to see if this matters.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:140
&gt;&gt; +    // method name.
&gt; 
&gt; I’d do this comment on a single line.

Will fix.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:151
&gt;&gt; +    }
&gt; 
&gt; What if some code moves the thumb element between documents while it’s being dragged? Will everything turn out OK?

I will look into this.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:163
&gt;&gt; +        renderer()-&gt;setNeedsLayout(true);
&gt; 
&gt; Why? This code needs a why comment. What change causes the need for a layout? The m_inDragMode change? If so, it’s surprising that there is no need to do this in startDragging.

Will fix.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:185
&gt;&gt; +        // MediaElement is refactored to use shadow DOM.
&gt; 
&gt; But only if we are dragging. I don’t think we’d need that if the element got a mouse up that did not trigger dragging. Or maybe there is no such thing.

Since we&apos;re using EventHandler::setCapturingMouseEventsNode machinery here, things are tricky, but I will look into this.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:189
&gt;&gt; +        event-&gt;setDefaultHandled();
&gt; 
&gt; It seems wrong to set default handled on the mouse move event when we are just getting events about the mouse passing over the element and not during dragging.
&gt; 
&gt; Separately, I’m also not sure that we ever want to set default handled for mouse move, since a move doesn’t really need to be “consumed” the way other events are.

Oh, that&apos;s right. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335976</commentid>
    <comment_count>9</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 12:01:27 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

&gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:111

&gt;&gt; 
&gt;&gt; A couple minor thoughts on this. It’s a little strange to assert three things but only check two at runtime.
&gt;&gt; 
&gt;&gt; Checking for a 0 renderer often indicates that a function is suitable for calling only when layout and style calculation is up to date. That makes such functions dangerous. They can’t be called, for example, from JavaScript, which can’t guarantee layout and style is up to date. I think the event handlers that call this function may need to trigger layout and style calculation explicitly unless there’s some guarantee these have already occurred. Otherwise there can be bugs where a script changes the state of a document and the dispatches an event immediately when the renderer is in a bad state.
&gt;&gt; 
&gt;&gt; Also, this function later assumes both renderers are of class RenderBox, but it does not assert that nor check it at runtime outside an assertion. Is there a guarantee that we can’t get a different renderer class? If we did, renderBox() would return 0.
&gt;&gt; 
&gt;&gt; I think it would be better to put the two renderers into local variables and use those rather than repeatedly refetching them. In fact, each call to renderBox() redoes the runtime type check!
&gt;&gt; 
&gt;&gt; It’s possible none of this applies because the element is hidden from script inside a shadow tree. Not sure.
&gt; 
&gt; Thanks for looking closely at this. You are right, I need to study this more closely.

Ok, I clearly over-ASSERT-ed here :)

* input should never be 0. That assert stays.
* input-&gt;renderer() can indeed be 0 and it&apos;s a valid situation (for example, display:none set during mousedown event).
* renderer() is same as above, which means my early return is good. Just need to get rid of the two asserts for renderers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335978</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-18 12:02:18 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; * input-&gt;renderer() can indeed be 0 and it&apos;s a valid situation (for example, display:none set during mousedown event).
&gt; * renderer() is same as above, which means my early return is good. Just need to get rid of the two asserts for renderers.

Can those also be non-RenderBox?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336053</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 13:25:17 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; * input-&gt;renderer() can indeed be 0 and it&apos;s a valid situation (for example, display:none set during mousedown event).
&gt; &gt; * renderer() is same as above, which means my early return is good. Just need to get rid of the two asserts for renderers.
&gt; 
&gt; Can those also be non-RenderBox?

Nope. All *Type::createRenderer() return a RenderBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336185</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-18 16:15:08 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; All *Type::createRenderer() return a RenderBox.

Not InputType::createRenderer. That one calls through to RenderObject::createObject and respects the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336204</commentid>
    <comment_count>13</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-18 16:42:38 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

&gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:163
&gt;&gt;&gt; +    if (renderer())
&gt;&gt;&gt; +        renderer()-&gt;setNeedsLayout(true);
&gt;&gt; 
&gt;&gt; Why? This code needs a why comment. What change causes the need for a layout? The m_inDragMode change? If so, it’s surprising that there is no need to do this in startDragging.
&gt; 
&gt; Will fix.

Dirtying layout bit here is not necessary, ContainerNode::stateChanged handles repainting of the thumb state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336614</commentid>
    <comment_count>14</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-19 10:28:25 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

&gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:151
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; What if some code moves the thumb element between documents while it’s being dragged? Will everything turn out OK?
&gt; 
&gt; I will look into this.

You were right. The setCapturingMouseEventsNode should be cleared when node is adopted. I&apos;ll file a bug on this and fix separately, since pre-patch code has the same problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336665</commentid>
    <comment_count>15</comment_count>
      <attachid>79287</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-19 11:27:25 -0800</bug_when>
    <thetext>Comment on attachment 79287
Patch

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

I think I am ready to land with tweaks mentioned.

&gt;&gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:111
&gt;&gt;&gt;&gt; +        return;
&gt;&gt;&gt; 
&gt;&gt;&gt; A couple minor thoughts on this. It’s a little strange to assert three things but only check two at runtime.
&gt;&gt;&gt; 
&gt;&gt;&gt; Checking for a 0 renderer often indicates that a function is suitable for calling only when layout and style calculation is up to date. That makes such functions dangerous. They can’t be called, for example, from JavaScript, which can’t guarantee layout and style is up to date. I think the event handlers that call this function may need to trigger layout and style calculation explicitly unless there’s some guarantee these have already occurred. Otherwise there can be bugs where a script changes the state of a document and the dispatches an event immediately when the renderer is in a bad state.
&gt;&gt;&gt; 
&gt;&gt;&gt; Also, this function later assumes both renderers are of class RenderBox, but it does not assert that nor check it at runtime outside an assertion. Is there a guarantee that we can’t get a different renderer class? If we did, renderBox() would return 0.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think it would be better to put the two renderers into local variables and use those rather than repeatedly refetching them. In fact, each call to renderBox() redoes the runtime type check!
&gt;&gt;&gt; 
&gt;&gt;&gt; It’s possible none of this applies because the element is hidden from script inside a shadow tree. Not sure.
&gt;&gt; 
&gt;&gt; Thanks for looking closely at this. You are right, I need to study this more closely.
&gt; 
&gt; 

I went through all the paths and made sure the renderBox() or input-&gt;renderBox() can never be 0. Thanks for pointing out potential issues!

&gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:185
&gt;&gt;&gt; +        // MediaElement is refactored to use shadow DOM.
&gt;&gt; 
&gt;&gt; But only if we are dragging. I don’t think we’d need that if the element got a mouse up that did not trigger dragging. Or maybe there is no such thing.
&gt; 
&gt; Since we&apos;re using EventHandler::setCapturingMouseEventsNode machinery here, things are tricky, but I will look into this.

I changed my mind. I don&apos;t think we should setDefaultHandled at all in these. I&apos;ll change the patch accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336691</commentid>
    <comment_count>16</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-19 12:17:29 -0800</bug_when>
    <thetext>Committed r76147: &lt;http://trac.webkit.org/changeset/76147&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342119</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-29 11:25:52 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 79287 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79287&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:163
&gt; &gt;&gt;&gt; +    if (renderer())
&gt; &gt;&gt;&gt; +        renderer()-&gt;setNeedsLayout(true);
&gt; &gt;&gt; 
&gt; &gt;&gt; Why? This code needs a why comment. What change causes the need for a layout? The m_inDragMode change? If so, it’s surprising that there is no need to do this in startDragging.
&gt; &gt; 
&gt; &gt; Will fix.
&gt; 
&gt; Dirtying layout bit here is not necessary, ContainerNode::stateChanged handles repainting of the thumb state.

Turns out I was wrong. This only happens when the mouse is on the thumb. If you dragged cursor away from the track, you&apos;ll need this set to get the thumb back into the inactive state.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78977</attachid>
            <date>2011-01-14 12:15:28 -0800</date>
            <delta_ts>2011-01-18 09:53:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52464-20110114121526.patch</filename>
            <type>text/plain</type>
            <size>19809</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNmJlYmUyODMwMGE2ZGYxYzhjYTQwNzhjMTgwOTJhNzUyZTBjMzQzLi45
NDkzN2EyZThlZmM3ZjVkODVhYTQ5ZDI0NTY3ZDY3Y2FlZGYyNGRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTAgQEAKKzIwMTEtMDEtMTQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmUgZXZlbnQgZm9yd2FyZGluZyBsb2dpYyBmcm9tIGlucHV0W3R5cGU9cmFuZ2VdLCBz
aW1wbGlmeSBldmVudCBmbG93IGFuZCB0aHVtYiBwb3NpdGlvbmluZyBsb2dpYy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNDY0CisKKyAgICAgICAg
VGhpcyBjaGFuZ2UgaGFzIHR3byBwYXJ0czoKKworICAgICAgICAxKSBVdGlsaXplIHNoYWRvdyBE
T00gZXZlbnQgcmV0YXJnZXRpbmcgdG8gZ2V0IHJpZCBvZiBmb3J3YXJkaW5nIGV2ZW50cworICAg
ICAgICAgICB2aWEgcmVuZGVyIHRyZWU7CisgICAgICAgIDIpIE1vdmUgdGh1bWIgcG9zaXRpb25p
bmcgbG9naWMgZnJvbSBSZW5kZXJTbGlkZXIgdG8gU2xpZGVyVGh1bWJFbGVtZW50LgorCisgICAg
ICAgIFRoZXNlIHR3byBhcmUgaGlnaGx5IGNvLWRlcGVuZGVudC4gSXQgbG9va2VkIHVnbHkgd2hl
biBJIHRyaWVkIHRvCisgICAgICAgIHNlcGFyYXRlIHRoZW0uCisKKyAgICAgICAgTm8gY2hhbmdl
IGluIGJlaGF2aW9yLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBBZGRlZCBpbnZvY2F0aW9uIG9mCisgICAgICAgICAg
ICBJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50LgorICAgICAgICAqIGh0bWwvSW5wdXRU
eXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZl
bnQpOiBBZGRlZCBlbXB0eSBkZWNsLgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6IEFkZGVk
IGRlZi4KKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURvd25FdmVudCk6IEFkZGVkIHRvIGhhbmRs
ZSB0aGUgY2FzZQorICAgICAgICAgICAgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIHRyYWNr
IG9mIHRoZSBzbGlkZXIuIEFsc28gcmVtb3ZlZCB0aGUKKyAgICAgICAgICAgIGZvcndhcmRFdmVu
dCBtZXRob2QuCisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5oOiBBZGRlZC9yZW1vdmVk
IGRlZnMuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6ZHJhZ0Zyb20pOiBBZGRlZCBhIGhl
bHBlciBtZXRob2QgdG8gc3RhcnQKKyAgICAgICAgICAgIGRyYWdnaW5nIGZyb20gYW55IHBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkcmFnVG8pOiBBZGRl
ZCBhIGhlbHBlciBtZXRob2QgdG8gZHJhZyB0bworICAgICAgICAgICAgc3BlY2lmaWVkIHBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbik6
IENvbGxhcHNlZCBtb3N0IG9mIHRoZSBwb3NpdGlvbmluZworICAgICAgICAgICAgbG9naWMgaW4g
UmVuZGVyU2xpZGVyIGludG8gdGhpcyBtZXRob2QsIHdoaWNoIGlzIG5vdyBhIHNpbXBsZSBjYWxj
dWxhdGlvbgorICAgICAgICAgICAgYW5kIGFkanVzdGluZyBvZiB0aHVtYiBwb3NpdGlvbiBiYXNl
ZCBvbiBzdXBwbGllZCBjb29yZGluYXRlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1i
RWxlbWVudDo6c3RhcnREcmFnZ2luZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNs
aWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IFJlbW92ZWQgbW9zdCBvZiB0
aGUKKyAgICAgICAgICAgIG9sZCBwb3NpdGlvbi1zbmlmZmluZyBsb2dpYyBhbmQgcmVwbGFjZWQg
d2l0aCBzaW1wbGUgY2FsbHMgdG8gc3RhcnQsCisgICAgICAgICAgICBzdG9wLCBhbmQgZHJhZyB0
aGUgdGh1bWIuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6IEFk
ZGVkIGRlZnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6IFJlbW92ZWQg
YSBidW5jaCBvZiBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICBuZWNlc3Nhcnku
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOiBSZW1vdmVkIGRlZnMuCisKIDIw
MTEtMDEtMTQgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAppbmRleCA3ZDJhM2M1NDI5Mjc0NDRlMDI4ZTBjOTIzMTJiNGViMTg4ZmNkMjhl
Li5kYTJkYjg3MzZiMzYyMDdkZjM5YzI1MjE5MzVmNDc2NjgwODFiZTA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEwMzEsNiArMTAzMSwxMiBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBl
dnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgbV9p
bnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dnQpKTsKKyAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBtX2lucHV0VHlwZS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiAKICAg
ICBpZiAoIWNhbGxCYXNlQ2xhc3NFYXJseSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IDcyOWYyMDRlYjFhMWVkMGJmYmI1NzU2YzNhZjRk
MWYwYzE4MzNlOWEuLjJmOGQ0MTRkNTJmMTJkZWJlOTk1YzQzNTJiODIwMjYwYjFiYzNiMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTMwNSw2ICszMDUsMTAgQEAgdm9pZCBJbnB1
dFR5cGU6OmhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopCiB7CiB9CiAKK3ZvaWQgSW5wdXRU
eXBlOjpoYW5kbGVNb3VzZURvd25FdmVudChNb3VzZUV2ZW50KikKK3sKK30KKwogdm9pZCBJbnB1
dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmgKaW5kZXggMGQxZjZiODlmYzc2MWVkOWQ3NTcxN2UwMDYzZWIzNGMxODhjMTEyMi4u
ZWE0NTQxZjdmODZjMTg4NDEwMWNhZDIwY2YwNDdiM2YzN2QwZmMzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCkBAIC0xNTMsNiArMTUzLDcgQEAgcHVibGljOgogICAgIC8vIEV2ZW50IGhhbmRs
ZXJzCiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQqKTsKICAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tI
YW5kbGluZ1N0YXRlJik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQo
RXZlbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKaW5kZXggM2ZjYjY0
MTVkMzBiNDg3YmMzZmVjZmU0MjFjMzZjMzA3MzVhODMxNi4uYTQ5MmNlNmVmNGE5Yzk2OTVjNDkz
OGQ1ODY2MGVjMTMzZmI0MzU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5n
ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5j
cHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKICNpbmNs
dWRlICJTdGVwUmFuZ2UuaCIKQEAgLTE0MSw2ICsxNDMsMTUgQEAgZG91YmxlIFJhbmdlSW5wdXRU
eXBlOjpzdGVwU2NhbGVGYWN0b3IoKSBjb25zdAogICAgIHJldHVybiByYW5nZVN0ZXBTY2FsZUZh
Y3RvcjsKIH0KIAordm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9u
IHx8IGV2ZW50LT50YXJnZXQoKSAhPSBlbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChTbGlkZXJUaHVtYkVsZW1lbnQqIHRodW1iID0gdG9TbGlkZXJUaHVtYkVsZW1lbnQoZWxl
bWVudCgpLT5zaGFkb3dSb290KCkpKQorICAgICAgICB0aHVtYi0+ZHJhZ0Zyb20oZXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSk7Cit9CisKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9
IGV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CkBAIC0xODEsMTIgKzE5Miw2IEBAIHZvaWQgUmFuZ2VJ
bnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBSYW5nZUlucHV0VHlwZTo6Zm9y
d2FyZEV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigp
ICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZl
bnQtPmlzV2hlZWxFdmVudCgpKSkKLSAgICAgICAgdG9SZW5kZXJTbGlkZXIoZWxlbWVudCgpLT5y
ZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2ZW50KTsKLX0KLQogdm9pZCBSYW5nZUlucHV0VHlw
ZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7CiAgICAgZWxlbWVudCgpLT5zZXRTaGFkb3dSb290
KFNsaWRlclRodW1iRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCmluZGV4IDU3ZWIyOTk5Y2RhNTllNWQyNDU3MGNj
YzQ4MGMwZjY3ZmZlZDkxMTYuLjE1ZDIyNGRkYzc3ZDljYzk2ZGQ3MTQ2OTFiZDNjODU3Yzc5Zjcw
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKQEAgLTU1LDggKzU1LDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFzZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcFNj
YWxlRmFjdG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZU1vdXNlRG93bkV2ZW50
KE1vdXNlRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJv
YXJkRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOwog
ICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGUoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1l
bnQuY3BwCmluZGV4IDc5YTAwOWI3ZGZmYWNiZDBlYWFmNzJiMjUwNDkyM2RlYTY2MGRjYmIuLjUw
N2I3YjdhNjQzMDc5MjQwMThlYjhjNGI0M2QwZjU2YzhmNjFhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApAQCAtMzUsOSArMzUs
MTUgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODAsNiArODYsODMgQEAgUmVuZGVyT2JqZWN0KiBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUKICAgICByZXR1
cm4gbmV3IChhcmVuYSkgUmVuZGVyU2xpZGVyVGh1bWIodGhpcyk7CiB9CiAKK3ZvaWQgU2xpZGVy
VGh1bWJFbGVtZW50OjpkcmFnRnJvbShjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc2V0
UG9zaXRpb24ocG9pbnQpOworICAgIHN0YXJ0RHJhZ2dpbmcoKTsKK30KKwordm9pZCBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmRyYWdUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFt
X2luRHJhZ01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFBvc2l0aW9uKHBvaW50KTsK
K30KKwordm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OnNldFBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiBwb2ludCkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihzaGFkb3dIb3N0KCkpOworICAgIEFTU0VSVChpbnB1dCk7CisgICAg
QVNTRVJUKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQocmVuZGVyZXIoKSk7CisKKyAg
ICBpZiAoIWlucHV0LT5yZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBJbnRQb2ludCBvZmZzZXQgPSByb3VuZGVkSW50UG9pbnQoaW5wdXQtPnJlbmRlcmVy
KCktPmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRydWUpKTsKKyAgICBSZW5kZXJTdHls
ZSogc2xpZGVyU3R5bGUgPSBpbnB1dC0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBib29sIGlz
VmVydGljYWwgPSBzbGlkZXJTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFy
dCB8fCBzbGlkZXJTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydDsK
KworICAgIGludCB0cmFja1NpemU7CisgICAgaW50IHBvc2l0aW9uOworICAgIGludCBjdXJyZW50
UG9zaXRpb247CisgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgdHJhY2tTaXplID0gaW5w
dXQtPnJlbmRlckJveCgpLT5jb250ZW50SGVpZ2h0KCkgLSByZW5kZXJCb3goKS0+aGVpZ2h0KCk7
CisgICAgICAgIHBvc2l0aW9uID0gb2Zmc2V0LnkoKSAtIHJlbmRlckJveCgpLT5oZWlnaHQoKSAv
IDI7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHJlbmRlckJveCgpLT55KCkgLSBpbnB1dC0+
cmVuZGVyQm94KCktPmNvbnRlbnRCb3hSZWN0KCkueSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHRyYWNrU2l6ZSA9IGlucHV0LT5yZW5kZXJCb3goKS0+Y29udGVudFdpZHRoKCkgLSByZW5kZXJC
b3goKS0+d2lkdGgoKTsKKyAgICAgICAgcG9zaXRpb24gPSBvZmZzZXQueCgpIC0gcmVuZGVyQm94
KCktPndpZHRoKCkgLyAyOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSByZW5kZXJCb3goKS0+
eCgpIC0gaW5wdXQtPnJlbmRlckJveCgpLT5jb250ZW50Qm94UmVjdCgpLngoKTsKKyAgICB9Cisg
ICAgcG9zaXRpb24gPSBtYXgoMCwgbWluKHBvc2l0aW9uLCB0cmFja1NpemUpKTsKKyAgICBpZiAo
cG9zaXRpb24gPT0gY3VycmVudFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBTdGVw
UmFuZ2UgcmFuZ2UoaW5wdXQpOworICAgIGRvdWJsZSBmcmFjdGlvbiA9IHN0YXRpY19jYXN0PGRv
dWJsZT4ocG9zaXRpb24pIC8gdHJhY2tTaXplOworICAgIGlmIChpc1ZlcnRpY2FsKQorICAgICAg
ICBmcmFjdGlvbiA9IDEgLSBmcmFjdGlvbjsKKyAgICBkb3VibGUgdmFsdWUgPSByYW5nZS5jbGFt
cFZhbHVlKHJhbmdlLnZhbHVlRnJvbVByb3BvcnRpb24oZnJhY3Rpb24pKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG5vIGxvbmdlciBiZWluZyBzZXQgZnJvbSByZW5kZXJlci4gQ29uc2lkZXIg
dXBkYXRpbmcgdGhlCisgICAgLy8gbWV0aG9kIG5hbWUuCisgICAgaW5wdXQtPnNldFZhbHVlRnJv
bVJlbmRlcmVyKHNlcmlhbGl6ZUZvck51bWJlclR5cGUodmFsdWUpKTsKKyAgICByZW5kZXJlcigp
LT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENo
YW5nZUV2ZW50KCk7Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzdGFydERyYWdnaW5n
KCkKK3sKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAg
ICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0
aGlzKTsKKyAgICAgICAgbV9pbkRyYWdNb2RlID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcoKQoreworICAgIGlmICghbV9pbkRyYWdNb2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3Vz
ZUV2ZW50c05vZGUoMCk7CisgICAgbV9pbkRyYWdNb2RlID0gZmFsc2U7CisgICAgaWYgKHJlbmRl
cmVyKCkpCisgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOworfQorCiB2
b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAgICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKQEAgLTkyLDQ1ICsxNzUsMTkg
QEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsK
IAogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlz
TGVmdEJ1dHRvbikgewotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiByZW5kZXJl
cigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVy
KHJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAgIGlmIChzbGlkZXIpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc2xpZGVyLT5tb3VzZUV2ZW50SXNJblRodW1iKG1vdXNlRXZlbnQpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdGVkIHRoZSB0aHVtYiwgd2Ugd2FudCB0
aGUgY3Vyc29yIHRvIGFsd2F5cyBzdGF5IGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBz
YW1lIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB0aHVtYi4KLSAgICAgICAgICAgICAgICAgICAg
bV9vZmZzZXRUb1RodW1iID0gc2xpZGVyLT5tb3VzZUV2ZW50T2Zmc2V0VG9UaHVtYihtb3VzZUV2
ZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBhcmUgb3V0c2lkZSB0aGUgdGh1bWIsIG1vdmUgdGhlIHRodW1iIHRvIHRoZSBwb2ludCB3ZXJl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNsaWNrZWQuIFdlJ2xsIGJlIGV4YWN0bHkgYXQg
dGhlIGNlbnRlciBvZiB0aGUgdGh1bWIuCi0gICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9U
aHVtYi5zZXRYKDApOwotICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRvVGh1bWIuc2V0WSgw
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtX2luRHJhZ01vZGUgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoc2hhZG93SG9zdCgpKTsKLSAgICAgICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgc3RhcnREcmFnZ2luZygpOworICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0g
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXNMZWZ0
QnV0dG9uKSB7Ci0gICAgICAgIGlmIChtX2luRHJhZ01vZGUpIHsKLSAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOyAgICAgIAot
ICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gZmFsc2U7Ci0gICAgICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAg
ICBzdG9wRHJhZ2dpbmcoKTsKKyAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBz
ZXREZWZhdWx0SGFuZGxlZCBoZXJlLCBidXQgd2UgbmVlZCB0byBmYWxsCisgICAgICAgIC8vIHRo
cm91Z2ggdG8ga2VlcCBNZWRpYUlucHV0Q29udHJvbEVsZW1lbnQgYml0cyB3b3JraW5nLiBBZGQg
aXQgb25jZQorICAgICAgICAvLyBNZWRpYUVsZW1lbnQgaXMgcmVmYWN0b3JlZCB0byB1c2Ugc2hh
ZG93IERPTS4KKyAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewotICAgICAgICBpZiAobV9pbkRyYWdNb2RlICYm
IHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIFJlbmRl
clNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKS0+cGFyZW50KCkpOwot
ICAgICAgICAgICAgaWYgKHNsaWRlcikgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3Vy
UG9pbnQgPSBzbGlkZXItPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0
aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBldmVudE9mZnNl
dChjdXJQb2ludC54KCkgKyBtX29mZnNldFRvVGh1bWIueCgpLCBjdXJQb2ludC55KCkgKyBtX29m
ZnNldFRvVGh1bWIueSgpKTsKLSAgICAgICAgICAgICAgICBzbGlkZXItPnNldFZhbHVlRm9yUG9z
aXRpb24oc2xpZGVyLT5wb3NpdGlvbkZvck9mZnNldChldmVudE9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBkcmFnVG8obW91c2VFdmVudC0+
YWJzb2x1dGVMb2NhdGlvbigpKTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TbGlkZXJUaHVtYkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5oCmluZGV4IDcyMTkxODYyNDNmZDhkYmU5NDczMmY4NDQ0ZTJlODEwMmJh
NGFhNjIuLjc1NjQ2MzNlMzc0YzVmMTM3NDBhZWEzYzJlNWRmNTIxZjNjYTZiNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCkBAIC01MCw2
ICs1MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW5EcmFnTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5EcmFnTW9kZTsgfQogCisgICAgdm9pZCBkcmFnRnJvbShjb25zdCBJbnRQb2ludCYpOwor
ICAgIHZvaWQgZHJhZ1RvKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAg
dmlydHVhbCBBdG9taWNTdHJpbmcgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKQEAgLTU3LDYgKzU5
LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTbGlkZXJUaHVtYkVsZW1lbnQoRG9jdW1lbnQq
KTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
LCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgc3RhcnREcmFnZ2luZygpOworICAgIHZvaWQgc3Rv
cERyYWdnaW5nKCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogCiAg
ICAgRmxvYXRQb2ludCBtX29mZnNldFRvVGh1bWI7CiAgICAgYm9vbCBtX2luRHJhZ01vZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCmluZGV4IGIwZGMwZDlmOThl
YjM2M2UwMzc5NjFhZWQ2OGU5OGY3NmU0YTY4ZDYuLjQ5ZGEzOTY3MjMxYzAxNDFmMGEzMjZmZWQw
ZGE3ODc4MWZmNDNmNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCkBAIC0xODEsMTE2ICsxODEsNiBAQCBTbGlkZXJUaHVtYkVsZW1lbnQqIFJlbmRlclNsaWRl
cjo6c2xpZGVyVGh1bWJFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gdG9TbGlkZXJUaHVtYkVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPnNoYWRvd1Jvb3QoKSk7CiB9CiAK
LWJvb2wgUmVuZGVyU2xpZGVyOjptb3VzZUV2ZW50SXNJblRodW1iKE1vdXNlRXZlbnQqIGV2dCkK
LXsKLSAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRodW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxl
bWVudCgpOwotICAgIGlmICghdGh1bWJFbGVtZW50IHx8ICF0aHVtYkVsZW1lbnQtPnJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBpZiAo
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyUGFydCB8fCBzdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KSB7Ci0gICAgICAgIE1lZGlhQ29udHJv
bElucHV0RWxlbWVudCogc2xpZGVyVGh1bWIgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQqPih0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCktPm5vZGUoKSk7Ci0gICAgICAgIHJl
dHVybiBzbGlkZXJUaHVtYi0+aGl0VGVzdChldnQtPmFic29sdXRlTG9jYXRpb24oKSk7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSB0aHVtYkVsZW1lbnQtPnJl
bmRlckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNl
LCB0cnVlKTsKLSAgICBJbnRSZWN0IHRodW1iQm91bmRzID0gdGh1bWJFbGVtZW50LT5yZW5kZXJC
b3goKS0+Ym9yZGVyQm94UmVjdCgpOwotICAgIHJldHVybiB0aHVtYkJvdW5kcy5jb250YWlucyhy
b3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCkpOwotfQotCi1GbG9hdFBvaW50IFJlbmRlclNsaWRl
cjo6bW91c2VFdmVudE9mZnNldFRvVGh1bWIoTW91c2VFdmVudCogZXZ0KQotewotICAgIFNsaWRl
clRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1bWJFbGVtZW50KCk7Ci0gICAg
QVNTRVJUKHRodW1iRWxlbWVudCAmJiB0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPmFic29sdXRl
VG9Mb2NhbChldnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOwotICAgIEludFJl
Y3QgdGh1bWJCb3VuZHMgPSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0
KCk7Ci0gICAgRmxvYXRQb2ludCBvZmZzZXQ7Ci0gICAgb2Zmc2V0LnNldFgodGh1bWJCb3VuZHMu
eCgpICsgdGh1bWJCb3VuZHMud2lkdGgoKSAvIDIgLSBsb2NhbFBvaW50LngoKSk7Ci0gICAgb2Zm
c2V0LnNldFkodGh1bWJCb3VuZHMueSgpICsgdGh1bWJCb3VuZHMuaGVpZ2h0KCkgLyAyIC0gbG9j
YWxQb2ludC55KCkpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgUmVuZGVyU2xpZGVy
OjpzZXRWYWx1ZUZvclBvc2l0aW9uKGludCBwb3NpdGlvbikKLXsKLSAgICBTbGlkZXJUaHVtYkVs
ZW1lbnQqIHRodW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwotICAgIGlmICghdGh1
bWJFbGVtZW50IHx8ICF0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obm9kZSgpKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHZhbHVlIGJhc2Vk
IG9uIHRoZSBwb3NpdGlvbiwgYW5kIHNlbmQgaXQgdG8gdGhlIGVsZW1lbnQuCi0gICAgU3RlcFJh
bmdlIHJhbmdlKGVsZW1lbnQpOwotICAgIGRvdWJsZSBmcmFjdGlvbiA9IHN0YXRpY19jYXN0PGRv
dWJsZT4ocG9zaXRpb24pIC8gdHJhY2tTaXplKCk7Ci0gICAgaWYgKHN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgZnJhY3Rpb24gPSAxIC0gZnJhY3Rpb247Ci0g
ICAgZG91YmxlIHZhbHVlID0gcmFuZ2UuY2xhbXBWYWx1ZShyYW5nZS52YWx1ZUZyb21Qcm9wb3J0
aW9uKGZyYWN0aW9uKSk7Ci0gICAgZWxlbWVudC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoc2VyaWFs
aXplRm9yTnVtYmVyVHlwZSh2YWx1ZSkpOwotCi0gICAgLy8gQWxzbyB1cGRhdGUgdGhlIHBvc2l0
aW9uIGlmIGFwcHJvcHJpYXRlLgotICAgIGlmIChwb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24o
KSkgewotICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKLQotICAgICAgICAvLyBGSVhNRTog
SXQgc2VlbXMgbGlrZSB0aGlzIGNvdWxkIHNlbmQgZXh0cmEgY2hhbmdlIGV2ZW50cyBpZiB0aGUg
c2FtZSB2YWx1ZSBpcyBzZXQKLSAgICAgICAgLy8gbXVsdGlwbGUgdGltZXMgd2l0aCBubyBsYXlv
dXQgaW4gYmV0d2Vlbi4KLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjpwb3NpdGlvbkZvck9mZnNl
dChjb25zdCBJbnRQb2ludCYgcCkKLXsKLSAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRodW1iRWxl
bWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwotICAgIGlmICghdGh1bWJFbGVtZW50IHx8ICF0
aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHBv
c2l0aW9uOwotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQ
YXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0g
ICAgICAgIHBvc2l0aW9uID0gcC55KCkgLSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT5oZWln
aHQoKSAvIDI7Ci0gICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHAueCgpIC0gdGh1bWJFbGVt
ZW50LT5yZW5kZXJCb3goKS0+d2lkdGgoKSAvIDI7Ci0gICAgCi0gICAgcmV0dXJuIG1heCgwLCBt
aW4ocG9zaXRpb24sIHRyYWNrU2l6ZSgpKSk7Ci19Ci0KLWludCBSZW5kZXJTbGlkZXI6OmN1cnJl
bnRQb3NpdGlvbigpCi17Ci0gICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBz
bGlkZXJUaHVtYkVsZW1lbnQoKTsKLSAgICBBU1NFUlQodGh1bWJFbGVtZW50ICYmIHRodW1iRWxl
bWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNs
aWRlclZlcnRpY2FsUGFydCB8fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVT
bGlkZXJQYXJ0KQotICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3godGh1bWJFbGVtZW50LT5yZW5k
ZXJlcigpKS0+eSgpIC0gY29udGVudEJveFJlY3QoKS55KCk7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
Qm94KHRodW1iRWxlbWVudC0+cmVuZGVyZXIoKSktPngoKSAtIGNvbnRlbnRCb3hSZWN0KCkueCgp
OwotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjp0cmFja1NpemUoKQotewotICAgIFNsaWRlclRodW1i
RWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1bWJFbGVtZW50KCk7Ci0gICAgQVNTRVJU
KHRodW1iRWxlbWVudCAmJiB0aHVtYkVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgaWYgKHN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkKLSAgICAgICAgcmV0dXJuIGNvbnRl
bnRIZWlnaHQoKSAtIHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPmhlaWdodCgpOwotICAgIHJl
dHVybiBjb250ZW50V2lkdGgoKSAtIHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPndpZHRoKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyU2xpZGVyOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQotewot
ICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1bWJFbGVtZW50
KCk7Ci0gICAgaWYgKCF0aHVtYkVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChl
dmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgICAgICBpZiAoIW1vdXNlRXZlbnRJc0luVGh1bWIo
bW91c2VFdmVudCkpIHsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBldmVudE9mZnNldCA9IHJv
dW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlv
bigpLCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHNldFZhbHVlRm9yUG9zaXRpb24o
cG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRPZmZzZXQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHRodW1iRWxlbWVudC0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci19Ci0KIGJvb2wgUmVuZGVyU2xpZGVyOjppbkRyYWdNb2RlKCkgY29uc3QKIHsKICAgICBTbGlk
ZXJUaHVtYkVsZW1lbnQqIHRodW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCmluZGV4IDVmYjU5MjE5MTAwMGIzYzNk
NTRkYWI3ZGM4MGZiNTA2YjhkYTBmNmYuLjk2OTU2NDBmNTExMjUzM2I5MTBlMjBjYzEwMDZiYTc4
NjgyZGJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKQEAgLTM0
LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZW5kZXJTbGlkZXIoSFRN
TElucHV0RWxlbWVudCopOwogICAgICAgICB2aXJ0dWFsIH5SZW5kZXJTbGlkZXIoKTsKIAotICAg
ICAgICB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwogICAgICAgICBib29sIGluRHJhZ01vZGUo
KSBjb25zdDsKICAgICAgICAgSW50UmVjdCB0aHVtYlJlY3QoKTsKIApAQCAtNDksMTkgKzQ4LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSwgdGhl
IGxvZ2ljIG9mIG1hbmlwdWxhdGluZyBzbGlkZXIgdGh1bWIgc2hvdWxkIG1vdmUgdG8KICAgICAg
ICAgLy8gU2xpZGVyVGh1bWJFbGVtZW50IGFuZCBhY2Nlc3Npbmcgc2xpZGVyVGh1bWJFbGVtZW50
IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGluIHRoaXMgY2xhc3MuCiAgICAgICAgIFNsaWRlclRo
dW1iRWxlbWVudCogc2xpZGVyVGh1bWJFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgbW91
c2VFdmVudElzSW5UaHVtYihNb3VzZUV2ZW50Kik7Ci0gICAgICAgIEZsb2F0UG9pbnQgbW91c2VF
dmVudE9mZnNldFRvVGh1bWIoTW91c2VFdmVudCopOwotCi0gICAgICAgIHZvaWQgc2V0VmFsdWVG
b3JQb3NpdGlvbihpbnQgcG9zaXRpb24pOwotICAgICAgICB2b2lkIHNldFBvc2l0aW9uRnJvbVZh
bHVlKCk7Ci0gICAgICAgIGludCBwb3NpdGlvbkZvck9mZnNldChjb25zdCBJbnRQb2ludCYpOwot
Ci0gICAgICAgIGludCBjdXJyZW50UG9zaXRpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgICAgIGludCB0cmFja1NpemUoKTsKLQogICAgICAgICBmcmllbmQgY2xhc3Mg
U2xpZGVyVGh1bWJFbGVtZW50OwogICAgIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79287</attachid>
            <date>2011-01-18 09:53:32 -0800</date>
            <delta_ts>2011-01-19 11:27:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52464-20110118095331.patch</filename>
            <type>text/plain</type>
            <size>19918</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYTc5NWI5YmFjM2ZiMGE3MjgwMzM3M2U4MzhlYjYwODc2YzdhNmNmLi5j
ZTE4ODFiOTFlYjcxNWU2ZjM0ZGMzNWQ4YTg3NTBhYTNhNjEzYmU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTAgQEAKKzIwMTEtMDEtMTQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmUgZXZlbnQgZm9yd2FyZGluZyBsb2dpYyBmcm9tIGlucHV0W3R5cGU9cmFuZ2VdLCBz
aW1wbGlmeSBldmVudCBmbG93IGFuZCB0aHVtYiBwb3NpdGlvbmluZyBsb2dpYy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNDY0CisKKyAgICAgICAg
VGhpcyBjaGFuZ2UgaGFzIHR3byBwYXJ0czoKKworICAgICAgICAxKSBVdGlsaXplIHNoYWRvdyBE
T00gZXZlbnQgcmV0YXJnZXRpbmcgdG8gZ2V0IHJpZCBvZiBmb3J3YXJkaW5nIGV2ZW50cworICAg
ICAgICAgICB2aWEgcmVuZGVyIHRyZWU7CisgICAgICAgIDIpIE1vdmUgdGh1bWIgcG9zaXRpb25p
bmcgbG9naWMgZnJvbSBSZW5kZXJTbGlkZXIgdG8gU2xpZGVyVGh1bWJFbGVtZW50LgorCisgICAg
ICAgIFRoZXNlIHR3byBhcmUgaGlnaGx5IGNvLWRlcGVuZGVudC4gSXQgbG9va2VkIHVnbHkgd2hl
biBJIHRyaWVkIHRvCisgICAgICAgIHNlcGFyYXRlIHRoZW0uCisKKyAgICAgICAgTm8gY2hhbmdl
IGluIGJlaGF2aW9yLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBBZGRlZCBpbnZvY2F0aW9uIG9mCisgICAgICAgICAg
ICBJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50LgorICAgICAgICAqIGh0bWwvSW5wdXRU
eXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZl
bnQpOiBBZGRlZCBlbXB0eSBkZWNsLgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6IEFkZGVk
IGRlZi4KKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURvd25FdmVudCk6IEFkZGVkIHRvIGhhbmRs
ZSB0aGUgY2FzZQorICAgICAgICAgICAgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIHRyYWNr
IG9mIHRoZSBzbGlkZXIuIEFsc28gcmVtb3ZlZCB0aGUKKyAgICAgICAgICAgIGZvcndhcmRFdmVu
dCBtZXRob2QuCisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5oOiBBZGRlZC9yZW1vdmVk
IGRlZnMuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6ZHJhZ0Zyb20pOiBBZGRlZCBhIGhl
bHBlciBtZXRob2QgdG8gc3RhcnQKKyAgICAgICAgICAgIGRyYWdnaW5nIGZyb20gYW55IHBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkcmFnVG8pOiBBZGRl
ZCBhIGhlbHBlciBtZXRob2QgdG8gZHJhZyB0bworICAgICAgICAgICAgc3BlY2lmaWVkIHBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbik6
IENvbGxhcHNlZCBtb3N0IG9mIHRoZSBwb3NpdGlvbmluZworICAgICAgICAgICAgbG9naWMgaW4g
UmVuZGVyU2xpZGVyIGludG8gdGhpcyBtZXRob2QsIHdoaWNoIGlzIG5vdyBhIHNpbXBsZSBjYWxj
dWxhdGlvbgorICAgICAgICAgICAgYW5kIGFkanVzdGluZyBvZiB0aHVtYiBwb3NpdGlvbiBiYXNl
ZCBvbiBzdXBwbGllZCBjb29yZGluYXRlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1i
RWxlbWVudDo6c3RhcnREcmFnZ2luZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNs
aWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IFJlbW92ZWQgbW9zdCBvZiB0
aGUKKyAgICAgICAgICAgIG9sZCBwb3NpdGlvbi1zbmlmZmluZyBsb2dpYyBhbmQgcmVwbGFjZWQg
d2l0aCBzaW1wbGUgY2FsbHMgdG8gc3RhcnQsCisgICAgICAgICAgICBzdG9wLCBhbmQgZHJhZyB0
aGUgdGh1bWIuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6IEFk
ZGVkIGRlZnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6IFJlbW92ZWQg
YSBidW5jaCBvZiBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICBuZWNlc3Nhcnku
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOiBSZW1vdmVkIGRlZnMsIHJlbW92
ZWQgbm93LXVubmVjZXNzYXJ5IGZyaWVuZGxpbmVzcy4KKwogMjAxMS0wMS0xOCAgTGVvIFlhbmcg
IDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
aW5kZXggYTFlN2Q4YjQ2OTFiOTBkMTk4ODYxZGE3MjdmY2Q4Y2EzZGQ3ZjRkMC4uOTE3OTQ5ODdi
ZTNhMDg3Y2Q2NTQyN2UzMTZmN2M5ZWMyMGZhMjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMDM2LDYgKzEwMzYsMTIgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIG1faW5wdXRUeXBlLT5o
YW5kbGVNb3VzZURvd25FdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KSk7CisgICAg
ICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgbV9pbnB1dFR5cGUtPmZvcndhcmRFdmVudChldnQpOwogCiAgICAgaWYgKCFjYWxs
QmFzZUNsYXNzRWFybHkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcAppbmRleCA3MjlmMjA0ZWIxYTFlZDBiZmJiNTc1NmMzYWY0ZDFmMGMxODMzZTlh
Li4yZjhkNDE0ZDUyZjEyZGViZTk5NWM0MzUyYjgyMDI2MGIxYmMzYjI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwCkBAIC0zMDUsNiArMzA1LDEwIEBAIHZvaWQgSW5wdXRUeXBlOjpoYW5k
bGVDbGlja0V2ZW50KE1vdXNlRXZlbnQqKQogewogfQogCit2b2lkIElucHV0VHlwZTo6aGFuZGxl
TW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopCit7Cit9CisKIHZvaWQgSW5wdXRUeXBlOjpoYW5k
bGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCmlu
ZGV4IDBkMWY2Yjg5ZmM3NjFlZDlkNzU3MTdlMDA2M2ViMzRjMTg4YzExMjIuLmVhNDU0MWY3Zjg2
YzE4ODQxMDFjYWQyMGNmMDQ3YjNmMzdkMGZjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaApA
QCAtMTUzLDYgKzE1Myw3IEBAIHB1YmxpYzoKICAgICAvLyBFdmVudCBoYW5kbGVycwogCiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopOworICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVNb3VzZURvd25FdmVudChNb3VzZUV2ZW50Kik7CiAgICAgdmlydHVhbCBQYXNz
T3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3BhdGNoQ2xpY2soKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCmluZGV4IDNmY2I2NDE1ZDMwYjQ4N2Jj
M2ZlY2ZlNDIxYzM2YzMwNzM1YTgzMTYuLmE0OTJjZTZlZjRhOWM5Njk1YzQ5MzhkNTg2NjBlYzEz
M2ZiNDM1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCkBAIC0zNiw2
ICszNiw4IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xp
ZGVyLmgiCiAjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU3RlcFJh
bmdlLmgiCkBAIC0xNDEsNiArMTQzLDE1IEBAIGRvdWJsZSBSYW5nZUlucHV0VHlwZTo6c3RlcFNj
YWxlRmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gcmFuZ2VTdGVwU2NhbGVGYWN0b3I7CiB9CiAK
K3ZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQqIGV2
ZW50KQoreworICAgIGlmIChldmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbiB8fCBldmVudC0+
dGFyZ2V0KCkgIT0gZWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoU2xpZGVy
VGh1bWJFbGVtZW50KiB0aHVtYiA9IHRvU2xpZGVyVGh1bWJFbGVtZW50KGVsZW1lbnQoKS0+c2hh
ZG93Um9vdCgpKSkKKyAgICAgICAgdGh1bWItPmRyYWdGcm9tKGV2ZW50LT5hYnNvbHV0ZUxvY2F0
aW9uKCkpOworfQorCiB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC0+a2V5
SWRlbnRpZmllcigpOwpAQCAtMTgxLDEyICsxOTIsNiBAQCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpo
YW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQgUmFuZ2VJbnB1dFR5cGU6OmZvcndhcmRFdmVudChF
dmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSAmJiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pc1doZWVs
RXZlbnQoKSkpCi0gICAgICAgIHRvUmVuZGVyU2xpZGVyKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkt
PmZvcndhcmRFdmVudChldmVudCk7Ci19Ci0KIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZVNo
YWRvd1N1YnRyZWUoKQogewogICAgIGVsZW1lbnQoKS0+c2V0U2hhZG93Um9vdChTbGlkZXJUaHVt
YkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
UmFuZ2VJbnB1dFR5cGUuaAppbmRleCA1N2ViMjk5OWNkYTU5ZTVkMjQ1NzBjY2M0ODBjMGY2N2Zm
ZWQ5MTE2Li4xNWQyMjRkZGM3N2Q5Y2M5NmRkNzE0NjkxYmQzYzg1N2M3OWY3MDJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCkBAIC01NSw4ICs1NSw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBkb3VibGUgc3RlcEJhc2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBk
ZWZhdWx0U3RlcCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIHN0ZXBTY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVNb3VzZURvd25FdmVudChNb3VzZUV2ZW50
Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKTsKICAgICB2aXJ0dWFs
IGRvdWJsZSBwYXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAppbmRl
eCA3OWEwMDliN2RmZmFjYmQwZWFhZjcyYjI1MDQ5MjNkZWE2NjBkY2JiLi41MDdiN2I3YTY0MzA3
OTI0MDE4ZWI4YzRiNDNkMGY1NmM4ZjYxYTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTM1LDkgKzM1LDE1IEBACiAKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgw
LDYgKzg2LDgzIEBAIFJlbmRlck9iamVjdCogU2xpZGVyVGh1bWJFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlCiAgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlclNsaWRlclRodW1iKHRoaXMpOwogfQogCit2b2lkIFNsaWRlclRodW1iRWxlbWVu
dDo6ZHJhZ0Zyb20oY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIHNldFBvc2l0aW9uKHBv
aW50KTsKKyAgICBzdGFydERyYWdnaW5nKCk7Cit9CisKK3ZvaWQgU2xpZGVyVGh1bWJFbGVtZW50
OjpkcmFnVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmICghbV9pbkRyYWdNb2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRQb3NpdGlvbihwb2ludCk7Cit9CisKK3ZvaWQg
U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7
CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAgICBBU1NFUlQoaW5wdXQpOworICAgIEFTU0VSVChpbnB1
dC0+cmVuZGVyZXIoKSk7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkpOworCisgICAgaWYgKCFpbnB1
dC0+cmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UG9pbnQgb2Zmc2V0ID0gcm91bmRlZEludFBvaW50KGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0
ZVRvTG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgUmVuZGVyU3R5bGUqIHNsaWRlclN0
eWxlID0gaW5wdXQtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0g
c2xpZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgc2xpZGVy
U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ7CisKKyAgICBpbnQg
dHJhY2tTaXplOworICAgIGludCBwb3NpdGlvbjsKKyAgICBpbnQgY3VycmVudFBvc2l0aW9uOwor
ICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAgIHRyYWNrU2l6ZSA9IGlucHV0LT5yZW5kZXJC
b3goKS0+Y29udGVudEhlaWdodCgpIC0gcmVuZGVyQm94KCktPmhlaWdodCgpOworICAgICAgICBw
b3NpdGlvbiA9IG9mZnNldC55KCkgLSByZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAyOworICAgICAg
ICBjdXJyZW50UG9zaXRpb24gPSByZW5kZXJCb3goKS0+eSgpIC0gaW5wdXQtPnJlbmRlckJveCgp
LT5jb250ZW50Qm94UmVjdCgpLnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cmFja1NpemUg
PSBpbnB1dC0+cmVuZGVyQm94KCktPmNvbnRlbnRXaWR0aCgpIC0gcmVuZGVyQm94KCktPndpZHRo
KCk7CisgICAgICAgIHBvc2l0aW9uID0gb2Zmc2V0LngoKSAtIHJlbmRlckJveCgpLT53aWR0aCgp
IC8gMjsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcmVuZGVyQm94KCktPngoKSAtIGlucHV0
LT5yZW5kZXJCb3goKS0+Y29udGVudEJveFJlY3QoKS54KCk7CisgICAgfQorICAgIHBvc2l0aW9u
ID0gbWF4KDAsIG1pbihwb3NpdGlvbiwgdHJhY2tTaXplKSk7CisgICAgaWYgKHBvc2l0aW9uID09
IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RlcFJhbmdlIHJhbmdl
KGlucHV0KTsKKyAgICBkb3VibGUgZnJhY3Rpb24gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0
aW9uKSAvIHRyYWNrU2l6ZTsKKyAgICBpZiAoaXNWZXJ0aWNhbCkKKyAgICAgICAgZnJhY3Rpb24g
PSAxIC0gZnJhY3Rpb247CisgICAgZG91YmxlIHZhbHVlID0gcmFuZ2UuY2xhbXBWYWx1ZShyYW5n
ZS52YWx1ZUZyb21Qcm9wb3J0aW9uKGZyYWN0aW9uKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBubyBsb25nZXIgYmVpbmcgc2V0IGZyb20gcmVuZGVyZXIuIENvbnNpZGVyIHVwZGF0aW5nIHRo
ZQorICAgIC8vIG1ldGhvZCBuYW1lLgorICAgIGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihz
ZXJpYWxpemVGb3JOdW1iZXJUeXBlKHZhbHVlKSk7CisgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CisgICAgaW5wdXQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OworfQorCit2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c3RhcnREcmFnZ2luZygpCit7CisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7CisgICAg
ICAgIG1faW5EcmFnTW9kZSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFNsaWRlclRodW1iRWxl
bWVudDo6c3RvcERyYWdnaW5nKCkKK3sKKyAgICBpZiAoIW1faW5EcmFnTW9kZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2Rl
KDApOworICAgIG1faW5EcmFnTW9kZSA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlcigpKQorICAg
ICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKK30KKwogdm9pZCBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlm
ICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CkBAIC05Miw0NSArMTc1LDE5IEBAIHZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAKICAgICBpZiAo
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpc0xlZnRCdXR0b24p
IHsKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkgJiYgcmVuZGVyZXIoKSkgewotICAg
ICAgICAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigp
LT5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHNsaWRlci0+bW91c2VFdmVudElzSW5UaHVtYihtb3VzZUV2ZW50KSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBzZWxlY3RlZCB0aGUgdGh1bWIsIHdlIHdhbnQgdGhlIGN1cnNvciB0
byBhbHdheXMgc3RheSBhdAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBwb3NpdGlv
biByZWxhdGl2ZSB0byB0aGUgdGh1bWIuCi0gICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0VG9U
aHVtYiA9IHNsaWRlci0+bW91c2VFdmVudE9mZnNldFRvVGh1bWIobW91c2VFdmVudCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG91dHNp
ZGUgdGhlIHRodW1iLCBtb3ZlIHRoZSB0aHVtYiB0byB0aGUgcG9pbnQgd2VyZQotICAgICAgICAg
ICAgICAgICAgICAvLyB3ZSBjbGlja2VkLiBXZSdsbCBiZSBleGFjdGx5IGF0IHRoZSBjZW50ZXIg
b2YgdGhlIHRodW1iLgotICAgICAgICAgICAgICAgICAgICBtX29mZnNldFRvVGh1bWIuc2V0WCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9vZmZzZXRUb1RodW1iLnNldFkoMCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9pbkRyYWdNb2RlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlKHNoYWRvd0hvc3QoKSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIHN0YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzTGVmdEJ1dHRvbikgewot
ICAgICAgICBpZiAobV9pbkRyYWdNb2RlKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAKLSAgICAgICAgICAg
IG1faW5EcmFnTW9kZSA9IGZhbHNlOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgc3RvcERyYWdn
aW5nKCk7CisgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgc2V0RGVmYXVsdEhh
bmRsZWQgaGVyZSwgYnV0IHdlIG5lZWQgdG8gZmFsbAorICAgICAgICAvLyB0aHJvdWdoIHRvIGtl
ZXAgTWVkaWFJbnB1dENvbnRyb2xFbGVtZW50IGJpdHMgd29ya2luZy4gQWRkIGl0IG9uY2UKKyAg
ICAgICAgLy8gTWVkaWFFbGVtZW50IGlzIHJlZmFjdG9yZWQgdG8gdXNlIHNoYWRvdyBET00uCisg
ICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpIHsKLSAgICAgICAgaWYgKG1faW5EcmFnTW9kZSAmJiByZW5kZXJlcigp
ICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNs
aWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSAgICAgICAgICAg
IGlmIChzbGlkZXIpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGN1clBvaW50ID0gc2xp
ZGVyLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxz
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgZXZlbnRPZmZzZXQoY3VyUG9pbnQu
eCgpICsgbV9vZmZzZXRUb1RodW1iLngoKSwgY3VyUG9pbnQueSgpICsgbV9vZmZzZXRUb1RodW1i
LnkoKSk7Ci0gICAgICAgICAgICAgICAgc2xpZGVyLT5zZXRWYWx1ZUZvclBvc2l0aW9uKHNsaWRl
ci0+cG9zaXRpb25Gb3JPZmZzZXQoZXZlbnRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgZHJhZ1RvKG1vdXNlRXZlbnQtPmFic29sdXRlTG9j
YXRpb24oKSk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1
bWJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1l
bnQuaAppbmRleCA3MjE5MTg2MjQzZmQ4ZGJlOTQ3MzJmODQ0NGUyZTgxMDJiYTRhYTYyLi43NTY0
NjMzZTM3NGM1ZjEzNzQwYWVhM2MyZTVkZjUyMWYzY2E2YjZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaApAQCAtNTAsNiArNTAsOCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGluRHJhZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2luRHJhZ01v
ZGU7IH0KIAorICAgIHZvaWQgZHJhZ0Zyb20oY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIGRy
YWdUbyhjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgQXRv
bWljU3RyaW5nIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CkBAIC01Nyw2ICs1OSw5IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU2xpZGVyVGh1bWJFbGVtZW50KERvY3VtZW50Kik7CiAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKTsKKyAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoKTsKKyAgICB2b2lkIHN0b3BEcmFnZ2luZygp
OworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKIAogICAgIEZsb2F0UG9p
bnQgbV9vZmZzZXRUb1RodW1iOwogICAgIGJvb2wgbV9pbkRyYWdNb2RlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAppbmRleCBiMGRjMGQ5Zjk4ZWIzNjNlMDM3OTYx
YWVkNjhlOThmNzZlNGE2OGQ2Li40OWRhMzk2NzIzMWMwMTQxZjBhMzI2ZmVkMGRhNzg3ODFmZjQz
ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcApAQCAtMTgx
LDExNiArMTgxLDYgQEAgU2xpZGVyVGh1bWJFbGVtZW50KiBSZW5kZXJTbGlkZXI6OnNsaWRlclRo
dW1iRWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHRvU2xpZGVyVGh1bWJFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5zaGFkb3dSb290KCkpOwogfQogCi1ib29sIFJlbmRl
clNsaWRlcjo6bW91c2VFdmVudElzSW5UaHVtYihNb3VzZUV2ZW50KiBldnQpCi17Ci0gICAgU2xp
ZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBzbGlkZXJUaHVtYkVsZW1lbnQoKTsKLSAg
ICBpZiAoIXRodW1iRWxlbWVudCB8fCAhdGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkgewotICAgICAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQqIHNsaWRlclRodW1iID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Kj4o
dGh1bWJFbGVtZW50LT5yZW5kZXJlcigpLT5ub2RlKCkpOwotICAgICAgICByZXR1cm4gc2xpZGVy
VGh1bWItPmhpdFRlc3QoZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gdGh1bWJFbGVtZW50LT5yZW5kZXJCb3goKS0+
YWJzb2x1dGVUb0xvY2FsKGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0g
ICAgSW50UmVjdCB0aHVtYkJvdW5kcyA9IHRodW1iRWxlbWVudC0+cmVuZGVyQm94KCktPmJvcmRl
ckJveFJlY3QoKTsKLSAgICByZXR1cm4gdGh1bWJCb3VuZHMuY29udGFpbnMocm91bmRlZEludFBv
aW50KGxvY2FsUG9pbnQpKTsKLX0KLQotRmxvYXRQb2ludCBSZW5kZXJTbGlkZXI6Om1vdXNlRXZl
bnRPZmZzZXRUb1RodW1iKE1vdXNlRXZlbnQqIGV2dCkKLXsKLSAgICBTbGlkZXJUaHVtYkVsZW1l
bnQqIHRodW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwotICAgIEFTU0VSVCh0aHVt
YkVsZW1lbnQgJiYgdGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICBGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT5hYnNvbHV0ZVRvTG9jYWwoZXZ0
LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAgICBJbnRSZWN0IHRodW1iQm91
bmRzID0gdGh1bWJFbGVtZW50LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpOwotICAgIEZs
b2F0UG9pbnQgb2Zmc2V0OwotICAgIG9mZnNldC5zZXRYKHRodW1iQm91bmRzLngoKSArIHRodW1i
Qm91bmRzLndpZHRoKCkgLyAyIC0gbG9jYWxQb2ludC54KCkpOwotICAgIG9mZnNldC5zZXRZKHRo
dW1iQm91bmRzLnkoKSArIHRodW1iQm91bmRzLmhlaWdodCgpIC8gMiAtIGxvY2FsUG9pbnQueSgp
KTsKLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi12b2lkIFJlbmRlclNsaWRlcjo6c2V0VmFsdWVG
b3JQb3NpdGlvbihpbnQgcG9zaXRpb24pCi17Ci0gICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVt
YkVsZW1lbnQgPSBzbGlkZXJUaHVtYkVsZW1lbnQoKTsKLSAgICBpZiAoIXRodW1iRWxlbWVudCB8
fCAhdGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUoKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyB2YWx1ZSBiYXNlZCBvbiB0aGUgcG9z
aXRpb24sIGFuZCBzZW5kIGl0IHRvIHRoZSBlbGVtZW50LgotICAgIFN0ZXBSYW5nZSByYW5nZShl
bGVtZW50KTsKLSAgICBkb3VibGUgZnJhY3Rpb24gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0
aW9uKSAvIHRyYWNrU2l6ZSgpOwotICAgIGlmIChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xp
ZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNs
aWRlclBhcnQpCi0gICAgICAgIGZyYWN0aW9uID0gMSAtIGZyYWN0aW9uOwotICAgIGRvdWJsZSB2
YWx1ZSA9IHJhbmdlLmNsYW1wVmFsdWUocmFuZ2UudmFsdWVGcm9tUHJvcG9ydGlvbihmcmFjdGlv
bikpOwotICAgIGVsZW1lbnQtPnNldFZhbHVlRnJvbVJlbmRlcmVyKHNlcmlhbGl6ZUZvck51bWJl
clR5cGUodmFsdWUpKTsKLQotICAgIC8vIEFsc28gdXBkYXRlIHRoZSBwb3NpdGlvbiBpZiBhcHBy
b3ByaWF0ZS4KLSAgICBpZiAocG9zaXRpb24gIT0gY3VycmVudFBvc2l0aW9uKCkpIHsKLSAgICAg
ICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxp
a2UgdGhpcyBjb3VsZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVudHMgaWYgdGhlIHNhbWUgdmFsdWUg
aXMgc2V0Ci0gICAgICAgIC8vIG11bHRpcGxlIHRpbWVzIHdpdGggbm8gbGF5b3V0IGluIGJldHdl
ZW4uCi0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwot
ICAgIH0KLX0KLQotaW50IFJlbmRlclNsaWRlcjo6cG9zaXRpb25Gb3JPZmZzZXQoY29uc3QgSW50
UG9pbnQmIHApCi17Ci0gICAgU2xpZGVyVGh1bWJFbGVtZW50KiB0aHVtYkVsZW1lbnQgPSBzbGlk
ZXJUaHVtYkVsZW1lbnQoKTsKLSAgICBpZiAoIXRodW1iRWxlbWVudCB8fCAhdGh1bWJFbGVtZW50
LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBwb3NpdGlvbjsKLSAg
ICBpZiAoc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBzdHls
ZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBwb3Np
dGlvbiA9IHAueSgpIC0gdGh1bWJFbGVtZW50LT5yZW5kZXJCb3goKS0+aGVpZ2h0KCkgLyAyOwot
ICAgIGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBwLngoKSAtIHRodW1iRWxlbWVudC0+cmVuZGVy
Qm94KCktPndpZHRoKCkgLyAyOwotICAgIAotICAgIHJldHVybiBtYXgoMCwgbWluKHBvc2l0aW9u
LCB0cmFja1NpemUoKSkpOwotfQotCi1pbnQgUmVuZGVyU2xpZGVyOjpjdXJyZW50UG9zaXRpb24o
KQotewotICAgIFNsaWRlclRodW1iRWxlbWVudCogdGh1bWJFbGVtZW50ID0gc2xpZGVyVGh1bWJF
bGVtZW50KCk7Ci0gICAgQVNTRVJUKHRodW1iRWxlbWVudCAmJiB0aHVtYkVsZW1lbnQtPnJlbmRl
cmVyKCkpOwotCi0gICAgaWYgKHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNh
bFBhcnQgfHwgc3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCkK
LSAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KHRodW1iRWxlbWVudC0+cmVuZGVyZXIoKSktPnko
KSAtIGNvbnRlbnRCb3hSZWN0KCkueSgpOwotICAgIHJldHVybiB0b1JlbmRlckJveCh0aHVtYkVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT54KCkgLSBjb250ZW50Qm94UmVjdCgpLngoKTsKLX0KLQotaW50
IFJlbmRlclNsaWRlcjo6dHJhY2tTaXplKCkKLXsKLSAgICBTbGlkZXJUaHVtYkVsZW1lbnQqIHRo
dW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwotICAgIEFTU0VSVCh0aHVtYkVsZW1l
bnQgJiYgdGh1bWJFbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChzdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHJldHVybiBjb250ZW50SGVpZ2h0KCkg
LSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKLSAgICByZXR1cm4gY29udGVu
dFdpZHRoKCkgLSB0aHVtYkVsZW1lbnQtPnJlbmRlckJveCgpLT53aWR0aCgpOwotfQotCi12b2lk
IFJlbmRlclNsaWRlcjo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBTbGlkZXJU
aHVtYkVsZW1lbnQqIHRodW1iRWxlbWVudCA9IHNsaWRlclRodW1iRWxlbWVudCgpOwotICAgIGlm
ICghdGh1bWJFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQtPmlzTW91
c2VFdmVudCgpKSB7Ci0gICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewotICAgICAgICAgICAgaWYgKCFtb3VzZUV2ZW50SXNJblRodW1iKG1vdXNlRXZlbnQp
KSB7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgZXZlbnRPZmZzZXQgPSByb3VuZGVkSW50UG9p
bnQoYWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2Us
IHRydWUpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZUZvclBvc2l0aW9uKHBvc2l0aW9uRm9y
T2Zmc2V0KGV2ZW50T2Zmc2V0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB0aHVtYkVsZW1lbnQtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCiBib29s
IFJlbmRlclNsaWRlcjo6aW5EcmFnTW9kZSgpIGNvbnN0CiB7CiAgICAgU2xpZGVyVGh1bWJFbGVt
ZW50KiB0aHVtYkVsZW1lbnQgPSBzbGlkZXJUaHVtYkVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbGlkZXIuaAppbmRleCA1ZmI1OTIxOTEwMDBiM2MzZDU0ZGFiN2RjODBm
YjUwNmI4ZGEwZjZmLi4wMTYyYjcxMDdiYWQ1ZWU2YzUzMmQ1NTliY2U1NTQ0MTBjOTBlMTE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCkBAIC0zNCw3ICszNCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVuZGVyU2xpZGVyKEhUTUxJbnB1dEVsZW1l
bnQqKTsKICAgICAgICAgdmlydHVhbCB+UmVuZGVyU2xpZGVyKCk7CiAKLSAgICAgICAgdm9pZCBm
b3J3YXJkRXZlbnQoRXZlbnQqKTsKICAgICAgICAgYm9vbCBpbkRyYWdNb2RlKCkgY29uc3Q7CiAg
ICAgICAgIEludFJlY3QgdGh1bWJSZWN0KCk7CiAKQEAgLTQ5LDIwICs0OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHksIHRoZSBsb2dpYyBvZiBt
YW5pcHVsYXRpbmcgc2xpZGVyIHRodW1iIHNob3VsZCBtb3ZlIHRvCiAgICAgICAgIC8vIFNsaWRl
clRodW1iRWxlbWVudCBhbmQgYWNjZXNzaW5nIHNsaWRlclRodW1iRWxlbWVudCBzaG91bGQgbm90
IGJlIG5lY2Vzc2FyeSBpbiB0aGlzIGNsYXNzLgogICAgICAgICBTbGlkZXJUaHVtYkVsZW1lbnQq
IHNsaWRlclRodW1iRWxlbWVudCgpIGNvbnN0OwotICAgICAgICBib29sIG1vdXNlRXZlbnRJc0lu
VGh1bWIoTW91c2VFdmVudCopOwotICAgICAgICBGbG9hdFBvaW50IG1vdXNlRXZlbnRPZmZzZXRU
b1RodW1iKE1vdXNlRXZlbnQqKTsKLQotICAgICAgICB2b2lkIHNldFZhbHVlRm9yUG9zaXRpb24o
aW50IHBvc2l0aW9uKTsKLSAgICAgICAgdm9pZCBzZXRQb3NpdGlvbkZyb21WYWx1ZSgpOwotICAg
ICAgICBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgICAgICBp
bnQgY3VycmVudFBvc2l0aW9uKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9y
Y2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAg
ICAgICBpbnQgdHJhY2tTaXplKCk7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFNsaWRlclRodW1i
RWxlbWVudDsKICAgICB9OwogCiAgICAgaW5saW5lIFJlbmRlclNsaWRlciogdG9SZW5kZXJTbGlk
ZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCg==
</data>
<flag name="review"
          id="70692"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>