<?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>51218</bug_id>
          
          <creation_ts>2010-12-16 16:10:09 -0800</creation_ts>
          <short_desc>Implement mozilla&apos;s requestAnimationFrame API</short_desc>
          <delta_ts>2011-04-05 04:14:33 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>52837</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>arv</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>323493</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-16 16:10:09 -0800</bug_when>
    <thetext>Mozilla has proposed an API to coordinate and rate limit imperative animations: http://weblogs.mozillazine.org/roc/archives/2010/08/mozrequestanima.html.  The basic idea is that instead of imperative animations driving themselves off of setTimeout()s, the author would inform the browser of elements that are animated and the browser would tell the page when to update the animation state.  I think we should implement something similar in WebKit.

Here are the goals that I think are important (I&apos;ll talk about possible implementations in comments):

1.) Make it easy for authors to write animation code that does not waste CPU updating animations that are not visible.  A WebGL game or Canvas 2D banner ad should not be consuming lots of resources when they are in a background tab or scrolled well outside the viewport.  Web developers are for the most part lazy so we should make the easy way efficient and not require a lot of work on the developer&apos;s part.

2.) Allow the browser to rate-limit animations to a reasonable target framerate and adapt to slow running JS.  On most displays it makes no sense to update animations at faster than 60Hz, but authors who write setTimeout(.., 0) may try to run faster today.  Additionally we should have some flexibility when dealing with pages that have some content that updates very slowly (say some highly complex WebGL-rendered scene) in order to not lock the entire page to the framerate of the slowest element.

The W3C FX task force has expressed interest in this proposal.  We should provide any feedback to them and be responsive to any input they might have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323528</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-16 17:16:46 -0800</bug_when>
    <thetext>Here&apos;s an initial proposal for webkitRequestAnimationFrame based off of the initial Mozilla proposal, this public-webapps thread: http://lists.w3.org/Archives/Public/public-webapps/2010OctDec/0644.html, and chatting with roc:

New function on Element:
void webkitRequestAnimationFrame(callback);

This indicates that the element is being animated and requests that the browser invoke the callback at some point in the future to update the element&apos;s animation state.  At some point after this function is called (for example just before the next repaint), the specified callback is invoked with no arguments and the page can update whatever animation state it needs to (update DOM positions, make WebGL or canvas 2d calls, etc).  The callback is only invoked in cases where the element is (or might soon be) visible - the callback won&apos;t be invoked if the tab is hidden or the element is scrolled well offscreen.

New property on DOMWindow:
readonly attribute DOMTimeStamp webkitAnimationTime;

This property always returns the &quot;current time&quot; to be used by animations.  This value does not change while javascript is running but is updated between calls.  Any programmatic queries or updates to declarative animations (like starting a new animation) take place logically at this time (rather than at the current time for the next recalcStyle) and any declarative animation updates in the next paint *should* use this time as well.

In the pure software rendering case, it&apos;s pretty easy to satisfy this API by calling all relevant webkitRequestAnimationFrame() callbacks before painting and then using the webkitAnimationTime value (if it was queried) to evaluate CSS/SVG animation state during the paint.  As an optimization, we could also monitor the amount of time that the webkitRequestAnimationFrame() callbacks are taking and decide to produce some frames without running the callbacks if they are super slow every time.

The h/w accelerated case is trickier but I still think the API is useful.  In particular, the composition can be happening in another thread and may be behind an opaque API.  However since WebKit is always aware of declarative animations we can at the very least &apos;guess&apos; and invoke the webkitRequestAnimationFrame() callbacks for potentially visible content on a regular timer during times that the compositor is producing frames, with a best-guess approximation for window.webkitAnimationTime.  This would allow us to avoid invoking the callback for offscreen content, rate-limit animations to a reasonable framerate, and if the compositor provides sufficient information rate-limit the callbacks to the compositor&apos;s framerate if the compositor is not able to sustain 60FPS.

The main difference from the initial Mozilla proposal is dropping the beforepaint event and making requestAnimationFrame per-element rather than per-window so that we can bounds check the element with the viewport and avoid invoking the callback for offscreen elements.

I&apos;m working on an initial implementation that will be fairly basic and not do many of the optimizations mentioned above.  I think it&apos;s important that we get something out there that developers can start experimenting with that has good semantics that we can then optimize later on, especially as people start experimenting more with WebGL and heavy canvas-based animations that can take considerable processing power to render.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323925</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-17 12:27:36 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Here&apos;s an initial proposal for webkitRequestAnimationFrame based off of the initial Mozilla proposal, this public-webapps thread: http://lists.w3.org/Archives/Public/public-webapps/2010OctDec/0644.html, and chatting with roc:
&gt; 
&gt; New function on Element:
&gt; void webkitRequestAnimationFrame(callback);
&gt; 
&gt; This indicates that the element is being animated and requests that the browser invoke the callback at some point in the future to update the element&apos;s animation state.  At some point after this function is called (for example just before the next repaint), the specified callback is invoked with no arguments and the page can update whatever animation state it needs to (update DOM positions, make WebGL or canvas 2d calls, etc).  The callback is only invoked in cases where the element is (or might soon be) visible - the callback won&apos;t be invoked if the tab is hidden or the element is scrolled well offscreen.

Simple callbacks like this have issues:
1. how to you unregister the callback?
2. what happens if you call webkitRequestAnimationFrame() twice on the same element? Does it replace the callback, or queue both?

Why is this better than firing an event?

It&apos;s not clear to me that bounds-checking the elements is really useful or do-able. How do you know that an element won&apos;t be visible for the next frame because of CSS animations, or scrolling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323940</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-17 12:49:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Here&apos;s an initial proposal for webkitRequestAnimationFrame based off of the initial Mozilla proposal, this public-webapps thread: http://lists.w3.org/Archives/Public/public-webapps/2010OctDec/0644.html, and chatting with roc:
&gt; &gt; 
&gt; &gt; New function on Element:
&gt; &gt; void webkitRequestAnimationFrame(callback);
&gt; &gt; 
&gt; &gt; This indicates that the element is being animated and requests that the browser invoke the callback at some point in the future to update the element&apos;s animation state.  At some point after this function is called (for example just before the next repaint), the specified callback is invoked with no arguments and the page can update whatever animation state it needs to (update DOM positions, make WebGL or canvas 2d calls, etc).  The callback is only invoked in cases where the element is (or might soon be) visible - the callback won&apos;t be invoked if the tab is hidden or the element is scrolled well offscreen.
&gt; 
&gt; Simple callbacks like this have issues:
&gt; 1. how to you unregister the callback?

We could return an id from the register callback and provide a cancel() interface (like setTimeout/clearTimeout), if cancelling the callback is something we want to support.  I&apos;m not sure of what the immediate need is for this.

&gt; 2. what happens if you call webkitRequestAnimationFrame() twice on the same element? Does it replace the callback, or queue both?

Each call enqueues an additional callback.

&gt; 
&gt; Why is this better than firing an event?

The callback is a one-time thing so that the default behavior is better, so it doesn&apos;t really match the event semantics.  Also I find callbacks a little simpler to deal with (but that&apos;s more a matter of taste).

&gt; 
&gt; It&apos;s not clear to me that bounds-checking the elements is really useful or do-able. How do you know that an element won&apos;t be visible for the next frame because of CSS animations, or scrolling?

The important thing about this API is it is always safe to invoke the callback on an element that isn&apos;t really visible, so we can be conservative and fire the callback if in doubt.  In the case of CSS animations, WebCore knows what animations are in progress at any point in time so it can either estimate the animation state or just give up and fire the callback on any element that has an in-progress animations.  Fast scrolling is normally implemented by rendering content past the viewport in the scrollable direction by some margin, so we can fire the callback at any elements within this over-rendered region.

I think we&apos;ll want to have this flexibility down the road even if we don&apos;t take immediate advantage of it (and fire the callback on every element, for example).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323958</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-17 13:11:35 -0800</bug_when>
    <thetext>&gt; &gt; Simple callbacks like this have issues:
&gt; &gt; 1. how to you unregister the callback?
&gt; 
&gt; We could return an id from the register callback and provide a cancel() interface (like setTimeout/clearTimeout), if cancelling the callback is something we want to support.  I&apos;m not sure of what the immediate need is for this.

I think it&apos;s always a good idea to allow cancellation for any API that allows registration.

&gt; &gt; 2. what happens if you call webkitRequestAnimationFrame() twice on the same element? Does it replace the callback, or queue both?
&gt; 
&gt; Each call enqueues an additional callback.

Even if the callback is the &quot;same&quot;?

Some similar issues came up in the discussion of styleMedia.matchMedia() (see bug 37205). Comparing callbacks is hard, which is why I&apos;m hoping to avoid a callback-based solution here.

&gt; &gt; Why is this better than firing an event?
&gt; 
&gt; The callback is a one-time thing so that the default behavior is better, so it doesn&apos;t really match the event semantics.  Also I find callbacks a little simpler to deal with (but that&apos;s more a matter of taste).

I agree that repeating/not-repeating is the main difference, but I still think event semantics are a better fit. I does worry me that badly behaved content might leave a lot of &apos;beforePaint&apos; event handlers registered though.

&gt; &gt; It&apos;s not clear to me that bounds-checking the elements is really useful or do-able. How do you know that an element won&apos;t be visible for the next frame because of CSS animations, or scrolling?
&gt; 
&gt; The important thing about this API is it is always safe to invoke the callback on an element that isn&apos;t really visible, so we can be conservative and fire the callback if in doubt.  In the case of CSS animations, WebCore knows what animations are in progress at any point in time so it can either estimate the animation state or just give up and fire the callback on any element that has an in-progress animations.  Fast scrolling is normally implemented by rendering content past the viewport in the scrollable direction by some margin, so we can fire the callback at any elements within this over-rendered region.
&gt; 
&gt; I think we&apos;ll want to have this flexibility down the road even if we don&apos;t take immediate advantage of it (and fire the callback on every element, for example).

Makes sense. Hopefully you can compute visibility when affected by scrolling &amp; software animations before calling the callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323961</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-17 13:22:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; Simple callbacks like this have issues:
&gt; &gt; &gt; 1. how to you unregister the callback?
&gt; &gt; 
&gt; &gt; We could return an id from the register callback and provide a cancel() interface (like setTimeout/clearTimeout), if cancelling the callback is something we want to support.  I&apos;m not sure of what the immediate need is for this.
&gt; 
&gt; I think it&apos;s always a good idea to allow cancellation for any API that allows registration.

Hard to argue with that :)

&gt; 
&gt; &gt; &gt; 2. what happens if you call webkitRequestAnimationFrame() twice on the same element? Does it replace the callback, or queue both?
&gt; &gt; 
&gt; &gt; Each call enqueues an additional callback.
&gt; 
&gt; Even if the callback is the &quot;same&quot;?

Why not?  If I call setTimeout() twice with the same callback I get two timers.

&gt; 
&gt; Some similar issues came up in the discussion of styleMedia.matchMedia() (see bug 37205). Comparing callbacks is hard, which is why I&apos;m hoping to avoid a callback-based solution here.
&gt; 
&gt; &gt; &gt; Why is this better than firing an event?
&gt; &gt; 
&gt; &gt; The callback is a one-time thing so that the default behavior is better, so it doesn&apos;t really match the event semantics.  Also I find callbacks a little simpler to deal with (but that&apos;s more a matter of taste).
&gt; 
&gt; I agree that repeating/not-repeating is the main difference, but I still think event semantics are a better fit. I does worry me that badly behaved content might leave a lot of &apos;beforePaint&apos; event handlers registered though.
&gt; 

I think that people are used to using setTimeout() to update their animations today, so a one-shot callback based system is much closer to the model that developers are already using.  I think we&apos;ll probably want to hash this out in a broader list (public-fx or public-webapps) to get more feedback from other implementors, developers, etc.  There are valid points on both sides.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329280</commentid>
    <comment_count>6</comment_count>
      <attachid>77944</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-04 16:19:10 -0800</bug_when>
    <thetext>Created attachment 77944
initial patch for discussion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329305</commentid>
    <comment_count>7</comment_count>
      <attachid>77944</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-04 17:05:31 -0800</bug_when>
    <thetext>Comment on attachment 77944
initial patch for discussion

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

This seems like a reasonable start.

&gt; WebCore/dom/Document.cpp:423
&gt; +    , m_requestAnimationFrameCallbackId(false)

Don&apos;t you mean 0?

&gt; WebCore/dom/Document.h:1390
&gt; +    int m_requestAnimationFrameCallbackId;

I&apos;d call this m_nextRequestAnimationFrameCallbackId

&gt; WebCore/dom/RequestAnimationFrameCallback.h:47
&gt; +    bool m_enabled;
&gt; +    int m_id;
&gt; +    RefPtr&lt;Element&gt; m_element;

Re-order these to optimize padding.

&gt; WebCore/page/DOMWindow.cpp:1472
&gt; +    // FIXME: Multiple queries of this value within the same script execution run
&gt; +    // should return the same value, so we need to calculate this value lazily and
&gt; +    // store it.

And use the same value for CSS animations etc. See AnimationControllerPrivate::beginAnimationUpdateTime() for something similar.

&gt; WebCore/page/FrameView.h:101
&gt; +    void requestAnimationFrames();

I don&apos;t really like the name (and &quot;Frames&quot; is really confusing in this context). serviceAnimations? processAnimations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329601</commentid>
    <comment_count>8</comment_count>
      <attachid>77944</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-05 09:29:47 -0800</bug_when>
    <thetext>Comment on attachment 77944
initial patch for discussion

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

&gt; WebKit/chromium/public/WebWidget.h:59
&gt; +    virtual void animate() = 0;

nit: add a comment describing when this should be called?

&gt; WebKit/chromium/public/WebWidgetClient.h:59
&gt; +    virtual void scheduleAnimation() { }

nit: please add a comment similar to the one above scheduleComposite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329649</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-05 10:37:12 -0800</bug_when>
    <thetext>Thanks for the feedback.  I&apos;ll address it and work on implementing webkitAnimationTime as a separate patch as it seems fairly independent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332037</commentid>
    <comment_count>10</comment_count>
      <attachid>78468</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-10 16:31:07 -0800</bug_when>
    <thetext>Created attachment 78468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332624</commentid>
    <comment_count>11</comment_count>
      <attachid>78468</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-11 13:56:44 -0800</bug_when>
    <thetext>Comment on attachment 78468
Patch

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

would be good to add tests for changing the display property (hiding/showing an element) from the animation callback of another element.

&gt; Source/WebCore/dom/Document.cpp:4959
&gt; +        m_requestAnimationFrameCallbacks = new Vector&lt;RefPtr&lt;RequestAnimationFrameCallback&gt; &gt;();

nit: a typedef might be nice?
typedef Vector&lt;RefPtr&lt;RequestAnimationFrameCallback&gt; &gt; RequestAnimationFrameCallbackList;

&gt; Source/WebCore/dom/Document.cpp:4990
&gt; +    // visibility so this code has to iterate carefully.

maybe just add a FIXME or something about the fact that we don&apos;t do this visibility test yet.

&gt; Source/WebCore/dom/Document.cpp:5008
&gt; +                callback-&gt;m_enabled = false;

m_enabled might be better if named m_firedOrCancelled (inverting the sense).

&gt; Source/WebCore/dom/Document.cpp:5023
&gt; +            m_requestAnimationFrameCallbacks-&gt;insert(callbacksAdded++, callbacks[i]);

any callback that is no longer enabled needs to be removed from this list.

maybe you even want to just loop over m_requestAnimationFrameCallbacks??

&gt; Tools/DumpRenderTree/chromium/WebViewHost.cpp:636
&gt; +    webkit_support::PostDelayedTask(invokeScheduleComposite, static_cast&lt;void*&gt;(this), 0);

isn&apos;t this cast unnecessary since &apos;this&apos; is a pointer type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332679</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-11 14:46:12 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 78468 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78468&amp;action=review
&gt; 
&gt; would be good to add tests for changing the display property (hiding/showing an element) from the animation callback of another element.

done

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4959
&gt; &gt; +        m_requestAnimationFrameCallbacks = new Vector&lt;RefPtr&lt;RequestAnimationFrameCallback&gt; &gt;();
&gt; 
&gt; nit: a typedef might be nice?
&gt; typedef Vector&lt;RefPtr&lt;RequestAnimationFrameCallback&gt; &gt; RequestAnimationFrameCallbackList;

done (and it does help a lot)

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4990
&gt; &gt; +    // visibility so this code has to iterate carefully.
&gt; 
&gt; maybe just add a FIXME or something about the fact that we don&apos;t do this visibility test yet.

FIXME added

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:5008
&gt; &gt; +                callback-&gt;m_enabled = false;
&gt; 
&gt; m_enabled might be better if named m_firedOrCancelled (inverting the sense).

done

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:5023
&gt; &gt; +            m_requestAnimationFrameCallbacks-&gt;insert(callbacksAdded++, callbacks[i]);
&gt; 
&gt; any callback that is no longer enabled needs to be removed from this list.
&gt; 
&gt; maybe you even want to just loop over m_requestAnimationFrameCallbacks??

right, done

&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/WebViewHost.cpp:636
&gt; &gt; +    webkit_support::PostDelayedTask(invokeScheduleComposite, static_cast&lt;void*&gt;(this), 0);
&gt; 
&gt; isn&apos;t this cast unnecessary since &apos;this&apos; is a pointer type?

gcc says the cast is unnecessary.  I just copy-pasted that from other code - looks like the original reference to webkit_support::PostDelayedTask() had the static_cast&lt;&gt; (http://trac.webkit.org/changeset/66701) and I&apos;m not sure why.  Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332696</commentid>
    <comment_count>13</comment_count>
      <attachid>78604</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-11 14:57:05 -0800</bug_when>
    <thetext>Created attachment 78604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337040</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-19 18:59:22 -0800</bug_when>
    <thetext>Committed r76194: &lt;http://trac.webkit.org/changeset/76194&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337060</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 19:24:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76194 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337069</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-19 19:52:55 -0800</bug_when>
    <thetext>Reverted r76194 for reason:

Caused mysterious compile failure on the chromium win build.webkit.org bots

Committed r76198: &lt;http://trac.webkit.org/changeset/76198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337551</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-20 13:23:51 -0800</bug_when>
    <thetext>Reverted due to https://bugs.webkit.org/show_bug.cgi?id=52837.  Will re-land after the fix for that bug lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337578</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-20 13:50:50 -0800</bug_when>
    <thetext>Committed r76278: &lt;http://trac.webkit.org/changeset/76278&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77944</attachid>
            <date>2011-01-04 16:19:10 -0800</date>
            <delta_ts>2011-01-10 16:31:03 -0800</delta_ts>
            <desc>initial patch for discussion</desc>
            <filename>bug-51218-20110104161909.patch</filename>
            <type>text/plain</type>
            <size>37586</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMTRiNWJiYWJjM2JiYmI2YzI4NGU1YjdiMjdkZDFlYzhmOWMzNzI0Li5lYzFlNTE5
YzdiNzY1YjlmYTNmMzk1NmY5MTg3MGRjYjFlZmZlMTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTEtMDEtMDQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbW96
aWxsYSdzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjE4CisKKyAgICAgICAgQWRkIHRlc3RzIGZvciB3
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuCisKKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9y
ZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwuaHRtbDog
QWRkZWQuCisgICAgICAgICAgVGVzdHMgdGhhdCBjYW5jZWxsaW5nIGEgY2FsbGJhY2sgYmVmb3Jl
IGl0IGZpcmVzIHByZXZlbnRzIHRoZSBjYWxsYmFjayBmcm9tIGZpcmluZy4KKyAgICAgICAgKiBm
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJh
bWUtY2FuY2VsMi5odG1sOiBBZGRlZC4KKyAgICAgICAgICBUZXN0cyBjYW5jZWxsaW5nIGEgY2Fs
bGJhY2sgZnJvbSB3aXRoaW4gYW5vdGhlciBjYWxsYmFjay4KKyAgICAgICAgKiBmYXN0L2FuaW1h
dGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFj
ay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAgICAgICBU
ZXN0cyByZWdpc3RlcmluZyBhIGNhbGxiYWNrIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAq
IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWw6IEFkZGVkLgorICAg
ICAgICAgIFRlc3RzIGJhc2ljIHVzZSBvZiB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuCisK
IDIwMTEtMDEtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
YW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYWQwMjcyNzEzYjcxZmRjODc5NDAx
NmM4ZWYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9y
ZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAK
K1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5p
bWF0aW9uLWZyYW1lLWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIxMGY3YjlmNjll
NjAxNmEzYzdhMjRkOTM1NzQ0ODhkODk5OTEwZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC5odG1sCkBA
IC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8c3BhbiBpZD0iZSI+UEFT
Uzwvc3Bhbj4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIGUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZSIpOwordmFyIGlkID0gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRp
b25GcmFtZShmdW5jdGlvbigpIHsKKyAgICBlLmlubmVySFRNTCA9ICJGQUlMIjsKK30sIGUpOwor
Cit3aW5kb3cud2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkKTsKKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNw
bGF5KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9u
L3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2VmMjJlOWE0MzFhZDAyNzI3MTNiNzFmZGM4Nzk0MDE2YzhlZjEy
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLWNhbmNlbDItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLWNhbmNlbDIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLWNhbmNlbDIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWMyZTkzZmQzMzU4NTZj
ZDYyNmY0YTYxZGNmZjQxZDM1NDZhMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi5odG1sCkBAIC0w
LDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8c3BhbiBpZD0iZSI+UEFTUzwv
c3Bhbj4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZSIpOwordmFyIHNlY29uZENhbGxiYWNrSWQ7CisKK3dpbmRvdy53ZWJraXRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LndlYmtpdENhbmNl
bFJlcXVlc3RBbmltYXRpb25GcmFtZShzZWNvbmRDYWxsYmFja0lkKTsKK30sIGUpOworCitzZWNv
bmRDYWxsYmFja0lkID0gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlv
bigpIHsKKyAgICBlLmlubmVySFRNTCA9ICAiRkFJTCI7Cit9LCBlKTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNwbGF5KCk7
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVl
c3QtYW5pbWF0aW9uLWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0
aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYy
MmU5YTQzMWFkMDI3MjcxM2I3MWZkYzg3OTQwMTZjOGVmMTJmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
YW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFt
ZS13aXRoaW4tY2FsbGJhY2stZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYWQw
MjcyNzEzYjcxZmRjODc5NDAxNmM4ZWYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRoaW4tY2FsbGJhY2st
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUt
d2l0aGluLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVhMzY2ZmVlMDQ1ODM0Mzk0NWQwMGZj
OTY1YWU4NTlkNTM1MmFhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5p
bWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay5odG1sCkBAIC0w
LDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8c3BhbiBpZD0iZSI+RkFJTDwv
c3Bhbj4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZSIpOwordmFyIHNhbWVGcmFtZTsKK3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAgc2FtZUZyYW1lID0gdHJ1ZTsKK30sIGUpOwor
d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHsKKyAgICB3aW5k
b3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAgICAgICBlLmlu
bmVySFRNTCA9IHNhbWVGcmFtZSA/ICJGQUlMIiA6ICJQQVNTIjsKKyAgICB9LCBlKTsKK30sIGUp
Oword2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHsKKyAgICBz
YW1lRnJhbWUgPSBmYWxzZTsKK30sIGUpOworCisvLyBUaGlzIHNob3VsZCBmaXJlIHRoZSB0aHJl
ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzLCBidXQgbm90IHRoZSBvbmUgZHluYW1pY2Fs
bHkgcmVnaXN0ZXJlZC4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZGlzcGxheSgpOworLy8gVGhpcyBzaG91bGQgZmlyZSB0aGUgZHlu
YW1pY2FsbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGlzcGxheSgpOworPC9zY3JpcHQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24t
ZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDY3YTk3NzQyMTY4NWU0ZjFkYzZiN2U5ZDAyYjBlOThk
NjRjNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPHNwYW4gaWQ9ImUiPkZBSUw8L3NwYW4+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKK3ZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImUiKTsKK3dpbmRvdy53
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAgZS5pbm5lckhUTUw9
IlBBU1MiOworfSwgZSk7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmRpc3BsYXkoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkwMDk2YjAzMjZkMTI3NmY5OGNi
ZDQ3YTM0YTljMjU4MjhhMDM4MjcuLmU3ZjVhYzI5YTkwZDRhODU0MWYwYzMxMjhjMzhmN2UwZmFl
OGQzMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMS0wNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBtb3ppbGxhJ3MgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIEFQSQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyMTgKKworICAgICAg
ICBBZGRzIHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0IHRvIGNocm9taXVtJ3Mg
RFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
OgorICAgICAgICAoaW52b2tlU2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViVmlld0hv
c3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwYWludEludmFs
aWRhdGVkUmVnaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3
SG9zdC5oOgorCiAyMDExLTAxLTAzICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDg0OTMxMmM0YjA1ZWRiODIzNGZjMGM3NTYx
NGJhOTYxZDAyOGYxMGEuLjBiYjYzMmE1NzU0OWMwYzRlODI1YjIyYTQ2OTIzNGQxN2Q2MjNmNzUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAg
LTYzNyw2ICs2MzcsMTcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6c2NoZWR1bGVDb21wb3NpdGUoKQog
ICAgIGRpZEludmFsaWRhdGVSZWN0KGNsaWVudFJlY3QpOwogfQogCitzdGF0aWMgdm9pZCBpbnZv
a2VTY2hlZHVsZUNvbXBvc2l0ZSh2b2lkKiBjb250ZXh0KQoreworICAgIFdlYlZpZXdIb3N0KiB3
dmggPSBzdGF0aWNfY2FzdDxXZWJWaWV3SG9zdCo+KGNvbnRleHQpOworICAgIHd2aC0+c2NoZWR1
bGVDb21wb3NpdGUoKTsKK30KKwordm9pZCBXZWJWaWV3SG9zdDo6c2NoZWR1bGVBbmltYXRpb24o
KQoreworICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soaW52b2tlU2NoZWR1bGVD
b21wb3NpdGUsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7Cit9CisKIHZvaWQgV2ViVmll
d0hvc3Q6OmRpZEZvY3VzKCkKIHsKICAgICBtX3NoZWxsLT5zZXRGb2N1cyh3ZWJXaWRnZXQoKSwg
dHJ1ZSk7CkBAIC0xNDU1LDYgKzE0NjYsNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwYWludFJlY3Qo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKIAogdm9pZCBXZWJWaWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRl
ZFJlZ2lvbigpCiB7CisgICAgd2ViV2lkZ2V0KCktPmFuaW1hdGUoKTsKICAgICB3ZWJXaWRnZXQo
KS0+bGF5b3V0KCk7CiAgICAgV2ViU2l6ZSB3aWRnZXRTaXplID0gd2ViV2lkZ2V0KCktPnNpemUo
KTsKICAgICBXZWJSZWN0IGNsaWVudFJlY3QoMCwgMCwgd2lkZ2V0U2l6ZS53aWR0aCwgd2lkZ2V0
U2l6ZS5oZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmgKaW5kZXggMjBiMjljMGQ5Y2I2MTA5ZWY1NTVhMDA4NDcwYjNjZWQxNTA4ZTk4OC4uYWQxMTZj
ZTdkYzE1ZjczZTk0M2MzOGQxY2JjZDY3OTQxZTVjNWRlOSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCkBAIC0xNTEsNiArMTUxLDcgQEAgY2xhc3MgV2Vi
Vmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpX
ZWJGcmFtZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViS2l0OjpXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbFJlY3QoaW50IGR4
LCBpbnQgZHksIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRCbHVyKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBXZWJLaXQ6OldlYkN1cnNv
ckluZm8mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggOTVmMjkxMzMwYmJmMWU0NTE3NDAyZGNkMDdmNGQzMjM1NThhOWJlZC4uZGVhZmZl
Njk3MzViZTkxNWM5MDA1NGQzZGEyYTE4NDYxNzVlZDY4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0w
MS0wNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBtb3ppbGxhJ3Mg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTEyMTgKKworICAgICAgICBUZXN0czogZmFzdC9hbmltYXRpb24v
cmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
YW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbDIuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxi
YWNrLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lcyk6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgICogZG9tL1JlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2s6On5SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayk6Cisg
ICAgICAgICogZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbDogQWRkZWQuCisg
ICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlD
aHJvbWVDbGllbnQ6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3
ZWJraXRBbmltYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6d2Via2l0
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6d2Vi
a2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRv
dy5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjaGVkdWxlQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lcyk6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0V2lu
ZG93Lmg6CisKIDIwMTEtMDEtMDQgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNzBkM2JkZjJhMjQ3ZWYz
YjQwNGYyOGU5YTI1NzQwMDI5NGQwZmJmOS4uNzdjYWExZTYwNmZkYWZhMTU5NzZmN2NmZjNmODE1
NDg2MDNkOWU0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTc1LDYgKzc1LDcgQEAKICAgICAgICAgICAgICdkb20vUHJvZ3Jl
c3NFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9SYW5nZS5pZGwnLAogICAgICAgICAgICAg
J2RvbS9SYW5nZUV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ2RvbS9SZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ2RvbS9UZXh0LmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL1RleHRFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Ub3VjaC5pZGwn
LApAQCAtMTMxMSw2ICsxMzEyLDcgQEAKICAgICAgICAgICAgICdkb20vUmFuZ2UuaCcsCiAgICAg
ICAgICAgICAnZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oJywKICAgICAgICAgICAgICdkb20vUmFu
Z2VFeGNlcHRpb24uaCcsCisgICAgICAgICAgICAnZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrLmgnLAogICAgICAgICAgICAgJ2RvbS9SYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCcsCiAg
ICAgICAgICAgICAnZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAg
ICAnZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDc2YjBhNGZl
OWI3ODQ2ZTk0NDU3ZmZjOWM5YTJmNGQ5MDEwZWY3MzEuLmEzMWIxMWRlMjM4YzIxYTU5MjU3ZWE4
OTkxYTNmNGIwZjk2YzM3ODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTEyMCw2ICsxMjAsNyBAQAogI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCkBAIC00MTksNiArNDIw
LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsLCBi
b29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MLCBjb24KICAgICAsIG1fbG9hZEV2ZW50RGVsYXlUaW1l
cih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJGaXJlZCkKICAgICAsIG1fZGly
ZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX3dyaXRpbmdNb2RlU2V0
T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrSWQoZmFsc2UpCiB7CiAgICAgbV9kb2N1bWVudCA9IHRoaXM7CiAKQEAgLTQ4NzAsNiAr
NDg3Miw4MyBAQCB2b2lkIERvY3VtZW50Ojpsb2FkRXZlbnREZWxheVRpbWVyRmlyZWQoVGltZXI8
RG9jdW1lbnQ+KikKICAgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7
CiB9CiAKK2ludCBEb2N1bWVudDo6d2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQ
dHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrLCBFbGVtZW50KiBlKQor
eworICAgIGlmICghbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MpCisgICAgICAgIG1f
cmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzID0gbmV3IFZlY3RvcjxSZWZQdHI8UmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+ID4oKTsKKyAgICBpbnQgaWQgPSBtX3JlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrSWQrKzsKKyAgICBjYWxsYmFjay0+bV9lbmFibGVkID0gdHJ1ZTsK
KyAgICBjYWxsYmFjay0+bV9pZCA9IGlkOworICAgIGNhbGxiYWNrLT5tX2VsZW1lbnQgPSBlOwor
ICAgIG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLT5hcHBlbmQoY2FsbGJhY2spOwor
ICAgIGlmIChGcmFtZVZpZXcqIHYgPSB2aWV3KCkpCisgICAgICAgIHYtPnNjaGVkdWxlQW5pbWF0
aW9uKCk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIERvY3VtZW50Ojp3ZWJraXRDYW5jZWxS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW50IGlkKQoreworICAgIGlmICghbV9yZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFja3MpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLT5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPmF0KGkpLT5tX2lk
ID09IGlkKSB7CisgICAgICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcy0+
YXQoaSktPm1fZW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9yZXF1ZXN0QW5pbWF0aW9u
RnJhbWVDYWxsYmFja3MtPnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBEb2N1bWVudDo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lcygpCit7
CisgICAgaWYgKCFtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcykKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIFdlIHdhbnQgdG8gcnVuIHRoZSBjYWxsYmFjayBmb3IgYWxsIGVsZW1lbnRz
IGluIHRoZSBkb2N1bWVudCB0aGF0IGhhdmUgcmVnaXN0ZXJlZAorICAgIC8vIGZvciBhIGNhbGxi
YWNrIGFuZCB0aGF0IGFyZSB2aXNpYmxlLiAgUnVubmluZyB0aGUgY2FsbGJhY2tzIGNhbiBjYXVz
ZSBuZXcgY2FsbGJhY2tzCisgICAgLy8gdG8gYmUgcmVnaXN0ZXJlZCwgZXhpc3RpbmcgY2FsbGJh
Y2tzIHRvIGJlIGNhbmNlbGxlZCwgYW5kIGVsZW1lbnRzIHRvIGdhaW4gb3IgbG9zZQorICAgIC8v
IHZpc2liaWxpdHkgc28gdGhpcyBjb2RlIGhhcyB0byBpdGVyYXRlIGNhcmVmdWxseS4KKworICAg
IC8vIEZpcnN0LCBnZW5lcmF0ZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNvbnNpZGVyLiAgQ2Fs
bGJhY2tzIHJlZ2lzdGVyZWQgZnJvbSB0aGlzIHBvaW50CisgICAgLy8gb24gYXJlIGNvbnNpZGVy
ZWQgb25seSBmb3IgdGhlICJuZXh0IiBmcmFtZSwgbm90IHRoaXMgb25lLgorICAgIFZlY3RvcjxS
ZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+ID4gY2FsbGJhY2tzKCptX3JlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcyk7CisKKyAgICAvLyBGaXJpbmcgdGhlIGNhbGxiYWNr
IG1heSBjYXVzZSB0aGUgdmlzaWJpbGl0eSBvZiBvdGhlciBlbGVtZW50cyB0byBjaGFuZ2UuICBU
byBhdm9pZAorICAgIC8vIG1pc3NpbmcgYW55IGNhbGxiYWNrcywgd2Uga2VlcCBpdGVyYXRpbmcg
dGhyb3VnaCB0aGUgbGlzdCBvZiBjYW5kaWF0ZSBjYWxsYmFja3MgYW5kIGZpcmluZworICAgIC8v
IHRoZW0gdW50aWwgbm90aGluZyBuZXcgYmVjb21lcyB2aXNpYmxlLgorICAgIGJvb2wgZmlyZWRD
YWxsYmFjazsKKyAgICBkbyB7CisgICAgICAgIGZpcmVkQ2FsbGJhY2sgPSBmYWxzZTsKKyAgICAg
ICAgLy8gQSBwcmV2aW91cyBpdGVyYXRpb24gbWF5IGhhdmUgaW52YWxpZGF0ZWQgc3R5bGUgKG9y
IGxheW91dCkuICBVcGRhdGUgc3R5bGVzIGZvciBlYWNoIGl0ZXJhdGlvbgorICAgICAgICAvLyBm
b3Igbm93IHNpbmNlIGFsbCB3ZSBjaGVjayBpcyB0aGUgZXhpc3RlbmNlIG9mIGEgcmVuZGVyZXIu
CisgICAgICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrKiBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChjYWxsYmFjay0+bV9lbmFibGVkICYmICghY2FsbGJhY2stPm1fZWxlbWVudCB8
fCBjYWxsYmFjay0+bV9lbGVtZW50LT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgIGNh
bGxiYWNrLT5tX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+aGFu
ZGxlRXZlbnQoKTsKKyAgICAgICAgICAgICAgICBmaXJlZENhbGxiYWNrID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFja3MucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoZmlyZWRDYWxsYmFjayk7CisK
KyAgICAvLyBBbnkgY2FsbGJhY2tzIGxlZnQgaW4gdGhlIGNhbGxiYWNrcyBhcnJheSB0aGF0IGhh
dmUgbm90IGJlZW4gY2FuY2VsbGVkIHdlcmUgc2tpcHBlZCBhbmQgaGF2ZSB0byBiZSBhZGRlZAor
ICAgIC8vIGJhY2sgdG8gdGhlIHBlbmRpbmcgbGlzdC4gIFRoZXNlIGdvIGF0IHRoZSBzdGFydCBv
ZiB0aGUgbGlzdCBzaW5jZSB0aGV5IHdlcmUgcmVnaXN0ZXJlZCBiZWZvcmUgYW55IGNhbGxiYWNr
cworICAgIC8vIHJlZ2lzdGVyZWQgdGhpcyBmcmFtZSB3ZXJlLgorICAgIHNpemVfdCBjYWxsYmFj
a3NBZGRlZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGNhbGxiYWNrc1tpXS0+bV9lbmFibGVkKQorICAgICAgICAg
ICAgbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPmluc2VydChjYWxsYmFja3NBZGRl
ZCsrLCBjYWxsYmFja3NbaV0pOworICAgIH0KKworICAgIC8vIEluIG1vc3QgY2FzZXMgd2UgZXhw
ZWN0IHRoaXMgbGlzdCB0byBiZSBlbXB0eSwgc28gbm8gbmVlZCB0byBrZWVwIGFyb3VuZCB0aGUg
dmVjdG9yJ3MgZGVmYXVsdCBidWZmZXIuCisgICAgaWYgKCFtX3JlcXVlc3RBbmltYXRpb25GcmFt
ZUNhbGxiYWNrcy0+c2l6ZSgpKQorICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrcy5jbGVhcigpOworICAgIGVsc2UgaWYgKEZyYW1lVmlldyogdiA9IHZpZXcoKSkKKyAgICAg
ICAgdi0+c2NoZWR1bGVBbmltYXRpb24oKTsKK30KKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiBQYXNzUmVmUHRyPFRvdWNoPiBEb2N1bWVudDo6Y3JlYXRlVG91Y2goRE9NV2luZG93KiB3aW5k
b3csIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBpZGVudGlmaWVyLCBpbnQgcGFnZVgsIGludCBw
YWdlWSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBFeGNlcHRpb25Db2RlJikgY29uc3QKIHsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCmluZGV4IDdlNzk2N2YxYmE5ZmY3NTcxZGU5NGY5N2I0MTM3M2QyMmU0MjUyNDYuLjM0YjA1
MDBkMWU5MzFhNzU2YjlhYjBiZmM2ZmY4NjMzYzU4Y2I3OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTA2LDYgKzEw
Niw3IEBAIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFByb2Nlc3NpbmdJbnN0cnVj
dGlvbjsKIGNsYXNzIFJhbmdlOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CitjbGFz
cyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIGNsYXNzIFJlbmRlckFyZW5hOwogY2xh
c3MgUmVuZGVyVmlldzsKIGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjsKQEAgLTEwNjMs
NiArMTA2NCwxMCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBEb2N1bWVudFRpbWluZyogdGltaW5n
KCkgY29uc3QgeyByZXR1cm4gJm1fZG9jdW1lbnRUaW1pbmc7IH0KIAorICAgIGludCB3ZWJraXRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFjaz4sIEVsZW1lbnQqKTsKKyAgICB2b2lkIHdlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25G
cmFtZShpbnQgaWQpOworICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lcygpOworCiAgICAg
Ym9vbCBtYXlDYXVzZUZsYXNoT2ZVbnN0eWxlZENvbnRlbnQoKSBjb25zdDsKIAogICAgIHZvaWQg
aW5pdEROU1ByZWZldGNoKCk7CkBAIC0xMzgwLDYgKzEzODUsOSBAQCBwcml2YXRlOgogCiAgICAg
RG9jdW1lbnRUaW1pbmcgbV9kb2N1bWVudFRpbWluZzsKICAgICBSZWZQdHI8TWVkaWFRdWVyeU1h
dGNoZXI+IG1fbWVkaWFRdWVyeU1hdGNoZXI7CisKKyAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gPiA+IG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tzOworICAgIGludCBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrSWQ7CiB9
OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudDo6RG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWlucyhB
dG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCA5YmFkNjZmY2ZkNGU2MmRiYTJkZGQw
N2JiYjdlNmE1ZjU3NzIyNjM4Li4yMWYzMjQyNjU5NWJiNzNkYjhhNDE5ODNkYjI0ODZhNWU2MTI0
MWVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9kb20v
RWxlbWVudC5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIERPTVN0cmluZ01hcDsKIGNsYXNzIERP
TVRva2VuTGlzdDsKIGNsYXNzIEVsZW1lbnRSYXJlRGF0YTsKIGNsYXNzIEludFNpemU7CitjbGFz
cyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIAogZW51bSBTcGVsbGNoZWNrQXR0cmli
dXRlU3RhdGUgewogICAgIFNwZWxsY2hlY2tBdHRyaWJ1dGVUcnVlLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmggYi9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEu
aAppbmRleCBmN2YzMGJiNzA4ZDFmZTgzNWVlNjhmYWE5MDU3NjNiYjY0ODg2YzQ3Li44NWRlNzVk
YTI4OTI3YjJjZDM0MTk4ZDU5YmJhZGU3MDQ3ZDg0NTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9FbGVtZW50UmFyZURhdGEuaAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaApA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRhdGFzZXRET01TdHJpbmdNYXAuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiUmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDYgKzQ2LDggQEAgcHVibGljOgogCiAgICAgT3du
UHRyPERhdGFzZXRET01TdHJpbmdNYXA+IG1fZGF0YXNldERPTVN0cmluZ01hcDsKICAgICBPd25Q
dHI8Q2xhc3NMaXN0PiBtX2NsYXNzTGlzdDsKKworICAgIFJlZlB0cjxSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVDYWxsYmFjaz4gbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIH07CiAKIGlu
bGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmggYi9XZWJDb3JlL2Rv
bS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MGU0NDBjMzFi
ZDM3NmI0N2I3NGM0NjZkZDNlNThlODExMTgzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2RvbS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrX2gKKyNkZWZpbmUgUmVxdWVzdEFuaW1h
dGlvbkZyYW1lQ2FsbGJhY2tfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayA6IHB1Ymxp
YyBSZWZDb3VudGVkPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRXZlbnQoKSA9IDA7CisKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBp
bnQgbV9pZDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworfTsKKworfQorCisjZW5k
aWYgLy8gUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tfaAorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5pZGwgYi9XZWJDb3JlL2RvbS9S
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYzMjU4YjM1NzNl
NTc5MjM4YWJkY2QxNjkxYjFlMzlkMTg2NDM1YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
ZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbApAQCAtMCwwICsxLDM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9k
dWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25s
eQorICAgIF0gUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2t7CisgICAgICAgIGJvb2xlYW4g
aGFuZGxlRXZlbnQoKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmggYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCA1NjBlYTkx
MTBmMjc0ODgwZmNmZTRhODk2ZjQwZDViNTY5OTA3MWI5Li4zNWNhNzRiNmJhZGU3OWVlZGI2NDJm
MTM5NzJlNGVlYTgwOGIwMTJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAorKysgYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTU3LDYgKzE1Nyw3
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFNpemUmKSB7IH0KICNlbmRp
ZgorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgfQogCiAgICAgdmlydHVh
bCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1
cm4gcDsgfQogICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0
JiByKSBjb25zdCB7IHJldHVybiByOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcCBiL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGE4MDEwNjUwZGUyNDNkZjVjYjhl
ODYwMmVhYzE3ZDliZGVjMzJjYjguLmRkMWZhM2FiYmZlYTVjNGM3MDgxMzcxNTI3ODE5ZDNjNGJh
MjdmMmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCkBAIC00NDgsNiArNDQ4LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiAgICAgbV9jbGllbnQtPnNldEN1cnNvcihjdXJzb3Ip
OwogfQogCit2b2lkIENocm9tZTo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIG1fY2xpZW50
LT5zY2hlZHVsZUFuaW1hdGlvbigpOworfQorCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiBO
b3RpZmljYXRpb25QcmVzZW50ZXIqIENocm9tZTo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCkgY29u
c3QKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1dlYkNvcmUvcGFnZS9D
aHJvbWUuaAppbmRleCA5M2I4YzRhNzEyZDY3ZjA4MGEyNTRiNzdlMGZhNmIzM2ZiNGMyODliLi43
YTRmODA4OWE4ODIzODE1YmY5N2U4MjlhOTk4ZDA1ZGUwYjA0MmRmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC03OCw2ICs3
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VD
bGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmlt
YXRpb24oKTsKIAogICAgICAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzZWI0OGEwNTZmODkxMjJhZDFkZWQ5MmNh
NDRkNGU0NDU5MzM2NDA4Li5hMDYyMmM1ZGUyYzlhYjMwYjJjZjM5MjE3NzEwNzk1MDg2MjBiZDIy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCkBAIC0xNDksNiArMTQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQo
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5n
ZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJz
b3ImKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsK
ICAgICAgICAgLy8gRW5kIG1ldGhvZHMgdXNlZCBieSBIb3N0V2luZG93LgogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBWaWV3cG9ydEFy
Z3VtZW50cyYpIGNvbnN0IHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAzNDk3ZjEzMTc3MGE1ZWRiZDJm
Y2IwNzZhYTYwYTczMzY1M2Y1YjliLi41M2JlMjc1M2IxNDNjZTg5ZWI2MWM0NTdmYzkxYWJiMTA2
ZWM3NWZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgIlBlcmZv
cm1hbmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTE0NjQsNiArMTQ2NSwyNyBAQCB2b2lkIERP
TVdpbmRvdzo6Y2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKQogICAgIERPTVRpbWVyOjpyZW1v
dmVCeUlkKGNvbnRleHQsIHRpbWVvdXRJZCk7CiB9CiAKK0RPTVRpbWVTdGFtcCBET01XaW5kb3c6
OndlYmtpdEFuaW1hdGlvblRpbWUoKQoreworICAgIC8vIEZJWE1FOiBNdWx0aXBsZSBxdWVyaWVz
IG9mIHRoaXMgdmFsdWUgd2l0aGluIHRoZSBzYW1lIHNjcmlwdCBleGVjdXRpb24gcnVuCisgICAg
Ly8gc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZSwgc28gd2UgbmVlZCB0byBjYWxjdWxhdGUg
dGhpcyB2YWx1ZSBsYXppbHkgYW5kCisgICAgLy8gc3RvcmUgaXQuCisgICAgcmV0dXJuIGNvbnZl
cnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoV1RGOjpjdXJyZW50VGltZSgpKTsKK30KKworaW50IERP
TVdpbmRvdzo6d2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrLCBFbGVtZW50KiBlKQoreworICAgIGlmIChE
b2N1bWVudCogZCA9IGRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBkLT53ZWJraXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssIGUpOworICAgIHJldHVybiAwOworfQorCit2b2lkIERP
TVdpbmRvdzo6d2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCkKK3sKKyAg
ICBpZiAoRG9jdW1lbnQqIGQgPSBkb2N1bWVudCgpKQorICAgICAgICBkLT53ZWJraXRDYW5jZWxS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaWQpOworfQorCiBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGlmICghRXZlbnRUYXJn
ZXQ6OmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmgKaW5kZXggMWM4NGYzY2FhZDg1NTFmODc5ZTg5OGZjNDU1MTYxZDIyNWRiODg2Mi4uNDkw
ZThhYjgzYjllZWM4ZmViZDBmZDdjNDgzM2RmYjRhZmY2ODMzMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBET01XaW5kb3dfaAogI2RlZmluZSBET01XaW5kb3dfaAogCisj
aW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTU3LDYgKzU4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKICAg
ICBjbGFzcyBQZXJmb3JtYW5jZTsKICAgICBjbGFzcyBQb3N0TWVzc2FnZVRpbWVyOworICAgIGNs
YXNzIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOwogICAgIGNsYXNzIFNjaGVkdWxlZEFj
dGlvbjsKICAgICBjbGFzcyBTY3JlZW47CiAgICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OwpAQCAtMjM3LDYgKzIzOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBz
ZXRJbnRlcnZhbChQYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4sIGludCB0aW1lb3V0LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKTsK
IAorICAgICAgICBET01UaW1lU3RhbXAgd2Via2l0QW5pbWF0aW9uVGltZSgpOworICAgICAgICBp
bnQgd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2s+LCBFbGVtZW50Kik7CisgICAgICAgIHZvaWQgd2Via2l0Q2FuY2VsUmVx
dWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCk7CisKICAgICAgICAgLy8gRXZlbnRzCiAgICAgICAg
IC8vIEV2ZW50VGFyZ2V0IEFQSQogICAgICAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiwgYm9vbCB1c2VDYXB0dXJlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggZjNhYTdiYTViZDkwZjI2MWU4
ZTVlYmM0OGU0YWI5MTVjMGQ5NjdhYy4uZjllODE3NmViOGQzYTQ4N2VlYjA0ODRjZWVlNTg2NjA1
MGU0ZTQ2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTIzNiw2ICsyMzYsMTEgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gRE9NU3RyaW5nIGNv
ZGUsIGluIGxvbmcgdGltZW91dCk7CiAgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbiBsb25n
IGhhbmRsZSk7CiAKKyAgICAgICAgLy8gV2ViS2l0IGFuaW1hdGlvbiBleHRlbnNpb25zCisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01UaW1lU3RhbXAgd2Via2l0QW5pbWF0aW9uVGltZTsK
KyAgICAgICAgbG9uZyB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW4gW0NhbGxiYWNrXSBS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayBjYWxsYmFjaywgaW4gRWxlbWVudCBlbGVtZW50
KTsKKyAgICAgICAgdm9pZCB3ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW4gbG9u
ZyBpZCk7CisKICAgICAgICAgLy8gQmFzZTY0CiAgICAgICAgIERPTVN0cmluZyBhdG9iKGluIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHN0cmluZykKICAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NmVhOWM3NGEyY2YwMmVkYzZk
ZTA0NjZkNmRkNzQyYmQzYzhkMzc2Li42YjMwYmE1NGZmNTJkMGQyMmVmZDZkOTYzZjI4MDg2Y2Uw
YjdkZmE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzM4LDYgKzMzOCwxMiBAQCB2b2lkIEZyYW1lVmll
dzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAjZW5kaWYKIH0KIAordm9p
ZCBGcmFtZVZpZXc6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoaG9zdFdpbmRvdygp
KQorICAgICAgICBob3N0V2luZG93KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Cit9CisKIHZvaWQg
RnJhbWVWaWV3OjpzZXRNYXJnaW5XaWR0aChpbnQgdykKIHsKICAgICAvLyBtYWtlIGl0IHVwZGF0
ZSB0aGUgcmVuZGVyaW5nIGFyZWEgd2hlbiBzZXQKQEAgLTE2MTEsNiArMTYxNywxMiBAQCB2b2lk
IEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICAgICBtX2RlbGF5ZWRMYXlvdXQgPSBm
YWxzZTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnJlcXVlc3RBbmltYXRpb25GcmFtZXMoKQorewor
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVzKCk7Cit9CisKIGJvb2wgRnJhbWVWaWV3Ojppc1RyYW5zcGFy
ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pc1RyYW5zcGFyZW50OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4
IDE3MTJhM2U2OTMzY2NmOGZkMTExYjMxMjJlZDJhYjdkYWZjOTI4ZjkuLjIzNDhmMmI4MmQ5ZmM5
NzU4ODk5YTY2OGM2ZjgwY2ZjMDJmYTNjYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTYyLDYgKzYyLDcgQEAg
cHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwogCiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJGcmFtZSgpOwpAQCAtOTcs
NiArOTgsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIG5lZWRzRnVsbFJlcGFpbnQoKSBjb25zdCB7
IHJldHVybiBtX2RvRnVsbFJlcGFpbnQ7IH0KIAorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZy
YW1lcygpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9I
b3N0V2luZG93LmggYi9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCA3ODgyZDQ4
ZmI0YzI5MWJiMjM0ZjQ3YTgxODRjZTBhYWY4ZjE5ZDVhLi5kYjUxOGNlYzJiNmE4ZWVhMDJlNzEx
MzBjNjQyMGM5NmJmYWM1ZjFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtNjYsNiArNjYsOCBA
QCBwdWJsaWM6CiAKICAgICAvLyBSZXF1ZXN0IHRoYXQgdGhlIGN1cnNvciBjaGFuZ2UuCiAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA2ZWYwNThjMzNlMmI2MTU4OWNhMzhhMzBlNDIxNWU3ODBlZmJh
MmVmLi5jZTY0NjdiMzI0YmQ4YWU5YmIzMzEzYWI1NWQxYTQxNTI4YjgzMWZjIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wMS0wNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBtb3ppbGxhJ3MgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyMTgKKworICAg
ICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xp
ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVudDo6c2NoZWR1bGVBbmltYXRp
b24pOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAqIHNyYy9D
aHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAqIHNy
Yy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5oOgorCiAyMDExLTAxLTAzICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4K
IAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0aGUgQ2hyb21pdW0gTGludXggUmVsZWFzZSBidWls
ZCBhZnRlciBjaGFuZ2VzZXQgNzQ4OTUgPGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
Lzc0ODk1Pi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IGQwMTAyNzA2NWM5ZTkw
YzE0NzU2ZTc3ODdjYTI2NmRmNjdlYWVjM2IuLjBkYTQyNmQ3N2E4MDUyYTZkYTZiNzAxNTM1Mzlj
NjcxMWFjNDc2ODUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNTYsNiArNTYs
OCBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIHJlc2l6ZSB0aGUgV2ViV2lkZ2V0LgogICAg
IHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpID0gMDsKIAorICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlKCkgPSAwOworCiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lk
Z2V0LiAgVGhpcyBNVVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1h
eSByZXN1bHQgaW4gY2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4K
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0Q2xpZW50LmgKaW5kZXggMzczNDI2ZGY0ZjY4YzcxMzkxM2Y5ZTcyOGNlOTkwMGRlNjYz
YzdhYy4uZWFiOTNhOWUwMzllNjMzZWZhMDk5ZjY4YWRlNzAxOTBmZTU0NmExNiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCkBAIC01Niw2ICs1Niw4IEBAIHB1Ymxp
YzoKICAgICAvLyBDYWxsZWQgd2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpjb21wb3NpdGUgaXMg
cmVxdWlyZWQKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIAorICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgfQorCiAgICAgLy8gQ2FsbGVkIHdo
ZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBmb2N1cywgcmVzcGVjdGl2ZWx5LgogICAg
IHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRCbHVyKCkg
eyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCAyOGQ3OGQw
YzhhYTYyYjkyMzM4Yzk4NjQyYmQ5MGFmOWZiNTdiMzZkLi40YWIzOGM3MmNmM2I5OGVhNGUxOTNk
YWIxNTk4NjJkMGRhZTE2MjA3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKQEAgLTUzOCw2ICs1MzgsMTEgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlk
YXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QKICAgICBp
bnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3codXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKIH0KIAor
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCit7CisgICAgbV93ZWJW
aWV3LT5jbGllbnQoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKK30KKwogdm9pZCBDaHJvbWVDbGll
bnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IElu
dFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IGIwMjRiYzAxZWNjOTAyNGJjZGNiNTA1
MTI4OGEzMmIzNzIyMjA0MWUuLjNlYjhhZDg1OTA3ZDU0YmE2NjZmYjdiY2QwNGNmM2MxNmU0OWJk
MGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0xMDUsNiArMTA1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRl
bnRzQW5kV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAgICAg
dmlydHVhbCB2b2lkIHNjcm9sbCgKICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Njcm9sbCwKICAgICAgICAg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHAKaW5kZXggMDg1YTE1NzVlNTRiZjBlN2E0YWM4ZTU4NzhhMDM4NjA1
ODkyZTVkOS4uNGE3MzQ2MjYwYmVhNjA2NGRkOTVlNWFiN2RkN2I5ZGI1YzVhOGFiYSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNTEsNiArMTUxLDEwIEBA
IHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAg
ICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoKQoreworfQorCiB2b2lk
IFdlYlBvcHVwTWVudUltcGw6OmxheW91dCgpCiB7CiB9CkBAIC0yOTQsNiArMjk4LDEwIEBAIHZv
aWQgV2ViUG9wdXBNZW51SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0CiAgICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KHVw
ZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2NoZWR1
bGVBbmltYXRpb24oKQoreworfQorCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnNjcm9sbChjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmgKaW5kZXggMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMyMmUwNTFmOTA0MjY0Yy4uNTljZGE4
ZmMyYTAyNGM0NmM3MjY0NDE4ODc5MGJhOTMyYjg0YTljMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXpl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CkBAIC0xMDQsNiArMTA1LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCk7
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbCgKICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
ZDc3YTViM2Y2MmYzZjk3ZTY0MzVmOWMxNDUwOWVkMGI0OTlhMWU2Ny4uYTQyYzEwOWMxMmYxNjVi
NzcwYmZmMDc3M2U4NDQxZWM3YjM3NWY4YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKQEAgLTk3Nyw2ICs5NzcsMTYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdl
YlNpemUmIG5ld1NpemUpCiAjZW5kaWYKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZSgp
Cit7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBp
ZiAod2ViZnJhbWUpIHsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1l
VmlldygpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPnJlcXVlc3RBbmlt
YXRpb25GcmFtZXMoKTsKKyAgICB9Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiB7
CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCA4MGFiZjgxM2VlYmY5NjIxNjVlMjBlOTk1MmJkZDY5Y2Fj
MDJmMWRhLi40NGI3YWJmZTFhNjEyODE5MDE0ZDU2ZjI1MTNlZmZjOGVjMTkwMTcyIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1f
c2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOworICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78468</attachid>
            <date>2011-01-10 16:31:07 -0800</date>
            <delta_ts>2011-01-11 14:57:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51218-20110110163105.patch</filename>
            <type>text/plain</type>
            <size>42668</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ZjhlNzgxMWViNTRiYTc3MThmNGZlNjMyMGMyMzgzZjY2NWFjNTFiLi4xZDcyZjQz
ZDRhYjMzOGM2NTFjNDljNmNlMDI4ODQ5MGRlMDYwZDhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDEtMTAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbW96
aWxsYSdzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjE4CisKKyAgICAgICAgVGVzdHMgZm9yIHdpbmRv
dy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKS4gIFRoZSBuZXcgdGVzdHMKKyAgICAgICAg
YXJlIGluIHRoZSBTa2lwcGVkIGxpc3RzIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc2V0Cisg
ICAgICAgIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgLSB3aGljaCBpcyBjdXJyZW50
bHkgYWxsIGJ1dCBjaHJvbWl1bS4KKworICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLWNhbmNlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC5odG1sOiBBZGRlZC4K
KyAgICAgICAgICAgIFRlc3RzIGNhbmNlbGxpbmcgYSBjYWxsYmFjayB3aXRoaW4gYSB3ZWJraXRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSBjYWxsYmFjay4KKyAgICAgICAgKiBmYXN0L2FuaW1hdGlv
bi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi5o
dG1sOiBBZGRlZC4KKyAgICAgICAgICAgIFRlc3RzIGludGVyYWN0aW9ucyBiZXR3ZWVuIG11bHRp
cGxlIHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGNhbGxiYWNrcy4KKyAgICAgICAgKiBm
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWw6
IEFkZGVkLgorICAgICAgICAgICAgVGVzdHMgdGhlIGJhc2ljIHVzZSBvZiB3aW5kb3cud2Via2l0
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVz
dC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxiYWNrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNh
bGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAgICAgVGVzdHMgc2V0dGluZyBvbmUgd2Via2l0
LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGNhbGxiYWNrIHdpdGhpbiBhbm90aGVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NraXBwZWQ6CisKIDIwMTEtMDEtMTAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5j
ZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmlt
YXRpb24tZnJhbWUtY2FuY2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYyMmU5YTQzMWFk
MDI3MjcxM2I3MWZkYzg3OTQwMTZjOGVmMTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxIEBACitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Fu
aW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQyMTBmN2I5ZjY5ZTYwMTZhM2M3YTI0ZDkzNTc0NDg4ZDg5OTkxMGYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPHNwYW4gaWQ9ImUiPlBBU1M8L3NwYW4+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
K3ZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImUiKTsKK3ZhciBpZCA9IHdpbmRvdy53
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAgZS5pbm5lckhUTUwg
PSAiRkFJTCI7Cit9LCBlKTsKKword2luZG93LndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25G
cmFtZShpZCk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZGlzcGxheSgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZy
YW1lLWNhbmNlbDItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYWQwMjcyNzEz
YjcxZmRjODc5NDAxNmM4ZWYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxIEBACitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlv
bi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGFjMmU5M2ZkMzM1ODU2Y2Q2MjZmNGE2MWRjZmY0MWQzNTQ2YTAyOQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1l
LWNhbmNlbDIuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PHNwYW4gaWQ9ImUiPlBBU1M8L3NwYW4+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3Zh
ciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImUiKTsKK3ZhciBzZWNvbmRDYWxsYmFja0lk
OworCit3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAg
IHdpbmRvdy53ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Vjb25kQ2FsbGJhY2tJ
ZCk7Cit9LCBlKTsKKworc2Vjb25kQ2FsbGJhY2tJZCA9IHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAgZS5pbm5lckhUTUwgPSAgIkZBSUwiOworfSwg
ZSk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2VmMjJlOWE0MzFhZDAyNzI3MTNiNzFmZGM4Nzk0MDE2YzhlZjEyZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5p
bWF0aW9uLWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRo
aW4tY2FsbGJhY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxiYWNrLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZWYyMmU5YTQzMWFkMDI3MjcxM2I3MWZkYzg3OTQwMTZjOGVmMTJmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJh
bWUtd2l0aGluLWNhbGxiYWNrLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFt
ZS13aXRoaW4tY2FsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVl
c3QtYW5pbWF0aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1YTM2
NmZlZTA0NTgzNDM5NDVkMDBmYzk2NWFlODU5ZDUzNTJhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRoaW4t
Y2FsbGJhY2suaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PHNwYW4gaWQ9ImUiPkZBSUw8L3NwYW4+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3Zh
ciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImUiKTsKK3ZhciBzYW1lRnJhbWU7Cit3aW5k
b3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAgIHNhbWVGcmFt
ZSA9IHRydWU7Cit9LCBlKTsKK3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVu
Y3Rpb24oKSB7CisgICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlv
bigpIHsKKyAgICAgICAgZS5pbm5lckhUTUwgPSBzYW1lRnJhbWUgPyAiRkFJTCIgOiAiUEFTUyI7
CisgICAgfSwgZSk7Cit9LCBlKTsKK3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24oKSB7CisgICAgc2FtZUZyYW1lID0gZmFsc2U7Cit9LCBlKTsKKworLy8gVGhpcyBz
aG91bGQgZmlyZSB0aGUgdGhyZWUgYWxyZWFkeSByZWdpc3RlcmVkIGNhbGxiYWNrcywgYnV0IG5v
dCB0aGUgb25lIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQuCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc3BsYXkoKTsKKy8vIFRoaXMg
c2hvdWxkIGZpcmUgdGhlIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2suCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc3Bs
YXkoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24v
cmVxdWVzdC1hbmltYXRpb24tZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9u
L3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q2N2E5Nzc0MjE2ODVl
NGYxZGM2YjdlOWQwMmIwZTk4ZDY0YzUwOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWwKQEAgLTAsMCArMSwx
NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxzcGFuIGlkPSJlIj5GQUlMPC9zcGFuPgor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJlIik7Cit3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkg
eworICAgIGUuaW5uZXJIVE1MPSJQQVNTIjsKK30sIGUpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNwbGF5KCk7Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYTA4ZjgwZjcwNzg1MDFlYjY3NzVkYmIx
YTY3YTRiMDcxMjJlODcxOC4uZGNkNDczMGRkMGNmNWEyOTM4NzdlNWFjNjNmODY1YmVhNGFiNDkx
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTU2MDIsMyArNTYwMiw2IEBAIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvYmFzaWMtYXV0aC1ub3Bhc3N3b3JkLmh0bWwKIAogIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE3MzQKIGZhc3QvbXVsdGljb2wv
c3Bhbi9kb3VibGUtbWVyZ2UtYW5vbnltb3VzLWJsb2NrLWNyYXNoLmh0bWwKKworIyBSZXF1aXJl
cyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc3VwcG9ydAorZmFzdC9hbmltYXRpb24vCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCmluZGV4IGIyMWJlYmEyNjZiYmI1NDkwN2I4YmU1YmY5NDUyZjBmMTE1
ZjA3ZjUuLmVhZDI1YmNhODM5YmZiZWU2OTRiZTliYTJhZDNjYjlkYzI0NWQyMTYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0yODQsMyArMjg0LDYgQEAgZWRpdGluZy9zZWxlY3Rpb24v
Y2FyZXQtbW9kZS1wYXJhZ3JhcGgta2V5cy1uYXZpZ2F0aW9uLmh0bWwKICMgVGhpcyB0ZXN0IGlz
IGZhaWxpbmcgb24gdGhlIExlb3BhcmQgSW50ZWwgRGVidWcgYnVpbGRib3QKICMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODA3CiBmYXN0L2Jsb2NrZmxvdy9icm9r
ZW4taWRlb2dyYXBoLXNtYWxsLWNhcHMuaHRtbAorCisjIFJlcXVpcmVzIHJlcXVlc3RBbmltYXRp
b25GcmFtZSBzdXBwb3J0CitmYXN0L2FuaW1hdGlvbi8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmlu
ZGV4IDQ4YWEzY2FjYzAwYTkxZTRiNmVjYjk5ODI0ZTE3N2YwN2JmMjU4NjEuLjE3MGY3MDFjMGJh
ZmUwODQxNWYyYjdlMjc2MmQ4N2YzYmE4N2NmMTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApA
QCAtNTM3OSwzICs1Mzc5LDYgQEAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZy
YW1lcy5odG1sCiAjIFtRdF0gZmFzdC90ZXh0L2VtcGhhc2lzLWF2b2lkLXJ1YnkuaHRtbCBmYWls
cwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxNTUKIGZhc3Qv
dGV4dC9lbXBoYXNpcy1hdm9pZC1ydWJ5Lmh0bWwKKworIyBSZXF1aXJlcyByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUgc3VwcG9ydAorZmFzdC9hbmltYXRpb24vCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CmluZGV4IDRjZDZlMjg3NTczZjBiYjU2YjMyNjUzMTc5MmY3NDI3MzU4M2U4ZWQuLjQyYmQ0MWRl
M2JiMWU1NWZkYTAzNDQ5YjNkYzQxNDM0MjJiYTE0NzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lw
cGVkCkBAIC0xMTE0LDMgKzExMTQsNiBAQCBmYXN0L2xvYWRlci91c2VyLXN0eWxlc2hlZXQtZmFz
dC1wYXRoLmh0bWwKIAogIyBEUlQgZG9lcyBub3Qgc3VwcG9ydCB0b2dnbGluZyBjYXJldCBicm93
c2luZyBvbiAvIG9mZgogZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbW9kZS1wYXJhZ3JhcGgta2V5
cy1uYXZpZ2F0aW9uLmh0bWwKKworIyBSZXF1aXJlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc3Vw
cG9ydAorZmFzdC9hbmltYXRpb24vCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMzYTQ5OTM2OGM4MjJiMDViMGJm
MTJhZWFiN2Q2ZWE2MTQ5ZjkzOS4uNDdkYTk4YzE2MjE2MWRmNjU3ZDg3YmY0NTYwYWMyMTY1NTc0
YWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDExLTAxLTEwICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IG1vemlsbGEncyByZXF1ZXN0QW5pbWF0aW9u
RnJhbWUgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MTIxOAorCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBtb3ppbGxhJ3MgcHJvcG9zZWQgcmVx
dWVzdEFuaW1hdGlvbkZyYW1lIEFQSS4gIFRoZSBpZGVhIHdpdGggdGhpcyBBUEkgaXMgdGhhdAor
ICAgICAgICBhbiBhdXRob3IgZHJpdmluZyBhbiBhbmltYXRpb24gZnJvbSBzY3JpcHQgY291bGQg
dXNlIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spCisgICAgICAgIGluc3Rl
YWQgb2Ygd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApIHRvIHNjaGVkdWxlIHRoZWlyIHVw
ZGF0ZSBsb2dpYyBhbmQgbGV0IHRoZSBicm93c2VyCisgICAgICAgIGRlY2lkZSB3aGVuIHRvIHVw
ZGF0ZSB0aGUgYW5pbWF0aW9ucy4gIFRoaXMgYXZvaWRzIGRvaW5nIHVubmVjZXNzYXJ5IHdvcmsg
d2hlbiB0aGUgcGFnZSBjb250ZW50CisgICAgICAgIGlzIG9mZnNjcmVlbiBvciBpcyBiZWluZyBk
aXNwbGF5ZWQgYXQgYSBkaWZmZXJlbnQgZnJhbWVyYXRlIHRoYW4gd2hhdCB0aGUgcGFnZSBhdXRo
b3IgZXhwZWN0cy4KKworICAgICAgICBNb3ppbGxhJ3MgcHJvcG9zYWwgaXMgaGVyZTogaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUgYXMgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB3aXRoIHRoZQorICAg
ICAgICBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAgICAgKikgT25seSB0aGUgY2FsbGJhY2sgc3lu
dGF4IGlzIHN1cHBvcnRlZCwgdGhlcmUgaXMgbm8gYmVmb3JlIHBhaW50IGV2ZW50CisgICAgICAg
ICopIHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBwb3J0cyBhIHNlY29uZCBwYXJhbWV0
ZXIgRWxlbWVudCB0byBsZXQgdGhlIGF1dGhvciBpbmRpY2F0ZQorICAgICAgICAgICAgd2hhdCBj
b250ZW50IHRoZXkgaW50ZW5kIHRvIGFuaW1hdGUuICBUaGF0IHdheSBpZiB0aGUgcGFnZSBpcyBi
ZWluZyBkaXNwbGF5ZWQgYnV0IHRoZSBlbGVtZW50CisgICAgICAgICAgICBpbiBxdWVzdGlvbiBp
cyBvZmZzY3JlZW4sIHdlIGNhbiBhdm9pZCBpbnZva2luZyB0aGUgY2FsbGJhY2suCisgICAgICAg
ICopIE5vIHRpbWVzdGFtcCBpcyBwcm92aWRlZCB0byB0aGUgY2FsbGVyIGFuZCB0aGVyZSBpcyBu
byB3aW5kb3cuYW5pbWF0aW9uU3RhcnRUaW1lIHByb3BlcnR5CisgICAgICAgICAgICAoc2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTk1MiBmb3IgZGlzY3Vzc2lv
biBvZiB0aGlzIHByb3BlcnR5KQorICAgICAgICAqKSB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1h
dGlvbkZyYW1lIHJldHVybnMgYSBudW1lcmljYWwgaWQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5j
ZWwgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICB1c2luZyB3aW5kb3cuY2FuY2VsV2Via2l0UmVx
dWVzdEFuaW1hdGlvbkZyYW1lLCB0byBwYXJhbGxlbCB3aW5kb3cuc2V0VGltZW91dCgpL3dpbmRv
dy5jbGVhclRpbWUoKS4KKworICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB0
aGUgZW1iZWRkZXIgc2NoZWR1bGluZyB0aGUgY2FsbGJhY2tzIHNpbmNlIHRoZSBjYWxsYmFjayBp
bnZvY2F0aW9uCisgICAgICAgIGRlcGVuZHMgb24gdGhlIHBhZ2UncyB2aXNpYmlsaXR5IGFuZCB0
aGUgZW1iZWRkZXIncyBwYWludCBzY2hlZHVsaW5nLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBleHBv
c2VkCisgICAgICAgIHRvIFdlYkNvcmUuICBUaGUgZXhwZWN0YXRpb24gZm9yIHRoZSBlbWJlZGRl
ciBpcyB0aGF0IGF0IHNvbWUgcG9pbnQgQ2hyb21lOjpzY2hlZHVsZUFuaW1hdGlvbigpIGlzCisg
ICAgICAgIGNhbGxlZCBGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoKSBzaG91
bGQgYmUgY2FsbGVkIGZvciB0aGUgYXNzb2NpYXRlZCBQYWdlJ3MgbWFpbiBmcmFtZS4KKyAgICAg
ICAgSWRlYWxseSBzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkgd291bGQgYmUgY2FsbGVkIHBy
aW9yIHRvIHJlbmRlcmluZyAtIGFsdGhvdWdoIGluIHByYWN0aWNlIHRoZQorICAgICAgICBlbWJl
ZGRlciBoYXMgdG8gcmF0ZSBsaW1pdCBjYWxsYmFja3MgYW5kIG1heSBub3QgYmUgYWJsZSB0byB0
aWUgdGhlIGNhbGxiYWNrIGRpcmVjdGx5IHRvIHRoZQorICAgICAgICByZW5kZXJpbmcgbG9vcC4K
KworICAgICAgICBUZXN0czogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUt
Y2FuY2VsLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0
aW9uLWZyYW1lLWNhbmNlbDIuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxiYWNrLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWwKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgICogZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s6On5S
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayk6CisgICAgICAgICogZG9tL1JlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrLmlkbDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQW5p
bWF0aW9uKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWU6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXRDYW5jZWxSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKwogMjAxMS0w
MS0xMCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODNlNTVkNDZkN2M5Njkz
NzNhNjFhYjg3NWU5MThlMDQ4MTc1ZjY5MC4uMzdkN2IyOTI1M2Q2NDY5MTlmYzk1ZWQyZmNkMzdj
YTgzMGIzZTk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzUsNiArNzUsNyBAQAogICAgICAgICAg
ICAgJ2RvbS9Qcm9ncmVzc0V2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1JhbmdlLmlkbCcs
CiAgICAgICAgICAgICAnZG9tL1JhbmdlRXhjZXB0aW9uLmlkbCcsCisgICAgICAgICAgICAnZG9t
L1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbCcsCiAgICAgICAgICAgICAnZG9tL1Rl
eHQuaWRsJywKICAgICAgICAgICAgICdkb20vVGV4dEV2ZW50LmlkbCcsCiAgICAgICAgICAgICAn
ZG9tL1RvdWNoLmlkbCcsCkBAIC0xMzE0LDYgKzEzMTUsNyBAQAogICAgICAgICAgICAgJ2RvbS9S
YW5nZS5oJywKICAgICAgICAgICAgICdkb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgnLAogICAgICAg
ICAgICAgJ2RvbS9SYW5nZUV4Y2VwdGlvbi5oJywKKyAgICAgICAgICAgICdkb20vUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnZG9tL1Jhd0RhdGFEb2N1bWVu
dFBhcnNlci5oJywKICAgICAgICAgICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3Bw
JywKICAgICAgICAgICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCBlNGIxMTI4Yzk5ODkyMmUwMzljYjUyOTU5YWNjYzIzYTBjMTVm
MTNhLi45NzYwM2JkNjMyMzRkNjViZjljYmFhODEzMDE5NDA0NTgzOTgyNDU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTIwNyw2ICsyMDcsMTAgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxs
U2NyZWVuLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
KyNpbmNsdWRlICJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNl
IFVuaWNvZGU7CkBAIC00MjUsNiArNDI5LDkgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBm
cmFtZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MLCBjb24KICAg
ICAsIG1fbG9hZEV2ZW50RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5
VGltZXJGaXJlZCkKICAgICAsIG1fZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2Up
CiAgICAgLCBtX3dyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpCisjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICwgbV9uZXh0UmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2tJZCgwKQorI2VuZGlmCiB7CiAgICAgbV9kb2N1bWVudCA9IHRoaXM7CiAK
QEAgLTQ5NDUsNiArNDk1Miw4NSBAQCB2b2lkIERvY3VtZW50Ojpsb2FkRXZlbnREZWxheVRpbWVy
RmlyZWQoVGltZXI8RG9jdW1lbnQ+KikKICAgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNr
Q29tcGxldGVkKCk7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitp
bnQgRG9jdW1lbnQ6OndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBjYWxsYmFjaywgRWxlbWVudCogZSkKK3sKKyAgICBp
ZiAoIW1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKQorICAgICAgICBtX3JlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrcyA9IG5ldyBWZWN0b3I8UmVmUHRyPFJlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrPiA+KCk7CisgICAgaW50IGlkID0gbV9uZXh0UmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2tJZCsrOworICAgIGNhbGxiYWNrLT5tX2VuYWJsZWQgPSB0cnVlOworICAg
IGNhbGxiYWNrLT5tX2lkID0gaWQ7CisgICAgY2FsbGJhY2stPm1fZWxlbWVudCA9IGU7CisgICAg
bV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPmFwcGVuZChjYWxsYmFjayk7CisgICAg
aWYgKEZyYW1lVmlldyogdiA9IHZpZXcoKSkKKyAgICAgICAgdi0+c2NoZWR1bGVBbmltYXRpb24o
KTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdENhbmNlbFJlcXVl
c3RBbmltYXRpb25GcmFtZShpbnQgaWQpCit7CisgICAgaWYgKCFtX3JlcXVlc3RBbmltYXRpb25G
cmFtZUNhbGxiYWNrcykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcy0+YXQoaSktPm1faWQgPT0g
aWQpIHsKKyAgICAgICAgICAgIG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLT5hdChp
KS0+bV9lbmFibGVkID0gZmFsc2U7CisgICAgICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFt
ZUNhbGxiYWNrcy0+cmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIERvY3VtZW50OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkKK3sK
KyAgICBpZiAoIW1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKQorICAgICAgICByZXR1
cm47CisgICAgLy8gV2Ugd2FudCB0byBydW4gdGhlIGNhbGxiYWNrIGZvciBhbGwgZWxlbWVudHMg
aW4gdGhlIGRvY3VtZW50IHRoYXQgaGF2ZSByZWdpc3RlcmVkCisgICAgLy8gZm9yIGEgY2FsbGJh
Y2sgYW5kIHRoYXQgYXJlIHZpc2libGUuICBSdW5uaW5nIHRoZSBjYWxsYmFja3MgY2FuIGNhdXNl
IG5ldyBjYWxsYmFja3MKKyAgICAvLyB0byBiZSByZWdpc3RlcmVkLCBleGlzdGluZyBjYWxsYmFj
a3MgdG8gYmUgY2FuY2VsbGVkLCBhbmQgZWxlbWVudHMgdG8gZ2FpbiBvciBsb3NlCisgICAgLy8g
dmlzaWJpbGl0eSBzbyB0aGlzIGNvZGUgaGFzIHRvIGl0ZXJhdGUgY2FyZWZ1bGx5LgorCisgICAg
Ly8gRmlyc3QsIGdlbmVyYXRlIGEgbGlzdCBvZiBjYWxsYmFja3MgdG8gY29uc2lkZXIuICBDYWxs
YmFja3MgcmVnaXN0ZXJlZCBmcm9tIHRoaXMgcG9pbnQKKyAgICAvLyBvbiBhcmUgY29uc2lkZXJl
ZCBvbmx5IGZvciB0aGUgIm5leHQiIGZyYW1lLCBub3QgdGhpcyBvbmUuCisgICAgVmVjdG9yPFJl
ZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gPiBjYWxsYmFja3MoKm1fcmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKTsKKworICAgIC8vIEZpcmluZyB0aGUgY2FsbGJhY2sg
bWF5IGNhdXNlIHRoZSB2aXNpYmlsaXR5IG9mIG90aGVyIGVsZW1lbnRzIHRvIGNoYW5nZS4gIFRv
IGF2b2lkCisgICAgLy8gbWlzc2luZyBhbnkgY2FsbGJhY2tzLCB3ZSBrZWVwIGl0ZXJhdGluZyB0
aHJvdWdoIHRoZSBsaXN0IG9mIGNhbmRpYXRlIGNhbGxiYWNrcyBhbmQgZmlyaW5nCisgICAgLy8g
dGhlbSB1bnRpbCBub3RoaW5nIG5ldyBiZWNvbWVzIHZpc2libGUuCisgICAgYm9vbCBmaXJlZENh
bGxiYWNrOworICAgIGRvIHsKKyAgICAgICAgZmlyZWRDYWxsYmFjayA9IGZhbHNlOworICAgICAg
ICAvLyBBIHByZXZpb3VzIGl0ZXJhdGlvbiBtYXkgaGF2ZSBpbnZhbGlkYXRlZCBzdHlsZSAob3Ig
bGF5b3V0KS4gIFVwZGF0ZSBzdHlsZXMgZm9yIGVhY2ggaXRlcmF0aW9uCisgICAgICAgIC8vIGZv
ciBub3cgc2luY2UgYWxsIHdlIGNoZWNrIGlzIHRoZSBleGlzdGVuY2Ugb2YgYSByZW5kZXJlci4K
KyAgICAgICAgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNhbGxiYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVxdWVzdEFuaW1h
dGlvbkZyYW1lQ2FsbGJhY2sqIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldLmdldCgpOworICAgICAg
ICAgICAgaWYgKGNhbGxiYWNrLT5tX2VuYWJsZWQgJiYgKCFjYWxsYmFjay0+bV9lbGVtZW50IHx8
IGNhbGxiYWNrLT5tX2VsZW1lbnQtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2stPm1fZW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5oYW5k
bGVFdmVudCgpOworICAgICAgICAgICAgICAgIGZpcmVkQ2FsbGJhY2sgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChmaXJlZENhbGxiYWNrKTsKKwor
ICAgIC8vIEFueSBjYWxsYmFja3MgbGVmdCBpbiB0aGUgY2FsbGJhY2tzIGFycmF5IHRoYXQgaGF2
ZSBub3QgYmVlbiBjYW5jZWxsZWQgd2VyZSBza2lwcGVkIGFuZCBoYXZlIHRvIGJlIGFkZGVkCisg
ICAgLy8gYmFjayB0byB0aGUgcGVuZGluZyBsaXN0LiAgVGhlc2UgZ28gYXQgdGhlIHN0YXJ0IG9m
IHRoZSBsaXN0IHNpbmNlIHRoZXkgd2VyZSByZWdpc3RlcmVkIGJlZm9yZSBhbnkgY2FsbGJhY2tz
CisgICAgLy8gcmVnaXN0ZXJlZCB0aGlzIGZyYW1lIHdlcmUuCisgICAgc2l6ZV90IGNhbGxiYWNr
c0FkZGVkID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoY2FsbGJhY2tzW2ldLT5tX2VuYWJsZWQpCisgICAgICAgICAg
ICBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcy0+aW5zZXJ0KGNhbGxiYWNrc0FkZGVk
KyssIGNhbGxiYWNrc1tpXSk7CisgICAgfQorCisgICAgLy8gSW4gbW9zdCBjYXNlcyB3ZSBleHBl
Y3QgdGhpcyBsaXN0IHRvIGJlIGVtcHR5LCBzbyBubyBuZWVkIHRvIGtlZXAgYXJvdW5kIHRoZSB2
ZWN0b3IncyBkZWZhdWx0IGJ1ZmZlci4KKyAgICBpZiAoIW1fcmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tzLT5zaXplKCkpCisgICAgICAgIG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJh
Y2tzLmNsZWFyKCk7CisgICAgZWxzZSBpZiAoRnJhbWVWaWV3KiB2ID0gdmlldygpKQorICAgICAg
ICB2LT5zY2hlZHVsZUFuaW1hdGlvbigpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQogUGFzc1JlZlB0cjxUb3VjaD4gRG9jdW1lbnQ6OmNyZWF0ZVRvdWNoKERPTVdpbmRv
dyogd2luZG93LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgaWRlbnRpZmllciwgaW50IHBhZ2VY
LCBpbnQgcGFnZVksIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGZiMWFlMzFhNTdkODViNzUwZjMyNzdkYjQ5
MmJmMzQ0YTQ4ZmUxNGIuLmMxNmU1NDBmYzI1ZmYxZjU1ZjkwMDE1ZDRlN2RjMDg3NTM5Mzc3YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xNDcsNiArMTQ3LDEwIEBAIGNsYXNzIFRvdWNoOwog
Y2xhc3MgVG91Y2hMaXN0OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCitjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKKyNlbmRpZgorCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBGb3JtRWxlbWVudEtleSB7CkBAIC0x
MDcyLDYgKzEwNzYsMTIgQEAgcHVibGljOgogCiAgICAgY29uc3QgRG9jdW1lbnRUaW1pbmcqIHRp
bWluZygpIGNvbnN0IHsgcmV0dXJuICZtX2RvY3VtZW50VGltaW5nOyB9CiAKKyNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgaW50IHdlYmtpdFJlcXVlc3RBbmltYXRpb25G
cmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiwgRWxlbWVudCop
OworICAgIHZvaWQgd2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCk7Cisg
ICAgdm9pZCBzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCk7CisjZW5kaWYKKwogICAgIGJvb2wg
bWF5Q2F1c2VGbGFzaE9mVW5zdHlsZWRDb250ZW50KCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRE
TlNQcmVmZXRjaCgpOwpAQCAtMTM5MSw2ICsxNDAxLDExIEBAIHByaXZhdGU6CiAKICAgICBEb2N1
bWVudFRpbWluZyBtX2RvY3VtZW50VGltaW5nOwogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hl
cj4gbV9tZWRpYVF1ZXJ5TWF0Y2hlcjsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKKyAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFjaz4gPiA+IG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzOworICAgIGludCBtX25l
eHRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0lkOworI2VuZGlmCiB9OwogCiBpbmxpbmUg
Ym9vbCBEb2N1bWVudDo6RG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWlucyhBdG9taWNTdHJpbmdJ
bXBsKiBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZXF1ZXN0QW5p
bWF0aW9uRnJhbWVDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgzNjg4NmVmMjQ1MjAzZjIzNWM2ZGFkZWNl
M2I1NTRmZmNhZGIxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrX2gKKyNkZWZpbmUgUmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoKSA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAg
IGludCBtX2lkOworICAgIGJvb2wgbV9lbmFibGVkOworfTsKKworfQorCisjZW5kaWYgLy8gUmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDIzMmU1
ZjRjOGJiMWE4MmFkY2ZkZmNjOGUyMzVhNWQzZGI0YmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbApAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENhbGxiYWNr
PUZ1bmN0aW9uT25seSxDb25kaXRpb25hbD1SRVFVRVNUX0FOSU1BVElPTl9GUkFNRQorICAgIF0g
UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2t7CisgICAgICAgIGJvb2xlYW4gaGFuZGxlRXZl
bnQoKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDVj
NDgxMGUxYjNhM2JhN2I4OTVlODAwM2U3NDNlYjAwZjc0NWUyZGEuLjQyNWFiYTFkNzQxNjRiYWVm
MzhiYTYxZTMwNGM2NzE0ZWFhMWMxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKQEAgLTE1Nyw2ICsxNTcsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCiAgICAgdmlydHVhbCB2b2lkIGRlbGVnYXRlZFNjcm9sbFJlcXVlc3RlZChjb25zdCBJ
bnRTaXplJikgeyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgeyB9CisjZW5kaWYKIAogICAg
IHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHApIGNvbnN0
IHsgcmV0dXJuIHA7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3Qg
SW50UmVjdCYgcikgY29uc3QgeyByZXR1cm4gcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4
IGE4MDEwNjUwZGUyNDNkZjVjYjhlODYwMmVhYzE3ZDliZGVjMzJjYjguLjNkYTlkMTU3ZWU1MmYx
MTk1NWQ4ZTMwMzY5Y2Y5YTFkMTQ3M2E4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ0
OCw2ICs0NDgsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNv
cikKICAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAKKyNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENocm9tZTo6c2NoZWR1bGVBbmltYXRpb24oKQor
eworICAgIG1fY2xpZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOworfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykKIE5vdGlmaWNhdGlvblByZXNlbnRlciogQ2hyb21lOjpub3Rp
ZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggOTNiOGM0
YTcxMmQ2N2YwODBhMjU0Yjc3ZTBmYTZiMzNmYjRjMjg5Yi4uMGFmZDgwN2RkMGQ2YzNlNmJkZTYw
MGE5YWUwZmNmMWYwNTdlZGFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC03OCw2ICs3OCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQg
cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxi
YXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
KGNvbnN0IEN1cnNvciYpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisjZW5kaWYKIAogICAgICAg
ICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDY3ZTEzMjUyYThkNGU5MTc2MWM1MzIwYmNlYWM2
MjlmZGU5ZDc5MTIuLmUzNDhhZmJjYTRmYzY4ZDQ4NGIwYTljZjY1MjNkZmRmMTc4YjM4NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMTUxLDYgKzE1MSw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1Q
YWdlQ2xpZW50KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01v
ZGVEaWRDaGFuZ2UoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3Io
Y29uc3QgQ3Vyc29yJikgPSAwOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOworI2VuZGlmCiAg
ICAgICAgIC8vIEVuZCBtZXRob2RzIHVzZWQgYnkgSG9zdFdpbmRvdy4KIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmlld3BvcnRBcmd1
bWVudHMmKSBjb25zdCB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAwMjE0MGQ1
ODY2ZjU0MjU3YjI5NjU3OTUxYzkxM2QxMmE0MzQyMDQ1Li44MzJlOTU2NWZiMjIzZGU5ZTcyMDZi
NTQyMDlhOWU0MWY5NWRhYzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0xMDUs
NiArMTA1LDEwIEBACiAjaW5jbHVkZSAiTG9jYWxGaWxlU3lzdGVtLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNpbmNsdWRlICJSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjay5oIgorI2VuZGlmCisKIHVzaW5nIHN0ZDo6bWluOwogdXNpbmcgc3Rk
OjptYXg7CiAKQEAgLTE0NjQsNiArMTQ2OCwyMSBAQCB2b2lkIERPTVdpbmRvdzo6Y2xlYXJJbnRl
cnZhbChpbnQgdGltZW91dElkKQogICAgIERPTVRpbWVyOjpyZW1vdmVCeUlkKGNvbnRleHQsIHRp
bWVvdXRJZCk7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitpbnQg
RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFzc1JlZlB0cjxSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gY2FsbGJhY2ssIEVsZW1lbnQqIGUpCit7CisgICAgaWYg
KERvY3VtZW50KiBkID0gZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGQtPndlYmtpdFJlcXVl
c3RBbmltYXRpb25GcmFtZShjYWxsYmFjaywgZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
RE9NV2luZG93Ojp3ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW50IGlkKQorewor
ICAgIGlmIChEb2N1bWVudCogZCA9IGRvY3VtZW50KCkpCisgICAgICAgIGQtPndlYmtpdENhbmNl
bFJlcXVlc3RBbmltYXRpb25GcmFtZShpZCk7Cit9CisjZW5kaWYKKwogYm9vbCBET01XaW5kb3c6
OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBpZiAo
IUV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggOWU3MmRlYzMxOGExMTA1MDQwYzk2
NjBhMWU1ZGIxMzk1YzlmNzgzMC4uMzY2YjQ4NTk0MjBiZjY4MWYxNDUyMTA5ZDI3NzAyODU0MmMx
MTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC02NCw2ICs2NCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU3R5bGVNZWRpYTsKICAgICBjbGFzcyBXZWJLaXRQb2lu
dDsKIAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBjbGFzcyBSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKKyNlbmRpZgorCiAgICAgc3RydWN0IFdpbmRvd0Zl
YXR1cmVzOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTIzNyw2ICsyNDEs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgc2V0SW50ZXJ2YWwoUGFzc093
blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGltZW91dCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICB2b2lkIGNsZWFySW50ZXJ2YWwoaW50IHRpbWVvdXRJZCk7CiAKKyAgICAgICAgLy8gV2Vi
S2l0IGFuaW1hdGlvbiBleHRlbnNpb25zCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQorICAgICAgICBpbnQgd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8
UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+LCBFbGVtZW50Kik7CisgICAgICAgIHZvaWQg
d2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCk7CisjZW5kaWYKKwogICAg
ICAgICAvLyBFdmVudHMKICAgICAgICAgLy8gRXZlbnRUYXJnZXQgQVBJCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCmluZGV4IDM4OWQ1ZWRhNDAwNmRjZjU4ODU3OWU2NjIyNjMwYmI4YzAyYWY5
MzYuLjdjN2NlMThlMGU4YjkxYzU2ZWIyZjJhMmYzZTEwZjU3ZjE5Yjg1MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKQEAgLTIzNSw2ICsyMzUsMTIgQEAgbW9kdWxlIHdpbmRvdyB7CiAg
ICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gRE9NU3RyaW5nIGNvZGUsIGlu
IGxvbmcgdGltZW91dCk7CiAgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbiBsb25nIGhhbmRs
ZSk7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAg
ICAgLy8gV2ViS2l0IGFuaW1hdGlvbiBleHRlbnNpb25zCisgICAgICAgIGxvbmcgd2Via2l0UmVx
dWVzdEFuaW1hdGlvbkZyYW1lKGluIFtDYWxsYmFja10gUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2sgY2FsbGJhY2ssIGluIEVsZW1lbnQgZWxlbWVudCk7CisgICAgICAgIHZvaWQgd2Via2l0
Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGluIGxvbmcgaWQpOworI2VuZGlmCisKICAgICAg
ICAgLy8gQmFzZTY0CiAgICAgICAgIERPTVN0cmluZyBhdG9iKGluIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIHN0cmluZykKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc3ZTE5NzYyZjE0YjQwMTMxNzZl
MjU3ZDc4ODY4MWI3NWU3MWY4ZWIuLjdiMzVjMjliNGNkNDJjYjk0MDMyYmQxYTc1MWYyZjY3MzAy
YjkzZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTM0Miw2ICszNDIsMTQgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogI2Vu
ZGlmCiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIEZyYW1l
Vmlldzo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIGlmIChob3N0V2luZG93KCkpCisgICAg
ICAgIGhvc3RXaW5kb3coKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKK30KKyNlbmRpZgorCiB2b2lk
IEZyYW1lVmlldzo6c2V0TWFyZ2luV2lkdGgoaW50IHcpCiB7CiAgICAgLy8gbWFrZSBpdCB1cGRh
dGUgdGhlIHJlbmRlcmluZyBhcmVhIHdoZW4gc2V0CkBAIC0xNjM5LDYgKzE2NDcsMTQgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVuc2NoZWR1bGVSZWxheW91dCgpCiAgICAgbV9kZWxheWVkTGF5b3V0ID0g
ZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIEZy
YW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucygpCit7CisgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNlcnZpY2VTY3JpcHRlZEFu
aW1hdGlvbnMoKTsKK30KKyNlbmRpZgorCiBib29sIEZyYW1lVmlldzo6aXNUcmFuc3BhcmVudCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNUcmFuc3BhcmVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IGEyZjU4MTViNGU1NWUwMDI3YmE4YjQyZWJkMDRkZTdmMDU4Yzg3N2EuLjRmZmFi
YzY2NDY0NDg4MDYzYjQzMjI4NmRmNjA1OTFhOTBhMjRhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaApAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CisgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOworI2VuZGlmCiAKICAgICBGcmFtZSogZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lLmdldCgpOyB9CiAgICAgdm9pZCBjbGVhckZyYW1l
KCk7CkBAIC05Nyw2ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBuZWVkc0Z1bGxSZXBh
aW50KCkgY29uc3QgeyByZXR1cm4gbV9kb0Z1bGxSZXBhaW50OyB9CiAKKyNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCBzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25z
KCk7CisjZW5kaWYKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lk
IHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaAppbmRleCA3ODgyZDQ4ZmI0YzI5MWJiMjM0ZjQ3YTgxODRjZTBhYWY4ZjE5ZDVhLi40NWM4
ODdiNjNkNjU4ODAwZjkzN2EyZjhmMzMyOWQxOGE4OGZhNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vSG9zdFdpbmRvdy5oCkBAIC02Niw2ICs2NiwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXF1
ZXN0IHRoYXQgdGhlIGN1cnNvciBjaGFuZ2UuCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihj
b25zdCBDdXJzb3ImKSA9IDA7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggMzZlZmY2OWY5NTY3ODUzMjE0MWNkNTUwNjk5MTcyZjBhZDA5
YjExNS4uZGMyMWExOTAxMTUwZDg3YTZkY2U5NjhiOWQ2YjBlMDc5MTdkM2Q2OCAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTAxLTEwICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IG1v
emlsbGEncyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTIxOAorCisgICAgICAgIENocm9taXVtIER1bXBS
ZW5kZXJUcmVlIHN1cHBvcnQgZm9yIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUu
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6Cisg
ICAgICAgIChpbnZva2VTY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJWaWV3SG9zdDo6
c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViVmlld0hvc3Q6OnBhaW50SW52YWxpZGF0
ZWRSZWdpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
Lmg6CisKIDIwMTEtMDEtMTAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggY2UwZWU3YTFmNGMyZDAzZjlmOWVkNzU5
YzcwODgzYmQ5OGIxNmNmYi4uZjQ5MTc4MmVhMjRmYmMyMzllMTQ2NDUwMjYyM2ZmNzZmNmU2MWI3
MCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApA
QCAtNjI0LDYgKzYyNCwxOSBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgp
CiAgICAgZGlkSW52YWxpZGF0ZVJlY3QoY2xpZW50UmVjdCk7CiB9CiAKKyNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCitzdGF0aWMgdm9pZCBpbnZva2VTY2hlZHVsZUNvbXBvc2l0
ZSh2b2lkKiBjb250ZXh0KQoreworICAgIFdlYlZpZXdIb3N0KiB3dmggPSBzdGF0aWNfY2FzdDxX
ZWJWaWV3SG9zdCo+KGNvbnRleHQpOworICAgIHd2aC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKK30K
Kwordm9pZCBXZWJWaWV3SG9zdDo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIHdlYmtpdF9z
dXBwb3J0OjpQb3N0RGVsYXllZFRhc2soaW52b2tlU2NoZWR1bGVDb21wb3NpdGUsIHN0YXRpY19j
YXN0PHZvaWQqPih0aGlzKSwgMCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWaWV3SG9zdDo6ZGlk
Rm9jdXMoKQogewogICAgIG1fc2hlbGwtPnNldEZvY3VzKHdlYldpZGdldCgpLCB0cnVlKTsKQEAg
LTE0NDUsNiArMTQ1OCw5IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBhaW50UmVjdChjb25zdCBXZWJS
ZWN0JiByZWN0KQogCiB2b2lkIFdlYlZpZXdIb3N0OjpwYWludEludmFsaWRhdGVkUmVnaW9uKCkK
IHsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgd2ViV2lkZ2V0KCkt
PmFuaW1hdGUoKTsKKyNlbmRpZgogICAgIHdlYldpZGdldCgpLT5sYXlvdXQoKTsKICAgICBXZWJT
aXplIHdpZGdldFNpemUgPSB3ZWJXaWRnZXQoKS0+c2l6ZSgpOwogICAgIFdlYlJlY3QgY2xpZW50
UmVjdCgwLCAwLCB3aWRnZXRTaXplLndpZHRoLCB3aWRnZXRTaXplLmhlaWdodCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAppbmRleCBlOTZhNzE3Y2Q4NjBh
YzE1OGZmODIxMDFkMzBmNDYxMDU2OGI2MDkzLi5iYzE4NjM5ZWI3NTU1ODdiNmE5NzExZDg0MWRm
OTgxMWMzYzkyMzAyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmgKQEAgLTE1MSw2ICsxNTEsOSBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJL
aXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZyYW1lQ2xpZW50LAogICAgIHZp
cnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlUmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViS2l0
OjpXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUFuaW1hdGlvbigpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpZEJsdXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29y
KGNvbnN0IFdlYktpdDo6V2ViQ3Vyc29ySW5mbyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTg1YmMxNTk1
MzQwOGQ4ZjE4ZjkyNDNmYjBhZjQ2OTUwMTI2M2I1Mi4uMTU5NmJhZGJiZGI3NGU1MGMwOTM3Mzcw
MTNiZDM1NjdmNWUwOGYwNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDEt
MTAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbW96aWxsYSdzIHJl
cXVlc3RBbmltYXRpb25GcmFtZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxMjE4CisKKyAgICAgICAgQ2hyb21pdW0gV2ViS2l0IEFQSSBzdXBw
b3J0IGZvciB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKKworICAgICAgICAq
IGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAq
IHB1YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xp
ZW50OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUFuaW1hdGlv
bik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpzY2hlZHVsZUFuaW1h
dGlvbik6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTEtMDEtMTAgIEpvaG4gS25vdHRl
bmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVy
ZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9X
ZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCAzNzJjYzVjNTA0MDA5ZjEyMzEzYjE3
ZTk4YmMyODQ3YWEyNTc5M2NkLi43ZjRjZGE2MTkzZjA4OTcwYWMwYjFjYzNlZDMxNWU5MjFkNjc3
NGMxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9XZWJL
aXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICAnRU5B
QkxFX09QRU5UWVBFX1NBTklUSVpFUj0xJywKICAgICAgICAgJ0VOQUJMRV9PUklFTlRBVElPTl9F
VkVOVFM9MCcsCiAgICAgICAgICdFTkFCTEVfUFJPR1JFU1NfVEFHPTEnLAorICAgICAgICAnRU5B
QkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEnLAogICAgICAgICAnRU5BQkxFX1NIQVJFRF9X
T1JLRVJTPTEnLAogICAgICAgICAnRU5BQkxFX1NWRz0xJywKICAgICAgICAgJ0VOQUJMRV9TVkdf
QU5JTUFUSU9OPTEnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRn
ZXQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggY2NhZDEzNGY2
MzRlODRmM2ZjMGI5YzY0NGU2NjBmYzY4MGYzZWYxMi4uMzZmYmYzMTNhZDE3NDY0YzQxZDhkOTI3
Y2IyMTMyYWRhYjZhZTg4MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC01Niw2
ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIHJlc2l6ZSB0aGUgV2ViV2lkZ2V0
LgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpID0gMDsKIAorICAgIC8v
IENhbGxlZCB0byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24gc3RhdGUuICBUaGlzIHNob3Vs
ZCBiZSBjYWxsZWQgYmVmb3JlCisgICAgLy8gcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQgY2Fu
IHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKSA9IDA7
CisKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJXaWRnZXQuICBUaGlzIE1VU1QgYmUg
Y2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0
byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdl
dENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAppbmRl
eCAzNzM0MjZkZjRmNjhjNzEzOTEzZjllNzI4Y2U5OTAwZGU2NjNjN2FjLi44NWU0MDE1YTcxZTdl
N2JhOWVjZDYyMDc4NzAzOWJkNmU4MzY0YjMzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0Q2xpZW50LmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCB3
aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6OmNvbXBvc2l0ZSBpcyByZXF1aXJlZAogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQogCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBj
YWxsIHRvIFdlYldpZGdldDo6YW5pbWF0ZSBpcyByZXF1aXJlZAorICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUFuaW1hdGlvbigpIHsgfQorCiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBh
Y3F1aXJlcyBvciBsb3NlcyBmb2N1cywgcmVzcGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBk
aWRGb2N1cygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRCbHVyKCkgeyB9CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCAxYTk4NGMxMmYzODliM2QxZjZmMmQ0
ZWEyNGNjMWU1ZWI5Y2IyYTA4Li4xMGQxODRmMzJiYTFhYzFhMjBiYTBiNmQ5ZGYwMTlhMjIyZDJk
MDQ0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTUzMiw2
ICs1MzIsMTMgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JT
bG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QKICAgICBpbnZhbGlkYXRlQ29udGVu
dHNBbmRXaW5kb3codXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKIH0KIAorI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVBbmlt
YXRpb24oKQoreworICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7
Cit9CisjZW5kaWYKKwogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5o
CmluZGV4IGIwMjRiYzAxZWNjOTAyNGJjZGNiNTA1MTI4OGEzMmIzNzIyMjA0MWUuLjU3ZmViOTJl
MWZjODBkNjZkZDNiOTVkZTIzMTI5MjQyZmQxYzhjYmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5oCkBAIC0xMDUsNiArMTA1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9y
U2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCk7CisjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbCgKICAgICAgICAgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RU
b1Njcm9sbCwKICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNjNlYmVkODA5YmVmYjA0
ZTgwZjY0MzEzNmZiZDMxZDdlOGM2OTI3MS4uYTIwOWU2YTJhODg2NjBjMTJlYjM2ZmQxMjYwYTkw
MzgxMmJmYWE3ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBA
IC0xNTEsNiArMTUxLDEwIEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdl
YlNpemUmIG5ld1NpemUpCiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1h
dGUoKQoreworfQorCiB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmxheW91dCgpCiB7CiB9CkBAIC0y
OTksNiArMzAzLDEwIEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRz
Rm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0CiAgICAgaW52YWxpZGF0ZUNv
bnRlbnRzQW5kV2luZG93KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiB9CiAKK3ZvaWQgV2ViUG9w
dXBNZW51SW1wbDo6c2NoZWR1bGVBbmltYXRpb24oKQoreworfQorCiB2b2lkIFdlYlBvcHVwTWVu
dUltcGw6OnNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggYjhlZjdiYThlNGI5OWZlZTkwNGI4ZmI2NzkzZDZl
NjYyOWUyYWI0OS4uOWJmMTRkNTkwNGFjZGJkODRmNzE0NzdjMTQ1YzVjZjA2OWNjZmVlOCAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXpl
KCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJT
aXplJik7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiByZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CkBAIC0xMDUs
NiArMTA2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbCgKICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsCiAgICAg
ICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggNzA1NmEwYWMyMmI4MTgwNzc0NzIwMjk1NDQ1NDI4YjM5YThiN2My
Ni4uYjdlYTdjNzQ5YjIxNjc4Yjc1MjE0OWQyZTJkMmI0MjI4OWM4NmRiMSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk3MSw2ICs5NzEsMTggQEAgdm9pZCBXZWJWaWV3SW1w
bDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAjZW5kaWYKIH0KIAordm9pZCBXZWJW
aWV3SW1wbDo6YW5pbWF0ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQorICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYg
KHdlYmZyYW1lKSB7CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZp
ZXcoKTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0
ZWRBbmltYXRpb25zKCk7CisgICAgfQorI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6Omxh
eW91dCgpCiB7CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAwODU3ZDExMWFmM2Q0NDQ1YmY5NjYwZThh
MGJlNTVmMTcwZjM5OTkxLi5hZTE4MzA1NmY1MGJlMGNhY2VmMzJlOGUxOTVkMjI1YTA5OWY5NjNk
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsg
cmV0dXJuIG1fc2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYp
OworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78604</attachid>
            <date>2011-01-11 14:57:05 -0800</date>
            <delta_ts>2011-01-19 15:26:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51218-20110111145704.patch</filename>
            <type>text/plain</type>
            <size>44584</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwMzA3MDU4Y2NhZTUyZDYyMTQyZjg3Mzg2MzY5YTdjNmEzZDcwY2I2Li5iMjE3YmY1
ZWMzZTBmOWVlODU3MjgyY2EzNGFhNjk1YmIxMWNiN2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTEtMDEtMTEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbW96
aWxsYSdzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjE4CisKKyAgICAgICAgVGVzdHMgZm9yIHdpbmRv
dy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKS4gIFRoZSBuZXcgdGVzdHMKKyAgICAgICAg
YXJlIGluIHRoZSBTa2lwcGVkIGxpc3RzIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc2V0Cisg
ICAgICAgIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgLSB3aGljaCBpcyBjdXJyZW50
bHkgYWxsIGJ1dCBjaHJvbWl1bS4KKworICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3Qt
YW5pbWF0aW9uLWZyYW1lLWNhbmNlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC5odG1sOiBBZGRlZC4K
KyAgICAgICAgICAgIFRlc3RzIGNhbmNlbGxpbmcgYSBjYWxsYmFjayB3aXRoaW4gYSB3ZWJraXRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSBjYWxsYmFjay4KKyAgICAgICAgKiBmYXN0L2FuaW1hdGlv
bi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi5o
dG1sOiBBZGRlZC4KKyAgICAgICAgICAgIFRlc3RzIGludGVyYWN0aW9ucyBiZXR3ZWVuIG11bHRp
cGxlIHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGNhbGxiYWNrcy4KKyAgICAgICAgKiBm
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1kaXNwbGF5LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJh
bWUtZGlzcGxheS5odG1sOiBBZGRlZC4KKyAgICAgICAgICAgIFRlc3RzIGNoYW5naW5nIHRoZSBk
aXNwbGF5OiBwcm9wZXJ0eSBvZiBhbiBlbGVtZW50IHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAg
ICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICAgICBUZXN0cyB0aGUgYmFzaWMgdXNlIG9mIHdpbmRvdy53
ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKS4KKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9y
ZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRoaW4tY2FsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRo
aW4tY2FsbGJhY2suaHRtbDogQWRkZWQuCisgICAgICAgICAgICBUZXN0cyBzZXR0aW5nIG9uZSB3
ZWJraXQud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgY2FsbGJhY2sgd2l0aGluIGFub3Ro
ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMS0wMS0xMSAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24t
ZnJhbWUtY2FuY2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3Jl
cXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Vm
MjJlOWE0MzFhZDAyNzI3MTNiNzFmZGM4Nzk0MDE2YzhlZjEyZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWNhbmNl
bC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1jYW5jZWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MjEwZjdiOWY2OWU2MDE2YTNjN2EyNGQ5MzU3NDQ4OGQ4OTk5MTBm
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1h
bmltYXRpb24tZnJhbWUtY2FuY2VsLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxzcGFuIGlkPSJlIj5QQVNTPC9zcGFuPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworCit2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlIik7Cit2YXIgaWQg
PSB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAgIGUu
aW5uZXJIVE1MID0gIkZBSUwiOworfSwgZSk7CisKK3dpbmRvdy53ZWJraXRDYW5jZWxSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoaWQpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc3BsYXkoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2Fu
Y2VsMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFu
aW1hdGlvbi1mcmFtZS1jYW5jZWwyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYyMmU5YTQz
MWFkMDI3MjcxM2I3MWZkYzg3OTQwMTZjOGVmMTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtY2FuY2VsMi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRhYzJlOTNmZDMzNTg1NmNkNjI2ZjRhNjFkY2ZmNDFkMzU0NmEwMjkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1h
dGlvbi1mcmFtZS1jYW5jZWwyLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxzcGFuIGlkPSJlIj5QQVNTPC9zcGFuPgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCit2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlIik7Cit2YXIgc2Vjb25k
Q2FsbGJhY2tJZDsKKword2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlv
bigpIHsKKyAgICB3aW5kb3cud2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlY29u
ZENhbGxiYWNrSWQpOworfSwgZSk7CisKK3NlY29uZENhbGxiYWNrSWQgPSB3aW5kb3cud2Via2l0
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAgIGUuaW5uZXJIVE1MID0gICJG
QUlMIjsKK30sIGUpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmRpc3BsYXkoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtZGlzcGxheS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlv
bi1mcmFtZS1kaXNwbGF5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYyMmU5YTQzMWFkMDI3
MjcxM2I3MWZkYzg3OTQwMTZjOGVmMTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtZGlzcGxheS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSBAQAorUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmlt
YXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtZGlzcGxheS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtZGlzcGxheS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI4MjI1NzcxOWUwNzA0NzE0ODFlNzJkMzhjNjc2OGRjYmM2YWMyM2IKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS1kaXNwbGF5Lmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxzcGFuIGlkPSJhIiBzdHlsZT0iZGlzcGxheTpub25lIj48L3NwYW4+Cis8c3BhbiBpZD0i
YiI+RkFJTDwvc3Bhbj4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIGEgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYSIpOword2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25G
cmFtZShmdW5jdGlvbigpIHsKKyAgICBiLmlubmVySFRNTD0iUEFTUyI7Cit9LCBhKTsKKwordmFy
IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYiIpOword2luZG93LndlYmtpdFJlcXVlc3RB
bmltYXRpb25GcmFtZShmdW5jdGlvbigpIHsKKyAgICBhLnN0eWxlLmRpc3BsYXk9IiI7Cit9LCBi
KTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kaXNwbGF5KCk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYyMmU5YTQzMWFkMDI3MjcxM2I3MWZkYzg3OTQwMTZj
OGVmMTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZy
YW1lLXdpdGhpbi1jYWxsYmFjay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1h
dGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS13aXRoaW4tY2FsbGJhY2stZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYWQwMjcyNzEzYjcxZmRjODc5NDAxNmM4ZWYxMmYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1h
dGlvbi1mcmFtZS13aXRoaW4tY2FsbGJhY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BB
U1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0
aW9uLWZyYW1lLXdpdGhpbi1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRp
b24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDVhMzY2ZmVlMDQ1ODM0Mzk0NWQwMGZjOTY1YWU4NTlkNTM1MmFhOQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1l
LXdpdGhpbi1jYWxsYmFjay5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8c3BhbiBpZD0iZSI+RkFJTDwvc3Bhbj4KKzxzY3JpcHQ+CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKwordmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZSIpOwordmFyIHNhbWVGcmFt
ZTsKK3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CisgICAg
c2FtZUZyYW1lID0gdHJ1ZTsKK30sIGUpOword2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25G
cmFtZShmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1l
KGZ1bmN0aW9uKCkgeworICAgICAgICBlLmlubmVySFRNTCA9IHNhbWVGcmFtZSA/ICJGQUlMIiA6
ICJQQVNTIjsKKyAgICB9LCBlKTsKK30sIGUpOword2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRp
b25GcmFtZShmdW5jdGlvbigpIHsKKyAgICBzYW1lRnJhbWUgPSBmYWxzZTsKK30sIGUpOworCisv
LyBUaGlzIHNob3VsZCBmaXJlIHRoZSB0aHJlZSBhbHJlYWR5IHJlZ2lzdGVyZWQgY2FsbGJhY2tz
LCBidXQgbm90IHRoZSBvbmUgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZC4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGlzcGxheSgpOwor
Ly8gVGhpcyBzaG91bGQgZmlyZSB0aGUgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4K
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZGlzcGxheSgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Fu
aW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9h
bmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDY3YTk3
NzQyMTY4NWU0ZjFkYzZiN2U5ZDAyYjBlOThkNjRjNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUuaHRtbApAQCAt
MCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPHNwYW4gaWQ9ImUiPkZBSUw8
L3NwYW4+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciBlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImUiKTsKK3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVu
Y3Rpb24oKSB7CisgICAgZS5pbm5lckhUTUw9IlBBU1MiOworfSwgZSk7CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc3BsYXkoKTsK
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCBkMDNkMzExMDk5NTJhODFk
ODJlNTViMjU1YTM3NmJkNTY4M2EyNWExLi42M2ZjOGU1NTQ2MTJhOWY4NzBkM2NhY2EyOTc4Zjdj
N2Q4MWJkYWMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTU5NCwzICs1NTk0LDkg
QEAgaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS13ZWJzb2NrZXQtZXJyb3IuaHRtbAogIyBs
YXlvdXRUZXN0Q29udHJvbGxlci5xdWV1ZUxvYWQoKSBkb2VzIG5vdCB3b3JrCiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L2Jhc2ljLWF1dGgtbm91c2VyLmh0bWwKIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvYmFzaWMtYXV0aC1ub3Bhc3N3b3JkLmh0bWwKKworIyBSZXF1aXJlcyByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgc3VwcG9ydAorZmFzdC9hbmltYXRpb24vCisKKyMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNzM0CitmYXN0L211bHRpY29sL3NwYW4vZG91
YmxlLW1lcmdlLWFub255bW91cy1ibG9jay1jcmFzaC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lw
cGVkCmluZGV4IGIyMWJlYmEyNjZiYmI1NDkwN2I4YmU1YmY5NDUyZjBmMTE1ZjA3ZjUuLmVhZDI1
YmNhODM5YmZiZWU2OTRiZTliYTJhZDNjYjlkYzI0NWQyMTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkCkBAIC0yODQsMyArMjg0LDYgQEAgZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbW9kZS1w
YXJhZ3JhcGgta2V5cy1uYXZpZ2F0aW9uLmh0bWwKICMgVGhpcyB0ZXN0IGlzIGZhaWxpbmcgb24g
dGhlIExlb3BhcmQgSW50ZWwgRGVidWcgYnVpbGRib3QKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxODA3CiBmYXN0L2Jsb2NrZmxvdy9icm9rZW4taWRlb2dyYXBo
LXNtYWxsLWNhcHMuaHRtbAorCisjIFJlcXVpcmVzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBzdXBw
b3J0CitmYXN0L2FuaW1hdGlvbi8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDk0NTVlNTJh
NWI0NjhkNWUxZWQxYjFmYjcxZTE3YmI2ZWVjYzQzOTEuLjM3MmVmYzU0NzRlZjkxZjJkYzc4NGU3
NGEwYjI3MjZjY2JhYTMzYjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtNTM2OSw2ICs1
MzY5LDkgQEAgZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtYmlkaS1maXJzdC1hbmQtbGFzdC1sZXR0
ZXJzLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTU1
CiBmYXN0L3RleHQvZW1waGFzaXMtYXZvaWQtcnVieS5odG1sCiAKKyMgUmVxdWlyZXMgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIHN1cHBvcnQKK2Zhc3QvYW5pbWF0aW9uLworCiAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjU3OAogIyBbUXRdIERSVCBzaWRlZWZmZWN0
IHJldmVhbGVkIGJ5IHI2MzY1NyBhbmQgcjc1MzA1CiBmYXN0L3Rva2VuaXplci9mbHVzaC1jaGFy
YWN0ZXJzLWluLWRvY3VtZW50LXdyaXRlLWV2aWwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAppbmRleCA0Y2Q2ZTI4NzU3M2YwYmI1NmIzMjY1MzE3OTJmNzQyNzM1ODNlOGVkLi40MmJkNDFk
ZTNiYjFlNTVmZGEwMzQ0OWIzZGM0MTQzNDIyYmExNDcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tp
cHBlZApAQCAtMTExNCwzICsxMTE0LDYgQEAgZmFzdC9sb2FkZXIvdXNlci1zdHlsZXNoZWV0LWZh
c3QtcGF0aC5odG1sCiAKICMgRFJUIGRvZXMgbm90IHN1cHBvcnQgdG9nZ2xpbmcgY2FyZXQgYnJv
d3Npbmcgb24gLyBvZmYKIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWtl
eXMtbmF2aWdhdGlvbi5odG1sCisKKyMgUmVxdWlyZXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHN1
cHBvcnQKK2Zhc3QvYW5pbWF0aW9uLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY3ZmI3N2Y3MjgzYjE4YWViNTEx
NzQzYjFiNWRkZTI2MTllOWE2NTIuLjdlNzA2NjVhMDQ3ODBlNDAzNGFlOGYzOTMwOWIxMTdhYTUx
YjFkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw3MSBAQAogMjAxMS0wMS0xMSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBtb3ppbGxhJ3MgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTEyMTgKKworICAgICAgICBUaGlzIGltcGxlbWVudHMgbW96aWxsYSdzIHByb3Bvc2VkIHJl
cXVlc3RBbmltYXRpb25GcmFtZSBBUEkuICBUaGUgaWRlYSB3aXRoIHRoaXMgQVBJIGlzIHRoYXQK
KyAgICAgICAgYW4gYXV0aG9yIGRyaXZpbmcgYW4gYW5pbWF0aW9uIGZyb20gc2NyaXB0IGNvdWxk
IHVzZSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKQorICAgICAgICBpbnN0
ZWFkIG9mIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAwKSB0byBzY2hlZHVsZSB0aGVpciB1
cGRhdGUgbG9naWMgYW5kIGxldCB0aGUgYnJvd3NlcgorICAgICAgICBkZWNpZGUgd2hlbiB0byB1
cGRhdGUgdGhlIGFuaW1hdGlvbnMuICBUaGlzIGF2b2lkcyBkb2luZyB1bm5lY2Vzc2FyeSB3b3Jr
IHdoZW4gdGhlIHBhZ2UgY29udGVudAorICAgICAgICBpcyBvZmZzY3JlZW4gb3IgaXMgYmVpbmcg
ZGlzcGxheWVkIGF0IGEgZGlmZmVyZW50IGZyYW1lcmF0ZSB0aGFuIHdoYXQgdGhlIHBhZ2UgYXV0
aG9yIGV4cGVjdHMuCisKKyAgICAgICAgTW96aWxsYSdzIHByb3Bvc2FsIGlzIGhlcmU6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlv
bkZyYW1lCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlv
bkZyYW1lIGFzIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd2l0aCB0aGUKKyAg
ICAgICAgZm9sbG93aW5nIGNoYW5nZXM6CisgICAgICAgICopIE9ubHkgdGhlIGNhbGxiYWNrIHN5
bnRheCBpcyBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5vIGJlZm9yZSBwYWludCBldmVudAorICAgICAg
ICAqKSB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc3VwcG9ydHMgYSBzZWNvbmQgcGFyYW1l
dGVyIEVsZW1lbnQgdG8gbGV0IHRoZSBhdXRob3IgaW5kaWNhdGUKKyAgICAgICAgICAgIHdoYXQg
Y29udGVudCB0aGV5IGludGVuZCB0byBhbmltYXRlLiAgVGhhdCB3YXkgaWYgdGhlIHBhZ2UgaXMg
YmVpbmcgZGlzcGxheWVkIGJ1dCB0aGUgZWxlbWVudAorICAgICAgICAgICAgaW4gcXVlc3Rpb24g
aXMgb2Zmc2NyZWVuLCB3ZSBjYW4gYXZvaWQgaW52b2tpbmcgdGhlIGNhbGxiYWNrLgorICAgICAg
ICAqKSBObyB0aW1lc3RhbXAgaXMgcHJvdmlkZWQgdG8gdGhlIGNhbGxlciBhbmQgdGhlcmUgaXMg
bm8gd2luZG93LmFuaW1hdGlvblN0YXJ0VGltZSBwcm9wZXJ0eQorICAgICAgICAgICAgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE5NTIgZm9yIGRpc2N1c3Np
b24gb2YgdGhpcyBwcm9wZXJ0eSkKKyAgICAgICAgKikgd2luZG93LndlYmtpdFJlcXVlc3RBbmlt
YXRpb25GcmFtZSByZXR1cm5zIGEgbnVtZXJpY2FsIGlkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2Fu
Y2VsIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgdXNpbmcgd2luZG93LmNhbmNlbFdlYmtpdFJl
cXVlc3RBbmltYXRpb25GcmFtZSwgdG8gcGFyYWxsZWwgd2luZG93LnNldFRpbWVvdXQoKS93aW5k
b3cuY2xlYXJUaW1lKCkuCisKKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZHMgb24g
dGhlIGVtYmVkZGVyIHNjaGVkdWxpbmcgdGhlIGNhbGxiYWNrcyBzaW5jZSB0aGUgY2FsbGJhY2sg
aW52b2NhdGlvbgorICAgICAgICBkZXBlbmRzIG9uIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBhbmQg
dGhlIGVtYmVkZGVyJ3MgcGFpbnQgc2NoZWR1bGluZywgbmVpdGhlciBvZiB3aGljaCBhcmUgZXhw
b3NlZAorICAgICAgICB0byBXZWJDb3JlLiAgVGhlIGV4cGVjdGF0aW9uIGZvciB0aGUgZW1iZWRk
ZXIgaXMgdGhhdCBhdCBzb21lIHBvaW50IENocm9tZTo6c2NoZWR1bGVBbmltYXRpb24oKSBpcwor
ICAgICAgICBjYWxsZWQgRnJhbWVWaWV3OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkgc2hv
dWxkIGJlIGNhbGxlZCBmb3IgdGhlIGFzc29jaWF0ZWQgUGFnZSdzIG1haW4gZnJhbWUuCisgICAg
ICAgIElkZWFsbHkgc2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucygpIHdvdWxkIGJlIGNhbGxlZCBw
cmlvciB0byByZW5kZXJpbmcgLSBhbHRob3VnaCBpbiBwcmFjdGljZSB0aGUKKyAgICAgICAgZW1i
ZWRkZXIgaGFzIHRvIHJhdGUgbGltaXQgY2FsbGJhY2tzIGFuZCBtYXkgbm90IGJlIGFibGUgdG8g
dGllIHRoZSBjYWxsYmFjayBkaXJlY3RseSB0byB0aGUKKyAgICAgICAgcmVuZGVyaW5nIGxvb3Au
CisKKyAgICAgICAgVGVzdHM6IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1l
LWNhbmNlbC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1h
dGlvbi1mcmFtZS1jYW5jZWwyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3Jl
cXVlc3QtYW5pbWF0aW9uLWZyYW1lLWRpc3BsYXkuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9h
bmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtd2l0aGluLWNhbGxiYWNrLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLmh0bWwK
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2s6On5SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayk6CisgICAgICAgICogZG9t
L1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbDogQWRkZWQuCisgICAgICAgICogbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6
OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWU6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXRDYW5j
ZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6Cisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2NoZWR1bGVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cu
aDoKKworMjAxMS0wMS0xMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KIAogICAgICAgICBTZXQgYWxs
IFJlbmRlckJsb2NrcyBhcyByZXBsYWNlZCB3aGVuIGFuIGlubGluZSBkaXNwbGF5IHR5cGUgaXMg
c3BlY2lmaWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODNlNTVkNDZkN2M5NjkzNzNhNjFhYjg3NWU5
MThlMDQ4MTc1ZjY5MC4uMzdkN2IyOTI1M2Q2NDY5MTlmYzk1ZWQyZmNkMzdjYTgzMGIzZTk2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzUsNiArNzUsNyBAQAogICAgICAgICAgICAgJ2RvbS9Qcm9n
cmVzc0V2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1JhbmdlLmlkbCcsCiAgICAgICAgICAg
ICAnZG9tL1JhbmdlRXhjZXB0aW9uLmlkbCcsCisgICAgICAgICAgICAnZG9tL1JlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrLmlkbCcsCiAgICAgICAgICAgICAnZG9tL1RleHQuaWRsJywKICAg
ICAgICAgICAgICdkb20vVGV4dEV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1RvdWNoLmlk
bCcsCkBAIC0xMzE0LDYgKzEzMTUsNyBAQAogICAgICAgICAgICAgJ2RvbS9SYW5nZS5oJywKICAg
ICAgICAgICAgICdkb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgnLAogICAgICAgICAgICAgJ2RvbS9S
YW5nZUV4Y2VwdGlvbi5oJywKKyAgICAgICAgICAgICdkb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oJywK
ICAgICAgICAgICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAgICAg
ICAgICdkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCAxZTEyOTU4ZTBiZDBhMWJlOTdmMjY4ZWZiYWYwYzQzMzExMjU4ZTYyLi5lNjJiZTdj
Y2RkZTJiZWIxN2E5NmNiMTI3ZDFmMzM0YjMwZWNhNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTIwNyw2ICsyMDcsMTAgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNpbmNsdWRlICJS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBA
IC00MjUsNiArNDI5LDkgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3Qg
S1VSTCYgdXJsLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MLCBjb24KICAgICAsIG1fbG9hZEV2
ZW50RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJGaXJlZCkK
ICAgICAsIG1fZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX3dy
aXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQorICAgICwgbV9uZXh0UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJh
Y2tJZCgwKQorI2VuZGlmCiB7CiAgICAgbV9kb2N1bWVudCA9IHRoaXM7CiAKQEAgLTQ5NDcsNiAr
NDk1NCw4NiBAQCB2b2lkIERvY3VtZW50Ojpsb2FkRXZlbnREZWxheVRpbWVyRmlyZWQoVGltZXI8
RG9jdW1lbnQ+KikKICAgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7
CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitpbnQgRG9jdW1lbnQ6
OndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25G
cmFtZUNhbGxiYWNrPiBjYWxsYmFjaywgRWxlbWVudCogZSkKK3sKKyAgICBpZiAoIW1fcmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKQorICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFt
ZUNhbGxiYWNrcyA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0xpc3Q7CisgICAg
aW50IGlkID0gbV9uZXh0UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tJZCsrOworICAgIGNh
bGxiYWNrLT5tX2ZpcmVkT3JDYW5jZWxsZWQgPSBmYWxzZTsKKyAgICBjYWxsYmFjay0+bV9pZCA9
IGlkOworICAgIGNhbGxiYWNrLT5tX2VsZW1lbnQgPSBlOworICAgIG1fcmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2tzLT5hcHBlbmQoY2FsbGJhY2spOworICAgIGlmIChGcmFtZVZpZXcqIHYg
PSB2aWV3KCkpCisgICAgICAgIHYtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgcmV0dXJuIGlk
OworfQorCit2b2lkIERvY3VtZW50Ojp3ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
aW50IGlkKQoreworICAgIGlmICghbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MpCisg
ICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVxdWVzdEFuaW1h
dGlvbkZyYW1lQ2FsbGJhY2tzLT5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9yZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPmF0KGkpLT5tX2lkID09IGlkKSB7CisgICAgICAgICAg
ICBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcy0+YXQoaSktPm1fZmlyZWRPckNhbmNl
bGxlZCA9IHRydWU7CisgICAgICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
cy0+cmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIERvY3VtZW50OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkKK3sKKyAgICBpZiAo
IW1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gV2Ugd2FudCB0byBydW4gdGhlIGNhbGxiYWNrIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIGRv
Y3VtZW50IHRoYXQgaGF2ZSByZWdpc3RlcmVkCisgICAgLy8gZm9yIGEgY2FsbGJhY2sgYW5kIHRo
YXQgYXJlIHZpc2libGUuICBSdW5uaW5nIHRoZSBjYWxsYmFja3MgY2FuIGNhdXNlIG5ldyBjYWxs
YmFja3MKKyAgICAvLyB0byBiZSByZWdpc3RlcmVkLCBleGlzdGluZyBjYWxsYmFja3MgdG8gYmUg
Y2FuY2VsbGVkLCBhbmQgZWxlbWVudHMgdG8gZ2FpbiBvciBsb3NlCisgICAgLy8gdmlzaWJpbGl0
eSBzbyB0aGlzIGNvZGUgaGFzIHRvIGl0ZXJhdGUgY2FyZWZ1bGx5LgorCisgICAgLy8gRklYTUU6
IEN1cnJlbnRseSwgdGhpcyBjb2RlIGRvZXNuJ3QgZG8gYW55IHZpc2liaWxpdHkgdGVzdHMgYmV5
b25kIGNoZWNraW5nIGRpc3BsYXk6CisKKyAgICAvLyBGaXJzdCwgZ2VuZXJhdGUgYSBsaXN0IG9m
IGNhbGxiYWNrcyB0byBjb25zaWRlci4gIENhbGxiYWNrcyByZWdpc3RlcmVkIGZyb20gdGhpcyBw
b2ludAorICAgIC8vIG9uIGFyZSBjb25zaWRlcmVkIG9ubHkgZm9yIHRoZSAibmV4dCIgZnJhbWUs
IG5vdCB0aGlzIG9uZS4KKyAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0xpc3QgY2Fs
bGJhY2tzKCptX3JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcyk7CisKKyAgICAvLyBGaXJp
bmcgdGhlIGNhbGxiYWNrIG1heSBjYXVzZSB0aGUgdmlzaWJpbGl0eSBvZiBvdGhlciBlbGVtZW50
cyB0byBjaGFuZ2UuICBUbyBhdm9pZAorICAgIC8vIG1pc3NpbmcgYW55IGNhbGxiYWNrcywgd2Ug
a2VlcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBjYW5kaWF0ZSBjYWxsYmFja3MgYW5k
IGZpcmluZworICAgIC8vIHRoZW0gdW50aWwgbm90aGluZyBuZXcgYmVjb21lcyB2aXNpYmxlLgor
ICAgIGJvb2wgZmlyZWRDYWxsYmFjazsKKyAgICBkbyB7CisgICAgICAgIGZpcmVkQ2FsbGJhY2sg
PSBmYWxzZTsKKyAgICAgICAgLy8gQSBwcmV2aW91cyBpdGVyYXRpb24gbWF5IGhhdmUgaW52YWxp
ZGF0ZWQgc3R5bGUgKG9yIGxheW91dCkuICBVcGRhdGUgc3R5bGVzIGZvciBlYWNoIGl0ZXJhdGlv
bgorICAgICAgICAvLyBmb3Igbm93IHNpbmNlIGFsbCB3ZSBjaGVjayBpcyB0aGUgZXhpc3RlbmNl
IG9mIGEgcmVuZGVyZXIuCisgICAgICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrKiBjYWxsYmFjayA9IGNhbGxiYWNrc1tp
XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghY2FsbGJhY2stPm1fZmlyZWRPckNhbmNlbGxlZCAm
JiAoIWNhbGxiYWNrLT5tX2VsZW1lbnQgfHwgY2FsbGJhY2stPm1fZWxlbWVudC0+cmVuZGVyZXIo
KSkpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+bV9maXJlZE9yQ2FuY2VsbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKKyAgICAgICAgICAg
ICAgICBmaXJlZENhbGxiYWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjYWxsYmFja3MucmVt
b3ZlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSB3aGlsZSAoZmlyZWRDYWxsYmFjayk7CisKKyAgICAvLyBSZW1vdmUgYW55IGNhbGxi
YWNrcyB3ZSBmaXJlZCBmcm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcgY2FsbGJhY2tzLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MtPnNp
emUoKTspIHsKKyAgICAgICAgaWYgKG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLT5h
dChpKS0+bV9maXJlZE9yQ2FuY2VsbGVkKQorICAgICAgICAgICAgbV9yZXF1ZXN0QW5pbWF0aW9u
RnJhbWVDYWxsYmFja3MtPnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKytp
OworICAgIH0KKworICAgIC8vIEluIG1vc3QgY2FzZXMgd2UgZXhwZWN0IHRoaXMgbGlzdCB0byBi
ZSBlbXB0eSwgc28gbm8gbmVlZCB0byBrZWVwIGFyb3VuZCB0aGUgdmVjdG9yJ3MgaW5saW5lIGJ1
ZmZlci4KKyAgICBpZiAoIW1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLT5zaXplKCkp
CisgICAgICAgIG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzLmNsZWFyKCk7CisgICAg
ZWxzZSBpZiAoRnJhbWVWaWV3KiB2ID0gdmlldygpKQorICAgICAgICB2LT5zY2hlZHVsZUFuaW1h
dGlvbigpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogUGFzc1JlZlB0
cjxUb3VjaD4gRG9jdW1lbnQ6OmNyZWF0ZVRvdWNoKERPTVdpbmRvdyogd2luZG93LCBFdmVudFRh
cmdldCogdGFyZ2V0LCBpbnQgaWRlbnRpZmllciwgaW50IHBhZ2VYLCBpbnQgcGFnZVksIGludCBz
Y3JlZW5YLCBpbnQgc2NyZWVuWSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCmluZGV4IGZiMWFlMzFhNTdkODViNzUwZjMyNzdkYjQ5MmJmMzQ0YTQ4ZmUxNGIuLjI3
NGMxYjlhNGRmNDdmNWFhZGZmYjNmYTgwY2U2ODdmZGI2Nzk4OTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCkBAIC0xNDcsNiArMTQ3LDEwIEBAIGNsYXNzIFRvdWNoOwogY2xhc3MgVG91Y2hMaXN0Owog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitjbGFzcyBSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKKyNlbmRpZgorCiB0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwogCiBjbGFzcyBGb3JtRWxlbWVudEtleSB7CkBAIC0xMDcyLDYgKzEwNzYsMTIgQEAg
cHVibGljOgogCiAgICAgY29uc3QgRG9jdW1lbnRUaW1pbmcqIHRpbWluZygpIGNvbnN0IHsgcmV0
dXJuICZtX2RvY3VtZW50VGltaW5nOyB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCisgICAgaW50IHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiwgRWxlbWVudCopOworICAgIHZvaWQgd2Via2l0
Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCk7CisgICAgdm9pZCBzZXJ2aWNlU2Ny
aXB0ZWRBbmltYXRpb25zKCk7CisjZW5kaWYKKwogICAgIGJvb2wgbWF5Q2F1c2VGbGFzaE9mVW5z
dHlsZWRDb250ZW50KCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRETlNQcmVmZXRjaCgpOwpAQCAt
MTM5MSw2ICsxNDAxLDEyIEBAIHByaXZhdGU6CiAKICAgICBEb2N1bWVudFRpbWluZyBtX2RvY3Vt
ZW50VGltaW5nOwogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gbV9tZWRpYVF1ZXJ5TWF0
Y2hlcjsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+ID4gUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2tMaXN0OworICAgIE93blB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJh
bWVDYWxsYmFja0xpc3Q+IG1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzOworICAgIGlu
dCBtX25leHRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0lkOworI2VuZGlmCiB9OwogCiBp
bmxpbmUgYm9vbCBEb2N1bWVudDo6RG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWlucyhBdG9taWNT
dHJpbmdJbXBsKiBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE5ZTQ5NTZlYTNkZWVmYTY0ZWJj
NTBiNzIzMDMwNmQ4YTc1ODI4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrX2gKKyNkZWZpbmUgUmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2tfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRXZlbnQoKSA9IDA7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50
OworICAgIGludCBtX2lkOworICAgIGJvb2wgbV9maXJlZE9yQ2FuY2VsbGVkOworfTsKKworfQor
CisjZW5kaWYgLy8gUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tfaAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrLmlkbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZDIzMmU1ZjRjOGJiMWE4MmFkY2ZkZmNjOGUyMzVhNWQzZGI0YmRmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrLmlkbApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seSxDb25kaXRpb25hbD1SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRQorICAgIF0gUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2t7CisgICAgICAgIGJv
b2xlYW4gaGFuZGxlRXZlbnQoKTsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCmluZGV4IGU0Y2VmYzU0YWEwNzc2Yjk3NmZhNjFjMzRhMDBhNWI2NTA1MjcyZjkuLjVh
NmJkYTA5ZDc2ZGNkMjExYzMxZTI2ZjgwMTQwODI1ZDgxYTYxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKQEAgLTE1Nyw2ICsxNTcsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVhbCB2b2lkIGRlbGVnYXRlZFNjcm9sbFJl
cXVlc3RlZChjb25zdCBJbnRTaXplJikgeyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgeyB9
CisjZW5kaWYKIAogICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50
UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93
VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgeyByZXR1cm4gcjsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCmluZGV4IGE4MDEwNjUwZGUyNDNkZjVjYjhlODYwMmVhYzE3ZDliZGVjMzJjYjgu
LjNkYTlkMTU3ZWU1MmYxMTk1NWQ4ZTMwMzY5Y2Y5YTFkMTQ3M2E4YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAKQEAgLTQ0OCw2ICs0NDgsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKICAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAK
KyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENocm9tZTo6c2NoZWR1
bGVBbmltYXRpb24oKQoreworICAgIG1fY2xpZW50LT5zY2hlZHVsZUFuaW1hdGlvbigpOworfQor
I2VuZGlmCisKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKIE5vdGlmaWNhdGlvblByZXNlbnRl
ciogQ2hyb21lOjpub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmgKaW5kZXggOTNiOGM0YTcxMmQ2N2YwODBhMjU0Yjc3ZTBmYTZiMzNmYjRjMjg5Yi4uMGFmZDgw
N2RkMGQ2YzNlNmJkZTYwMGE5YWUwZmNmMWYwNTdlZGFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBA
IC03OCw2ICs3OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBQbGF0
Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7Cisj
ZW5kaWYKIAogICAgICAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDY3ZTEzMjUyYThkNGU5
MTc2MWM1MzIwYmNlYWM2MjlmZGU5ZDc5MTIuLmUzNDhhZmJjYTRmYzY4ZDQ4NGIwYTljZjY1MjNk
ZmRmMTc4YjM4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMTUxLDYgKzE1
MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VD
bGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgPSAwOworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkg
PSAwOworI2VuZGlmCiAgICAgICAgIC8vIEVuZCBtZXRob2RzIHVzZWQgYnkgSG9zdFdpbmRvdy4K
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29u
c3QgVmlld3BvcnRBcmd1bWVudHMmKSBjb25zdCB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAppbmRleCAwMjE0MGQ1ODY2ZjU0MjU3YjI5NjU3OTUxYzkxM2QxMmE0MzQyMDQ1Li44MzJlOTU2
NWZiMjIzZGU5ZTcyMDZiNTQyMDlhOWU0MWY5NWRhYzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC0xMDUsNiArMTA1LDEwIEBACiAjaW5jbHVkZSAiTG9jYWxGaWxlU3lzdGVtLmgi
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNpbmNsdWRl
ICJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIgorI2VuZGlmCisKIHVzaW5nIHN0ZDo6
bWluOwogdXNpbmcgc3RkOjptYXg7CiAKQEAgLTE0NjQsNiArMTQ2OCwyMSBAQCB2b2lkIERPTVdp
bmRvdzo6Y2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKQogICAgIERPTVRpbWVyOjpyZW1vdmVC
eUlkKGNvbnRleHQsIHRpbWVvdXRJZCk7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCitpbnQgRE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFz
c1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gY2FsbGJhY2ssIEVsZW1lbnQq
IGUpCit7CisgICAgaWYgKERvY3VtZW50KiBkID0gZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IGQtPndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaywgZSk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgRE9NV2luZG93Ojp3ZWJraXRDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoaW50IGlkKQoreworICAgIGlmIChEb2N1bWVudCogZCA9IGRvY3VtZW50KCkpCisgICAgICAg
IGQtPndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZShpZCk7Cit9CisjZW5kaWYKKwog
Ym9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKIHsKICAgICBpZiAoIUV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwg
bGlzdGVuZXIsIHVzZUNhcHR1cmUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggOWU3MmRl
YzMxOGExMTA1MDQwYzk2NjBhMWU1ZGIxMzk1YzlmNzgzMC4uMzY2YjQ4NTk0MjBiZjY4MWYxNDUy
MTA5ZDI3NzAyODU0MmMxMTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC02NCw2ICs2
NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU3R5bGVNZWRpYTsKICAgICBj
bGFzcyBXZWJLaXRQb2ludDsKIAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
KyAgICBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKKyNlbmRpZgorCiAgICAg
c3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
QEAgLTIzNyw2ICsyNDEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgc2V0
SW50ZXJ2YWwoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGltZW91dCwgRXhjZXB0
aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGNsZWFySW50ZXJ2YWwoaW50IHRpbWVvdXRJZCk7CiAK
KyAgICAgICAgLy8gV2ViS2l0IGFuaW1hdGlvbiBleHRlbnNpb25zCisjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBpbnQgd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZy
YW1lKFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+LCBFbGVtZW50Kik7
CisgICAgICAgIHZvaWQgd2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBpZCk7
CisjZW5kaWYKKwogICAgICAgICAvLyBFdmVudHMKICAgICAgICAgLy8gRXZlbnRUYXJnZXQgQVBJ
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDM4OWQ1ZWRhNDAwNmRjZjU4ODU3OWU2
NjIyNjMwYmI4YzAyYWY5MzYuLjdjN2NlMThlMGU4YjkxYzU2ZWIyZjJhMmYzZTEwZjU3ZjE5Yjg1
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTIzNSw2ICsyMzUsMTIgQEAgbW9k
dWxlIHdpbmRvdyB7CiAgICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gRE9N
U3RyaW5nIGNvZGUsIGluIGxvbmcgdGltZW91dCk7CiAgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZh
bChpbiBsb25nIGhhbmRsZSk7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKKyAgICAgICAgLy8gV2ViS2l0IGFuaW1hdGlvbiBleHRlbnNpb25zCisgICAgICAg
IGxvbmcgd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGluIFtDYWxsYmFja10gUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2sgY2FsbGJhY2ssIGluIEVsZW1lbnQgZWxlbWVudCk7CisgICAg
ICAgIHZvaWQgd2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGluIGxvbmcgaWQpOwor
I2VuZGlmCisKICAgICAgICAgLy8gQmFzZTY0CiAgICAgICAgIERPTVN0cmluZyBhdG9iKGluIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHN0cmluZykKICAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc3ZTE5
NzYyZjE0YjQwMTMxNzZlMjU3ZDc4ODY4MWI3NWU3MWY4ZWIuLjdiMzVjMjliNGNkNDJjYjk0MDMy
YmQxYTc1MWYyZjY3MzAyYjkzZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTM0
Miw2ICszNDIsMTQgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0
JiBuZXdSZWN0KQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCit2b2lkIEZyYW1lVmlldzo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIGlmIChob3N0
V2luZG93KCkpCisgICAgICAgIGhvc3RXaW5kb3coKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKK30K
KyNlbmRpZgorCiB2b2lkIEZyYW1lVmlldzo6c2V0TWFyZ2luV2lkdGgoaW50IHcpCiB7CiAgICAg
Ly8gbWFrZSBpdCB1cGRhdGUgdGhlIHJlbmRlcmluZyBhcmVhIHdoZW4gc2V0CkBAIC0xNjM5LDYg
KzE2NDcsMTQgQEAgdm9pZCBGcmFtZVZpZXc6OnVuc2NoZWR1bGVSZWxheW91dCgpCiAgICAgbV9k
ZWxheWVkTGF5b3V0ID0gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCit2b2lkIEZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucygpCit7Cisg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNl
cnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoKTsKK30KKyNlbmRpZgorCiBib29sIEZyYW1lVmlldzo6
aXNUcmFuc3BhcmVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNUcmFuc3BhcmVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IGEyZjU4MTViNGU1NWUwMDI3YmE4YjQyZWJkMDRkZTdm
MDU4Yzg3N2EuLjRmZmFiYzY2NDY0NDg4MDYzYjQzMjI4NmRmNjA1OTFhOTBhMjRhNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCisgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOworI2VuZGlmCiAK
ICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lLmdldCgpOyB9CiAgICAg
dm9pZCBjbGVhckZyYW1lKCk7CkBAIC05Nyw2ICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBuZWVkc0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9kb0Z1bGxSZXBhaW50OyB9CiAK
KyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCBzZXJ2aWNlU2Ny
aXB0ZWRBbmltYXRpb25zKCk7CisjZW5kaWYKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCA3ODgyZDQ4ZmI0YzI5MWJiMjM0ZjQ3YTgxODRjZTBh
YWY4ZjE5ZDVhLi40NWM4ODdiNjNkNjU4ODAwZjkzN2EyZjhmMzMyOWQxOGE4OGZhNWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC02Niw2ICs2NiwxMCBAQCBwdWJsaWM6
CiAKICAgICAvLyBSZXF1ZXN0IHRoYXQgdGhlIGN1cnNvciBjaGFuZ2UuCiAgICAgdmlydHVhbCB2
b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSA9IDA7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAw
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTljY2Q3YTM0ZTA5MDc3ZTQyNjBj
Yzg2YjczNTc5Y2IxMmU2ZGU1OC4uNzhlZGNlMjczZjc4NDI2N2I4ODM2OGVhMzcwZWVlN2ExOWYw
MDliNyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDExLTAxLTExICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IG1vemlsbGEncyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTIxOAorCisgICAgICAg
IENocm9taXVtIER1bXBSZW5kZXJUcmVlIHN1cHBvcnQgZm9yIHdpbmRvdy53ZWJraXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5jcHA6CisgICAgICAgIChpbnZva2VTY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAg
IChXZWJWaWV3SG9zdDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViVmlld0hvc3Q6
OnBhaW50SW52YWxpZGF0ZWRSZWdpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlZpZXdIb3N0Lmg6CisKIDIwMTEtMDEtMTEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggZjVkZDdmZGJjNTM5YzE0YzM4ZjFhYmFmYmM2
YWNmYWU3Mzc1ZmEzOS4uOWIxZDg1YWVlMjg1Mzk4NzBlNGE1ODZkNzEzNWE3ZTU0MDE3MjU4MyAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAt
NjI0LDYgKzYyNCwxOSBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiAg
ICAgZGlkSW52YWxpZGF0ZVJlY3QoY2xpZW50UmVjdCk7CiB9CiAKKyNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCitzdGF0aWMgdm9pZCBpbnZva2VTY2hlZHVsZUNvbXBvc2l0ZSh2
b2lkKiBjb250ZXh0KQoreworICAgIFdlYlZpZXdIb3N0KiB3dmggPSBzdGF0aWNfY2FzdDxXZWJW
aWV3SG9zdCo+KGNvbnRleHQpOworICAgIHd2aC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKK30KKwor
dm9pZCBXZWJWaWV3SG9zdDo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIHdlYmtpdF9zdXBw
b3J0OjpQb3N0RGVsYXllZFRhc2soaW52b2tlU2NoZWR1bGVDb21wb3NpdGUsIHRoaXMsIDApOwor
fQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEZvY3VzKCkKIHsKICAgICBtX3NoZWxs
LT5zZXRGb2N1cyh3ZWJXaWRnZXQoKSwgdHJ1ZSk7CkBAIC0xNDM4LDYgKzE0NTEsOSBAQCB2b2lk
IFdlYlZpZXdIb3N0OjpwYWludFJlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkKIAogdm9pZCBXZWJW
aWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpCiB7CisjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQorICAgIHdlYldpZGdldCgpLT5hbmltYXRlKCk7CisjZW5kaWYKICAg
ICB3ZWJXaWRnZXQoKS0+bGF5b3V0KCk7CiAgICAgV2ViU2l6ZSB3aWRnZXRTaXplID0gd2ViV2lk
Z2V0KCktPnNpemUoKTsKICAgICBXZWJSZWN0IGNsaWVudFJlY3QoMCwgMCwgd2lkZ2V0U2l6ZS53
aWR0aCwgd2lkZ2V0U2l6ZS5oZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmgKaW5kZXggODZjMjNhNTYwN2JkODAyMTg1MmI1YjFlOWE0YWRlMDE2ZGM5
OGU3NS4uMzczZWVhYzk1MTMxNDFkMDQ0OGJjMGQ1OTdmZTM1YmZiYjU0ZWU4MyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCkBAIC0xNDcsNiArMTQ3LDkg
QEAgY2xhc3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJs
aWMgV2ViS2l0OjpXZWJGcmFtZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0
ZVJlY3QoY29uc3QgV2ViS2l0OjpXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9s
bFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKKyNlbmRpZgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRCbHVyKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBXZWJLaXQ6OldlYkN1cnNv
ckluZm8mKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDlhNGI5YWRhNGE0MDk4NGFhYTJkYTcwYzlkNjc0Y2My
Nzc3NDIyOTEuLmM5ZjM0NzkxMjdhNzFmNjYxNzQ4MTUxMzEwZjg0NGMzZDg0OGYwMWQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTAxLTExICBKYW1lcyBSb2JpbnNvbiAgPGph
bWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IG1vemlsbGEncyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgQVBJ
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTIxOAor
CisgICAgICAgIENocm9taXVtIFdlYktpdCBBUEkgc3VwcG9ydCBmb3Igd2luZG93LndlYmtpdFJl
cXVlc3RBbmltYXRpb25GcmFtZSgpCisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVudDo6c2NoZWR1bGVBbmltYXRpb24p
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAqIHNyYy9DaHJv
bWVDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAqIHNyYy9X
ZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorCiAyMDExLTAxLTExICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCmluZGV4IDM3MmNjNWM1MDQwMDlmMTIzMTNiMTdlOThiYzI4NDdhYTI1NzkzY2QuLjdm
NGNkYTYxOTNmMDg5NzBhYzBiMWNjM2VkMzE1ZTkyMWQ2Nzc0YzEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5n
eXBpCkBAIC02OSw2ICs2OSw3IEBACiAgICAgICAgICdFTkFCTEVfT1BFTlRZUEVfU0FOSVRJWkVS
PTEnLAogICAgICAgICAnRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0wJywKICAgICAgICAgJ0VO
QUJMRV9QUk9HUkVTU19UQUc9MScsCisgICAgICAgICdFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05f
RlJBTUU9MScsCiAgICAgICAgICdFTkFCTEVfU0hBUkVEX1dPUktFUlM9MScsCiAgICAgICAgICdF
TkFCTEVfU1ZHPTEnLAogICAgICAgICAnRU5BQkxFX1NWR19BTklNQVRJT049MScsCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCBjY2FkMTM0ZjYzNGU4NGYzZmMwYjljNjQ0ZTY2MGZj
NjgwZjNlZjEyLi4zNmZiZjMxM2FkMTc0NjRjNDFkOGQ5MjdjYjIxMzJhZGFiNmFlODgxIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAg
ICAvLyBDYWxsZWQgdG8gcmVzaXplIHRoZSBXZWJXaWRnZXQuCiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJikgPSAwOwogCisgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBpbXBl
cmF0aXZlIGFuaW1hdGlvbiBzdGF0ZS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKKyAg
ICAvLyBwYWludCwgYWx0aG91Z2ggdGhlIGNsaWVudCBjYW4gcmF0ZS1saW1pdCB0aGVzZSBjYWxs
cy4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpID0gMDsKKwogICAgIC8vIENhbGxlZCB0byBs
YXlvdXQgdGhlIFdlYldpZGdldC4gIFRoaXMgTVVTVCBiZSBjYWxsZWQgYmVmb3JlIFBhaW50LAog
ICAgIC8vIGFuZCBpdCBtYXkgcmVzdWx0IGluIGNhbGxzIHRvIFdlYldpZGdldENsaWVudDo6ZGlk
SW52YWxpZGF0ZVJlY3QuCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpID0gMDsKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmggYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4IDM3MzQyNmRmNGY2OGM3MTM5MTNm
OWU3MjhjZTk5MDBkZTY2M2M3YWMuLjg1ZTQwMTVhNzFlN2U3YmE5ZWNkNjIwNzg3MDM5YmQ2ZTgz
NjRiMzMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaApAQCAtNTYs
NiArNTYsOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdl
dDo6Y29tcG9zaXRlIGlzIHJlcXVpcmVkCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRlKCkgeyB9CiAKKyAgICAvLyBDYWxsZWQgd2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojphbmlt
YXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgeyB9
CisKICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGFjcXVpcmVzIG9yIGxvc2VzIGZvY3Vz
LCByZXNwZWN0aXZlbHkuCiAgICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpZEJsdXIoKSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudElt
cGwuY3BwCmluZGV4IDFhOTg0YzEyZjM4OWIzZDFmNmYyZDRlYTI0Y2MxZTVlYjljYjJhMDguLjEw
ZDE4NGYzMmJhMWFjMWEyMGJhMGI2ZDlkZjAxOWEyMjJkMmQwNDQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTMyLDYgKzUzMiwxMyBAQCB2b2lkIENocm9t
ZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdAogICAgIGludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyh1cGRhdGVSZWN0
LCBpbW1lZGlhdGUpOwogfQogCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQor
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCit7CisgICAgbV93ZWJW
aWV3LT5jbGllbnQoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKK30KKyNlbmRpZgorCiB2b2lkIENo
cm9tZUNsaWVudEltcGw6OnNjcm9sbCgKICAgICBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwKICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggYjAyNGJjMDFlY2M5MDI0
YmNkY2I1MDUxMjg4YTMyYjM3MjIyMDQxZS4uNTdmZWI5MmUxZmM4MGQ2NmRkM2I5NWRlMjMxMjky
NDJmZDFjOGNiZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKQEAgLTEw
NSw2ICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVXaW5kb3co
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBib29sKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisjZW5kaWYKICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsKAogICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvU2Nyb2xsLAogICAgICAgICBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1
cE1lbnVJbXBsLmNwcAppbmRleCA2M2ViZWQ4MDliZWZiMDRlODBmNjQzMTM2ZmJkMzFkN2U4YzY5
MjcxLi5hMjA5ZTZhMmE4ODY2MGMxMmViMzZmZDEyNjBhOTAzODEyYmZhYTdmIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE1MSw2ICsxNTEsMTAgQEAgdm9p
ZCBXZWJQb3B1cE1lbnVJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICB9
CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6YW5pbWF0ZSgpCit7Cit9CisKIHZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6bGF5b3V0KCkKIHsKIH0KQEAgLTI5OSw2ICszMDMsMTAgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QKICAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3codXBkYXRl
UmVjdCwgaW1tZWRpYXRlKTsKIH0KIAordm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzY2hlZHVsZUFu
aW1hdGlvbigpCit7Cit9CisKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2Nyb2xsKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
b3B1cE1lbnVJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApp
bmRleCBiOGVmN2JhOGU0Yjk5ZmVlOTA0YjhmYjY3OTNkNmU2NjI5ZTJhYjQ5Li45YmYxNGQ1OTA0
YWNkYmQ4NGY3MTQ3N2MxNDVjNWNmMDY5Y2NmZWU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNsb3NlKCk7CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOwogICAgIHZp
cnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKQEAgLTEwNSw2ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVXaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
Q29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsKAogICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwKICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA0NGVm
ZWVhNjJhMjRiMjg0MTc2YTdmNjFjYjk0ZWM4NjI2M2U0OGYwLi42ODUxMzgxYWYzZDBlNWM5M2Vh
MWY2Yzc1OGExMDNmNDg5YzVkNjUwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtOTczLDYgKzk3MywxOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKICNlbmRpZgogfQogCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKCkKK3sK
KyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgV2ViRnJhbWVJbXBsKiB3
ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBpZiAod2ViZnJhbWUpIHsKKyAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAgICAgICBpZiAodmll
dykKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoKTsKKyAgICB9
CisjZW5kaWYKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKIHsKICAgICBXZWJGcmFt
ZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCmluZGV4IGM5ZWNjMTZjY2EwYzA2MzAxYTA5Y2Q0MDcwYTM4MjBhYzYxOGU4NGMuLmVkNzgy
OTIzODU3ZTRlZTNjOGZmOTgzNTY1MTE5NzgzNmEzYzNmNzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKQEAgLTkyLDYgKzkyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CisgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVD
aGFuZ2VkKCk7Cg==
</data>
<flag name="review"
          id="69950"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="69967"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>